Ktam3874/pitx software guide – Kontron KTAM3874-pITX User Manual
Page 77

KTD-S0057-I
Page 73 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
int disable_id_filter (void)
{
return setsockopt (skt, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
}
int send_can_frame (int device, canid_t can_id, unsigned char data[], int data_len)
{
int i, nbytes;
struct ifreq ifr;
struct sockaddr_can addr;
struct can_frame frame;
char
str[MAX_NAME_LEN];
if ((device < 0) || (device > MAX_CAN_DEV) ||
(data_len < 0) || (data_len > MAX_CAN_LEN) ||
(can_id < 0) || (can_id > MAX_CAN_SSF))
return
-1;
sprintf (str, dev_name, device);
memset (&ifr, 0, sizeof (struct ifreq));
strcpy (ifr.ifr_name, str);
if (ioctl (skt, SIOCGIFINDEX, &ifr) < 0)
return
-1;
frame.can_id = can_id;
frame.can_dlc = (unsigned char) data_len;
for (i = 0; i < data_len; i++)
frame.data[i] = data[i];
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
if ((nbytes = sendto (skt, &frame, sizeof (struct can_frame), 0, (struct sockaddr *) &addr, sizeof (addr))) < 0)
return
-1;
if (nbytes != sizeof (frame))
return
-1;
return
0;
}
int recv_can_frame (char name[], unsigned char data[], int *data_len)
{
int
i;
struct ifreq ifr;
struct sockaddr_can addr;
struct can_frame frame;
socklen_t skt_len = sizeof (addr);
if (recvfrom (skt, &frame, sizeof (struct can_frame), MSG_WAITALL, (struct sockaddr *) &addr, &skt_len) < 0)
return
-1;
