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

Page 76

Advertising
background image

KTD-S0057-I

Page 72 Linux® Programming Examples (DebianTM)


KTAM3874/pITX Software Guide


#include <net/if.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/can.h>
#include <linux/can/raw.h>

#define CAN0_INDEX

0

#define CAN1_INDEX

1

#define MAX_CAN_DEV

1

#define MAX_CAN_LEN

8

#define MAX_CAN_SSF

0x7FFUL

/* CAN 2.0A */

#define DEF_ERR_MASK

0x1FFUL

#define WAIT_TIME

10000

/* 10 ms */

#define MAX_NAME_LEN

8

static int skt;
static const char *dev_name = "can%d";

int init_can_bus (canid_t id_min, canid_t id_max)
{

can_err_mask_t err_mask = DEF_ERR_MASK;

struct sockaddr_can addr;

struct can_filter rfilter;

if ((skt = socket (PF_CAN, SOCK_RAW, CAN_RAW)) < 0)

return

-1;

if (setsockopt (skt, SOL_CAN_RAW, CAN_RAW_ERR_FILTER, &err_mask, sizeof (err_mask)) < 0)

return

-1;

if (id_min && id_max)

{

/* Define an identifier filter */

if ((id_min > id_max) || (id_min > MAX_CAN_SSF) || (id_max > MAX_CAN_SSF))

return

-1;

rfilter.can_id = id_min;

rfilter.can_mask = (~ (id_max - id_min)) & MAX_CAN_SSF;

if (setsockopt (skt, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof (rfilter)) < 0)

return

-1;

}

addr.can_family = AF_CAN;

addr.can_ifindex = 0;

/* Bind all controllers */

return bind (skt, (struct sockaddr *) &addr, sizeof (addr));

}


int close_can_bus (void)
{
close

(skt);

}

Advertising
This manual is related to the following products: