279279 OBDCommand ("GET_CURRENT_DTC" , "Get DTCs from the current/last driving cycle" , b"07" , 0 , dtc , ECU .ALL , False ),
280280]
281281
282+
283+ __mode9__ = [
284+ # name description cmd bytes decoder ECU fast
285+ OBDCommand ("PIDS_9A" , "Supported PIDs [01-20]" , b"0900" , 7 , pid , ECU .ALL , True ),
286+ OBDCommand ("VIN_MESSAGE_COUNT" , "VIN Message Count" , b"0901" , 3 , count , ECU .ENGINE , True ),
287+ OBDCommand ("VIN" , "Vehicle Identification Number" , b"0902" , 22 , encoded_string (17 ), ECU .ENGINE , True ),
288+ OBDCommand ("CALIBRATION_ID_MESSAGE_COUNT" ,"Calibration ID message count for PID 04" , b"0903" , 3 , count , ECU .ALL , True ),
289+ OBDCommand ("CALIBRATION_ID" , "Calibration ID" , b"0904" , 18 , encoded_string (16 ), ECU .ALL , True ),
290+ OBDCommand ("CVN_MESSAGE_COUNT" , "CVN Message Count for PID 06" , b"0905" , 3 , count , ECU .ALL , True ),
291+ OBDCommand ("CVN" , "Calibration Verification Numbers" , b"0906" , 10 , cvn , ECU .ALL , True ),
292+
293+ #
294+ # NOTE: The following are untested
295+ #
296+ # OBDCommand("PERF_TRACKING_MESSAGE_COUNT", "Performance tracking message count" , b"0907", 3, count, ECU.ALL, True),
297+ # OBDCommand("PERF_TRACKING_SPARK" , "In-use performance tracking (spark ignition)" , b"0908", 4, raw_string, ECU.ALL, True),
298+ # OBDCommand("ECU_NAME_MESSAGE_COUNT" , "ECU Name Message Count for PID 0A" , b"0909", 3, count, ECU.ALL, True),
299+ # OBDCommand("ECU_NAME" , "ECU Name" , b"090a", 20, raw_string, ECU.ALL, True),
300+ # OBDCommand("PERF_TRACKING_COMPRESSION" , "In-use performance tracking (compression ignition)", b"090b", 4, raw_string, ECU.ALL, True),
301+ ]
302+
282303__misc__ = [
283304 OBDCommand ("ELM_VERSION" , "ELM327 version string" , b"ATI" , 0 , raw_string , ECU .UNKNOWN , False ),
284305 OBDCommand ("ELM_VOLTAGE" , "Voltage detected by OBD-II adapter" , b"ATRV" , 0 , elm_voltage , ECU .UNKNOWN , False ),
@@ -303,6 +324,7 @@ def __init__(self):
303324 __mode6__ ,
304325 __mode7__ ,
305326 [],
327+ __mode9__ ,
306328 ]
307329
308330 # allow commands to be accessed by name
@@ -350,6 +372,7 @@ def base_commands(self):
350372 """
351373 return [
352374 self .PIDS_A ,
375+ self .PIDS_9A ,
353376 self .MIDS_A ,
354377 self .GET_DTC ,
355378 self .CLEAR_DTC ,
0 commit comments