summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
m---------lib/Pico-PIO-USB0
-rw-r--r--src/portable/raspberrypi/pio/hcd_pio.c41
2 files changed, 39 insertions, 2 deletions
diff --git a/lib/Pico-PIO-USB b/lib/Pico-PIO-USB
-Subproject ee20881ac8abc515df5e0cfe8851c7c21c47a0e
+Subproject 92268187f3b0490a43d139ed2cb598b06258011
diff --git a/src/portable/raspberrypi/pio/hcd_pio.c b/src/portable/raspberrypi/pio/hcd_pio.c
index 71645bd45..8d1903f85 100644
--- a/src/portable/raspberrypi/pio/hcd_pio.c
+++ b/src/portable/raspberrypi/pio/hcd_pio.c
@@ -167,8 +167,45 @@ bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const
{
rhport = RHPORT_PIO(rhport);
- usb_device[0].event = EVENT_NONE;
- usb_device[0].address = dev_addr;
+ usb_device_t *device = &usb_device[0];
+
+ static uint8_t ep_id_idx; // TODO remove later
+
+ if (ep_desc->bEndpointAddress == 0)
+ {
+ device->event = EVENT_NONE;
+ device->address = dev_addr;
+
+ ep_id_idx = 0;
+ }else if (ep_desc->bmAttributes.xfer == TUSB_XFER_INTERRUPT) // only support interrupt endpoint
+ {
+ endpoint_t *ep = NULL;
+ for ( int ep_pool_idx = 0; ep_pool_idx < PIO_USB_EP_POOL_CNT; ep_pool_idx++ )
+ {
+ if ( ep_pool[ep_pool_idx].ep_num == 0 )
+ {
+ ep = &ep_pool[ep_pool_idx];
+ device->endpoint_id[ep_id_idx] = ep_pool_idx + 1;
+ ep_id_idx++;
+
+ ep->data_id = 0;
+ ep->ep_num = ep_desc->bEndpointAddress;
+ ep->interval = ep_desc->bInterval;
+ ep->interval_counter = 0;
+ ep->size = (uint8_t) tu_edpt_packet_size(ep_desc);
+ ep->attr = EP_ATTR_INTERRUPT;
+
+ break;
+ }
+ }
+
+// TU_LOG1_INT(device->connected);
+// TU_LOG1_INT(device->root);
+// TU_LOG1_INT(device->is_root);
+// TU_LOG1_INT(device->is_fullspeed);
+//
+// TU_LOG1_INT(ep_id_idx);
+ }
return true;
}