@@ -98,7 +98,7 @@ def __init__(self, channel=None, can_filters=None, **config):
9898
9999 self .channel_info = '%s %s CH:%s' % (
100100 self .dev .Name ,
101- self .dev . SerialNumber ,
101+ self .get_serial_number ( self . dev ) ,
102102 channel
103103 )
104104 logger .info ("Using device: {}" .format (self .channel_info ))
@@ -117,6 +117,23 @@ def __init__(self, channel=None, can_filters=None, **config):
117117 ics .NEOVI6_VCAN_TIMESTAMP_1 , ics .NEOVI6_VCAN_TIMESTAMP_2
118118 )
119119
120+ @staticmethod
121+ def get_serial_number (device ):
122+ """Decode (if needed) and return the ICS device serial string
123+
124+ :param device: ics device
125+ :return: ics device serial string
126+ :rtype: str
127+ """
128+ def to_base36 (n , alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ):
129+ return (to_base36 (n // 36 ) + alphabet [n % 36 ]).lstrip ("0" ) \
130+ if n > 0 else "0"
131+
132+ a0000 = 604661760
133+ if device .SerialNumber >= a0000 :
134+ return to_base36 (device .SerialNumber )
135+ return str (device .SerialNumber )
136+
120137 def shutdown (self ):
121138 super (NeoViBus , self ).shutdown ()
122139 self .opened = False
@@ -129,7 +146,7 @@ def _open_device(self, type_filter=None, serial=None):
129146 devices = ics .find_devices ()
130147
131148 for device in devices :
132- if serial is None or str (device . SerialNumber ) == str (serial ):
149+ if serial is None or self . get_serial_number (device ) == str (serial ):
133150 dev = device
134151 break
135152 else :
0 commit comments