#!/usr/bin/env python3 # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 """ Example for sending and receiving CAN frames via ASCII protocol (slcan). """ import sys import time import argparse import can import serial def main(): """main routine.""" parser = argparse.ArgumentParser(description="CAN tester") parser.add_argument( "dev", action="store", help="CAN device like socket://192.168.0.127:2001" ) args = parser.parse_args() try: bus = can.interface.Bus( bustype="slcan", channel=args.dev, rtscts=True, bitrate=125000 ) except serial.serialutil.SerialException as err: print(err) sys.exit(1) try: while True: msg = can.Message( arbitration_id=0x100, is_extended_id=False, data=[0x00, 0x01, 0x02, 0x03], ) bus.send(msg) time.sleep(0.1) msg = bus.recv(0.1) if not msg: print("Timeout") continue data = "".join("{:02X} ".format(byte) for byte in msg.data) print("{:X} [{}] {}".format(msg.arbitration_id, msg.dlc, data)) except KeyboardInterrupt: print("\nShutting down server...") bus.shutdown() print("Server shut down.") if __name__ == "__main__": main()