123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /*
- * CAN driver for PEAK System PCAN-USB Pro adapter
- * Derived from the PCAN project file driver/src/pcan_usbpro_fw.h
- *
- * Copyright (C) 2003-2011 PEAK System-Technik GmbH
- * Copyright (C) 2011-2012 Stephane Grosjean <s.grosjean@peak-system.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published
- * by the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- */
- #ifndef PCAN_USB_PRO_H
- #define PCAN_USB_PRO_H
- /*
- * USB Vendor request data types
- */
- #define PCAN_USBPRO_REQ_INFO 0
- #define PCAN_USBPRO_REQ_FCT 2
- /* Vendor Request value for XXX_INFO */
- #define PCAN_USBPRO_INFO_BL 0
- #define PCAN_USBPRO_INFO_FW 1
- /* PCAN-USB Pro (FD) Endpoints */
- #define PCAN_USBPRO_EP_CMDOUT 1
- #define PCAN_USBPRO_EP_CMDIN (PCAN_USBPRO_EP_CMDOUT | USB_DIR_IN)
- #define PCAN_USBPRO_EP_MSGOUT_0 2
- #define PCAN_USBPRO_EP_MSGIN (PCAN_USBPRO_EP_MSGOUT_0 | USB_DIR_IN)
- #define PCAN_USBPRO_EP_MSGOUT_1 3
- #define PCAN_USBPRO_EP_UNUSED (PCAN_USBPRO_EP_MSGOUT_1 | USB_DIR_IN)
- /* Vendor Request value for XXX_FCT */
- #define PCAN_USBPRO_FCT_DRVLD 5 /* tell device driver is loaded */
- #define PCAN_USBPRO_FCT_DRVLD_REQ_LEN 16
- /* PCAN_USBPRO_INFO_BL vendor request record type */
- struct __packed pcan_usb_pro_blinfo {
- __le32 ctrl_type;
- u8 version[4];
- u8 day;
- u8 month;
- u8 year;
- u8 dummy;
- __le32 serial_num_hi;
- __le32 serial_num_lo;
- __le32 hw_type;
- __le32 hw_rev;
- };
- /* PCAN_USBPRO_INFO_FW vendor request record type */
- struct __packed pcan_usb_pro_fwinfo {
- __le32 ctrl_type;
- u8 version[4];
- u8 day;
- u8 month;
- u8 year;
- u8 dummy;
- __le32 fw_type;
- };
- /*
- * USB Command record types
- */
- #define PCAN_USBPRO_SETBTR 0x02
- #define PCAN_USBPRO_SETBUSACT 0x04
- #define PCAN_USBPRO_SETSILENT 0x05
- #define PCAN_USBPRO_SETFILTR 0x0a
- #define PCAN_USBPRO_SETTS 0x10
- #define PCAN_USBPRO_GETDEVID 0x12
- #define PCAN_USBPRO_SETLED 0x1C
- #define PCAN_USBPRO_RXMSG8 0x80
- #define PCAN_USBPRO_RXMSG4 0x81
- #define PCAN_USBPRO_RXMSG0 0x82
- #define PCAN_USBPRO_RXRTR 0x83
- #define PCAN_USBPRO_RXSTATUS 0x84
- #define PCAN_USBPRO_RXTS 0x85
- #define PCAN_USBPRO_TXMSG8 0x41
- #define PCAN_USBPRO_TXMSG4 0x42
- #define PCAN_USBPRO_TXMSG0 0x43
- /* record structures */
- struct __packed pcan_usb_pro_btr {
- u8 data_type;
- u8 channel;
- __le16 dummy;
- __le32 CCBT;
- };
- struct __packed pcan_usb_pro_busact {
- u8 data_type;
- u8 channel;
- __le16 onoff;
- };
- struct __packed pcan_usb_pro_silent {
- u8 data_type;
- u8 channel;
- __le16 onoff;
- };
- struct __packed pcan_usb_pro_filter {
- u8 data_type;
- u8 dummy;
- __le16 filter_mode;
- };
- struct __packed pcan_usb_pro_setts {
- u8 data_type;
- u8 dummy;
- __le16 mode;
- };
- struct __packed pcan_usb_pro_devid {
- u8 data_type;
- u8 channel;
- __le16 dummy;
- __le32 serial_num;
- };
- struct __packed pcan_usb_pro_setled {
- u8 data_type;
- u8 channel;
- __le16 mode;
- __le32 timeout;
- };
- struct __packed pcan_usb_pro_rxmsg {
- u8 data_type;
- u8 client;
- u8 flags;
- u8 len;
- __le32 ts32;
- __le32 id;
- u8 data[8];
- };
- #define PCAN_USBPRO_STATUS_ERROR 0x0001
- #define PCAN_USBPRO_STATUS_BUS 0x0002
- #define PCAN_USBPRO_STATUS_OVERRUN 0x0004
- #define PCAN_USBPRO_STATUS_QOVERRUN 0x0008
- struct __packed pcan_usb_pro_rxstatus {
- u8 data_type;
- u8 channel;
- __le16 status;
- __le32 ts32;
- __le32 err_frm;
- };
- struct __packed pcan_usb_pro_rxts {
- u8 data_type;
- u8 dummy[3];
- __le32 ts64[2];
- };
- struct __packed pcan_usb_pro_txmsg {
- u8 data_type;
- u8 client;
- u8 flags;
- u8 len;
- __le32 id;
- u8 data[8];
- };
- union pcan_usb_pro_rec {
- u8 data_type;
- struct pcan_usb_pro_btr btr;
- struct pcan_usb_pro_busact bus_act;
- struct pcan_usb_pro_silent silent_mode;
- struct pcan_usb_pro_filter filter_mode;
- struct pcan_usb_pro_setts ts;
- struct pcan_usb_pro_devid dev_id;
- struct pcan_usb_pro_setled set_led;
- struct pcan_usb_pro_rxmsg rx_msg;
- struct pcan_usb_pro_rxstatus rx_status;
- struct pcan_usb_pro_rxts rx_ts;
- struct pcan_usb_pro_txmsg tx_msg;
- };
- int pcan_usb_pro_probe(struct usb_interface *intf);
- int pcan_usb_pro_send_req(struct peak_usb_device *dev, int req_id,
- int req_value, void *req_addr, int req_size);
- void pcan_usb_pro_restart_complete(struct urb *urb);
- #endif
|