]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - lincan/include/can.h
Added support for local message processing and some cleanups.
[lincan.git] / lincan / include / can.h
index 344dcf67ed767ae136db5175fd897cf134c16c10..8247c3511e7d34e6938cb5012368632081a74735 100644 (file)
 
 /**
  * struct canmsg_t - structure representing CAN message
- * @flags:  message flags, %MSG_RTR .. message is Remote Transmission Request,
- *     %MSG_EXT .. message with extended ID, %MSG_OVR indication of queue
- *     overflow condition
+ * @flags:  message flags
+ *      %MSG_RTR .. message is Remote Transmission Request,
+ *     %MSG_EXT .. message with extended ID, 
+ *      %MSG_OVR .. indication of queue overflow condition,
+ *     %MSG_LOCAL .. message originates from this node.
  * @cob:    communication object number (not used)
  * @id:     ID of CAN message
  * @timestamp: not used
@@ -32,17 +34,51 @@ struct canmsg_t {
        unsigned char   data[CAN_MSG_LENGTH];
 } PACKED;
 
+/**
+ * struct canfilt_t - structure for acceptance filter setup
+ * @flags:  message flags
+ *      %MSG_RTR .. message is Remote Transmission Request,
+ *     %MSG_EXT .. message with extended ID, 
+ *      %MSG_OVR .. indication of queue overflow condition,
+ *     %MSG_LOCAL .. message originates from this node.
+ *     there are corresponding mask bits
+ *     %MSG_RTR_MASK, %MSG_EXT_MASK, %MSG_LOCAL_MASK.
+ *     %MSG_PROCESSLOCAL enables local messages processing in the
+ *     combination with global setting
+ * @queid:  CAN queue identification in the case of the multiple
+ *         queues per one user (open instance)
+ * @cob:    communication object number (not used)
+ * @id:     selected required value of cared ID id bits
+ * @mask:   select bits significand for the comparation;
+ *          1 .. take care about corresponding ID bit, 0 .. don't care
+ *
+ * Header: can.h
+ */
 struct canfilt_t {
        int             flags;
+       int             queid;
        int             cob;
        unsigned long   id;
        unsigned long   mask;
 };
 
-/* Definitions to use for canmsg_t flags */
-#define MSG_RTR (1<<0)
-#define MSG_OVR (1<<1)
-#define MSG_EXT (1<<2)
+/* Definitions to use for canmsg_t and canfilt_t flags */
+#define MSG_RTR   (1<<0)
+#define MSG_OVR   (1<<1)
+#define MSG_EXT   (1<<2)
+#define MSG_LOCAL (1<<3)
+/* If you change above lines, check canque_filtid2internal function */
+
+/* Additional definitions used for canfilt_t only */
+#define MSG_FILT_MASK_SHIFT   8
+#define MSG_RTR_MASK   (MSG_RTR<<MSG_FILT_MASK_SHIFT)
+#define MSG_EXT_MASK   (MSG_EXT<<MSG_FILT_MASK_SHIFT)
+#define MSG_LOCAL_MASK (MSG_LOCAL<<MSG_FILT_MASK_SHIFT)
+#define MSG_PROCESSLOCAL (MSG_OVR<<MSG_FILT_MASK_SHIFT)
+
+
+/* Can message ID mask */
+#define MSG_ID_MASK ((1l<<29)-1)
 
 /* CAN ioctl magic number */
 #define CAN_IOC_MAGIC 'd'
@@ -66,6 +102,7 @@ typedef unsigned short channel_t;
 //#define CONF_FDISABLE
 
 #define STAT _IO(CAN_IOC_MAGIC, 9)
-#define CONF_FILTER_QUE0 _IOW(CAN_IOC_MAGIC, 10, struct canfilt_t)
+#define CANQUE_FILTER _IOW(CAN_IOC_MAGIC, 10, struct canfilt_t)
+#define CANQUE_FLUSH  _IO(CAN_IOC_MAGIC, 11)
 
 #endif /*_CANMSG_T_H*/