6#include "dawn/porting/can.hxx"
14#include "dawn/debug.hxx"
15#include "dawn/porting/config.hxx"
33int can_open(
const char *path)
35 return open(path, O_RDWR);
74 struct can_msg_s frame;
79 ret = read(fd, &frame,
sizeof(
struct can_msg_s));
84 DAWNERR(
"read failed %d\n", -errno);
92 msg->id = frame.cm_hdr.ch_id;
93 msg->len = can_dlc2bytes(frame.cm_hdr.ch_dlc);
94 msg->rtr = frame.cm_hdr.ch_rtr;
97#ifdef CONFIG_CAN_EXTID
98 msg->extid = frame.cm_hdr.ch_extid;
102#ifdef CONFIG_CAN_ERRORS
103 msg->error = frame.cm_hdr.ch_error;
106 std::memcpy(msg->data, frame.cm_data, CAN_DATA_MAX);
108 return static_cast<int>(ret);
121 struct can_msg_s frame;
126 frame.cm_hdr.ch_id = msg->id;
127 frame.cm_hdr.ch_rtr = msg->rtr;
128 frame.cm_hdr.ch_dlc = can_bytes2dlc(msg->len);
129#ifdef CONFIG_CAN_ERRORS
130 frame.cm_hdr.ch_error = 0;
132#ifdef CONFIG_CAN_EXTID
133 frame.cm_hdr.ch_extid = msg->extid;
135 frame.cm_hdr.ch_tcf = 0;
136 std::memcpy(frame.cm_data, msg->data, CAN_DATA_MAX);
140 ret = write(fd, &frame, CAN_MSGLEN(msg->len));
143 DAWNERR(
"write failed %d\n", -errno);
147 return static_cast<int>(ret);
Common CAN message format for chardev and socketCAN.