Pythonで実装します。
動作環境も前回と同じく、OS:raspbian jessie
仮想CANデバイス(vcan1)でテストしています。
#! /usr/bin/env python3 # -*- coding: utf-8 -*- """ sudo modprobe vcan sudo ip link add dev vcan1 type vcan sudo ip link set vcan1 up """ import sys import socket import struct CAN_MAX_DLEN = 8 CAN_MTU = 16 CAN_NAME = 'vcan1' def canrecv_stdframe(): s = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW) try: s.bind((CAN_NAME,)) except OSError: print('bind error', file=sys.stderr) return -1 frame = s.recv(CAN_MTU) id, dlc, bdata = struct.unpack('IB3x8s', frame) data = bdata.hex() s.close() return id, dlc, data if __name__ == '__main__': def main(): id, dlc, data = canrecv_stdframe() print('id=%x, dlc=%s, data=%s' % (id, dlc, data)) main()
これで、標準フレームを1回受信し、表示して終わります。
0 件のコメント:
コメントを投稿