Skip to content

Instantly share code, notes, and snippets.

@hummlbach
Created May 24, 2016 19:36
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save hummlbach/5e9be81f27db91220cec0b919ebb9fec to your computer and use it in GitHub Desktop.
Send parallel on two CAN channels using socketCAN
#include <unistd.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <linux/if_link.h>
static unsigned int requestId[9] = {0x100, 0x200, 0x300, 0x400, 0x500, 0x600, 0x700, 0x800, 0x900};
int main()
{
int i = 0;
int opt = 1;
int err = 0;
struct sockaddr_can addr = {0};
unsigned int frameSize = sizeof(struct can_frame);
int socket0 = socket(PF_CAN, SOCK_RAW, CAN_RAW);
int socket1 = socket(PF_CAN, SOCK_RAW, CAN_RAW);
int size;
struct can_frame frame = {0};
frame.can_dlc = 8;
setsockopt(socket0, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
setsockopt(socket1, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
addr.can_family = AF_CAN;
addr.can_ifindex = if_nametoindex("can0");
bind(socket0, (struct sockaddr *) &addr, sizeof(addr));
addr.can_family = AF_CAN;
addr.can_ifindex = if_nametoindex("can1");
bind(socket1, (struct sockaddr *) &addr, sizeof(addr));
while(1)
{
for (i = 0; i < 9; i++)
{
size = write(socket0, &frame, sizeof(struct can_frame));
size = write(socket1, &frame, sizeof(struct can_frame));
usleep(5000);
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment