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

usb_host: Fixed incorrect opening devices from multiple clients

1. During USBH device open both queues (idle and pending) must be checked.
2. Don't overwrite already allocated endpoints
Tomas Rezucha 3 лет назад
Родитель
Сommit
27078ac34c
1 измененных файлов с 2 добавлено и 2 удалено
  1. 2 2
      components/usb/usbh.c

+ 2 - 2
components/usb/usbh.c

@@ -536,7 +536,7 @@ esp_err_t usbh_dev_open(uint8_t dev_addr, usb_device_handle_t *dev_hdl)
             goto exit;
         }
     }
-    TAILQ_FOREACH(dev_obj, &p_usbh_obj->dynamic.devs_idle_tailq, dynamic.tailq_entry) {
+    TAILQ_FOREACH(dev_obj, &p_usbh_obj->dynamic.devs_pending_tailq, dynamic.tailq_entry) {
         if (dev_obj->constant.address == dev_addr) {
             found_dev_obj = dev_obj;
             goto exit;
@@ -783,7 +783,7 @@ esp_err_t usbh_ep_alloc(usb_device_handle_t dev_hdl, usbh_ep_config_t *ep_config
     if (is_in && dev_obj->mux_protected.ep_in[addr - 1] == NULL) {  //Is an IN EP
         dev_obj->mux_protected.ep_in[addr - 1] = pipe_hdl;
         assigned = true;
-    } else if (dev_obj->mux_protected.ep_out[addr - 1] == NULL) {   //Is an OUT EP
+    } else if (!is_in && dev_obj->mux_protected.ep_out[addr - 1] == NULL) {   //Is an OUT EP
         dev_obj->mux_protected.ep_out[addr - 1] = pipe_hdl;
         assigned = true;
     }