From 2c95e9a73472f67d9249017efde391c85ac2d3fd Mon Sep 17 00:00:00 2001 From: "Prunier, Thierry" <100034799@gehealthcare.com> Date: Wed, 22 Oct 2025 16:05:11 +0200 Subject: [PATCH 1/4] FIX: Some hardware ID are not compatible with ascii, in that case fallback to guid --- can/interfaces/ixxat/canlib_vcinpl.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/can/interfaces/ixxat/canlib_vcinpl.py b/can/interfaces/ixxat/canlib_vcinpl.py index 7c4becafd..4f7f3e01d 100644 --- a/can/interfaces/ixxat/canlib_vcinpl.py +++ b/can/interfaces/ixxat/canlib_vcinpl.py @@ -519,15 +519,19 @@ def __init__( f"Unique HW ID {unique_hardware_id} not connected or not available." ) from None else: - if (unique_hardware_id is None) or ( - self._device_info.UniqueHardwareId.AsChar - == bytes(unique_hardware_id, "ascii") + try: + hwid = self._device_info.UniqueHardwareId.AsChar.decode("ascii") + except: + guid = self._device_info.UniqueHardwareId.AsGuid + hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format(guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex()) + + if (unique_hardware_id is None) or ( bytes(hwid, "ascii") == bytes(unique_hardware_id, "ascii") ): break log.debug( "Ignoring IXXAT with hardware id '%s'.", - self._device_info.UniqueHardwareId.AsChar.decode("ascii"), + hwid, ) _canlib.vciEnumDeviceClose(self._device_handle) @@ -541,7 +545,7 @@ def __init__( f"Could not open device: {exception}" ) from exception - log.info("Using unique HW ID %s", self._device_info.UniqueHardwareId.AsChar) + log.info("Using unique HW ID %s", hwid) log.info( "Initializing channel %d in shared mode, %d rx buffers, %d tx buffers", @@ -969,7 +973,11 @@ def get_ixxat_hwids(): except StopIteration: break else: - hwids.append(device_info.UniqueHardwareId.AsChar.decode("ascii")) + try: + hwids.append(device_info.UniqueHardwareId.AsChar.decode("ascii")) + except: + guid = device_info.UniqueHardwareId.AsGuid + hwids.append('{{{0:x}-{1:x}-{2:x}-{3}}}'.format(guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex())) _canlib.vciEnumDeviceClose(device_handle) return hwids @@ -994,7 +1002,11 @@ def _detect_available_configs() -> Sequence["AutoDetectedIxxatConfig"]: except StopIteration: break else: - hwid = device_info.UniqueHardwareId.AsChar.decode("ascii") + try: + hwid = device_info.UniqueHardwareId.AsChar.decode("ascii") + except: + guid = device_info.UniqueHardwareId.AsGuid + hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format(guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex()) _canlib.vciDeviceOpen( ctypes.byref(device_info.VciObjectId), ctypes.byref(device_handle2), From 6684e37b31c2d047d5d45f00eb03e6f8a1d5d22f Mon Sep 17 00:00:00 2001 From: "Prunier, Thierry" <100034799@gehealthcare.com> Date: Thu, 23 Oct 2025 08:20:58 +0200 Subject: [PATCH 2/4] Format code with Black for lint compliance --- can/interfaces/ixxat/canlib_vcinpl.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/can/interfaces/ixxat/canlib_vcinpl.py b/can/interfaces/ixxat/canlib_vcinpl.py index 4f7f3e01d..838a1939f 100644 --- a/can/interfaces/ixxat/canlib_vcinpl.py +++ b/can/interfaces/ixxat/canlib_vcinpl.py @@ -523,9 +523,12 @@ def __init__( hwid = self._device_info.UniqueHardwareId.AsChar.decode("ascii") except: guid = self._device_info.UniqueHardwareId.AsGuid - hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format(guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex()) + hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format( + guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex() + ) - if (unique_hardware_id is None) or ( bytes(hwid, "ascii") == bytes(unique_hardware_id, "ascii") + if (unique_hardware_id is None) or ( + bytes(hwid, "ascii") == bytes(unique_hardware_id, "ascii") ): break @@ -977,7 +980,9 @@ def get_ixxat_hwids(): hwids.append(device_info.UniqueHardwareId.AsChar.decode("ascii")) except: guid = device_info.UniqueHardwareId.AsGuid - hwids.append('{{{0:x}-{1:x}-{2:x}-{3}}}'.format(guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex())) + hwids.append('{{{0:x}-{1:x}-{2:x}-{3}}}'.format( + guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex()) + ) _canlib.vciEnumDeviceClose(device_handle) return hwids @@ -1006,7 +1011,9 @@ def _detect_available_configs() -> Sequence["AutoDetectedIxxatConfig"]: hwid = device_info.UniqueHardwareId.AsChar.decode("ascii") except: guid = device_info.UniqueHardwareId.AsGuid - hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format(guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex()) + hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format( + guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex() + ) _canlib.vciDeviceOpen( ctypes.byref(device_info.VciObjectId), ctypes.byref(device_handle2), From 48a420b47f267363b1774df4dce224fbf1b5a5d7 Mon Sep 17 00:00:00 2001 From: "Prunier, Thierry" <100034799@gehealthcare.com> Date: Thu, 23 Oct 2025 09:04:58 +0200 Subject: [PATCH 3/4] Format code with Black for lint compliance --- can/interfaces/ixxat/canlib_vcinpl.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/can/interfaces/ixxat/canlib_vcinpl.py b/can/interfaces/ixxat/canlib_vcinpl.py index 838a1939f..2f0232fef 100644 --- a/can/interfaces/ixxat/canlib_vcinpl.py +++ b/can/interfaces/ixxat/canlib_vcinpl.py @@ -523,12 +523,12 @@ def __init__( hwid = self._device_info.UniqueHardwareId.AsChar.decode("ascii") except: guid = self._device_info.UniqueHardwareId.AsGuid - hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format( - guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex() + hwid = "{{{0:x}-{1:x}-{2:x}-{3}}}".format( + guid.Data1, guid.Data2, guid.Data3, guid.Data4.hex() ) - - if (unique_hardware_id is None) or ( - bytes(hwid, "ascii") == bytes(unique_hardware_id, "ascii") + + if (unique_hardware_id is None) or ( + bytes(hwid, "ascii") == bytes(unique_hardware_id, "ascii") ): break @@ -980,8 +980,10 @@ def get_ixxat_hwids(): hwids.append(device_info.UniqueHardwareId.AsChar.decode("ascii")) except: guid = device_info.UniqueHardwareId.AsGuid - hwids.append('{{{0:x}-{1:x}-{2:x}-{3}}}'.format( - guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex()) + hwids.append( + "{{{0:x}-{1:x}-{2:x}-{3}}}".format( + guid.Data1, guid.Data2, guid.Data3, guid.Data4.hex() + ) ) _canlib.vciEnumDeviceClose(device_handle) @@ -1011,8 +1013,8 @@ def _detect_available_configs() -> Sequence["AutoDetectedIxxatConfig"]: hwid = device_info.UniqueHardwareId.AsChar.decode("ascii") except: guid = device_info.UniqueHardwareId.AsGuid - hwid = '{{{0:x}-{1:x}-{2:x}-{3}}}'.format( - guid.Data1,guid.Data2,guid.Data3,guid.Data4.hex() + hwid = "{{{0:x}-{1:x}-{2:x}-{3}}}".format( + guid.Data1, guid.Data2, guid.Data3, guid.Data4.hex() ) _canlib.vciDeviceOpen( ctypes.byref(device_info.VciObjectId), From d0db538ea150c3a21a8a0ec88cb06877f3bc7efd Mon Sep 17 00:00:00 2001 From: "Prunier, Thierry" <100034799@gehealthcare.com> Date: Thu, 23 Oct 2025 09:25:59 +0200 Subject: [PATCH 4/4] Format code with ruff for lint compliance --- can/interfaces/ixxat/canlib_vcinpl.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/can/interfaces/ixxat/canlib_vcinpl.py b/can/interfaces/ixxat/canlib_vcinpl.py index 2f0232fef..307cf1d12 100644 --- a/can/interfaces/ixxat/canlib_vcinpl.py +++ b/can/interfaces/ixxat/canlib_vcinpl.py @@ -521,11 +521,9 @@ def __init__( else: try: hwid = self._device_info.UniqueHardwareId.AsChar.decode("ascii") - except: + except UnicodeDecodeError: guid = self._device_info.UniqueHardwareId.AsGuid - hwid = "{{{0:x}-{1:x}-{2:x}-{3}}}".format( - guid.Data1, guid.Data2, guid.Data3, guid.Data4.hex() - ) + hwid = f"{{{guid.Data1:x}-{guid.Data2:x}-{guid.Data3:x}-{guid.Data4.hex()}}}" if (unique_hardware_id is None) or ( bytes(hwid, "ascii") == bytes(unique_hardware_id, "ascii") @@ -978,12 +976,10 @@ def get_ixxat_hwids(): else: try: hwids.append(device_info.UniqueHardwareId.AsChar.decode("ascii")) - except: + except UnicodeDecodeError: guid = device_info.UniqueHardwareId.AsGuid hwids.append( - "{{{0:x}-{1:x}-{2:x}-{3}}}".format( - guid.Data1, guid.Data2, guid.Data3, guid.Data4.hex() - ) + f"{{{guid.Data1:x}-{guid.Data2:x}-{guid.Data3:x}-{guid.Data4.hex()}}}" ) _canlib.vciEnumDeviceClose(device_handle) @@ -1011,11 +1007,9 @@ def _detect_available_configs() -> Sequence["AutoDetectedIxxatConfig"]: else: try: hwid = device_info.UniqueHardwareId.AsChar.decode("ascii") - except: + except UnicodeDecodeError: guid = device_info.UniqueHardwareId.AsGuid - hwid = "{{{0:x}-{1:x}-{2:x}-{3}}}".format( - guid.Data1, guid.Data2, guid.Data3, guid.Data4.hex() - ) + hwid = f"{{{guid.Data1:x}-{guid.Data2:x}-{guid.Data3:x}-{guid.Data4.hex()}}}" _canlib.vciDeviceOpen( ctypes.byref(device_info.VciObjectId), ctypes.byref(device_handle2),