]> rtime.felk.cvut.cz Git - lincan.git/blob - lincan/include/canmsg.h
README and TODO updated
[lincan.git] / lincan / include / canmsg.h
1 /* canmsg.h - common kernel-space and user-space CAN message structure
2  * Linux CAN-bus device driver.
3  * Written by Pavel Pisa - OCERA team member
4  * email:pisa@cmp.felk.cvut.cz
5  * This software is released under the GPL-License.
6  * Version lincan-0.3  17 Jun 2004
7  */
8
9 #ifndef _CANMSG_T_H
10 #define _CANMSG_T_H
11
12 #ifdef __KERNEL__
13
14 #include <linux/time.h>
15 #include <linux/types.h>
16
17 #else /* __KERNEL__ */
18
19 #include <sys/time.h>
20 #include <sys/types.h>
21
22 #endif /* __KERNEL__ */
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 /* 
29  * CAN_MSG_VERSION_2 enables new canmsg_t layout compatible with
30  * can4linux project from http://www.port.de/
31  * 
32  */
33 #define CAN_MSG_VERSION_2
34
35 /* Number of data bytes in one CAN message */
36 #define CAN_MSG_LENGTH 8
37
38 #ifdef CAN_MSG_VERSION_2
39
40 typedef struct timeval canmsg_tstamp_t ;
41
42 /**
43  * struct canmsg_t - structure representing CAN message
44  * @flags:  message flags
45  *      %MSG_RTR .. message is Remote Transmission Request,
46  *      %MSG_EXT .. message with extended ID, 
47  *      %MSG_OVR .. indication of queue overflow condition,
48  *      %MSG_LOCAL .. message originates from this node.
49  * @cob:    communication object number (not used)
50  * @id:     ID of CAN message
51  * @timestamp: not used
52  * @length: length of used data
53  * @data:   data bytes buffer
54  *
55  * Header: canmsg.h
56  */
57 struct canmsg_t {
58         int             flags;
59         int             cob;
60         unsigned long   id;
61         canmsg_tstamp_t timestamp;
62         unsigned short  length;
63         unsigned char   data[CAN_MSG_LENGTH];
64 };
65
66 #else /*CAN_MSG_VERSION_2*/
67 #ifndef PACKED
68 #define PACKED __attribute__((packed))
69 #endif
70
71 typedef unsigned long canmsg_tstamp_t ;
72
73 /* Old, deprecated version of canmsg_t structure */
74 struct canmsg_t {
75         short           flags;
76         int             cob;
77         unsigned long   id;
78         canmsg_tstamp_t timestamp;
79         unsigned int    length;
80         unsigned char   data[CAN_MSG_LENGTH];
81 } PACKED;
82 #endif /*CAN_MSG_VERSION_2*/
83
84 typedef struct canmsg_t canmsg_t;
85
86 /**
87  * struct canfilt_t - structure for acceptance filter setup
88  * @flags:  message flags
89  *      %MSG_RTR .. message is Remote Transmission Request,
90  *      %MSG_EXT .. message with extended ID, 
91  *      %MSG_OVR .. indication of queue overflow condition,
92  *      %MSG_LOCAL .. message originates from this node.
93  *      there are corresponding mask bits
94  *      %MSG_RTR_MASK, %MSG_EXT_MASK, %MSG_LOCAL_MASK.
95  *      %MSG_PROCESSLOCAL enables local messages processing in the
96  *      combination with global setting
97  * @queid:  CAN queue identification in the case of the multiple
98  *          queues per one user (open instance)
99  * @cob:    communication object number (not used)
100  * @id:     selected required value of cared ID id bits
101  * @mask:   select bits significand for the comparation;
102  *          1 .. take care about corresponding ID bit, 0 .. don't care
103  *
104  * Header: canmsg.h
105  */
106 struct canfilt_t {
107         int             flags;
108         int             queid;
109         int             cob;
110         unsigned long   id;
111         unsigned long   mask;
112 };
113
114 typedef struct canfilt_t canfilt_t;
115
116 /* Definitions to use for canmsg_t and canfilt_t flags */
117 #define MSG_RTR   (1<<0)
118 #define MSG_OVR   (1<<1)
119 #define MSG_EXT   (1<<2)
120 #define MSG_LOCAL (1<<3)
121 /* If you change above lines, check canque_filtid2internal function */
122
123 /* Additional definitions used for canfilt_t only */
124 #define MSG_FILT_MASK_SHIFT   8
125 #define MSG_RTR_MASK   (MSG_RTR<<MSG_FILT_MASK_SHIFT)
126 #define MSG_EXT_MASK   (MSG_EXT<<MSG_FILT_MASK_SHIFT)
127 #define MSG_LOCAL_MASK (MSG_LOCAL<<MSG_FILT_MASK_SHIFT)
128 #define MSG_PROCESSLOCAL (MSG_OVR<<MSG_FILT_MASK_SHIFT)
129
130 /* Can message ID mask */
131 #define MSG_ID_MASK ((1l<<29)-1)
132
133 #ifdef __cplusplus
134 } /* extern "C"*/
135 #endif
136
137 #endif /*_CANMSG_T_H*/