ppavel@26: /* canmsg.h - common kernel-space and user-space CAN message structure ppavel@26: * Linux CAN-bus device driver. ppavel@26: * Written by Pavel Pisa - OCERA team member ppavel@26: * email:pisa@cmp.felk.cvut.cz ppavel@26: * This software is released under the GPL-License. ppavel@26: * Version lincan-0.3 17 Jun 2004 ppavel@26: */ ppavel@26: ppavel@26: #ifndef _CANMSG_T_H ppavel@26: #define _CANMSG_T_H ppavel@26: ppavel@26: #ifdef __KERNEL__ ppavel@26: ppavel@26: #include ppavel@26: #include ppavel@26: ppavel@26: #else /* __KERNEL__ */ ppavel@26: ppavel@26: #include ppavel@26: #include ppavel@26: ppavel@26: #endif /* __KERNEL__ */ ppavel@26: ppavel@26: #ifdef __cplusplus ppavel@26: extern "C" { ppavel@26: #endif ppavel@26: ppavel@26: /* ppavel@26: * CAN_MSG_VERSION_2 enables new canmsg_t layout compatible with ppavel@26: * can4linux project from http://www.port.de/ ppavel@26: * ppavel@26: */ ppavel@26: #define CAN_MSG_VERSION_2 ppavel@26: ppavel@26: /* Number of data bytes in one CAN message */ ppavel@26: #define CAN_MSG_LENGTH 8 ppavel@26: ppavel@26: #ifdef CAN_MSG_VERSION_2 ppavel@26: ppavel@26: typedef struct timeval canmsg_tstamp_t ; ppavel@26: ppavel@26: typedef unsigned long canmsg_id_t; ppavel@26: ppavel@26: /** ppavel@26: * struct canmsg_t - structure representing CAN message ppavel@26: * @flags: message flags ppavel@26: * %MSG_RTR .. message is Remote Transmission Request, ppavel@26: * %MSG_EXT .. message with extended ID, ppavel@26: * %MSG_OVR .. indication of queue overflow condition, ppavel@26: * %MSG_LOCAL .. message originates from this node. ppavel@26: * @cob: communication object number (not used) ppavel@26: * @id: ID of CAN message ppavel@26: * @timestamp: not used ppavel@26: * @length: length of used data ppavel@26: * @data: data bytes buffer ppavel@26: * ppavel@26: * Header: canmsg.h ppavel@26: */ ppavel@26: struct canmsg_t { ppavel@26: int flags; ppavel@26: int cob; ppavel@26: canmsg_id_t id; ppavel@26: canmsg_tstamp_t timestamp; ppavel@26: unsigned short length; ppavel@26: unsigned char data[CAN_MSG_LENGTH]; ppavel@26: }; ppavel@26: ppavel@26: #else /*CAN_MSG_VERSION_2*/ ppavel@26: #ifndef PACKED ppavel@26: #define PACKED __attribute__((packed)) ppavel@26: #endif ppavel@26: /* Old, deprecated version of canmsg_t structure */ ppavel@26: struct canmsg_t { ppavel@26: short flags; ppavel@26: int cob; ppavel@26: canmsg_id_t id; ppavel@26: unsigned long timestamp; ppavel@26: unsigned int length; ppavel@26: unsigned char data[CAN_MSG_LENGTH]; ppavel@26: } PACKED; ppavel@26: #endif /*CAN_MSG_VERSION_2*/ ppavel@26: ppavel@26: typedef struct canmsg_t canmsg_t; ppavel@26: ppavel@26: /** ppavel@26: * struct canfilt_t - structure for acceptance filter setup ppavel@26: * @flags: message flags ppavel@26: * %MSG_RTR .. message is Remote Transmission Request, ppavel@26: * %MSG_EXT .. message with extended ID, ppavel@26: * %MSG_OVR .. indication of queue overflow condition, ppavel@26: * %MSG_LOCAL .. message originates from this node. ppavel@26: * there are corresponding mask bits ppavel@26: * %MSG_RTR_MASK, %MSG_EXT_MASK, %MSG_LOCAL_MASK. ppavel@26: * %MSG_PROCESSLOCAL enables local messages processing in the ppavel@26: * combination with global setting ppavel@26: * @queid: CAN queue identification in the case of the multiple ppavel@26: * queues per one user (open instance) ppavel@26: * @cob: communication object number (not used) ppavel@26: * @id: selected required value of cared ID id bits ppavel@26: * @mask: select bits significand for the comparation; ppavel@26: * 1 .. take care about corresponding ID bit, 0 .. don't care ppavel@26: * ppavel@26: * Header: canmsg.h ppavel@26: */ ppavel@26: struct canfilt_t { ppavel@26: int flags; ppavel@26: int queid; ppavel@26: int cob; ppavel@26: canmsg_id_t id; ppavel@26: canmsg_id_t mask; ppavel@26: }; ppavel@26: ppavel@26: typedef struct canfilt_t canfilt_t; ppavel@26: ppavel@26: /* Definitions to use for canmsg_t and canfilt_t flags */ ppavel@26: #define MSG_RTR (1<<0) ppavel@26: #define MSG_OVR (1<<1) ppavel@26: #define MSG_EXT (1<<2) ppavel@26: #define MSG_LOCAL (1<<3) ppavel@26: /* If you change above lines, check canque_filtid2internal function */ ppavel@26: ppavel@26: /* Additional definitions used for canfilt_t only */ ppavel@26: #define MSG_FILT_MASK_SHIFT 8 ppavel@26: #define MSG_RTR_MASK (MSG_RTR<