Parcourir la source

add need_pre for pio usb, but not work out well

hathach il y a 3 ans
Parent
commit
d97c154695
3 fichiers modifiés avec 8 ajouts et 4 suppressions
  1. 1 1
      lib/Pico-PIO-USB
  2. 2 2
      src/host/usbh.c
  3. 5 1
      src/portable/raspberrypi/pio_usb/hcd_pio_usb.c

+ 1 - 1
lib/Pico-PIO-USB

@@ -1 +1 @@
-Subproject commit 650ef75f0d8a4020a7ddc2ccee1ee0f3237ab760
+Subproject commit 4993f4a1df03c8af13c8091052a6274e8c333bc0

+ 2 - 2
src/host/usbh.c

@@ -642,7 +642,7 @@ static bool usbh_control_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result
         __attribute__((fallthrough));
 
       case CONTROL_STAGE_DATA:
-        if (xferred_bytes)
+        if (request->wLength)
         {
           TU_LOG2("[%u:%u] Control data:\r\n", rhport, dev_addr);
           TU_LOG2_MEM(_ctrl_xfer.buffer, xferred_bytes, 2);
@@ -1301,7 +1301,7 @@ static void process_enumeration(tuh_xfer_t* xfer)
       TU_ASSERT(new_dev, );
       new_dev->addressed = 1;
 
-      // TODO close device 0, may not be needed
+      // Close device 0
       hcd_device_close(_dev0.rhport, 0);
 
       // open control pipe for new address

+ 5 - 1
src/portable/raspberrypi/pio_usb/hcd_pio_usb.c

@@ -111,8 +111,12 @@ void hcd_int_disable(uint8_t rhport)
 
 bool hcd_edpt_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_endpoint_t const * desc_ep)
 {
+  hcd_devtree_info_t dev_tree;
+  hcd_devtree_get_info(dev_addr, &dev_tree);
+  bool const need_pre = (dev_tree.hub_addr && dev_tree.speed == TUSB_SPEED_LOW);
+
   rhport = RHPORT_PIO(rhport);
-  return pio_usb_endpoint_open(rhport, dev_addr, (uint8_t const*) desc_ep);
+  return pio_usb_endpoint_open(rhport, dev_addr, (uint8_t const*) desc_ep, need_pre);
 }
 
 bool hcd_edpt_xfer(uint8_t rhport, uint8_t dev_addr, uint8_t ep_addr, uint8_t * buffer, uint16_t buflen)