Commit Graph
189 Commits
Author SHA1 Message Date
igor.masar 2e8a928ee7 fix(usb_host): Fix return code and description
Changed error code from ESP_ERR_INVALID_STATE to ESP_ERR_NOT_FOUND
when the client never opened the device.
Updated function documentation to correctly reflect return values.
2025-03-31 23:44:27 +02:00
Myk Melez 71d098ed63 fix(usb_host): Give semaphore on attempted close of non-opened device
If you call *usb_host_device_close()* for a device that isn't open, the function exits early,
without giving back the semaphore it took, which causes any other call that tries to take
that semaphore to hang indefinitely.

Strangely, there's redundant handling of this condition, with two checks in a row that both handle
the case where `_check_client_opened_device(client_obj, dev_addr)` returns `false`:

```c
    HOST_CHECK_FROM_CRIT(_check_client_opened_device(client_obj, dev_addr), ESP_ERR_NOT_FOUND);
    if (!_check_client_opened_device(client_obj, dev_addr)) {
        // Client never opened this device
        ret = ESP_ERR_INVALID_STATE;
        HOST_EXIT_CRITICAL();
        goto exit;
    }
…
exit:
    xSemaphoreGive(p_host_lib_obj->constant.mux_lock);
    return ret;
```

The first line is the one that exits early, as HOST_CHECK_FROM_CRIT returns its second parameter
if its first parameter is false, without giving back the semaphore (although it does exit
the critical section).

The subsequent block handles the exact same case, except that it ensures the semaphore is given
back before returning. Currently, this block is never reached.

Perhaps the first check was added, then someone noticed the issue and added the second check,
but they forgot to remove the first one.

In any case, this PR removes the first check, so the second check can properly handle this case
by giving back the semaphore before returning.

This bug appears to have been present in the initial commit of the USB Host library to the ESP-IDF
repo: https://github.com/espressif/esp-idf/commit/accbaee57ceca241ca117a53f486b7f79ed528b9

Of course, if you never try to close a non-opened device, then you won't encounter it!
Unfortunately, I have some code that tried to do that, which is how I found the issue.
2025-03-31 23:44:27 +02:00
Tomas Rezucha 141c4414ee fix(usb/phy): Fixed crash on external PHY init with speed != UNDEFINED
Also deprecated usb_phy_otg_dev_set_speed()
and usb_phy_action() which are no longer used in esp-idf
2025-02-27 15:08:28 +01:00
Roman Leonov 894cecf174 fix(usb_phy): Removed pad pull override config for Full-speed 2025-02-27 15:08:28 +01:00
morris 724f762f57 Merge branch 'fix/periodic_fs_usb_on_p4_backport_v5.4' into 'release/v5.4'
fix(usb/host): Fixed Full Speed periodic transfers on ESP32-P4 (backport v5.4)

See merge request espressif/esp-idf!36647
2025-02-05 14:17:43 +08:00
Roman Leonov 65aa60f844 fix(usb_host): Fixed unchecked return value in enum driver (coverity) 2025-01-29 12:51:39 +01:00
Tomas Rezucha d12312bf76 fix(usb): Fixed missing GPIO drive capability on ESP32-P4
All USB PHYs that share their IOs with GPIOs must set
the GPIO's drive capability to maximum.
2025-01-27 08:07:42 +01:00
Tomas Rezucha f1fa7b1408 refactor(usb/phy): Merge P4 and S2/S3 PHYs into one module
P4 had separate PHY implementation for initial bring-up,
now we can merge it with the original PHY driver.
2025-01-16 10:19:31 +01:00
Tomas Rezucha f93e1bc43b refactor(usb/phy): Start using values from usb_dwc_info in PHY driver
Add tests for PHY sanity checks
2025-01-08 09:26:48 +01:00
Tomas Rezucha b78bcaea36 refactor(usb/phy): Do not use deprecated variables in usb_phy 2025-01-08 09:26:41 +01:00
Tomas Rezucha ac3a3f801d feat(hal/usb): Explicitly enable clock and reset USB WRAP on init 2025-01-08 09:25:42 +01:00
morris e422e12f17 Merge branch 'feat/dynamic_usb_hal_backport_v5.4' into 'release/v5.4'
feat(hal/usb): Make USB-DWC HAL&LL configuration independent backport v5.4

See merge request espressif/esp-idf!34812
2024-11-18 21:40:16 +08:00
Tomas Rezucha 68a95f5c94 feat(hal/usb): Make USB-DWC HAL&LL configuration independent
Previously, we included symbols from soc/usb_dwc_cfg.h and configured
the HAL and LL according to it. Now we get the configuration in runtime
from USB-DWC registers.

Added missing definition for USB FS peripheral on ESP32-P4.
2024-11-15 00:36:10 +08:00
Daniel Mangum 35aaccdbc1 fix(usb_host): return ESP_ERR_NO_MEM on failed alloc in client register
Fixes issue where ESP_ERR_NO_MEM was being silently discarded after
cleaning up after a failed malloc in usb_host_client_register.

Signed-off-by: Daniel Mangum <georgedanielmangum@gmail.com>
2024-11-13 10:08:04 +01:00
Roman Leonov 501e4e6c81 Merge branch 'refactor/usb_host_hcd_dwc_enum_messages' into 'master'
refactor(usb_host):  HCD DWC and Enum additional error messages

See merge request espressif/esp-idf!34236
2024-10-25 16:09:25 +08:00
Roman Leonov c19e2b7f8d refactor(usb_host): Removed error in enum when stalled, added hcd_dwc no more free channels 2024-10-24 16:40:55 +08:00
Tomas Rezucha c1f5d3067f feat(hal/usb): Add USB UTMI PHY HAL
* Add a bare-bones HAL API for the USB UTMI PHY
* Split USB-DWC LL per target
2024-10-24 15:18:30 +08:00
Tomas Rezucha b02ad37a55 feat(soc/usb): Add USB related changes to soc_caps and usb_dwc_periph
This commit changes the following:

- Add types and data structures indicating the available USB controllers
for each target.
2024-10-24 15:18:30 +08:00
Roman Leonov 4677ccee86 fix(ext_port): ESP_LOGW() -> ESP_LOGD() changed back 2024-10-17 19:44:00 +08:00
Roman Leonov 76293e3356 fix(ext_port): Moved reset recovery delay in correct place, removed delay while polling port which in reset state 2024-10-17 19:44:00 +08:00
Roman Leonov 30f199562b fix(ext_port): Added port recovery delay 2024-10-17 19:44:00 +08:00
Roman Leonov f333131063 feat(hub): Added notification when hubs support disabled 2024-10-14 12:37:34 +02:00
Peter Marcisovsky d19666d8e5 refactor(usb_host): Update the USB component to new critical section API 2024-10-08 17:43:55 +02:00
Roman Leonov 3d07895c8f refactor(usb_host_examples): Enabled Hub support by default 2024-10-07 10:13:10 +02:00
Roman Leonov 70f222e5d2 feat(ext_port): Added External Port driver
Closes https://github.com/espressif/esp-idf/issues/12554
2024-09-26 12:38:24 +02:00
Peter Marcisovsky d071bb4c56 feat(usb_host): Create USB Host mock for CMock host tests 2024-09-18 15:04:03 +02:00
Roman Leonov fac1966c9b Merge branch 'refactor/usb_host_ext_hub_cleanup' into 'master'
refactor(hub): Cleaned up dev_tree_node debug output, moved node freeing

See merge request espressif/esp-idf!33380
2024-09-12 16:01:36 +08:00
Wu Zheng Hui 6abe40e590 Merge branch 'feature/optimize_esp32p4_active_power_eco1' into 'master'
feat(system): Optimize esp32p4 active state  power consumption

Closes PM-103 and IDF-7688

See merge request espressif/esp-idf!32950
2024-09-11 23:15:29 +08:00
wuzhenghui 05e74480f5 feat(esp_system): gate some clock by default to optmize esp32p4 active power 2024-09-11 10:53:00 +08:00
Peter Marcisovsky 3362e18432 fix(usb_host): Update log level and error poropagation 2024-09-08 18:43:42 +02:00
Roman Leonov a9d960a81f refactor(hub): Cleaned up dev_tree_node debug output, moved node freeing 2024-09-06 22:44:37 +02:00
Tomas Rezucha 19bf686d5e feat(usb/host): Enable USB Host tests on P4 2024-09-05 19:41:07 +02:00
Tomas Rezucha 3857f779cc fix(usb/host): Correctly handle unpowered port in HUB 2024-09-05 19:40:52 +02:00
Darian Leung cac0ef9d11 refactor(usb): Remove use of usb_phy_action() from unit tests
Currently, USB Host unit tests that require a software triggered disconnection/
reconnection rely on the 'usb_phy_action()' function.

This commit replaces those calls with 'hcd_port_command()' or
'usb_host_lib_set_root_port_power()'.

Note: Also removed 'test_usb_common.h/c' as it is no longer necessary are the
function call replacements.
2024-09-05 12:27:27 +02:00
Darian Leung 54db1cda8b feat(usb): Add usb_host_lib_set_root_port_power()
This commit adds the usb_host_lib_set_root_port_power() function. This provides
a public API for users to power the root port OFF or ON at runtime, thus trigger
a disconnection or allow connections respectively.

In addition, the usb_host_config_t.root_port_unpowered install configuration is
provided to allow users to install the USB Host Library without automatically
powering ON the root port.
2024-09-05 12:27:27 +02:00
Peter Marcisovsky 0c388cf576 Merge branch 'refactor/usb_host_add_func_ret_values_description' into 'master'
Refactor: USB Host add function return values description

Closes IDF-10455

See merge request espressif/esp-idf!32106
2024-09-05 15:20:04 +08:00
Roman Leonov 6ee1c300c2 Merge branch 'refactor/usb_host_ext_port_prereq' into 'master'
refactor(ext_hub): Prerequisites for the Ext Port Driver

See merge request espressif/esp-idf!32213
2024-09-03 19:17:22 +08:00
Peter Marcisovsky f7b31defc9 refactor(usb_host): Fixed function return values in usb_host stack:
- updated doxygen for the whole usb_host stack
    - doxygen for test_apps is not updated
    - fixed error codes propagation problems in the usb_host stack
2024-09-02 16:41:38 +02:00
Tomas Rezucha ba16f50560 refactor(usb/host): Move P4 HS PHY function to correct LL file
Moved usb_wrap_ll_enable_precise_detection() in usb_wrap_ll.h
to usb_utmi_ll_enable_precise_detection() in usb_utmi_ll.h

Fixes commit 97d30e7c48
2024-09-02 14:39:28 +02:00
Tomas Rezucha 21c6c62087 fix(usb/host): Fix USB Low Speed devices connection on P4
P4 USB UTMI PHY was updated to specification v2.0
2024-09-02 14:39:22 +02:00
Roman Leonov a971ddf17a refactor(ext_hub): Added port creation and freeing, cleaned up members 2024-09-02 14:25:21 +02:00
Tomas Rezucha 660319ecaf fix(usb/host): Use new cache aligned DMA alloc functions 2024-08-20 08:13:32 +02:00
Roman Leonov 0a9bd7aa50 fix(enum): Added cancellation stage to process, second reset stage, remove dynamic members 2024-08-12 09:11:02 +02:00
Peter Marcisovsky ddc3c2b78b refactor(usb_host): Update USB Host multiconfig public API
- previous usb_host_get_config_desc_free()
    - updated usb_host_free_config_desc()
2024-07-16 11:32:22 +02:00
Ivan Grokhotkov d146fb5b84 Merge branch 'bugfix/build_with_clang' into 'master'
fix build errors with clang

Closes IDFGH-13238

See merge request espressif/esp-idf!32099
2024-07-15 21:40:40 +08:00
Roman Leonov d108ba14ac Merge branch 'fix/usb_host_hcd_dconn_hs' into 'master'
fix(usb_dwc_hal): Enabled precise VBUS detection

Closes IDF-9953

See merge request espressif/esp-idf!32031
2024-07-13 00:45:56 +08:00
Ivan Grokhotkov df65b3829e fix(usb): variable declaration after label for clang 2024-07-12 13:58:18 +02:00
Roman Leonov 97d30e7c48 fix(usb_dwc_hal): Enabled precise detection of VBUS 2024-07-12 10:51:31 +02:00
Tomas Rezucha 43c06a5d11 fix(usb/host): Fix occasional ISOC scheduler skipping transfers 2024-07-09 16:59:27 +02:00
Roman Leonov eceb27a835 fix(usb_host): Changed addr_map to 4x array of uint32 2024-07-03 11:01:17 +02:00