{"id":1181,"date":"2024-11-25T11:42:29","date_gmt":"2024-11-25T10:42:29","guid":{"rendered":"https:\/\/itb-solutions.de\/?page_id=1181"},"modified":"2025-05-27T08:06:24","modified_gmt":"2025-05-27T06:06:24","slug":"hilmux","status":"publish","type":"page","link":"https:\/\/itb-solutions.de\/en\/produkte\/hilmux\/","title":{"rendered":"HILmux"},"content":{"rendered":"<p class=\"PageTitleFooter\">Testautomation and Quality assurance<\/p>\n\n\n\n<div class=\"wp-block-columns alignfull is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Product describtion<\/h3>\n\n\n\n<p>In CI test system very often the device under test will be set to a known state by flashing a base software using a debugger before starting the test. Normally the runtime of the test itself is much larger than flashing the base software itself. For running for example smoke tests in an CI environment multiple DUT instances are available and can be used for tests in parallel. The HILmux can be used to connect one debugger instance to multiple DUT instances in such use case.<\/p>\n\n\n\n<p><br>HILmux select and establish the connection from one or more Debugger instances to multiple embedded DUT instances and\/ or to different SOC per DUT instance<br>Measurement of the reference voltage of the different connected DUTs\/ SOCs to get their power status<br>Use the HILmux to repair a DUT within the testfarm which has been \u201eupdate bricked\u201c after running a failed test. Just select the Debugger connection to the \u201ebricked\u201c DUT using the HILmux to perform a developer flash.<br>Controllable over USB<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"features\">Features<\/h4>\n\n\n\n<p>For development and measurement purposes \u201especial tools\u201c are available to readout and\/ or change memory regions within the DUT. Those tools use the same debugg interface like a \u201eclassic debugger\u201c. If these \u201especial tools\u201c are part of your automated tests HILmux gives you the flexibility to connect the \u201especial tool\u201c or the \u201eclassic debugger\u201c to the DUT.<br>Very often an integration test combining many different embedded control units connected to each other is executed in many test cycles to prove the needed stability within this interconnected setup. Here it can happen that you run in the rarely situation that one of the devices within the interconnection hangs. HILmux can is this case remotely setup a debugger connection within the complex testsetup to the DUT within the integration test setup to debug the problem remotely at the affected embedded control unit.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"sie-benotigen-andere-schnittstellen\">On-demand <\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Type of connector used at Device under Test PCB and debugger connection<\/li>\n\n\n\n<li>Configurable quantity of available connections to DUT<\/li>\n\n\n\n<li>Configurable quantity of available Debugger instances<\/li>\n\n\n\n<li>Support of different Debugger types at the same time<\/li>\n\n\n\n<li>Shape, size and mount holes can be adapted to the mechanical needs for your test setup<\/li>\n\n\n\n<li>Please <a href=\"https:\/\/itb-solutions.de\/blog\/produktinteresse\/#hilmux\">sent out your needed configuration to our support<\/a> to get an offer.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-left\" id=\"dokumente-downloads\">Documents &amp; Downloads<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2025\/05\/hilmux-configurator.zip\">HILmux update application<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/hilmux-python-examples-3c86fcbf.zip\">Python script examples<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2025\/03\/HILmux_API-1.1.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">HILmux API<\/a><\/li>\n\n\n\n<li> <a href=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2023\/12\/HILmux_UseCases.pdf\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Presentation Use-Cases<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fur-eine-unverbindliche-anfrage-kontaktieren-sie-uns-uber-unser-kontaktformular\"><a href=\"https:\/\/itb-solutions.de\/blog\/produktinteresse\/#hilmate_pro\" target=\"_blank\" rel=\"noreferrer noopener\">For a non-binding inquiry, please contact us via our contact form.<\/a><\/h3>\n\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\"><div class=\"wp-block-image media-1\">\n<figure class=\"aligncenter size-medium is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"181\" src=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/HILmux_Produktfoto_freigestellt_2-300x181.jpg\" alt=\"\" class=\"wp-image-1179\" style=\"width:543px;height:auto\" srcset=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/HILmux_Produktfoto_freigestellt_2-300x181.jpg 300w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/HILmux_Produktfoto_freigestellt_2-1024x619.jpg 1024w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/HILmux_Produktfoto_freigestellt_2-768x465.jpg 768w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/HILmux_Produktfoto_freigestellt_2-1536x929.jpg 1536w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2024\/11\/HILmux_Produktfoto_freigestellt_2-2048x1239.jpg 2048w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption class=\"wp-element-caption\">Example configuration HILmux<\/figcaption><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-large media-1 is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"325\" src=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2023\/12\/HILmux_backview_panel-1024x325.png\" alt=\"\" class=\"wp-image-1152\" srcset=\"https:\/\/itb-solutions.de\/wp-content\/uploads\/2023\/12\/HILmux_backview_panel-1024x325.png 1024w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2023\/12\/HILmux_backview_panel-300x95.png 300w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2023\/12\/HILmux_backview_panel-768x244.png 768w, https:\/\/itb-solutions.de\/wp-content\/uploads\/2023\/12\/HILmux_backview_panel.png 1143w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">HILmux backview configuration example<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<!--\n  HTML-Module (Copyright \u00a9 2020 ITB-Solutions GmbH)\n  VISUAL EDITING OF PARAGRAPHS FOR ADMINS\n-->\n\n<script>\nconst veopModuleDisabled = false;\ndocument.addEventListener('DOMContentLoaded', () => {\n  if(veopModuleDisabled) return;\n  \/\/ Don't offer this for viewers without admin bar\n  if(document.getElementById('wpadminbar') == null) return;\n  for(let el of document.querySelectorAll('.entry-content p')) {\n    el.setAttribute('contenteditable', true);\n  }\n});\n<\/script>\n\n\n\n<!--\n  HTML-Module (Copyright \u00a9 2020 ITB-Solutions GmbH)\n  WP FEATHERLIGHT FOR NORMAL IMAGES\n-->\n\n<script>\nfunction indexOf(nodes, node) {\n  for(let i = 0; i < nodes.length; i++) {\n    if(nodes[i] == node)\n      return i;\n  }\n  return -1;\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  let selector = '.wp-block-image'; \/\/ All Image-Blocks\n  for(let el of document.querySelectorAll(selector)) {\n    let img = el.querySelector('img');\n    let imgParent = img.parentNode;\n    let imgParentImgIndex = indexOf(imgParent.childNodes, img);\n    let adjecentFollowing = imgParentImgIndex == imgParent.childNodes.length - 1 ? null : imgParent.childNodes[imgParentImgIndex + 1];\n\n    imgParent.removeChild(img);\n    let linkWrapper = document.createElement('a');\n    linkWrapper.href = img.src;\n    linkWrapper.dataset['featherlight'] = 'image';\n    linkWrapper.insertBefore(img, null); \/\/ img into a\n    imgParent.insertBefore(linkWrapper, adjecentFollowing);\n  }\n});\n<\/script>\n\n\n\n<!--\n  HTML-Module (Copyright \u00a9 2020 ITB-Solutions GmbH)\n  PRODUCT PAGE MEDIA PLACEMENT AND STYLE FIXES\n-->\n\n<script>\n  \/\/ Full width (style) is at 600px\n  \/\/ Pictures are moving at 782px\nconst DESKTOP_MODE_WIDTH = 782;\n\nfunction isMobileSize() {\n  return document.body.scrollWidth < DESKTOP_MODE_WIDTH;\n}\n\nfunction getScreenCordinates(obj) {\n  \/\/ Source: https:\/\/www.aspsnippets.com\/Articles\/Get-Absolute-Position-Screen-Cordinates-of-HTML-Elements-using-JavaScript.aspx\n  var p = {};\n  p.x = obj.offsetLeft;\n  p.y = obj.offsetTop;\n  while (obj.offsetParent) {\n    p.x = p.x + obj.offsetParent.offsetLeft;\n    p.y = p.y + obj.offsetParent.offsetTop;\n    if (obj == document.getElementsByTagName(\"body\")[0]) {\n      break;\n    }\n    else {\n      obj = obj.offsetParent;\n    }\n  }\n  return p;\n}\n\nfunction getRelatedElements() {\n  let contentElements = [];\n  let mediaElements = [];\n  for(let el of document.getElementsByTagName('*')) {\n    let isContent = false;\n    let isMedia = false;\n    let num = 0;\n    for(let className of el.classList) {\n      let setNum = false;\n      if(className.startsWith('content-')) {\n        isContent = setNum = true;\n        if(setNum) {\n          num = parseInt(className.split('-')[1]);\n          if(isNaN(num))\n          isContent = false; \/\/ Wrong element\n      }\n      }\n      if(className.startsWith('media-'))\n        isMedia = setNum = true;\n      if(setNum) {\n        num = parseInt(className.split('-')[1]);\n        if(isNaN(num))\n          isContent = isMedia = false; \/\/ Wrong element\n      }\n    }\n    \/\/ isContent xor isMedia = true\n    \/\/ weird written because &#038;&#038; seems to cause \n    \/\/ problems in wordpress html element\n    if(!isContent) { if(!isMedia) { continue; } }\n    if(isContent) { if(isMedia) { continue; } }\n    \n    let elementsRef = isContent ? contentElements : mediaElements;\n    if(elementsRef.length + 1 != num)\n      throw 'Error when enumerating elements!';\n    elementsRef.push(el);\n  }\n\n  if(contentElements.length != mediaElements.length)\n    throw 'Different amount of Content- and Media-Elements!';\n\n  let allElements = [];\n  for(let i = 0; i < contentElements.length; i++) {\n    allElements.push([ contentElements[i], mediaElements[i] ]);\n  }\n  return allElements;\n}\n\nfunction alignRelatedElements() {\n  for(let related of getRelatedElements()) {\n    let mediaEl = related[1];\n    mediaEl.style.paddingTop = '';\n    let [ contentElPos, mediaElPos ] = related.map((el) => getScreenCordinates(el));\n    if(contentElPos.y > mediaElPos.y)\n      mediaEl.style.paddingTop = (contentElPos.y - mediaElPos.y) + 'px';\n  }\n}\n\nlet lastMobileState = false;\nlet desktopMediaPlaceholders = [];\nlet lastWidth = 0;\nlet lastUpdate = 0;\nlet frequentUpdates = false;\n\nfunction updateRelatedElements() {\n  let currentMobileState = isMobileSize();\n  if(currentMobileState != lastMobileState) {\n    if(currentMobileState) {\n      \/\/ Changed to mobile size\n      desktopMediaPlaceholders = [];\n      for(let [ contentEl, mediaEl ] of getRelatedElements()) {\n        mediaEl.style.paddingTop = ''; \/\/ Remove any padding\n        \/\/ This element is just for internal purposes\n        let placeholderEl = document.createElement('span');\n        placeholderEl.style.display = 'none';\n        desktopMediaPlaceholders.push(placeholderEl);\n        \/\/ Move placeholder element before media element\n        mediaEl.parentNode.insertBefore(placeholderEl, mediaEl);\n        \/\/ Move media element before content element\n        contentEl.parentNode.insertBefore(mediaEl, contentEl);\n        \/\/ Since media element is moved, placeholder element\n        \/\/ is now at same position as media element\n      }\n    }else {\n      \/\/ Changed to desktop size\n      let relatedElements = getRelatedElements();\n      if(relatedElements.length != desktopMediaPlaceholders.length)\n        throw 'Can't move media elements back to original positions!';\n      \n      for(let i = 0; i < relatedElements.length; i++) {\n        let mediaEl = relatedElements[i][1];\n        let placeholderEl = desktopMediaPlaceholders[i];\n        placeholderEl.parentNode.insertBefore(mediaEl, placeholderEl);\n        placeholderEl.parentNode.removeChild(placeholderEl);\n        \/\/ media element is now at original position\n        \/\/ and placeholder element deleted\n      }\n      desktopMediaPlaceholders = [];\n    }\n\n    lastMobileState = currentMobileState;\n  }\n  \n  if(currentMobileState == false) {\n    let width = document.body.scrollWidth;\n    if(frequentUpdates || width != lastWidth || new Date()*1 - lastUpdate > 500) {\n      alignRelatedElements();\n      lastWidth = width;\n      lastUpdate = new Date() * 1; \/\/ Timestamp in ms\n    }\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  updateRelatedElements();\n  if(document.getElementById('wpadminbar') != null)\n    frequentUpdates = true;\n  setInterval(updateRelatedElements, 50);\n});\n<\/script>\n\n<style>\n.no-sidebar .entry-content > .alignfull {\n  width: unset; \/* Fix bugged padding when columns are full width *\/\n}\n\n@media (min-width:600px) and (max-width:781px) {\n .wp-block-column:first-child {\n  flex-basis: 100% !important;\n  margin-left: 20px;\n  margin-right: 20px;\n }\n}\n<\/style>\n\n\n<p><!-- \/wp:post-content --><\/p>\n<p><!-- wp:html \/--><\/p>\n<p><!-- wp:paragraph --><\/p>\n<p><!-- \/wp:paragraph --><\/p>","protected":false},"excerpt":{"rendered":"<p>Testautomation and Quality assurance Product describtion In CI test system very often the device under test will be set to a known state by flashing a base software using a &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":526,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1181","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/pages\/1181","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/comments?post=1181"}],"version-history":[{"count":27,"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/pages\/1181\/revisions"}],"predecessor-version":[{"id":1493,"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/pages\/1181\/revisions\/1493"}],"up":[{"embeddable":true,"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/pages\/526"}],"wp:attachment":[{"href":"https:\/\/itb-solutions.de\/en\/wp-json\/wp\/v2\/media?parent=1181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}