📄 canbus4linux.h
字号:
#ifndef CANBUS_INCLUDE_FILE#define CANBUS_INCLUDE_FILE#define CANBUS4LINUX_VERSION (0)#define MAX_DEVICE_NAME_LENGTH (100)#define CANBUS_FORMAT_CAN_2_0_A (0)#define CANBUS_FORMAT_CAN_2_0_B (1)// Chipset Flags#define CANBUS_CFS_CAN_2_0_A (1<<0) /* Chipset can used for CAN 2.0 A */#define CANBUS_CFS_CAN_2_0_B (1<<1) /* Chipset can used for CAN 2.0 B */#define CANBUS_CFS_EXT_FRAME (1<<2) /* Chipset support extended frame format (only in CAN 2.0B mode) */#define CANBUS_CFS_POLLING (1<<3) /* (not implemented in canbus driver) Chipset driver supports only polling (interrupts are default) */// Eventsenum t_canbus_events{ CANBUS_EVENT_RECEIVED=1, CANBUS_EVENT_TRANSMITTED, CANBUS_EVENT_BUS_ERROR, CANBUS_EVENT_WARNING, CANBUS_EVENT_LEAVING_STANDBY, CANBUS_EVENT_ARBITRATION_LOST, CANBUS_EVENT_OVERRUN, CANBUS_EVENT_PASSIVE, CANBUS_EVENT_ENTERING_STANDBY, CANBUS_EVENT_DEVICE_CHANGED};// Commandsenum t_canbus_commands{ CANBUS_CMD_ENTER_STANDBY=1, CANBUS_CMD_ABORT_TRANSMISSION, CANBUS_CMD_CLEAR_OVERRUN, CANBUS_CMD_LEAVE_STANDBY, CANBUS_CMD_SELF_RECEPTION_REQUEST, CANBUS_CMD_LISTEN_ON, CANBUS_CMD_LISTEN_OFF, CANBUS_CMD_VIRTUALIZE_ON, CANBUS_CMD_VIRTUALIZE_OFF, CANBUS_CMD_LAST_ENTRY /* this must be the last entry in the list */};#ifdef CANBUS4LINUX_CLEARTEXT_COMMANDS /* define this only in one file of a project !!! */// Commands as plain textconst char *canbus4linux_commands[] = { "", "enter standby", "abort transmission", "clear overrun", "leave Standby", "self reception request", "listen on", "listen off", "virtualize on", "virtualize off", " - " /* this must be the last entry in the list */};#endif#define CANBUS_NUMBER_OF_CONSTANT_BAUDRATES (50) /* max. 50 entries for constant baudrates */// The time is a 64-bit number...struct canbus_time{ unsigned long low; unsigned long high;};// Acceptance Filter (Hardware filter in SJA1000, or Softwarefilter)struct canbus_acceptance_filter{ unsigned long code; unsigned long mask;};// Properties of the selected channelstruct canbus_properties{ unsigned long version; // version of canbus4linux char device_name[MAX_DEVICE_NAME_LENGTH]; long min; // min baudrate long max; // max baudrate int number_commands; // number of "commands[]" entries int commands[CANBUS_CMD_LAST_ENTRY]; // supported commands of the selected channel (depends on mode) int number_baudrates; // 0 if "canbus_set_baudrate()" is supported, otherwise only "baudrates[]" are supported unsigned long baudrates[CANBUS_NUMBER_OF_CONSTANT_BAUDRATES]; unsigned long chipset_flags; // see: CANBUS_CFS_... int number_registers; // for direct acces to the chipset from an application};#define CANBUS_TRANS_FMT_DEFAULT (0) /* send this data with default frame format */#define CANBUS_TRANS_FMT_STD (1) /* send this data in 11 bit format */#define CANBUS_TRANS_FMT_EXT (2) /* send this data in 29 bit format */// Transmission structure// With this structure a CAN message will sendedstruct canbus_transmit_data{ int fmt; // see CANBUS_TRANS_FMT_...., ignore this in canbus_event-structure (see below) unsigned long identifier; // CAN Identifier unsigned char rtr; // Remote Transmission Request bit (0=CAN message with data, 1=request data from receiver) unsigned char dlc; // Data Length Code (= number of data bytes in "msg[]") unsigned char msg[8]; // data bytes};struct canbus_event{ int event; // see: t_canbus_events struct canbus_time time; //----------- used, if event=CANBUS_ISR_RECEIVED | CANBUS_ISR_TRANSMITTED --------------- unsigned long lost; struct canbus_transmit_data data; //----------- used, if event=CANBUS_ISR_ARBITRATION_LOST ------------------------------ int arbitration; };/* see also: /usr/src/linux/Documentation/ioctl-number.txt * and: /usr/src/linux/Documentation/devices.txt */#define CANBUS4LINUX_IOC_MAGIC 'z'#define CANBUS4LINUX_WRITE_ACCEPTANCE_FILTER _IOW(CANBUS4LINUX_IOC_MAGIC, 0x80, struct canbus_acceptance_filter)#define CANBUS4LINUX_READ_ACCEPTANCE_FILTER _IOR(CANBUS4LINUX_IOC_MAGIC, 0x81, struct canbus_acceptance_filter)#define CANBUS4LINUX_SET_BAUDRATE _IO(CANBUS4LINUX_IOC_MAGIC, 0x82)#define CANBUS4LINUX_GET_BAUDRATE _IO(CANBUS4LINUX_IOC_MAGIC, 0x83)#define CANBUS4LINUX_INIT _IO(CANBUS4LINUX_IOC_MAGIC, 0x84)#define CANBUS4LINUX_SET_BAUDRATE_BY_CONSTANT _IO(CANBUS4LINUX_IOC_MAGIC, 0x85)#define CANBUS4LINUX_GET_BAUDRATE_BY_CONSTANT _IO(CANBUS4LINUX_IOC_MAGIC, 0x86)#define CANBUS4LINUX_SET_CAN_MODE _IO(CANBUS4LINUX_IOC_MAGIC, 0x87)#define CANBUS4LINUX_SET_COMMAND _IO(CANBUS4LINUX_IOC_MAGIC, 0x88)#define CANBUS4LINUX_WRITE_TRANSMIT_DATA _IOW(CANBUS4LINUX_IOC_MAGIC, 0x89, struct canbus_transmit_data)#define CANBUS4LINUX_READ_EVENT_DATA _IO(CANBUS4LINUX_IOC_MAGIC, 0x90)#define CANBUS4LINUX_READ_TIME _IOR(CANBUS4LINUX_IOC_MAGIC, 0x91, struct canbus_time)#define CANBUS4LINUX_SET_DEFAULT_FRAME_FORMAT _IO(CANBUS4LINUX_IOC_MAGIC, 0x92)#define CANBUS4LINUX_TEST_DEVICE _IO(CANBUS4LINUX_IOC_MAGIC, 0x93)#define CANBUS4LINUX_READ_PROPERTIES _IO(CANBUS4LINUX_IOC_MAGIC, 0x94)/* New commands: 28.01.2003 */#define CANBUS4LINUX_WRITE_SOFT_ACCEPTANCE_FILTER _IOW(CANBUS4LINUX_IOC_MAGIC, 0x95, struct canbus_acceptance_filter)#define CANBUS4LINUX_READ_SOFT_ACCEPTANCE_FILTER _IOR(CANBUS4LINUX_IOC_MAGIC, 0x95, struct canbus_acceptance_filter)//#define CANBUS4LINUX_WRITE_REGISTER _IOW(CANBUS4LINUX_IOC_MAGIC, 0x95, ???)//#define CANBUS4LINUX_READ_REGISTER _IOR(CANBUS4LINUX_IOC_MAGIC, 0x96, ???)#ifdef __KERNEL__struct canbus_admin;struct canbus_file;typedef int (*canbus_isr) (void *pSpecificPar, struct canbus_admin *pPar, struct canbus_event *pEvent); typedef int (*canbus_registerIsr) (void *pSpecificPar, canbus_isr pIsr, struct canbus_admin *pSja1000Par);typedef int (*canbus_unregisterIsr) (void *pSpecificPar); typedef int (*canbus_open_device) (void *pSja1000Par);typedef int (*canbus_close_device) (void *pSja1000Par);typedef int (*canbus_init_device) (void *pSja1000Par);typedef int (*canbus_set_baudrate) (void *pSja1000Par, unsigned long baudrate);typedef int (*canbus_get_properties)(void *pSja1000Par, struct canbus_properties *props);typedef int (*canbus_set_register) (void *pSja1000Par, int addresse, unsigned int value);typedef int (*canbus_get_register) (void *pSja1000Par, int addresse, int *value);typedef int (*canbus_set_can_mode) (void *pSja1000Par, int can_2b);typedef int (*canbus_set_baudrate_by_constant) (void *pSja1000Par, unsigned long constant);typedef int (*canbus_set_acceptance_filter) (void *pSja1000Par, struct canbus_acceptance_filter *filter);typedef int (*canbus_set_command) (void *pSja1000Par, int command);typedef int (*canbus_transmit_data) (void *pSja1000Par, struct canbus_transmit_data *trans);typedef int (*canbus_test_device) (void *pSja1000Par);struct canbus_access{ canbus_registerIsr pRegisterIsr; canbus_unregisterIsr pUnregisterIsr; canbus_open_device pOpen; canbus_close_device pClose; canbus_init_device pInit; canbus_set_baudrate pSetBaudrate; canbus_get_properties pGetProperty; canbus_set_register pSetRegister; canbus_get_register pGetRegister; canbus_set_can_mode pSetCanMode; canbus_set_baudrate_by_constant pSetBaudrateByConstant; canbus_set_acceptance_filter pSetAcceptanceFilter; canbus_set_command pSetCommand; canbus_transmit_data pTransmitData; canbus_test_device pTestDevice;};extern int canbus4linux_register_device(char *name, int version, void *pSpecificPar, struct canbus_access *access, int prefered_min, int prefered_max);extern int canbus4linux_unregister_device(int can_num);extern int canbus4linux_open_device(struct canbus_admin *pPar);extern int canbus4linux_close_device(struct canbus_admin *pPar);extern int canbus4linux_init_device(struct canbus_admin *pPar);extern int canbus4linux_set_baudrate(struct canbus_admin *pPar, unsigned long baudrate);extern unsigned long canbus4linux_get_baudrate(struct canbus_admin *pPar);extern int canbus4linux_get_properties(struct canbus_admin *pPar, struct canbus_properties *props);extern int canbus4linux_set_register(struct canbus_admin *pPar, int addresse, unsigned int value);extern int canbus4linux_get_register(struct canbus_admin *pPar, int addresse, int *value);extern int canbus4linux_set_can_mode(struct canbus_admin *pPar, int can_2b);extern int canbus4linux_set_baudrate_by_constant(struct canbus_admin *pPar, unsigned long constant);extern unsigned long canbus4linux_get_baudrate_by_constant(struct canbus_admin *pPar);extern int canbus4linux_set_acceptance_filter(struct canbus_admin *pPar, struct canbus_acceptance_filter *filter);extern struct canbus_acceptance_filter canbus4linux_get_acceptance_filter(struct canbus_admin *pPar);extern int canbus4linux_set_command(struct canbus_admin *pPar, int command);extern int canbus4linux_transmit_data(struct canbus_admin *pPar, struct canbus_transmit_data *trans, struct file *fa_file);extern int canbus4linux_get_event(struct canbus_admin *pPar, struct canbus_event *trans, struct canbus_file *file);extern int canbus4linux_set_default_frame_format(struct canbus_admin *pPar, int fmt);extern int canbus4linux_test_device(struct canbus_admin *pPar);extern int canbus4linux_set_soft_acceptance_filter(struct canbus_admin *pPar, struct canbus_acceptance_filter *filter);extern struct canbus_acceptance_filter canbus4linux_get_soft_acceptance_filter(struct canbus_admin *pPar);#endif#endif /* CANBUS_INCLUDE_FILE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -