Files
TAIXIN/sdk/include/hal/usb_device.h

139 lines
4.4 KiB
C
Raw Permalink Normal View History

#ifndef _HAL_USB_DEVICE_H_
#define _HAL_USB_DEVICE_H_
#include "usb_ch9.h"
#ifdef __cplusplus
extern "C" {
#endif
#define BULK_EP 1
#define WIFI_EP 1
#define ISO_EP 2
#define HID_EP 2
enum usb_dev_irqs {
USB_DEV_RESET_IRQ,
USB_DEV_SUSPEND_IRQ,
USB_DEV_RESUME_IRQ,
USB_DEV_SOF_IRQ,
USB_DEV_CTL_IRQ,
USB_EP_RX_IRQ,
USB_EP_TX_IRQ,
USB_CONNECT,
USB_DISCONNECT,
USB_BABBLE,
USB_XACT_ERR,
USB_DEV_VBUS_ERR,
};
enum usb_dev_io_cmd {
USB_DEV_IO_CMD_AUTO_TX_NULL_PKT_ENABLE,
USB_DEV_IO_CMD_AUTO_TX_NULL_PKT_DISABLE,
USB_DEV_IO_CMD_REMOTE_WAKEUP,
/* this function need call after attatch & before open
* msg[1:0] : vid
* msg[3:2] : pid
*/
USB_DEV_IO_CMD_SET_ID,
USB_HOST_HY_TUNE_EN,
USB_HOST_SET_HY_TUNE,
USB_HOST_SET_TX_VERF,
USB_HOST_SET_TX_SLIVER,
USB_HOST_GET_TX_SLIVER,
USB_HOST_SET_SLIVER_TOG_EN,
USB_HOST_SET_RX_SLIVER,
USB_HOST_GET_RX_SLIVER,
USB_HOST_KICK_EP_DMA,
USB_HOST_GET_RX_DMA_LEN,
USB_HOST_ISO_IS_CRC_ERR,
USB_HOST_GET_DMA_IRQ_VECTOR,
USB_HOST_SET_TX_INTERVAL,
USB_HOST_SET_RX_INTERVAL,
USB_HOST_GET_BUS_SPEED,
};
enum usb_device_ep_dir {
USB_CORE_HOST_EP_RX = 0,
USB_CORE_HOST_EP_TX,
};
struct usb_device_dma_cfg {
uint8_t ep_index;
uint8_t ep_dir;
uint32_t* dma_addr;
uint32_t dma_len;
};
struct usb_device_ep_cfg {
uint8 ep_id;
uint8 ep_type;
uint8 ep_dir_tx;
uint16 max_packet_size_hs;
uint16 max_packet_size_fs;
};
struct usb_device_cfg {
uint16 vid; /* usb device VID */
uint16 pid; /* usb device PID */
uint8 speed; /* not used */
uint8 *p_device_descriptor; /* usb device descriptor */
uint8 *p_config_descriptor_head; /* usb config descriptor generic header */
uint8 *p_config_desc_hs; /* usb config descriptor */
uint8 *p_config_desc_fs; /* usb config descriptor */
uint16 config_desc_len; /* usb config descriptor total len */
uint8 interface_num;
uint8 *p_language_id;
uint16 language_id_len;
uint8 *p_str_manufacturer;
uint16 str_manufacturer_len;
uint8 *p_str_product;
uint16 str_product_len;
uint8 *p_str_serial_number;
uint16 str_serial_number_len;
uint8 ep_nums;
struct usb_device_ep_cfg ep_cfg[8]; /* must same with config_desc */
};
typedef uint32 (*usbdev_irq_hdl)(uint32 irq, uint32 param1, uint32 param2, uint32 param3);
struct usb_device {
struct dev_obj dev;
};
struct usb_hal_ops{
struct devobj_ops ops;
int32(*open)(struct usb_device *p_usb_d, struct usb_device_cfg *p_usbdev_cfg);
int32(*close)(struct usb_device *p_usb_d);
int32(*read)(struct usb_device *p_usb_d, uint8 ep, uint8 *buff, uint32 len, uint8 sync);
int32(*write)(struct usb_device *p_usb_d, uint8 ep, uint8 *buff, uint32 len, uint8 sync);
int32(*write_scatter)(struct usb_device *p_usb_d, uint8 ep, scatter_data *data, uint32 count, uint8 sync);
int32(*ioctl)(struct usb_device *p_usb_d, uint32 cmd, uint32 param1, uint32 param2);
int32(*request_irq)(struct usb_device *p_usb_d, usbdev_irq_hdl irqhdl, uint32 data);
};
int32 usb_device_open(struct usb_device *p_usb_d, struct usb_device_cfg * p_usbdev_cfg);
int32 usb_device_close(struct usb_device *p_usb_d);
int32 usb_device_write(struct usb_device *p_usb_d, uint8 ep, uint8 *buff, uint32 len, uint8 sync);
int32 usb_device_write_scatter(struct usb_device *p_usb_d, uint8 ep, scatter_data *data, uint32 count, uint8 sync);
int32 usb_device_read(struct usb_device *p_usb_d, uint8 ep, uint8 *buff, uint32 len, uint8 sync);
int32 usb_device_ioctl(struct usb_device *p_usb_d, uint32 cmd, uint32 param1, uint32 param2);
int32 usb_device_request_irq(struct usb_device *p_usb_d, usbdev_irq_hdl handle, uint32 data);
#ifdef __cplusplus
}
#endif
#endif