pcan_usb_pro.h revision d8a199355f8f8a0797c00d98788d7282c9ea38bd
1/*
2 * CAN driver for PEAK System PCAN-USB Pro adapter
3 * Derived from the PCAN project file driver/src/pcan_usbpro_fw.h
4 *
5 * Copyright (C) 2003-2011 PEAK System-Technik GmbH
6 * Copyright (C) 2011-2012 Stephane Grosjean <s.grosjean@peak-system.com>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published
10 * by the Free Software Foundation; version 2 of the License.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * General Public License for more details.
16 */
17#ifndef PCAN_USB_PRO_H
18#define PCAN_USB_PRO_H
19
20/*
21 * USB Vendor request data types
22 */
23#define PCAN_USBPRO_REQ_INFO		0
24#define PCAN_USBPRO_REQ_FCT		2
25
26/* Vendor Request value for XXX_INFO */
27#define PCAN_USBPRO_INFO_BL		0
28#define PCAN_USBPRO_INFO_FW		1
29
30/* Vendor Request value for XXX_FCT */
31#define PCAN_USBPRO_FCT_DRVLD		5 /* tell device driver is loaded */
32
33/* PCAN_USBPRO_INFO_BL vendor request record type */
34struct __packed pcan_usb_pro_blinfo {
35	u32 ctrl_type;
36	u8  version[4];
37	u8  day;
38	u8  month;
39	u8  year;
40	u8  dummy;
41	u32 serial_num_hi;
42	u32 serial_num_lo;
43	u32 hw_type;
44	u32 hw_rev;
45};
46
47/* PCAN_USBPRO_INFO_FW vendor request record type */
48struct __packed pcan_usb_pro_fwinfo {
49	u32 ctrl_type;
50	u8  version[4];
51	u8  day;
52	u8  month;
53	u8  year;
54	u8  dummy;
55	u32 fw_type;
56};
57
58/*
59 * USB Command record types
60 */
61#define PCAN_USBPRO_SETBTR	0x02
62#define PCAN_USBPRO_SETBUSACT	0x04
63#define PCAN_USBPRO_SETSILENT	0x05
64#define PCAN_USBPRO_SETFILTR	0x0a
65#define PCAN_USBPRO_SETTS	0x10
66#define PCAN_USBPRO_GETDEVID	0x12
67#define PCAN_USBPRO_SETLED	0x1C
68#define PCAN_USBPRO_RXMSG8	0x80
69#define PCAN_USBPRO_RXMSG4	0x81
70#define PCAN_USBPRO_RXMSG0	0x82
71#define PCAN_USBPRO_RXRTR	0x83
72#define PCAN_USBPRO_RXSTATUS	0x84
73#define PCAN_USBPRO_RXTS	0x85
74#define PCAN_USBPRO_TXMSG8	0x41
75#define PCAN_USBPRO_TXMSG4	0x42
76#define PCAN_USBPRO_TXMSG0	0x43
77
78/* record structures */
79struct __packed pcan_usb_pro_btr {
80	u8  data_type;
81	u8  channel;
82	u16 dummy;
83	u32 CCBT;
84};
85
86struct __packed pcan_usb_pro_busact {
87	u8  data_type;
88	u8  channel;
89	u16 onoff;
90};
91
92struct __packed pcan_usb_pro_silent {
93	u8  data_type;
94	u8  channel;
95	u16 onoff;
96};
97
98struct __packed pcan_usb_pro_filter {
99	u8  data_type;
100	u8  dummy;
101	u16 filter_mode;
102};
103
104struct __packed pcan_usb_pro_setts {
105	u8  data_type;
106	u8  dummy;
107	u16 mode;
108};
109
110struct __packed pcan_usb_pro_devid {
111	u8  data_type;
112	u8  channel;
113	u16 dummy;
114	u32 serial_num;
115};
116
117struct __packed pcan_usb_pro_setled {
118	u8  data_type;
119	u8  channel;
120	u16 mode;
121	u32 timeout;
122};
123
124struct __packed pcan_usb_pro_rxmsg {
125	u8  data_type;
126	u8  client;
127	u8  flags;
128	u8  len;
129	u32 ts32;
130	u32 id;
131
132	u8  data[8];
133};
134
135#define PCAN_USBPRO_STATUS_ERROR	0x0001
136#define PCAN_USBPRO_STATUS_BUS		0x0002
137#define PCAN_USBPRO_STATUS_OVERRUN	0x0004
138#define PCAN_USBPRO_STATUS_QOVERRUN	0x0008
139
140struct __packed pcan_usb_pro_rxstatus {
141	u8  data_type;
142	u8  channel;
143	u16 status;
144	u32 ts32;
145	u32 err_frm;
146};
147
148struct __packed pcan_usb_pro_rxts {
149	u8  data_type;
150	u8  dummy[3];
151	u32 ts64[2];
152};
153
154struct __packed pcan_usb_pro_txmsg {
155	u8  data_type;
156	u8  client;
157	u8  flags;
158	u8  len;
159	u32 id;
160	u8  data[8];
161};
162
163union pcan_usb_pro_rec {
164	u8				data_type;
165	struct pcan_usb_pro_btr		btr;
166	struct pcan_usb_pro_busact	bus_act;
167	struct pcan_usb_pro_silent	silent_mode;
168	struct pcan_usb_pro_filter	filter_mode;
169	struct pcan_usb_pro_setts	ts;
170	struct pcan_usb_pro_devid	dev_id;
171	struct pcan_usb_pro_setled	set_led;
172	struct pcan_usb_pro_rxmsg	rx_msg;
173	struct pcan_usb_pro_rxstatus	rx_status;
174	struct pcan_usb_pro_rxts	rx_ts;
175	struct pcan_usb_pro_txmsg	tx_msg;
176};
177
178#endif
179