Просмотр исходного кода

got interrupt endpoint working

hathach 4 лет назад
Родитель
Сommit
fa62d5abc9
2 измененных файлов с 40 добавлено и 3 удалено
  1. 1 1
      lib/Pico-PIO-USB
  2. 39 2
      src/portable/raspberrypi/pio/hcd_pio.c

+ 1 - 1
lib/Pico-PIO-USB

@@ -1 +1 @@
-Subproject commit ee20881ac8abc515df5e0cfe8851c7c21c47a0ef
+Subproject commit 92268187f3b0490a43d139ed2cb598b06258011f

+ 39 - 2
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;
 }