CAN device driver interface

Definitions for low-level CAN driver interface.

This is the CAN controller generic driver interface

enum candev_event_t
CANDEV_EVENT_NOEVENT
no event, used internally
CANDEV_EVENT_ISR
driver needs its ISR handled
CANDEV_EVENT_WAKE_UP
driver has been woken up by bus
CANDEV_EVENT_TX_CONFIRMATION
a packet has been sent
CANDEV_EVENT_TIMEOUT_TX_CONF
tx conf timeout received
CANDEV_EVENT_RX_INDICATION
a packet has been received
CANDEV_EVENT_TX_ERROR
there was an error when transmitting
CANDEV_EVENT_RX_ERROR
there was an error when receiving
CANDEV_EVENT_BUS_OFF
bus-off detected
CANDEV_EVENT_ERROR_PASSIVE
driver switched in error passive
CANDEV_EVENT_ERROR_WARNING
driver reached error warning
struct candev candev_t

Forward declaration for candev struct.

void(* candev_event_cb_t()

Event callback for signaling event to upper layers.

Parameters

dev:CAN device descriptor
type:type of the event
arg:event argument

struct candev_driver candev_driver_t

Structure to hold driver interface -> function mapping.

struct candev

Structure to hold driver state.

Supposed to be extended by driver implementations. The extended structure should contain all variable driver state.

const struct candev_driver * driver

ptr to that driver’s interface.

candev.h::candev_event_cb_t event_callback

callback for device events

void * isr_arg

argument to pass on isr event

struct can_bittiming bittiming

device bittimings

enum can.h::can_state state

device state

struct candev_driver

Structure to hold driver interface -> function mapping.

int(* send()

Send packet.

Parameters

dev:CAN device descriptor
frame:CAN frame to send

Return values

  • < 0 on error
  • mailbox id >= 0 if OK
int(* abort()

Abort a packet sending.

Parameters

dev:CAN device descriptor
frame:CAN frame to abort

Return values

  • < 0 on error
  • 0 on OK
int(* init()

the driver’s initialization function

Parameters

dev:CAN device descriptor

Return values

  • < 0 on error, 0 on success
void(* isr()

a driver’s user-space ISR handler

Parameters

dev:CAN device descriptor

int(* get()

Get an option value from a given CAN device.

Parameters

dev:CAN device descriptor
opt:option type
value:pointer to store the option’s value in
max_len:maximal amount of byte that fit into value

Return values

  • number of bytes written to value
  • <0 on error
int(* set()

Set an option value for a given CAN device.

Parameters

dev:CAN device descriptor
opt:option type
value:value to set
value_len:the length of value

Return values

  • number of bytes used from value
  • <0 on error
int(* set_filter()

Set a receive filter.

Parameters

dev:CAN device descriptor
filter:filter to set

Return values

  • a positive filter number
  • <0 on error
int(* remove_filter()

Remove a filter.

Parameters

dev:CAN device descriptor
filter:filter to remove

Return values

  • 0 on success
  • <0 on error