The following patch fills the BCM chapter of can.txt with some
intro text, a description of the opcodes and flags and the TX_DELETE
command (because it was easy).
The patch is against latest SVN.

Are all opcodes and flags are still there with the documented behaviour ?

Thanks.


Index: kernel/2.6/Documentation/networking/can.txt
===================================================================
--- kernel/2.6/Documentation/networking/can.txt (revision 1198)
+++ kernel/2.6/Documentation/networking/can.txt (working copy)
@@ -23,6 +23,15 @@
       4.1.3 RAW socket option CAN_RAW_LOOPBACK
       4.1.4 RAW socket option CAN_RAW_RECV_OWN_MSGS
     4.2 Broadcast Manager protocol sockets (SOCK_DGRAM)
+      4.2.1 Opening BCM sockets
+      4.2.2 BCM messages (struct bcm_msg_head)
+      4.2.3 TX_SETUP opcode
+      4.2.4 TX_DELETE opcode
+      4.2.5 TX_READ opcode
+      4.2.6 TX_SEND opcode
+      4.2.7 RX_SETUP opcode
+      4.2.8 RX_DELETE opcode
+      4.2.9 RX_READ opcode      
     4.3 connected transport protocols (SOCK_SEQPACKET)
     4.4 unconnected transport protocols (SOCK_DGRAM)
     4.5 Timestamps
@@ -473,6 +482,159 @@
                &recv_own_msgs, sizeof(recv_own_msgs));
 
   4.2 Broadcast Manager protocol sockets (SOCK_DGRAM)
+  
+  The Broadcast Manager (BCM) provides functions to send CAN frames
+  once or periodically, as well as notify applications of changes in
+  received CAN frames, recognizing specific CAN IDs.
+
+  Capabilities on the trasmission side:
+  - Cyclic transmission of a CAN frame with a given interval
+  - Modification of message content and intervals at runtime (e.g.
+    switching to a new interval with or without immediate restart of
+    the timer)
+  - Automatically switching to a second interval after a certain number
+    of frames has been sent
+  - Instant transmission of changed frames, without influencing the
+    interval cycle
+  - One-time transmission of CAN messages
+
+  Capabilities on the receiving side:
+  - Receive filter to detect changes in frame ID, data or length (DLC)
+  - Receive filter for multiplex frames (e.g. with packet counters in
+    the data field)
+  - RTR replies to messages
+  - Time-out monitoring of frames
+  - Frequency reduction of messages (throttle function) to the user
+    application
+
+  4.2.1 Opening BCM sockets
+  
+  To use Broadcast-Manager include the file "bcm.h".
+  A socket for Broadcast-Manager is created with:
+
+    s = socket(PF_CAN, SOCK_DGRAM, CAN_BCM);
+
+  The CAN interface is assigned with a call to connect() on the socket.
+  
+    addr.can_family = AF_CAN;
+    strcpy(ifr.ifr_name, "can0");
+    ioctl(s, SIOCGIFINDEX, &ifr);
+    addr.can_ifindex = ifr.ifr_ifindex;
+
+    connect(s, (struct sockaddr *)&addr, sizeof(addr));
+  
+  If a process must operate on multiple CAN buses, it must open several
+  sockets. It is also possible for a process to open multiple sockets
+  on a single CAN-bus, if it makes sense for the application programmer
+  to structure different data flows.
+  Every single instance of Broadcast-Manager is able to manage any number of
+  filter and/or send requests.
+
+  4.2.2 BCM messages (struct bcm_msg_head)
+  
+  All messages from the (user) process to Broadcast-Manager have the same
+  structure. It consists of a message header with the command (opcode),
+  several options and zero or more CAN frames, depending on the command
+  used and the action requested:
+
+    struct bcm_msg_head {
+        int opcode;                   /* command */
+        int flags;                    /* special flags */
+        int count;                    /* run 'count' times ival1 then ival2 */
+        struct timeval ival1, ival2;  /* intervals */
+        canid_t can_id;               /* 32 Bit SFF/EFF. MSB set at EFF */
+        int nframes;                  /* number of can_frame's in the next 
field */
+        struct can_frame frames[0];
+    };
+
+  The value of nframes indicates how many user data frames follow the
+  message header. The user data frames are used to describe the actual
+  content of a CAN message:
+
+    struct can_frame {
+        canid_t can_id;      /* 32 bit CAN_ID + EFF/RTR flags */
+        __u8    can_dlc;     /* data length code: 0 .. 8 */
+        __u8    data[8] __attribute__ ((aligned(8)));
+    };
+
+  The opcode defines the type of message. Messages from the user to
+  BCM control the operations of the BCM, replies from the BCM indicate
+  certain changes to the user, such as timeouts, etc.
+
+  The transmit and receive path of the BCM are two independent functional
+  blocks.
+
+  For the transmit path the following opcodes exist:
+
+   TX_SETUP: for setting up and modifying transmission requests
+   TX_DELETE: to remove send requests
+   TX_READ: to read out the current broadcasting commands
+            (for debugging purposes)
+   TX_SEND: for sending a single CAN message
+
+  For the receive path the following opcodes exist:
+
+   RX_SETUP: for setting and modifying receive filters
+   RX_DELETE: for deleting receive filters
+   RX_READ: to read out the current receive filter (for debugging purposes)
+
+  The Broadcast-Manager sends response messages in the same form. The
+  BCM sends these opcodes:
+
+   TX_STATUS: in response to TX_READ
+   TX_EXPIRED: is sent when the counter count reaches ival1 (only if
+               flag TX_COUNTEVT is set, see below)
+
+   RX_STATUS: in response to RX_READ
+   RX_TIMEOUT: sent if the time-controlled reception of a message failed
+   RX_CHANGED: sent if the first or a revised CAN message was received
+
+  Each of these opcode needs CAN ID specified either in the "can_id" field or
+  in the first can_frame structure attached to the command.
+
+  In addition, there are optional flags which can influence the BCM behavior:
+
+   SETTIMER: set the value of ival1, ival2 and count
+   STARTTIMER: start the timer with the actual value of ival1, ival2 and count.
+        Starting the timer leads simultaneously to the transmission of a 
can_frame
+   TX_COUNTEVT: create the message TX_EXPIRED when count is reached
+   TX_ANNOUNCE: a change of data by the process is emitted with a new frame,
+        regardless of the timer status
+   TX_CP_CAN_ID: copies the can_id from the message header attached to each
+        of can_frame. This is intended only as usage simplification
+   TX_RESET_MULTI_IDX: forces a reset of the index counter from the update
+        to be sent by multiplex message even if it would not be necessary
+        because of the length
+   RX_FILTER_ID: there is no filtering of the user data. A match with the
+        received message can_id automatically leads to a RX_CHANGED. Use
+        caution in cyclic messages. If RX_FILTER_ID flag is set, the CAN frame
+        in RX_SETUP can be ignored (i.e., nframes = 0)
+   RX_RTR_FRAME: the filter passed is used as CAN message to be sent when
+        receiving an RTR frame
+   RX_CHECK_DLC: a change of the DLC leads to an RX_CHANGED message to the user
+        application
+   RX_NO_AUTOTIMER: if the timer ival1 in the RX_SETUP has been set equal to
+        zero, on receipt of the CAN message the timer for the timeout
+        monitoring is automatically started. Setting this flag prevents the
+        automatic reset of the start timer
+   RX_ANNOUNCE_RESUME: refers also to the time-out supervision of RX_SETUP. By
+        setting this flag, when an RX-outs occours, a RX_CHANGED will be
+        generated when the (cyclic) receive restarts. This will happen even
+        if the user data have not changed
+
+  4.2.3 TX_SETUP opcode
+  4.2.4 TX_DELETE opcode
+
+  This opcode will delete the entry for transmission of the CAN frame with
+  the specified can_id CAN identifier. The message length for the command
+  TX_DELETE is sizeof(bcm_msg_head) (only the header).
+
+  4.2.5 TX_READ opcode
+  4.2.6 TX_SEND opcode
+  4.2.7 RX_SETUP opcode
+  4.2.8 RX_DELETE opcode
+  4.2.9 RX_READ opcode      
+
   4.3 connected transport protocols (SOCK_SEQPACKET)
   4.4 unconnected transport protocols (SOCK_DGRAM)
 

-- 
Daniele Venzano
http://www.brownhat.org

_______________________________________________
Socketcan-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-users

Reply via email to