00001
00233 #ifndef _RTCAN_H
00234 #define _RTCAN_H
00235
00236
00237 #ifdef __KERNEL__
00238
00239 #include <linux/net.h>
00240 #include <linux/socket.h>
00241 #include <linux/if.h>
00242
00243 #else
00244
00245 #include <net/if.h>
00246
00247 #endif
00248
00249
00250 #include <rtdm/rtdm.h>
00251
00252 #ifndef AF_CAN
00253
00255 #define AF_CAN 29
00256
00258 #define PF_CAN AF_CAN
00259
00260 #endif
00261
00266 #define CAN_RAW 0
00267
00272 #define SOL_CAN_RAW 103
00273
00275 typedef uint32_t can_id_t;
00276 typedef uint32_t canid_t;
00277
00279 typedef can_id_t can_err_mask_t;
00280
00287 #define CAN_EFF_MASK 0x1FFFFFFF
00288
00290 #define CAN_SFF_MASK 0x000007FF
00291
00299 #define CAN_EFF_FLAG 0x80000000
00300 #define CAN_RTR_FLAG 0x40000000
00301 #define CAN_ERR_FLAG 0x20000000
00309 enum CAN_PROTO {
00310
00312 CAN_PROTO_RAW,
00313 CAN_PROTO_MAX
00314 };
00317 #define CAN_BAUDRATE_UNKNOWN ((uint32_t)-1)
00318 #define CAN_BAUDRATE_UNCONFIGURED 0
00319
00323 typedef uint32_t can_baudrate_t;
00324
00325
00329 enum CAN_BITTIME_TYPE {
00331 CAN_BITTIME_STD,
00333 CAN_BITTIME_BTR
00334 };
00335
00336
00340 typedef enum CAN_BITTIME_TYPE can_bittime_type_t;
00341
00345 struct can_bittime_std {
00346 uint32_t brp;
00347 uint8_t prop_seg;
00348 uint8_t phase_seg1;
00349 uint8_t phase_seg2;
00350 uint8_t sjw:7;
00351 uint8_t sam:1;
00352 };
00353
00357 struct can_bittime_btr {
00358
00359 uint8_t btr0;
00360 uint8_t btr1;
00361 };
00362
00363
00367 struct can_bittime {
00369 can_bittime_type_t type;
00370 union {
00372 struct can_bittime_std std;
00374 struct can_bittime_btr btr;
00375 };
00376 };
00377
00382 enum CAN_MODE {
00383
00385 CAN_MODE_STOP = 0,
00386
00390 CAN_MODE_START,
00391
00398 CAN_MODE_SLEEP
00399 };
00403 typedef enum CAN_MODE can_mode_t;
00404
00410 #define CAN_CTRLMODE_LISTENONLY 0x1
00411
00412 #define CAN_CTRLMODE_LOOPBACK 0x2
00413
00416 typedef int can_ctrlmode_t;
00417
00422 enum CAN_STATE {
00424 CAN_STATE_ACTIVE = 0,
00425
00427 CAN_STATE_BUS_WARNING,
00428
00430 CAN_STATE_BUS_PASSIVE,
00431
00433 CAN_STATE_BUS_OFF,
00434
00436 CAN_STATE_SCANNING_BAUDRATE,
00437
00439 CAN_STATE_STOPPED,
00440
00442 CAN_STATE_SLEEPING,
00443 };
00447 typedef enum CAN_STATE can_state_t;
00448
00449 #define CAN_STATE_OPERATING(state) ((state) < CAN_STATE_BUS_OFF)
00450
00470 typedef struct can_filter {
00471
00473 uint32_t can_id;
00474
00477 uint32_t can_mask;
00478 } can_filter_t;
00479
00480
00484 struct sockaddr_can {
00486 sa_family_t can_family;
00488 int can_ifindex;
00489 };
00490
00491
00497 typedef struct can_frame {
00498
00503 can_id_t can_id;
00504
00506 uint8_t can_dlc;
00507
00509 uint8_t data[8] __attribute__ ((aligned(8)));
00510 } can_frame_t;
00511
00512
00513
00518 #define RTCAN_TAKE_NO_TIMESTAMPS 0
00519 #define RTCAN_TAKE_TIMESTAMPS 1
00523 #define RTIOC_TYPE_CAN RTDM_CLASS_CAN
00524
00525
00564 #define CAN_RAW_FILTER 0x1
00565
00594 #define CAN_RAW_ERR_FILTER 0x2
00595
00622 #define CAN_RAW_LOOPBACK 0x3
00623 #define CAN_RAW_TX_LOOPBACK CAN_RAW_LOOPBACK
00624
00631 #define CAN_RAW_RECV_OWN_MSGS 0x4
00632
00665 #ifndef SIOCGIFINDEX
00666 #define SIOCGIFINDEX \
00667 _IOWR(RTIOC_TYPE_CAN, 0x00, struct ifreq)
00668 #endif
00669
00704 #define SIOCSCANBAUDRATE \
00705 _IOW(RTIOC_TYPE_CAN, 0x01, struct ifreq)
00706
00732 #define SIOCGCANBAUDRATE \
00733 _IOWR(RTIOC_TYPE_CAN, 0x02, struct ifreq)
00734
00767 #define SIOCSCANCUSTOMBITTIME \
00768 _IOW(RTIOC_TYPE_CAN, 0x03, struct ifreq)
00769
00795 #define SIOCGCANCUSTOMBITTIME \
00796 _IOWR(RTIOC_TYPE_CAN, 0x04, struct ifreq)
00797
00798
00840 #define SIOCSCANMODE \
00841 _IOW(RTIOC_TYPE_CAN, 0x05, struct ifreq)
00842
00875 #define SIOCGCANSTATE \
00876 _IOWR(RTIOC_TYPE_CAN, 0x06, struct ifreq)
00877
00878
00911 #define SIOCSCANCTRLMODE \
00912 _IOW(RTIOC_TYPE_CAN, 0x07, struct ifreq)
00913
00940 #define SIOCGCANCTRLMODE \
00941 _IOWR(RTIOC_TYPE_CAN, 0x08, struct ifreq)
00942
00968 #define RTCAN_RTIOC_TAKE_TIMESTAMP _IOW(RTIOC_TYPE_CAN, 0x09, int)
00969
01001 #define RTCAN_RTIOC_RCV_TIMEOUT _IOW(RTIOC_TYPE_CAN, 0x0A, nanosecs_rel_t)
01002
01034 #define RTCAN_RTIOC_SND_TIMEOUT _IOW(RTIOC_TYPE_CAN, 0x0B, nanosecs_rel_t)
01035
01037 #define CAN_ERR_DLC 8
01038
01039
01047 #define CAN_ERR_TX_TIMEOUT 0x00000001U
01048
01050 #define CAN_ERR_LOSTARB 0x00000002U
01051
01053 #define CAN_ERR_CRTL 0x00000004U
01054
01057 #define CAN_ERR_PROT 0x00000008U
01058
01060 #define CAN_ERR_TRX 0x00000010U
01061
01063 #define CAN_ERR_ACK 0x00000020U
01064
01066 #define CAN_ERR_BUSOFF 0x00000040U
01067
01069 #define CAN_ERR_BUSERROR 0x00000080U
01070
01072 #define CAN_ERR_RESTARTED 0x00000100U
01073
01075 #define CAN_ERR_MASK 0x1FFFFFFFU
01076
01083
01084 #define CAN_ERR_LOSTARB_UNSPEC 0x00
01092
01093 #define CAN_ERR_CRTL_UNSPEC 0x00
01094 #define CAN_ERR_CRTL_RX_OVERFLOW 0x01
01095 #define CAN_ERR_CRTL_TX_OVERFLOW 0x02
01096 #define CAN_ERR_CRTL_RX_WARNING 0x04
01097 #define CAN_ERR_CRTL_TX_WARNING 0x08
01098 #define CAN_ERR_CRTL_RX_PASSIVE 0x10
01099 #define CAN_ERR_CRTL_TX_PASSIVE 0x20
01107
01108 #define CAN_ERR_PROT_UNSPEC 0x00
01109 #define CAN_ERR_PROT_BIT 0x01
01110 #define CAN_ERR_PROT_FORM 0x02
01111 #define CAN_ERR_PROT_STUFF 0x04
01112 #define CAN_ERR_PROT_BIT0 0x08
01113 #define CAN_ERR_PROT_BIT1 0x10
01114 #define CAN_ERR_PROT_OVERLOAD 0x20
01115 #define CAN_ERR_PROT_ACTIVE 0x40
01116 #define CAN_ERR_PROT_TX 0x80
01123
01124 #define CAN_ERR_PROT_LOC_UNSPEC 0x00
01125 #define CAN_ERR_PROT_LOC_SOF 0x03
01126 #define CAN_ERR_PROT_LOC_ID28_21 0x02
01127 #define CAN_ERR_PROT_LOC_ID20_18 0x06
01128 #define CAN_ERR_PROT_LOC_SRTR 0x04
01129 #define CAN_ERR_PROT_LOC_IDE 0x05
01130 #define CAN_ERR_PROT_LOC_ID17_13 0x07
01131 #define CAN_ERR_PROT_LOC_ID12_05 0x0F
01132 #define CAN_ERR_PROT_LOC_ID04_00 0x0E
01133 #define CAN_ERR_PROT_LOC_RTR 0x0C
01134 #define CAN_ERR_PROT_LOC_RES1 0x0D
01135 #define CAN_ERR_PROT_LOC_RES0 0x09
01136 #define CAN_ERR_PROT_LOC_DLC 0x0B
01137 #define CAN_ERR_PROT_LOC_DATA 0x0A
01138 #define CAN_ERR_PROT_LOC_CRC_SEQ 0x08
01139 #define CAN_ERR_PROT_LOC_CRC_DEL 0x18
01140 #define CAN_ERR_PROT_LOC_ACK 0x19
01141 #define CAN_ERR_PROT_LOC_ACK_DEL 0x1B
01142 #define CAN_ERR_PROT_LOC_EOF 0x1A
01143 #define CAN_ERR_PROT_LOC_INTERM 0x12
01150
01151
01152 #define CAN_ERR_TRX_UNSPEC 0x00
01153 #define CAN_ERR_TRX_CANH_NO_WIRE 0x04
01154 #define CAN_ERR_TRX_CANH_SHORT_TO_BAT 0x05
01155 #define CAN_ERR_TRX_CANH_SHORT_TO_VCC 0x06
01156 #define CAN_ERR_TRX_CANH_SHORT_TO_GND 0x07
01157 #define CAN_ERR_TRX_CANL_NO_WIRE 0x40
01158 #define CAN_ERR_TRX_CANL_SHORT_TO_BAT 0x50
01159 #define CAN_ERR_TRX_CANL_SHORT_TO_VCC 0x60
01160 #define CAN_ERR_TRX_CANL_SHORT_TO_GND 0x70
01161 #define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80
01164
01165
01171 #endif