Xenomai  3.1
can.h File Reference

Real-Time Driver Model for RT-Socket-CAN, CAN device profile header. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  can_bittime_std
 Standard bit-time parameters according to Bosch. More...
 
struct  can_bittime_btr
 Hardware-specific BTR bit-times. More...
 
struct  can_bittime
 Custom CAN bit-time definition. More...
 
struct  can_filter
 Filter for reception of CAN messages. More...
 
struct  sockaddr_can
 Socket address structure for the CAN address family. More...
 
struct  can_frame
 Raw CAN frame. More...
 
struct  can_ifreq
 CAN interface request descriptor. More...
 

Macros

#define AF_CAN   29
 CAN address family.
 
#define PF_CAN   AF_CAN
 CAN protocol family.
 
#define SOL_CAN_RAW   103
 CAN socket levels. More...
 
CAN ID masks

Bit masks for masking CAN IDs

#define CAN_EFF_MASK   0x1FFFFFFF
 Bit mask for extended CAN IDs.
 
#define CAN_SFF_MASK   0x000007FF
 Bit mask for standard CAN IDs.
 
CAN ID flags

Flags within a CAN ID indicating special CAN frame attributes

#define CAN_EFF_FLAG   0x80000000
 Extended frame.
 
#define CAN_RTR_FLAG   0x40000000
 Remote transmission frame.
 
#define CAN_ERR_FLAG   0x20000000
 Error frame (see Errors), not valid in struct can_filter.
 
#define CAN_INV_FILTER   CAN_ERR_FLAG
 Invert CAN filter definition, only valid in struct can_filter.
 
Particular CAN protocols

Possible protocols for the PF_CAN protocol family

Currently only the RAW protocol is supported.

#define CAN_RAW   1
 Raw protocol of PF_CAN, applicable to socket type SOCK_RAW.
 
CAN controller modes

Special CAN controllers modes, which can be or'ed together.

Note
These modes are hardware-dependent. Please consult the hardware manual of the CAN controller for more detailed information.
#define CAN_CTRLMODE_LISTENONLY   0x1
 
#define CAN_CTRLMODE_LOOPBACK   0x2
 
#define CAN_CTRLMODE_3_SAMPLES   0x4
 
Timestamp switches

Arguments to pass to RTCAN_RTIOC_TAKE_TIMESTAMP

#define RTCAN_TAKE_NO_TIMESTAMPS   0
 Switch off taking timestamps.
 
#define RTCAN_TAKE_TIMESTAMPS   1
 Do take timestamps.
 
RAW socket options

Setting and getting CAN RAW socket options.

#define CAN_RAW_FILTER   0x1
 
CAN filter definition More...
 
#define CAN_RAW_ERR_FILTER   0x2
 
CAN error mask More...
 
#define CAN_RAW_LOOPBACK   0x3
 
CAN TX loopback More...
 
#define CAN_RAW_RECV_OWN_MSGS   0x4
 CAN receive own messages. More...
 
IOCTLs

CAN device IOCTLs

Deprecated:
Passing struct ifreq as a request descriptor for CAN IOCTLs is still accepted for backward compatibility, however it is recommended to switch to struct can_ifreq at the first opportunity.
#define SIOCGIFINDEX   defined_by_kernel_header_file
 
Get CAN interface index by name More...
 
#define SIOCSCANBAUDRATE   _IOW(RTIOC_TYPE_CAN, 0x01, struct can_ifreq)
 
Set baud rate More...
 
#define SIOCGCANBAUDRATE   _IOWR(RTIOC_TYPE_CAN, 0x02, struct can_ifreq)
 
Get baud rate More...
 
#define SIOCSCANCUSTOMBITTIME   _IOW(RTIOC_TYPE_CAN, 0x03, struct can_ifreq)
 
Set custom bit time parameter More...
 
#define SIOCGCANCUSTOMBITTIME   _IOWR(RTIOC_TYPE_CAN, 0x04, struct can_ifreq)
 
Get custom bit-time parameters More...
 
#define SIOCSCANMODE   _IOW(RTIOC_TYPE_CAN, 0x05, struct can_ifreq)
 
Set operation mode of CAN controller More...
 
#define SIOCGCANSTATE   _IOWR(RTIOC_TYPE_CAN, 0x06, struct can_ifreq)
 
Get current state of CAN controller More...
 
#define SIOCSCANCTRLMODE   _IOW(RTIOC_TYPE_CAN, 0x07, struct can_ifreq)
 
Set special controller modes More...
 
#define SIOCGCANCTRLMODE   _IOWR(RTIOC_TYPE_CAN, 0x08, struct can_ifreq)
 
Get special controller modes More...
 
#define RTCAN_RTIOC_TAKE_TIMESTAMP   _IOW(RTIOC_TYPE_CAN, 0x09, int)
 
Enable or disable storing a high precision timestamp upon reception of a CAN frame. More...
 
#define RTCAN_RTIOC_RCV_TIMEOUT   _IOW(RTIOC_TYPE_CAN, 0x0A, nanosecs_rel_t)
 
Specify a reception timeout for a socket More...
 
#define RTCAN_RTIOC_SND_TIMEOUT   _IOW(RTIOC_TYPE_CAN, 0x0B, nanosecs_rel_t)
 
Specify a transmission timeout for a socket More...
 
Error mask

Error class (mask) in can_id field of struct can_frame to be used with CAN_RAW_ERR_FILTER.

Note: Error reporting is hardware dependent and most CAN controllers report less detailed error conditions than the SJA1000.

Note: In case of a bus-off error condition (CAN_ERR_BUSOFF), the CAN controller is not restarted automatically. It is the application's responsibility to react appropriately, e.g. calling CAN_MODE_START.

Note: Bus error interrupts (CAN_ERR_BUSERROR) are enabled when an application is calling a Recv function on a socket listening on bus errors (using CAN_RAW_ERR_FILTER). After one bus error has occured, the interrupt will be disabled to allow the application time for error processing and to efficiently avoid bus error interrupt flooding.

#define CAN_ERR_TX_TIMEOUT   0x00000001U
 TX timeout (netdevice driver)
 
#define CAN_ERR_LOSTARB   0x00000002U
 Lost arbitration (see data[0])
 
#define CAN_ERR_CRTL   0x00000004U
 Controller problems (see data[1])
 
#define CAN_ERR_PROT   0x00000008U
 Protocol violations (see data[2], data[3])
 
#define CAN_ERR_TRX   0x00000010U
 Transceiver status (see data[4])
 
#define CAN_ERR_ACK   0x00000020U
 Received no ACK on transmission.
 
#define CAN_ERR_BUSOFF   0x00000040U
 Bus off.
 
#define CAN_ERR_BUSERROR   0x00000080U
 Bus error (may flood!)
 
#define CAN_ERR_RESTARTED   0x00000100U
 Controller restarted.
 
#define CAN_ERR_MASK   0x1FFFFFFFU
 Omit EFF, RTR, ERR flags.
 
Arbitration lost error

Error in the data[0] field of struct can_frame.

#define CAN_ERR_LOSTARB_UNSPEC   0x00
 unspecified More...
 
Controller problems

Error in the data[1] field of struct can_frame.

#define CAN_ERR_CRTL_UNSPEC   0x00
 unspecified
 
#define CAN_ERR_CRTL_RX_OVERFLOW   0x01
 RX buffer overflow.
 
#define CAN_ERR_CRTL_TX_OVERFLOW   0x02
 TX buffer overflow.
 
#define CAN_ERR_CRTL_RX_WARNING   0x04
 reached warning level for RX errors
 
#define CAN_ERR_CRTL_TX_WARNING   0x08
 reached warning level for TX errors
 
#define CAN_ERR_CRTL_RX_PASSIVE   0x10
 reached passive level for RX errors
 
#define CAN_ERR_CRTL_TX_PASSIVE   0x20
 reached passive level for TX errors
 
Protocol error type

Error in the data[2] field of struct can_frame.

#define CAN_ERR_PROT_UNSPEC   0x00
 unspecified
 
#define CAN_ERR_PROT_BIT   0x01
 single bit error
 
#define CAN_ERR_PROT_FORM   0x02
 frame format error
 
#define CAN_ERR_PROT_STUFF   0x04
 bit stuffing error
 
#define CAN_ERR_PROT_BIT0   0x08
 unable to send dominant bit
 
#define CAN_ERR_PROT_BIT1   0x10
 unable to send recessive bit
 
#define CAN_ERR_PROT_OVERLOAD   0x20
 bus overload
 
#define CAN_ERR_PROT_ACTIVE   0x40
 active error announcement
 
#define CAN_ERR_PROT_TX   0x80
 error occured on transmission
 
Protocol error location

Error in the data[4] field of struct can_frame.

#define CAN_ERR_PROT_LOC_UNSPEC   0x00
 unspecified
 
#define CAN_ERR_PROT_LOC_SOF   0x03
 start of frame
 
#define CAN_ERR_PROT_LOC_ID28_21   0x02
 ID bits 28 - 21 (SFF: 10 - 3)
 
#define CAN_ERR_PROT_LOC_ID20_18   0x06
 ID bits 20 - 18 (SFF: 2 - 0 )
 
#define CAN_ERR_PROT_LOC_SRTR   0x04
 substitute RTR (SFF: RTR)
 
#define CAN_ERR_PROT_LOC_IDE   0x05
 identifier extension
 
#define CAN_ERR_PROT_LOC_ID17_13   0x07
 ID bits 17-13.
 
#define CAN_ERR_PROT_LOC_ID12_05   0x0F
 ID bits 12-5.
 
#define CAN_ERR_PROT_LOC_ID04_00   0x0E
 ID bits 4-0.
 
#define CAN_ERR_PROT_LOC_RTR   0x0C
 RTR.
 
#define CAN_ERR_PROT_LOC_RES1   0x0D
 reserved bit 1
 
#define CAN_ERR_PROT_LOC_RES0   0x09
 reserved bit 0
 
#define CAN_ERR_PROT_LOC_DLC   0x0B
 data length code
 
#define CAN_ERR_PROT_LOC_DATA   0x0A
 data section
 
#define CAN_ERR_PROT_LOC_CRC_SEQ   0x08
 CRC sequence.
 
#define CAN_ERR_PROT_LOC_CRC_DEL   0x18
 CRC delimiter.
 
#define CAN_ERR_PROT_LOC_ACK   0x19
 ACK slot.
 
#define CAN_ERR_PROT_LOC_ACK_DEL   0x1B
 ACK delimiter.
 
#define CAN_ERR_PROT_LOC_EOF   0x1A
 end of frame
 
#define CAN_ERR_PROT_LOC_INTERM   0x12
 intermission
 
#define CAN_ERR_TRX_UNSPEC   0x00
 0000 0000
 
#define CAN_ERR_TRX_CANH_NO_WIRE   0x04
 0000 0100
 
#define CAN_ERR_TRX_CANH_SHORT_TO_BAT   0x05
 0000 0101
 
#define CAN_ERR_TRX_CANH_SHORT_TO_VCC   0x06
 0000 0110
 
#define CAN_ERR_TRX_CANH_SHORT_TO_GND   0x07
 0000 0111
 
#define CAN_ERR_TRX_CANL_NO_WIRE   0x40
 0100 0000
 
#define CAN_ERR_TRX_CANL_SHORT_TO_BAT   0x50
 0101 0000
 
#define CAN_ERR_TRX_CANL_SHORT_TO_VCC   0x60
 0110 0000
 
#define CAN_ERR_TRX_CANL_SHORT_TO_GND   0x70
 0111 0000
 
#define CAN_ERR_TRX_CANL_SHORT_TO_CANH   0x80
 1000 0000
 

Typedefs

typedef uint32_t can_id_t
 Type of CAN id (see CAN_xxx_MASK and CAN_xxx_FLAG)
 
typedef can_id_t can_err_mask_t
 Type of CAN error mask.
 
typedef uint32_t can_baudrate_t
 Baudrate definition in bits per second.
 
typedef enum CAN_BITTIME_TYPE can_bittime_type_t
 See CAN_BITTIME_TYPE.
 
typedef enum CAN_MODE can_mode_t
 See CAN_MODE.
 
typedef int can_ctrlmode_t
 See CAN_CTRLMODE.
 
typedef enum CAN_STATE can_state_t
 See CAN_STATE.
 
typedef struct can_filter can_filter_t
 Filter for reception of CAN messages. More...
 
typedef struct can_frame can_frame_t
 Raw CAN frame. More...
 

Enumerations

enum  CAN_BITTIME_TYPE { CAN_BITTIME_STD, CAN_BITTIME_BTR }
 Supported CAN bit-time types. More...
 
CAN operation modes

Modes into which CAN controllers can be set

enum  CAN_MODE { CAN_MODE_STOP = 0, CAN_MODE_START, CAN_MODE_SLEEP }
 
CAN controller states

States a CAN controller can be in.

enum  CAN_STATE {
  CAN_STATE_ERROR_ACTIVE = 0, CAN_STATE_ACTIVE = 0, CAN_STATE_ERROR_WARNING = 1, CAN_STATE_BUS_WARNING = 1,
  CAN_STATE_ERROR_PASSIVE = 2, CAN_STATE_BUS_PASSIVE = 2, CAN_STATE_BUS_OFF, CAN_STATE_SCANNING_BAUDRATE,
  CAN_STATE_STOPPED, CAN_STATE_SLEEPING
}
 

Detailed Description

Real-Time Driver Model for RT-Socket-CAN, CAN device profile header.

Note
Copyright (C) 2006 Wolfgang Grandegger wg@gr.nosp@m.ande.nosp@m.gger..nosp@m.com
Copyright (C) 2005, 2006 Sebastian Smolorz Sebas.nosp@m.tian.nosp@m..Smol.nosp@m.orz@.nosp@m.stud..nosp@m.uni-.nosp@m.hanno.nosp@m.ver..nosp@m.de

This RTDM CAN device profile header is based on:

include/linux/can.h, include/linux/socket.h, net/can/pf_can.h in linux-can.patch, a CAN socket framework for Linux

Copyright (C) 2004, 2005, Robert Schwebel, Benedikt Spranger, Marc Kleine-Budde, Pengutronix

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.