listener = can.listen(matches=[canio.Match(0x408)], timeout=.9) old_bus_state = None old_count = -1 while True: bus_state = can.state if bus_state != old_bus_state: print(f"Bus state changed to {bus_state}") old_bus_state = bus_state message = listener.receive() if message is None: print("No messsage received within timeout") continue data = message.data if len(data) != 8: print(f"Unusual message length {len(data)}") continue count, now_ms = struct.unpack("<II", data) gap = count - old_count old_count = count print(f"received message: id={message.id:x} count={count} now_ms={now_ms}") if gap != 1: print(f"gap: {gap}") print("Sending ACK") can.send(canio.Message(id=0x409, data=struct.pack("<I", count)))
auto_restart=True) listener = can.listen(matches=[canio.Match(0x409)], timeout=.1) old_bus_state = None count = 0 while True: bus_state = can.state if bus_state != old_bus_state: print(f"Bus state changed to {bus_state}") old_bus_state = bus_state now_ms = (time.monotonic_ns() // 1_000_000) & 0xffffffff print(f"Sending message: count={count} now_ms={now_ms}") message = canio.Message(id=0x408, data=struct.pack("<II", count, now_ms)) while True: can.send(message) message_in = listener.receive() if message_in is None: print("No ACK received within timeout") continue data = message_in.data if len(data) != 4: print(f"Unusual message length {len(data)}") continue ack_count = struct.unpack("<I", data)[0] if ack_count == count: