From c8dd00a347bbea747ad635ad966230e8a92a2e34 Mon Sep 17 00:00:00 2001 From: "C.S.M" Date: Sun, 28 Sep 2025 13:24:03 +0800 Subject: [PATCH] refactor(temperature_sensor): Make temperature sensor adapt to cpp, Closes https://github.com/espressif/esp-idf/issues/17656 --- .../include/driver/temperature_sensor.h | 3 ++ .../temperature_sensor/main/CMakeLists.txt | 6 ++-- ...erature_etm.c => test_temperature_etm.cpp} | 18 ++++++---- ...erature_phy.c => test_temperature_phy.cpp} | 35 +++++++++++-------- ...e_sensor.c => test_temperature_sensor.cpp} | 4 ++- components/hal/esp32p4/include/hal/pmu_ll.h | 4 +-- 6 files changed, 43 insertions(+), 27 deletions(-) rename components/esp_driver_tsens/test_apps/temperature_sensor/main/{test_temperature_etm.c => test_temperature_etm.cpp} (83%) rename components/esp_driver_tsens/test_apps/temperature_sensor/main/{test_temperature_phy.c => test_temperature_phy.cpp} (78%) rename components/esp_driver_tsens/test_apps/temperature_sensor/main/{test_temperature_sensor.c => test_temperature_sensor.cpp} (99%) diff --git a/components/esp_driver_tsens/include/driver/temperature_sensor.h b/components/esp_driver_tsens/include/driver/temperature_sensor.h index fc968dfb0f..f918597f3d 100644 --- a/components/esp_driver_tsens/include/driver/temperature_sensor.h +++ b/components/esp_driver_tsens/include/driver/temperature_sensor.h @@ -46,6 +46,9 @@ typedef struct { .range_min = min, \ .range_max = max, \ .clk_src = TEMPERATURE_SENSOR_CLK_SRC_DEFAULT, \ + .flags = { \ + .allow_pd = 0, \ + }, \ } /** diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt b/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt index 57b6fd425c..4b5f0dadd3 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/main/CMakeLists.txt @@ -1,9 +1,9 @@ set(srcs "test_app_main.c" - "test_temperature_sensor.c" - "test_temperature_phy.c") + "test_temperature_sensor.cpp" + "test_temperature_phy.cpp") if(CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_ETM) - list(APPEND srcs "test_temperature_etm.c") + list(APPEND srcs "test_temperature_etm.cpp") endif() # In order for the cases defined by `TEST_CASE` to be linked into the final elf, diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_etm.c b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_etm.cpp similarity index 83% rename from components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_etm.c rename to components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_etm.cpp index d036d4ef9c..7f7a402c69 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_etm.c +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_etm.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -21,7 +21,7 @@ // from 0 to 1 on logic analyzer or oscilloscope. TEST_CASE("temperature sensor alarm cause gpio pull up", "[etm]") { - const uint32_t output_gpio = 5; + const gpio_num_t output_gpio = GPIO_NUM_5; // temperature sensor alarm ---> ETM channel A ---> GPIO level to high printf("allocate etm channel\r\n"); esp_etm_channel_config_t etm_config = {}; @@ -30,9 +30,8 @@ TEST_CASE("temperature sensor alarm cause gpio pull up", "[etm]") printf("allocate GPIO etm task\r\n"); esp_etm_task_handle_t gpio_task = NULL; - gpio_etm_task_config_t gpio_task_config = { - .action = GPIO_ETM_TASK_ACTION_SET, - }; + gpio_etm_task_config_t gpio_task_config = {}; + gpio_task_config.actions[0] = GPIO_ETM_TASK_ACTION_SET; TEST_ESP_OK(gpio_new_etm_task(&gpio_task_config, &gpio_task)); // set gpio number for the gpio etm primitives TEST_ESP_OK(gpio_etm_task_add_gpio(gpio_task, output_gpio)); @@ -40,9 +39,14 @@ TEST_CASE("temperature sensor alarm cause gpio pull up", "[etm]") printf("initialize gpio\r\n"); gpio_set_level(output_gpio, 0); gpio_config_t task_gpio_config = { - .intr_type = GPIO_INTR_DISABLE, - .mode = GPIO_MODE_OUTPUT, .pin_bit_mask = 1ULL << output_gpio, + .mode = GPIO_MODE_OUTPUT, + .pull_up_en = GPIO_PULLUP_DISABLE, + .pull_down_en = GPIO_PULLDOWN_DISABLE, + .intr_type = GPIO_INTR_DISABLE, +#if SOC_GPIO_SUPPORT_PIN_HYS_FILTER + .hys_ctrl_mode = GPIO_HYS_SOFT_DISABLE, +#endif }; TEST_ESP_OK(gpio_config(&task_gpio_config)); diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_phy.c b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_phy.cpp similarity index 78% rename from components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_phy.c rename to components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_phy.cpp index 35ab401e2b..a130ac0605 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_phy.c +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_phy.cpp @@ -41,16 +41,20 @@ struct temperature_sensor_obj_t { static void start_wifi_as_softap(void) { uint8_t ssid_len = strlen(TEST_DEFAULT_SSID); - wifi_config_t w_config = { - .ap.ssid = TEST_DEFAULT_SSID, - .ap.password = TEST_DEFAULT_PWD, - .ap.ssid_len = ssid_len, - .ap.channel = TEST_DEFAULT_CHANNEL, - .ap.authmode = WIFI_AUTH_WPA2_PSK, - .ap.ssid_hidden = false, - .ap.max_connection = 4, - .ap.beacon_interval = 100, - }; + wifi_config_t w_config = {}; // Zero-initialize the structure + + // Assign members + strncpy((char *)w_config.ap.ssid, TEST_DEFAULT_SSID, sizeof(w_config.ap.ssid) - 1); + w_config.ap.ssid[sizeof(w_config.ap.ssid) - 1] = 0; // Ensure null termination + strncpy((char *)w_config.ap.password, TEST_DEFAULT_PWD, sizeof(w_config.ap.password) - 1); + w_config.ap.password[sizeof(w_config.ap.password) - 1] = 0; // Ensure null termination + + w_config.ap.ssid_len = ssid_len; + w_config.ap.channel = TEST_DEFAULT_CHANNEL; + w_config.ap.authmode = WIFI_AUTH_WPA2_PSK; + w_config.ap.ssid_hidden = false; + w_config.ap.max_connection = 4; + w_config.ap.beacon_interval = 100; TEST_ESP_OK(esp_wifi_set_mode(WIFI_MODE_AP)); TEST_ESP_OK(esp_wifi_set_config(WIFI_IF_AP, &w_config)); @@ -72,10 +76,13 @@ static void stop_wifi(void) static void wifi_connect(void) { - wifi_config_t w_config = { - .sta.ssid = TEST_DEFAULT_SSID, - .sta.password = TEST_DEFAULT_PWD, - }; + wifi_config_t w_config = {}; // Zero-initialize the structure + + // Assign members + strncpy((char *)w_config.sta.ssid, TEST_DEFAULT_SSID, sizeof(w_config.sta.ssid) - 1); + w_config.sta.ssid[sizeof(w_config.sta.ssid) - 1] = 0; // Ensure null termination + strncpy((char *)w_config.sta.password, TEST_DEFAULT_PWD, sizeof(w_config.sta.password) - 1); + w_config.sta.password[sizeof(w_config.sta.password) - 1] = 0; // Ensure null termination TEST_ESP_OK(esp_wifi_set_config(WIFI_IF_STA, &w_config)); TEST_ESP_OK(esp_wifi_connect()); diff --git a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.cpp similarity index 99% rename from components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c rename to components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.cpp index a1cd887236..b4b32864a8 100644 --- a/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.c +++ b/components/esp_driver_tsens/test_apps/temperature_sensor/main/test_temperature_sensor.cpp @@ -162,7 +162,9 @@ static void test_temperature_sensor_sleep_retention(bool allow_pd) .range_min = 10, .range_max = 50, .clk_src = TEMPERATURE_SENSOR_CLK_SRC_DEFAULT, - .flags.allow_pd = allow_pd, + .flags = { + .allow_pd = allow_pd, + }, }; temperature_sensor_handle_t temp_handle = NULL; TEST_ESP_OK(temperature_sensor_install(&temp_sensor, &temp_handle)); diff --git a/components/hal/esp32p4/include/hal/pmu_ll.h b/components/hal/esp32p4/include/hal/pmu_ll.h index 599dcbb79a..eefa07ea57 100644 --- a/components/hal/esp32p4/include/hal/pmu_ll.h +++ b/components/hal/esp32p4/include/hal/pmu_ll.h @@ -638,9 +638,9 @@ FORCE_INLINE_ATTR uint32_t pmu_ll_hp_get_analog_wait_target_cycle(pmu_dev_t *hw) return HAL_FORCE_READ_U32_REG_FIELD(hw->wakeup.cntl7, ana_wait_target); } -FORCE_INLINE_ATTR uint32_t pmu_ll_hp_set_lite_wakeup_enable(pmu_dev_t *hw, bool wakeup_en) +FORCE_INLINE_ATTR void pmu_ll_hp_set_lite_wakeup_enable(pmu_dev_t *hw, bool wakeup_en) { - return hw->wakeup.cntl8.lp_lite_wakeup_ena = wakeup_en; + hw->wakeup.cntl8.lp_lite_wakeup_ena = wakeup_en; } FORCE_INLINE_ATTR void pmu_ll_hp_set_digital_power_supply_wait_cycle(pmu_dev_t *hw, uint32_t cycle)