def test_elm_can_baud(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare(s, b'ATH1\r', b'OK\r\r>') # Headers ON send_compare(s, b'ATSP6\r', b"OK\r\r>") # Set Proto ISO 15765-4 (CAN 11/500) send_compare(s, b'0100\r', b"7E8064100FFFFFFFE\r\r>") send_compare(s, b'ATSP8\r', b"OK\r\r>") # Set Proto ISO 15765-4 (CAN 11/250) send_compare(s, b'0100\r', b"CAN ERROR\r\r>") sim.change_can_baud(250) send_compare(s, b'ATSP6\r', b"OK\r\r>") # Set Proto ISO 15765-4 (CAN 11/500) send_compare(s, b'0100\r', b"CAN ERROR\r\r>") send_compare(s, b'ATSP8\r', b"OK\r\r>") # Set Proto ISO 15765-4 (CAN 11/250) send_compare(s, b'0100\r', b"7E8064100FFFFFFFE\r\r>") finally: sim.stop() sim.join() s.close()
def test_elm_send_can_multiline_msg_throughput(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False, silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATSP6\r', b"ATSP6\rOK\r\r>") # Set Proto send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare(s, b'ATH1\r', b'OK\r\r>') # Headers ON rows = 584 send_compare( s, b'09ff\r', # headers ON, Spaces OFF ("7E8" + "1" + hex((rows * 7) + 6)[2:].upper().zfill(3) + "49FF01" + "AA0000\r" + "".join( ("7E82" + hex((num + 1) % 0x10)[2:].upper() + ("AA" * 5) + hex(num + 1)[2:].upper().zfill(4) + "\r" for num in range(rows))) + "\r>").encode(), timeout=10) finally: sim.stop() sim.join() s.close()
def test_elm_interrupted_obd_cmd_resets_state(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False, silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF s.send(b"09fd\r") ready = select.select([s], [], [], 4) assert ready[ 0], "Socket did not receive data within the timeout duration." s.send(b"ATI\r") assert b"236\r0:49FD01AAAAAA\r" in s.recv(10000) #Will likely have to be improved to scan for STOPPED if the FW gets more responsive. ready = select.select([s], [], [], 4) assert ready[ 0], "Socket did not receive data within the timeout duration." assert b"STOPPED" in s.recv(10000) sim.set_enable(False) send_compare(s, b'09fd\r', b"NO DATA\r\r>") finally: sim.stop() sim.join() s.close()
def test_elm_can_check_mode_pid(): """The ability to correctly filter out messages with the wrong PID is not implemented correctly in the reference device.""" s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare(s, b'ATH0\r', b'OK\r\r>') # Headers OFF send_compare(s, b'ATSP6\r', b"OK\r\r>") # Set Proto ISO 15765-4 (CAN 11/500) sim.can_add_extra_noise( b'\x03\x41\x0E\xFA') # Inject message into the stream send_compare(s, b'010D\r', b"410D53\r\r>") # Check it was ignored. send_compare(s, b'0100\r', b"4100FFFFFFFE\r\r>") # Check it was ignored again. finally: sim.stop() sim.join() s.close()
def test_elm_lin_keepalive(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, can=False, silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATSP5\r', b"ATSP5\rOK\r\r>") # Set Proto send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare(s, b'ATH0\r', b'OK\r\r>') # Headers OFF send_compare(s, b'0100\r', b"BUS INIT: OK\r4100FFFFFFFE\r\r>") assert sim.lin_active time.sleep(6) assert sim.lin_active send_compare(s, b'ATPC\r', b"OK\r\r>") # STOP KEEPALIVE assert sim.lin_active time.sleep(6) assert not sim.lin_active finally: sim.stop() sim.join() s.close()
def test_elm_send_lin_multiline_msg_throughput(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, can=False, silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATSP5\r', b"ATSP5\rOK\r\r>") # Set Proto send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare(s, b'ATH0\r', b'OK\r\r>') # Headers OFF send_compare( s, b'09fc\r', # headers OFF, Spaces OFF b"BUS INIT: OK\r" + b''.join( (b'49FC' + hex(num + 1)[2:].upper().zfill(2) + b'AAAA' + hex(num + 1)[2:].upper().zfill(4) + b'\r' for num in range(80))) + b"\r>", timeout=10) finally: sim.stop() sim.join() s.close()
def test_elm_send_lin_multiline_msg(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, can=False) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATSP5\r', b"OK\r\r>") # Set Proto send_compare( s, b'0902\r', # headers OFF, Spaces ON b"BUS INIT: OK\r" b"49 02 01 00 00 00 31 \r" b"49 02 02 44 34 47 50 \r" b"49 02 03 30 30 52 35 \r" b"49 02 04 35 42 31 32 \r" b"49 02 05 33 34 35 36 \r\r>") send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare( s, b'0902\r', # Headers OFF, Spaces OFF b"49020100000031\r" b"49020244344750\r" b"49020330305235\r" b"49020435423132\r" b"49020533343536\r\r>") send_compare(s, b'ATH1\r', b'OK\r\r>') # Headers ON send_compare( s, b'0902\r', # Headers ON, Spaces OFF b"87F1104902010000003105\r" b"87F11049020244344750E4\r" b"87F11049020330305235BD\r" b"87F11049020435423132B1\r" b"87F11049020533343536AA\r\r>") send_compare(s, b'ATS1\r', b'OK\r\r>') # Spaces ON send_compare( s, b'0902\r', # Headers ON, Spaces ON b"87 F1 10 49 02 01 00 00 00 31 05 \r" b"87 F1 10 49 02 02 44 34 47 50 E4 \r" b"87 F1 10 49 02 03 30 30 52 35 BD \r" b"87 F1 10 49 02 04 35 42 31 32 B1 \r" b"87 F1 10 49 02 05 33 34 35 36 AA \r\r>") finally: sim.stop() sim.join() s.close()
def test_elm_protocol_autodetect_ISO15765(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False, silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATH1\r', b'OK\r\r>') # Headers ON send_compare(s, b'ATS0\r', b"OK\r\r>") sim.can_mode_11b() send_compare(s, b'ATSP0\r', b"OK\r\r>") send_compare(s, b'010D\r', b"SEARCHING...\r7E803410D53\r\r>", timeout=10) send_compare(s, b'ATDPN\r', b"A6\r\r>") sim.can_mode_29b() send_compare(s, b'ATSP0\r', b"OK\r\r>") send_compare(s, b'010D\r', b"SEARCHING...\r18DAF11003410D53\r\r>", timeout=10) send_compare(s, b'ATDPN\r', b"A7\r\r>") sim.change_can_baud(250) sim.can_mode_11b() send_compare(s, b'ATSP0\r', b"OK\r\r>") send_compare(s, b'010D\r', b"SEARCHING...\r7E803410D53\r\r>", timeout=10) send_compare(s, b'ATDPN\r', b"A8\r\r>") sim.can_mode_29b() send_compare(s, b'ATSP0\r', b"OK\r\r>") send_compare(s, b'010D\r', b"SEARCHING...\r18DAF11003410D53\r\r>", timeout=10) send_compare(s, b'ATDPN\r', b"A9\r\r>") finally: sim.stop() sim.join() s.close()
def test_elm_send_can_multiline_msg(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False) sim.start() try: sync_reset(s) send_compare(s, b'ATSP6\r', b"ATSP6\rOK\r\r>") # Set Proto send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare( s, b'0902\r', # headers OFF, Spaces ON b"014 \r" b"0: 49 02 01 31 44 34 \r" b"1: 47 50 30 30 52 35 35 \r" b"2: 42 31 32 33 34 35 36 \r\r>") send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces OFF send_compare( s, b'0902\r', # Headers OFF, Spaces OFF b"014\r" b"0:490201314434\r" b"1:47503030523535\r" b"2:42313233343536\r\r>") send_compare(s, b'ATH1\r', b'OK\r\r>') # Headers ON send_compare( s, b'0902\r', # Headers ON, Spaces OFF b"7E81014490201314434\r" b"7E82147503030523535\r" b"7E82242313233343536\r\r>") send_compare(s, b'ATS1\r', b'OK\r\r>') # Spaces ON send_compare( s, b'0902\r', # Headers ON, Spaces ON b"7E8 10 14 49 02 01 31 44 34 \r" b"7E8 21 47 50 30 30 52 35 35 \r" b"7E8 22 42 31 32 33 34 35 36 \r\r>") finally: sim.stop() sim.join() s.close()
def test_elm_protocol_autodetect_ISO14230_KWP_FAST(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, can=False) #, silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATH0\r', b'OK\r\r>') # Headers ON send_compare(s, b'ATS0\r', b"OK\r\r>") send_compare(s, b'ATSP0\r', b"OK\r\r>") send_compare(s, b'010D\r', b"SEARCHING...\r410D53\r\r>", timeout=10) send_compare(s, b'ATDPN\r', b"A5\r\r>") finally: sim.stop() sim.join() s.close()
def test_elm_send_can_multimsg(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, lin=False) sim.start() try: sync_reset(s) send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'ATS1\r', b'OK\r\r>') # Spaces OFF send_compare(s, b'ATH1\r', b'OK\r\r>') # Headers ON send_compare(s, b'ATSP6\r', b"OK\r\r>") # Set Proto ISO 15765-4 (CAN 11/500) sim.can_add_extra_noise(b'\x03\x41\x0D\xFA', addr=0x7E9) # Inject message into the stream send_compare(s, b'010D\r', b"7E8 03 41 0D 53 \r" b"7E9 03 41 0D FA \r\r>") # Check it was ignored. finally: sim.stop() sim.join() s.close()
def test_elm_basic_send_lin(): s = elm_connect() serial = os.getenv("CANSIMSERIAL") if os.getenv("CANSIMSERIAL") else None sim = elm_car_simulator.ELMCarSimulator(serial, can=False) # , silent=True) sim.start() try: sync_reset(s) send_compare(s, b'ATSP5\r', b"ATSP5\rOK\r\r>") # Set Proto send_compare(s, b'ATE0\r', b'ATE0\rOK\r\r>') # Echo OFF send_compare(s, b'0100\r', b"BUS INIT: OK\r41 00 FF FF FF FE \r\r>") send_compare(s, b'010D\r', b"41 0D 53 \r\r>") send_compare(s, b'ATS0\r', b'OK\r\r>') # Spaces Off send_compare(s, b'0100\r', b"4100FFFFFFFE\r\r>") send_compare(s, b'010D\r', b"410D53\r\r>") send_compare(s, b'ATH1\r', b'OK\r\r>') # Spaces Off Headers On send_compare(s, b'0100\r', b"86F1104100FFFFFFFEC3\r\r>") send_compare(s, b'010D\r', b"83F110410D5325\r\r>") send_compare(s, b'ATS1\r', b'OK\r\r>') # Spaces On Headers On send_compare(s, b'0100\r', b"86 F1 10 41 00 FF FF FF FE C3 \r\r>") send_compare(s, b'010D\r', b"83 F1 10 41 0D 53 25 \r\r>") send_compare(s, b'1F00\r', b"NO DATA\r\r>") # Unhandled msg, no response. # Repeat last check to see if it still works after NO DATA was received send_compare(s, b'0100\r', b"86 F1 10 41 00 FF FF FF FE C3 \r\r>") send_compare(s, b'010D\r', b"83 F1 10 41 0D 53 25 \r\r>") finally: sim.stop() sim.join() s.close()