2 * CAN driver for PEAK System PCAN-USB Pro adapter
3 * Derived from the PCAN project file driver/src/pcan_usbpro_fw.h
5 * Copyright (C) 2003-2011 PEAK System-Technik GmbH
6 * Copyright (C) 2011-2012 Stephane Grosjean <s.grosjean@peak-system.com>
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.
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.
17 #ifndef PCAN_USB_PRO_H
18 #define PCAN_USB_PRO_H
21 * USB Vendor request data types
23 #define PCAN_USBPRO_REQ_INFO 0
24 #define PCAN_USBPRO_REQ_FCT 2
26 /* Vendor Request value for XXX_INFO */
27 #define PCAN_USBPRO_INFO_BL 0
28 #define PCAN_USBPRO_INFO_FW 1
30 /* PCAN-USB Pro (FD) Endpoints */
31 #define PCAN_USBPRO_EP_CMDOUT 1
32 #define PCAN_USBPRO_EP_CMDIN (PCAN_USBPRO_EP_CMDOUT | USB_DIR_IN)
33 #define PCAN_USBPRO_EP_MSGOUT_0 2
34 #define PCAN_USBPRO_EP_MSGIN (PCAN_USBPRO_EP_MSGOUT_0 | USB_DIR_IN)
35 #define PCAN_USBPRO_EP_MSGOUT_1 3
36 #define PCAN_USBPRO_EP_UNUSED (PCAN_USBPRO_EP_MSGOUT_1 | USB_DIR_IN)
38 /* Vendor Request value for XXX_FCT */
39 #define PCAN_USBPRO_FCT_DRVLD 5 /* tell device driver is loaded */
40 #define PCAN_USBPRO_FCT_DRVLD_REQ_LEN 16
42 /* PCAN_USBPRO_INFO_BL vendor request record type */
43 struct __packed pcan_usb_pro_blinfo
{
56 /* PCAN_USBPRO_INFO_FW vendor request record type */
57 struct __packed pcan_usb_pro_fwinfo
{
68 * USB Command record types
70 #define PCAN_USBPRO_SETBTR 0x02
71 #define PCAN_USBPRO_SETBUSACT 0x04
72 #define PCAN_USBPRO_SETSILENT 0x05
73 #define PCAN_USBPRO_SETFILTR 0x0a
74 #define PCAN_USBPRO_SETTS 0x10
75 #define PCAN_USBPRO_GETDEVID 0x12
76 #define PCAN_USBPRO_SETLED 0x1C
77 #define PCAN_USBPRO_RXMSG8 0x80
78 #define PCAN_USBPRO_RXMSG4 0x81
79 #define PCAN_USBPRO_RXMSG0 0x82
80 #define PCAN_USBPRO_RXRTR 0x83
81 #define PCAN_USBPRO_RXSTATUS 0x84
82 #define PCAN_USBPRO_RXTS 0x85
83 #define PCAN_USBPRO_TXMSG8 0x41
84 #define PCAN_USBPRO_TXMSG4 0x42
85 #define PCAN_USBPRO_TXMSG0 0x43
87 /* record structures */
88 struct __packed pcan_usb_pro_btr
{
95 struct __packed pcan_usb_pro_busact
{
101 struct __packed pcan_usb_pro_silent
{
107 struct __packed pcan_usb_pro_filter
{
113 struct __packed pcan_usb_pro_setts
{
119 struct __packed pcan_usb_pro_devid
{
126 struct __packed pcan_usb_pro_setled
{
133 struct __packed pcan_usb_pro_rxmsg
{
144 #define PCAN_USBPRO_STATUS_ERROR 0x0001
145 #define PCAN_USBPRO_STATUS_BUS 0x0002
146 #define PCAN_USBPRO_STATUS_OVERRUN 0x0004
147 #define PCAN_USBPRO_STATUS_QOVERRUN 0x0008
149 struct __packed pcan_usb_pro_rxstatus
{
157 struct __packed pcan_usb_pro_rxts
{
163 struct __packed pcan_usb_pro_txmsg
{
172 union pcan_usb_pro_rec
{
174 struct pcan_usb_pro_btr btr
;
175 struct pcan_usb_pro_busact bus_act
;
176 struct pcan_usb_pro_silent silent_mode
;
177 struct pcan_usb_pro_filter filter_mode
;
178 struct pcan_usb_pro_setts ts
;
179 struct pcan_usb_pro_devid dev_id
;
180 struct pcan_usb_pro_setled set_led
;
181 struct pcan_usb_pro_rxmsg rx_msg
;
182 struct pcan_usb_pro_rxstatus rx_status
;
183 struct pcan_usb_pro_rxts rx_ts
;
184 struct pcan_usb_pro_txmsg tx_msg
;
187 int pcan_usb_pro_probe(struct usb_interface
*intf
);
188 int pcan_usb_pro_send_req(struct peak_usb_device
*dev
, int req_id
,
189 int req_value
, void *req_addr
, int req_size
);
190 void pcan_usb_pro_restart_complete(struct urb
*urb
);