@ -56,50 +56,78 @@ HYUNDAI_VERSION_RESPONSE = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x4
TOYOTA_VERSION_REQUEST = b ' \x1a \x88 \x01 '
TOYOTA_VERSION_REQUEST = b ' \x1a \x88 \x01 '
TOYOTA_VERSION_RESPONSE = b ' \x5a \x88 \x01 '
TOYOTA_VERSION_RESPONSE = b ' \x5a \x88 \x01 '
VOLKSWAGEN_VERSION_REQUEST_MULTI = bytes ( [ uds . SERVICE_TYPE . READ_DATA_BY_IDENTIFIER ] ) + \
p16 ( uds . DATA_IDENTIFIER_TYPE . VEHICLE_MANUFACTURER_SPARE_PART_NUMBER ) + \
p16 ( uds . DATA_IDENTIFIER_TYPE . VEHICLE_MANUFACTURER_ECU_SOFTWARE_VERSION_NUMBER ) + \
p16 ( uds . DATA_IDENTIFIER_TYPE . APPLICATION_DATA_IDENTIFICATION )
VOLKSWAGEN_VERSION_RESPONSE = bytes ( [ uds . SERVICE_TYPE . READ_DATA_BY_IDENTIFIER + 0x40 ] )
OBD_VERSION_REQUEST = b ' \x09 \x04 '
OBD_VERSION_REQUEST = b ' \x09 \x04 '
OBD_VERSION_RESPONSE = b ' \x49 \x04 '
OBD_VERSION_RESPONSE = b ' \x49 \x04 '
DEFAULT_RX_OFFSET = 0x8
VOLKSWAGEN_RX_OFFSET = 0x6a
# supports subaddressing, request, response
# brand, request, response, response offset
REQUESTS = [
REQUESTS = [
# Hundai
# Hy undai
(
(
" hyundai " ,
" hyundai " ,
[ HYUNDAI_VERSION_REQUEST_SHORT ] ,
[ HYUNDAI_VERSION_REQUEST_SHORT ] ,
[ HYUNDAI_VERSION_RESPONSE ] ,
[ HYUNDAI_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
) ,
(
(
" hyundai " ,
" hyundai " ,
[ HYUNDAI_VERSION_REQUEST_LONG ] ,
[ HYUNDAI_VERSION_REQUEST_LONG ] ,
[ HYUNDAI_VERSION_RESPONSE ] ,
[ HYUNDAI_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
) ,
(
(
" hyundai " ,
" hyundai " ,
[ HYUNDAI_VERSION_REQUEST_MULTI ] ,
[ HYUNDAI_VERSION_REQUEST_MULTI ] ,
[ HYUNDAI_VERSION_RESPONSE ] ,
[ HYUNDAI_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
) ,
# Honda
# Honda
(
(
" honda " ,
" honda " ,
[ UDS_VERSION_REQUEST ] ,
[ UDS_VERSION_REQUEST ] ,
[ UDS_VERSION_RESPONSE ] ,
[ UDS_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
) ,
# Toyota
# Toyota
(
(
" toyota " ,
" toyota " ,
[ SHORT_TESTER_PRESENT_REQUEST , TOYOTA_VERSION_REQUEST ] ,
[ SHORT_TESTER_PRESENT_REQUEST , TOYOTA_VERSION_REQUEST ] ,
[ SHORT_TESTER_PRESENT_RESPONSE , TOYOTA_VERSION_RESPONSE ] ,
[ SHORT_TESTER_PRESENT_RESPONSE , TOYOTA_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
) ,
(
(
" toyota " ,
" toyota " ,
[ SHORT_TESTER_PRESENT_REQUEST , OBD_VERSION_REQUEST ] ,
[ SHORT_TESTER_PRESENT_REQUEST , OBD_VERSION_REQUEST ] ,
[ SHORT_TESTER_PRESENT_RESPONSE , OBD_VERSION_RESPONSE ] ,
[ SHORT_TESTER_PRESENT_RESPONSE , OBD_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
) ,
(
(
" toyota " ,
" toyota " ,
[ TESTER_PRESENT_REQUEST , DEFAULT_DIAGNOSTIC_REQUEST , EXTENDED_DIAGNOSTIC_REQUEST , UDS_VERSION_REQUEST ] ,
[ TESTER_PRESENT_REQUEST , DEFAULT_DIAGNOSTIC_REQUEST , EXTENDED_DIAGNOSTIC_REQUEST , UDS_VERSION_REQUEST ] ,
[ TESTER_PRESENT_RESPONSE , DEFAULT_DIAGNOSTIC_RESPONSE , EXTENDED_DIAGNOSTIC_RESPONSE , UDS_VERSION_RESPONSE ] ,
[ TESTER_PRESENT_RESPONSE , DEFAULT_DIAGNOSTIC_RESPONSE , EXTENDED_DIAGNOSTIC_RESPONSE , UDS_VERSION_RESPONSE ] ,
)
DEFAULT_RX_OFFSET ,
) ,
# Volkswagen
(
" volkswagen " ,
[ VOLKSWAGEN_VERSION_REQUEST_MULTI ] ,
[ VOLKSWAGEN_VERSION_RESPONSE ] ,
VOLKSWAGEN_RX_OFFSET ,
) ,
(
" volkswagen " ,
[ VOLKSWAGEN_VERSION_REQUEST_MULTI ] ,
[ VOLKSWAGEN_VERSION_RESPONSE ] ,
DEFAULT_RX_OFFSET ,
) ,
]
]
@ -173,12 +201,12 @@ def get_fw_versions(logcan, sendcan, bus, extra=None, timeout=0.1, debug=False,
fw_versions = { }
fw_versions = { }
for i , addr in enumerate ( tqdm ( addrs , disable = not progress ) ) :
for i , addr in enumerate ( tqdm ( addrs , disable = not progress ) ) :
for addr_chunk in chunks ( addr ) :
for addr_chunk in chunks ( addr ) :
for brand , request , response in REQUESTS :
for brand , request , response , response_offset in REQUESTS :
try :
try :
addrs = [ ( a , s ) for ( b , a , s ) in addr_chunk if b in ( brand , ' any ' ) ]
addrs = [ ( a , s ) for ( b , a , s ) in addr_chunk if b in ( brand , ' any ' ) ]
if addrs :
if addrs :
query = IsoTpParallelQuery ( sendcan , logcan , bus , addrs , request , response , debug = debug )
query = IsoTpParallelQuery ( sendcan , logcan , bus , addrs , request , response , response_offset , debug = debug )
t = 2 * timeout if i == 0 else timeout
t = 2 * timeout if i == 0 else timeout
fw_versions . update ( query . get_data ( t ) )
fw_versions . update ( query . get_data ( t ) )
except Exception :
except Exception :