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
00263 typedef uint32_t can_id_t;
00264 typedef uint32_t canid_t;
00265
00267 typedef can_id_t can_err_mask_t;
00268
00275 #define CAN_EFF_MASK 0x1FFFFFFF
00276
00278 #define CAN_SFF_MASK 0x000007FF
00279
00287 #define CAN_EFF_FLAG 0x80000000
00288 #define CAN_RTR_FLAG 0x40000000
00289 #define CAN_ERR_FLAG 0x20000000
00297 enum CAN_PROTO {
00298
00300 CAN_PROTO_RAW,
00301 CAN_PROTO_MAX
00302 };
00305 #define CAN_BAUDRATE_UNKNOWN ((uint32_t)-1)
00306 #define CAN_BAUDRATE_UNCONFIGURED 0
00307
00311 typedef uint32_t can_baudrate_t;
00312
00313
00317 enum CAN_BITTIME_TYPE {
00319 CAN_BITTIME_STD,
00321 CAN_BITTIME_BTR
00322 };
00323
00324
00328 typedef enum CAN_BITTIME_TYPE can_bittime_type_t;
00329
00333 struct can_bittime_std {
00334 uint32_t brp;
00335 uint8_t prop_seg;
00336 uint8_t phase_seg1;
00337 uint8_t phase_seg2;
00338 uint8_t sjw:7;
00339 uint8_t sam:1;
00340 };
00341
00345 struct can_bittime_btr {
00346
00347 uint8_t btr0;
00348 uint8_t btr1;
00349 };
00350
00351
00355 struct can_bittime {
00357 can_bittime_type_t type;
00358 union {
00360 struct can_bittime_std std;
00362 struct can_bittime_btr btr;
00363 };
00364 };
00365
00370 enum CAN_MODE {
00371
00373 CAN_MODE_STOP = 0,
00374
00378 CAN_MODE_START,
00379
00386 CAN_MODE_SLEEP
00387 };
00391 typedef enum CAN_MODE can_mode_t;
00392
00398 #define CAN_CTRLMODE_LISTENONLY 0x1
00399
00400 #define CAN_CTRLMODE_LOOPBACK 0x2
00401
00404 typedef int can_ctrlmode_t;
00405
00410 enum CAN_STATE {
00412 CAN_STATE_ACTIVE = 0,
00413
00415 CAN_STATE_BUS_WARNING,
00416
00418 CAN_STATE_BUS_PASSIVE,
00419
00421 CAN_STATE_BUS_OFF,
00422
00424 CAN_STATE_SCANNING_BAUDRATE,
00425
00427 CAN_STATE_STOPPED,
00428
00430 CAN_STATE_SLEEPING,
00431 };
00435 typedef enum CAN_STATE can_state_t;
00436
00437 #define CAN_STATE_OPERATING(state) ((state) < CAN_STATE_BUS_OFF)
00438
00458 typedef struct can_filter {
00459
00461 uint32_t can_id;
00462
00465 uint32_t can_mask;
00466 } can_filter_t;
00467
00468
00472 struct sockaddr_can {
00474 sa_family_t can_family;
00476 int can_ifindex;
00477 };
00478
00479
00485 typedef struct can_frame {
00486
00491 can_id_t can_id;
00492
00494 uint8_t can_dlc;
00495
00497 uint8_t data[8];
00498 } can_frame_t;
00499
00500
00501
00506 #define RTCAN_TAKE_NO_TIMESTAMPS 0
00507 #define RTCAN_TAKE_TIMESTAMPS 1
00511 #define RTIOC_TYPE_CAN RTDM_CLASS_CAN
00512
00513
00514 #define SOL_CAN_RAW 103
00515
00554 #define CAN_RAW_FILTER 0x1
00555
00584 #define CAN_RAW_ERR_FILTER 0x2
00585
00612 #define CAN_RAW_TX_LOOPBACK 0x3
00613
00646 #ifndef SIOCGIFINDEX
00647 #define SIOCGIFINDEX \
00648 _IOWR(RTIOC_TYPE_CAN, 0x00, struct ifreq)
00649 #endif
00650
00685 #define SIOCSCANBAUDRATE \
00686 _IOW(RTIOC_TYPE_CAN, 0x01, struct ifreq)
00687
00713 #define SIOCGCANBAUDRATE \
00714 _IOWR(RTIOC_TYPE_CAN, 0x02, struct ifreq)
00715
00748 #define SIOCSCANCUSTOMBITTIME \
00749 _IOW(RTIOC_TYPE_CAN, 0x03, struct ifreq)
00750
00776 #define SIOCGCANCUSTOMBITTIME \
00777 _IOWR(RTIOC_TYPE_CAN, 0x04, struct ifreq)
00778
00779
00821 #define SIOCSCANMODE \
00822 _IOW(RTIOC_TYPE_CAN, 0x05, struct ifreq)
00823
00856 #define SIOCGCANSTATE \
00857 _IOWR(RTIOC_TYPE_CAN, 0x06, struct ifreq)
00858
00859
00892 #define SIOCSCANCTRLMODE \
00893 _IOW(RTIOC_TYPE_CAN, 0x07, struct ifreq)
00894
00921 #define SIOCGCANCTRLMODE \
00922 _IOWR(RTIOC_TYPE_CAN, 0x08, struct ifreq)
00923
00949 #define RTCAN_RTIOC_TAKE_TIMESTAMP _IOW(RTIOC_TYPE_CAN, 0x09, int)
00950
00982 #define RTCAN_RTIOC_RCV_TIMEOUT _IOW(RTIOC_TYPE_CAN, 0x0A, nanosecs_rel_t)
00983
01015 #define RTCAN_RTIOC_SND_TIMEOUT _IOW(RTIOC_TYPE_CAN, 0x0B, nanosecs_rel_t)
01016
01018 #define CAN_ERR_DLC 8
01019
01020
01028 #define CAN_ERR_TX_TIMEOUT 0x00000001U
01029
01031 #define CAN_ERR_LOSTARB 0x00000002U
01032
01034 #define CAN_ERR_CRTL 0x00000004U
01035
01038 #define CAN_ERR_PROT 0x00000008U
01039
01041 #define CAN_ERR_TRX 0x00000010U
01042
01044 #define CAN_ERR_ACK 0x00000020U
01045
01047 #define CAN_ERR_BUSOFF 0x00000040U
01048
01050 #define CAN_ERR_BUSERROR 0x00000080U
01051
01053 #define CAN_ERR_RESTARTED 0x00000100U
01054
01056 #define CAN_ERR_MASK 0x1FFFFFFFU
01057
01064
01065 #define CAN_ERR_LOSTARB_UNSPEC 0x00
01073
01074 #define CAN_ERR_CRTL_UNSPEC 0x00
01075 #define CAN_ERR_CRTL_RX_OVERFLOW 0x01
01076 #define CAN_ERR_CRTL_TX_OVERFLOW 0x02
01077 #define CAN_ERR_CRTL_RX_WARNING 0x04
01078 #define CAN_ERR_CRTL_TX_WARNING 0x08
01079 #define CAN_ERR_CRTL_RX_PASSIVE 0x10
01080 #define CAN_ERR_CRTL_TX_PASSIVE 0x20
01088
01089 #define CAN_ERR_PROT_UNSPEC 0x00
01090 #define CAN_ERR_PROT_BIT 0x01
01091 #define CAN_ERR_PROT_FORM 0x02
01092 #define CAN_ERR_PROT_STUFF 0x04
01093 #define CAN_ERR_PROT_BIT0 0x08
01094 #define CAN_ERR_PROT_BIT1 0x10
01095 #define CAN_ERR_PROT_OVERLOAD 0x20
01096 #define CAN_ERR_PROT_ACTIVE 0x40
01097 #define CAN_ERR_PROT_TX 0x80
01104
01105 #define CAN_ERR_PROT_LOC_UNSPEC 0x00
01106 #define CAN_ERR_PROT_LOC_SOF 0x03
01107 #define CAN_ERR_PROT_LOC_ID28_21 0x02
01108 #define CAN_ERR_PROT_LOC_ID20_18 0x06
01109 #define CAN_ERR_PROT_LOC_SRTR 0x04
01110 #define CAN_ERR_PROT_LOC_IDE 0x05
01111 #define CAN_ERR_PROT_LOC_ID17_13 0x07
01112 #define CAN_ERR_PROT_LOC_ID12_05 0x0F
01113 #define CAN_ERR_PROT_LOC_ID04_00 0x0E
01114 #define CAN_ERR_PROT_LOC_RTR 0x0C
01115 #define CAN_ERR_PROT_LOC_RES1 0x0D
01116 #define CAN_ERR_PROT_LOC_RES0 0x09
01117 #define CAN_ERR_PROT_LOC_DLC 0x0B
01118 #define CAN_ERR_PROT_LOC_DATA 0x0A
01119 #define CAN_ERR_PROT_LOC_CRC_SEQ 0x08
01120 #define CAN_ERR_PROT_LOC_CRC_DEL 0x18
01121 #define CAN_ERR_PROT_LOC_ACK 0x19
01122 #define CAN_ERR_PROT_LOC_ACK_DEL 0x1B
01123 #define CAN_ERR_PROT_LOC_EOF 0x1A
01124 #define CAN_ERR_PROT_LOC_INTERM 0x12
01131
01132
01133 #define CAN_ERR_TRX_UNSPEC 0x00
01134 #define CAN_ERR_TRX_CANH_NO_WIRE 0x04
01135 #define CAN_ERR_TRX_CANH_SHORT_TO_BAT 0x05
01136 #define CAN_ERR_TRX_CANH_SHORT_TO_VCC 0x06
01137 #define CAN_ERR_TRX_CANH_SHORT_TO_GND 0x07
01138 #define CAN_ERR_TRX_CANL_NO_WIRE 0x40
01139 #define CAN_ERR_TRX_CANL_SHORT_TO_BAT 0x50
01140 #define CAN_ERR_TRX_CANL_SHORT_TO_VCC 0x60
01141 #define CAN_ERR_TRX_CANL_SHORT_TO_GND 0x70
01142 #define CAN_ERR_TRX_CANL_SHORT_TO_CANH 0x80
01145
01146
01152 #endif