[CAN]: Add broadcast manager (bcm) protocol

This patch adds the CAN broadcast manager (bcm) protocol.

Signed-off-by: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
Signed-off-by: Urs Thuermann <urs.thuermann@volkswagen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Oliver Hartkopp 2007-11-16 15:53:52 -08:00 committed by David S. Miller
parent c18ce101f2
commit ffd980f976
4 changed files with 1642 additions and 0 deletions

65
include/linux/can/bcm.h Normal file
View File

@ -0,0 +1,65 @@
/*
* linux/can/bcm.h
*
* Definitions for CAN Broadcast Manager (BCM)
*
* Author: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
* All rights reserved.
*
* Send feedback to <socketcan-users@lists.berlios.de>
*
*/
#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 */

View File

@ -26,3 +26,16 @@ config CAN_RAW
most cases where no higher level protocol is being used. The raw most cases where no higher level protocol is being used. The raw
socket has several filter options e.g. ID masking / error frames. socket has several filter options e.g. ID masking / error frames.
To receive/send raw CAN messages, use AF_CAN with protocol CAN_RAW. 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.

View File

@ -7,3 +7,6 @@ can-objs := af_can.o proc.o
obj-$(CONFIG_CAN_RAW) += can-raw.o obj-$(CONFIG_CAN_RAW) += can-raw.o
can-raw-objs := raw.o can-raw-objs := raw.o
obj-$(CONFIG_CAN_BCM) += can-bcm.o
can-bcm-objs := bcm.o

1561
net/can/bcm.c Normal file

File diff suppressed because it is too large Load Diff