• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

include/rtdm/rtcan.h

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 /* !__KERNEL__ */
00246 
00247 #include <net/if.h>
00248 
00249 #endif /* !__KERNEL__ */
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 /* For Doxygen only, already defined by kernel headers */
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  /* dlc for error frames */
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 /* arbitration lost in bit ... / data[0] */
01104 #define CAN_ERR_LOSTARB_UNSPEC  0x00 
01112 /* error status of CAN-controller / data[1] */
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 /* error in CAN protocol (type) / data[2] */
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 /* error in CAN protocol (location) / data[3] */
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 /* error status of CAN-transceiver / data[4] */
01170 /*                                               CANH CANL */
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 /* controller specific additional information / data[5..7] */
01184 
01198 #endif /* _RTCAN_H */

Generated on Wed Jan 23 2013 13:24:01 for Xenomai API by  doxygen 1.7.1