From d23473e8cbf29d866ca74da0b8ea8ff7f79b118b Mon Sep 17 00:00:00 2001 From: Li Junru Date: Fri, 18 Oct 2024 14:43:52 +0800 Subject: [PATCH 1/2] fix(usb_bridge): fix build on idf master feat(build_apps): update build apps python --- .gitlab/ci/build.yml | 7 ++- .../usb_wireless_bridge/main/CMakeLists.txt | 2 +- .../main/idf_component.yml | 4 +- .../usb_wireless_bridge/main/src/app_tusb.c | 43 +++++-------------- tools/build_apps.py | 23 +++++++++- 5 files changed, 42 insertions(+), 37 deletions(-) diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml index f795391a..72d63774 100644 --- a/.gitlab/ci/build.yml +++ b/.gitlab/ci/build.yml @@ -124,8 +124,13 @@ build_esp32_s3_usb_bridge: extends: - .build_examples_template - .rules:build:esp32_s3_usb_bridge + parallel: + matrix: + - IMAGE: espressif/idf:release-v5.0 + - IMAGE: espressif/idf:release-v5.1 + - IMAGE: espressif/idf:release-v5.2 + - IMAGE: espressif/idf:release-v5.3 variables: - IMAGE: espressif/idf:release-v5.0 EXAMPLE_DIR: esp32-s3-usb-bridge/examples/usb_wireless_bridge build_esp32_s3_usb_otg: diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/CMakeLists.txt b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/CMakeLists.txt index df1a8413..0b13e9b9 100644 --- a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/CMakeLists.txt +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/CMakeLists.txt @@ -1,6 +1,6 @@ idf_component_register(SRC_DIRS "." "espnow" "src" INCLUDE_DIRS "." "espnow" "include" "public_include" - REQUIRES "tinyusb" "driver" "esp_timer" "ws2812_led" + REQUIRES "tinyusb" "driver" "esp_timer" "ws2812_led" "usb" LDFRAGMENTS "noflash.lf") idf_component_get_property(tusb_lib espressif__tinyusb COMPONENT_LIB) diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/idf_component.yml b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/idf_component.yml index cf077642..bd4b1c86 100644 --- a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/idf_component.yml +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/idf_component.yml @@ -3,7 +3,7 @@ dependencies: espressif/esp-serial-flasher: "~0.0.7" espressif/button: "~3.1.3" espressif/led_indicator: "~0.4.0" - espressif/esp-now: "~2.3.0" - espressif/tinyusb: "^0.14.1" + espressif/esp-now: "~2.5.0" + espressif/tinyusb: "^0.15.0" idf: version: ">=5.0" diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/src/app_tusb.c b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/src/app_tusb.c index 000d7e87..cb4c82bd 100644 --- a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/src/app_tusb.c +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/src/app_tusb.c @@ -1,4 +1,4 @@ -/* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD +/* SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -7,7 +7,7 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "tusb.h" -#include "hal/usb_hal.h" +#include "esp_private/usb_phy.h" #include "soc/usb_periph.h" #include "tusb.h" #include "esp_log.h" @@ -37,7 +37,7 @@ enum { ITF_NUM_TOTAL }; -static const char* TAG = "app_tusb"; +static const char *TAG = "app_tusb"; static const tusb_desc_device_t descriptor_config = { .bLength = sizeof(descriptor_config), @@ -166,30 +166,6 @@ uint16_t const *tud_descriptor_string_cb(const uint8_t index, const uint16_t lan return _desc_str; } -static void configure_pins(usb_hal_context_t *usb) -{ - /* usb_periph_iopins currently configures USB_OTG as USB Device. - * Introduce additional parameters in usb_hal_context_t when adding support - * for USB Host. - */ - for (const usb_iopin_dsc_t *iopin = usb_periph_iopins; iopin->pin != -1; ++iopin) { - if ((usb->use_external_phy) || (iopin->ext_phy_only == 0)) { - gpio_pad_select_gpio(iopin->pin); - if (iopin->is_output) { - gpio_matrix_out(iopin->pin, iopin->func, false, false); - } else { - gpio_matrix_in(iopin->pin, iopin->func, false); - gpio_pad_input_enable(iopin->pin); - } - gpio_pad_unhold(iopin->pin); - } - } - if (!usb->use_external_phy) { - gpio_set_drive_capability(USBPHY_DM_NUM, GPIO_DRIVE_CAP_3); - gpio_set_drive_capability(USBPHY_DP_NUM, GPIO_DRIVE_CAP_3); - } -} - static void tusb_device_task(void *pvParameters) { while (1) { @@ -204,12 +180,15 @@ void app_tusb_init(void) periph_module_reset(PERIPH_USB_MODULE); periph_module_enable(PERIPH_USB_MODULE); - usb_hal_context_t hal = { - .use_external_phy = false + // Configure USB PHY + usb_phy_handle_t phy_hdl; + usb_phy_config_t phy_conf = { + .controller = USB_PHY_CTRL_OTG, + .otg_mode = USB_OTG_MODE_DEVICE, + .target = USB_PHY_TARGET_INT, }; - usb_hal_init(&hal); - configure_pins(&hal); + usb_new_phy(&phy_conf, &phy_hdl); tusb_init(); xTaskCreate(tusb_device_task, "tusb_device_task", 4 * 1024, NULL, 5, NULL); -} \ No newline at end of file +} diff --git a/tools/build_apps.py b/tools/build_apps.py index 911c9fa7..9e5b2b8d 100644 --- a/tools/build_apps.py +++ b/tools/build_apps.py @@ -58,7 +58,6 @@ def get_cmake_apps( build_log_filename='build_log.txt', size_json_filename='size.json', check_warnings=True, - preserve=True, default_build_targets=default_build_targets, manifest_files=[ str(Path(PROJECT_ROOT)/'.build-rules.yml'), @@ -70,6 +69,18 @@ def get_cmake_apps( def main(args): # type: (argparse.Namespace) -> None default_build_targets = args.default_build_targets.split(',') if args.default_build_targets else None apps = get_cmake_apps(args.paths, args.target, args.config, default_build_targets) + if args.find: + if args.output: + os.makedirs(os.path.dirname(os.path.realpath(args.output)), exist_ok=True) + with open(args.output, 'w') as fw: + for app in apps: + fw.write(app.to_json() + '\n') + else: + for app in apps: + print(app) + + sys.exit(0) + if args.exclude_apps: apps_to_build = [app for app in apps if app.name not in args.exclude_apps] else: @@ -90,6 +101,7 @@ def main(args): # type: (argparse.Namespace) -> None keep_going=True, ignore_warning_strs=IGNORE_WARNINGS, copy_sdkconfig=True, + no_preserve=False, ) sys.exit(ret_code) @@ -146,6 +158,15 @@ def main(args): # type: (argparse.Namespace) -> None action='count', default=0, help='Show verbose log message', ) + parser.add_argument( + '--find', + action='store_true', + help='Find the buildable applications. If enable this option, build options will be ignored.', + ) + parser.add_argument( + '-o', '--output', + help='Print the found apps to the specified file instead of stdout' + ) arguments = parser.parse_args() if not arguments.paths: From f7de6f37905411af49c73fc8e2088de43e2cd37b Mon Sep 17 00:00:00 2001 From: Li Junru Date: Fri, 18 Oct 2024 14:52:02 +0800 Subject: [PATCH 2/2] feat(build_apps): update build apps python --- .../usb_wireless_bridge/main/espnow/ctrl.c | 22 +++++++++---------- .../usb_wireless_bridge/sdkconfig.defaults | 5 ----- .../sdkconfig.defaults.esp32s3 | 4 ++++ .../sdkconfig.esp32-s3-usb-bridge | 2 +- tools/build_apps.py | 4 ++-- 5 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults.esp32s3 diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/espnow/ctrl.c b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/espnow/ctrl.c index 4391d52d..b775c6fe 100644 --- a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/espnow/ctrl.c +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/main/espnow/ctrl.c @@ -15,17 +15,17 @@ #include "espnow_storage.h" #include "espnow_ctrl.h" -#define ESPNOW_BIND_LIST_MAX_SIZE 1 +#define BIND_LIST_MAX_SIZE 1 typedef struct { int8_t rssi; uint32_t timestamp; size_t size; - espnow_ctrl_bind_info_t data[ESPNOW_BIND_LIST_MAX_SIZE]; + espnow_ctrl_bind_info_t data[BIND_LIST_MAX_SIZE]; } espnow_bindlist_t; static espnow_bindlist_t g_bindlist = {0}; -static const char* TAG = "espnow_ctrl"; +static const char *TAG = "espnow_ctrl"; static bool _ctrl_responder_is_bindlist(const uint8_t *mac, espnow_attribute_t initiator_attribute) { @@ -53,7 +53,7 @@ esp_err_t ctrl_responder_get_bindlist(espnow_ctrl_bind_info_t *list, size_t *siz esp_err_t ctrl_responder_set_bindlist(const espnow_ctrl_bind_info_t *info) { - if (g_bindlist.size >= ESPNOW_BIND_LIST_MAX_SIZE) { + if (g_bindlist.size >= BIND_LIST_MAX_SIZE) { return ESP_FAIL; } @@ -88,7 +88,7 @@ esp_err_t ctrl_responder_remove_bindlist(const espnow_ctrl_bind_info_t *info) } static esp_err_t _ctrl_responder_bind_process(uint8_t *src_addr, void *data, - size_t size, wifi_pkt_rx_ctrl_t *rx_ctrl) + size_t size, wifi_pkt_rx_ctrl_t *rx_ctrl) { ESP_PARAM_CHECK(src_addr); ESP_PARAM_CHECK(data); @@ -98,18 +98,18 @@ static esp_err_t _ctrl_responder_bind_process(uint8_t *src_addr, void *data, espnow_ctrl_data_t *ctrl_data = (espnow_ctrl_data_t *)data; if (ctrl_data->responder_value_b) { ESP_LOGD(TAG, "bind, esp_log_timestamp: %"PRIu32", timestamp: %"PRIu32", rssi: %d, rssi: %d", - esp_log_timestamp(), g_bindlist.timestamp, rx_ctrl->rssi, g_bindlist.rssi); + esp_log_timestamp(), g_bindlist.timestamp, rx_ctrl->rssi, g_bindlist.rssi); if (esp_log_timestamp() < g_bindlist.timestamp && rx_ctrl->rssi > g_bindlist.rssi) { ESP_LOGD("control_func", "addr: "MACSTR", initiator_type: %d, initiator_value: %d", - MAC2STR(src_addr), ctrl_data->initiator_attribute >> 8, ctrl_data->initiator_attribute & 0xff); + MAC2STR(src_addr), ctrl_data->initiator_attribute >> 8, ctrl_data->initiator_attribute & 0xff); - if (!_ctrl_responder_is_bindlist(src_addr, ctrl_data->initiator_attribute) && g_bindlist.size < ESPNOW_BIND_LIST_MAX_SIZE) { + if (!_ctrl_responder_is_bindlist(src_addr, ctrl_data->initiator_attribute) && g_bindlist.size < BIND_LIST_MAX_SIZE) { g_bindlist.data[g_bindlist.size].initiator_attribute = ctrl_data->initiator_attribute; memcpy(g_bindlist.data[g_bindlist.size].mac, src_addr, 6); esp_event_post(ESP_EVENT_ESPNOW, ESP_EVENT_ESPNOW_CTRL_BIND, - g_bindlist.data + g_bindlist.size, sizeof(espnow_ctrl_bind_info_t), 0); + g_bindlist.data + g_bindlist.size, sizeof(espnow_ctrl_bind_info_t), 0); g_bindlist.size++; espnow_storage_set("bindlist", &g_bindlist, sizeof(g_bindlist)); @@ -117,7 +117,7 @@ static esp_err_t _ctrl_responder_bind_process(uint8_t *src_addr, void *data, } } else { if (_ctrl_responder_is_bindlist(src_addr, ctrl_data->initiator_attribute)) { - ESP_LOGD(TAG,"unbind, addr: "MACSTR", esp_log_timestamp: %"PRIu32", timestamp: %"PRIu32", rssi: %d, rssi: %d", MAC2STR(src_addr), + ESP_LOGD(TAG, "unbind, addr: "MACSTR", esp_log_timestamp: %"PRIu32", timestamp: %"PRIu32", rssi: %d, rssi: %d", MAC2STR(src_addr), esp_log_timestamp(), g_bindlist.timestamp, rx_ctrl->rssi, g_bindlist.rssi); for (int i = 0; i < g_bindlist.size; ++i) { @@ -159,4 +159,4 @@ esp_err_t ctrl_responder_bind_window_set(uint32_t wait_ms, int8_t rssi) g_bindlist.timestamp = esp_log_timestamp() + wait_ms; g_bindlist.rssi = rssi; return ESP_OK; -} \ No newline at end of file +} diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults index 56fc3218..be9f01fe 100644 --- a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults @@ -1,9 +1,4 @@ -CONFIG_IDF_TARGET="esp32s3" CONFIG_FREERTOS_HZ=1000 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n -CONFIG_ESP32S2_INSTRUCTION_CACHE_16KB=y -CONFIG_ESP32S2_DATA_CACHE_16KB=y -CONFIG_ESP32S2_DEFAULT_CPU_FREQ_240=y -CONFIG_ESP32S2_DEFAULT_CPU_FREQ_MHZ=240 CONFIG_WS2812_LED_GPIO=48 diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults.esp32s3 b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults.esp32s3 new file mode 100644 index 00000000..27b5e00a --- /dev/null +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.defaults.esp32s3 @@ -0,0 +1,4 @@ +CONFIG_IDF_TARGET="esp32s3" +CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB=y +CONFIG_ESP32S3_DATA_CACHE_32KB=y +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y diff --git a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.esp32-s3-usb-bridge b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.esp32-s3-usb-bridge index e9ddeb09..a53e50f0 100644 --- a/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.esp32-s3-usb-bridge +++ b/esp32-s3-usb-bridge/examples/usb_wireless_bridge/sdkconfig.esp32-s3-usb-bridge @@ -1 +1 @@ -CONFIG_WS2812_LED_GPIO=42 \ No newline at end of file +CONFIG_WS2812_LED_GPIO=42 diff --git a/tools/build_apps.py b/tools/build_apps.py index 9e5b2b8d..e0ba869d 100644 --- a/tools/build_apps.py +++ b/tools/build_apps.py @@ -73,8 +73,8 @@ def main(args): # type: (argparse.Namespace) -> None if args.output: os.makedirs(os.path.dirname(os.path.realpath(args.output)), exist_ok=True) with open(args.output, 'w') as fw: - for app in apps: - fw.write(app.to_json() + '\n') + for app in apps: + fw.write(app.to_json() + '\n') else: for app in apps: print(app)