Skip to content

Commit 206bd9a

Browse files
refactor(usb_host): Change critical section API
1 parent 18094fa commit 206bd9a

File tree

8 files changed

+34
-25
lines changed

8 files changed

+34
-25
lines changed

device/esp_tinyusb/tinyusb_cdc_acm.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "esp_log.h"
1111
#include "freertos/FreeRTOS.h"
1212
#include "freertos/task.h"
13+
#include "esp_private/critical_section.h"
1314
#include "tusb.h"
1415
#include "tinyusb_cdc_acm.h"
1516
#include "cdc.h"
@@ -24,9 +25,9 @@
2425
#endif
2526

2627
// CDC-ACM spinlock
27-
static portMUX_TYPE cdc_acm_lock = portMUX_INITIALIZER_UNLOCKED;
28-
#define CDC_ACM_ENTER_CRITICAL() portENTER_CRITICAL(&cdc_acm_lock)
29-
#define CDC_ACM_EXIT_CRITICAL() portEXIT_CRITICAL(&cdc_acm_lock)
28+
DEFINE_CRIT_SECTION_LOCK_STATIC(cdc_acm_lock);
29+
#define CDC_ACM_ENTER_CRITICAL() esp_os_enter_critical(&cdc_acm_lock)
30+
#define CDC_ACM_EXIT_CRITICAL() esp_os_exit_critical(&cdc_acm_lock)
3031

3132
typedef struct {
3233
tusb_cdcacm_callback_t callback_rx;

device/esp_tinyusb/tinyusb_task.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "freertos/FreeRTOS.h"
88
#include "freertos/task.h"
99
#include "freertos/semphr.h"
10+
#include "esp_private/critical_section.h"
1011
#include "soc/soc_caps.h"
1112
#include "esp_log.h"
1213
#include "esp_check.h"
@@ -16,9 +17,9 @@
1617

1718
const static char *TAG = "tinyusb_task";
1819

19-
static portMUX_TYPE tusb_task_lock = portMUX_INITIALIZER_UNLOCKED;
20-
#define TINYUSB_TASK_ENTER_CRITICAL() portENTER_CRITICAL(&tusb_task_lock)
21-
#define TINYUSB_TASK_EXIT_CRITICAL() portEXIT_CRITICAL(&tusb_task_lock)
20+
DEFINE_CRIT_SECTION_LOCK_STATIC(tusb_task_lock);
21+
#define TINYUSB_TASK_ENTER_CRITICAL() esp_os_enter_critical(&tusb_task_lock)
22+
#define TINYUSB_TASK_EXIT_CRITICAL() esp_os_exit_critical(&tusb_task_lock)
2223

2324
#define TINYUSB_TASK_CHECK(cond, ret_val) ({ \
2425
if (!(cond)) { \

host/class/cdc/usb_host_cdc_acm/cdc_acm_host.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "freertos/task.h"
1313
#include "freertos/semphr.h"
1414
#include "freertos/event_groups.h"
15+
#include "esp_private/critical_section.h"
1516
#include "soc/soc_caps.h"
1617
#include "esp_log.h"
1718
#include "esp_check.h"
@@ -30,9 +31,9 @@ static const char *TAG = "cdc_acm";
3031
#define CDC_ACM_CTRL_TIMEOUT_MS (5000) // Every CDC device should be able to respond to CTRL transfer in 5 seconds
3132

3233
// CDC-ACM spinlock
33-
static portMUX_TYPE cdc_acm_lock = portMUX_INITIALIZER_UNLOCKED;
34-
#define CDC_ACM_ENTER_CRITICAL() portENTER_CRITICAL(&cdc_acm_lock)
35-
#define CDC_ACM_EXIT_CRITICAL() portEXIT_CRITICAL(&cdc_acm_lock)
34+
DEFINE_CRIT_SECTION_LOCK_STATIC(cdc_acm_lock);
35+
#define CDC_ACM_ENTER_CRITICAL() esp_os_enter_critical(&cdc_acm_lock)
36+
#define CDC_ACM_EXIT_CRITICAL() esp_os_exit_critical(&cdc_acm_lock)
3637

3738
// CDC-ACM events
3839
#define CDC_ACM_TEARDOWN BIT0

host/class/hid/usb_host_hid/hid_host.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
#include "freertos/FreeRTOS.h"
1616
#include "freertos/task.h"
1717
#include "freertos/semphr.h"
18+
#include "esp_private/critical_section.h"
1819
#include "usb/usb_host.h"
1920

2021
#include "usb/hid_host.h"
2122

2223
// HID spinlock
23-
static portMUX_TYPE hid_lock = portMUX_INITIALIZER_UNLOCKED;
24-
#define HID_ENTER_CRITICAL() portENTER_CRITICAL(&hid_lock)
25-
#define HID_EXIT_CRITICAL() portEXIT_CRITICAL(&hid_lock)
24+
DEFINE_CRIT_SECTION_LOCK_STATIC(hid_lock);
25+
#define HID_ENTER_CRITICAL() esp_os_enter_critical(&hid_lock)
26+
#define HID_EXIT_CRITICAL() esp_os_exit_critical(&hid_lock)
2627

2728
// HID verification macros
2829
#define HID_GOTO_ON_FALSE_CRITICAL(exp, err) \

host/class/msc/usb_host_msc/src/msc_host.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -16,6 +16,7 @@
1616
#include "freertos/FreeRTOS.h"
1717
#include "freertos/task.h"
1818
#include "freertos/semphr.h"
19+
#include "esp_private/critical_section.h"
1920
#include "usb/usb_host.h"
2021
#include "diskio_usb.h"
2122
#include "msc_common.h"
@@ -26,9 +27,9 @@
2627
#include "soc/soc_memory_layout.h"
2728

2829
// MSC driver spin lock
29-
static portMUX_TYPE msc_lock = portMUX_INITIALIZER_UNLOCKED;
30-
#define MSC_ENTER_CRITICAL() portENTER_CRITICAL(&msc_lock)
31-
#define MSC_EXIT_CRITICAL() portEXIT_CRITICAL(&msc_lock)
30+
DEFINE_CRIT_SECTION_LOCK_STATIC(msc_lock);
31+
#define MSC_ENTER_CRITICAL() esp_os_enter_critical(&msc_lock)
32+
#define MSC_EXIT_CRITICAL() esp_os_exit_critical(&msc_lock)
3233

3334
#define MSC_GOTO_ON_FALSE_CRITICAL(exp, err) \
3435
do { \

host/class/uac/usb_host_uac/uac_host.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@
2020
#include "freertos/task.h"
2121
#include "freertos/semphr.h"
2222
#include "freertos/ringbuf.h"
23+
#include "esp_private/critical_section.h"
2324
#include "usb/usb_host.h"
2425
#include "usb/uac_host.h"
2526
#include "usb/usb_types_ch9.h"
2627

2728
// UAC spinlock
28-
static portMUX_TYPE uac_lock = portMUX_INITIALIZER_UNLOCKED;
29-
#define UAC_ENTER_CRITICAL() portENTER_CRITICAL(&uac_lock)
30-
#define UAC_EXIT_CRITICAL() portEXIT_CRITICAL(&uac_lock)
29+
DEFINE_CRIT_SECTION_LOCK_STATIC(uac_lock);
30+
#define UAC_ENTER_CRITICAL() esp_os_enter_critical(&uac_lock)
31+
#define UAC_EXIT_CRITICAL() esp_os_exit_critical(&uac_lock)
3132

3233
// UAC verification macros
3334
#define UAC_GOTO_ON_FALSE_CRITICAL(exp, err) \

host/class/uvc/usb_host_uvc/private_include/uvc_critical_priv.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
2+
* SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -9,11 +9,13 @@
99
#include <stdatomic.h>
1010

1111
#include "freertos/FreeRTOS.h"
12-
#include "freertos/portmacro.h"
12+
#include "esp_private/critical_section.h"
1313

14-
extern portMUX_TYPE uvc_lock;
15-
#define UVC_ENTER_CRITICAL() portENTER_CRITICAL(&uvc_lock)
16-
#define UVC_EXIT_CRITICAL() portEXIT_CRITICAL(&uvc_lock)
14+
// TODO: Nice to have dedicated critical section macro for declaring extern lock, eg: DECLARE_EXT_CRIT_SECTION_LOCK
15+
extern DECLARE_CRIT_SECTION_LOCK_IN_STRUCT(uvc_lock);
16+
17+
#define UVC_ENTER_CRITICAL() esp_os_enter_critical(&uvc_lock)
18+
#define UVC_EXIT_CRITICAL() esp_os_exit_critical(&uvc_lock)
1719

1820
#define UVC_ATOMIC_LOAD(x) __atomic_load_n(&x, __ATOMIC_SEQ_CST)
1921
#define UVC_ATOMIC_SET_IF_NULL(x, new_x) ({ \

host/class/uvc/usb_host_uvc/uvc_host.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,12 @@
3131
#include "freertos/semphr.h"
3232
#include "freertos/queue.h"
3333
#include "freertos/event_groups.h"
34+
#include "esp_private/critical_section.h"
3435

3536
static const char *TAG = "uvc";
3637

3738
// UVC spinlock
38-
portMUX_TYPE uvc_lock = portMUX_INITIALIZER_UNLOCKED;
39+
DEFINE_CRIT_SECTION_LOCK(uvc_lock);
3940

4041
// UVC driver status
4142
#define UVC_STARTED BIT0 // UVC driver events handling started

0 commit comments

Comments
 (0)