18 #if defined(__cplusplus) 24 #if defined(__DOXYGEN__) 27 #define USBD_PINS_REMAP 28 #define USBD_SOF_DISABLED 29 #define USBD_VBUS_DETECT 33 #define USBD_PRIMARY_OTGHS 34 #define USBD_USE_EXT_ULPI 47 #define usbd_evt_reset 0 48 #define usbd_evt_sof 1 49 #define usbd_evt_susp 2 50 #define usbd_evt_wkup 3 51 #define usbd_evt_eptx 4 52 #define usbd_evt_eprx 5 53 #define usbd_evt_epsetup 6 54 #define usbd_evt_error 7 55 #define usbd_evt_count 8 61 #define usbd_lane_unk 0 62 #define usbd_lane_dsc 1 63 #define usbd_lane_sdp 2 64 #define usbd_lane_cdp 3 65 #define usbd_lane_dcp 4 71 #define USBD_HW_ADDRFST (1 << 0) 72 #define USBD_HW_BC (1 << 1) 73 #define USND_HW_HS (1 << 2) 74 #define USBD_HW_ENABLED (1 << 3) 75 #define USBD_HW_ENUMSPEED (2 << 4) 76 #define USBD_HW_SPEED_NC (0 << 4) 77 #define USBD_HW_SPEED_LS (1 << 4) 78 #define USBD_HW_SPEED_FS (2 << 4) 79 #define USBD_HW_SPEED_HS (3 << 4) 87 #define USB_EPTYPE_DBLBUF 0x04 91 #define USB_REQ_DIRECTION (1 << 7) 92 #define USB_REQ_HOSTTODEV (0 << 7) 93 #define USB_REQ_DEVTOHOST (1 << 7) 94 #define USB_REQ_TYPE (3 << 5) 95 #define USB_REQ_STANDARD (0 << 5) 96 #define USB_REQ_CLASS (1 << 5) 97 #define USB_REQ_VENDOR (2 << 5) 98 #define USB_REQ_RECIPIENT (3 << 0) 99 #define USB_REQ_DEVICE (0 << 0) 100 #define USB_REQ_INTERFACE (1 << 0) 101 #define USB_REQ_ENDPOINT (2 << 0) 102 #define USB_REQ_OTHER (3 << 0) 106 #if !defined(__ASSEMBLER__) 113 usbd_state_disconnected,
133 typedef enum _usbd_respond {
143 uint8_t bmRequestType;
160 uint16_t data_maxsize;
163 uint8_t device_state;
164 uint8_t control_state;
265 typedef int32_t (*
usbd_hw_ep_read)(uint8_t ep,
void *buf, uint16_t blen);
346 const uint8_t ep0size, uint32_t *buffer,
const uint16_t bsize) {
348 dev->status.ep0size = ep0size;
349 dev->status.data_ptr = buffer;
350 dev->status.data_buf = buffer;
351 dev->status.data_maxsize = bsize - __builtin_offsetof(
usbd_ctlreq, data);
365 dev->control_callback = callback;
373 dev->config_callback = callback;
381 dev->descriptor_callback = callback;
388 inline static bool usbd_ep_config(usbd_device *dev, uint8_t ep, uint8_t eptype, uint16_t epsize) {
389 return dev->driver->ep_config(ep, eptype, epsize);
397 dev->driver->ep_deconfig(ep);
406 dev->endpoint[ep & 0x07] = callback;
415 dev->events[evt] = callback;
422 inline static int32_t
usbd_ep_write(usbd_device *dev, uint8_t ep,
void *buf, uint16_t blen) {
423 return dev->driver->ep_write(ep, buf, blen);
430 inline static int32_t
usbd_ep_read(usbd_device *dev, uint8_t ep,
void *buf, uint16_t blen) {
431 return dev->driver->ep_read(ep, buf, blen);
438 inline static void usbd_ep_stall(usbd_device *dev, uint8_t ep) {
439 dev->driver->ep_setstall(ep, 1);
447 dev->driver->ep_setstall(ep, 0);
455 dev->driver->enable(enable);
464 return dev->driver->connect(connect);
470 return dev->driver->getinfo();
473 #endif //(__ASSEMBLER__) 477 #if defined(__cplusplus) 480 #endif //_USBD_STD_H_ static void usbd_reg_control(usbd_device *dev, usbd_ctl_callback callback)
Register callback for all control requests.
static void usbd_ep_deconfig(usbd_device *dev, uint8_t ep)
Deconfigure endpoint.
static void usbd_reg_config(usbd_device *dev, usbd_cfg_callback callback)
Register callback for SET_CONFIG control request.
TX stage. Transmitting DATA-IN payload. Zero length packet maybe required..
static void usbd_reg_descr(usbd_device *dev, usbd_dsc_callback callback)
Register callback for GET_DESCRIPTOR control request.
usbd_machine_state
USB device machine states.
uint16_t(* usbd_hw_get_serialno)(void *buffer)
Makes a string descriptor contains unique serial number from hardware ID's.
usbd_rqc_callback complete_callback
USB control transfer completed callback function.
uint32_t(* usbd_hw_getinfo)(void)
Get USB device status and capabilities.
RX stage. Receiving DATA-OUT payload.
static uint32_t usbd_getinfo(usbd_device *dev)
Retrieves status and capabilities.
void usbd_poll(usbd_device *dev)
Polls USB for events.
usbd_respond(* usbd_dsc_callback)(usbd_ctlreq *req, void **address, uint16_t *dsize)
USB get descriptor callback function.
void(* usbd_rqc_callback)(usbd_device *dev, usbd_ctlreq *req)
USB control transfer completed callback function.
Represents generic USB control request.
const struct usbd_driver * driver
Represents a hardware USB driver call table.
Function has an error, STALLPID will be issued.
usbd_respond
Reporting status results.
static int32_t usbd_ep_read(usbd_device *dev, uint8_t ep, void *buf, uint16_t blen)
Read data from endpoint.
int32_t(* usbd_hw_ep_read)(uint8_t ep, void *buf, uint16_t blen)
Reads data from OUT or control endpoint.
usbd_hw_enable enable
Enables or disables USB hardware.
Idle stage. Awaiting for SETUP packet.
Function is busy. NAK handshake.
int32_t(* usbd_hw_ep_write)(uint8_t ep, void *buf, uint16_t blen)
Writes data to IN or control endpoint.
bool(* usbd_hw_ep_config)(uint8_t ep, uint8_t eptype, uint16_t epsize)
Configures endpoint.
static void usbd_ep_unstall(usbd_device *dev, uint8_t ep)
Unstall endpoint.
TX stage. Last DATA-IN packed passed to buffer. Awaiting for the TX completion.
usbd_ctl_state
USB device control endpoint machine state.
static uint8_t usbd_connect(usbd_device *dev, bool connect)
Connects or disconnects USB hardware to/from usb host.
static void usbd_enable(usbd_device *dev, bool enable)
Enables or disables USB hardware.
usbd_evt_callback events[usbd_evt_count]
array of the event callbacks.
void(* usbd_hw_poll)(usbd_device *dev, usbd_evt_callback callback)
Polls USB hardware for the events.
bool(* usbd_hw_ep_isstalled)(uint8_t ep)
Checks endpoint for stalled state.
usbd_respond(* usbd_cfg_callback)(usbd_device *dev, uint8_t cfg)
USB set configuration callback function.
void(* usbd_hw_ep_deconfig)(uint8_t ep)
De-configures, cleans and disables endpoint.
TX stage. Transmitting DATA-IN payload.
static void usbd_reg_event(usbd_device *dev, uint8_t evt, usbd_evt_callback callback)
Registers event callback.
static void usbd_init(usbd_device *dev, const struct usbd_driver *drv, const uint8_t ep0size, uint32_t *buffer, const uint16_t bsize)
Initializes device structure.
Represents a USB device data.
static void usbd_reg_endpoint(usbd_device *dev, uint8_t ep, usbd_evt_callback callback)
Register endpoint callback.
usbd_respond(* usbd_ctl_callback)(usbd_device *dev, usbd_ctlreq *req, usbd_rqc_callback *callback)
USB control callback function.
static bool usbd_ep_config(usbd_device *dev, uint8_t ep, uint8_t eptype, uint16_t epsize)
Configure endpoint.
usbd_ctl_callback control_callback
USB control callback function.
static int32_t usbd_ep_write(usbd_device *dev, uint8_t ep, void *buf, uint16_t blen)
Write data to endpoint.
static void usbd_ep_stall(usbd_device *dev, uint8_t ep)
Stall endpoint.
Represents a hardware USB driver call table.
void(* usbd_hw_enable)(bool enable)
Enables or disables USB hardware.
usbd_evt_callback endpoint[8]
array of the endpoint callbacks.
void(* usbd_evt_callback)(usbd_device *dev, uint8_t event, uint8_t ep)
Generic USB device event callback for events and endpoints processing.
usbd_cfg_callback config_callback
USB set configuration callback function.
uint16_t(* usbd_hw_get_frameno)(void)
Gets frame number from usb hardware.
void(* usbd_hw_setaddr)(uint8_t address)
Sets USB hardware address.
uint8_t(* usbd_hw_connect)(bool connect)
Function completes request accepted ZLP or data will be send.
usbd_dsc_callback descriptor_callback
USB get descriptor callback function.
void(* usbd_hw_ep_setstall)(uint8_t ep, bool stall)