Guest User

Untitled

a guest
Apr 23rd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import errno
  4. import functools
  5. import tornado.ioloop
  6. import socket
  7. import struct
  8.  
  9.  
  10. can_frame_fmt = "=IB3x8s"
  11. can_frame_size = struct.calcsize(can_frame_fmt)
  12.  
  13. def build_can_frame(can_id, data):
  14. can_dlc = len(data)
  15. data = data.ljust(8, b'\x00')
  16. return struct.pack(can_frame_fmt, can_id, can_dlc, data)
  17.  
  18. def dissect_can_frame(frame):
  19. can_id, can_dlc, data = struct.unpack(can_frame_fmt, frame)
  20. return (can_id, can_dlc, data[:can_dlc])
  21.  
  22. def connection_ready(sock, fd, events):
  23. try:
  24. cf, addr = sock.recvfrom(can_frame_size)
  25. except BlockingIOError:
  26. self.logger.debug('Captured no data, socket in non-blocking mode.')
  27. return None
  28. except socket.timeout:
  29. self.logger.debug('Captured no data, socket read timed out.')
  30. return None
  31.  
  32. dissect_can_frame(cf)
  33.  
  34.  
  35. if __name__ == '__main__':
  36. sock = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
  37. sock.bind(('can0',))
  38. sock.setblocking(0)
  39.  
  40. io_loop = tornado.ioloop.IOLoop.current()
  41. callback = functools.partial(connection_ready, sock)
  42. io_loop.add_handler(sock.fileno(), callback, io_loop.READ)
  43. io_loop.start()
Add Comment
Please, Sign In to add comment