From 9e145c5d30de0065f8513e7e7f48da345949ea14 Mon Sep 17 00:00:00 2001 From: Tomas Rezucha <tomas.rezucha@espressif.com> Date: Mon, 10 Oct 2022 11:52:48 +0200 Subject: [PATCH] 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 --- components/usb/usbh.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/usb/usbh.c b/components/usb/usbh.c index 6426e16c8f4a..aad2f54defd0 100644 --- a/components/usb/usbh.c +++ b/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; }