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 
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 /* for backward-compatibility */
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 /* dlc for error frames */
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 /* arbitration lost in bit ... / data[0] */
01084 #define CAN_ERR_LOSTARB_UNSPEC   0x00 
01092 /* error status of CAN-controller / data[1] */
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 /* error in CAN protocol (type) / data[2] */
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 /* error in CAN protocol (location) / data[3] */
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 /* error status of CAN-transceiver / data[4] */
01151 /*                                               CANH CANL */
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 /* controller specific additional information / data[5..7] */
01165 
01171 #endif /* _RTCAN_H */

Generated on Sun Dec 9 10:37:17 2007 for Xenomai API by  doxygen 1.5.3