diff --git a/.gitignore b/.gitignore index c24dd0d..fde40b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /.idea sdkconfig.old -/managed_components \ No newline at end of file +/managed_components +sdkconfig +dependencies.lock diff --git a/dependencies.lock b/dependencies.lock deleted file mode 100644 index 3533f2e..0000000 --- a/dependencies.lock +++ /dev/null @@ -1,59 +0,0 @@ -dependencies: - espressif/cmake_utilities: - component_hash: 05165f30922b422b4b90c08845e6d449329b97370fbd06309803d8cb539d79e3 - dependencies: - - name: idf - require: private - version: '>=4.1' - source: - registry_url: https://components.espressif.com - type: service - version: 1.1.1 - espressif/led_indicator: - component_hash: 5b2531835a989825c0dc94465e3481086473e086dca109b99bea5605d8e70396 - dependencies: - - name: espressif/cmake_utilities - registry_url: https://components.espressif.com - require: private - version: '*' - - name: idf - require: private - version: '>=4.0' - - name: espressif/led_strip - registry_url: https://components.espressif.com - require: public - version: 2.5.5 - source: - registry_url: https://components.espressif.com/ - type: service - version: 1.1.1 - espressif/led_strip: - component_hash: 28c6509a727ef74925b372ed404772aeedf11cce10b78c3f69b3c66799095e2d - dependencies: - - name: idf - require: private - version: '>=4.4' - source: - registry_url: https://components.espressif.com - type: service - version: 2.5.5 - idf: - source: - type: idf - version: 5.4.0 - joltwallet/littlefs: - component_hash: 8e12955f47e27e6070b76715a96d6c75fc2b44f069e8c33679332d9bdd3120c4 - dependencies: - - name: idf - require: private - version: '>=5.0' - source: - registry_url: https://components.espressif.com/ - type: service - version: 1.20.1 -direct_dependencies: -- espressif/led_indicator -- joltwallet/littlefs -manifest_hash: 445ef18c991ae952f2f16ffe06a905b6d1414a42286212d7b2459fa32945a09c -target: esp32c3 -version: 2.0.0 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index eae474b..a1ebc1a 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -4,13 +4,13 @@ set(GZ_OUTPUT_FILE ${WEB_APP_SOURCE_DIR}/dist/index.html.gz) # Check npm is available find_program(NPM_EXECUTABLE npm) -if(NOT NPM_EXECUTABLE) +if (NOT NPM_EXECUTABLE) message(FATAL_ERROR "npm not found! Please install Node.js and npm.") -endif() +endif () # Register the component. Now, CMake knows how GZ_OUTPUT_FILE is generated # and can correctly handle the dependency for embedding. -idf_component_register(SRC_DIRS "app" "nconfig" "wifi" "indicator" "system" "service" "ina226" +idf_component_register(SRC_DIRS "app" "nconfig" "wifi" "indicator" "system" "service" INCLUDE_DIRS "include" EMBED_FILES ${GZ_OUTPUT_FILE} ) @@ -18,12 +18,12 @@ idf_component_register(SRC_DIRS "app" "nconfig" "wifi" "indicator" "system" "ser # Define a custom command to build the web app. # This command explicitly tells CMake that it produces the GZ_OUTPUT_FILE. add_custom_command( - OUTPUT ${GZ_OUTPUT_FILE} - COMMAND npm install - COMMAND npm run build - WORKING_DIRECTORY ${WEB_APP_SOURCE_DIR} - # Re-run the build if any of these files change - DEPENDS + OUTPUT ${GZ_OUTPUT_FILE} + COMMAND npm install + COMMAND npm run build + WORKING_DIRECTORY ${WEB_APP_SOURCE_DIR} + # Re-run the build if any of these files change + DEPENDS ${WEB_APP_SOURCE_DIR}/package.json ${WEB_APP_SOURCE_DIR}/vite.config.js ${WEB_APP_SOURCE_DIR}/index.html @@ -38,14 +38,14 @@ add_custom_command( ${WEB_APP_SOURCE_DIR}/src/utils.js ${WEB_APP_SOURCE_DIR}/src/websocket.js - COMMENT "Building Node.js project (npm install && npm run build)" - VERBATIM + COMMENT "Building Node.js project (npm install && npm run build)" + VERBATIM ) # Create a target that depends on the output file. When this target is built, # it ensures the custom command above is executed first. add_custom_target(build_web_app ALL - DEPENDS ${GZ_OUTPUT_FILE} + DEPENDS ${GZ_OUTPUT_FILE} ) diff --git a/main/Kconfig b/main/Kconfig index cd9acb0..554e0ec 100644 --- a/main/Kconfig +++ b/main/Kconfig @@ -2,27 +2,34 @@ menu "ODROID-MONITOR" menu "GPIO" orsource "$IDF_PATH/examples/common_components/env_caps/$IDF_TARGET/Kconfig.env_caps" - config GPIO_INA226_SCL + config I2C_GPIO_SCL int "INA226 SCL GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX - default 0 - help - GPIO number for I2C Master data line. - - config GPIO_INA226_SDA - int "INA226 SDA GPIO Num" - range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX default 1 help GPIO number for I2C Master data line. - config GPIO_INA226_INT - int "INA226 ALERT GPIO Num" + config I2C_GPIO_SDA + int "INA226 SDA GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX - default 10 + default 0 help GPIO number for I2C Master data line. + config GPIO_INA3221_INT_CRITICAL + int "INA226 ALERT GPIO Num" + range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX + default 9 + help + GPIO number for critical int pin. + + config GPIO_INA3221_INT_WARNING + int "INA226 WARNING GPIO Num" + range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX + default 5 + help + GPIO number for critical int pin. + config GPIO_UART_TX int "UART TX GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX @@ -40,43 +47,57 @@ menu "ODROID-MONITOR" config GPIO_LED_STATUS int "Status LED GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX - default 8 + default 2 help GPIO number for LED. config GPIO_LED_WIFI int "Wi-Fi LED GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX - default 9 + default 3 help GPIO number for LED. - config GPIO_SW_12V + config EXPANDER_GPIO_SW_12V int "12v Load Switch GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX - default 4 - help - GPIO number for Load switch. - - config GPIO_SW_5V - int "5v Load Switch GPIO Num" - range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX - default 5 - help - GPIO number for Load switch. - - config GPIO_TRIGGER_POWER - int "Trigger power GPIO Num" - range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX default 2 help - GPIO number for Trigger. + GPIO number for Load switch. - config GPIO_TRIGGER_RESET - int "Trigger reset GPIO Num" + config EXPANDER_GPIO_SW_5V + int "5v Load Switch GPIO Num" range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX default 3 + help + GPIO number for Load switch. + + config EXPANDER_GPIO_TRIGGER_POWER + int "Trigger power GPIO Num" + range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX + default 0 help GPIO number for Trigger. + + config EXPANDER_GPIO_TRIGGER_RESET + int "Trigger reset GPIO Num" + range ENV_GPIO_RANGE_MIN ENV_GPIO_OUT_RANGE_MAX + default 1 + help + GPIO number for Trigger. + + config TRIGGER_POWER_DELAY_MS + int "Trigger reset GPIO Num" + range 100 5000 + default 3000 + help + Reset delay ms. + + config TRIGGER_RESET_DELAY_MS + int "Trigger reset GPIO Num" + range 100 5000 + default 1000 + help + Reset delay ms. endmenu endmenu \ No newline at end of file diff --git a/main/app/odroid-power-mate.c b/main/app/odroid-power-mate.c index 7a27011..6e713ce 100644 --- a/main/app/odroid-power-mate.c +++ b/main/app/odroid-power-mate.c @@ -1,50 +1,39 @@ #include #include -#include #include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/queue.h" -#include "esp_system.h" #include "esp_wifi.h" #include "esp_event.h" #include "esp_log.h" #include "nvs_flash.h" #include "esp_netif.h" -#include "driver/uart.h" -#include "esp_http_server.h" +#include "i2cdev.h" #include "indicator.h" #include "nconfig.h" #include "system.h" #include "wifi.h" -#include "lwip/err.h" -#include "lwip/sockets.h" -#include "lwip/sys.h" - -static const char *TAG = "odroid-remote"; - -void app_main(void) { +void app_main(void) +{ + ESP_ERROR_CHECK(i2cdev_init());; init_led(); led_set(LED_BLU, BLINK_TRIPLE); led_off(LED_BLU); - // NVS 초기화 esp_err_t ret = nvs_flash_init(); - if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) + { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); - // 네트워크 초기화 ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); ESP_ERROR_CHECK(init_nconfig()); - // WiFi 연결 wifi_connect(); sync_time(); start_webserver(); -} \ No newline at end of file +} diff --git a/main/idf_component.yml b/main/idf_component.yml index 9146229..fa3df99 100644 --- a/main/idf_component.yml +++ b/main/idf_component.yml @@ -1,3 +1,5 @@ dependencies: espressif/led_indicator: ^1.1.1 joltwallet/littlefs: ==1.20.1 + esp-idf-lib/ina3221: ^1.1.7 + esp-idf-lib/pca9557: ^1.0.7 diff --git a/main/ina226/ina226.c b/main/ina226/ina226.c deleted file mode 100644 index 0e19a80..0000000 --- a/main/ina226/ina226.c +++ /dev/null @@ -1,118 +0,0 @@ -#include "ina226.h" - -#include -#include -#include -#include - -#define INA226_REG_CONFIG (0x00) -#define INA226_REG_SHUNT_VOLTAGE (0x01) -#define INA226_REG_BUS_VOLTAGE (0x02) -#define INA226_REG_POWER (0x03) -#define INA226_REG_CURRENT (0x04) -#define INA226_REG_CALIBRATION (0x05) -#define INA226_REG_ALERT_MASK (0x06) -#define INA226_REG_ALERT_LIMIT (0x07) -#define INA226_REG_MANUFACTURER_ID (0xFE) -#define INA226_REG_DIE_ID (0xFF) - -#define INA226_CFG_AVERAGING_OFFSET 9 -#define INA226_CFG_BUS_VOLTAGE_OFFSET 6 -#define INA226_CFG_SHUNT_VOLTAGE_OFFSET 3 - -static esp_err_t ina226_read_reg(ina226_t *handle, uint8_t reg_addr, uint16_t *data, size_t len) -{ - return i2c_master_transmit_receive(handle->dev_handle, ®_addr, 1, (uint8_t *)data, len, handle->timeout_ms); -} - -static esp_err_t ina226_write_reg(ina226_t *handle, uint8_t reg_addr, uint16_t value) -{ - uint8_t write_buf[3] = {reg_addr, value >> 8, value & 0xFF}; - return i2c_master_transmit(handle->dev_handle, write_buf, sizeof(write_buf), handle->timeout_ms); -} - -esp_err_t ina226_get_manufacturer_id(ina226_t *device, uint16_t *manufacturer_id) -{ - return ina226_read_reg(device, INA226_REG_MANUFACTURER_ID, manufacturer_id, 2); -} - -esp_err_t ina226_get_die_id(ina226_t *device, uint16_t *die_id) -{ - return ina226_read_reg(device, INA226_REG_DIE_ID, die_id, 2); -} - -esp_err_t ina226_get_shunt_voltage(ina226_t *device, float *voltage) -{ - uint8_t data[2]; - esp_err_t err = ina226_read_reg(device, INA226_REG_SHUNT_VOLTAGE, (uint16_t*)data, 2); - *voltage = (float) (data[0] << 8 | data[1]) * 2.5e-6f; /* fixed to 2.5 uV */ - return err; -} - -esp_err_t ina226_get_bus_voltage(ina226_t *device, float *voltage) -{ - uint8_t data[2]; - esp_err_t err = ina226_read_reg(device, INA226_REG_BUS_VOLTAGE, (uint16_t*)data, 2); - *voltage = (float) (data[0] << 8 | data[1]) * 0.00125f; - return err; -} - -esp_err_t ina226_get_current(ina226_t *device, float *current) -{ - uint8_t data[2]; - esp_err_t err = ina226_read_reg(device, INA226_REG_CURRENT, (uint16_t*)data, 2); - *current = ((float) (data[0] << 8 | data[1])) * device->current_lsb; - return err; -} - -esp_err_t ina226_get_power(ina226_t *device, float *power) -{ - uint8_t data[2]; - esp_err_t err = ina226_read_reg(device, INA226_REG_POWER, (uint16_t*)data, 2); - *power = (float) (data[0] << 8 | data[1]) * device->power_lsb; - return err; -} - -esp_err_t ina226_init(ina226_t *device, i2c_master_dev_handle_t dev_handle, const ina226_config_t *config) -{ - esp_err_t err; - device->timeout_ms = config->timeout_ms; - device->dev_handle = dev_handle; - uint16_t bitmask = 0; - bitmask |= (config->averages << INA226_CFG_AVERAGING_OFFSET); - bitmask |= (config->bus_conv_time << INA226_CFG_BUS_VOLTAGE_OFFSET); - bitmask |= (config->shunt_conv_time << INA226_CFG_SHUNT_VOLTAGE_OFFSET); - bitmask |= config->mode; - err = ina226_write_reg(device, INA226_REG_CONFIG, bitmask); - if(err != ESP_OK) return err; - - /* write calibration*/ - float minimum_lsb = config->max_current / 32767; - float current_lsb = (uint16_t)(minimum_lsb * 100000000); - current_lsb /= 100000000; - current_lsb /= 0.0001; - current_lsb = ceil(current_lsb); - current_lsb *= 0.0001; - device->current_lsb = current_lsb; - device->power_lsb = current_lsb * 25; - uint16_t calibration_value = (uint16_t)((0.00512) / (current_lsb * config->r_shunt)); - err = ina226_write_reg(device, INA226_REG_CALIBRATION, calibration_value); - if(err != ESP_OK) return err; - - return ESP_OK; -} - -esp_err_t ina226_get_alert_mask(ina226_t *device, ina226_alert_t *alert_mask) -{ - return ina226_read_reg(device, INA226_REG_ALERT_MASK, (uint16_t *)alert_mask, 2); -} - -esp_err_t ina226_set_alert_mask(ina226_t *device, ina226_alert_t alert_mask) -{ - return ina226_write_reg(device, INA226_REG_ALERT_MASK, (uint16_t)alert_mask); -} - -esp_err_t ina226_set_alert_limit(ina226_t *device, float voltage) -{ - return ina226_write_reg(device, INA226_REG_ALERT_LIMIT, (uint16_t)(voltage)); -} \ No newline at end of file diff --git a/main/include/ina226.h b/main/include/ina226.h deleted file mode 100644 index 2980f55..0000000 --- a/main/include/ina226.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef _INA226_H_ -#define _INA226_H_ - -#include -#include "esp_err.h" -#include "driver/i2c_master.h" - -typedef enum -{ - INA226_AVERAGES_1 = 0b000, - INA226_AVERAGES_4 = 0b001, - INA226_AVERAGES_16 = 0b010, - INA226_AVERAGES_64 = 0b011, - INA226_AVERAGES_128 = 0b100, - INA226_AVERAGES_256 = 0b101, - INA226_AVERAGES_512 = 0b110, - INA226_AVERAGES_1024 = 0b111 -} ina226_averages_t; - -typedef enum -{ - INA226_BUS_CONV_TIME_140_US = 0b000, - INA226_BUS_CONV_TIME_204_US = 0b001, - INA226_BUS_CONV_TIME_332_US = 0b010, - INA226_BUS_CONV_TIME_588_US = 0b011, - INA226_BUS_CONV_TIME_1100_US = 0b100, - INA226_BUS_CONV_TIME_2116_US = 0b101, - INA226_BUS_CONV_TIME_4156_US = 0b110, - INA226_BUS_CONV_TIME_8244_US = 0b111 -} ina226_bus_conv_time_t; - - -typedef enum -{ - INA226_SHUNT_CONV_TIME_140_US = 0b000, - INA226_SHUNT_CONV_TIME_204_US = 0b001, - INA226_SHUNT_CONV_TIME_332_US = 0b010, - INA226_SHUNT_CONV_TIME_588_US = 0b011, - INA226_SHUNT_CONV_TIME_1100_US = 0b100, - INA226_SHUNT_CONV_TIME_2116_US = 0b101, - INA226_SHUNT_CONV_TIME_4156_US = 0b110, - INA226_SHUNT_CONV_TIME_8244_US = 0b111 -} ina226_shunt_conv_time_t; - -typedef enum -{ - - INA226_MODE_POWER_DOWN = 0b000, - INA226_MODE_SHUNT_TRIG = 0b001, - INA226_MODE_BUS_TRIG = 0b010, - INA226_MODE_SHUNT_BUS_TRIG = 0b011, - INA226_MODE_ADC_OFF = 0b100, - INA226_MODE_SHUNT_CONT = 0b101, - INA226_MODE_BUS_CONT = 0b110, - INA226_MODE_SHUNT_BUS_CONT = 0b111, -} ina226_mode_t; - -typedef enum -{ - INA226_ALERT_SHUNT_OVER_VOLTAGE = 0xf, - INA226_ALERT_SHUNT_UNDER_VOLTAGE = 0xe, - INA226_ALERT_BUS_OVER_VOLTAGE = 0xd, - INA226_ALERT_BUS_UNDER_VOLTAGE = 0xc, - INA226_ALERT_POWER_OVER_LIMIT = 0xb, - INA226_ALERT_CONVERSION_READY = 0xa, - INA226_ALERT_FUNCTION_FLAG = 0x4, - INA226_ALERT_CONVERSION_READY_FLAG = 0x3, - INA226_ALERT_MATH_OVERFLOW_FLAG = 0x2, - INA226_ALERT_POLARITY = 0x1, - INA226_ALERT_LATCH_ENABLE = 0x0 -} ina226_alert_t; - -typedef struct -{ - i2c_port_t i2c_port; - int i2c_addr; - int timeout_ms; - ina226_averages_t averages; - ina226_bus_conv_time_t bus_conv_time; - ina226_shunt_conv_time_t shunt_conv_time; - ina226_mode_t mode; - float r_shunt; /* ohm */ - float max_current; /* amps */ -} ina226_config_t; - -typedef struct -{ - i2c_master_dev_handle_t dev_handle; - int timeout_ms; - float current_lsb; - float power_lsb; -} ina226_t; - -esp_err_t ina226_get_manufacturer_id(ina226_t *device, uint16_t *manufacturer_id); -esp_err_t ina226_get_die_id(ina226_t *device, uint16_t *die_id); -esp_err_t ina226_get_shunt_voltage(ina226_t *device, float *voltage); -esp_err_t ina226_get_bus_voltage(ina226_t *device, float *voltage); -esp_err_t ina226_get_current(ina226_t *device, float *current); -esp_err_t ina226_get_power(ina226_t *device, float *power); -esp_err_t ina226_get_alert_mask(ina226_t *device, ina226_alert_t *alert_mask); -esp_err_t ina226_set_alert_mask(ina226_t *device, ina226_alert_t alert_mask); -esp_err_t ina226_set_alert_limit(ina226_t *device, float voltage); -esp_err_t ina226_init(ina226_t *device, i2c_master_dev_handle_t dev_handle, const ina226_config_t *config); - -#endif \ No newline at end of file diff --git a/main/include/indicator.h b/main/include/indicator.h index edf920e..76ec9e4 100644 --- a/main/include/indicator.h +++ b/main/include/indicator.h @@ -26,4 +26,4 @@ void init_led(void); void led_set(enum blink_led led, enum blink_type type); void led_off(enum blink_led led); -#endif //LED_H +#endif //LED_H \ No newline at end of file diff --git a/main/include/nconfig.h b/main/include/nconfig.h index 69b5e33..d479596 100644 --- a/main/include/nconfig.h +++ b/main/include/nconfig.h @@ -35,7 +35,7 @@ enum nconfig_type esp_err_t nconfig_write(enum nconfig_type type, const char* data); // Check config is set and get config value length -esp_err_t nconfig_get_str_len(enum nconfig_type type, size_t *len); +esp_err_t nconfig_get_str_len(enum nconfig_type type, size_t* len); // Read config esp_err_t nconfig_read(enum nconfig_type type, char* data, size_t len); @@ -43,4 +43,4 @@ esp_err_t nconfig_read(enum nconfig_type type, char* data, size_t len); // Remove key esp_err_t nconfig_delete(enum nconfig_type type); -#endif //NCONFIG_H +#endif //NCONFIG_H \ No newline at end of file diff --git a/main/include/system.h b/main/include/system.h index 6f1f78c..6118c80 100644 --- a/main/include/system.h +++ b/main/include/system.h @@ -9,4 +9,4 @@ void start_reboot_timer(int sec); void stop_reboot_timer(); void start_webserver(); -#endif //SYSTEM_H +#endif //SYSTEM_H \ No newline at end of file diff --git a/main/include/wifi.h b/main/include/wifi.h index 8b48a25..ba4109c 100644 --- a/main/include/wifi.h +++ b/main/include/wifi.h @@ -11,13 +11,13 @@ const char* auth_mode_str(wifi_auth_mode_t mode); esp_err_t wifi_connect(void); esp_err_t wifi_disconnect(void); -void wifi_scan_aps(wifi_ap_record_t **ap_records, uint16_t* count); -esp_err_t wifi_get_current_ap_info(wifi_ap_record_t *ap_info); -esp_err_t wifi_get_current_ip_info(esp_netif_ip_info_t *ip_info); -esp_err_t wifi_get_dns_info(esp_netif_dns_type_t type, esp_netif_dns_info_t *dns_info); +void wifi_scan_aps(wifi_ap_record_t * *ap_records, uint16_t * count); +esp_err_t wifi_get_current_ap_info(wifi_ap_record_t * ap_info); +esp_err_t wifi_get_current_ip_info(esp_netif_ip_info_t * ip_info); +esp_err_t wifi_get_dns_info(esp_netif_dns_type_t type, esp_netif_dns_info_t* dns_info); esp_err_t wifi_use_dhcp(void); -esp_err_t wifi_use_static(const char *ip, const char *gw, const char *netmask, const char *dns1, const char *dns2); +esp_err_t wifi_use_static(const char* ip, const char* gw, const char* netmask, const char* dns1, const char* dns2); esp_err_t wifi_switch_mode(const char* mode); void sync_time(); -#endif //WIFI_H +#endif //WIFI_H \ No newline at end of file diff --git a/main/indicator/indicator.c b/main/indicator/indicator.c index ce65cb8..4e4a318 100644 --- a/main/indicator/indicator.c +++ b/main/indicator/indicator.c @@ -48,7 +48,7 @@ static const blink_step_t solid_blink[] = { {LED_BLINK_LOOP, 0, 0}, }; -blink_step_t const *led_mode[] = { +blink_step_t const* led_mode[] = { [BLINK_SLOW] = slow_blink, [BLINK_FAST] = fast_blink, [BLINK_DOUBLE] = double_blink, @@ -65,7 +65,7 @@ void init_led(void) led_indicator_ledc_config_t ledc_config = {0}; led_indicator_config_t config = {0}; - ledc_config.is_active_level_high = true; + ledc_config.is_active_level_high = false; ledc_config.timer_inited = false; ledc_config.timer_num = LEDC_TIMER_0; ledc_config.gpio_num = LED_STATUS_GPIO; @@ -78,7 +78,7 @@ void init_led(void) led_handle[LED_RED] = led_indicator_create(&config); - ledc_config.is_active_level_high = true; + ledc_config.is_active_level_high = false; ledc_config.timer_inited = false; ledc_config.timer_num = LEDC_TIMER_0; ledc_config.gpio_num = LED_WIFI_GPIO; diff --git a/main/nconfig/nconfig.c b/main/nconfig/nconfig.c index 076b60e..fc28bde 100644 --- a/main/nconfig/nconfig.c +++ b/main/nconfig/nconfig.c @@ -9,7 +9,7 @@ static nvs_handle_t handle; -const static char *keys[NCONFIG_TYPE_MAX] = { +const static char* keys[NCONFIG_TYPE_MAX] = { [WIFI_SSID] = "wifi_ssid", [WIFI_PASSWORD] = "wifi_pw", [WIFI_MODE] = "wifi_mode", @@ -25,9 +25,10 @@ const static char *keys[NCONFIG_TYPE_MAX] = { [UART_BAUD_RATE] = "baudrate", }; -struct default_value { +struct default_value +{ enum nconfig_type type; - const char *value; + const char* value; }; struct default_value const default_values[] = { @@ -48,13 +49,15 @@ esp_err_t init_nconfig() esp_err_t ret = nvs_open(NCONFIG_NVS_NAMESPACE, NVS_READWRITE, &handle); if (ret != ESP_OK) return ret; - for (int i = 0; i < sizeof(default_values) / sizeof(default_values[0]); ++i) { + for (int i = 0; i < sizeof(default_values) / sizeof(default_values[0]); ++i) + { // check key is not exist or value is null size_t len = 0; nconfig_get_str_len(default_values[i].type, &len); if (len <= 1) // nconfig_get_str_len return err or value is '\0' { - if (nconfig_write(default_values[i].type, default_values[i].value) != ESP_OK) // if nconfig write fail, system panic + if (nconfig_write(default_values[i].type, default_values[i].value) != ESP_OK) + // if nconfig write fail, system panic return ESP_FAIL; } } @@ -72,7 +75,7 @@ esp_err_t nconfig_delete(enum nconfig_type type) return nvs_erase_key(handle, keys[type]); } -esp_err_t nconfig_get_str_len(enum nconfig_type type, size_t *len) +esp_err_t nconfig_get_str_len(enum nconfig_type type, size_t* len) { return nvs_get_str(handle, keys[type], NULL, len); } diff --git a/main/service/control.c b/main/service/control.c index 760afd5..d5ba5b5 100644 --- a/main/service/control.c +++ b/main/service/control.c @@ -4,46 +4,16 @@ #include "esp_log.h" #include "cJSON.h" #include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/semphr.h" -#include "esp_timer.h" +#include "sw.h" -#define GPIO_12V_SWITCH CONFIG_GPIO_SW_12V -#define GPIO_5V_SWITCH CONFIG_GPIO_SW_5V -#define GPIO_POWER_TRIGGER CONFIG_GPIO_TRIGGER_POWER -#define GPIO_RESET_TRIGGER CONFIG_GPIO_TRIGGER_RESET - -static bool status_12v_on = false; -static bool status_5v_on = false; -static SemaphoreHandle_t state_mutex; -static esp_timer_handle_t power_trigger_timer; -static esp_timer_handle_t reset_trigger_timer; - -/** - * @brief 타이머 만료 시 GPIO를 다시 HIGH로 설정하는 콜백 함수 - */ -static void trigger_off_callback(void* arg) +static esp_err_t control_get_handler(httpd_req_t* req) { - gpio_num_t gpio_pin = (int) arg; - gpio_set_level(gpio_pin, 1); // 핀을 다시 HIGH로 복구 -} + cJSON* root = cJSON_CreateObject(); -static void update_gpio_switches() -{ - gpio_set_level(GPIO_12V_SWITCH, status_12v_on); - gpio_set_level(GPIO_5V_SWITCH, status_5v_on); -} + cJSON_AddBoolToObject(root, "load_12v_on", get_main_load_switch()); + cJSON_AddBoolToObject(root, "load_5v_on", get_usb_load_switch()); -static esp_err_t control_get_handler(httpd_req_t *req) -{ - cJSON *root = cJSON_CreateObject(); - - xSemaphoreTake(state_mutex, portMAX_DELAY); - cJSON_AddBoolToObject(root, "load_12v_on", status_12v_on); - cJSON_AddBoolToObject(root, "load_5v_on", status_5v_on); - xSemaphoreGive(state_mutex); - - char *json_string = cJSON_Print(root); + char* json_string = cJSON_Print(root); httpd_resp_set_type(req, "application/json"); httpd_resp_send(req, json_string, strlen(json_string)); @@ -53,64 +23,46 @@ static esp_err_t control_get_handler(httpd_req_t *req) return ESP_OK; } -static esp_err_t control_post_handler(httpd_req_t *req) +static esp_err_t control_post_handler(httpd_req_t* req) { char buf[128]; int ret, remaining = req->content_len; - if (remaining >= sizeof(buf)) { + if (remaining >= sizeof(buf)) + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Request content too long"); return ESP_FAIL; } ret = httpd_req_recv(req, buf, remaining); - if (ret <= 0) { - if (ret == HTTPD_SOCK_ERR_TIMEOUT) { + if (ret <= 0) + { + if (ret == HTTPD_SOCK_ERR_TIMEOUT) + { httpd_resp_send_408(req); } return ESP_FAIL; } buf[ret] = '\0'; - cJSON *root = cJSON_Parse(buf); - if (root == NULL) { + cJSON* root = cJSON_Parse(buf); + if (root == NULL) + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid JSON format"); return ESP_FAIL; } - bool state_changed = false; - xSemaphoreTake(state_mutex, portMAX_DELAY); + cJSON* item_12v = cJSON_GetObjectItem(root, "load_12v_on"); + if (cJSON_IsBool(item_12v)) set_main_load_switch(cJSON_IsTrue(item_12v)); - cJSON *item_12v = cJSON_GetObjectItem(root, "load_12v_on"); - if (cJSON_IsBool(item_12v)) { - status_12v_on = cJSON_IsTrue(item_12v); - state_changed = true; - } + cJSON* item_5v = cJSON_GetObjectItem(root, "load_5v_on"); + if (cJSON_IsBool(item_5v)) set_usb_load_switch(cJSON_IsTrue(item_5v)); - cJSON *item_5v = cJSON_GetObjectItem(root, "load_5v_on"); - if (cJSON_IsBool(item_5v)) { - status_5v_on = cJSON_IsTrue(item_5v); - state_changed = true; - } + cJSON* power_trigger = cJSON_GetObjectItem(root, "power_trigger"); + if (cJSON_IsTrue(power_trigger)) trig_power(); - if (state_changed) { - update_gpio_switches(); - } - xSemaphoreGive(state_mutex); - - cJSON *power_trigger = cJSON_GetObjectItem(root, "power_trigger"); - if (cJSON_IsTrue(power_trigger)) { - gpio_set_level(GPIO_POWER_TRIGGER, 0); - esp_timer_stop(power_trigger_timer); // Stop timer if it's already running - ESP_ERROR_CHECK(esp_timer_start_once(power_trigger_timer, 3000000)); // 3초 - } - - cJSON *reset_trigger = cJSON_GetObjectItem(root, "reset_trigger"); - if (cJSON_IsTrue(reset_trigger)) { - gpio_set_level(GPIO_RESET_TRIGGER, 0); - esp_timer_stop(reset_trigger_timer); // Stop timer if it's already running - ESP_ERROR_CHECK(esp_timer_start_once(reset_trigger_timer, 3000000)); // 3초 - } + cJSON* reset_trigger = cJSON_GetObjectItem(root, "reset_trigger"); + if (cJSON_IsTrue(reset_trigger)) trig_reset(); cJSON_Delete(root); @@ -118,64 +70,22 @@ static esp_err_t control_post_handler(httpd_req_t *req) return ESP_OK; } -static void control_module_init(void) -{ - state_mutex = xSemaphoreCreateMutex(); - - gpio_config_t switch_conf = { - .pin_bit_mask = (1ULL << GPIO_12V_SWITCH) | (1ULL << GPIO_5V_SWITCH), - .mode = GPIO_MODE_OUTPUT, - .pull_up_en = GPIO_PULLUP_DISABLE, - .pull_down_en = GPIO_PULLDOWN_DISABLE, - .intr_type = GPIO_INTR_DISABLE, - }; - gpio_config(&switch_conf); - update_gpio_switches(); - - gpio_config_t trigger_conf = { - .pin_bit_mask = (1ULL << GPIO_POWER_TRIGGER) | (1ULL << GPIO_RESET_TRIGGER), - .mode = GPIO_MODE_OUTPUT, - .pull_up_en = GPIO_PULLUP_ENABLE, - .pull_down_en = GPIO_PULLDOWN_DISABLE, - .intr_type = GPIO_INTR_DISABLE, - }; - gpio_config(&trigger_conf); - gpio_set_level(GPIO_POWER_TRIGGER, 1); - gpio_set_level(GPIO_RESET_TRIGGER, 1); - - const esp_timer_create_args_t power_timer_args = { - .callback = &trigger_off_callback, - .arg = (void*) GPIO_POWER_TRIGGER, - .name = "power_trigger_off" - }; - ESP_ERROR_CHECK(esp_timer_create(&power_timer_args, &power_trigger_timer)); - - const esp_timer_create_args_t reset_timer_args = { - .callback = &trigger_off_callback, - .arg = (void*) GPIO_RESET_TRIGGER, - .name = "reset_trigger_off" - }; - ESP_ERROR_CHECK(esp_timer_create(&reset_timer_args, &reset_trigger_timer)); - -} - void register_control_endpoint(httpd_handle_t server) { - control_module_init(); + init_sw(); httpd_uri_t get_uri = { - .uri = "/api/control", - .method = HTTP_GET, - .handler = control_get_handler, + .uri = "/api/control", + .method = HTTP_GET, + .handler = control_get_handler, .user_ctx = NULL }; httpd_register_uri_handler(server, &get_uri); httpd_uri_t post_uri = { - .uri = "/api/control", - .method = HTTP_POST, - .handler = control_post_handler, + .uri = "/api/control", + .method = HTTP_POST, + .handler = control_post_handler, .user_ctx = NULL }; httpd_register_uri_handler(server, &post_uri); - -} \ No newline at end of file +} diff --git a/main/service/datalog.c b/main/service/datalog.c index 277aa58..1885e8d 100644 --- a/main/service/datalog.c +++ b/main/service/datalog.c @@ -7,9 +7,10 @@ #include "esp_littlefs.h" #include "esp_log.h" -static const char* TAG = "DATALOG"; +static const char* TAG = "datalog"; static const char* LOG_FILE_PATH = "/littlefs/datalog.csv"; -#define MAX_LOG_SIZE (512 * 1024) + +#define MAX_LOG_SIZE (700 * 1024) void datalog_init(void) { @@ -42,7 +43,7 @@ void datalog_init(void) } size_t total = 0, used = 0; - ret = esp_littlefs_info(NULL, &total, &used); + ret = esp_littlefs_info(conf.partition_label, &total, &used); if (ret != ESP_OK) { ESP_LOGE(TAG, "Failed to get LittleFS partition information (%s)", esp_err_to_name(ret)); @@ -64,19 +65,20 @@ void datalog_init(void) } else { - // Add header - fprintf(f_write, "timestamp,voltage,current,power\n"); + // Add header for 3 channels + fprintf(f_write, "timestamp,usb_voltage,usb_current,usb_power,main_voltage,main_current,main_power,vin_voltage,vin_current,vin_power\n"); fclose(f_write); } } else { + // Here we could check if the header is correct, but for now we assume it is. ESP_LOGI(TAG, "Log file found."); fclose(f); } } -void datalog_add(uint32_t timestamp, float voltage, float current, float power) +void datalog_add(uint32_t timestamp, const channel_data_t* channel_data) { struct stat st; if (stat(LOG_FILE_PATH, &st) == 0) @@ -139,7 +141,11 @@ void datalog_add(uint32_t timestamp, float voltage, float current, float power) return; } - fprintf(f, "%lu,%.3f,%.3f,%.3f\n", timestamp, voltage, current, power); + fprintf(f, "%lu", timestamp); + for (int i = 0; i < 3; ++i) { + fprintf(f, ",%.3f,%.3f,%.3f", channel_data[i].voltage, channel_data[i].current, channel_data[i].power); + } + fprintf(f, "\n"); fclose(f); } diff --git a/main/service/datalog.h b/main/service/datalog.h index 83fcd7d..1117c4b 100644 --- a/main/service/datalog.h +++ b/main/service/datalog.h @@ -3,8 +3,16 @@ #include +#define NUM_CHANNELS 3 + +typedef struct { + float voltage; + float current; + float power; +} channel_data_t; + void datalog_init(void); -void datalog_add(uint32_t timestamp, float voltage, float current, float power); +void datalog_add(uint32_t timestamp, const channel_data_t* channel_data); const char* datalog_get_path(void); #endif /* MAIN_SERVICE_DATALOG_H_ */ diff --git a/main/service/monitor.c b/main/service/monitor.c index fd50eae..6b82d9c 100644 --- a/main/service/monitor.c +++ b/main/service/monitor.c @@ -5,8 +5,6 @@ #include "monitor.h" #include -#include -#include #include "freertos/FreeRTOS.h" #include "esp_log.h" #include "esp_timer.h" @@ -17,39 +15,78 @@ #include "webserver.h" #include "wifi.h" #include "datalog.h" +#include "ina3221.h" -#define INA226_SDA CONFIG_GPIO_INA226_SDA -#define INA226_SCL CONFIG_GPIO_INA226_SCL +#define PM_SDA CONFIG_I2C_GPIO_SDA +#define PM_SCL CONFIG_I2C_GPIO_SCL -ina226_t ina; -i2c_master_bus_handle_t bus_handle; -i2c_master_dev_handle_t dev_handle; +const char* channel_names[] = { + "USB", + "MAIN", + "VIN" +}; + +ina3221_t ina3221 = +{ + /* shunt values are 100 mOhm for each channel */ + .shunt = { + 10, + 10, + 10 + }, + .mask.mask_register = INA3221_DEFAULT_MASK, + .i2c_dev = {0}, + .config = { + .mode = true, // mode selection + .esht = true, // shunt enable + .ebus = true, // bus enable + .ch1 = true, // channel 1 enable + .ch2 = true, // channel 2 enable + .ch3 = true, // channel 3 enable + .avg = INA3221_AVG_64, // 64 samples average + .vbus = INA3221_CT_2116, // 2ms by channel (bus) + .vsht = INA3221_CT_2116, // 2ms by channel (shunt) + }, +}; // Timer callback function to read sensor data -static void sensor_timer_callback(void *arg) +static void sensor_timer_callback(void* arg) { - // Generate random sensor data - float voltage = 0; - float current = 0; - float power = 0; - - ina226_get_bus_voltage(&ina, &voltage); - ina226_get_power(&ina, &power); - ina226_get_current(&ina, ¤t); - // Get system uptime int64_t uptime_us = esp_timer_get_time(); uint32_t uptime_sec = (uint32_t)(uptime_us / 1000000); uint32_t timestamp = (uint32_t)time(NULL); - datalog_add(timestamp, voltage, current, power); + channel_data_t channel_data[NUM_CHANNELS]; // Create JSON object with sensor data - cJSON *root = cJSON_CreateObject(); + cJSON* root = cJSON_CreateObject(); + for (uint8_t i = 0; i < INA3221_BUS_NUMBER; i++) + { + float voltage, current, power; + + ina3221_get_bus_voltage(&ina3221, i, &voltage); + ina3221_get_shunt_value(&ina3221, i, NULL, ¤t); + + current /= 1000.0f; // mA to A + power = voltage * current; + + // Populate data for datalog + channel_data[i].voltage = voltage; + channel_data[i].current = current; + channel_data[i].power = power; + + // Populate data for websocket + cJSON* v = cJSON_AddObjectToObject(root, channel_names[i]); + cJSON_AddNumberToObject(v, "voltage", voltage); + cJSON_AddNumberToObject(v, "current", current); + cJSON_AddNumberToObject(v, "power", power); + } + + // Add data to log file + datalog_add(timestamp, channel_data); + cJSON_AddStringToObject(root, "type", "sensor_data"); - cJSON_AddNumberToObject(root, "voltage", voltage); - cJSON_AddNumberToObject(root, "current", current); - cJSON_AddNumberToObject(root, "power", power); cJSON_AddNumberToObject(root, "timestamp", timestamp); cJSON_AddNumberToObject(root, "uptime_sec", uptime_sec); @@ -57,69 +94,40 @@ static void sensor_timer_callback(void *arg) push_data_to_ws(root); } -static void status_wifi_callback(void *arg) +static void status_wifi_callback(void* arg) { wifi_ap_record_t ap_info; - cJSON *root = cJSON_CreateObject(); + cJSON* root = cJSON_CreateObject(); - if (wifi_get_current_ap_info(&ap_info) == ESP_OK) { + if (wifi_get_current_ap_info(&ap_info) == ESP_OK) + { cJSON_AddStringToObject(root, "type", "wifi_status"); cJSON_AddBoolToObject(root, "connected", true); - cJSON_AddStringToObject(root, "ssid", (const char *)ap_info.ssid); + cJSON_AddStringToObject(root, "ssid", (const char*)ap_info.ssid); cJSON_AddNumberToObject(root, "rssi", ap_info.rssi); - } else { + } + else + { cJSON_AddBoolToObject(root, "connected", false); } push_data_to_ws(root); } -ina226_config_t ina_config = { - .i2c_port = I2C_NUM_0, - .i2c_addr = 0x40, - .timeout_ms = 100, - .averages = INA226_AVERAGES_16, - .bus_conv_time = INA226_BUS_CONV_TIME_1100_US, - .shunt_conv_time = INA226_SHUNT_CONV_TIME_1100_US, - .mode = INA226_MODE_SHUNT_BUS_CONT, - .r_shunt = 0.01f, - .max_current = 8 -}; - -static void init_ina226() -{ - i2c_master_bus_config_t bus_config = { - .i2c_port = I2C_NUM_0, - .sda_io_num = (gpio_num_t) INA226_SDA, - .scl_io_num = (gpio_num_t) INA226_SCL, - .clk_source = I2C_CLK_SRC_DEFAULT, - .glitch_ignore_cnt = 7, - .flags.enable_internal_pullup = true, - }; - ESP_ERROR_CHECK(i2c_new_master_bus(&bus_config, &bus_handle)); - - i2c_device_config_t dev_config = { - .dev_addr_length = I2C_ADDR_BIT_LEN_7, - .device_address = 0x40, - .scl_speed_hz = 400000, - }; - ESP_ERROR_CHECK(i2c_master_bus_add_device(bus_handle, &dev_config, &dev_handle)); - - ESP_ERROR_CHECK(ina226_init(&ina, dev_handle, &ina_config)); -} - static esp_timer_handle_t sensor_timer; static esp_timer_handle_t wifi_status_timer; void init_status_monitor() { - init_ina226(); + ESP_ERROR_CHECK(ina3221_init_desc(&ina3221, 0x40, 0, PM_SDA, PM_SCL)); + + // logger datalog_init(); // Timer configuration const esp_timer_create_args_t sensor_timer_args = { - .callback = &sensor_timer_callback, - .name = "sensor_reading_timer" // Optional name for debugging + .callback = &sensor_timer_callback, + .name = "sensor_reading_timer" // Optional name for debugging }; const esp_timer_create_args_t wifi_timer_args = { diff --git a/main/service/monitor.h b/main/service/monitor.h index 2f52e47..6bfc42d 100644 --- a/main/service/monitor.h +++ b/main/service/monitor.h @@ -9,17 +9,16 @@ #include "esp_http_server.h" -// 버퍼에 저장할 데이터의 개수 #define SENSOR_BUFFER_SIZE 100 -// 단일 센서 데이터를 저장하기 위한 구조체 -typedef struct { +typedef struct +{ float voltage; float current; float power; - uint32_t timestamp; // 데이터를 읽은 시간 (부팅 후 ms) + uint32_t timestamp; } sensor_data_t; void init_status_monitor(); -#endif //ODROID_REMOTE_HTTP_MONITOR_H \ No newline at end of file +#endif //ODROID_REMOTE_HTTP_MONITOR_H diff --git a/main/service/setting.c b/main/service/setting.c index c86ec5c..e4f67a6 100644 --- a/main/service/setting.c +++ b/main/service/setting.c @@ -8,41 +8,50 @@ #include "esp_netif.h" #include "freertos/task.h" -static const char *TAG = "webserver"; +static const char* TAG = "webserver"; -static esp_err_t setting_get_handler(httpd_req_t *req) +static esp_err_t setting_get_handler(httpd_req_t* req) { wifi_ap_record_t ap_info; - cJSON *root = cJSON_CreateObject(); + cJSON* root = cJSON_CreateObject(); char mode_buf[16]; - if (nconfig_read(WIFI_MODE, mode_buf, sizeof(mode_buf)) == ESP_OK) { + if (nconfig_read(WIFI_MODE, mode_buf, sizeof(mode_buf)) == ESP_OK) + { cJSON_AddStringToObject(root, "mode", mode_buf); - } else { + } + else + { cJSON_AddStringToObject(root, "mode", "sta"); // Default to sta } char net_type_buf[16]; - if (nconfig_read(NETIF_TYPE, net_type_buf, sizeof(net_type_buf)) == ESP_OK) { + if (nconfig_read(NETIF_TYPE, net_type_buf, sizeof(net_type_buf)) == ESP_OK) + { cJSON_AddStringToObject(root, "net_type", net_type_buf); - } else { + } + else + { cJSON_AddStringToObject(root, "net_type", "dhcp"); // Default to dhcp } // Add baudrate to the response char baud_buf[16]; - if (nconfig_read(UART_BAUD_RATE, baud_buf, sizeof(baud_buf)) == ESP_OK) { + if (nconfig_read(UART_BAUD_RATE, baud_buf, sizeof(baud_buf)) == ESP_OK) + { cJSON_AddStringToObject(root, "baudrate", baud_buf); } - if (wifi_get_current_ap_info(&ap_info) == ESP_OK) { + if (wifi_get_current_ap_info(&ap_info) == ESP_OK) + { cJSON_AddBoolToObject(root, "connected", true); - cJSON_AddStringToObject(root, "ssid", (const char *)ap_info.ssid); + cJSON_AddStringToObject(root, "ssid", (const char*)ap_info.ssid); cJSON_AddNumberToObject(root, "rssi", ap_info.rssi); esp_netif_ip_info_t ip_info; cJSON* ip_obj = cJSON_CreateObject(); - if (wifi_get_current_ip_info(&ip_info) == ESP_OK) { + if (wifi_get_current_ip_info(&ip_info) == ESP_OK) + { char ip_str[16]; esp_ip4addr_ntoa(&ip_info.ip, ip_str, sizeof(ip_str)); cJSON_AddStringToObject(ip_obj, "ip", ip_str); @@ -54,21 +63,24 @@ static esp_err_t setting_get_handler(httpd_req_t *req) esp_netif_dns_info_t dns_info; char dns_str[16]; - if (wifi_get_dns_info(ESP_NETIF_DNS_MAIN, &dns_info) == ESP_OK) { + if (wifi_get_dns_info(ESP_NETIF_DNS_MAIN, &dns_info) == ESP_OK) + { esp_ip4addr_ntoa(&dns_info.ip.u_addr.ip4, dns_str, sizeof(dns_str)); cJSON_AddStringToObject(ip_obj, "dns1", dns_str); } - if (wifi_get_dns_info(ESP_NETIF_DNS_BACKUP, &dns_info) == ESP_OK) { + if (wifi_get_dns_info(ESP_NETIF_DNS_BACKUP, &dns_info) == ESP_OK) + { esp_ip4addr_ntoa(&dns_info.ip.u_addr.ip4, dns_str, sizeof(dns_str)); cJSON_AddStringToObject(ip_obj, "dns2", dns_str); } cJSON_AddItemToObject(root, "ip", ip_obj); - - } else { + } + else + { cJSON_AddBoolToObject(root, "connected", false); } - const char *json_string = cJSON_Print(root); + const char* json_string = cJSON_Print(root); httpd_resp_set_type(req, "application/json"); httpd_resp_send(req, json_string, HTTPD_RESP_USE_STRLEN); cJSON_Delete(root); @@ -77,18 +89,18 @@ static esp_err_t setting_get_handler(httpd_req_t *req) return ESP_OK; } -static esp_err_t wifi_scan(httpd_req_t *req) +static esp_err_t wifi_scan(httpd_req_t* req) { - wifi_ap_record_t *ap_records; + wifi_ap_record_t* ap_records; uint16_t count; wifi_scan_aps(&ap_records, &count); - cJSON *root = cJSON_CreateArray(); + cJSON* root = cJSON_CreateArray(); for (int i = 0; i < count; i++) { - cJSON *ap_obj = cJSON_CreateObject(); - cJSON_AddStringToObject(ap_obj, "ssid", (const char *)ap_records[i].ssid); + cJSON* ap_obj = cJSON_CreateObject(); + cJSON_AddStringToObject(ap_obj, "ssid", (const char*)ap_records[i].ssid); cJSON_AddNumberToObject(ap_obj, "rssi", ap_records[i].rssi); cJSON_AddStringToObject(ap_obj, "authmode", auth_mode_str(ap_records[i].authmode)); cJSON_AddItemToArray(root, ap_obj); @@ -98,7 +110,7 @@ static esp_err_t wifi_scan(httpd_req_t *req) free(ap_records); - const char *json_string = cJSON_Print(root); + const char* json_string = cJSON_Print(root); httpd_resp_set_type(req, "application/json"); httpd_resp_send(req, json_string, HTTPD_RESP_USE_STRLEN); cJSON_Delete(root); @@ -107,67 +119,83 @@ static esp_err_t wifi_scan(httpd_req_t *req) return ESP_OK; } -static esp_err_t setting_post_handler(httpd_req_t *req) +static esp_err_t setting_post_handler(httpd_req_t* req) { char buf[512]; int received = httpd_req_recv(req, buf, sizeof(buf) - 1); - if (received <= 0) { + if (received <= 0) + { if (received == HTTPD_SOCK_ERR_TIMEOUT) httpd_resp_send_408(req); return ESP_FAIL; } buf[received] = '\0'; - cJSON *root = cJSON_Parse(buf); - if (root == NULL) { + cJSON* root = cJSON_Parse(buf); + if (root == NULL) + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid JSON"); return ESP_FAIL; } - cJSON *mode_item = cJSON_GetObjectItem(root, "mode"); - cJSON *net_type_item = cJSON_GetObjectItem(root, "net_type"); - cJSON *ssid_item = cJSON_GetObjectItem(root, "ssid"); - cJSON *baud_item = cJSON_GetObjectItem(root, "baudrate"); + cJSON* mode_item = cJSON_GetObjectItem(root, "mode"); + cJSON* net_type_item = cJSON_GetObjectItem(root, "net_type"); + cJSON* ssid_item = cJSON_GetObjectItem(root, "ssid"); + cJSON* baud_item = cJSON_GetObjectItem(root, "baudrate"); - if (mode_item && cJSON_IsString(mode_item)) { + if (mode_item && cJSON_IsString(mode_item)) + { const char* mode = mode_item->valuestring; ESP_LOGI(TAG, "Received mode switch request: %s", mode); - if (strcmp(mode, "sta") == 0 || strcmp(mode, "apsta") == 0) { - if (strcmp(mode, "apsta") == 0) { - cJSON *ap_ssid_item = cJSON_GetObjectItem(root, "ap_ssid"); - cJSON *ap_pass_item = cJSON_GetObjectItem(root, "ap_password"); + if (strcmp(mode, "sta") == 0 || strcmp(mode, "apsta") == 0) + { + if (strcmp(mode, "apsta") == 0) + { + cJSON* ap_ssid_item = cJSON_GetObjectItem(root, "ap_ssid"); + cJSON* ap_pass_item = cJSON_GetObjectItem(root, "ap_password"); - if (ap_ssid_item && cJSON_IsString(ap_ssid_item)) { + if (ap_ssid_item && cJSON_IsString(ap_ssid_item)) + { nconfig_write(AP_SSID, ap_ssid_item->valuestring); - } else { + } + else + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "AP SSID required for APSTA mode"); cJSON_Delete(root); return ESP_FAIL; } - if (ap_pass_item && cJSON_IsString(ap_pass_item)) { + if (ap_pass_item && cJSON_IsString(ap_pass_item)) + { nconfig_write(AP_PASSWORD, ap_pass_item->valuestring); - } else { + } + else + { nconfig_delete(AP_PASSWORD); // Open network } } wifi_switch_mode(mode); httpd_resp_sendstr(req, "{\"status\":\"mode_switch_initiated\"}"); - } else { + } + else + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid mode"); } - } else if (net_type_item && cJSON_IsString(net_type_item)) { + } + else if (net_type_item && cJSON_IsString(net_type_item)) + { const char* type = net_type_item->valuestring; ESP_LOGI(TAG, "Received network config: %s", type); - if (strcmp(type, "static") == 0) { - cJSON *ip_item = cJSON_GetObjectItem(root, "ip"); - cJSON *gw_item = cJSON_GetObjectItem(root, "gateway"); - cJSON *sn_item = cJSON_GetObjectItem(root, "subnet"); - cJSON *d1_item = cJSON_GetObjectItem(root, "dns1"); - cJSON *d2_item = cJSON_GetObjectItem(root, "dns2"); + if (strcmp(type, "static") == 0) + { + cJSON* ip_item = cJSON_GetObjectItem(root, "ip"); + cJSON* gw_item = cJSON_GetObjectItem(root, "gateway"); + cJSON* sn_item = cJSON_GetObjectItem(root, "subnet"); + cJSON* d1_item = cJSON_GetObjectItem(root, "dns1"); + cJSON* d2_item = cJSON_GetObjectItem(root, "dns2"); const char* ip = cJSON_IsString(ip_item) ? ip_item->valuestring : NULL; const char* gw = cJSON_IsString(gw_item) ? gw_item->valuestring : NULL; @@ -175,27 +203,36 @@ static esp_err_t setting_post_handler(httpd_req_t *req) const char* d1 = cJSON_IsString(d1_item) ? d1_item->valuestring : NULL; const char* d2 = cJSON_IsString(d2_item) ? d2_item->valuestring : NULL; - if (ip && gw && sn && d1) { + if (ip && gw && sn && d1) + { nconfig_write(NETIF_TYPE, "static"); nconfig_write(NETIF_IP, ip); nconfig_write(NETIF_GATEWAY, gw); nconfig_write(NETIF_SUBNET, sn); nconfig_write(NETIF_DNS1, d1); - if (d2) nconfig_write(NETIF_DNS2, d2); else nconfig_delete(NETIF_DNS2); + if (d2) nconfig_write(NETIF_DNS2, d2); + else nconfig_delete(NETIF_DNS2); wifi_use_static(ip, gw, sn, d1, d2); httpd_resp_sendstr(req, "{\"status\":\"static_config_applied\"}"); - } else { + } + else + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Missing static IP fields"); } - } else if (strcmp(type, "dhcp") == 0) { + } + else if (strcmp(type, "dhcp") == 0) + { nconfig_write(NETIF_TYPE, "dhcp"); wifi_use_dhcp(); httpd_resp_sendstr(req, "{\"status\":\"dhcp_config_applied\"}"); } - } else if (ssid_item && cJSON_IsString(ssid_item)) { - cJSON *pass_item = cJSON_GetObjectItem(root, "password"); - if (cJSON_IsString(pass_item)) { + } + else if (ssid_item && cJSON_IsString(ssid_item)) + { + cJSON* pass_item = cJSON_GetObjectItem(root, "password"); + if (cJSON_IsString(pass_item)) + { nconfig_write(WIFI_SSID, ssid_item->valuestring); nconfig_write(WIFI_PASSWORD, pass_item->valuestring); nconfig_write(NETIF_TYPE, "dhcp"); // Default to DHCP on new connection @@ -204,16 +241,22 @@ static esp_err_t setting_post_handler(httpd_req_t *req) wifi_disconnect(); vTaskDelay(pdMS_TO_TICKS(500)); wifi_connect(); - } else { + } + else + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Password required"); } - } else if (baud_item && cJSON_IsString(baud_item)) { + } + else if (baud_item && cJSON_IsString(baud_item)) + { const char* baudrate = baud_item->valuestring; ESP_LOGI(TAG, "Received baudrate set request: %s", baudrate); nconfig_write(UART_BAUD_RATE, baudrate); change_baud_rate(strtol(baudrate, NULL, 10)); httpd_resp_sendstr(req, "{\"status\":\"baudrate_updated\"}"); - } else { + } + else + { httpd_resp_send_err(req, HTTPD_400_BAD_REQUEST, "Invalid payload"); } @@ -224,26 +267,26 @@ static esp_err_t setting_post_handler(httpd_req_t *req) void register_wifi_endpoint(httpd_handle_t server) { httpd_uri_t status = { - .uri = "/api/setting", - .method = HTTP_GET, - .handler = setting_get_handler, - .user_ctx = NULL + .uri = "/api/setting", + .method = HTTP_GET, + .handler = setting_get_handler, + .user_ctx = NULL }; httpd_register_uri_handler(server, &status); httpd_uri_t set = { - .uri = "/api/setting", - .method = HTTP_POST, - .handler = setting_post_handler, - .user_ctx = NULL + .uri = "/api/setting", + .method = HTTP_POST, + .handler = setting_post_handler, + .user_ctx = NULL }; httpd_register_uri_handler(server, &set); httpd_uri_t scan = { - .uri = "/api/wifi/scan", - .method = HTTP_GET, - .handler = wifi_scan, - .user_ctx = NULL + .uri = "/api/wifi/scan", + .method = HTTP_GET, + .handler = wifi_scan, + .user_ctx = NULL }; httpd_register_uri_handler(server, &scan); } diff --git a/main/service/sw.c b/main/service/sw.c new file mode 100644 index 0000000..0d57dba --- /dev/null +++ b/main/service/sw.c @@ -0,0 +1,157 @@ +// +// Created by vl011 on 2025-08-28. +// + +#include "sw.h" + +#include +#include +#include +#include +#include +#include + +#include "esp_log.h" +#include "esp_timer.h" +#include "pca9557.h" +#include "driver/gpio.h" + +#define I2C_PORT 0 + +#define GPIO_SDA CONFIG_I2C_GPIO_SDA +#define GPIO_SCL CONFIG_I2C_GPIO_SCL +#define GPIO_MAIN CONFIG_EXPANDER_GPIO_SW_12V +#define GPIO_USB CONFIG_EXPANDER_GPIO_SW_5V +#define GPIO_PWR CONFIG_EXPANDER_GPIO_TRIGGER_POWER +#define GPIO_RST CONFIG_EXPANDER_GPIO_TRIGGER_RESET + +#define POWER_DELAY (CONFIG_TRIGGER_POWER_DELAY_MS * 1000) +#define RESET_DELAY (CONFIG_TRIGGER_RESET_DELAY_MS * 1000) + +static const char* TAG = "control"; + +static bool load_switch_12v_status = false; +static bool load_switch_5v_status = false; + +static SemaphoreHandle_t expander_mutex; +#define MUTEX_TIMEOUT (pdMS_TO_TICKS(100)) + +static i2c_dev_t pca = {0}; + +static esp_timer_handle_t power_trigger_timer; +static esp_timer_handle_t reset_trigger_timer; + +static void trigger_off_callback(void* arg) +{ + if (xSemaphoreTake(expander_mutex, MUTEX_TIMEOUT) == pdFALSE) + { + ESP_LOGW(TAG, "Control error"); + return; + } + + uint32_t gpio_pin = (int)arg; + pca9557_set_level(&pca, gpio_pin, 1); + xSemaphoreGive(expander_mutex); +} + +void init_sw() +{ + ESP_ERROR_CHECK(pca9557_init_desc(&pca, 0x18, I2C_PORT, GPIO_SDA, GPIO_SCL)); + ESP_ERROR_CHECK(pca9557_set_mode(&pca, GPIO_MAIN, PCA9557_MODE_OUTPUT)); + ESP_ERROR_CHECK(pca9557_set_mode(&pca, GPIO_USB, PCA9557_MODE_OUTPUT)); + ESP_ERROR_CHECK(pca9557_set_mode(&pca, GPIO_PWR, PCA9557_MODE_OUTPUT)); + ESP_ERROR_CHECK(pca9557_set_mode(&pca, GPIO_RST, PCA9557_MODE_OUTPUT)); + + ESP_ERROR_CHECK(pca9557_set_level(&pca, GPIO_PWR, 1)); + ESP_ERROR_CHECK(pca9557_set_level(&pca, GPIO_RST, 1)); + + uint32_t val = 0; + ESP_ERROR_CHECK(pca9557_get_level(&pca, CONFIG_EXPANDER_GPIO_SW_12V, &val)); + load_switch_12v_status = val != 0 ? true : false; + ESP_ERROR_CHECK(pca9557_get_level(&pca, CONFIG_EXPANDER_GPIO_SW_5V, &val)); + load_switch_5v_status = val != 0 ? true : false; + + const esp_timer_create_args_t power_timer_args = { + .callback = &trigger_off_callback, + .arg = (void*)GPIO_PWR, + .name = "power_trigger_off" + }; + ESP_ERROR_CHECK(esp_timer_create(&power_timer_args, &power_trigger_timer)); + + const esp_timer_create_args_t reset_timer_args = { + .callback = &trigger_off_callback, + .arg = (void*)GPIO_RST, + .name = "power_trigger_off" + }; + ESP_ERROR_CHECK(esp_timer_create(&reset_timer_args, &reset_trigger_timer)); + + expander_mutex = xSemaphoreCreateMutex(); +} + +void trig_power() +{ + ESP_LOGI(TAG, "Trig power"); + if (xSemaphoreTake(expander_mutex, MUTEX_TIMEOUT) == pdFALSE) + { + ESP_LOGW(TAG, "Control error"); + return; + } + pca9557_set_level(&pca, GPIO_PWR, 0); + xSemaphoreGive(expander_mutex); + esp_timer_stop(power_trigger_timer); + esp_timer_start_once(power_trigger_timer, POWER_DELAY); +} + +void trig_reset() +{ + ESP_LOGI(TAG, "Trig reset"); + if (xSemaphoreTake(expander_mutex, MUTEX_TIMEOUT) == pdFALSE) + { + ESP_LOGW(TAG, "Control error"); + return; + } + pca9557_set_level(&pca, GPIO_RST, 0); + xSemaphoreGive(expander_mutex); + esp_timer_stop(reset_trigger_timer); + esp_timer_start_once(reset_trigger_timer, RESET_DELAY); +} + +void set_main_load_switch(bool on) +{ + ESP_LOGI(TAG, "Set main load switch to %s", on ? "on" : "off"); + if (load_switch_12v_status == on) return; + if (xSemaphoreTake(expander_mutex, MUTEX_TIMEOUT) == pdFALSE) + { + ESP_LOGW(TAG, "Control error"); + return; + } + pca9557_set_level(&pca, GPIO_MAIN, on); + xSemaphoreGive(expander_mutex); + load_switch_12v_status = on; + xSemaphoreGive(expander_mutex); +} + +void set_usb_load_switch(bool on) +{ + ESP_LOGI(TAG, "Set usb load switch to %s", on ? "on" : "off"); + if (load_switch_5v_status == on) return; + if (xSemaphoreTake(expander_mutex, MUTEX_TIMEOUT) == pdFALSE) + { + ESP_LOGW(TAG, "Control error"); + return; + } + pca9557_set_level(&pca, GPIO_USB, on); + xSemaphoreGive(expander_mutex); + load_switch_5v_status = on; + xSemaphoreGive(expander_mutex); +} + +bool get_main_load_switch() +{ + return load_switch_12v_status; +} + +bool get_usb_load_switch() +{ + return load_switch_5v_status; +} diff --git a/main/service/sw.h b/main/service/sw.h new file mode 100644 index 0000000..973f0bb --- /dev/null +++ b/main/service/sw.h @@ -0,0 +1,17 @@ +// +// Created by vl011 on 2025-08-28. +// + +#ifndef ODROID_POWER_MATE_SW_H +#define ODROID_POWER_MATE_SW_H +#include + +void init_sw(); +void trig_power(); +void trig_reset(); +void set_main_load_switch(bool on); +void set_usb_load_switch(bool on); +bool get_main_load_switch(); +bool get_usb_load_switch(); + +#endif //ODROID_POWER_MATE_SW_H diff --git a/main/service/webserver.c b/main/service/webserver.c index 347c4b5..87ce2aa 100644 --- a/main/service/webserver.c +++ b/main/service/webserver.c @@ -9,29 +9,30 @@ #include "nconfig.h" #include "monitor.h" #include "datalog.h" - #include "lwip/err.h" #include "lwip/sys.h" -static const char *TAG = "WEBSERVER"; +static const char* TAG = "WEBSERVER"; -static esp_err_t index_handler(httpd_req_t *req) { +static esp_err_t index_handler(httpd_req_t* req) +{ extern const unsigned char index_html_start[] asm("_binary_index_html_gz_start"); extern const unsigned char index_html_end[] asm("_binary_index_html_gz_end"); const size_t index_html_size = (index_html_end - index_html_start); httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); httpd_resp_set_type(req, "text/html"); - httpd_resp_send(req, (const char *)index_html_start, index_html_size); + httpd_resp_send(req, (const char*)index_html_start, index_html_size); return ESP_OK; } -static esp_err_t datalog_download_handler(httpd_req_t *req) +static esp_err_t datalog_download_handler(httpd_req_t* req) { - const char *filepath = datalog_get_path(); - FILE *f = fopen(filepath, "r"); - if (f == NULL) { + const char* filepath = datalog_get_path(); + FILE* f = fopen(filepath, "r"); + if (f == NULL) + { ESP_LOGE(TAG, "Failed to open datalog file for reading"); httpd_resp_send_404(req); return ESP_FAIL; @@ -42,8 +43,10 @@ static esp_err_t datalog_download_handler(httpd_req_t *req) char buffer[1024]; size_t bytes_read; - while ((bytes_read = fread(buffer, 1, sizeof(buffer), f)) > 0) { - if (httpd_resp_send_chunk(req, buffer, bytes_read) != ESP_OK) { + while ((bytes_read = fread(buffer, 1, sizeof(buffer), f)) > 0) + { + if (httpd_resp_send_chunk(req, buffer, bytes_read) != ESP_OK) + { ESP_LOGE(TAG, "File sending failed!"); fclose(f); httpd_resp_send_chunk(req, NULL, 0); @@ -57,31 +60,32 @@ static esp_err_t datalog_download_handler(httpd_req_t *req) return ESP_OK; } -// HTTP 서버 시작 -void start_webserver(void) { +void start_webserver(void) +{ httpd_handle_t server = NULL; httpd_config_t config = HTTPD_DEFAULT_CONFIG(); config.stack_size = 1024 * 8; config.max_uri_handlers = 10; - if (httpd_start(&server, &config) != ESP_OK) { - return ; + if (httpd_start(&server, &config) != ESP_OK) + { + return; } // Index page httpd_uri_t index = { - .uri = "/", - .method = HTTP_GET, - .handler = index_handler, - .user_ctx = NULL + .uri = "/", + .method = HTTP_GET, + .handler = index_handler, + .user_ctx = NULL }; httpd_register_uri_handler(server, &index); httpd_uri_t datalog_uri = { - .uri = "/datalog.csv", - .method = HTTP_GET, - .handler = datalog_download_handler, - .user_ctx = NULL + .uri = "/datalog.csv", + .method = HTTP_GET, + .handler = datalog_download_handler, + .user_ctx = NULL }; httpd_register_uri_handler(server, &datalog_uri); diff --git a/main/service/webserver.h b/main/service/webserver.h index 7983be7..a796980 100644 --- a/main/service/webserver.h +++ b/main/service/webserver.h @@ -6,12 +6,12 @@ #define ODROID_REMOTE_HTTP_WEBSERVER_H #include "cJSON.h" #include "esp_http_server.h" -#include "system.h" void register_wifi_endpoint(httpd_handle_t server); void register_ws_endpoint(httpd_handle_t server); void register_control_endpoint(httpd_handle_t server); -void push_data_to_ws(cJSON *data); +void push_data_to_ws(cJSON* data); +void register_reboot_endpoint(httpd_handle_t server); esp_err_t change_baud_rate(int baud_rate); -#endif //ODROID_REMOTE_HTTP_WEBSERVER_H \ No newline at end of file +#endif //ODROID_REMOTE_HTTP_WEBSERVER_H diff --git a/main/service/ws.c b/main/service/ws.c index 6e63803..3c3978b 100644 --- a/main/service/ws.c +++ b/main/service/ws.c @@ -17,13 +17,14 @@ #define UART_RX_PIN CONFIG_GPIO_UART_RX #define CHUNK_SIZE (1024) -static const char *TAG = "ws-uart"; +static const char* TAG = "ws-uart"; static int client_fd = -1; static SemaphoreHandle_t client_fd_mutex; // Unified message structure for the websocket queue -enum ws_message_type { +enum ws_message_type +{ WS_MSG_STATUS, WS_MSG_UART }; @@ -31,12 +32,17 @@ enum ws_message_type { struct ws_message { enum ws_message_type type; - union { - struct { - cJSON *data; + + union + { + struct + { + cJSON* data; } status; - struct { - uint8_t *data; + + struct + { + uint8_t* data; size_t len; } uart; } content; @@ -45,23 +51,29 @@ struct ws_message static QueueHandle_t ws_queue; // Unified task to send data from the queue to the websocket client -static void unified_ws_sender_task(void *arg) +static void unified_ws_sender_task(void* arg) { httpd_handle_t server = (httpd_handle_t)arg; struct ws_message msg; const TickType_t PING_INTERVAL = pdMS_TO_TICKS(5000); - while (1) { - if (xQueueReceive(ws_queue, &msg, PING_INTERVAL)) { + while (1) + { + if (xQueueReceive(ws_queue, &msg, PING_INTERVAL)) + { xSemaphoreTake(client_fd_mutex, portMAX_DELAY); int fd = client_fd; - if (fd <= 0) { + if (fd <= 0) + { xSemaphoreGive(client_fd_mutex); // Free memory if client is not connected - if (msg.type == WS_MSG_STATUS) { + if (msg.type == WS_MSG_STATUS) + { cJSON_Delete(msg.content.status.data); - } else { + } + else + { free(msg.content.uart.data); } continue; @@ -70,17 +82,20 @@ static void unified_ws_sender_task(void *arg) httpd_ws_frame_t ws_pkt = {0}; esp_err_t err = ESP_FAIL; - if (msg.type == WS_MSG_STATUS) { - char *json_string = cJSON_Print(msg.content.status.data); + if (msg.type == WS_MSG_STATUS) + { + char* json_string = cJSON_Print(msg.content.status.data); cJSON_Delete(msg.content.status.data); - ws_pkt.payload = (uint8_t *)json_string; + ws_pkt.payload = (uint8_t*)json_string; ws_pkt.len = strlen(json_string); ws_pkt.type = HTTPD_WS_TYPE_TEXT; err = httpd_ws_send_frame_async(server, fd, &ws_pkt); free(json_string); - - } else { // WS_MSG_UART + } + else + { + // WS_MSG_UART ws_pkt.payload = msg.content.uart.data; ws_pkt.len = msg.content.uart.len; ws_pkt.type = HTTPD_WS_TYPE_BINARY; @@ -88,24 +103,30 @@ static void unified_ws_sender_task(void *arg) free(msg.content.uart.data); } - if (err != ESP_OK) { - ESP_LOGW(TAG, "unified_ws_sender_task: async send failed for fd %d, error: %s", fd, esp_err_to_name(err)); + if (err != ESP_OK) + { + ESP_LOGW(TAG, "unified_ws_sender_task: async send failed for fd %d, error: %s", fd, + esp_err_to_name(err)); client_fd = -1; } xSemaphoreGive(client_fd_mutex); - - } else { + } + else + { // Queue receive timed out, send a PING to keep connection alive xSemaphoreTake(client_fd_mutex, portMAX_DELAY); int fd = client_fd; - if (fd > 0) { + if (fd > 0) + { httpd_ws_frame_t ping_pkt = {0}; ping_pkt.type = HTTPD_WS_TYPE_PING; ping_pkt.final = true; esp_err_t err = httpd_ws_send_frame_async(server, fd, &ping_pkt); - if (err != ESP_OK) { - ESP_LOGW(TAG, "Failed to send PING frame, closing connection for fd %d, error: %s", fd, esp_err_to_name(err)); + if (err != ESP_OK) + { + ESP_LOGW(TAG, "Failed to send PING frame, closing connection for fd %d, error: %s", fd, + esp_err_to_name(err)); client_fd = -1; } } @@ -114,23 +135,25 @@ static void unified_ws_sender_task(void *arg) } } -static void uart_polling_task(void *arg) +static void uart_polling_task(void* arg) { static uint8_t data_buf[BUF_SIZE]; const TickType_t MIN_POLLING_INTERVAL = pdMS_TO_TICKS(1); const TickType_t MAX_POLLING_INTERVAL = pdMS_TO_TICKS(10); const TickType_t READ_TIMEOUT = pdMS_TO_TICKS(5); - + TickType_t current_interval = MIN_POLLING_INTERVAL; int consecutive_empty_polls = 0; int cached_client_fd = -1; TickType_t last_client_check = 0; const TickType_t CLIENT_CHECK_INTERVAL = pdMS_TO_TICKS(100); - while(1) { + while (1) + { TickType_t current_time = xTaskGetTickCount(); - if (current_time - last_client_check >= CLIENT_CHECK_INTERVAL) { + if (current_time - last_client_check >= CLIENT_CHECK_INTERVAL) + { xSemaphoreTake(client_fd_mutex, portMAX_DELAY); cached_client_fd = client_fd; xSemaphoreGive(client_fd_mutex); @@ -139,20 +162,25 @@ static void uart_polling_task(void *arg) size_t available_len; esp_err_t err = uart_get_buffered_data_len(UART_NUM, &available_len); - - if (err != ESP_OK || available_len == 0) { + + if (err != ESP_OK || available_len == 0) + { consecutive_empty_polls++; - if (consecutive_empty_polls > 5) { + if (consecutive_empty_polls > 5) + { current_interval = MAX_POLLING_INTERVAL; - } else if (consecutive_empty_polls > 2) { + } + else if (consecutive_empty_polls > 2) + { current_interval = pdMS_TO_TICKS(5); } - - if (cached_client_fd <= 0) { + + if (cached_client_fd <= 0) + { vTaskDelay(pdMS_TO_TICKS(50)); continue; } - + vTaskDelay(current_interval); continue; } @@ -160,72 +188,88 @@ static void uart_polling_task(void *arg) consecutive_empty_polls = 0; current_interval = MIN_POLLING_INTERVAL; - if (cached_client_fd <= 0) { + if (cached_client_fd <= 0) + { uart_flush_input(UART_NUM); continue; } size_t total_processed = 0; - while (available_len > 0 && total_processed < BUF_SIZE) { - size_t read_size = (available_len > (BUF_SIZE - total_processed)) ? - (BUF_SIZE - total_processed) : available_len; - - int bytes_read = uart_read_bytes(UART_NUM, data_buf + total_processed, - read_size, READ_TIMEOUT); - - if (bytes_read <= 0) { + while (available_len > 0 && total_processed < BUF_SIZE) + { + size_t read_size = (available_len > (BUF_SIZE - total_processed)) + ? (BUF_SIZE - total_processed) + : available_len; + + int bytes_read = uart_read_bytes(UART_NUM, data_buf + total_processed, + read_size, READ_TIMEOUT); + + if (bytes_read <= 0) + { break; } - + total_processed += bytes_read; available_len -= bytes_read; uart_get_buffered_data_len(UART_NUM, &available_len); } - if (total_processed > 0) { + if (total_processed > 0) + { size_t offset = 0; - - while (offset < total_processed) { - const size_t chunk_size = (total_processed - offset > CHUNK_SIZE) ? - CHUNK_SIZE : (total_processed - offset); - + + while (offset < total_processed) + { + const size_t chunk_size = (total_processed - offset > CHUNK_SIZE) + ? CHUNK_SIZE + : (total_processed - offset); + struct ws_message msg; msg.type = WS_MSG_UART; msg.content.uart.data = malloc(chunk_size); - if (!msg.content.uart.data) { + if (!msg.content.uart.data) + { ESP_LOGE(TAG, "Failed to allocate memory for uart ws msg"); break; } - + memcpy(msg.content.uart.data, data_buf + offset, chunk_size); msg.content.uart.len = chunk_size; - if (xQueueSend(ws_queue, &msg, 0) != pdPASS) { - if (xQueueSend(ws_queue, &msg, pdMS_TO_TICKS(5)) != pdPASS) { + if (xQueueSend(ws_queue, &msg, 0) != pdPASS) + { + if (xQueueSend(ws_queue, &msg, pdMS_TO_TICKS(5)) != pdPASS) + { ESP_LOGW(TAG, "ws sender queue full, dropping %zu bytes", chunk_size); free(msg.content.uart.data); } } - + offset += chunk_size; } } - if (available_len > 0) { + if (available_len > 0) + { vTaskDelay(MIN_POLLING_INTERVAL); - } else { + } + else + { vTaskDelay(current_interval); } } - + vTaskDelete(NULL); } -static esp_err_t ws_handler(httpd_req_t *req) { - if (req->method == HTTP_GET) { +static esp_err_t ws_handler(httpd_req_t* req) +{ + if (req->method == HTTP_GET) + { xSemaphoreTake(client_fd_mutex, portMAX_DELAY); - if (client_fd > 0) { + if (client_fd > 0) + { // A client is already connected. Reject the new connection. ESP_LOGW(TAG, "Another client tried to connect, but a session is already active. Rejecting."); xSemaphoreGive(client_fd_mutex); @@ -251,17 +295,19 @@ static esp_err_t ws_handler(httpd_req_t *req) { ws_pkt.type = HTTPD_WS_TYPE_BINARY; esp_err_t ret = httpd_ws_recv_frame(req, &ws_pkt, BUF_SIZE); - if (ret != ESP_OK) { + if (ret != ESP_OK) + { ESP_LOGW(TAG, "httpd_ws_recv_frame failed with error: %s", esp_err_to_name(ret)); xSemaphoreTake(client_fd_mutex, portMAX_DELAY); - if (httpd_req_to_sockfd(req) == client_fd) { + if (httpd_req_to_sockfd(req) == client_fd) + { client_fd = -1; } xSemaphoreGive(client_fd_mutex); return ret; } - uart_write_bytes(UART_NUM, (const char *)ws_pkt.payload, ws_pkt.len); + uart_write_bytes(UART_NUM, (const char*)ws_pkt.payload, ws_pkt.len); return ESP_OK; } @@ -288,10 +334,10 @@ void register_ws_endpoint(httpd_handle_t server) ESP_ERROR_CHECK(uart_driver_install(UART_NUM, BUF_SIZE * 2, BUF_SIZE * 2, 0, NULL, 0)); httpd_uri_t ws = { - .uri = "/ws", - .method = HTTP_GET, - .handler = ws_handler, - .user_ctx = NULL, + .uri = "/ws", + .method = HTTP_GET, + .handler = ws_handler, + .user_ctx = NULL, .is_websocket = true }; httpd_register_uri_handler(server, &ws); @@ -299,11 +345,11 @@ void register_ws_endpoint(httpd_handle_t server) client_fd_mutex = xSemaphoreCreateMutex(); ws_queue = xQueueCreate(10, sizeof(struct ws_message)); // Combined queue - xTaskCreate(uart_polling_task, "uart_polling_task", 1024*4, NULL, 8, NULL); - xTaskCreate(unified_ws_sender_task, "ws_sender_task", 1024*6, server, 9, NULL); + xTaskCreate(uart_polling_task, "uart_polling_task", 1024 * 4, NULL, 8, NULL); + xTaskCreate(unified_ws_sender_task, "ws_sender_task", 1024 * 6, server, 9, NULL); } -void push_data_to_ws(cJSON *data) +void push_data_to_ws(cJSON* data) { struct ws_message msg; msg.type = WS_MSG_STATUS; diff --git a/main/system/system.c b/main/system/system.c index 97eb91b..934adf4 100644 --- a/main/system/system.c +++ b/main/system/system.c @@ -4,43 +4,83 @@ #include -#include -#include #include +#include +#include "esp_http_server.h" +#include "esp_system.h" +#include -static const char *TAG = "odroid"; -int t = 0; +static const char* TAG = "odroid"; -TaskHandle_t reboot_handle = NULL; +static esp_timer_handle_t reboot_timer_handle = NULL; -static void reboot_task(void *arg) +static void reboot_timer_callback(void* arg) { - while (t > 0) - { - ESP_LOGW(TAG, "ESP will reboot in [%d] sec..., If you want stop reboot, use command \"reboot -s\"", t); - vTaskDelay(1000 / portTICK_PERIOD_MS); - --t; - } + ESP_LOGI(TAG, "Rebooting now..."); esp_restart(); } void start_reboot_timer(int sec) { - - if (reboot_handle != NULL) + if (reboot_timer_handle != NULL) { ESP_LOGW(TAG, "The reboot timer is already running."); return; } - t = sec; - xTaskCreate(reboot_task, "reboot_task", 2048, NULL, 8, &reboot_handle); + + ESP_LOGI(TAG, "Device will reboot in %d seconds.", sec); + + const esp_timer_create_args_t reboot_timer_args = { + .callback = &reboot_timer_callback, + .name = "reboot-timer" + }; + + if (esp_timer_create(&reboot_timer_args, &reboot_timer_handle) != ESP_OK) + { + ESP_LOGE(TAG, "Failed to create reboot timer."); + reboot_timer_handle = NULL; + return; + } + + if (esp_timer_start_once(reboot_timer_handle, (uint64_t)sec * 1000000) != ESP_OK) + { + ESP_LOGE(TAG, "Failed to start reboot timer."); + esp_timer_delete(reboot_timer_handle); + reboot_timer_handle = NULL; + return; + } +} + +static esp_err_t reboot_post_handler(httpd_req_t* req) +{ + httpd_resp_set_type(req, "application/json"); + const char* resp_str = "{\"status\": \"reboot timer started\"}"; + httpd_resp_send(req, resp_str, strlen(resp_str)); + + start_reboot_timer(3); + + return ESP_OK; } void stop_reboot_timer() { - if (reboot_handle == NULL) + if (reboot_timer_handle == NULL) { return; } - vTaskDelete(reboot_handle); -} \ No newline at end of file + esp_timer_stop(reboot_timer_handle); + esp_timer_delete(reboot_timer_handle); + reboot_timer_handle = NULL; + ESP_LOGI(TAG, "Reboot timer stopped."); +} + +void register_reboot_endpoint(httpd_handle_t server) +{ + httpd_uri_t post_uri = { + .uri = "/api/reboot", + .method = HTTP_POST, + .handler = reboot_post_handler, + .user_ctx = NULL + }; + httpd_register_uri_handler(server, &post_uri); +} diff --git a/main/wifi/wifi.c b/main/wifi/wifi.c index 0c542b6..00cdcb5 100644 --- a/main/wifi/wifi.c +++ b/main/wifi/wifi.c @@ -23,7 +23,7 @@ #include "esp_netif_sntp.h" #include "rom/ets_sys.h" -static const char *TAG = "odroid"; +static const char* TAG = "odroid"; #define MAX_RETRY 10 #define MAX_SCAN 20 @@ -69,55 +69,57 @@ const char* auth_mode_str(wifi_auth_mode_t mode) } } -static const char* wifi_reason_str(wifi_err_reason_t reason) { - switch (reason) { - case WIFI_REASON_UNSPECIFIED: return "UNSPECIFIED"; - case WIFI_REASON_AUTH_EXPIRE: return "AUTH_EXPIRE"; - case WIFI_REASON_AUTH_LEAVE: return "AUTH_LEAVE"; - case WIFI_REASON_ASSOC_EXPIRE: return "ASSOC_EXPIRE"; - case WIFI_REASON_ASSOC_TOOMANY: return "ASSOC_TOOMANY"; - case WIFI_REASON_NOT_AUTHED: return "NOT_AUTHED"; - case WIFI_REASON_NOT_ASSOCED: return "NOT_ASSOCED"; - case WIFI_REASON_ASSOC_LEAVE: return "ASSOC_LEAVE"; - case WIFI_REASON_ASSOC_NOT_AUTHED: return "ASSOC_NOT_AUTHED"; - case WIFI_REASON_DISASSOC_PWRCAP_BAD: return "DISASSOC_PWRCAP_BAD"; - case WIFI_REASON_DISASSOC_SUPCHAN_BAD: return "DISASSOC_SUPCHAN_BAD"; - case WIFI_REASON_IE_INVALID: return "IE_INVALID"; - case WIFI_REASON_MIC_FAILURE: return "MIC_FAILURE"; - case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: return "4WAY_HANDSHAKE_TIMEOUT"; - case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: return "GROUP_KEY_UPDATE_TIMEOUT"; - case WIFI_REASON_IE_IN_4WAY_DIFFERS: return "IE_IN_4WAY_DIFFERS"; - case WIFI_REASON_GROUP_CIPHER_INVALID: return "GROUP_CIPHER_INVALID"; - case WIFI_REASON_PAIRWISE_CIPHER_INVALID: return "PAIRWISE_CIPHER_INVALID"; - case WIFI_REASON_AKMP_INVALID: return "AKMP_INVALID"; - case WIFI_REASON_UNSUPP_RSN_IE_VERSION: return "UNSUPP_RSN_IE_VERSION"; - case WIFI_REASON_INVALID_RSN_IE_CAP: return "INVALID_RSN_IE_CAP"; - case WIFI_REASON_802_1X_AUTH_FAILED: return "802_1X_AUTH_FAILED"; - case WIFI_REASON_CIPHER_SUITE_REJECTED: return "CIPHER_SUITE_REJECTED"; - case WIFI_REASON_INVALID_PMKID: return "INVALID_PMKID"; - case WIFI_REASON_BEACON_TIMEOUT: return "BEACON_TIMEOUT"; - case WIFI_REASON_NO_AP_FOUND: return "NO_AP_FOUND"; - case WIFI_REASON_AUTH_FAIL: return "AUTH_FAIL"; - case WIFI_REASON_ASSOC_FAIL: return "ASSOC_FAIL"; - case WIFI_REASON_HANDSHAKE_TIMEOUT: return "HANDSHAKE_TIMEOUT"; - case WIFI_REASON_CONNECTION_FAIL: return "CONNECTION_FAIL"; - case WIFI_REASON_AP_TSF_RESET: return "AP_TSF_RESET"; - case WIFI_REASON_ROAMING: return "ROAMING"; - default: return "UNKNOWN"; +static const char* wifi_reason_str(wifi_err_reason_t reason) +{ + switch (reason) + { + case WIFI_REASON_UNSPECIFIED: return "UNSPECIFIED"; + case WIFI_REASON_AUTH_EXPIRE: return "AUTH_EXPIRE"; + case WIFI_REASON_AUTH_LEAVE: return "AUTH_LEAVE"; + case WIFI_REASON_ASSOC_EXPIRE: return "ASSOC_EXPIRE"; + case WIFI_REASON_ASSOC_TOOMANY: return "ASSOC_TOOMANY"; + case WIFI_REASON_NOT_AUTHED: return "NOT_AUTHED"; + case WIFI_REASON_NOT_ASSOCED: return "NOT_ASSOCED"; + case WIFI_REASON_ASSOC_LEAVE: return "ASSOC_LEAVE"; + case WIFI_REASON_ASSOC_NOT_AUTHED: return "ASSOC_NOT_AUTHED"; + case WIFI_REASON_DISASSOC_PWRCAP_BAD: return "DISASSOC_PWRCAP_BAD"; + case WIFI_REASON_DISASSOC_SUPCHAN_BAD: return "DISASSOC_SUPCHAN_BAD"; + case WIFI_REASON_IE_INVALID: return "IE_INVALID"; + case WIFI_REASON_MIC_FAILURE: return "MIC_FAILURE"; + case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT: return "4WAY_HANDSHAKE_TIMEOUT"; + case WIFI_REASON_GROUP_KEY_UPDATE_TIMEOUT: return "GROUP_KEY_UPDATE_TIMEOUT"; + case WIFI_REASON_IE_IN_4WAY_DIFFERS: return "IE_IN_4WAY_DIFFERS"; + case WIFI_REASON_GROUP_CIPHER_INVALID: return "GROUP_CIPHER_INVALID"; + case WIFI_REASON_PAIRWISE_CIPHER_INVALID: return "PAIRWISE_CIPHER_INVALID"; + case WIFI_REASON_AKMP_INVALID: return "AKMP_INVALID"; + case WIFI_REASON_UNSUPP_RSN_IE_VERSION: return "UNSUPP_RSN_IE_VERSION"; + case WIFI_REASON_INVALID_RSN_IE_CAP: return "INVALID_RSN_IE_CAP"; + case WIFI_REASON_802_1X_AUTH_FAILED: return "802_1X_AUTH_FAILED"; + case WIFI_REASON_CIPHER_SUITE_REJECTED: return "CIPHER_SUITE_REJECTED"; + case WIFI_REASON_INVALID_PMKID: return "INVALID_PMKID"; + case WIFI_REASON_BEACON_TIMEOUT: return "BEACON_TIMEOUT"; + case WIFI_REASON_NO_AP_FOUND: return "NO_AP_FOUND"; + case WIFI_REASON_AUTH_FAIL: return "AUTH_FAIL"; + case WIFI_REASON_ASSOC_FAIL: return "ASSOC_FAIL"; + case WIFI_REASON_HANDSHAKE_TIMEOUT: return "HANDSHAKE_TIMEOUT"; + case WIFI_REASON_CONNECTION_FAIL: return "CONNECTION_FAIL"; + case WIFI_REASON_AP_TSF_RESET: return "AP_TSF_RESET"; + case WIFI_REASON_ROAMING: return "ROAMING"; + default: return "UNKNOWN"; } } -static esp_netif_t *wifi_sta_netif = NULL; -static esp_netif_t *wifi_ap_netif = NULL; +static esp_netif_t* wifi_sta_netif = NULL; +static esp_netif_t* wifi_ap_netif = NULL; static int s_retry_num = 0; static esp_err_t wifi_sta_do_disconnect(void); -static void sntp_sync_time_cb(struct timeval *tv) +static void sntp_sync_time_cb(struct timeval* tv) { time_t now = 0; - struct tm timeinfo = { 0 }; + struct tm timeinfo = {0}; time(&now); localtime_r(&now, &timeinfo); char strftime_buf[64]; @@ -125,11 +127,12 @@ static void sntp_sync_time_cb(struct timeval *tv) ESP_LOGI(TAG, "Time synchronized: %s", strftime_buf); } -static void handler_on_wifi_disconnect(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) +static void handler_on_wifi_disconnect(void* arg, esp_event_base_t event_base, + int32_t event_id, void* event_data) { s_retry_num++; - if (s_retry_num > MAX_RETRY) { + if (s_retry_num > MAX_RETRY) + { ESP_LOGW(TAG, "WiFi Connect failed %d times, stop reconnect.", s_retry_num); /* let example_wifi_sta_do_connect() return */ @@ -137,57 +140,63 @@ static void handler_on_wifi_disconnect(void *arg, esp_event_base_t event_base, start_reboot_timer(60); return; } - wifi_event_sta_disconnected_t *disconn = event_data; - if (disconn->reason == WIFI_REASON_ROAMING) { + wifi_event_sta_disconnected_t* disconn = event_data; + if (disconn->reason == WIFI_REASON_ROAMING) + { ESP_LOGD(TAG, "station roaming, do nothing"); return; } ESP_LOGW(TAG, "Wi-Fi disconnected, reason: (%s)", wifi_reason_str(disconn->reason)); ESP_LOGI(TAG, "Trying to reconnect..."); esp_err_t err = esp_wifi_connect(); - if (err == ESP_ERR_WIFI_NOT_STARTED) { + if (err == ESP_ERR_WIFI_NOT_STARTED) + { return; } ESP_ERROR_CHECK(err); } -static void handler_on_wifi_connect(void *esp_netif, esp_event_base_t event_base, - int32_t event_id, void *event_data) +static void handler_on_wifi_connect(void* esp_netif, esp_event_base_t event_base, + int32_t event_id, void* event_data) { - } -static void handler_on_sta_got_ip(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) +static void handler_on_sta_got_ip(void* arg, esp_event_base_t event_base, + int32_t event_id, void* event_data) { stop_reboot_timer(); s_retry_num = 0; - ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; - if (strcmp("sta", esp_netif_get_desc(event->esp_netif)) != 0) { + ip_event_got_ip_t* event = (ip_event_got_ip_t*)event_data; + if (strcmp("sta", esp_netif_get_desc(event->esp_netif)) != 0) + { return; } - ESP_LOGI(TAG, "Got IPv4 event: Interface \"%s\" address: " IPSTR, esp_netif_get_desc(event->esp_netif), IP2STR(&event->ip_info.ip)); + ESP_LOGI(TAG, "Got IPv4 event: Interface \"%s\" address: " IPSTR, esp_netif_get_desc(event->esp_netif), + IP2STR(&event->ip_info.ip)); ESP_LOGI(TAG, "- IPv4 address: " IPSTR ",", IP2STR(&event->ip_info.ip)); sync_time(); led_set(LED_BLU, BLINK_SOLID); } static void wifi_ap_event_handler(void* arg, esp_event_base_t event_base, - int32_t event_id, void* event_data) + int32_t event_id, void* event_data) { - if (event_id == WIFI_EVENT_AP_STACONNECTED) { - wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*) event_data; + if (event_id == WIFI_EVENT_AP_STACONNECTED) + { + wifi_event_ap_staconnected_t* event = (wifi_event_ap_staconnected_t*)event_data; ESP_LOGI(TAG, "station "MACSTR" join, AID=%d", MAC2STR(event->mac), event->aid); - } else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) { - wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*) event_data; + } + else if (event_id == WIFI_EVENT_AP_STADISCONNECTED) + { + wifi_event_ap_stadisconnected_t* event = (wifi_event_ap_stadisconnected_t*)event_data; ESP_LOGI(TAG, "station "MACSTR" leave, AID=%d", MAC2STR(event->mac), event->aid); } } -static esp_err_t set_hostname(esp_netif_t* esp_netif, const char *hostname) +static esp_err_t set_hostname(esp_netif_t* esp_netif, const char* hostname) { if (esp_netif_set_hostname(esp_netif, hostname) != ESP_OK) return ESP_FAIL; return ESP_OK; @@ -201,11 +210,13 @@ static void wifi_start(wifi_mode_t mode) wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); - if (mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) { + if (mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) + { esp_netif_inherent_config_t esp_netif_config = ESP_NETIF_INHERENT_DEFAULT_WIFI_STA(); wifi_sta_netif = esp_netif_create_wifi(WIFI_IF_STA, &esp_netif_config); - if (nconfig_read(NETIF_TYPE, type_buf, sizeof(type_buf)) == ESP_OK && strcmp(type_buf, "static") == 0) { + if (nconfig_read(NETIF_TYPE, type_buf, sizeof(type_buf)) == ESP_OK && strcmp(type_buf, "static") == 0) + { ESP_LOGI(TAG, "Using static IP configuration"); char ip_buf[16], gw_buf[16], mask_buf[16], dns1_buf[16], dns2_buf[16]; nconfig_read(NETIF_IP, ip_buf, sizeof(ip_buf)); @@ -217,7 +228,9 @@ static void wifi_start(wifi_mode_t mode) wifi_use_static(ip_buf, gw_buf, mask_buf, "8.8.8.8", "8.8.4.4"); else wifi_use_static(ip_buf, gw_buf, mask_buf, dns1, dns2); - } else { + } + else + { ESP_LOGI(TAG, "Using DHCP configuration"); wifi_use_dhcp(); } @@ -228,11 +241,14 @@ static void wifi_start(wifi_mode_t mode) set_hostname(wifi_sta_netif, buf); } - if (mode == WIFI_MODE_AP || mode == WIFI_MODE_APSTA) { + if (mode == WIFI_MODE_AP || mode == WIFI_MODE_APSTA) + { esp_netif_inherent_config_t esp_netif_config_ap = ESP_NETIF_INHERENT_DEFAULT_WIFI_AP(); wifi_ap_netif = esp_netif_create_wifi(WIFI_IF_AP, &esp_netif_config_ap); - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_AP_STACONNECTED, &wifi_ap_event_handler, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_AP_STADISCONNECTED, &wifi_ap_event_handler, NULL)); + ESP_ERROR_CHECK( + esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_AP_STACONNECTED, &wifi_ap_event_handler, NULL)); + ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_AP_STADISCONNECTED, &wifi_ap_event_handler, + NULL)); } esp_wifi_set_default_wifi_sta_handlers(); @@ -246,23 +262,27 @@ static void wifi_start(wifi_mode_t mode) static void wifi_stop(void) { esp_err_t err = esp_wifi_stop(); - if (err == ESP_ERR_WIFI_NOT_INIT) { + if (err == ESP_ERR_WIFI_NOT_INIT) + { return; } ESP_ERROR_CHECK(err); - if (wifi_ap_netif) { + if (wifi_ap_netif) + { esp_event_handler_unregister(WIFI_EVENT, WIFI_EVENT_AP_STACONNECTED, &wifi_ap_event_handler); esp_event_handler_unregister(WIFI_EVENT, WIFI_EVENT_AP_STADISCONNECTED, &wifi_ap_event_handler); } ESP_ERROR_CHECK(esp_wifi_deinit()); - if (wifi_sta_netif) { + if (wifi_sta_netif) + { esp_netif_destroy(wifi_sta_netif); wifi_sta_netif = NULL; } - if (wifi_ap_netif) { + if (wifi_ap_netif) + { esp_netif_destroy(wifi_ap_netif); wifi_ap_netif = NULL; } @@ -273,15 +293,18 @@ static esp_err_t wifi_sta_do_connect(wifi_config_t wifi_config) { stop_reboot_timer(); s_retry_num = 0; - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, handler_on_wifi_disconnect, NULL)); + ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, handler_on_wifi_disconnect, + NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, handler_on_sta_got_ip, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_CONNECTED, handler_on_wifi_connect, wifi_sta_netif)); + ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_CONNECTED, handler_on_wifi_connect, + wifi_sta_netif)); ESP_LOGI(TAG, "Connecting to %s...", (char*)wifi_config.sta.ssid); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); esp_err_t ret = esp_wifi_connect(); - if (ret != ESP_OK) { + if (ret != ESP_OK) + { ESP_LOGE(TAG, "WiFi connect failed! ret:%x", ret); return ret; } @@ -310,48 +333,65 @@ static esp_err_t do_connect(void) char mode_buf[16] = {0}; wifi_mode_t mode = WIFI_MODE_STA; // Default mode - if (nconfig_read(WIFI_MODE, mode_buf, sizeof(mode_buf)) == ESP_OK) { - if (strcmp(mode_buf, "apsta") == 0) { + if (nconfig_read(WIFI_MODE, mode_buf, sizeof(mode_buf)) == ESP_OK) + { + if (strcmp(mode_buf, "apsta") == 0) + { mode = WIFI_MODE_APSTA; ESP_LOGI(TAG, "Starting in APSTA mode"); - } else { // "sta" or anything else defaults to STA + } + else + { + // "sta" or anything else defaults to STA mode = WIFI_MODE_STA; ESP_LOGI(TAG, "Starting in STA mode"); } - } else { + } + else + { ESP_LOGI(TAG, "WIFI_MODE not set, defaulting to STA mode"); } wifi_start(mode); // Configure and connect STA interface if needed - if (mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) { + if (mode == WIFI_MODE_STA || mode == WIFI_MODE_APSTA) + { wifi_config_t sta_config = {0}; bool sta_creds_ok = false; - if (nconfig_read(WIFI_SSID, (char*)sta_config.sta.ssid, 32) == ESP_OK && strlen((char*)sta_config.sta.ssid) > 0) { - if (nconfig_read(WIFI_PASSWORD, (char*)sta_config.sta.password, 64) == ESP_OK) { + if (nconfig_read(WIFI_SSID, (char*)sta_config.sta.ssid, 32) == ESP_OK && strlen((char*)sta_config.sta.ssid) > 0) + { + if (nconfig_read(WIFI_PASSWORD, (char*)sta_config.sta.password, 64) == ESP_OK) + { sta_creds_ok = true; } } - if (sta_creds_ok) { + if (sta_creds_ok) + { err = wifi_sta_do_connect(sta_config); - if (err != ESP_OK && mode == WIFI_MODE_STA) { + if (err != ESP_OK && mode == WIFI_MODE_STA) + { // In STA-only mode, failure to connect is a fatal error return err; } - } else if (mode == WIFI_MODE_STA) { + } + else if (mode == WIFI_MODE_STA) + { // In STA-only mode, missing credentials is a fatal error ESP_LOGE(TAG, "Missing STA credentials in STA mode."); return ESP_FAIL; - } else { + } + else + { // In APSTA mode, missing credentials is a warning ESP_LOGW(TAG, "Missing STA credentials in APSTA mode. STA will not connect."); } } // Configure AP interface if needed - if (mode == WIFI_MODE_AP || mode == WIFI_MODE_APSTA) { + if (mode == WIFI_MODE_AP || mode == WIFI_MODE_APSTA) + { char ap_ssid[32], ap_pass[64]; wifi_config_t ap_config = { .ap = { @@ -362,15 +402,21 @@ static esp_err_t do_connect(void) }, }; - if (nconfig_read(AP_SSID, ap_ssid, sizeof(ap_ssid)) == ESP_OK && strlen(ap_ssid) > 0) { + if (nconfig_read(AP_SSID, ap_ssid, sizeof(ap_ssid)) == ESP_OK && strlen(ap_ssid) > 0) + { strcpy((char*)ap_config.ap.ssid, ap_ssid); - } else { + } + else + { strcpy((char*)ap_config.ap.ssid, "ODROID-REMOTE-AP"); } - if (nconfig_read(AP_PASSWORD, ap_pass, sizeof(ap_pass)) == ESP_OK && strlen(ap_pass) >= 8) { + if (nconfig_read(AP_PASSWORD, ap_pass, sizeof(ap_pass)) == ESP_OK && strlen(ap_pass) >= 8) + { strcpy((char*)ap_config.ap.password, ap_pass); - } else { + } + else + { ap_config.ap.authmode = WIFI_AUTH_OPEN; memset(ap_config.ap.password, 0, sizeof(ap_config.ap.password)); } @@ -388,13 +434,16 @@ esp_err_t wifi_connect(void) led_set(LED_BLU, BLINK_DOUBLE); static esp_sntp_config_t ntp_cfg = ESP_NETIF_SNTP_DEFAULT_CONFIG_MULTIPLE(3, - ESP_SNTP_SERVER_LIST("time.windows.com", "pool.ntp.org", "216.239.35.0")); // google public ntp + ESP_SNTP_SERVER_LIST( + "time.windows.com", "pool.ntp.org", + "216.239.35.0")); // google public ntp ntp_cfg.start = false; ntp_cfg.sync_cb = sntp_sync_time_cb; ntp_cfg.smooth_sync = true; // Sync immediately when started esp_netif_sntp_init(&ntp_cfg); - if (do_connect() != ESP_OK) { + if (do_connect() != ESP_OK) + { return ESP_FAIL; } ESP_ERROR_CHECK(esp_register_shutdown_handler(&wifi_shutdown)); @@ -409,12 +458,13 @@ esp_err_t wifi_disconnect(void) return ESP_OK; } -void wifi_scan_aps(wifi_ap_record_t **ap_records, uint16_t* count) +void wifi_scan_aps(wifi_ap_record_t** ap_records, uint16_t* count) { ESP_LOGI(TAG, "Starting WiFi scan..."); esp_err_t err = esp_wifi_scan_start(NULL, true); - if (err != ESP_OK) { + if (err != ESP_OK) + { ESP_LOGE(TAG, "esp_wifi_scan_start failed: %s", esp_err_to_name(err)); *count = 0; *ap_records = NULL; @@ -432,10 +482,11 @@ void wifi_scan_aps(wifi_ap_record_t **ap_records, uint16_t* count) ESP_LOGI(TAG, "Scan done"); } -esp_err_t wifi_get_current_ap_info(wifi_ap_record_t *ap_info) +esp_err_t wifi_get_current_ap_info(wifi_ap_record_t* ap_info) { esp_err_t ret = esp_wifi_sta_get_ap_info(ap_info); - if (ret != ESP_OK) { + if (ret != ESP_OK) + { // Clear ssid and set invalid rssi on error memset(ap_info->ssid, 0, sizeof(ap_info->ssid)); ap_info->rssi = -127; @@ -443,27 +494,30 @@ esp_err_t wifi_get_current_ap_info(wifi_ap_record_t *ap_info) return ret; } -esp_err_t wifi_get_current_ip_info(esp_netif_ip_info_t *ip_info) +esp_err_t wifi_get_current_ip_info(esp_netif_ip_info_t* ip_info) { return esp_netif_get_ip_info(wifi_sta_netif, ip_info); } -esp_err_t wifi_get_dns_info(esp_netif_dns_type_t type, esp_netif_dns_info_t *dns_info) +esp_err_t wifi_get_dns_info(esp_netif_dns_type_t type, esp_netif_dns_info_t* dns_info) { - if (wifi_sta_netif) { + if (wifi_sta_netif) + { return esp_netif_get_dns_info(wifi_sta_netif, type, dns_info); } return ESP_FAIL; } -esp_err_t wifi_use_static(const char *ip, const char *gw, const char *netmask, const char *dns1, const char *dns2) +esp_err_t wifi_use_static(const char* ip, const char* gw, const char* netmask, const char* dns1, const char* dns2) { - if (wifi_sta_netif == NULL) { + if (wifi_sta_netif == NULL) + { return ESP_FAIL; } esp_err_t err = esp_netif_dhcpc_stop(wifi_sta_netif); - if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) { + if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED) + { ESP_LOGE(TAG, "Failed to stop DHCP client: %s", esp_err_to_name(err)); return err; } @@ -473,23 +527,30 @@ esp_err_t wifi_use_static(const char *ip, const char *gw, const char *netmask, c inet_pton(AF_INET, gw, &ip_info.gw); inet_pton(AF_INET, netmask, &ip_info.netmask); err = esp_netif_set_ip_info(wifi_sta_netif, &ip_info); - if (err != ESP_OK) { + if (err != ESP_OK) + { ESP_LOGE(TAG, "Failed to set static IP info: %s", esp_err_to_name(err)); return err; } esp_netif_dns_info_t dns_info; - if (dns1 && strlen(dns1) > 0) { + if (dns1 && strlen(dns1) > 0) + { inet_pton(AF_INET, dns1, &dns_info.ip.u_addr.ip4); esp_netif_set_dns_info(wifi_sta_netif, ESP_NETIF_DNS_MAIN, &dns_info); - } else { + } + else + { esp_netif_set_dns_info(wifi_sta_netif, ESP_NETIF_DNS_MAIN, NULL); } - if (dns2 && strlen(dns2) > 0) { + if (dns2 && strlen(dns2) > 0) + { inet_pton(AF_INET, dns2, &dns_info.ip.u_addr.ip4); esp_netif_set_dns_info(wifi_sta_netif, ESP_NETIF_DNS_BACKUP, &dns_info); - } else { + } + else + { esp_netif_set_dns_info(wifi_sta_netif, ESP_NETIF_DNS_BACKUP, NULL); } @@ -498,11 +559,13 @@ esp_err_t wifi_use_static(const char *ip, const char *gw, const char *netmask, c esp_err_t wifi_use_dhcp(void) { - if (wifi_sta_netif == NULL) { + if (wifi_sta_netif == NULL) + { return ESP_FAIL; } esp_err_t err = esp_netif_dhcpc_start(wifi_sta_netif); - if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED) { + if (err != ESP_OK && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STARTED) + { ESP_LOGE(TAG, "Failed to start DHCP client: %s", esp_err_to_name(err)); return err; } @@ -511,14 +574,17 @@ esp_err_t wifi_use_dhcp(void) esp_err_t wifi_switch_mode(const char* mode) { - if (strcmp(mode, "sta") != 0 && strcmp(mode, "apsta") != 0) { + if (strcmp(mode, "sta") != 0 && strcmp(mode, "apsta") != 0) + { ESP_LOGE(TAG, "Invalid mode specified: %s. Use 'sta' or 'apsta'.", mode); return ESP_ERR_INVALID_ARG; } char current_mode_buf[16] = {0}; - if (nconfig_read(WIFI_MODE, current_mode_buf, sizeof(current_mode_buf)) == ESP_OK) { - if (strcmp(current_mode_buf, mode) == 0) { + if (nconfig_read(WIFI_MODE, current_mode_buf, sizeof(current_mode_buf)) == ESP_OK) + { + if (strcmp(current_mode_buf, mode) == 0) + { ESP_LOGI(TAG, "Already in %s mode.", mode); return ESP_OK; } @@ -527,14 +593,16 @@ esp_err_t wifi_switch_mode(const char* mode) ESP_LOGI(TAG, "Switching Wi-Fi mode to %s.", mode); esp_err_t err = nconfig_write(WIFI_MODE, mode); - if (err != ESP_OK) { + if (err != ESP_OK) + { ESP_LOGE(TAG, "Failed to save new Wi-Fi mode to NVS"); return err; } wifi_disconnect(); err = wifi_connect(); - if (err != ESP_OK) { + if (err != ESP_OK) + { ESP_LOGE(TAG, "Failed to connect in new mode %s", mode); return err; } diff --git a/page/index.html b/page/index.html index c8f3c91..9ea737c 100644 --- a/page/index.html +++ b/page/index.html @@ -71,7 +71,7 @@
  • - Main Power (12V) + Main Power
    @@ -79,7 +79,7 @@
  • - USB Power (5V) + USB Power
    @@ -111,7 +111,7 @@ -
    Power Input
    +
    Power Metrics
    @@ -251,7 +251,7 @@
    - + \ No newline at end of file diff --git a/page/src/chart.js b/page/src/chart.js index 432859a..f35dd2f 100644 --- a/page/src/chart.js +++ b/page/src/chart.js @@ -17,6 +17,7 @@ export const charts = { current: null }; +const channelKeys = ['USB', 'MAIN', 'VIN']; const CHART_DATA_POINTS = 30; // Number of data points to display on the chart /** @@ -53,10 +54,10 @@ function createChartOptions(title, minValue, maxValue) { }, scales: { x: { ticks: { autoSkipPadding: 10, maxRotation: 0, minRotation: 0 } }, - y: { + y: { min: minValue, max: maxValue, - beginAtZero: false, + beginAtZero: true, // Start at zero for better comparison ticks: { stepSize: (maxValue - minValue) / 8 } @@ -65,6 +66,23 @@ function createChartOptions(title, minValue, maxValue) { }; } +/** + * Creates the dataset objects for a chart. + * @param {string} unit - The unit for the dataset label (e.g., 'W', 'V', 'A'). + * @returns {Array} An array of Chart.js dataset objects. + */ +function createDatasets(unit) { + return channelKeys.map(channel => ({ + label: `${channel} (${unit})`, + data: initialData(), + borderWidth: 2, + fill: false, + tension: 0.2, + pointRadius: 2 + })); +} + + /** * Initializes all three charts (Power, Voltage, Current). * If chart instances already exist, they are destroyed and new ones are created. @@ -79,15 +97,12 @@ export function initCharts() { // Create Power Chart if (powerChartCtx) { - const powerOptions = createChartOptions('Power', 0, 120); + const powerOptions = createChartOptions('Power', 0, 50); // Adjusted max value charts.power = new Chart(powerChartCtx, { type: 'line', data: { labels: initialLabels(), - datasets: [ - { label: 'Power (W)', data: initialData(), borderWidth: 2, fill: false, tension: 0.2, pointRadius: 2 }, - { label: 'Avg Power', data: initialData(), borderWidth: 1.5, borderDash: [10, 5], fill: false, tension: 0, pointRadius: 0 } - ] + datasets: createDatasets('W') }, options: powerOptions }); @@ -100,10 +115,7 @@ export function initCharts() { type: 'line', data: { labels: initialLabels(), - datasets: [ - { label: 'Voltage (V)', data: initialData(), borderWidth: 2, fill: false, tension: 0.2, pointRadius: 2 }, - { label: 'Avg Voltage', data: initialData(), borderWidth: 1.5, borderDash: [10, 5], fill: false, tension: 0, pointRadius: 0 } - ] + datasets: createDatasets('V') }, options: voltageOptions }); @@ -111,15 +123,12 @@ export function initCharts() { // Create Current Chart if (currentChartCtx) { - const currentOptions = createChartOptions('Current', 0, 7); + const currentOptions = createChartOptions('Current', 0, 5); // Adjusted max value charts.current = new Chart(currentChartCtx, { type: 'line', data: { labels: initialLabels(), - datasets: [ - { label: 'Current (A)', data: initialData(), borderWidth: 2, fill: false, tension: 0.2, pointRadius: 2 }, - { label: 'Avg Current', data: initialData(), borderWidth: 1.5, borderDash: [10, 5], fill: false, tension: 0, pointRadius: 0 } - ] + datasets: createDatasets('A') }, options: currentOptions }); @@ -135,11 +144,14 @@ export function applyChartsTheme(themeName) { const gridColor = isDark ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)'; const labelColor = isDark ? '#dee2e6' : '#212529'; - const powerColor = getComputedStyle(htmlEl).getPropertyValue('--chart-power-color'); - const voltageColor = getComputedStyle(htmlEl).getPropertyValue('--chart-voltage-color'); - const currentColor = getComputedStyle(htmlEl).getPropertyValue('--chart-current-color'); + // Define colors for each channel. These could be from CSS variables. + const channelColors = [ + getComputedStyle(htmlEl).getPropertyValue('--chart-usb-color').trim() || '#0d6efd', // Blue + getComputedStyle(htmlEl).getPropertyValue('--chart-main-color').trim() || '#198754', // Green + getComputedStyle(htmlEl).getPropertyValue('--chart-vin-color').trim() || '#dc3545' // Red + ]; - const updateThemeForChart = (chart, color) => { + const updateThemeForChart = (chart) => { if (!chart) return; chart.options.scales.x.grid.color = gridColor; chart.options.scales.y.grid.color = gridColor; @@ -147,15 +159,17 @@ export function applyChartsTheme(themeName) { chart.options.scales.y.ticks.color = labelColor; chart.options.plugins.legend.labels.color = labelColor; chart.options.plugins.title.color = labelColor; - chart.data.datasets[0].borderColor = color; - chart.data.datasets[1].borderColor = color; - chart.data.datasets[1].borderDash = [10, 5]; + + chart.data.datasets.forEach((dataset, index) => { + dataset.borderColor = channelColors[index]; + }); + chart.update('none'); }; - updateThemeForChart(charts.power, powerColor); - updateThemeForChart(charts.voltage, voltageColor); - updateThemeForChart(charts.current, currentColor); + updateThemeForChart(charts.power); + updateThemeForChart(charts.voltage); + updateThemeForChart(charts.current); } /** @@ -165,7 +179,7 @@ export function applyChartsTheme(themeName) { export function updateCharts(data) { const timeLabel = new Date(data.timestamp * 1000).toLocaleTimeString(); - const updateSingleChart = (chart, value) => { + const updateSingleChart = (chart, metric) => { if (!chart) return; // Shift old data @@ -174,18 +188,15 @@ export function updateCharts(data) { // Push new data chart.data.labels.push(timeLabel); - chart.data.datasets[0].data.push(value.toFixed(2)); - // Calculate average - const dataArray = chart.data.datasets[0].data.filter(v => v !== null).map(v => parseFloat(v)); - if (dataArray.length > 0) { - const sum = dataArray.reduce((acc, val) => acc + val, 0); - const avg = (sum / dataArray.length).toFixed(2); - chart.data.datasets[1].data.push(avg); - - } else { - chart.data.datasets[1].data.push(null); - } + channelKeys.forEach((key, index) => { + if (data[key] && data[key][metric] !== undefined) { + const value = data[key][metric]; + chart.data.datasets[index].data.push(value.toFixed(2)); + } else { + chart.data.datasets[index].data.push(null); // Push null if data for a channel is missing + } + }); // Only update the chart if the tab is visible if (graphTabPane.classList.contains('show')) { @@ -193,9 +204,9 @@ export function updateCharts(data) { } }; - updateSingleChart(charts.power, data.power); - updateSingleChart(charts.voltage, data.voltage); - updateSingleChart(charts.current, data.current); + updateSingleChart(charts.power, 'power'); + updateSingleChart(charts.voltage, 'voltage'); + updateSingleChart(charts.current, 'current'); } /** diff --git a/page/src/main.js b/page/src/main.js index 492f448..c0b12e1 100644 --- a/page/src/main.js +++ b/page/src/main.js @@ -34,7 +34,6 @@ function onWsOpen() { if (term) { term.write('\x1b[32mConnected to WebSocket Server\x1b[0m\r\n'); } - updateControlStatus(); } /** @@ -92,6 +91,9 @@ function initialize() { const savedTheme = localStorage.getItem('theme') || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); applyTheme(savedTheme); + // Fetch initial status on page load + updateControlStatus(); + // Establish the WebSocket connection with the defined handlers initWebSocket({ onOpen: onWsOpen, diff --git a/page/src/style.css b/page/src/style.css index f9ad2f0..fff0746 100644 --- a/page/src/style.css +++ b/page/src/style.css @@ -1,15 +1,17 @@ :root { --bs-body-font-family: 'Courier New', Courier, monospace; - --chart-power-color: #007bff; - --chart-voltage-color: #28a745; - --chart-current-color: #ffc107; + /* Chart Channel Colors */ + --chart-usb-color: #0d6efd; /* Bootstrap Blue */ + --chart-main-color: #198754; /* Bootstrap Green */ + --chart-vin-color: #dc3545; /* Bootstrap Red */ } [data-bs-theme="dark"] { - --chart-power-color: #569cd6; - --chart-voltage-color: #4ec9b0; - --chart-current-color: #dcdcaa; + /* Chart Channel Colors for Dark Theme */ + --chart-usb-color: #569cd6; /* A lighter blue for dark backgrounds */ + --chart-main-color: #4ec9b0; /* A teal/cyan for dark backgrounds */ + --chart-vin-color: #d16969; /* A softer red for dark backgrounds */ } body, .card, .modal-content, .list-group-item, .nav-tabs .nav-link { diff --git a/page/src/ui.js b/page/src/ui.js index 2c031cb..97551c8 100644 --- a/page/src/ui.js +++ b/page/src/ui.js @@ -40,12 +40,18 @@ export function applyTheme(themeName) { * @param {Object} data - The sensor data object from the WebSocket. */ export function updateSensorUI(data) { - dom.voltageDisplay.textContent = `${data.voltage.toFixed(2)} V`; - dom.currentDisplay.textContent = `${data.current.toFixed(2)} A`; - dom.powerDisplay.textContent = `${data.power.toFixed(2)} W`; + // Display VIN channel data in the header as a primary overview + if (data.VIN) { + dom.voltageDisplay.textContent = `${data.VIN.voltage.toFixed(2)} V`; + dom.currentDisplay.textContent = `${data.VIN.current.toFixed(2)} A`; + dom.powerDisplay.textContent = `${data.VIN.power.toFixed(2)} W`; + } + if (data.uptime_sec !== undefined) { dom.uptimeDisplay.textContent = formatUptime(data.uptime_sec); } + + // Pass the entire multi-channel data object to the charts updateCharts(data); } diff --git a/sdkconfig b/sdkconfig deleted file mode 100644 index 80ff0ee..0000000 --- a/sdkconfig +++ /dev/null @@ -1,2106 +0,0 @@ -# -# Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.4.0 Project Configuration -# -CONFIG_SOC_ADC_SUPPORTED=y -CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y -CONFIG_SOC_UART_SUPPORTED=y -CONFIG_SOC_GDMA_SUPPORTED=y -CONFIG_SOC_AHB_GDMA_SUPPORTED=y -CONFIG_SOC_GPTIMER_SUPPORTED=y -CONFIG_SOC_TWAI_SUPPORTED=y -CONFIG_SOC_BT_SUPPORTED=y -CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y -CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y -CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y -CONFIG_SOC_XT_WDT_SUPPORTED=y -CONFIG_SOC_PHY_SUPPORTED=y -CONFIG_SOC_WIFI_SUPPORTED=y -CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y -CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y -CONFIG_SOC_EFUSE_HAS_EFUSE_RST_BUG=y -CONFIG_SOC_EFUSE_SUPPORTED=y -CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y -CONFIG_SOC_RTC_MEM_SUPPORTED=y -CONFIG_SOC_I2S_SUPPORTED=y -CONFIG_SOC_RMT_SUPPORTED=y -CONFIG_SOC_SDM_SUPPORTED=y -CONFIG_SOC_GPSPI_SUPPORTED=y -CONFIG_SOC_LEDC_SUPPORTED=y -CONFIG_SOC_I2C_SUPPORTED=y -CONFIG_SOC_SYSTIMER_SUPPORTED=y -CONFIG_SOC_SUPPORT_COEXISTENCE=y -CONFIG_SOC_AES_SUPPORTED=y -CONFIG_SOC_MPI_SUPPORTED=y -CONFIG_SOC_SHA_SUPPORTED=y -CONFIG_SOC_HMAC_SUPPORTED=y -CONFIG_SOC_DIG_SIGN_SUPPORTED=y -CONFIG_SOC_FLASH_ENC_SUPPORTED=y -CONFIG_SOC_SECURE_BOOT_SUPPORTED=y -CONFIG_SOC_MEMPROT_SUPPORTED=y -CONFIG_SOC_BOD_SUPPORTED=y -CONFIG_SOC_CLK_TREE_SUPPORTED=y -CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y -CONFIG_SOC_WDT_SUPPORTED=y -CONFIG_SOC_SPI_FLASH_SUPPORTED=y -CONFIG_SOC_RNG_SUPPORTED=y -CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y -CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y -CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y -CONFIG_SOC_PM_SUPPORTED=y -CONFIG_SOC_XTAL_SUPPORT_40M=y -CONFIG_SOC_AES_SUPPORT_DMA=y -CONFIG_SOC_AES_GDMA=y -CONFIG_SOC_AES_SUPPORT_AES_128=y -CONFIG_SOC_AES_SUPPORT_AES_256=y -CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y -CONFIG_SOC_ADC_ARBITER_SUPPORTED=y -CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y -CONFIG_SOC_ADC_MONITOR_SUPPORTED=y -CONFIG_SOC_ADC_DMA_SUPPORTED=y -CONFIG_SOC_ADC_PERIPH_NUM=2 -CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5 -CONFIG_SOC_ADC_ATTEN_NUM=4 -CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1 -CONFIG_SOC_ADC_PATT_LEN_MAX=8 -CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 -CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 -CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 -CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 -CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 -CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 -CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 -CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y -CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y -CONFIG_SOC_ADC_SHARED_POWER=y -CONFIG_SOC_APB_BACKUP_DMA=y -CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y -CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y -CONFIG_SOC_CACHE_MEMORY_IBANK_SIZE=0x4000 -CONFIG_SOC_CPU_CORES_NUM=1 -CONFIG_SOC_CPU_INTR_NUM=32 -CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y -CONFIG_SOC_CPU_HAS_CSR_PC=y -CONFIG_SOC_CPU_BREAKPOINTS_NUM=8 -CONFIG_SOC_CPU_WATCHPOINTS_NUM=8 -CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000 -CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=3072 -CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 -CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_AHB_GDMA_VERSION=1 -CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 -CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=3 -CONFIG_SOC_GPIO_PORT=1 -CONFIG_SOC_GPIO_PIN_COUNT=22 -CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y -CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y -CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y -CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y -CONFIG_SOC_GPIO_IN_RANGE_MAX=21 -CONFIG_SOC_GPIO_OUT_RANGE_MAX=21 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0 -CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6 -CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000003FFFC0 -CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y -CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 -CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y -CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 -CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y -CONFIG_SOC_I2C_NUM=1 -CONFIG_SOC_HP_I2C_NUM=1 -CONFIG_SOC_I2C_FIFO_LEN=32 -CONFIG_SOC_I2C_CMD_REG_NUM=8 -CONFIG_SOC_I2C_SUPPORT_SLAVE=y -CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y -CONFIG_SOC_I2C_SUPPORT_XTAL=y -CONFIG_SOC_I2C_SUPPORT_RTC=y -CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y -CONFIG_SOC_I2C_SLAVE_CAN_GET_STRETCH_CAUSE=y -CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y -CONFIG_SOC_I2S_NUM=1 -CONFIG_SOC_I2S_HW_VERSION_2=y -CONFIG_SOC_I2S_SUPPORTS_XTAL=y -CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y -CONFIG_SOC_I2S_SUPPORTS_PCM=y -CONFIG_SOC_I2S_SUPPORTS_PDM=y -CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y -CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 -CONFIG_SOC_I2S_SUPPORTS_TDM=y -CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y -CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y -CONFIG_SOC_LEDC_TIMER_NUM=4 -CONFIG_SOC_LEDC_CHANNEL_NUM=6 -CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 -CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y -CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 -CONFIG_SOC_MMU_PERIPH_NUM=1 -CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 -CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 -CONFIG_SOC_RMT_GROUPS=1 -CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=2 -CONFIG_SOC_RMT_CHANNELS_PER_GROUP=4 -CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 -CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y -CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y -CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y -CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y -CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y -CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y -CONFIG_SOC_RMT_SUPPORT_XTAL=y -CONFIG_SOC_RMT_SUPPORT_APB=y -CONFIG_SOC_RMT_SUPPORT_RC_FAST=y -CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 -CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108 -CONFIG_SOC_SLEEP_SYSTIMER_STALL_WORKAROUND=y -CONFIG_SOC_SLEEP_TGWDT_STOP_WORKAROUND=y -CONFIG_SOC_RTCIO_PIN_COUNT=0 -CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 -CONFIG_SOC_MPI_OPERATIONS_NUM=3 -CONFIG_SOC_RSA_MAX_BIT_LEN=3072 -CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 -CONFIG_SOC_SHA_SUPPORT_DMA=y -CONFIG_SOC_SHA_SUPPORT_RESUME=y -CONFIG_SOC_SHA_GDMA=y -CONFIG_SOC_SHA_SUPPORT_SHA1=y -CONFIG_SOC_SHA_SUPPORT_SHA224=y -CONFIG_SOC_SHA_SUPPORT_SHA256=y -CONFIG_SOC_SDM_GROUPS=1 -CONFIG_SOC_SDM_CHANNELS_PER_GROUP=4 -CONFIG_SOC_SDM_CLK_SUPPORT_APB=y -CONFIG_SOC_SPI_PERIPH_NUM=2 -CONFIG_SOC_SPI_MAX_CS_NUM=6 -CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 -CONFIG_SOC_SPI_SUPPORT_DDRCLK=y -CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y -CONFIG_SOC_SPI_SUPPORT_CD_SIG=y -CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y -CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y -CONFIG_SOC_SPI_SUPPORT_CLK_APB=y -CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y -CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y -CONFIG_SOC_SPI_SCT_SUPPORTED=y -CONFIG_SOC_SPI_SCT_REG_NUM=14 -CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y -CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA -CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y -CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y -CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y -CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y -CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y -CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y -CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y -CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y -CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y -CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 -CONFIG_SOC_SYSTIMER_ALARM_NUM=3 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 -CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 -CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y -CONFIG_SOC_SYSTIMER_INT_LEVEL=y -CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y -CONFIG_SOC_TIMER_GROUPS=2 -CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1 -CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 -CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y -CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y -CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=2 -CONFIG_SOC_MWDT_SUPPORT_XTAL=y -CONFIG_SOC_TWAI_CONTROLLER_NUM=1 -CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y -CONFIG_SOC_TWAI_BRP_MIN=2 -CONFIG_SOC_TWAI_BRP_MAX=16384 -CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y -CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y -CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y -CONFIG_SOC_EFUSE_DIS_USB_JTAG=y -CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y -CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y -CONFIG_SOC_EFUSE_DIS_ICACHE=y -CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y -CONFIG_SOC_SECURE_BOOT_V2_RSA=y -CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 -CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y -CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y -CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y -CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y -CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 -CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=512 -CONFIG_SOC_UART_NUM=2 -CONFIG_SOC_UART_HP_NUM=2 -CONFIG_SOC_UART_FIFO_LEN=128 -CONFIG_SOC_UART_BITRATE_MAX=5000000 -CONFIG_SOC_UART_SUPPORT_APB_CLK=y -CONFIG_SOC_UART_SUPPORT_RTC_CLK=y -CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y -CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y -CONFIG_SOC_COEX_HW_PTI=y -CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 -CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 -CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 -CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y -CONFIG_SOC_PM_SUPPORT_CPU_PD=y -CONFIG_SOC_PM_SUPPORT_WIFI_PD=y -CONFIG_SOC_PM_SUPPORT_BT_PD=y -CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y -CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y -CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y -CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y -CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y -CONFIG_SOC_PM_MODEM_PD_BY_SW=y -CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y -CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y -CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y -CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y -CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_XTAL=y -CONFIG_SOC_WIFI_HW_TSF=y -CONFIG_SOC_WIFI_FTM_SUPPORT=y -CONFIG_SOC_WIFI_GCMP_SUPPORT=y -CONFIG_SOC_WIFI_WAPI_SUPPORT=y -CONFIG_SOC_WIFI_CSI_SUPPORT=y -CONFIG_SOC_WIFI_MESH_SUPPORT=y -CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y -CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y -CONFIG_SOC_BLE_SUPPORTED=y -CONFIG_SOC_BLE_MESH_SUPPORTED=y -CONFIG_SOC_BLE_50_SUPPORTED=y -CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y -CONFIG_SOC_BLUFI_SUPPORTED=y -CONFIG_SOC_PHY_COMBO_MODULE=y -CONFIG_IDF_CMAKE=y -CONFIG_IDF_TOOLCHAIN="gcc" -CONFIG_IDF_TOOLCHAIN_GCC=y -CONFIG_IDF_TARGET_ARCH_RISCV=y -CONFIG_IDF_TARGET_ARCH="riscv" -CONFIG_IDF_TARGET="esp32c3" -CONFIG_IDF_INIT_VERSION="5.4.0" -CONFIG_IDF_TARGET_ESP32C3=y -CONFIG_IDF_FIRMWARE_CHIP_ID=0x0005 - -# -# Build type -# -CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y -# CONFIG_APP_BUILD_TYPE_RAM is not set -CONFIG_APP_BUILD_GENERATE_BINARIES=y -CONFIG_APP_BUILD_BOOTLOADER=y -CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y -# CONFIG_APP_REPRODUCIBLE_BUILD is not set -# CONFIG_APP_NO_BLOBS is not set -# end of Build type - -# -# Bootloader config -# - -# -# Bootloader manager -# -CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y -CONFIG_BOOTLOADER_PROJECT_VER=1 -# end of Bootloader manager - -CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set -CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF=y -# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set - -# -# Log -# -# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set -CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y -# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set -# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set -CONFIG_BOOTLOADER_LOG_LEVEL=3 - -# -# Format -# -# CONFIG_BOOTLOADER_LOG_COLORS is not set -CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y -# end of Format -# end of Log - -# -# Serial Flash Configurations -# -# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set -CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y -# end of Serial Flash Configurations - -# CONFIG_BOOTLOADER_FACTORY_RESET is not set -# CONFIG_BOOTLOADER_APP_TEST is not set -CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y -CONFIG_BOOTLOADER_WDT_ENABLE=y -# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set -CONFIG_BOOTLOADER_WDT_TIME_MS=9000 -# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set -# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set -CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 -# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set -# end of Bootloader config - -# -# Security features -# -CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y -CONFIG_SECURE_BOOT_V2_PREFERRED=y -# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set -# CONFIG_SECURE_BOOT is not set -# CONFIG_SECURE_FLASH_ENC_ENABLED is not set -CONFIG_SECURE_ROM_DL_MODE_ENABLED=y -# end of Security features - -# -# Application manager -# -CONFIG_APP_COMPILE_TIME_DATE=y -# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set -# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set -# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set -CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9 -# end of Application manager - -CONFIG_ESP_ROM_HAS_CRC_LE=y -CONFIG_ESP_ROM_HAS_CRC_BE=y -CONFIG_ESP_ROM_HAS_MZ_CRC32=y -CONFIG_ESP_ROM_HAS_JPEG_DECODE=y -CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y -CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=3 -CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y -CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y -CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y -CONFIG_ESP_ROM_GET_CLK_FREQ=y -CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y -CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y -CONFIG_ESP_ROM_HAS_SPI_FLASH=y -CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y -CONFIG_ESP_ROM_HAS_NEWLIB=y -CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y -CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y -CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y -CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y -CONFIG_ESP_ROM_HAS_SW_FLOAT=y -CONFIG_ESP_ROM_USB_OTG_NUM=-1 -CONFIG_ESP_ROM_HAS_VERSION=y -CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y - -# -# Boot ROM Behavior -# -CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y -# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set -# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set -# end of Boot ROM Behavior - -# -# Serial flasher config -# -# CONFIG_ESPTOOLPY_NO_STUB is not set -CONFIG_ESPTOOLPY_FLASHMODE_QIO=y -# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DIO is not set -# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set -CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y -CONFIG_ESPTOOLPY_FLASHMODE="dio" -CONFIG_ESPTOOLPY_FLASHFREQ_80M=y -# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set -# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set -CONFIG_ESPTOOLPY_FLASHFREQ="80m" -# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y -# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" -# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set -CONFIG_ESPTOOLPY_BEFORE_RESET=y -# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set -CONFIG_ESPTOOLPY_BEFORE="default_reset" -CONFIG_ESPTOOLPY_AFTER_RESET=y -# CONFIG_ESPTOOLPY_AFTER_NORESET is not set -CONFIG_ESPTOOLPY_AFTER="hard_reset" -CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 -# end of Serial flasher config - -# -# Partition Table -# -# CONFIG_PARTITION_TABLE_SINGLE_APP is not set -# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set -# CONFIG_PARTITION_TABLE_TWO_OTA is not set -# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set -CONFIG_PARTITION_TABLE_CUSTOM=y -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_OFFSET=0x8000 -CONFIG_PARTITION_TABLE_MD5=y -# end of Partition Table - -# -# Compiler options -# -CONFIG_COMPILER_OPTIMIZATION_DEBUG=y -# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -# CONFIG_COMPILER_OPTIMIZATION_PERF is not set -# CONFIG_COMPILER_OPTIMIZATION_NONE is not set -CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set -CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y -CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y -CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set -CONFIG_COMPILER_HIDE_PATHS_MACROS=y -# CONFIG_COMPILER_CXX_EXCEPTIONS is not set -# CONFIG_COMPILER_CXX_RTTI is not set -CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y -# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set -# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set -# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set -# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set -# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set -CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y -# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set -# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set -# CONFIG_COMPILER_DUMP_RTL_FILES is not set -CONFIG_COMPILER_RT_LIB_GCCLIB=y -CONFIG_COMPILER_RT_LIB_NAME="gcc" -CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y -# CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE is not set -# CONFIG_COMPILER_STATIC_ANALYZER is not set -# end of Compiler options - -# -# Component config -# - -# -# Application Level Tracing -# -# CONFIG_APPTRACE_DEST_JTAG is not set -CONFIG_APPTRACE_DEST_NONE=y -# CONFIG_APPTRACE_DEST_UART1 is not set -# CONFIG_APPTRACE_DEST_USB_CDC is not set -CONFIG_APPTRACE_DEST_UART_NONE=y -CONFIG_APPTRACE_UART_TASK_PRIO=1 -CONFIG_APPTRACE_LOCK_ENABLE=y -# end of Application Level Tracing - -# -# Bluetooth -# -# CONFIG_BT_ENABLED is not set -CONFIG_BT_ALARM_MAX_NUM=50 -# end of Bluetooth - -# -# Console Library -# -# CONFIG_CONSOLE_SORTED_HELP is not set -# end of Console Library - -# -# Driver Configurations -# - -# -# TWAI Configuration -# -# CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y -# end of TWAI Configuration - -# -# Legacy ADC Driver Configuration -# -# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set - -# -# Legacy ADC Calibration Configuration -# -# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy ADC Calibration Configuration -# end of Legacy ADC Driver Configuration - -# -# Legacy Timer Group Driver Configurations -# -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy Timer Group Driver Configurations - -# -# Legacy RMT Driver Configurations -# -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy RMT Driver Configurations - -# -# Legacy I2S Driver Configurations -# -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy I2S Driver Configurations - -# -# Legacy SDM Driver Configurations -# -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy SDM Driver Configurations - -# -# Legacy Temperature Sensor Driver Configurations -# -# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# end of Legacy Temperature Sensor Driver Configurations -# end of Driver Configurations - -# -# eFuse Bit Manager -# -# CONFIG_EFUSE_CUSTOM_TABLE is not set -# CONFIG_EFUSE_VIRTUAL is not set -CONFIG_EFUSE_MAX_BLK_LEN=256 -# end of eFuse Bit Manager - -# -# ESP-TLS -# -CONFIG_ESP_TLS_USING_MBEDTLS=y -CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y -# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set -# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set -# CONFIG_ESP_TLS_PSK_VERIFICATION is not set -# CONFIG_ESP_TLS_INSECURE is not set -# end of ESP-TLS - -# -# ADC and ADC Calibration -# -# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set -# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set -# CONFIG_ADC_ONESHOT_FORCE_USE_ADC2_ON_C3 is not set -# CONFIG_ADC_ENABLE_DEBUG_LOG is not set -# end of ADC and ADC Calibration - -# -# Wireless Coexistence -# -CONFIG_ESP_COEX_ENABLED=y -# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_ESP_COEX_GPIO_DEBUG is not set -# end of Wireless Coexistence - -# -# Common ESP-related -# -CONFIG_ESP_ERR_TO_NAME_LOOKUP=y -# end of Common ESP-related - -# -# ESP-Driver:GPIO Configurations -# -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:GPIO Configurations - -# -# ESP-Driver:GPTimer Configurations -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:GPTimer Configurations - -# -# ESP-Driver:I2C Configurations -# -# CONFIG_I2C_ISR_IRAM_SAFE is not set -# CONFIG_I2C_ENABLE_DEBUG_LOG is not set -# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set -# end of ESP-Driver:I2C Configurations - -# -# ESP-Driver:I2S Configurations -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:I2S Configurations - -# -# ESP-Driver:LEDC Configurations -# -# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set -# end of ESP-Driver:LEDC Configurations - -# -# ESP-Driver:RMT Configurations -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:RMT Configurations - -# -# ESP-Driver:Sigma Delta Modulator Configurations -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Sigma Delta Modulator Configurations - -# -# ESP-Driver:SPI Configurations -# -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of ESP-Driver:SPI Configurations - -# -# ESP-Driver:Temperature Sensor Configurations -# -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:Temperature Sensor Configurations - -# -# ESP-Driver:UART Configurations -# -CONFIG_UART_ISR_IN_IRAM=y -# end of ESP-Driver:UART Configurations - -# -# ESP-Driver:USB Serial/JTAG Configuration -# -CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y -# end of ESP-Driver:USB Serial/JTAG Configuration - -# -# Ethernet -# -CONFIG_ETH_ENABLED=y -CONFIG_ETH_USE_SPI_ETHERNET=y -# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set -# CONFIG_ETH_SPI_ETHERNET_W5500 is not set -# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set -# CONFIG_ETH_USE_OPENETH is not set -# CONFIG_ETH_TRANSMIT_MUTEX is not set -# end of Ethernet - -# -# Event Loop Library -# -# CONFIG_ESP_EVENT_LOOP_PROFILING is not set -CONFIG_ESP_EVENT_POST_FROM_ISR=y -CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y -# end of Event Loop Library - -# -# GDB Stub -# -CONFIG_ESP_GDBSTUB_ENABLED=y -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set -CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y -CONFIG_ESP_GDBSTUB_MAX_TASKS=32 -# end of GDB Stub - -# -# ESP HTTP client -# -CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y -# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set -# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set -CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTP client - -# -# HTTP Server -# -CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 -CONFIG_HTTPD_MAX_URI_LEN=512 -CONFIG_HTTPD_ERR_RESP_NO_DELAY=y -CONFIG_HTTPD_PURGE_BUF_LEN=32 -# CONFIG_HTTPD_LOG_PURGE_DATA is not set -CONFIG_HTTPD_WS_SUPPORT=y -# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set -CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000 -# end of HTTP Server - -# -# ESP HTTPS OTA -# -# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set -# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set -CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS OTA - -# -# ESP HTTPS server -# -# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set -CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000 -# end of ESP HTTPS server - -# -# Hardware Settings -# - -# -# Chip revision -# -# CONFIG_ESP32C3_REV_MIN_0 is not set -# CONFIG_ESP32C3_REV_MIN_1 is not set -# CONFIG_ESP32C3_REV_MIN_2 is not set -CONFIG_ESP32C3_REV_MIN_3=y -# CONFIG_ESP32C3_REV_MIN_4 is not set -# CONFIG_ESP32C3_REV_MIN_101 is not set -CONFIG_ESP32C3_REV_MIN_FULL=3 -CONFIG_ESP_REV_MIN_FULL=3 - -# -# Maximum Supported ESP32-C3 Revision (Rev v1.99) -# -CONFIG_ESP32C3_REV_MAX_FULL=199 -CONFIG_ESP_REV_MAX_FULL=199 -CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0 -CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=199 - -# -# Maximum Supported ESP32-C3 eFuse Block Revision (eFuse Block Rev v1.99) -# -# end of Chip revision - -# -# MAC Config -# -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y -CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_TWO is not set -CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES_FOUR=y -CONFIG_ESP32C3_UNIVERSAL_MAC_ADDRESSES=4 -# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set -# end of MAC Config - -# -# Sleep Config -# -# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set -CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y -# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set -CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0 -# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set -# CONFIG_ESP_SLEEP_DEBUG is not set -CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# end of Sleep Config - -# -# RTC Clock Config -# -CONFIG_RTC_CLK_SRC_INT_RC=y -# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_RTC_CLK_CAL_CYCLES=1024 -# end of RTC Clock Config - -# -# Peripheral Control -# -CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y -# end of Peripheral Control - -# -# GDMA Configurations -# -CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y -# CONFIG_GDMA_ISR_IRAM_SAFE is not set -# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set -# end of GDMA Configurations - -# -# Main XTAL Config -# -CONFIG_XTAL_FREQ_40=y -CONFIG_XTAL_FREQ=40 -# end of Main XTAL Config - -CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y -# end of Hardware Settings - -# -# ESP-Driver:LCD Controller Configurations -# -# CONFIG_LCD_ENABLE_DEBUG_LOG is not set -# end of ESP-Driver:LCD Controller Configurations - -# -# ESP-MM: Memory Management Configurations -# -# end of ESP-MM: Memory Management Configurations - -# -# ESP NETIF Adapter -# -CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 -# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set -CONFIG_ESP_NETIF_TCPIP_LWIP=y -# CONFIG_ESP_NETIF_LOOPBACK is not set -CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y -CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y -# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set -# CONFIG_ESP_NETIF_L2_TAP is not set -# CONFIG_ESP_NETIF_BRIDGE_EN is not set -# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set -# end of ESP NETIF Adapter - -# -# Partition API Configuration -# -# end of Partition API Configuration - -# -# PHY -# -CONFIG_ESP_PHY_ENABLED=y -CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP_PHY_MAX_TX_POWER=20 -# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set -CONFIG_ESP_PHY_ENABLE_USB=y -# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set -CONFIG_ESP_PHY_RF_CAL_PARTIAL=y -# CONFIG_ESP_PHY_RF_CAL_NONE is not set -# CONFIG_ESP_PHY_RF_CAL_FULL is not set -CONFIG_ESP_PHY_CALIBRATION_MODE=0 -# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set -# CONFIG_ESP_PHY_RECORD_USED_TIME is not set -# end of PHY - -# -# Power Management -# -# CONFIG_PM_ENABLE is not set -# CONFIG_PM_SLP_IRAM_OPT is not set -CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -# end of Power Management - -# -# ESP PSRAM -# - -# -# ESP Ringbuf -# -# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set -# end of ESP Ringbuf - -# -# ESP Security Specific -# -# end of ESP Security Specific - -# -# ESP System Settings -# -# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160=y -CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=160 -# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set -CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y -# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 -CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y -CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y -CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y -# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set - -# -# Memory protection -# -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y -CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y -# end of Memory protection - -CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 -CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y -# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set -CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 -CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 -CONFIG_ESP_CONSOLE_UART_DEFAULT=y -# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set -# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set -# CONFIG_ESP_CONSOLE_NONE is not set -# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set -CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y -CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y -CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_UART_NUM=0 -CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 -CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 -CONFIG_ESP_INT_WDT=y -CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_TASK_WDT_EN=y -CONFIG_ESP_TASK_WDT_INIT=y -# CONFIG_ESP_TASK_WDT_PANIC is not set -CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -# CONFIG_ESP_PANIC_HANDLER_IRAM is not set -# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP_DEBUG_OCDAWARE=y -CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y - -# -# Brownout Detector -# -CONFIG_ESP_BROWNOUT_DET=y -CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_ESP_BROWNOUT_DET_LVL=7 -# end of Brownout Detector - -CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y -CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y -CONFIG_ESP_SYSTEM_HW_PC_RECORD=y -# end of ESP System Settings - -# -# IPC (Inter-Processor Call) -# -CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 -# end of IPC (Inter-Processor Call) - -# -# ESP Timer (High Resolution Timer) -# -# CONFIG_ESP_TIMER_PROFILING is not set -CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y -CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y -CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 -# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set -CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 -CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y -# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set -CONFIG_ESP_TIMER_IMPL_SYSTIMER=y -# end of ESP Timer (High Resolution Timer) - -# -# Wi-Fi -# -CONFIG_ESP_WIFI_ENABLED=y -CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=20 -CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=40 -# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=40 -CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y -# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set -CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 -CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 -# CONFIG_ESP_WIFI_CSI_ENABLED is not set -CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP_WIFI_TX_BA_WIN=32 -CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP_WIFI_RX_BA_WIN=32 -CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP_WIFI_IRAM_OPT=y -# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set -CONFIG_ESP_WIFI_RX_IRAM_OPT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP_WIFI_ENABLE_SAE_PK=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y -CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y -# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set -CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 -CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 -CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 -# CONFIG_ESP_WIFI_FTM_ENABLE is not set -CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y -# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set -CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y -# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set -CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 -CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y -CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y -# CONFIG_ESP_WIFI_WAPI_PSK is not set -# CONFIG_ESP_WIFI_SUITE_B_192 is not set -# CONFIG_ESP_WIFI_11KV_SUPPORT is not set -# CONFIG_ESP_WIFI_MBO_SUPPORT is not set -# CONFIG_ESP_WIFI_DPP_SUPPORT is not set -# CONFIG_ESP_WIFI_11R_SUPPORT is not set -# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set - -# -# WPS Configuration Options -# -# CONFIG_ESP_WIFI_WPS_STRICT is not set -# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set -# end of WPS Configuration Options - -# CONFIG_ESP_WIFI_DEBUG_PRINT is not set -# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set -CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y -# CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set -# end of Wi-Fi - -# -# Core dump -# -# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set -# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set -CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y -# end of Core dump - -# -# FAT Filesystem support -# -CONFIG_FATFS_VOLUME_COUNT=2 -CONFIG_FATFS_LFN_NONE=y -# CONFIG_FATFS_LFN_HEAP is not set -# CONFIG_FATFS_LFN_STACK is not set -# CONFIG_FATFS_SECTOR_512 is not set -CONFIG_FATFS_SECTOR_4096=y -# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set -CONFIG_FATFS_CODEPAGE_437=y -# CONFIG_FATFS_CODEPAGE_720 is not set -# CONFIG_FATFS_CODEPAGE_737 is not set -# CONFIG_FATFS_CODEPAGE_771 is not set -# CONFIG_FATFS_CODEPAGE_775 is not set -# CONFIG_FATFS_CODEPAGE_850 is not set -# CONFIG_FATFS_CODEPAGE_852 is not set -# CONFIG_FATFS_CODEPAGE_855 is not set -# CONFIG_FATFS_CODEPAGE_857 is not set -# CONFIG_FATFS_CODEPAGE_860 is not set -# CONFIG_FATFS_CODEPAGE_861 is not set -# CONFIG_FATFS_CODEPAGE_862 is not set -# CONFIG_FATFS_CODEPAGE_863 is not set -# CONFIG_FATFS_CODEPAGE_864 is not set -# CONFIG_FATFS_CODEPAGE_865 is not set -# CONFIG_FATFS_CODEPAGE_866 is not set -# CONFIG_FATFS_CODEPAGE_869 is not set -# CONFIG_FATFS_CODEPAGE_932 is not set -# CONFIG_FATFS_CODEPAGE_936 is not set -# CONFIG_FATFS_CODEPAGE_949 is not set -# CONFIG_FATFS_CODEPAGE_950 is not set -CONFIG_FATFS_CODEPAGE=437 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -# CONFIG_FATFS_USE_FASTSEEK is not set -CONFIG_FATFS_USE_STRFUNC_NONE=y -# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set -# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set -CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 -# CONFIG_FATFS_IMMEDIATE_FSYNC is not set -# CONFIG_FATFS_USE_LABEL is not set -CONFIG_FATFS_LINK_LOCK=y -# end of FAT Filesystem support - -# -# FreeRTOS -# - -# -# Kernel -# -# CONFIG_FREERTOS_SMP is not set -CONFIG_FREERTOS_UNICORE=y -CONFIG_FREERTOS_HZ=500 -CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set -# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set -CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y -CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 -CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 -# CONFIG_FREERTOS_USE_IDLE_HOOK is not set -# CONFIG_FREERTOS_USE_TICK_HOOK is not set -CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 -# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set -CONFIG_FREERTOS_USE_TIMERS=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set -CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y -CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 -CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 -CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 -# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set -# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set -# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set -# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set -# end of Kernel - -# -# Port -# -CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y -# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set -CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y -# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set -# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set -CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y -CONFIG_FREERTOS_ISR_STACKSIZE=1536 -CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y -CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y -CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y -# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set -CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y -# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -# end of Port - -# -# Extra -# -# end of Extra - -CONFIG_FREERTOS_PORT=y -CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF -CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y -CONFIG_FREERTOS_DEBUG_OCDAWARE=y -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y -CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=1 -# end of FreeRTOS - -# -# Hardware Abstraction Layer (HAL) and Low Level (LL) -# -CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y -# CONFIG_HAL_ASSERTION_DISABLE is not set -# CONFIG_HAL_ASSERTION_SILENT is not set -# CONFIG_HAL_ASSERTION_ENABLE is not set -CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 -CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y -CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y -# CONFIG_HAL_ECDSA_GEN_SIG_CM is not set -# end of Hardware Abstraction Layer (HAL) and Low Level (LL) - -# -# Heap memory debugging -# -CONFIG_HEAP_POISONING_DISABLED=y -# CONFIG_HEAP_POISONING_LIGHT is not set -# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y -# CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set -# CONFIG_HEAP_USE_HOOKS is not set -# CONFIG_HEAP_TASK_TRACKING is not set -# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set -# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set -# end of Heap memory debugging - -# -# Log -# - -# -# Log Level -# -# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set -# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set -CONFIG_LOG_DEFAULT_LEVEL_INFO=y -# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set -# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=3 -CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y -# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set -# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set -CONFIG_LOG_MAXIMUM_LEVEL=3 - -# -# Level Settings -# -# CONFIG_LOG_MASTER_LEVEL is not set -CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y -# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set -# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y -# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set -CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y -CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31 -# end of Level Settings -# end of Log Level - -# -# Format -# -# CONFIG_LOG_COLORS is not set -CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y -# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set -# end of Format -# end of Log - -# -# LWIP -# -CONFIG_LWIP_ENABLE=y -CONFIG_LWIP_LOCAL_HOSTNAME="espressif" -# CONFIG_LWIP_NETIF_API is not set -CONFIG_LWIP_TCPIP_TASK_PRIO=18 -CONFIG_LWIP_TCPIP_CORE_LOCKING=y -CONFIG_LWIP_TCPIP_CORE_LOCKING_INPUT=y -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# CONFIG_LWIP_L2_TO_L3_COPY is not set -CONFIG_LWIP_IRAM_OPTIMIZATION=y -# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set -CONFIG_LWIP_TIMERS_ONDEMAND=y -CONFIG_LWIP_ND6=y -# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set -CONFIG_LWIP_MAX_SOCKETS=10 -# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set -# CONFIG_LWIP_SO_LINGER is not set -CONFIG_LWIP_SO_REUSE=y -CONFIG_LWIP_SO_REUSE_RXTOALL=y -# CONFIG_LWIP_SO_RCVBUF is not set -# CONFIG_LWIP_NETBUF_RECVINFO is not set -CONFIG_LWIP_IP_DEFAULT_TTL=64 -CONFIG_LWIP_IP4_FRAG=y -CONFIG_LWIP_IP6_FRAG=y -# CONFIG_LWIP_IP4_REASSEMBLY is not set -# CONFIG_LWIP_IP6_REASSEMBLY is not set -CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 -# CONFIG_LWIP_IP_FORWARD is not set -# CONFIG_LWIP_STATS is not set -CONFIG_LWIP_ESP_GRATUITOUS_ARP=y -CONFIG_LWIP_GARP_TMR_INTERVAL=60 -CONFIG_LWIP_ESP_MLDV6_REPORT=y -CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 -CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=64 -CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y -# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set -# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set -# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set -CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set -CONFIG_LWIP_DHCP_OPTIONS_LEN=68 -CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 -CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 - -# -# DHCP server -# -CONFIG_LWIP_DHCPS=y -CONFIG_LWIP_DHCPS_LEASE_UNIT=60 -CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 -CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y -CONFIG_LWIP_DHCPS_ADD_DNS=y -# end of DHCP server - -# CONFIG_LWIP_AUTOIP is not set -CONFIG_LWIP_IPV4=y -CONFIG_LWIP_IPV6=y -# CONFIG_LWIP_IPV6_AUTOCONFIG is not set -CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 -# CONFIG_LWIP_IPV6_FORWARD is not set -# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -CONFIG_LWIP_NETIF_LOOPBACK=y -CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 - -# -# TCP -# -CONFIG_LWIP_MAX_ACTIVE_TCP=16 -CONFIG_LWIP_MAX_LISTENING_TCP=16 -CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y -CONFIG_LWIP_TCP_MAXRTX=12 -CONFIG_LWIP_TCP_SYNMAXRTX=12 -CONFIG_LWIP_TCP_MSS=1440 -CONFIG_LWIP_TCP_TMR_INTERVAL=250 -CONFIG_LWIP_TCP_MSL=60000 -CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 -CONFIG_LWIP_TCP_SND_BUF_DEFAULT=65534 -CONFIG_LWIP_TCP_WND_DEFAULT=65534 -CONFIG_LWIP_TCP_RECVMBOX_SIZE=64 -CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 -CONFIG_LWIP_TCP_QUEUE_OOSEQ=y -CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 -CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 -# CONFIG_LWIP_TCP_SACK_OUT is not set -CONFIG_LWIP_TCP_OVERSIZE_MSS=y -# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set -CONFIG_LWIP_TCP_RTO_TIME=1500 -# end of TCP - -# -# UDP -# -CONFIG_LWIP_MAX_UDP_PCBS=16 -CONFIG_LWIP_UDP_RECVMBOX_SIZE=64 -# end of UDP - -# -# Checksums -# -# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set -# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set -CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y -# end of Checksums - -CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF -CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 -CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5 -CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3 -CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10 -# CONFIG_LWIP_PPP_SUPPORT is not set -# CONFIG_LWIP_SLIP_SUPPORT is not set - -# -# ICMP -# -CONFIG_LWIP_ICMP=y -# CONFIG_LWIP_MULTICAST_PING is not set -# CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP - -# -# LWIP RAW API -# -CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API - -# -# SNTP -# -CONFIG_LWIP_SNTP_MAX_SERVERS=3 -# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set -CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 -CONFIG_LWIP_SNTP_STARTUP_DELAY=y -CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 -# end of SNTP - -# -# DNS -# -CONFIG_LWIP_DNS_MAX_HOST_IP=1 -CONFIG_LWIP_DNS_MAX_SERVERS=3 -# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set -# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set -# end of DNS - -CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 -CONFIG_LWIP_ESP_LWIP_ASSERT=y - -# -# Hooks -# -# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set -CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y -# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y -# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set -CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y -# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set -# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set -CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set -# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set -CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set -# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set -CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y -# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set -# CONFIG_LWIP_HOOK_IP6_INPUT_NONE is not set -CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT=y -# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set -# end of Hooks - -# CONFIG_LWIP_DEBUG is not set -# end of LWIP - -# -# mbedTLS -# -CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y -# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set -# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set -CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y -CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 -CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 -# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set -# CONFIG_MBEDTLS_DEBUG is not set - -# -# mbedTLS v3.x related -# -# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set -# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set -# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set -# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set -CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y -CONFIG_MBEDTLS_PKCS7_C=y -# end of mbedTLS v3.x related - -# -# Certificate Bundle -# -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set -# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set -# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set -CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 -# end of Certificate Bundle - -# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set -CONFIG_MBEDTLS_CMAC_C=y -CONFIG_MBEDTLS_HARDWARE_AES=y -CONFIG_MBEDTLS_AES_USE_INTERRUPT=y -CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER=y -CONFIG_MBEDTLS_HARDWARE_MPI=y -CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI=y -CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y -CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 -CONFIG_MBEDTLS_HARDWARE_SHA=y -CONFIG_MBEDTLS_ROM_MD5=y -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set -# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set -CONFIG_MBEDTLS_HAVE_TIME=y -# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set -# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set -CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y -CONFIG_MBEDTLS_SHA512_C=y -# CONFIG_MBEDTLS_SHA3_C is not set -CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y -# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set -# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set -# CONFIG_MBEDTLS_TLS_DISABLED is not set -CONFIG_MBEDTLS_TLS_SERVER=y -CONFIG_MBEDTLS_TLS_CLIENT=y -CONFIG_MBEDTLS_TLS_ENABLED=y - -# -# TLS Key Exchange Methods -# -# CONFIG_MBEDTLS_PSK_MODES is not set -CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y -CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y -# end of TLS Key Exchange Methods - -CONFIG_MBEDTLS_SSL_RENEGOTIATION=y -CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y -# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set -# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set -CONFIG_MBEDTLS_SSL_ALPN=y -CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y -CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y - -# -# Symmetric Ciphers -# -CONFIG_MBEDTLS_AES_C=y -# CONFIG_MBEDTLS_CAMELLIA_C is not set -# CONFIG_MBEDTLS_DES_C is not set -# CONFIG_MBEDTLS_BLOWFISH_C is not set -# CONFIG_MBEDTLS_XTEA_C is not set -CONFIG_MBEDTLS_CCM_C=y -CONFIG_MBEDTLS_GCM_C=y -# CONFIG_MBEDTLS_NIST_KW_C is not set -# end of Symmetric Ciphers - -# CONFIG_MBEDTLS_RIPEMD160_C is not set - -# -# Certificates -# -CONFIG_MBEDTLS_PEM_PARSE_C=y -CONFIG_MBEDTLS_PEM_WRITE_C=y -CONFIG_MBEDTLS_X509_CRL_PARSE_C=y -CONFIG_MBEDTLS_X509_CSR_PARSE_C=y -# end of Certificates - -CONFIG_MBEDTLS_ECP_C=y -CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y -CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y -# CONFIG_MBEDTLS_DHM_C is not set -CONFIG_MBEDTLS_ECDH_C=y -CONFIG_MBEDTLS_ECDSA_C=y -# CONFIG_MBEDTLS_ECJPAKE_C is not set -CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y -CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y -CONFIG_MBEDTLS_ECP_NIST_OPTIM=y -# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set -# CONFIG_MBEDTLS_POLY1305_C is not set -# CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set -# CONFIG_MBEDTLS_THREADING_C is not set -CONFIG_MBEDTLS_ERROR_STRINGS=y -CONFIG_MBEDTLS_FS_IO=y -# end of mbedTLS - -# -# ESP-MQTT Configurations -# -CONFIG_MQTT_PROTOCOL_311=y -# CONFIG_MQTT_PROTOCOL_5 is not set -CONFIG_MQTT_TRANSPORT_SSL=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET=y -CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y -# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set -# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set -# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set -# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set -# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set -# CONFIG_MQTT_CUSTOM_OUTBOX is not set -# end of ESP-MQTT Configurations - -# -# Newlib -# -CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set -# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set -# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set -CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y -# CONFIG_NEWLIB_NANO_FORMAT is not set -CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y -# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set -# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set -# end of Newlib - -# -# NVS -# -# CONFIG_NVS_ENCRYPTION is not set -# CONFIG_NVS_ASSERT_ERROR_CHECK is not set -# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set -# end of NVS - -# -# OpenThread -# -# CONFIG_OPENTHREAD_ENABLED is not set - -# -# OpenThread Spinel -# -# CONFIG_OPENTHREAD_SPINEL_ONLY is not set -# end of OpenThread Spinel -# end of OpenThread - -# -# Protocomm -# -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y -CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y -# end of Protocomm - -# -# PThreads -# -CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" -# end of PThreads - -# -# MMU Config -# -CONFIG_MMU_PAGE_SIZE_64KB=y -CONFIG_MMU_PAGE_MODE="64KB" -CONFIG_MMU_PAGE_SIZE=0x10000 -# end of MMU Config - -# -# Main Flash configuration -# - -# -# SPI Flash behavior when brownout -# -CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y -CONFIG_SPI_FLASH_BROWNOUT_RESET=y -# end of SPI Flash behavior when brownout - -# -# Optional and Experimental Features (READ DOCS FIRST) -# - -# -# Features here require specific hardware (READ DOCS FIRST!) -# -# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set -CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 -# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set -# end of Optional and Experimental Features (READ DOCS FIRST) -# end of Main Flash configuration - -# -# SPI Flash driver -# -# CONFIG_SPI_FLASH_VERIFY_WRITE is not set -# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set -CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y -# CONFIG_SPI_FLASH_ROM_IMPL is not set -CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set -# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set -# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set -CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y -CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 -CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 -CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 -# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set -# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set -# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set - -# -# Auto-detect flash chips -# -CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y -CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y -CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y -CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y -# end of Auto-detect flash chips - -CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y -# end of SPI Flash driver - -# -# SPIFFS Configuration -# -CONFIG_SPIFFS_MAX_PARTITIONS=3 - -# -# SPIFFS Cache Configuration -# -CONFIG_SPIFFS_CACHE=y -CONFIG_SPIFFS_CACHE_WR=y -# CONFIG_SPIFFS_CACHE_STATS is not set -# end of SPIFFS Cache Configuration - -CONFIG_SPIFFS_PAGE_CHECK=y -CONFIG_SPIFFS_GC_MAX_RUNS=10 -# CONFIG_SPIFFS_GC_STATS is not set -CONFIG_SPIFFS_PAGE_SIZE=256 -CONFIG_SPIFFS_OBJ_NAME_LEN=32 -# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set -CONFIG_SPIFFS_USE_MAGIC=y -CONFIG_SPIFFS_USE_MAGIC_LENGTH=y -CONFIG_SPIFFS_META_LENGTH=4 -CONFIG_SPIFFS_USE_MTIME=y - -# -# Debug Configuration -# -# CONFIG_SPIFFS_DBG is not set -# CONFIG_SPIFFS_API_DBG is not set -# CONFIG_SPIFFS_GC_DBG is not set -# CONFIG_SPIFFS_CACHE_DBG is not set -# CONFIG_SPIFFS_CHECK_DBG is not set -# CONFIG_SPIFFS_TEST_VISUALISATION is not set -# end of Debug Configuration -# end of SPIFFS Configuration - -# -# TCP Transport -# - -# -# Websocket -# -CONFIG_WS_TRANSPORT=y -CONFIG_WS_BUFFER_SIZE=2048 -CONFIG_WS_DYNAMIC_BUFFER=y -# end of Websocket -# end of TCP Transport - -# -# Unity unit testing library -# -CONFIG_UNITY_ENABLE_FLOAT=y -CONFIG_UNITY_ENABLE_DOUBLE=y -# CONFIG_UNITY_ENABLE_64BIT is not set -# CONFIG_UNITY_ENABLE_COLOR is not set -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y -# CONFIG_UNITY_ENABLE_FIXTURE is not set -# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set -# end of Unity unit testing library - -# -# Virtual file system -# -CONFIG_VFS_SUPPORT_IO=y -CONFIG_VFS_SUPPORT_DIR=y -CONFIG_VFS_SUPPORT_SELECT=y -CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_VFS_SELECT_IN_RAM=y -CONFIG_VFS_SUPPORT_TERMIOS=y -CONFIG_VFS_MAX_COUNT=8 - -# -# Host File System I/O (Semihosting) -# -CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# end of Host File System I/O (Semihosting) - -CONFIG_VFS_INITIALIZE_DEV_NULL=y -# end of Virtual file system - -# -# Wear Levelling -# -# CONFIG_WL_SECTOR_SIZE_512 is not set -CONFIG_WL_SECTOR_SIZE_4096=y -CONFIG_WL_SECTOR_SIZE=4096 -# end of Wear Levelling - -# -# Wi-Fi Provisioning Manager -# -CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 -CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 -CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y -# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set -# end of Wi-Fi Provisioning Manager - -# -# ODROID-MONITOR -# - -# -# GPIO -# -CONFIG_ENV_GPIO_RANGE_MIN=0 -CONFIG_ENV_GPIO_RANGE_MAX=19 -CONFIG_ENV_GPIO_IN_RANGE_MAX=19 -CONFIG_ENV_GPIO_OUT_RANGE_MAX=19 -CONFIG_GPIO_INA226_SCL=0 -CONFIG_GPIO_INA226_SDA=1 -CONFIG_GPIO_INA226_INT=10 -CONFIG_GPIO_UART_TX=6 -CONFIG_GPIO_UART_RX=7 -CONFIG_GPIO_LED_STATUS=8 -CONFIG_GPIO_LED_WIFI=9 -CONFIG_GPIO_SW_12V=4 -CONFIG_GPIO_SW_5V=5 -CONFIG_GPIO_TRIGGER_POWER=2 -CONFIG_GPIO_TRIGGER_RESET=3 -# end of GPIO -# end of ODROID-MONITOR - -# -# CMake Utilities -# -# CONFIG_CU_RELINKER_ENABLE is not set -# CONFIG_CU_DIAGNOSTICS_COLOR_NEVER is not set -CONFIG_CU_DIAGNOSTICS_COLOR_ALWAYS=y -# CONFIG_CU_DIAGNOSTICS_COLOR_AUTO is not set -# CONFIG_CU_GCC_LTO_ENABLE is not set -# CONFIG_CU_GCC_STRING_1BYTE_ALIGN is not set -# end of CMake Utilities - -# -# LED Indicator -# -CONFIG_BRIGHTNESS_TICKS=10 -CONFIG_USE_GAMMA_CORRECTION=y - -# -# LEDC Config -# -CONFIG_LEDC_LOW_SPEED_MODE=y -CONFIG_LEDC_SPEED_MODE_VALUE=0 -CONFIG_LEDC_TIMER_BIT_NUM=13 -CONFIG_LEDC_TIMER_FREQ_HZ=5000 -# end of LEDC Config -# end of LED Indicator - -# -# LittleFS -# -# CONFIG_LITTLEFS_SDMMC_SUPPORT is not set -CONFIG_LITTLEFS_MAX_PARTITIONS=3 -CONFIG_LITTLEFS_PAGE_SIZE=256 -CONFIG_LITTLEFS_OBJ_NAME_LEN=64 -CONFIG_LITTLEFS_READ_SIZE=128 -CONFIG_LITTLEFS_WRITE_SIZE=128 -CONFIG_LITTLEFS_LOOKAHEAD_SIZE=128 -CONFIG_LITTLEFS_CACHE_SIZE=512 -CONFIG_LITTLEFS_BLOCK_CYCLES=512 -CONFIG_LITTLEFS_USE_MTIME=y -# CONFIG_LITTLEFS_USE_ONLY_HASH is not set -# CONFIG_LITTLEFS_HUMAN_READABLE is not set -CONFIG_LITTLEFS_MTIME_USE_SECONDS=y -# CONFIG_LITTLEFS_MTIME_USE_NONCE is not set -# CONFIG_LITTLEFS_SPIFFS_COMPAT is not set -# CONFIG_LITTLEFS_FLUSH_FILE_EVERY_WRITE is not set -# CONFIG_LITTLEFS_FCNTL_GET_PATH is not set -# CONFIG_LITTLEFS_MULTIVERSION is not set -# CONFIG_LITTLEFS_MALLOC_STRATEGY_DISABLE is not set -CONFIG_LITTLEFS_MALLOC_STRATEGY_DEFAULT=y -# CONFIG_LITTLEFS_MALLOC_STRATEGY_INTERNAL is not set -CONFIG_LITTLEFS_ASSERTS=y -# CONFIG_LITTLEFS_MMAP_PARTITION is not set -# end of LittleFS -# end of Component config - -# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set - -# Deprecated options for backward compatibility -# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set -# CONFIG_NO_BLOBS is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set -CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y -# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set -# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set -CONFIG_LOG_BOOTLOADER_LEVEL=3 -# CONFIG_APP_ROLLBACK_ENABLE is not set -# CONFIG_FLASH_ENCRYPTION_ENABLED is not set -CONFIG_FLASHMODE_QIO=y -# CONFIG_FLASHMODE_QOUT is not set -# CONFIG_FLASHMODE_DIO is not set -# CONFIG_FLASHMODE_DOUT is not set -CONFIG_MONITOR_BAUD=115200 -CONFIG_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y -CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y -# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set -CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y -# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set -# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set -CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 -# CONFIG_CXX_EXCEPTIONS is not set -CONFIG_STACK_CHECK_NONE=y -# CONFIG_STACK_CHECK_NORM is not set -# CONFIG_STACK_CHECK_STRONG is not set -# CONFIG_STACK_CHECK_ALL is not set -# CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set -CONFIG_ESP32_APPTRACE_DEST_NONE=y -CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y -# CONFIG_EXTERNAL_COEX_ENABLE is not set -# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set -# CONFIG_EVENT_LOOP_PROFILING is not set -CONFIG_POST_EVENTS_FROM_ISR=y -CONFIG_POST_EVENTS_FROM_IRAM_ISR=y -CONFIG_GDBSTUB_SUPPORT_TASKS=y -CONFIG_GDBSTUB_MAX_TASKS=32 -# CONFIG_OTA_ALLOW_HTTP is not set -# CONFIG_ESP_SYSTEM_PD_FLASH is not set -CONFIG_ESP32C3_LIGHTSLEEP_GPIO_RESET_WORKAROUND=y -CONFIG_ESP32C3_RTC_CLK_SRC_INT_RC=y -# CONFIG_ESP32C3_RTC_CLK_SRC_EXT_CRYS is not set -# CONFIG_ESP32C3_RTC_CLK_SRC_EXT_OSC is not set -# CONFIG_ESP32C3_RTC_CLK_SRC_INT_8MD256 is not set -CONFIG_ESP32C3_RTC_CLK_CAL_CYCLES=1024 -CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y -# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set -CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 -CONFIG_ESP32_PHY_MAX_TX_POWER=20 -# CONFIG_REDUCE_PHY_TX_POWER is not set -# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set -CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y -# CONFIG_ESP32C3_DEFAULT_CPU_FREQ_80 is not set -CONFIG_ESP32C3_DEFAULT_CPU_FREQ_160=y -CONFIG_ESP32C3_DEFAULT_CPU_FREQ_MHZ=160 -CONFIG_ESP32C3_MEMPROT_FEATURE=y -CONFIG_ESP32C3_MEMPROT_FEATURE_LOCK=y -CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 -CONFIG_CONSOLE_UART_DEFAULT=y -# CONFIG_CONSOLE_UART_CUSTOM is not set -# CONFIG_CONSOLE_UART_NONE is not set -# CONFIG_ESP_CONSOLE_UART_NONE is not set -CONFIG_CONSOLE_UART=y -CONFIG_CONSOLE_UART_NUM=0 -CONFIG_CONSOLE_UART_BAUDRATE=115200 -CONFIG_INT_WDT=y -CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_TASK_WDT=y -CONFIG_ESP_TASK_WDT=y -# CONFIG_TASK_WDT_PANIC is not set -CONFIG_TASK_WDT_TIMEOUT_S=5 -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set -CONFIG_ESP32C3_DEBUG_OCDAWARE=y -CONFIG_BROWNOUT_DET=y -CONFIG_ESP32C3_BROWNOUT_DET=y -CONFIG_ESP32C3_BROWNOUT_DET=y -CONFIG_BROWNOUT_DET_LVL_SEL_7=y -CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_7=y -# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_6 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_5 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_4 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_3 is not set -# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set -# CONFIG_ESP32C3_BROWNOUT_DET_LVL_SEL_2 is not set -CONFIG_BROWNOUT_DET_LVL=7 -CONFIG_ESP32C3_BROWNOUT_DET_LVL=7 -CONFIG_IPC_TASK_STACK_SIZE=1024 -CONFIG_TIMER_TASK_STACK_SIZE=3584 -CONFIG_ESP32_WIFI_ENABLED=y -CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=20 -CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=40 -# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y -CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 -CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=40 -# CONFIG_ESP32_WIFI_CSI_ENABLED is not set -CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y -CONFIG_ESP32_WIFI_TX_BA_WIN=32 -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y -CONFIG_ESP32_WIFI_RX_BA_WIN=32 -CONFIG_ESP32_WIFI_RX_BA_WIN=32 -CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 -CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 -CONFIG_ESP32_WIFI_IRAM_OPT=y -CONFIG_ESP32_WIFI_RX_IRAM_OPT=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y -CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y -CONFIG_WPA_MBEDTLS_CRYPTO=y -CONFIG_WPA_MBEDTLS_TLS_CLIENT=y -# CONFIG_WPA_WAPI_PSK is not set -# CONFIG_WPA_SUITE_B_192 is not set -# CONFIG_WPA_11KV_SUPPORT is not set -# CONFIG_WPA_MBO_SUPPORT is not set -# CONFIG_WPA_DPP_SUPPORT is not set -# CONFIG_WPA_11R_SUPPORT is not set -# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set -# CONFIG_WPA_WPS_STRICT is not set -# CONFIG_WPA_DEBUG_PRINT is not set -# CONFIG_WPA_TESTING_OPTIONS is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set -# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set -CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y -CONFIG_TIMER_TASK_PRIORITY=1 -CONFIG_TIMER_TASK_STACK_DEPTH=2048 -CONFIG_TIMER_QUEUE_LENGTH=10 -# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set -# CONFIG_HAL_ASSERTION_SILIENT is not set -# CONFIG_L2_TO_L3_COPY is not set -CONFIG_ESP_GRATUITOUS_ARP=y -CONFIG_GARP_TMR_INTERVAL=60 -CONFIG_TCPIP_RECVMBOX_SIZE=64 -CONFIG_TCP_MAXRTX=12 -CONFIG_TCP_SYNMAXRTX=12 -CONFIG_TCP_MSS=1440 -CONFIG_TCP_MSL=60000 -CONFIG_TCP_SND_BUF_DEFAULT=65534 -CONFIG_TCP_WND_DEFAULT=65534 -CONFIG_TCP_RECVMBOX_SIZE=64 -CONFIG_TCP_QUEUE_OOSEQ=y -CONFIG_TCP_OVERSIZE_MSS=y -# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set -# CONFIG_TCP_OVERSIZE_DISABLE is not set -CONFIG_UDP_RECVMBOX_SIZE=64 -CONFIG_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y -# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF -# CONFIG_PPP_SUPPORT is not set -CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC_SYSTIMER=y -# CONFIG_ESP32C3_TIME_SYSCALL_USE_RTC is not set -# CONFIG_ESP32C3_TIME_SYSCALL_USE_SYSTIMER is not set -# CONFIG_ESP32C3_TIME_SYSCALL_USE_NONE is not set -CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 -CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 -CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 -CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" -CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set -# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set -CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y -CONFIG_SUPPORT_TERMIOS=y -CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 -# End of deprecated options