15 cout<<
"Initializing CANFD"<<endl;
16 strcpy(ifr.ifr_name,
"can0");
18 socket_fd = socket(PF_CAN, SOCK_RAW, CAN_RAW);
20 perror(
"CANFD Socket creation failed");
24 int canfd_enabled = 1;
25 if (setsockopt(socket_fd, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &canfd_enabled,
sizeof(canfd_enabled)) < 0) {
26 perror(
"Setting CAN FD option failed");
30 if (ioctl(socket_fd, SIOCGIFINDEX, &ifr) < 0) {
31 perror(
"ioctl failed");
35 addr.can_family = AF_CAN;
36 addr.can_ifindex = ifr.ifr_ifindex;
38 if (bind(socket_fd, (
struct sockaddr *)&addr,
sizeof(addr)) < 0) {
39 perror(
"Socket bind failed");
42 cout<<
"Socket setup complete"<<endl;
45 struct can_filter rfilter[6];
47 for (
size_t i = 0; i < 6; i++) {
49 rfilter[i].can_id = 0x00000000 | (i+1);
50 rfilter[i].can_mask = 0x000000ff;
52 setsockopt(socket_fd, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter,
sizeof(rfilter));
53 cout<<
"Filters setup complete"<<endl;
71 struct canfd_frame frame;
72 int nbytes = read(socket_fd, &frame,
sizeof(frame));
75 perror(
"CAN FD Raw socket read failed");
79 if (nbytes <
sizeof(frame)) {
80 perror(
"Read: Incomplete CAN FD frame");
84 memcpy(p_data, frame.data, frame.len);
86 printf(
"CAN ID: %u\n", frame.can_id);
87 printf(
"Data length: %d\n",
static_cast<int>(frame.len));
88 printf(
"Received frame data: ");
89 for (
int i = 0; i < frame.len; ++i) {
90 printf(
"%02X ", frame.data[i]);
106void CANFD::fdWrite(
unsigned int can_id_standard,
unsigned int flags,
char* p_data,
unsigned int length_data){
107 struct canfd_frame frame;
110 frame.can_id = CAN_EFF_FLAG | can_id_standard;
112 memcpy(frame.data, p_data, length_data);
113 frame.len = length_data;
115 int nbytes = write(socket_fd, &frame,
sizeof(frame));
118 perror(
"CAN FD Raw socket write failed");
122 if (nbytes <
sizeof(frame)) {
123 perror(
"Write: Incomplete CAN FD frame");