mirror of https://gitee.com/openkylin/linux.git
[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:
parent
c18ce101f2
commit
ffd980f976
|
@ -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 */
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue