Go to the documentation of this file.00001
00236 #ifndef _RTCAN_H
00237 #define _RTCAN_H
00238
00239 #ifdef __KERNEL__
00240
00241 #include <linux/net.h>
00242 #include <linux/socket.h>
00243 #include <linux/if.h>
00244
00245 #else
00246
00247 #include <net/if.h>
00248
00249 #endif
00250
00251 #include <rtdm/rtdm.h>
00252
00253 #define RTCAN_PROFILE_VER 2
00254
00255 #ifndef AF_CAN
00256
00258 #define AF_CAN 29
00259
00261 #define PF_CAN AF_CAN
00262
00263 #endif
00264
00269 #define SOL_CAN_RAW 103
00270
00272 typedef uint32_t can_id_t;
00273 typedef uint32_t canid_t;
00274
00276 typedef can_id_t can_err_mask_t;
00277
00284 #define CAN_EFF_MASK 0x1FFFFFFF
00285
00287 #define CAN_SFF_MASK 0x000007FF
00288
00296 #define CAN_EFF_FLAG 0x80000000
00297
00298 #define CAN_RTR_FLAG 0x40000000
00299
00300 #define CAN_ERR_FLAG 0x20000000
00301
00302 #define CAN_INV_FILTER CAN_ERR_FLAG
00303
00313 #define CAN_RAW 1
00314
00316 #define CAN_BAUDRATE_UNKNOWN ((uint32_t)-1)
00317 #define CAN_BAUDRATE_UNCONFIGURED 0
00318
00322 typedef uint32_t can_baudrate_t;
00323
00327 enum CAN_BITTIME_TYPE {
00329 CAN_BITTIME_STD,
00331 CAN_BITTIME_BTR
00332 };
00333
00337 typedef enum CAN_BITTIME_TYPE can_bittime_type_t;
00338
00342 struct can_bittime_std {
00343 uint32_t brp;
00344 uint8_t prop_seg;
00345 uint8_t phase_seg1;
00346 uint8_t phase_seg2;
00347 uint8_t sjw:7;
00348 uint8_t sam:1;
00349 };
00350
00354 struct can_bittime_btr {
00355
00356 uint8_t btr0;
00357 uint8_t btr1;
00358 };
00359
00363 struct can_bittime {
00365 can_bittime_type_t type;
00366
00367 union {
00369 struct can_bittime_std std;
00371 struct can_bittime_btr btr;
00372 };
00373 };
00374
00379 enum CAN_MODE {
00381 CAN_MODE_STOP = 0,
00382
00386 CAN_MODE_START,
00387
00394 CAN_MODE_SLEEP
00395 };
00399 typedef enum CAN_MODE can_mode_t;
00400
00416 #define CAN_CTRLMODE_LISTENONLY 0x1
00417
00423 #define CAN_CTRLMODE_LOOPBACK 0x2
00424
00428 #define CAN_CTRLMODE_3_SAMPLES 0x4
00429
00433 typedef int can_ctrlmode_t;
00434
00439 enum CAN_STATE {
00441 CAN_STATE_ERROR_ACTIVE = 0,
00442 CAN_STATE_ACTIVE = 0,
00443
00445 CAN_STATE_ERROR_WARNING = 1,
00446 CAN_STATE_BUS_WARNING = 1,
00447
00449 CAN_STATE_ERROR_PASSIVE = 2,
00450 CAN_STATE_BUS_PASSIVE = 2,
00451
00453 CAN_STATE_BUS_OFF,
00454
00456 CAN_STATE_SCANNING_BAUDRATE,
00457
00459 CAN_STATE_STOPPED,
00460
00462 CAN_STATE_SLEEPING,
00463 };
00467 typedef enum CAN_STATE can_state_t;
00468
00469 #define CAN_STATE_OPERATING(state) ((state) < CAN_STATE_BUS_OFF)
00470
00496 typedef struct can_filter {
00499 uint32_t can_id;
00500
00503 uint32_t can_mask;
00504 } can_filter_t;
00505
00509 struct sockaddr_can {
00511 sa_family_t can_family;
00512
00514 int can_ifindex;
00515 };
00516
00522 typedef struct can_frame {
00527 can_id_t can_id;
00528
00530 uint8_t can_dlc;
00531
00533 uint8_t data[8] __attribute__ ((aligned(8)));
00534 } can_frame_t;
00535
00540 #define RTCAN_TAKE_NO_TIMESTAMPS 0
00541 #define RTCAN_TAKE_TIMESTAMPS 1
00544 #define RTIOC_TYPE_CAN RTDM_CLASS_CAN
00545
00584 #define CAN_RAW_FILTER 0x1
00585
00614 #define CAN_RAW_ERR_FILTER 0x2
00615
00642 #define CAN_RAW_LOOPBACK 0x3
00643
00650 #define CAN_RAW_RECV_OWN_MSGS 0x4
00651
00684 #ifdef DOXYGEN_CPP
00685 #define SIOCGIFINDEX defined_by_kernel_header_file
00686 #endif
00687
00722 #define SIOCSCANBAUDRATE _IOW(RTIOC_TYPE_CAN, 0x01, struct ifreq)
00723
00749 #define SIOCGCANBAUDRATE _IOWR(RTIOC_TYPE_CAN, 0x02, struct ifreq)
00750
00783 #define SIOCSCANCUSTOMBITTIME _IOW(RTIOC_TYPE_CAN, 0x03, struct ifreq)
00784
00810 #define SIOCGCANCUSTOMBITTIME _IOWR(RTIOC_TYPE_CAN, 0x04, struct ifreq)
00811
00853 #define SIOCSCANMODE _IOW(RTIOC_TYPE_CAN, 0x05, struct ifreq)
00854
00887 #define SIOCGCANSTATE _IOWR(RTIOC_TYPE_CAN, 0x06, struct ifreq)
00888
00921 #define SIOCSCANCTRLMODE _IOW(RTIOC_TYPE_CAN, 0x07, struct ifreq)
00922
00949 #define SIOCGCANCTRLMODE _IOWR(RTIOC_TYPE_CAN, 0x08, struct ifreq)
00950
00976 #define RTCAN_RTIOC_TAKE_TIMESTAMP _IOW(RTIOC_TYPE_CAN, 0x09, int)
00977
01009 #define RTCAN_RTIOC_RCV_TIMEOUT _IOW(RTIOC_TYPE_CAN, 0x0A, nanosecs_rel_t)
01010
01042 #define RTCAN_RTIOC_SND_TIMEOUT _IOW(RTIOC_TYPE_CAN, 0x0B, nanosecs_rel_t)
01043
01045 #define CAN_ERR_DLC 8
01046
01067 #define CAN_ERR_TX_TIMEOUT 0x00000001U
01068
01070 #define CAN_ERR_LOSTARB 0x00000002U
01071
01073 #define CAN_ERR_CRTL 0x00000004U
01074
01077 #define CAN_ERR_PROT 0x00000008U
01078
01080 #define CAN_ERR_TRX 0x00000010U
01081
01083 #define CAN_ERR_ACK 0x00000020U
01084
01086 #define CAN_ERR_BUSOFF 0x00000040U
01087
01089 #define CAN_ERR_BUSERROR 0x00000080U
01090
01092 #define CAN_ERR_RESTARTED 0x00000100U
01093
01095 #define CAN_ERR_MASK 0x1FFFFFFFU
01096
01103
01104 #define CAN_ERR_LOSTARB_UNSPEC 0x00
01112
01113 #define CAN_ERR_CRTL_UNSPEC 0x00
01114 #define CAN_ERR_CRTL_RX_OVERFLOW 0x01
01115 #define CAN_ERR_CRTL_TX_OVERFLOW 0x02
01116 #define CAN_ERR_CRTL_RX_WARNING 0x04
01117 #define CAN_ERR_CRTL_TX_WARNING 0x08
01118 #define CAN_ERR_CRTL_RX_PASSIVE 0x10
01119 #define CAN_ERR_CRTL_TX_PASSIVE 0x20
01126
01127 #define CAN_ERR_PROT_UNSPEC 0x00
01128 #define CAN_ERR_PROT_BIT 0x01
01129 #define CAN_ERR_PROT_FORM 0x02
01130 #define CAN_ERR_PROT_STUFF 0x04
01131 #define CAN_ERR_PROT_BIT0 0x08
01132 #define CAN_ERR_PROT_BIT1 0x10
01133 #define CAN_ERR_PROT_OVERLOAD 0x20
01134 #define CAN_ERR_PROT_ACTIVE 0x40
01135 #define CAN_ERR_PROT_TX 0x80
01142
01143 #define CAN_ERR_PROT_LOC_UNSPEC 0x00
01144 #define CAN_ERR_PROT_LOC_SOF 0x03
01145 #define CAN_ERR_PROT_LOC_ID28_21 0x02
01146 #define CAN_ERR_PROT_LOC_ID20_18 0x06
01147 #define CAN_ERR_PROT_LOC_SRTR 0x04
01148 #define CAN_ERR_PROT_LOC_IDE 0x05
01149 #define CAN_ERR_PROT_LOC_ID17_13 0x07
01150 #define CAN_ERR_PROT_LOC_ID12_05 0x0F
01151 #define CAN_ERR_PROT_LOC_ID04_00 0x0E
01152 #define CAN_ERR_PROT_LOC_RTR 0x0C
01153 #define CAN_ERR_PROT_LOC_RES1 0x0D
01154 #define CAN_ERR_PROT_LOC_RES0 0x09
01155 #define CAN_ERR_PROT_LOC_DLC 0x0B
01156 #define CAN_ERR_PROT_LOC_DATA 0x0A
01157 #define CAN_ERR_PROT_LOC_CRC_SEQ 0x08
01158 #define CAN_ERR_PROT_LOC_CRC_DEL 0x18
01159 #define CAN_ERR_PROT_LOC_ACK 0x19
01160 #define CAN_ERR_PROT_LOC_ACK_DEL 0x1B
01161 #define CAN_ERR_PROT_LOC_EOF 0x1A
01162 #define CAN_ERR_PROT_LOC_INTERM 0x12
01169
01170
01171 #define CAN_ERR_TRX_UNSPEC 0x00
01172 #define CAN_ERR_TRX_CANH_NO_WIRE 0x04
01173 #define CAN_ERR_TRX_CANH_SHORT_TO_BAT 0x05
01174 #define CAN_ERR_TRX_CANH_SHORT_TO_VCC 0x06
01175 #define CAN_ERR_TRX_CANH_SHORT_TO_GND 0x07
01176 #define CAN_ERR_TRX_CANL_NO_WIRE 0x40
01177 #define CAN_ERR_TRX_CANL_SHORT_TO_BAT 0x50
01178 #define CAN_ERR_TRX_CANL_SHORT_TO_VCC 0x60
01179 #define CAN_ERR_TRX_CANL_SHORT_TO_GND 0x70
01180 #define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80
01183
01184
01198 #endif