1
2
3
4
5
6
7
8
9 #ifndef PCAN_USB_PRO_H
10 #define PCAN_USB_PRO_H
11
12
13
14
15 #define PCAN_USBPRO_REQ_INFO 0
16 #define PCAN_USBPRO_REQ_FCT 2
17
18
19 #define PCAN_USBPRO_INFO_BL 0
20 #define PCAN_USBPRO_INFO_FW 1
21
22
23 #define PCAN_USBPRO_EP_CMDOUT 1
24 #define PCAN_USBPRO_EP_CMDIN (PCAN_USBPRO_EP_CMDOUT | USB_DIR_IN)
25 #define PCAN_USBPRO_EP_MSGOUT_0 2
26 #define PCAN_USBPRO_EP_MSGIN (PCAN_USBPRO_EP_MSGOUT_0 | USB_DIR_IN)
27 #define PCAN_USBPRO_EP_MSGOUT_1 3
28 #define PCAN_USBPRO_EP_UNUSED (PCAN_USBPRO_EP_MSGOUT_1 | USB_DIR_IN)
29
30
31 #define PCAN_USBPRO_FCT_DRVLD 5
32 #define PCAN_USBPRO_FCT_DRVLD_REQ_LEN 16
33
34
35 struct __packed pcan_usb_pro_blinfo {
36 __le32 ctrl_type;
37 u8 version[4];
38 u8 day;
39 u8 month;
40 u8 year;
41 u8 dummy;
42 __le32 serial_num_hi;
43 __le32 serial_num_lo;
44 __le32 hw_type;
45 __le32 hw_rev;
46 };
47
48
49 struct __packed pcan_usb_pro_fwinfo {
50 __le32 ctrl_type;
51 u8 version[4];
52 u8 day;
53 u8 month;
54 u8 year;
55 u8 dummy;
56 __le32 fw_type;
57 };
58
59
60
61
62 #define PCAN_USBPRO_SETBTR 0x02
63 #define PCAN_USBPRO_SETBUSACT 0x04
64 #define PCAN_USBPRO_SETSILENT 0x05
65 #define PCAN_USBPRO_SETFILTR 0x0a
66 #define PCAN_USBPRO_SETTS 0x10
67 #define PCAN_USBPRO_GETDEVID 0x12
68 #define PCAN_USBPRO_SETLED 0x1C
69 #define PCAN_USBPRO_RXMSG8 0x80
70 #define PCAN_USBPRO_RXMSG4 0x81
71 #define PCAN_USBPRO_RXMSG0 0x82
72 #define PCAN_USBPRO_RXRTR 0x83
73 #define PCAN_USBPRO_RXSTATUS 0x84
74 #define PCAN_USBPRO_RXTS 0x85
75 #define PCAN_USBPRO_TXMSG8 0x41
76 #define PCAN_USBPRO_TXMSG4 0x42
77 #define PCAN_USBPRO_TXMSG0 0x43
78
79
80 struct __packed pcan_usb_pro_btr {
81 u8 data_type;
82 u8 channel;
83 __le16 dummy;
84 __le32 CCBT;
85 };
86
87 struct __packed pcan_usb_pro_busact {
88 u8 data_type;
89 u8 channel;
90 __le16 onoff;
91 };
92
93 struct __packed pcan_usb_pro_silent {
94 u8 data_type;
95 u8 channel;
96 __le16 onoff;
97 };
98
99 struct __packed pcan_usb_pro_filter {
100 u8 data_type;
101 u8 dummy;
102 __le16 filter_mode;
103 };
104
105 struct __packed pcan_usb_pro_setts {
106 u8 data_type;
107 u8 dummy;
108 __le16 mode;
109 };
110
111 struct __packed pcan_usb_pro_devid {
112 u8 data_type;
113 u8 channel;
114 __le16 dummy;
115 __le32 serial_num;
116 };
117
118 struct __packed pcan_usb_pro_setled {
119 u8 data_type;
120 u8 channel;
121 __le16 mode;
122 __le32 timeout;
123 };
124
125 struct __packed pcan_usb_pro_rxmsg {
126 u8 data_type;
127 u8 client;
128 u8 flags;
129 u8 len;
130 __le32 ts32;
131 __le32 id;
132
133 u8 data[8];
134 };
135
136 #define PCAN_USBPRO_STATUS_ERROR 0x0001
137 #define PCAN_USBPRO_STATUS_BUS 0x0002
138 #define PCAN_USBPRO_STATUS_OVERRUN 0x0004
139 #define PCAN_USBPRO_STATUS_QOVERRUN 0x0008
140
141 struct __packed pcan_usb_pro_rxstatus {
142 u8 data_type;
143 u8 channel;
144 __le16 status;
145 __le32 ts32;
146 __le32 err_frm;
147 };
148
149 struct __packed pcan_usb_pro_rxts {
150 u8 data_type;
151 u8 dummy[3];
152 __le32 ts64[2];
153 };
154
155 struct __packed pcan_usb_pro_txmsg {
156 u8 data_type;
157 u8 client;
158 u8 flags;
159 u8 len;
160 __le32 id;
161 u8 data[8];
162 };
163
164 union pcan_usb_pro_rec {
165 u8 data_type;
166 struct pcan_usb_pro_btr btr;
167 struct pcan_usb_pro_busact bus_act;
168 struct pcan_usb_pro_silent silent_mode;
169 struct pcan_usb_pro_filter filter_mode;
170 struct pcan_usb_pro_setts ts;
171 struct pcan_usb_pro_devid dev_id;
172 struct pcan_usb_pro_setled set_led;
173 struct pcan_usb_pro_rxmsg rx_msg;
174 struct pcan_usb_pro_rxstatus rx_status;
175 struct pcan_usb_pro_rxts rx_ts;
176 struct pcan_usb_pro_txmsg tx_msg;
177 };
178
179 int pcan_usb_pro_probe(struct usb_interface *intf);
180 int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
181 int req_value, void *req_addr, int req_size);
182 void pcan_usb_pro_restart_complete(struct urb *urb);
183
184 #endif