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

Page 77

background image

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;

This manual is related to the following products: