Skip to content

Commit

Permalink
[CAN]: Add broadcast manager (bcm) protocol
Browse files Browse the repository at this point in the history
This patch adds the CAN broadcast manager (bcm) protocol.

Signed-off-by: Oliver Hartkopp <[email protected]>
Signed-off-by: Urs Thuermann <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
Oliver Hartkopp authored and davem330 committed Jan 28, 2008
1 parent c18ce10 commit ffd980f
Show file tree
Hide file tree
Showing 4 changed files with 1,642 additions and 0 deletions.
65 changes: 65 additions & 0 deletions include/linux/can/bcm.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/*
* linux/can/bcm.h
*
* Definitions for CAN Broadcast Manager (BCM)
*
* Author: Oliver Hartkopp <[email protected]>
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
* All rights reserved.
*
* Send feedback to <[email protected]>
*
*/

#ifndef CAN_BCM_H
#define CAN_BCM_H

/**
* struct bcm_msg_head - head of messages to/from the broadcast manager
* @opcode: opcode, see enum below.
* @flags: special flags, see below.
* @count: number of frames to send before changing interval.
* @ival1: interval for the first @count frames.
* @ival2: interval for the following frames.
* @can_id: CAN ID of frames to be sent or received.
* @nframes: number of frames appended to the message head.
* @frames: array of CAN frames.
*/
struct bcm_msg_head {
int opcode;
int flags;
int count;
struct timeval ival1, ival2;
canid_t can_id;
int nframes;
struct can_frame frames[0];
};

enum {
TX_SETUP = 1, /* create (cyclic) transmission task */
TX_DELETE, /* remove (cyclic) transmission task */
TX_READ, /* read properties of (cyclic) transmission task */
TX_SEND, /* send one CAN frame */
RX_SETUP, /* create RX content filter subscription */
RX_DELETE, /* remove RX content filter subscription */
RX_READ, /* read properties of RX content filter subscription */
TX_STATUS, /* reply to TX_READ request */
TX_EXPIRED, /* notification on performed transmissions (count=0) */
RX_STATUS, /* reply to RX_READ request */
RX_TIMEOUT, /* cyclic message is absent */
RX_CHANGED /* updated CAN frame (detected content change) */
};

#define SETTIMER 0x0001
#define STARTTIMER 0x0002
#define TX_COUNTEVT 0x0004
#define TX_ANNOUNCE 0x0008
#define TX_CP_CAN_ID 0x0010
#define RX_FILTER_ID 0x0020
#define RX_CHECK_DLC 0x0040
#define RX_NO_AUTOTIMER 0x0080
#define RX_ANNOUNCE_RESUME 0x0100
#define TX_RESET_MULTI_IDX 0x0200
#define RX_RTR_FRAME 0x0400

#endif /* CAN_BCM_H */
13 changes: 13 additions & 0 deletions net/can/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,16 @@ config CAN_RAW
most cases where no higher level protocol is being used. The raw
socket has several filter options e.g. ID masking / error frames.
To receive/send raw CAN messages, use AF_CAN with protocol CAN_RAW.

config CAN_BCM
tristate "Broadcast Manager CAN Protocol (with content filtering)"
depends on CAN
default N
---help---
The Broadcast Manager offers content filtering, timeout monitoring,
sending of RTR frames, and cyclic CAN messages without permanent user
interaction. The BCM can be 'programmed' via the BSD socket API and
informs you on demand e.g. only on content updates / timeouts.
You probably want to use the bcm socket in most cases where cyclic
CAN messages are used on the bus (e.g. in automotive environments).
To use the Broadcast Manager, use AF_CAN with protocol CAN_BCM.
3 changes: 3 additions & 0 deletions net/can/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ can-objs := af_can.o proc.o

obj-$(CONFIG_CAN_RAW) += can-raw.o
can-raw-objs := raw.o

obj-$(CONFIG_CAN_BCM) += can-bcm.o
can-bcm-objs := bcm.o
Loading

0 comments on commit ffd980f

Please sign in to comment.