gnuk/src/usb_lld.h

140 lines
3.8 KiB
C
Raw Normal View History

2012-05-10 10:01:01 +00:00
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
#define USB_STRING_DESCRIPTOR_TYPE 0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
2012-01-16 03:17:45 +00:00
2012-05-10 10:01:01 +00:00
#define STANDARD_ENDPOINT_DESC_SIZE 0x09
2012-01-20 09:18:23 +00:00
2012-05-10 10:01:01 +00:00
/* endpoints enumeration */
#define ENDP0 ((uint8_t)0)
#define ENDP1 ((uint8_t)1)
#define ENDP2 ((uint8_t)2)
#define ENDP3 ((uint8_t)3)
#define ENDP4 ((uint8_t)4)
#define ENDP5 ((uint8_t)5)
#define ENDP6 ((uint8_t)6)
#define ENDP7 ((uint8_t)7)
2012-01-16 04:24:31 +00:00
2012-05-10 10:01:01 +00:00
/* EP_TYPE[1:0] EndPoint TYPE */
#define EP_BULK (0x0000) /* EndPoint BULK */
#define EP_CONTROL (0x0200) /* EndPoint CONTROL */
#define EP_ISOCHRONOUS (0x0400) /* EndPoint ISOCHRONOUS */
#define EP_INTERRUPT (0x0600) /* EndPoint INTERRUPT */
2012-01-16 04:24:31 +00:00
2012-05-10 10:01:01 +00:00
enum RECIPIENT_TYPE
2012-01-16 04:24:31 +00:00
{
2012-05-10 10:01:01 +00:00
DEVICE_RECIPIENT, /* Recipient device */
INTERFACE_RECIPIENT, /* Recipient interface */
ENDPOINT_RECIPIENT, /* Recipient endpoint */
OTHER_RECIPIENT
};
2012-01-16 04:24:31 +00:00
2012-05-10 10:01:01 +00:00
enum DESCRIPTOR_TYPE
2012-01-16 03:17:45 +00:00
{
2012-05-10 10:01:01 +00:00
DEVICE_DESCRIPTOR = 1,
CONFIG_DESCRIPTOR,
STRING_DESCRIPTOR,
INTERFACE_DESCRIPTOR,
ENDPOINT_DESCRIPTOR
};
2012-01-16 03:17:45 +00:00
2012-05-17 08:02:49 +00:00
#define REQUEST_DIR 0x80 /* Mask to get request dir */
2012-05-10 10:01:01 +00:00
#define REQUEST_TYPE 0x60 /* Mask to get request type */
#define STANDARD_REQUEST 0x00 /* Standard request */
#define CLASS_REQUEST 0x20 /* Class request */
#define VENDOR_REQUEST 0x40 /* Vendor request */
2012-05-17 08:02:49 +00:00
#define RECIPIENT 0x1F /* Mask to get recipient */
2012-01-16 03:17:45 +00:00
#define USB_SETUP_SET(req) ((req & REQUEST_DIR) == 0)
#define USB_SETUP_GET(req) ((req & REQUEST_DIR) != 0)
2012-05-10 10:01:01 +00:00
enum
2012-01-16 03:17:45 +00:00
{
2012-05-10 10:01:01 +00:00
USB_UNSUPPORT = 0,
USB_SUCCESS = 1,
};
2012-01-16 03:17:45 +00:00
2013-03-06 08:18:59 +00:00
void usb_cb_device_reset (void);
void usb_cb_ctrl_write_finish (uint8_t req, uint8_t req_no,
uint16_t value, uint16_t index, uint16_t len);
int usb_cb_setup (uint8_t req, uint8_t req_no, uint16_t value,
uint16_t index, uint16_t len);
2013-11-02 06:06:08 +00:00
int usb_cb_get_descriptor (uint8_t rcp, uint8_t desc_type, uint8_t desc_index,
uint16_t index);
2013-03-06 08:18:59 +00:00
int usb_cb_handle_event (uint8_t event_type, uint16_t value);
int usb_cb_interface (uint8_t cmd, uint16_t interface, uint16_t value);
2012-05-10 10:01:01 +00:00
enum {
USB_EVENT_ADDRESS,
USB_EVENT_CONFIG,
USB_EVENT_SUSPEND,
USB_EVENT_WAKEUP,
USB_EVENT_STALL,
};
enum {
USB_SET_INTERFACE,
USB_GET_INTERFACE,
USB_QUERY_INTERFACE,
};
enum DEVICE_STATE
2012-01-16 03:17:45 +00:00
{
2012-05-10 10:01:01 +00:00
UNCONNECTED,
ATTACHED,
POWERED,
SUSPENDED,
ADDRESSED,
CONFIGURED
};
2012-06-01 00:34:28 +00:00
extern void usb_lld_init (uint8_t feature);
2012-05-10 10:01:01 +00:00
extern void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n);
extern void usb_lld_from_pmabuf (void *dst, uint16_t addr, size_t n);
extern void usb_lld_stall_tx (int ep_num);
extern void usb_lld_stall_rx (int ep_num);
extern int usb_lld_tx_data_len (int ep_num);
extern void usb_lld_txcpy (const void *src, int ep_num, int offset, size_t len);
extern void usb_lld_tx_enable (int ep_num, size_t len);
extern void usb_lld_write (uint8_t ep_num, const void *buf, size_t len);
extern void usb_lld_rx_enable (int ep_num);
extern int usb_lld_rx_data_len (int ep_num);
extern void usb_lld_rxcpy (uint8_t *dst, int ep_num, int offset, size_t len);
extern void usb_lld_reset (void);
extern void usb_lld_setup_endpoint (int ep_num, int ep_type, int ep_kind,
int ep_rx_addr, int ep_tx_addr,
int ep_rx_memory_size);
extern void usb_lld_set_configuration (uint8_t config);
extern uint8_t usb_lld_current_configuration (void);
extern void usb_lld_set_feature (uint8_t feature);
extern void usb_lld_set_data_to_send (const void *p, size_t len);
2012-05-17 08:02:49 +00:00
extern inline void usb_lld_set_data_to_recv (void *p, size_t len)
{
usb_lld_set_data_to_send ((const void *)p, len);
}
extern void usb_lld_prepare_shutdown (void);
extern void usb_lld_shutdown (void);
2012-05-22 01:52:15 +00:00
extern void usb_interrupt_handler (void);