include/rtdm/rtcan.h

Go to the documentation of this file.
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  /* !__KERNEL__ */
00244 
00245 #include <net/if.h>
00246 
00247 #endif /* !__KERNEL__ */
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 /* dlc for error frames */
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 /* arbitration lost in bit ... / data[0] */
01065 #define CAN_ERR_LOSTARB_UNSPEC   0x00 
01073 /* error status of CAN-controller / data[1] */
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 /* error in CAN protocol (type) / data[2] */
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 /* error in CAN protocol (location) / data[3] */
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 /* error status of CAN-transceiver / data[4] */
01132 /*                                               CANH CANL */
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 /* controller specific additional information / data[5..7] */
01146 
01152 #endif /* _RTCAN_H */

Generated on Mon Dec 25 13:57:10 2006 for Xenomai API by  doxygen 1.4.6