| % Regression tests for the OBD layer |
| |
| # More information at http://www.secdev.org/projects/UTscapy/ |
| |
| |
| ############ |
| ############ |
| |
| + Basic operations |
| |
| = Load module |
| load_contrib("automotive.obd.obd", globals_dict=globals()) |
| |
| = Check if positive response answers |
| |
| req = OBD(b'\x01\x2f') |
| res = OBD(b'\x41\x2f\x1a') |
| assert res.answers(req) |
| |
| |
| = Check hashret |
| |
| assert req.hashret() == res.hashret() |
| |
| = Check if negative response answers |
| |
| req = OBD(b'\x01\x2f') |
| res = OBD(b'\x7f\x01\x11') |
| assert res.answers(req) |
| |
| = Check if negative response request_correctly_received_response_pending answers not |
| |
| req = OBD(b'\x01\x2f') |
| res = OBD(b'\x7f\x01\x78') |
| assert not res.answers(req) |
| |
| = Check if negative response request_correctly_received_response_pending answers |
| |
| conf.contribs['OBD']['treat-response-pending-as-answer'] = True |
| |
| req = OBD(b'\x01\x2f') |
| res = OBD(b'\x7f\x01\x78') |
| assert res.answers(req) |
| |
| |
| = Check hashret |
| |
| assert req.hashret() == res.hashret() |
| |
| |
| = Check hashret for Service 0x40 |
| |
| req = OBD(b'\x40') |
| res = OBD(b'\x7F\x40\x11') |
| assert req.hashret() == res.hashret() |
| assert res.answers(req) |
| |
| |
| = Check hashret for Service 0x51 |
| |
| req = OBD(b'\x51') |
| res = OBD(b'\x7F\x51\x11') |
| assert req.hashret() == res.hashret() |
| assert res.answers(req) |
| |
| |
| = Check dissecting a request for Service 01 PID 00 |
| |
| p = OBD(b'\x01\x00') |
| assert p.service == 0x01 |
| assert p.pid[0] == 0x00 |
| |
| |
| = Check dissecting a request for Service 01 PID 75 |
| |
| p = OBD(b'\x01\x75') |
| assert p.service == 0x01 |
| assert p.pid[0] == 0x75 |
| |
| |
| = Check dissecting a request for Service 01 PID 78 |
| |
| |
| p = OBD(b'\x01\x78') |
| assert p.service == 0x01 |
| assert p.pid[0] == 0x78 |
| |
| |
| = Check dissecting a request for Service 01 PID 7F |
| |
| p = OBD(b'\x01\x7F') |
| assert p.service == 0x01 |
| assert p.pid[0] == 0x7F |
| |
| |
| = Check dissecting a request for Service 01 PID 89 |
| |
| p = OBD(b'\x01\x89') |
| assert p.service == 0x01 |
| assert p.pid[0] == 0x89 |
| |
| |
| = Check dissecting a request for Service 02 PID 00 |
| |
| p = OBD(b'\x02\x00\x01') |
| assert p.service == 0x02 |
| assert p.requests[0].pid == 0x00 |
| assert p.requests[0].frame_no == 0x01 |
| |
| |
| = Check dissecting a request for Service 02 PID 75 |
| |
| p = OBD(b'\x02\x75\x01') |
| assert p.service == 0x02 |
| assert p.requests[0].pid == 0x75 |
| assert p.requests[0].frame_no == 0x01 |
| |
| |
| = Check dissecting a request for Service 02 PID 78 |
| |
| p = OBD(b'\x02\x78\x01') |
| assert p.service == 0x02 |
| assert p.requests[0].pid == 0x78 |
| assert p.requests[0].frame_no == 0x01 |
| |
| |
| = Check dissecting a request for Service 02 PID 7F |
| |
| p = OBD(b'\x02\x7F\x01') |
| assert p.service == 0x02 |
| assert p.requests[0].pid == 0x7F |
| assert p.requests[0].frame_no == 0x01 |
| |
| |
| = Check dissecting a request for Service 02 PID 89 |
| |
| p = OBD(b'\x02\x89\x01') |
| assert p.service == 0x02 |
| assert p.requests[0].pid == 0x89 |
| assert p.requests[0].frame_no == 0x01 |
| |
| |
| = Check dissecting a request for Service 03 |
| |
| p = OBD(b'\x03') |
| assert p.service == 0x03 |
| |
| |
| = Check dissecting a request for Service 06 |
| |
| p = OBD(b'\x06\x01') |
| assert p.service == 0x06 |
| assert p.mid[0] == 0x01 |
| |
| |
| = Check dissecting a request for Service 06 MID 00 |
| |
| p = OBD(b'\x06\x00') |
| assert p.service == 0x06 |
| assert p.mid[0] == 0x00 |
| |
| |
| = Check dissecting a request for Service 06 MID 00,01,02,03,04 |
| |
| p = OBD(b'\x06\x00\x01\x02\x03\x04') |
| assert p.service == 0x06 |
| assert p.mid[0] == 0x00 |
| assert p.mid[1] == 0x01 |
| assert p.mid[2] == 0x02 |
| assert p.mid[3] == 0x03 |
| assert p.mid[4] == 0x04 |
| |
| |
| = Check dissecting a response for Service 06 MID 00 |
| |
| r = OBD(b'\x06\x00') |
| p = OBD(b'\x46\x00\x00\x00\x00\x00') |
| assert p.service == 0x46 |
| assert p.data_records[0].mid == 0x00 |
| assert p.data_records[0].supported_mids == "" |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 06 MID 00 and MID 20 |
| |
| r = OBD(b'\x06\x20\x00') |
| p = OBD(b'\x46\x00\x01\x02\x03\x04\x20\x01\x02\x03\x04') |
| assert p.service == 0x46 |
| assert p.data_records[0].mid == 0x00 |
| assert p.data_records[0].supported_mids == "MID1E+MID18+MID17+MID0F+MID08" |
| assert p.data_records[1].mid == 0x20 |
| assert p.data_records[1].supported_mids == "MID3E+MID38+MID37+MID2F+MID28" |
| assert p.answers(r) |
| r = OBD(b'\x06\x20\x00\x40\x60') |
| assert p.answers(r) |
| r = OBD(b'\x06\x20') |
| assert not p.answers(r) |
| |
| |
| = Check dissecting a response for Service 06 MID 00, 20, 40, 60, 80, A0 |
| |
| p = OBD(b'\x46\x00\x01\x02\x03\x04\x20\x01\x02\x03\x04\x40\x01\x02\x03\x04\x60\x01\x02\x03\x04\x80\x01\x02\x03\x04\xA0\x01\x02\x03\x04') |
| assert p.service == 0x46 |
| assert p.data_records[0].mid == 0x00 |
| assert p.data_records[0].supported_mids == "MID1E+MID18+MID17+MID0F+MID08" |
| assert p.data_records[1].mid == 0x20 |
| assert p.data_records[1].supported_mids == "MID3E+MID38+MID37+MID2F+MID28" |
| assert p.data_records[2].mid == 0x40 |
| assert p.data_records[2].supported_mids == "MID5E+MID58+MID57+MID4F+MID48" |
| assert p.data_records[3].mid == 0x60 |
| assert p.data_records[3].supported_mids == "MID7E+MID78+MID77+MID6F+MID68" |
| assert p.data_records[4].mid == 0x80 |
| assert p.data_records[4].supported_mids == "MID9E+MID98+MID97+MID8F+MID88" |
| assert p.data_records[5].mid == 0xA0 |
| assert p.data_records[5].supported_mids == "MIDBE+MIDB8+MIDB7+MIDAF+MIDA8" |
| assert len(p.data_records) == 6 |
| r = OBD(b'\x06\x00\x20\x40\x60\x80\xA0') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 06 MID 01 |
| |
| p = OBD(b'\x46\x01\x01\x0A\x0B\xB0\x0B\xB0\x0B\xB0\x01\x05\x10\x00\x48\x00\x00\x00\x64\x01\x85\x24\x00\x96\x00\x4B\xFF\xFF') |
| assert p.service == 0x46 |
| assert p.data_records[0].mid == 0x01 |
| assert p.data_records[0].standardized_test_id == 1 |
| assert p.data_records[0].unit_and_scaling_id == 10 |
| assert p.data_records[0].test_value == 365.024 |
| assert p.data_records[0].min_limit == 365.024 |
| assert p.data_records[0].max_limit == 365.024 |
| assert "Voltage" in p.data_records[0].__repr__() |
| assert "365.024 mV" in p.data_records[0].__repr__() |
| assert p.data_records[1].mid == 0x01 |
| assert p.data_records[1].standardized_test_id == 5 |
| assert p.data_records[1].unit_and_scaling_id == 16 |
| assert p.data_records[1].test_value == 72 |
| assert p.data_records[1].min_limit == 0 |
| assert p.data_records[1].max_limit == 100 |
| assert "Time" in p.data_records[1].__repr__() |
| assert "72 ms" in p.data_records[1].__repr__() |
| assert p.data_records[2].mid == 0x01 |
| assert p.data_records[2].standardized_test_id == 0x85 |
| assert p.data_records[2].unit_and_scaling_id == 0x24 |
| assert p.data_records[2].test_value == 150 |
| assert p.data_records[2].min_limit == 75 |
| assert p.data_records[2].max_limit == 65535 |
| assert "Counts" in p.data_records[2].__repr__() |
| assert "150 counts" in p.data_records[2].__repr__() |
| assert len(p.data_records) == 3 |
| r = OBD(b'\x06\x01') |
| assert p.answers(r) |
| r = OBD(b'\x06\x01\x01\x01') |
| assert p.answers(r) |
| r = OBD(b'\x06\x01\x02') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 06 MID 21 |
| |
| p = OBD(b'\x46\x21\x87\x2F\x00\x00\x00\x00\x00\x00') |
| p.show() |
| assert p.service == 0x46 |
| assert p.data_records[0].mid == 0x21 |
| assert p.data_records[0].standardized_test_id == 135 |
| assert p.data_records[0].unit_and_scaling_id == 0x2F |
| assert p.data_records[0].test_value == 0 |
| assert p.data_records[0].min_limit == 0 |
| assert p.data_records[0].max_limit == 0 |
| assert "Percent" in p.data_records[0].__repr__() |
| assert "0 %" in p.data_records[0].__repr__() |
| assert len(p.data_records) == 1 |
| r = OBD(b'\x06\x21') |
| assert p.answers(r) |
| |
| = Check dissecting a request for Service 09 IID 00 |
| |
| p = OBD(b'\x09\x00') |
| assert p.service == 0x09 |
| assert p.iid[0] == 0x00 |
| |
| |
| = Check dissecting a request for Service 09 IID 02 |
| |
| p = OBD(b'\x09\x02') |
| assert p.service == 0x09 |
| assert p.iid[0] == 0x02 |
| |
| |
| = Check dissecting a request for Service 09 IID 04 |
| |
| p = OBD(b'\x09\x04') |
| assert p.service == 0x09 |
| assert p.iid[0] == 0x04 |
| |
| |
| = Check dissecting a request for Service 09 IID 00 and IID 02 and IID 04 |
| |
| p = OBD(b'\x09\x00\x02\x04') |
| assert p.service == 0x09 |
| assert p.iid[0] == 0x00 |
| assert p.iid[1] == 0x02 |
| assert p.iid[2] == 0x04 |
| |
| |
| = Check dissecting a request for Service 09 IID 0A |
| |
| p = OBD(b'\x09\x0A') |
| assert p.service == 0x09 |
| assert p.iid[0] == 0x0A |
| |
| |
| = Check dissecting a response for Service 01 PID 75 |
| |
| p = OBD(b'\x41\x75\x0a\x00\x11\x22\x33\x44\x55') |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 0x75 |
| assert p.data_records[0].reserved == 0 |
| assert p.data_records[0].turbo_a_turbine_outlet_temperature_supported == 1 |
| assert p.data_records[0].turbo_a_turbine_inlet_temperature_supported == 0 |
| assert p.data_records[0].turbo_a_compressor_outlet_temperature_supported == 1 |
| assert p.data_records[0].turbo_a_compressor_inlet_temperature_supported == 0 |
| assert p.data_records[0].turbocharger_a_compressor_inlet_temperature == 0x00-40 |
| assert p.data_records[0].turbocharger_a_compressor_outlet_temperature == 0x11-40 |
| assert p.data_records[0].turbocharger_a_turbine_inlet_temperature == \ |
| round((0x2233 * 0.1) - 40, 3) |
| assert p.data_records[0].turbocharger_a_turbine_outlet_temperature == \ |
| round((0x4455 * 0.1) - 40, 3) |
| |
| r = OBD(b'\x01\x75') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 01 PID 00 and PID 20 |
| |
| p = OBD(b'\x41\x00\xBF\xBF\xA8\x91\x20\x80\x00\x00\x00') |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 0 |
| assert p.data_records[0].supported_pids == "PID20+PID1C+PID19+PID15+PID13+PID11+PID10+PID0F+PID0E+PID0D+PID0C+PID0B+PID09+PID08+PID07+PID06+PID05+PID04+PID03+PID01" |
| assert p.data_records[1].pid == 0x20 |
| assert p.data_records[1].supported_pids == "PID21" |
| assert len(p.data_records) == 2 |
| r = OBD(b'\x01\x00\x20') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 01 PID 05,01,15,0C,03 |
| |
| p = OBD(b'\x41\x05\x6e\x01\x83\x33\xff\x63\x15\xa0\x78\x0c\x0a\x6b\x03\x02\x00') |
| p.show() |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 5 |
| assert p.data_records[0].data == 70.0 |
| assert p.data_records[1].pid == 0x1 |
| assert p.data_records[2].pid == 0x15 |
| assert p.data_records[2].outputVoltage == 0.8 |
| assert p.data_records[2].trim == -6.25 |
| assert p.data_records[3].pid == 12 |
| assert p.data_records[3].data == 666.75 |
| assert p.data_records[4].pid == 3 |
| assert p.data_records[4].fuel_system1 == 0x02 |
| assert p.data_records[4].fuel_system2 == 0 |
| assert len(p.data_records) == 5 |
| |
| r = OBD(b'\x01\x05\x01\x15\x0c\x03') |
| assert p.answers(r) |
| r = OBD(b'\x01\x05\x01\x15') |
| assert not p.answers(r) |
| r = OBD(b'\x01\x02') |
| assert not p.answers(r) |
| |
| |
| p = OBD(b'\x41\x00\xBF\xBF\xA8\x91\x20\x80\x00\x00\x00') |
| p.show() |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 0 |
| assert p.data_records[0].supported_pids == "PID20+PID1C+PID19+PID15+PID13+PID11+PID10+PID0F+PID0E+PID0D+PID0C+PID0B+PID09+PID08+PID07+PID06+PID05+PID04+PID03+PID01" |
| assert p.data_records[1].pid == 0x20 |
| assert p.data_records[1].supported_pids == "PID21" |
| assert len(p.data_records) == 2 |
| r = OBD(b'\x01\x00\x20') |
| assert p.answers(r) |
| |
| |
| |
| = Check dissecting a response for Service 01 PID 78 |
| |
| p = OBD(b'\x41\x78ABCDEFGHI') |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 0x78 |
| assert p.data_records[0].reserved == 4 |
| assert p.data_records[0].sensor1_supported == 1 |
| assert p.data_records[0].sensor2_supported == 0 |
| assert p.data_records[0].sensor3_supported == 0 |
| assert p.data_records[0].sensor4_supported == 0 |
| assert p.data_records[0].sensor1 == 1656.3 |
| assert p.data_records[0].sensor2 == 1707.7 |
| assert p.data_records[0].sensor3 == 1759.1 |
| assert p.data_records[0].sensor4 == 1810.5 |
| r = OBD(b'\x01\x78') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 01 PID 7F |
| |
| p = OBD(b'\x41\x7F\x0a' |
| b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF' |
| b'\x01\x02\x03\x04\x05\x06\x07\x08' |
| b'\x00\x11\x22\x33\x44\x55\x66\x77') |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 0x7F |
| assert p.data_records[0].reserved == 1 |
| assert p.data_records[0].total_with_pto_active_supported == 0 |
| assert p.data_records[0].total_idle_supported == 1 |
| assert p.data_records[0].total_supported == 0 |
| assert p.data_records[0].total == 0xFFFFFFFFFFFFFFFF |
| assert p.data_records[0].total_idle == 0x0102030405060708 |
| assert p.data_records[0].total_with_pto_active == 0x0011223344556677 |
| r = OBD(b'\x01\x7f') |
| assert p.answers(r) |
| |
| |
| |
| = Check dissecting a response for Service 01 PID 89 |
| |
| p = OBD(b'\x41\x89ABCDEFGHIKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP') |
| assert p.service == 0x41 |
| assert p.data_records[0].pid == 0x89 |
| assert p.data_records[0].data == b'ABCDEFGHIKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP' |
| r = OBD(b'\x01\x89') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 02 PID 75 |
| |
| p = OBD(b'\x42\x75\01\x0a\x00\x11\x22\x33\x44\x55') |
| assert p.service == 0x42 |
| assert p.data_records[0].pid == 0x75 |
| assert p.data_records[0].frame_no == 0x01 |
| assert p.data_records[0].reserved == 0 |
| assert p.data_records[0].turbo_a_turbine_outlet_temperature_supported == 1 |
| assert p.data_records[0].turbo_a_turbine_inlet_temperature_supported == 0 |
| assert p.data_records[0].turbo_a_compressor_outlet_temperature_supported == 1 |
| assert p.data_records[0].turbo_a_compressor_inlet_temperature_supported == 0 |
| assert p.data_records[0].turbocharger_a_compressor_inlet_temperature == 0x00 - 40 |
| assert p.data_records[0].turbocharger_a_compressor_outlet_temperature == 0x11 - 40 |
| assert p.data_records[0].turbocharger_a_turbine_inlet_temperature == \ |
| round((0x2233 * 0.1) - 40, 3) |
| assert p.data_records[0].turbocharger_a_turbine_outlet_temperature == \ |
| round((0x4455 * 0.1) - 40, 3) |
| r = OBD(b'\x02\x75\x00') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 02 PID 78 |
| |
| p = OBD(b'\x42\x78\x05ABCDEFGHI') |
| assert p.service == 0x42 |
| assert p.data_records[0].pid == 0x78 |
| assert p.data_records[0].frame_no == 0x05 |
| assert p.data_records[0].reserved == 4 |
| assert p.data_records[0].sensor1_supported == 1 |
| assert p.data_records[0].sensor2_supported == 0 |
| assert p.data_records[0].sensor3_supported == 0 |
| assert p.data_records[0].sensor4_supported == 0 |
| assert p.data_records[0].sensor1 == 1656.3 |
| assert p.data_records[0].sensor2 == 1707.7 |
| assert p.data_records[0].sensor3 == 1759.1 |
| assert p.data_records[0].sensor4 == 1810.5 |
| |
| r = OBD(b'\x02\x78\x00') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 02 PID 7F |
| |
| p = OBD(b'\x42\x7F\x01\x03' |
| b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF' |
| b'\x01\x02\x03\x04\x05\x06\x07\x08' |
| b'\x00\x11\x22\x33\x44\x55\x66\x77') |
| assert p.service == 0x42 |
| assert p.data_records[0].pid == 0x7F |
| assert p.data_records[0].frame_no == 0x01 |
| assert p.data_records[0].reserved == 0 |
| assert p.data_records[0].total_with_pto_active_supported == 0 |
| assert p.data_records[0].total_idle_supported == 1 |
| assert p.data_records[0].total_supported == 1 |
| assert p.data_records[0].total == 0xFFFFFFFFFFFFFFFF |
| assert p.data_records[0].total_idle == 0x0102030405060708 |
| assert p.data_records[0].total_with_pto_active == 0x0011223344556677 |
| |
| r = OBD(b'\x02\x7F\x00') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 02 PID 89 |
| |
| p = OBD(b'\x42\x89\x01ABCDEFGHIKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP') |
| assert p.service == 0x42 |
| assert p.data_records[0].pid == 0x89 |
| assert p.data_records[0].frame_no == 0x01 |
| assert p.data_records[0].data == b'ABCDEFGHIKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP' |
| |
| r = OBD(b'\x02\x89\x00') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 02 PID 0C, 05, 04 |
| |
| p = OBD(b'\x42\x0c\x00\x20\x80\x04\x00\x80\x05\x00\x28') |
| assert p.service == 0x42 |
| assert p.data_records[0].pid == 0x0C |
| assert p.data_records[0].frame_no == 0x0 |
| assert p.data_records[0].data == 2080 |
| assert p.data_records[1].pid == 0x04 |
| assert p.data_records[1].frame_no == 0x0 |
| assert p.data_records[1].data == 50.196 |
| assert p.data_records[2].pid == 0x05 |
| assert p.data_records[2].frame_no == 0x0 |
| assert p.data_records[2].data == 0.0 |
| |
| r = OBD(b'\x02\x0c\x00\x04\x00\x05\x00') |
| r.show() |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 03 |
| |
| p = OBD(b'\x43\x06\x01\x43\x01\x96\x02\x34\x02\xcd\x03\x57\x0a\x24') |
| assert p.service == 0x43 |
| assert p.count == 6 |
| assert bytes(p.dtcs[0]) == b'\x01\x43' |
| assert bytes(p.dtcs[1]) == b'\x01\x96' |
| assert bytes(p.dtcs[2]) == b'\x02\x34' |
| assert bytes(p.dtcs[3]) == b'\x02\xcd' |
| assert bytes(p.dtcs[4]) == b'\x03\x57' |
| assert bytes(p.dtcs[5]) == b'\x0a\x24' |
| |
| r = OBD(b'\x03') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 07 |
| |
| p = OBD(b'\x47\x06\x01\x43\x01\x96\x02\x34\x02\xcd\x03\x57\x0a\x24') |
| assert p.service == 0x47 |
| assert p.count == 6 |
| assert bytes(p.dtcs[0]) == b'\x01\x43' |
| assert bytes(p.dtcs[1]) == b'\x01\x96' |
| assert bytes(p.dtcs[2]) == b'\x02\x34' |
| assert bytes(p.dtcs[3]) == b'\x02\xcd' |
| assert bytes(p.dtcs[4]) == b'\x03\x57' |
| assert bytes(p.dtcs[5]) == b'\x0a\x24' |
| |
| r = OBD(b'\x07') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 08 Tid 00 |
| |
| p = OBD(b'\x48\x00ABCD') |
| assert p.service == 0x48 |
| assert p.data_records[0].tid == 0x00 |
| assert p.data_records[0].supported_tids == "TID1E+TID1A+TID18+TID17+TID12+TID0F+TID0A+TID08+TID02" |
| r = OBD(b'\x08\x00') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 08 Tid 01 |
| |
| p = OBD(b'\x48\x01\x00\x00"\xffd') |
| assert p.service == 0x48 |
| assert p.data_records[0].tid == 0x01 |
| assert p.data_records[0].data_a == 0.0 |
| assert p.data_records[0].data_b == 0.0 |
| assert p.data_records[0].data_c == 0.17 |
| assert p.data_records[0].data_d == 1.275 |
| assert p.data_records[0].data_e == 0.5 |
| r = OBD(b'\x08\x01') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 08 Tid 05 |
| |
| p = OBD(b'\x48\x05\x00\x00\x2b\xff\x7d') |
| assert p.service == 0x48 |
| assert p.data_records[0].tid == 0x05 |
| assert p.data_records[0].data_a == 0.0 |
| assert p.data_records[0].data_b == 0.0 |
| assert p.data_records[0].data_c == 0.172 |
| assert p.data_records[0].data_d == 1.02 |
| assert p.data_records[0].data_e == 0.5 |
| r = OBD(b'\x08\x05') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 08 Tid 09 |
| |
| p = OBD(b'\x48\x09\x00\x00\x04\x1a\x0c') |
| assert p.service == 0x48 |
| assert p.data_records[0].tid == 0x09 |
| assert p.data_records[0].data_a == 0.0 |
| assert p.data_records[0].data_b == 0.0 |
| assert p.data_records[0].data_c == 0.16 |
| assert p.data_records[0].data_d == 1.04 |
| assert p.data_records[0].data_e == 0.48 |
| r = OBD(b'\x08\x09') |
| assert p.answers(r) |
| |
| |
| = Check dissecting a response for Service 09 IID 00 |
| |
| p = OBD(b'\x49\x00ABCD') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x00 |
| assert p.data_records[0].supported_iids == "IID1E+IID1A+IID18+IID17+IID12+IID0F+IID0A+IID08+IID02" |
| r = OBD(b'\x09\x00') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 02 with one VIN |
| |
| p = OBD(b'\x49\x02\x01W0L000051T2123456') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x02 |
| assert p.data_records[0].count == 0x01 |
| assert p.data_records[0].vehicle_identification_numbers[0] == b'W0L000051T2123456' |
| r = OBD(b'\x09\x02') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 02 with two VINs |
| |
| p = OBD(b'\x49\x02\x02W0L000051T2123456W0L000051T2123456') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x02 |
| assert p.data_records[0].count == 0x02 |
| assert p.data_records[0].vehicle_identification_numbers[0] == b'W0L000051T2123456' |
| assert p.data_records[0].vehicle_identification_numbers[1] == b'W0L000051T2123456' |
| r = OBD(b'\x09\x02') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 04 with one CID |
| |
| p = OBD(b'\x49\x04\x01ABCDEFGHIJKLMNOP') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x04 |
| assert p.data_records[0].count == 0x01 |
| assert p.data_records[0].calibration_identifications[0] == b'ABCDEFGHIJKLMNOP' |
| r = OBD(b'\x09\x04') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 04 with two CID |
| |
| p = OBD(b'\x49\x04\x02ABCDEFGHIJKLMNOPABCDEFGHIJKLMNOP') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x04 |
| assert p.data_records[0].count == 0x02 |
| assert p.data_records[0].calibration_identifications[0] == b'ABCDEFGHIJKLMNOP' |
| assert p.data_records[0].calibration_identifications[1] == b'ABCDEFGHIJKLMNOP' |
| r = OBD(b'\x09\x04') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 06 |
| |
| p = OBD(b'\x49\x06\x02ABCDEFGH') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x06 |
| assert p.data_records[0].count == 0x02 |
| assert p.data_records[0].calibration_verification_numbers[0] == b'ABCD' |
| assert p.data_records[0].calibration_verification_numbers[1] == b'EFGH' |
| r = OBD(b'\x09\x06') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 08 |
| |
| p = OBD(b'\x49\x08\x09\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\xFF\xFF') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x08 |
| assert p.data_records[0].count == 0x09 |
| assert p.data_records[0].data[0] == 1 |
| assert p.data_records[0].data[1] == 2 |
| assert p.data_records[0].data[2] == 3 |
| assert p.data_records[0].data[3] == 4 |
| assert p.data_records[0].data[4] == 5 |
| assert p.data_records[0].data[5] == 6 |
| assert p.data_records[0].data[6] == 7 |
| assert p.data_records[0].data[7] == 8 |
| assert p.data_records[0].data[8] == 65535 |
| r = OBD(b'\x09\x08') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 0A |
| |
| p = OBD(b'\x49\x0A\x01ECM\x00-Engine Control\x00') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x0A |
| assert p.data_records[0].count == 0x01 |
| assert p.data_records[0].ecu_names[0] == b'ECM\x00-Engine Control\x00' |
| r = OBD(b'\x09\x0a') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 0B |
| |
| p = OBD(b'\x49\x0B\x05\x00\x01\x00\x02\x00\x03\x00\x04\xFF\xFF') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x0B |
| assert p.data_records[0].count == 0x05 |
| assert p.data_records[0].data[0] == 1 |
| assert p.data_records[0].data[1] == 2 |
| assert p.data_records[0].data[2] == 3 |
| assert p.data_records[0].data[3] == 4 |
| assert p.data_records[0].data[4] == 65535 |
| r = OBD(b'\x09\x0b') |
| assert p.answers(r) |
| |
| = Check dissecting a response for Service 09 IID 02 and IID 04 |
| |
| p = OBD(b'\x49\x02\x01ABCDEFGHIJKLMNOPQ\x04\x01ABCDEFGHIJKLMNOP') |
| assert p.service == 0x49 |
| assert p.data_records[0].iid == 0x02 |
| assert p.data_records[0].count == 0x01 |
| assert p.data_records[0].vehicle_identification_numbers[0] == b'ABCDEFGHIJKLMNOPQ' |
| assert p.data_records[1].iid == 0x04 |
| assert p.data_records[1].count == 0x01 |
| assert p.data_records[1].calibration_identifications[0] == b'ABCDEFGHIJKLMNOP' |
| r = OBD(b'\x09\x02\x04') |
| assert p.answers(r) |
| |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x02' |
| assert b[2:3] == b'\x01' |
| assert b[3:20] == b'ABCDEFGHIJKLMNOPQ' |
| assert b[20:21] == b'\x04' |
| assert b[21:22] == b'\x01' |
| assert b[22:] == b'ABCDEFGHIJKLMNOP' |
| |
| |
| |
| = Check building a request for Service 01 PID 00 |
| |
| p = OBD()/OBD_S01(pid=0x00) |
| b = bytes(p) |
| assert b[0:1] == b'\x01' |
| assert b[1:2] == b'\x00' |
| |
| |
| = Check building a request for Service 01 PID 75 |
| |
| p = OBD()/OBD_S01(pid=0x75) |
| b = bytes(p) |
| assert b[0:1] == b'\x01' |
| assert b[1:2] == b'\x75' |
| |
| |
| = Check building a request for Service 01 PID 78 |
| |
| p = OBD()/OBD_S01(pid=0x78) |
| b = bytes(p) |
| assert b[0:1] == b'\x01' |
| assert b[1:2] == b'\x78' |
| |
| |
| = Check building a request for Service 01 PID 7F |
| |
| p = OBD()/OBD_S01(pid=0x7F) |
| b = bytes(p) |
| assert b[0:1] == b'\x01' |
| assert b[1:2] == b'\x7F' |
| |
| |
| = Check building a request for Service 01 PID 89 |
| |
| p = OBD()/OBD_S01(pid=0x89) |
| b = bytes(p) |
| assert b[0:1] == b'\x01' |
| assert b[1:2] == b'\x89' |
| |
| |
| = Check building a request for Service 02 PID 00 |
| |
| p = OBD()/OBD_S02(requests=[OBD_S02_Record(pid=0x00, frame_no=0x01)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x02' |
| assert b[1:2] == b'\x00' |
| assert b[2:3] == b'\x01' |
| |
| |
| = Check building a request for Service 02 PID 75 |
| |
| p = OBD()/OBD_S02(requests=[OBD_S02_Record(pid=0x75, frame_no=0x01)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x02' |
| assert b[1:2] == b'\x75' |
| assert b[2:3] == b'\x01' |
| |
| |
| = Check building a request for Service 02 PID 78 |
| |
| p = OBD()/OBD_S02(requests=[OBD_S02_Record(pid=0x78, frame_no=0x01)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x02' |
| assert b[1:2] == b'\x78' |
| assert b[2:3] == b'\x01' |
| |
| |
| = Check building a request for Service 02 PID 7F |
| |
| p = OBD()/OBD_S02(requests=[OBD_S02_Record(pid=0x7F, frame_no=0x01)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x02' |
| assert b[1:2] == b'\x7F' |
| assert b[2:3] == b'\x01' |
| |
| |
| = Check building a request for Service 02 PID 89 |
| |
| p = OBD()/OBD_S02(requests=[OBD_S02_Record(pid=0x89, frame_no=0x01)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x02' |
| assert b[1:2] == b'\x89' |
| assert b[2:3] == b'\x01' |
| |
| |
| = Check building a request for Service 03 |
| |
| p = OBD()/OBD_S03() |
| assert p.service == 0x03 |
| |
| |
| = Check building a request for Service 02 PID 7F |
| |
| p = OBD()/OBD_S02(requests=[OBD_S02_Record(pid=0x7F, frame_no=0x01)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x02' |
| assert b[1:2] == b'\x7F' |
| assert b[2:3] == b'\x01' |
| |
| |
| = Check building a request for Service 09 IID 00 |
| |
| p = OBD()/OBD_S09(iid=0x00) |
| b = bytes(p) |
| assert b[0:1] == b'\x09' |
| assert b[1:2] == b'\x00' |
| |
| |
| = Check building a request for Service 09 IID 02 |
| |
| p = OBD()/OBD_S09(iid=0x02) |
| b = bytes(p) |
| assert b[0:1] == b'\x09' |
| assert b[1:2] == b'\x02' |
| |
| |
| = Check building a request for Service 09 IID 04 |
| |
| p = OBD()/OBD_S09(iid=0x04) |
| b = bytes(p) |
| assert b[0:1] == b'\x09' |
| assert b[1:2] == b'\x04' |
| |
| |
| = Check building a request for Service 09 IID 00 and IID 02 and IID 04 |
| |
| p = OBD()/OBD_S09(iid=[0x00, 0x02, 0x04]) |
| b = bytes(p) |
| assert b[0:1] == b'\x09' |
| assert b[1:2] == b'\x00' |
| assert b[2:3] == b'\x02' |
| assert b[3:4] == b'\x04' |
| |
| |
| = Check building a request for Service 09 IID 0A |
| |
| p = OBD()/OBD_S09(iid=0x0A) |
| b = bytes(p) |
| assert b[0:1] == b'\x09' |
| assert b[1:2] == b'\x0A' |
| |
| |
| = Check building a response for Service 03 |
| |
| p = OBD()/OBD_S03_PR(dtcs=[OBD_DTC(), OBD_DTC(location='Powertrain', code1=1, code2=3, code3=0, code4=1)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x43' |
| assert b[1:2] == b'\x02' |
| assert b[2:4] == b'\x00\x00' |
| assert b[4:6] == b'\x13\x01' |
| r = OBD(b'\x03') |
| assert p.answers(r) |
| |
| |
| = Check building a default response for Service 03 |
| |
| p = OBD()/OBD_S03_PR() |
| b = bytes(p) |
| assert len(p) == 2 |
| assert b[0:1] == b'\x43' |
| assert b[1:2] == b'\x00' |
| assert p.dtcs == [] |
| r = OBD(b'\x03') |
| assert p.answers(r) |
| |
| = Check building a response for Service 07 |
| |
| p = OBD()/OBD_S07_PR(dtcs=[OBD_DTC(location='Chassis', code1=0, code2=5, code3=1, code4=0)]) |
| b = bytes(p) |
| assert b[0:1] == b'\x47' |
| assert b[1:2] == b'\x01' |
| assert b[2:4] == b'\x45\x10' |
| r = OBD(b'\x07') |
| assert p.answers(r) |
| |
| = Check building a default response for Service 07 |
| |
| p = OBD()/OBD_S07_PR() |
| b = bytes(p) |
| assert len(p) == 2 |
| assert b[0:1] == b'\x47' |
| assert b[1:2] == b'\x00' |
| assert p.dtcs == [] |
| r = OBD(b'\x07') |
| assert p.answers(r) |
| |
| = Check building a response for Service 0A |
| |
| p = OBD()/OBD_S0A_PR(dtcs=[OBD_DTC(), OBD_DTC(location='Body', code1=1, code2=7, code3=8, code4=2), OBD_DTC()]) |
| b = bytes(p) |
| assert b[0:1] == b'\x4A' |
| assert b[1:2] == b'\x03' |
| assert b[2:4] == b'\x00\x00' |
| assert b[4:6] == b'\x97\x82' |
| assert b[6:8] == b'\x00\x00' |
| r = OBD(b'\x0a') |
| assert p.answers(r) |
| |
| = Check building a default response for Service 0A |
| |
| p = OBD()/OBD_S0A_PR() |
| b = bytes(p) |
| assert len(p) == 2 |
| assert b[0:1] == b'\x4A' |
| assert b[1:2] == b'\x00' |
| assert p.dtcs == [] |
| r = OBD(b'\x0a') |
| assert p.answers(r) |
| |
| = Check building a response for Service 09 IID 00 |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=OBD_S09_PR_Record()/OBD_IID00(b'ABCD')) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x00' |
| assert b[2:] == b'ABCD' |
| r = OBD(b'\x09\x00') |
| assert p.answers(r) |
| |
| = Check building a response for Service 09 IID 02 with one VIN |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=OBD_S09_PR_Record()/OBD_IID02(vehicle_identification_numbers=b'W0L000051T2123456')) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x02' |
| assert b[2:3] == b'\x01' |
| assert b[3:] == b'W0L000051T2123456' |
| |
| r = OBD(b'\x09\x02') |
| assert p.answers(r) |
| |
| = Check building a response for Service 09 IID 02 with two VINs |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=OBD_S09_PR_Record()/OBD_IID02(vehicle_identification_numbers=[b'W0L000051T2123456', b'W0L000051T2123456'])) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x02' |
| assert b[2:3] == b'\x02' |
| assert b[3:20] == b'W0L000051T2123456' |
| assert b[20:] == b'W0L000051T2123456' |
| |
| r = OBD(b'\x09\x02') |
| assert p.answers(r) |
| |
| |
| = Check building a response for Service 09 IID 04 with one CID |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=OBD_S09_PR_Record()/OBD_IID04(calibration_identifications=b'ABCDEFGHIJKLMNOP')) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x04' |
| assert b[2:3] == b'\x01' |
| assert b[3:] == b'ABCDEFGHIJKLMNOP' |
| |
| r = OBD(b'\x09\x04') |
| assert p.answers(r) |
| |
| |
| = Check building a response for Service 09 IID 04 with two CID |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=OBD_S09_PR_Record()/OBD_IID04(calibration_identifications=[b'ABCDEFGHIJKLMNOP', b'ABCDEFGHIJKLMNOP'])) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x04' |
| assert b[2:3] == b'\x02' |
| assert b[3:19] == b'ABCDEFGHIJKLMNOP' |
| assert b[19:] == b'ABCDEFGHIJKLMNOP' |
| |
| r = OBD(b'\x09\x04') |
| assert p.answers(r) |
| |
| |
| = Check building a response for Service 09 IID 0A |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=OBD_S09_PR_Record()/OBD_IID0A(ecu_names=b'ABCDEFGHIJKLMNOPQRST')) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x0A' |
| assert b[2:3] == b'\x01' |
| assert b[3:] == b'ABCDEFGHIJKLMNOPQRST' |
| |
| r = OBD(b'\x09\x0a') |
| assert p.answers(r) |
| |
| |
| = Check building a response for Service 09 IID 02 and IID 04 |
| |
| p = OBD(service=0x49)/OBD_S09_PR(data_records=[ |
| OBD_S09_PR_Record()/OBD_IID02(vehicle_identification_numbers=b'ABCDEFGHIJKLMNOPQ'), |
| OBD_S09_PR_Record()/OBD_IID04(calibration_identifications=b'ABCDEFGHIJKLMNOP') |
| ]) |
| b = bytes(p) |
| assert b[0:1] == b'\x49' |
| assert b[1:2] == b'\x02' |
| assert b[2:3] == b'\x01' |
| assert b[3:20] == b'ABCDEFGHIJKLMNOPQ' |
| assert b[20:21] == b'\x04' |
| assert b[21:22] == b'\x01' |
| assert b[22:] == b'ABCDEFGHIJKLMNOP' |
| |
| r = OBD(b'\x09\x02\x04') |
| assert p.answers(r) |
| |