29#if CFG_TUD_ENABLED && (CFG_TUSB_MCU == OPT_MCU_RP2040) && CFG_TUD_RPI_PIO_USB
33#include "pio_usb_ll.h"
41#define RHPORT_OFFSET 1
42#define RHPORT_PIO(_x) ((_x)-RHPORT_OFFSET)
46static usb_descriptor_buffers_t
desc;
56 static pio_usb_configuration_t config = PIO_USB_DEFAULT_CONFIG;
78 pio_usb_device_set_address(
dev_addr);
108 return pio_usb_device_endpoint_open((uint8_t
const*) desc_ep);
120 endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_addr);
138 endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_addr);
139 ep->has_transfer =
false;
147 endpoint_t *ep = pio_usb_device_get_endpoint_by_address(ep_addr);
158 const uint32_t ep_all = *ep_reg;
160 for(uint8_t ep_idx = 0; ep_idx < PIO_USB_EP_POOL_CNT; ep_idx++)
162 uint32_t
const mask = (1u << ep_idx);
166 endpoint_t* ep = PIO_USB_ENDPOINT(ep_idx);
172 (*ep_reg) &= ~ep_all;
178 uint8_t
const tu_rhport = root_id + 1;
179 root_port_t* rport = PIO_USB_ROOT_PORT(root_id);
180 uint32_t
const ints = rport->ints;
182 if (ints & PIO_USB_INTS_RESET_END_BITS)
187 if (ints & PIO_USB_INTS_SETUP_REQ_BITS)
192 if ( ints & PIO_USB_INTS_ENDPOINT_COMPLETE_BITS )
197 if ( ints & PIO_USB_INTS_ENDPOINT_STALLED_BITS )
202 if ( ints & PIO_USB_INTS_ENDPOINT_ERROR_BITS )
208 rport->ints &= ~ints;
static TU_ATTR_ALWAYS_INLINE void dcd_event_xfer_complete(uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_setup_received(uint8_t rhport, uint8_t const *setup, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_bus_reset(uint8_t rhport, tusb_speed_t speed, bool in_isr)
static usb_descriptor_buffers_t desc
void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
void dcd_disconnect(uint8_t rhport)
void dcd_edpt_close_all(uint8_t rhport)
void dcd_int_disable(uint8_t rhport)
void __no_inline_not_in_flash_func() pio_usb_device_irq_handler(uint8_t root_id)
void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
void dcd_connect(uint8_t rhport)
bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
static usb_device_t * usb_device
void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
bool dcd_init(uint8_t rhport, const tusb_rhport_init_t *rh_init)
static void __no_inline_not_in_flash_func() handle_endpoint_irq(uint8_t tu_rhport, xfer_result_t result, volatile uint32_t *ep_reg)
void dcd_int_enable(uint8_t rhport)
void dcd_remote_wakeup(uint8_t rhport)
bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep)
AUDIO Channel Cluster Descriptor (4.1)