#include #include #include #include #include #include #include #include #include #include void rxsetup_sock(int sock) { struct sockaddr_can sa; struct { struct bcm_msg_head b; struct canfd_frame f; } msg; memset(&msg, 0, sizeof(msg)); sa.can_family = AF_CAN; sa.can_ifindex = 0; sa.can_addr.tp.rx_id = 0; sa.can_addr.tp.tx_id = 0; msg.b.opcode = RX_SETUP; msg.b.flags = CAN_FD_FRAME | SETTIMER | STARTTIMER; msg.b.count = 0; msg.b.ival1.tv_sec = msg.b.ival2.tv_sec = 0; msg.b.ival1.tv_usec = msg.b.ival2.tv_usec = 1; msg.b.can_id = 0; msg.b.nframes = 1; sendto(sock, &msg, sizeof(msg), 0, (struct sockaddr *)&sa, sizeof(sa)); } int main(void) { int i; int sock; struct sockaddr_can sa; struct { struct bcm_msg_head b; struct canfd_frame f; } msg; char buf[sizeof(msg)]; sock = socket(AF_CAN, SOCK_DGRAM, CAN_BCM); sa.can_family = AF_CAN; sa.can_ifindex = 0; sa.can_addr.tp.rx_id = 0; sa.can_addr.tp.tx_id = 0; connect(sock, (struct sockaddr *)&sa, sizeof(sa)); rxsetup_sock(sock); memset(&sa, 0, sizeof(sa)); sa.can_family = AF_CAN; sa.can_ifindex = 0; socklen_t len = 0; memset(&msg, 0, sizeof(msg)); recvfrom(sock, &msg, sizeof(msg), 0, (struct sockaddr *)&sa, &len); memcpy(buf, &msg, sizeof(buf)); for (i = 0; i < sizeof(buf); i++) printf("%x ", (unsigned char)buf[i]); printf("\n"); return 0; }