Kontron KTAM3874-pITX User Manual
Page 82

KTD-S0057-I
Page 78 Linux® Programming Examples (DebianTM)
KTAM3874/pITX Software Guide
10.8.2 Single CAN Controller Usage
You can replace the 'sendto' and 'recvfrom' calls in single CAN controller applications with the standard
'write' and 'read' commands. For example (sourcecode simplified):
/********************** * INIT ROUTINE ***** ***************/
int init_can_bus (canid_t id_min, canid_t id_max)
{
struct sockaddr_can addr;
struct ifreq ifr;
if ((skt = socket (PF_CAN, SOCK_RAW, CAN_RAW)) < 0)
return
-1;
memset (&ifr, 0, sizeof (struct ifreq));
strcpy (ifr.ifr_name, "can0");
if (ioctl (skt, SIOCGIFINDEX, &ifr) < 0)
return
-1;
addr.can_family = AF_CAN;
addr.can_ifindex
=
ifr.ifr_ifindex
;
/* Bind only CAN0 controller */
return bind (skt, (struct sockaddr *) &addr, sizeof (addr));
}
/*********************** TRANSMIT ROUTINE ********************/
int send_can_frame (canid_t can_id, unsigned char data[], int data_len)
{
int i, nbytes;
struct can_frame frame;
frame.can_id = can_id;
frame.can_dlc = (unsigned char) data_len;
for (i = 0; i < data_len; i++)
frame.data[i] = data[i];
if (write (skt, &frame, sizeof (struct can_frame)) < 0)
return
-1;
return
0;
}
/*********************** RECEIVE ROUTINE ********************/
int recv_can_frame (unsigned char data[], int *data_len)
{
int
i;
struct can_frame frame;
if (read (skt, &frame, sizeof (struct can_frame)) < 0)
return
-1;