├── .github └── workflows │ └── test.yml ├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── Kconfig ├── LICENSE.md ├── Makefile ├── README.md ├── esp_lwmqtt.c ├── esp_lwmqtt.h ├── esp_mqtt.c ├── esp_mqtt.h ├── esp_tls_lwmqtt.c ├── esp_tls_lwmqtt.h └── test ├── CMakeLists.txt ├── components └── esp-mqtt ├── main ├── CMakeLists.txt ├── main.c └── server_root_cert.pem └── sdkconfig /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | on: [push, pull_request] 2 | name: Test 3 | jobs: 4 | test: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Checkout 8 | uses: actions/checkout@v2 9 | with: 10 | submodules: recursive 11 | - name: Prepare 12 | run: sudo apt-get install python-is-python3 gperf -y 13 | - name: Install 14 | run: make prepare install 15 | - name: Build 16 | run: make build 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | cmake-build-debug/ 3 | test/esp-idf 4 | test/tools 5 | test/build 6 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lwmqtt"] 2 | path = lwmqtt 3 | url = https://github.com/256dpi/lwmqtt.git 4 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(srcs 2 | "esp_lwmqtt.c" 3 | "esp_mqtt.c" 4 | "esp_tls_lwmqtt.c" 5 | "lwmqtt/src/client.c" 6 | "lwmqtt/src/helpers.c" 7 | "lwmqtt/src/packet.c" 8 | "lwmqtt/src/string.c") 9 | 10 | idf_component_register(SRCS ${srcs} 11 | INCLUDE_DIRS "." "lwmqtt/include" 12 | REQUIRES mbedtls 13 | ) 14 | -------------------------------------------------------------------------------- /Kconfig: -------------------------------------------------------------------------------- 1 | menu "esp-mqtt" 2 | 3 | config ESP_MQTT_ENABLED 4 | bool "Enable the MQTT component" 5 | select LWIP_SO_RCVBUF 6 | default y 7 | help 8 | This is currently only used to enforce the selection of LWIP_SO_RCVBUF. 9 | Disabling the component does not actually disable something. 10 | 11 | config ESP_MQTT_TASK_STACK 12 | int "MQTT background process task stack" 13 | depends on ESP_MQTT_ENABLED 14 | default 9216 15 | help 16 | Specify at least 9216 if TLS is used and at least 4096 otherwise. 17 | 18 | config ESP_MQTT_TASK_PRIORITY 19 | int "MQTT background process task priority" 20 | depends on ESP_MQTT_ENABLED 21 | default 5 22 | 23 | config ESP_MQTT_EVENT_QUEUE_SIZE 24 | int "MQTT event queue size" 25 | depends on ESP_MQTT_ENABLED 26 | default 64 27 | help 28 | This value defines the amount of messages that are queued during various 29 | calls and dispatched by the background process. 30 | 31 | config ESP_MQTT_TLS_ENABLE 32 | bool "Enable TLS connection" 33 | depends on ESP_MQTT_ENABLED 34 | default y 35 | help 36 | You can deactivate TLS to save space in memory and flash. 37 | 38 | endmenu 39 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Joël Gähwiler 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | SHELL := /bin/bash 2 | 3 | ESP_IDF_VERSION := "v5.2.2" 4 | 5 | fmt: 6 | clang-format -i ./*.c ./*.h -style="{BasedOnStyle: Google, ColumnLimit: 120, SortIncludes: false}" 7 | clang-format -i ./test/main/*.c -style="{BasedOnStyle: Google, ColumnLimit: 120, SortIncludes: false}" 8 | 9 | prepare: 10 | git clone --recursive https://github.com/espressif/esp-idf.git test/esp-idf 11 | cd test/esp-idf; git fetch; git checkout $(ESP_IDF_VERSION) 12 | cd test/esp-idf/; git submodule update --recursive --init 13 | 14 | update: 15 | cd test/esp-idf; git fetch; git checkout $(ESP_IDF_VERSION) 16 | cd test/esp-idf/; git submodule update --recursive --init 17 | 18 | install: 19 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; cd test/esp-idf; ./install.sh esp32 20 | 21 | config: 22 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py menuconfig 23 | 24 | reconfigure: 25 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py reconfigure 26 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py fullclean 27 | 28 | erase: 29 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py erase-flash 30 | 31 | clean: 32 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py clean 33 | 34 | build: 35 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py build 36 | 37 | flash: 38 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py flash 39 | 40 | monitor: 41 | export IDF_TOOLS_PATH=$(shell pwd)/test/tools; . test/esp-idf/export.sh; cd test; idf.py monitor 42 | 43 | simple-monitor: 44 | @clear 45 | miniterm.py /dev/cu.SLAB_USBtoUART 115200 --rts 0 --dtr 0 --raw --exit-char 99 46 | 47 | run: build flash monitor 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # esp-mqtt 2 | 3 | [![Test](https://github.com/256dpi/esp-mqtt/actions/workflows/test.yml/badge.svg)](https://github.com/256dpi/esp-mqtt/actions/workflows/test.yml) 4 | [![Release](https://img.shields.io/github/release/256dpi/esp-mqtt.svg)](https://github.com/256dpi/esp-mqtt/releases) 5 | 6 | **MQTT component for esp-idf projects based on the [lwmqtt](https://github.com/256dpi/lwmqtt) library** 7 | 8 | This component bundles the lwmqtt client and adds a simple async API similar to other esp networking components. Secure connections are supported via the `mbedTLS` library. 9 | 10 | ## Installation 11 | 12 | You can install the component by adding it as a git submodule: 13 | 14 | ```bash 15 | git submodule add https://github.com/256dpi/esp-mqtt.git components/esp-mqtt 16 | git submodule update --init --recursive 17 | ``` 18 | 19 | The component will automatically enable the LWIP receive buffers. 20 | 21 | ### PlatformIO 22 | 23 | You need to set `CONFIG_LWIP_SO_RCVBUF=y` manually in `sdkconfig`. 24 | 25 | ## Example 26 | 27 | An example can be found here: https://github.com/256dpi/esp-mqtt/blob/master/test/main/main.c. 28 | 29 | ## Notes 30 | 31 | If you are sending large messages, setting `CONFIG_USE_ONLY_LWIP_SELECT=y` might prevent [some issues](https://github.com/espressif/esp-mqtt/issues/48). 32 | 33 | ## API 34 | 35 | Initialize the component once by passing the necessary callbacks: 36 | 37 | ```c++ 38 | void esp_mqtt_init(esp_mqtt_status_callback_t scb, esp_mqtt_message_callback_t mcb, 39 | size_t buffer_size, int command_timeout); 40 | ``` 41 | 42 | Enable secure connection using TLS: 43 | 44 | ```c++ 45 | bool esp_mqtt_tls(bool enabled, bool verify, const uint8_t * ca_buf, size_t ca_len); 46 | ``` 47 | 48 | Optionally, configure a Last Will and Testament: 49 | 50 | ```c++ 51 | void esp_mqtt_lwt(const char *topic, const char *payload, int qos, bool retained); 52 | ``` 53 | 54 | When the WiFi connection has been established, start the process: 55 | 56 | ```c++ 57 | bool esp_mqtt_start(const char *host, const char *port, const char *client_id, 58 | const char *username, const char *password); 59 | ``` 60 | 61 | When the client has connected, interact with the broker: 62 | 63 | ```c++ 64 | bool esp_mqtt_subscribe(const char *topic, int qos); 65 | bool esp_mqtt_unsubscribe(const char *topic); 66 | bool esp_mqtt_publish(const char *topic, uint8_t *payload, size_t len, int qos, bool retained); 67 | ``` 68 | 69 | If the WiFi connection has been lost, stop the process: 70 | 71 | ```c++ 72 | void esp_mqtt_stop(); 73 | ``` 74 | -------------------------------------------------------------------------------- /esp_lwmqtt.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include // needed 3 | 4 | // Some docs about lwip: 5 | // http://www.ecoscentric.com/ecospro/doc/html/ref/lwip-api-sequential-reference.html. 6 | // http://ww1.microchip.com/downloads/en/AppNotes/Atmel-42233-Using-the-lwIP-Network-Stack_AP-Note_AT04055.pdf 7 | 8 | #include "esp_lwmqtt.h" 9 | 10 | void esp_lwmqtt_timer_set(void *ref, uint32_t timeout) { 11 | // cast timer reference 12 | esp_lwmqtt_timer_t *t = (esp_lwmqtt_timer_t *)ref; 13 | 14 | // set deadline 15 | t->deadline = (xTaskGetTickCount() * portTICK_PERIOD_MS) + timeout; 16 | } 17 | 18 | int32_t esp_lwmqtt_timer_get(void *ref) { 19 | // cast timer reference 20 | esp_lwmqtt_timer_t *t = (esp_lwmqtt_timer_t *)ref; 21 | 22 | return (int32_t)t->deadline - (int32_t)(xTaskGetTickCount() * portTICK_PERIOD_MS); 23 | } 24 | 25 | lwmqtt_err_t esp_lwmqtt_network_connect(esp_lwmqtt_network_t *n, char *host, char *port) { 26 | // disconnect if not already the case 27 | esp_lwmqtt_network_disconnect(n); 28 | 29 | // prepare hints 30 | struct addrinfo hints = {.ai_family = AF_INET, .ai_socktype = SOCK_STREAM}; 31 | 32 | // lookup ip address (there is no way to configure a timeout) 33 | struct addrinfo *res; 34 | int r = getaddrinfo(host, port, &hints, &res); 35 | if (r != 0 || res == NULL) { 36 | return LWMQTT_NETWORK_FAILED_CONNECT; 37 | } 38 | 39 | // create socket 40 | n->socket = socket(res->ai_family, res->ai_socktype, 0); 41 | if (n->socket < 0) { 42 | freeaddrinfo(res); 43 | return LWMQTT_NETWORK_FAILED_CONNECT; 44 | } 45 | 46 | // disable nagle's algorithm 47 | int flag = 1; 48 | r = setsockopt(n->socket, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(int)); 49 | if (r < 0) { 50 | close(n->socket); 51 | freeaddrinfo(res); 52 | return LWMQTT_NETWORK_FAILED_CONNECT; 53 | } 54 | 55 | // set socket to non-blocking 56 | r = fcntl(n->socket, F_SETFL, fcntl(n->socket, F_GETFL, 0) | O_NONBLOCK); 57 | if (r < 0) { 58 | close(n->socket); 59 | freeaddrinfo(res); 60 | return LWMQTT_NETWORK_FAILED_CONNECT; 61 | } 62 | 63 | // connect socket 64 | r = connect(n->socket, res->ai_addr, res->ai_addrlen); 65 | if (r < 0 && errno != EINPROGRESS) { 66 | close(n->socket); 67 | freeaddrinfo(res); 68 | return LWMQTT_NETWORK_FAILED_CONNECT; 69 | } 70 | 71 | // free address 72 | freeaddrinfo(res); 73 | 74 | return LWMQTT_SUCCESS; 75 | } 76 | 77 | lwmqtt_err_t esp_lwmqtt_network_wait(esp_lwmqtt_network_t *n, bool *connected, uint32_t timeout) { 78 | // prepare sets 79 | fd_set set; 80 | fd_set ex_set; 81 | FD_ZERO(&set); 82 | FD_ZERO(&ex_set); 83 | FD_SET(n->socket, &set); 84 | FD_SET(n->socket, &ex_set); 85 | 86 | // wait for data 87 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 88 | int result = select(n->socket + 1, NULL, &set, &ex_set, &t); 89 | if (result < 0 || FD_ISSET(n->socket, &ex_set)) { 90 | close(n->socket); 91 | return LWMQTT_NETWORK_FAILED_CONNECT; 92 | } 93 | 94 | // set whether socket is connected 95 | *connected = result > 0; 96 | 97 | // set socket to blocking 98 | int r = fcntl(n->socket, F_SETFL, fcntl(n->socket, F_GETFL, 0) & (~O_NONBLOCK)); 99 | if (r < 0) { 100 | close(n->socket); 101 | return LWMQTT_NETWORK_FAILED_CONNECT; 102 | } 103 | 104 | return LWMQTT_SUCCESS; 105 | } 106 | 107 | void esp_lwmqtt_network_disconnect(esp_lwmqtt_network_t *n) { 108 | // close socket if present 109 | if (n->socket) { 110 | close(n->socket); 111 | n->socket = 0; 112 | } 113 | } 114 | 115 | lwmqtt_err_t esp_lwmqtt_network_select(esp_lwmqtt_network_t *n, bool *available, uint32_t timeout) { 116 | // prepare sets 117 | fd_set set; 118 | fd_set ex_set; 119 | FD_ZERO(&set); 120 | FD_ZERO(&ex_set); 121 | FD_SET(n->socket, &set); 122 | FD_SET(n->socket, &ex_set); 123 | 124 | // wait for data 125 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 126 | int result = select(n->socket + 1, &set, NULL, &ex_set, &t); 127 | if (result < 0 || FD_ISSET(n->socket, &ex_set)) { 128 | return LWMQTT_NETWORK_FAILED_READ; 129 | } 130 | 131 | // set whether data is available 132 | *available = result > 0; 133 | 134 | return LWMQTT_SUCCESS; 135 | } 136 | 137 | lwmqtt_err_t esp_lwmqtt_network_peek(esp_lwmqtt_network_t *n, size_t *available) { 138 | // check if socket is valid 139 | char buf; 140 | int ret = recv(n->socket, &buf, 1, MSG_PEEK | MSG_DONTWAIT); 141 | if (ret <= 0 && errno != EAGAIN && errno != EWOULDBLOCK) { 142 | return LWMQTT_NETWORK_FAILED_READ; 143 | } 144 | 145 | // get the available bytes on the socket 146 | int rc = ioctl(n->socket, FIONREAD, available); 147 | if (rc < 0) { 148 | return LWMQTT_NETWORK_FAILED_READ; 149 | } 150 | 151 | return LWMQTT_SUCCESS; 152 | } 153 | 154 | lwmqtt_err_t esp_lwmqtt_network_read(void *ref, uint8_t *buffer, size_t len, size_t *received, uint32_t timeout) { 155 | // cast network reference 156 | esp_lwmqtt_network_t *n = (esp_lwmqtt_network_t *)ref; 157 | 158 | // set timeout 159 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 160 | int rc = setsockopt(n->socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof(t)); 161 | if (rc < 0) { 162 | return LWMQTT_NETWORK_FAILED_READ; 163 | } 164 | 165 | // read from socket 166 | int bytes = read(n->socket, buffer, len); 167 | if (bytes < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) { 168 | return LWMQTT_SUCCESS; 169 | } else if (bytes <= 0) { 170 | return LWMQTT_NETWORK_FAILED_READ; 171 | } 172 | 173 | // increment counter 174 | *received += bytes; 175 | 176 | return LWMQTT_SUCCESS; 177 | } 178 | 179 | lwmqtt_err_t esp_lwmqtt_network_write(void *ref, uint8_t *buffer, size_t len, size_t *sent, uint32_t timeout) { 180 | // cast network reference 181 | esp_lwmqtt_network_t *n = (esp_lwmqtt_network_t *)ref; 182 | 183 | // set timeout 184 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 185 | int rc = setsockopt(n->socket, SOL_SOCKET, SO_SNDTIMEO, (char *)&t, sizeof(t)); 186 | if (rc < 0) { 187 | return LWMQTT_NETWORK_FAILED_WRITE; 188 | } 189 | 190 | // write to socket 191 | int bytes = write(n->socket, buffer, len); 192 | if (bytes < 0 && (errno == EAGAIN || errno == EWOULDBLOCK)) { 193 | return LWMQTT_SUCCESS; 194 | } else if (bytes < 0) { 195 | return LWMQTT_NETWORK_FAILED_WRITE; 196 | } 197 | 198 | // increment counter 199 | *sent += bytes; 200 | 201 | return LWMQTT_SUCCESS; 202 | } 203 | -------------------------------------------------------------------------------- /esp_lwmqtt.h: -------------------------------------------------------------------------------- 1 | #ifndef ESP_LWMQTT_H 2 | #define ESP_LWMQTT_H 3 | 4 | #include 5 | 6 | /** 7 | * The lwmqtt timer object for the esp platform. 8 | */ 9 | typedef struct { 10 | uint32_t deadline; 11 | } esp_lwmqtt_timer_t; 12 | 13 | /** 14 | * The lwmqtt timer set callback for the esp platform. 15 | */ 16 | void esp_lwmqtt_timer_set(void *ref, uint32_t timeout); 17 | 18 | /** 19 | * The lwmqtt timer get callback for the esp platform. 20 | */ 21 | int32_t esp_lwmqtt_timer_get(void *ref); 22 | 23 | /** 24 | * The lwmqtt network object for the esp platform. 25 | */ 26 | typedef struct { 27 | int socket; 28 | } esp_lwmqtt_network_t; 29 | 30 | /** 31 | * Initiate a connection to the specified remote hose. 32 | */ 33 | lwmqtt_err_t esp_lwmqtt_network_connect(esp_lwmqtt_network_t *n, char *host, char *port); 34 | 35 | /** 36 | * Wait until the socket is connected or a timeout has been reached. 37 | */ 38 | lwmqtt_err_t esp_lwmqtt_network_wait(esp_lwmqtt_network_t *n, bool *connected, uint32_t timeout); 39 | 40 | /** 41 | * Terminate the connection. 42 | */ 43 | void esp_lwmqtt_network_disconnect(esp_lwmqtt_network_t *n); 44 | 45 | /** 46 | * Will set available to the available amount of data in the underlying network buffer. 47 | */ 48 | lwmqtt_err_t esp_lwmqtt_network_peek(esp_lwmqtt_network_t *n, size_t *available); 49 | 50 | /** 51 | * Will wait for a socket until data is available or the timeout has been reached. 52 | */ 53 | lwmqtt_err_t esp_lwmqtt_network_select(esp_lwmqtt_network_t *n, bool *available, uint32_t timeout); 54 | 55 | /** 56 | * The lwmqtt network read callback for the esp platform. 57 | */ 58 | lwmqtt_err_t esp_lwmqtt_network_read(void *ref, uint8_t *buf, size_t len, size_t *received, uint32_t timeout); 59 | 60 | /** 61 | * The lwmqtt network write callback for the esp platform. 62 | */ 63 | lwmqtt_err_t esp_lwmqtt_network_write(void *ref, uint8_t *buf, size_t len, size_t *sent, uint32_t timeout); 64 | 65 | #endif // ESP_LWMQTT_H 66 | -------------------------------------------------------------------------------- /esp_mqtt.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 9 | #include "esp_tls_lwmqtt.h" 10 | #endif 11 | 12 | #include "esp_lwmqtt.h" 13 | #include "esp_mqtt.h" 14 | 15 | #define ESP_MQTT_LOG_TAG "esp_mqtt" 16 | 17 | static SemaphoreHandle_t esp_mqtt_main_mutex = NULL; 18 | 19 | #define ESP_MQTT_LOCK_MAIN() \ 20 | do { \ 21 | } while (xSemaphoreTake(esp_mqtt_main_mutex, portMAX_DELAY) != pdPASS) 22 | 23 | #define ESP_MQTT_UNLOCK_MAIN() xSemaphoreGive(esp_mqtt_main_mutex) 24 | 25 | static SemaphoreHandle_t esp_mqtt_select_mutex = NULL; 26 | 27 | #define ESP_MQTT_LOCK_SELECT() \ 28 | do { \ 29 | } while (xSemaphoreTake(esp_mqtt_select_mutex, portMAX_DELAY) != pdPASS) 30 | 31 | #define ESP_MQTT_UNLOCK_SELECT() xSemaphoreGive(esp_mqtt_select_mutex) 32 | 33 | static TaskHandle_t esp_mqtt_task = NULL; 34 | 35 | static size_t esp_mqtt_buffer_size; 36 | static uint32_t esp_mqtt_command_timeout; 37 | 38 | static struct { 39 | char *host; 40 | char *port; 41 | char *client_id; 42 | char *username; 43 | char *password; 44 | } esp_mqtt_config = {0}; 45 | 46 | static struct { 47 | char *topic; 48 | char *payload; 49 | int qos; 50 | bool retained; 51 | } esp_mqtt_lwt_config = {0}; 52 | 53 | static bool esp_mqtt_running = false; 54 | static bool esp_mqtt_connected = false; 55 | static bool esp_mqtt_error = false; 56 | 57 | static esp_mqtt_status_callback_t esp_mqtt_status_callback = NULL; 58 | static esp_mqtt_message_callback_t esp_mqtt_message_callback = NULL; 59 | 60 | static lwmqtt_client_t esp_mqtt_client; 61 | 62 | static esp_lwmqtt_network_t esp_mqtt_network = {0}; 63 | 64 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 65 | static bool esp_mqtt_use_tls = false; 66 | static esp_tls_lwmqtt_network_t esp_mqtt_tls_network = {0}; 67 | #endif 68 | 69 | static esp_lwmqtt_timer_t esp_mqtt_timer1, esp_mqtt_timer2; 70 | 71 | static void *esp_mqtt_write_buffer; 72 | static void *esp_mqtt_read_buffer; 73 | static int esp_mqtt_core; 74 | 75 | static QueueHandle_t esp_mqtt_event_queue = NULL; 76 | 77 | typedef struct { 78 | void *buffer; 79 | lwmqtt_string_t topic; 80 | lwmqtt_message_t message; 81 | } esp_mqtt_event_t; 82 | 83 | void esp_mqtt_init(esp_mqtt_status_callback_t scb, esp_mqtt_message_callback_t mcb, size_t buffer_size, 84 | int command_timeout, int core) { 85 | // set callbacks 86 | esp_mqtt_status_callback = scb; 87 | esp_mqtt_message_callback = mcb; 88 | 89 | // set settings 90 | esp_mqtt_buffer_size = buffer_size; 91 | esp_mqtt_command_timeout = (uint32_t)command_timeout; 92 | esp_mqtt_core = core; 93 | 94 | // allocate buffers 95 | esp_mqtt_write_buffer = malloc((size_t)buffer_size); 96 | esp_mqtt_read_buffer = malloc((size_t)buffer_size); 97 | 98 | // create mutexes 99 | esp_mqtt_main_mutex = xSemaphoreCreateMutex(); 100 | esp_mqtt_select_mutex = xSemaphoreCreateMutex(); 101 | 102 | // create queue 103 | esp_mqtt_event_queue = xQueueCreate(CONFIG_ESP_MQTT_EVENT_QUEUE_SIZE, sizeof(esp_mqtt_event_t *)); 104 | } 105 | 106 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 107 | bool esp_mqtt_tls(bool enable, bool verify, const uint8_t *ca_buf, size_t ca_len) { 108 | // acquire mutex 109 | ESP_MQTT_LOCK_MAIN(); 110 | 111 | // free existing buffer 112 | if (esp_mqtt_tls_network.ca_buf) { 113 | free(esp_mqtt_tls_network.ca_buf); 114 | } 115 | 116 | // disable if requested 117 | if (!enable) { 118 | esp_mqtt_use_tls = false; 119 | esp_mqtt_tls_network.verify = false; 120 | esp_mqtt_tls_network.ca_buf = NULL; 121 | esp_mqtt_tls_network.ca_len = 0; 122 | ESP_MQTT_UNLOCK_MAIN(); 123 | return true; 124 | } 125 | 126 | // check ca certificate 127 | if (verify && (!ca_buf || ca_len <= 0)) { 128 | ESP_LOGE(ESP_MQTT_LOG_TAG, "esp_mqtt_tls: ca_buf must be not NULL when verify is enabled."); 129 | ESP_MQTT_UNLOCK_MAIN(); 130 | return false; 131 | } 132 | 133 | // set configuration 134 | esp_mqtt_use_tls = true; 135 | esp_mqtt_tls_network.verify = verify; 136 | esp_mqtt_tls_network.ca_buf = NULL; 137 | esp_mqtt_tls_network.ca_len = 0; 138 | 139 | // copy buffer 140 | if (ca_buf) { 141 | esp_mqtt_tls_network.ca_len = ca_len + 1; 142 | esp_mqtt_tls_network.ca_buf = malloc(ca_len + 1); 143 | memcpy(esp_mqtt_tls_network.ca_buf, ca_buf, ca_len); 144 | esp_mqtt_tls_network.ca_buf[ca_len] = 0; 145 | } 146 | 147 | // release mutex 148 | ESP_MQTT_UNLOCK_MAIN(); 149 | 150 | return true; 151 | } 152 | #endif 153 | 154 | static void esp_mqtt_message_handler(lwmqtt_client_t *client, void *ref, lwmqtt_string_t topic, lwmqtt_message_t msg) { 155 | // allocate buffer 156 | void *buffer = malloc(sizeof(esp_mqtt_event_t) + (size_t)topic.len + 1 + msg.payload_len + 1); 157 | 158 | // prepare message 159 | esp_mqtt_event_t *evt = buffer; 160 | 161 | // copy topic with additional null termination 162 | evt->topic.len = topic.len; 163 | evt->topic.data = buffer + sizeof(esp_mqtt_event_t); 164 | memcpy(evt->topic.data, topic.data, (size_t)topic.len); 165 | evt->topic.data[topic.len] = 0; 166 | 167 | // copy message with additional null termination 168 | evt->message.retained = msg.retained; 169 | evt->message.qos = msg.qos; 170 | evt->message.payload_len = msg.payload_len; 171 | evt->message.payload = buffer + sizeof(esp_mqtt_event_t) + (size_t)topic.len + 1; 172 | memcpy(evt->message.payload, msg.payload, (size_t)msg.payload_len); 173 | evt->message.payload[msg.payload_len] = 0; 174 | 175 | // queue event 176 | if (xQueueSend(esp_mqtt_event_queue, &evt, 0) != pdTRUE) { 177 | ESP_LOGE(ESP_MQTT_LOG_TAG, "xQueueSend: queue is full, dropping message"); 178 | free(evt); 179 | } 180 | } 181 | 182 | static void esp_mqtt_dispatch_events() { 183 | // receive next event 184 | esp_mqtt_event_t *evt = 0; 185 | while (xQueueReceive(esp_mqtt_event_queue, &evt, 0) == pdTRUE) { 186 | // call callback if existing 187 | if (esp_mqtt_message_callback) { 188 | esp_mqtt_message_callback(evt->topic.data, evt->message.payload, evt->message.payload_len, (int)evt->message.qos, 189 | evt->message.retained); 190 | } 191 | 192 | // free event 193 | free(evt); 194 | } 195 | } 196 | 197 | static bool esp_mqtt_process_connect() { 198 | // initialize the client 199 | lwmqtt_init(&esp_mqtt_client, esp_mqtt_write_buffer, esp_mqtt_buffer_size, esp_mqtt_read_buffer, 200 | esp_mqtt_buffer_size); 201 | 202 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 203 | if (esp_mqtt_use_tls) { 204 | lwmqtt_set_network(&esp_mqtt_client, &esp_mqtt_tls_network, esp_tls_lwmqtt_network_read, 205 | esp_tls_lwmqtt_network_write); 206 | } else { 207 | lwmqtt_set_network(&esp_mqtt_client, &esp_mqtt_network, esp_lwmqtt_network_read, esp_lwmqtt_network_write); 208 | } 209 | #else 210 | lwmqtt_set_network(&esp_mqtt_client, &esp_mqtt_network, esp_lwmqtt_network_read, esp_lwmqtt_network_write); 211 | #endif 212 | 213 | lwmqtt_set_timers(&esp_mqtt_client, &esp_mqtt_timer1, &esp_mqtt_timer2, esp_lwmqtt_timer_set, esp_lwmqtt_timer_get); 214 | lwmqtt_set_callback(&esp_mqtt_client, NULL, esp_mqtt_message_handler); 215 | 216 | // initiate network connection 217 | lwmqtt_err_t err; 218 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 219 | if (esp_mqtt_use_tls) { 220 | err = esp_tls_lwmqtt_network_connect(&esp_mqtt_tls_network, esp_mqtt_config.host, esp_mqtt_config.port); 221 | } else { 222 | err = esp_lwmqtt_network_connect(&esp_mqtt_network, esp_mqtt_config.host, esp_mqtt_config.port); 223 | } 224 | #else 225 | err = esp_lwmqtt_network_connect(&esp_mqtt_network, esp_mqtt_config.host, esp_mqtt_config.port); 226 | #endif 227 | 228 | if (err != LWMQTT_SUCCESS) { 229 | ESP_LOGE(ESP_MQTT_LOG_TAG, "esp_lwmqtt_network_connect: %d", err); 230 | return false; 231 | } 232 | 233 | // release mutex 234 | ESP_MQTT_UNLOCK_MAIN(); 235 | 236 | // acquire select mutex 237 | ESP_MQTT_LOCK_SELECT(); 238 | 239 | // wait for connection 240 | bool connected = false; 241 | 242 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 243 | if (esp_mqtt_use_tls) { 244 | err = esp_tls_lwmqtt_network_wait(&esp_mqtt_tls_network, &connected, esp_mqtt_command_timeout); 245 | } else { 246 | err = esp_lwmqtt_network_wait(&esp_mqtt_network, &connected, esp_mqtt_command_timeout); 247 | } 248 | #else 249 | err = esp_lwmqtt_network_wait(&esp_mqtt_network, &connected, esp_mqtt_command_timeout); 250 | #endif 251 | 252 | if (err != LWMQTT_SUCCESS) { 253 | ESP_LOGE(ESP_MQTT_LOG_TAG, "esp_lwmqtt_network_wait: %d", err); 254 | return false; 255 | } 256 | 257 | // release select mutex 258 | ESP_MQTT_UNLOCK_SELECT(); 259 | 260 | // acquire mutex 261 | ESP_MQTT_LOCK_MAIN(); 262 | 263 | // return if not connected 264 | if (!connected) { 265 | return false; 266 | } 267 | 268 | // setup connect data 269 | lwmqtt_options_t options = lwmqtt_default_options; 270 | options.keep_alive = 10; 271 | options.client_id = lwmqtt_string(esp_mqtt_config.client_id); 272 | options.username = lwmqtt_string(esp_mqtt_config.username); 273 | options.password = lwmqtt_string(esp_mqtt_config.password); 274 | 275 | // last will data 276 | lwmqtt_will_t will; 277 | will.topic = lwmqtt_string(esp_mqtt_lwt_config.topic); 278 | will.qos = (lwmqtt_qos_t)esp_mqtt_lwt_config.qos; 279 | will.retained = esp_mqtt_lwt_config.retained; 280 | will.payload = lwmqtt_string(esp_mqtt_lwt_config.payload); 281 | 282 | // attempt connection 283 | lwmqtt_return_code_t return_code; 284 | err = 285 | lwmqtt_connect(&esp_mqtt_client, options, will.topic.len ? &will : NULL, &return_code, esp_mqtt_command_timeout); 286 | if (err != LWMQTT_SUCCESS) { 287 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_connect: %d", err); 288 | return false; 289 | } 290 | 291 | return true; 292 | } 293 | 294 | static void esp_mqtt_process() { 295 | // connection loop 296 | for (;;) { 297 | // log attempt 298 | ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_process: begin connection attempt"); 299 | 300 | // acquire mutex 301 | ESP_MQTT_LOCK_MAIN(); 302 | 303 | // make connection attempt 304 | if (esp_mqtt_process_connect()) { 305 | // log success 306 | ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_process: connection attempt successful"); 307 | 308 | // set flag 309 | esp_mqtt_connected = true; 310 | 311 | // release mutex 312 | ESP_MQTT_UNLOCK_MAIN(); 313 | 314 | // exit loop 315 | break; 316 | } 317 | 318 | // release mutex 319 | ESP_MQTT_UNLOCK_MAIN(); 320 | 321 | // log fail 322 | ESP_LOGW(ESP_MQTT_LOG_TAG, "esp_mqtt_process: connection attempt failed"); 323 | 324 | // delay loop by 1s and yield to other processes 325 | vTaskDelay(1000 / portTICK_PERIOD_MS); 326 | } 327 | 328 | // call callback if existing 329 | if (esp_mqtt_status_callback) { 330 | esp_mqtt_status_callback(ESP_MQTT_STATUS_CONNECTED); 331 | } 332 | 333 | // yield loop 334 | for (;;) { 335 | // check for error 336 | if (esp_mqtt_error) { 337 | break; 338 | } 339 | 340 | // acquire select mutex 341 | ESP_MQTT_LOCK_SELECT(); 342 | 343 | // block until data is available 344 | bool available = false; 345 | 346 | lwmqtt_err_t err; 347 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 348 | if (esp_mqtt_use_tls) { 349 | err = esp_tls_lwmqtt_network_select(&esp_mqtt_tls_network, &available, esp_mqtt_command_timeout); 350 | } else { 351 | err = esp_lwmqtt_network_select(&esp_mqtt_network, &available, esp_mqtt_command_timeout); 352 | } 353 | #else 354 | err = esp_lwmqtt_network_select(&esp_mqtt_network, &available, esp_mqtt_command_timeout); 355 | #endif 356 | 357 | if (err != LWMQTT_SUCCESS) { 358 | ESP_LOGE(ESP_MQTT_LOG_TAG, "esp_lwmqtt_network_select: %d", err); 359 | ESP_MQTT_UNLOCK_SELECT(); 360 | break; 361 | } 362 | 363 | // release select mutex 364 | ESP_MQTT_UNLOCK_SELECT(); 365 | 366 | // acquire mutex 367 | ESP_MQTT_LOCK_MAIN(); 368 | 369 | // process data if available 370 | if (available) { 371 | // get available bytes 372 | size_t available_bytes = 0; 373 | 374 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 375 | if (esp_mqtt_use_tls) { 376 | err = esp_tls_lwmqtt_network_peek(&esp_mqtt_tls_network, &available_bytes, esp_mqtt_command_timeout); 377 | } else { 378 | err = esp_lwmqtt_network_peek(&esp_mqtt_network, &available_bytes); 379 | } 380 | #else 381 | err = esp_lwmqtt_network_peek(&esp_mqtt_network, &available_bytes); 382 | #endif 383 | 384 | if (err != LWMQTT_SUCCESS) { 385 | ESP_LOGE(ESP_MQTT_LOG_TAG, "esp_lwmqtt_network_peek: %d", err); 386 | ESP_MQTT_UNLOCK_MAIN(); 387 | break; 388 | } 389 | 390 | // yield client only if there is still data to read since select might unblock because of incoming ack packets 391 | // that are already handled until we get to this point 392 | if (available_bytes > 0) { 393 | err = lwmqtt_yield(&esp_mqtt_client, available_bytes, esp_mqtt_command_timeout); 394 | if (err != LWMQTT_SUCCESS) { 395 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_yield: %d", err); 396 | ESP_MQTT_UNLOCK_MAIN(); 397 | break; 398 | } 399 | } 400 | } 401 | 402 | // do mqtt background work 403 | err = lwmqtt_keep_alive(&esp_mqtt_client, esp_mqtt_command_timeout); 404 | if (err != LWMQTT_SUCCESS) { 405 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_keep_alive: %d", err); 406 | ESP_MQTT_UNLOCK_MAIN(); 407 | break; 408 | } 409 | 410 | // release mutex 411 | ESP_MQTT_UNLOCK_MAIN(); 412 | 413 | // dispatch queued events 414 | esp_mqtt_dispatch_events(); 415 | } 416 | 417 | // acquire mutex 418 | ESP_MQTT_LOCK_MAIN(); 419 | 420 | // disconnect network 421 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 422 | if (esp_mqtt_use_tls) { 423 | esp_tls_lwmqtt_network_disconnect(&esp_mqtt_tls_network); 424 | } else { 425 | esp_lwmqtt_network_disconnect(&esp_mqtt_network); 426 | } 427 | #else 428 | esp_lwmqtt_network_disconnect(&esp_mqtt_network); 429 | #endif 430 | 431 | // set flags 432 | esp_mqtt_connected = false; 433 | esp_mqtt_error = false; 434 | 435 | // release mutex 436 | ESP_MQTT_UNLOCK_MAIN(); 437 | 438 | // log event 439 | ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_process: lost connection"); 440 | 441 | // call callback if existing 442 | if (esp_mqtt_status_callback) { 443 | esp_mqtt_status_callback(ESP_MQTT_STATUS_DISCONNECTED); 444 | } 445 | } 446 | 447 | static void esp_mqtt_run(void *p) { 448 | // keep processing 449 | for (;;) { 450 | esp_mqtt_process(); 451 | } 452 | } 453 | 454 | void esp_mqtt_lwt(const char *topic, const char *payload, int qos, bool retained) { 455 | // acquire mutex 456 | ESP_MQTT_LOCK_MAIN(); 457 | 458 | // free topic if set 459 | if (esp_mqtt_lwt_config.topic != NULL) { 460 | free(esp_mqtt_lwt_config.topic); 461 | esp_mqtt_lwt_config.topic = NULL; 462 | } 463 | 464 | // free payload if set 465 | if (esp_mqtt_lwt_config.payload != NULL) { 466 | free(esp_mqtt_lwt_config.payload); 467 | esp_mqtt_lwt_config.payload = NULL; 468 | } 469 | 470 | // set topic if provided 471 | if (topic != NULL) { 472 | esp_mqtt_lwt_config.topic = strdup(topic); 473 | } 474 | 475 | // set payload if provided 476 | if (payload != NULL) { 477 | esp_mqtt_lwt_config.payload = strdup(payload); 478 | } 479 | 480 | // set qos 481 | esp_mqtt_lwt_config.qos = qos; 482 | 483 | // set retained 484 | esp_mqtt_lwt_config.retained = retained; 485 | 486 | // release mutex 487 | ESP_MQTT_UNLOCK_MAIN(); 488 | } 489 | 490 | bool esp_mqtt_start(const char *host, const char *port, const char *client_id, const char *username, 491 | const char *password) { 492 | // acquire mutex 493 | ESP_MQTT_LOCK_MAIN(); 494 | 495 | // check if already running 496 | if (esp_mqtt_running) { 497 | ESP_LOGW(ESP_MQTT_LOG_TAG, "esp_mqtt_start: already running"); 498 | ESP_MQTT_UNLOCK_MAIN(); 499 | return true; 500 | } 501 | 502 | // free host if set 503 | if (esp_mqtt_config.host != NULL) { 504 | free(esp_mqtt_config.host); 505 | esp_mqtt_config.host = NULL; 506 | } 507 | 508 | // free port if set 509 | if (esp_mqtt_config.port != NULL) { 510 | free(esp_mqtt_config.port); 511 | esp_mqtt_config.port = NULL; 512 | } 513 | 514 | // free client id if set 515 | if (esp_mqtt_config.client_id != NULL) { 516 | free(esp_mqtt_config.client_id); 517 | esp_mqtt_config.client_id = NULL; 518 | } 519 | 520 | // free username if set 521 | if (esp_mqtt_config.username != NULL) { 522 | free(esp_mqtt_config.username); 523 | esp_mqtt_config.username = NULL; 524 | } 525 | 526 | // free password if set 527 | if (esp_mqtt_config.password != NULL) { 528 | free(esp_mqtt_config.password); 529 | esp_mqtt_config.password = NULL; 530 | } 531 | 532 | // set host if provided 533 | if (host != NULL) { 534 | esp_mqtt_config.host = strdup(host); 535 | } 536 | 537 | // set port if provided 538 | if (port != NULL) { 539 | esp_mqtt_config.port = strdup(port); 540 | } 541 | 542 | // set client id if provided 543 | if (client_id != NULL) { 544 | esp_mqtt_config.client_id = strdup(client_id); 545 | } 546 | 547 | // set username if provided 548 | if (username != NULL) { 549 | esp_mqtt_config.username = strdup(username); 550 | } 551 | 552 | // set password if provided 553 | if (password != NULL) { 554 | esp_mqtt_config.password = strdup(password); 555 | } 556 | 557 | // create mqtt thread 558 | ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_start: create task"); 559 | BaseType_t ret = xTaskCreatePinnedToCore(esp_mqtt_run, "esp_mqtt", CONFIG_ESP_MQTT_TASK_STACK, NULL, 560 | CONFIG_ESP_MQTT_TASK_PRIORITY, &esp_mqtt_task, esp_mqtt_core); 561 | if (ret != pdPASS) { 562 | ESP_LOGW(ESP_MQTT_LOG_TAG, "esp_mqtt_start: failed to create task"); 563 | ESP_MQTT_UNLOCK_MAIN(); 564 | return false; 565 | } 566 | 567 | // set flag 568 | esp_mqtt_running = true; 569 | 570 | // release mutex 571 | ESP_MQTT_UNLOCK_MAIN(); 572 | 573 | return true; 574 | } 575 | 576 | bool esp_mqtt_subscribe(const char *topic, int qos) { 577 | // acquire mutex 578 | ESP_MQTT_LOCK_MAIN(); 579 | 580 | // check if still connected 581 | if (!esp_mqtt_connected) { 582 | ESP_LOGW(ESP_MQTT_LOG_TAG, "esp_mqtt_subscribe: not connected"); 583 | ESP_MQTT_UNLOCK_MAIN(); 584 | return false; 585 | } 586 | 587 | // subscribe to topic 588 | lwmqtt_err_t err = 589 | lwmqtt_subscribe_one(&esp_mqtt_client, lwmqtt_string(topic), (lwmqtt_qos_t)qos, esp_mqtt_command_timeout); 590 | if (err != LWMQTT_SUCCESS) { 591 | esp_mqtt_error = true; 592 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_subscribe_one: %d", err); 593 | ESP_MQTT_UNLOCK_MAIN(); 594 | return false; 595 | } 596 | 597 | // release mutex 598 | ESP_MQTT_UNLOCK_MAIN(); 599 | 600 | return true; 601 | } 602 | 603 | bool esp_mqtt_unsubscribe(const char *topic) { 604 | // acquire mutex 605 | ESP_MQTT_LOCK_MAIN(); 606 | 607 | // check if still connected 608 | if (!esp_mqtt_connected) { 609 | ESP_LOGW(ESP_MQTT_LOG_TAG, "esp_mqtt_unsubscribe: not connected"); 610 | ESP_MQTT_UNLOCK_MAIN(); 611 | return false; 612 | } 613 | 614 | // unsubscribe from topic 615 | lwmqtt_err_t err = lwmqtt_unsubscribe_one(&esp_mqtt_client, lwmqtt_string(topic), esp_mqtt_command_timeout); 616 | if (err != LWMQTT_SUCCESS) { 617 | esp_mqtt_error = true; 618 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_unsubscribe_one: %d", err); 619 | ESP_MQTT_UNLOCK_MAIN(); 620 | return false; 621 | } 622 | 623 | // release mutex 624 | ESP_MQTT_UNLOCK_MAIN(); 625 | 626 | return true; 627 | } 628 | 629 | bool esp_mqtt_publish(const char *topic, const uint8_t *payload, size_t len, int qos, bool retained) { 630 | // acquire mutex 631 | ESP_MQTT_LOCK_MAIN(); 632 | 633 | // check if still connected 634 | if (!esp_mqtt_connected) { 635 | ESP_LOGW(ESP_MQTT_LOG_TAG, "esp_mqtt_publish: not connected"); 636 | ESP_MQTT_UNLOCK_MAIN(); 637 | return false; 638 | } 639 | 640 | // prepare message 641 | lwmqtt_message_t message; 642 | message.qos = (lwmqtt_qos_t)qos; 643 | message.retained = retained; 644 | message.payload = (uint8_t*)payload; 645 | message.payload_len = len; 646 | 647 | // publish message 648 | lwmqtt_err_t err = lwmqtt_publish(&esp_mqtt_client, lwmqtt_string(topic), message, esp_mqtt_command_timeout); 649 | if (err != LWMQTT_SUCCESS) { 650 | esp_mqtt_error = true; 651 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_publish: %d", err); 652 | ESP_MQTT_UNLOCK_MAIN(); 653 | return false; 654 | } 655 | 656 | // release mutex 657 | ESP_MQTT_UNLOCK_MAIN(); 658 | 659 | return true; 660 | } 661 | 662 | void esp_mqtt_stop() { 663 | // acquire mutexes 664 | ESP_MQTT_LOCK_MAIN(); 665 | ESP_MQTT_LOCK_SELECT(); 666 | 667 | // return immediately if not running anymore 668 | if (!esp_mqtt_running) { 669 | ESP_MQTT_UNLOCK_SELECT(); 670 | ESP_MQTT_UNLOCK_MAIN(); 671 | return; 672 | } 673 | 674 | // attempt to properly disconnect a connected client 675 | if (esp_mqtt_connected) { 676 | lwmqtt_err_t err = lwmqtt_disconnect(&esp_mqtt_client, esp_mqtt_command_timeout); 677 | if (err != LWMQTT_SUCCESS) { 678 | ESP_LOGE(ESP_MQTT_LOG_TAG, "lwmqtt_disconnect: %d", err); 679 | } 680 | 681 | // set flag 682 | esp_mqtt_connected = false; 683 | } 684 | 685 | // disconnect network 686 | #if defined(CONFIG_ESP_MQTT_TLS_ENABLE) 687 | if (esp_mqtt_use_tls) { 688 | esp_tls_lwmqtt_network_disconnect(&esp_mqtt_tls_network); 689 | } else { 690 | esp_lwmqtt_network_disconnect(&esp_mqtt_network); 691 | } 692 | #else 693 | esp_lwmqtt_network_disconnect(&esp_mqtt_network); 694 | #endif 695 | 696 | // kill mqtt task 697 | ESP_LOGI(ESP_MQTT_LOG_TAG, "esp_mqtt_stop: deleting task"); 698 | vTaskDelete(esp_mqtt_task); 699 | 700 | // set flag 701 | esp_mqtt_running = false; 702 | 703 | // release mutexes 704 | ESP_MQTT_UNLOCK_SELECT(); 705 | ESP_MQTT_UNLOCK_MAIN(); 706 | } 707 | -------------------------------------------------------------------------------- /esp_mqtt.h: -------------------------------------------------------------------------------- 1 | #ifndef ESP_MQTT_H 2 | #define ESP_MQTT_H 3 | 4 | #include 5 | #include 6 | 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | 11 | /** 12 | * The statuses emitted by the status callback. 13 | */ 14 | typedef enum esp_mqtt_status_t { ESP_MQTT_STATUS_DISCONNECTED, ESP_MQTT_STATUS_CONNECTED } esp_mqtt_status_t; 15 | 16 | /** 17 | * The status callback. 18 | */ 19 | typedef void (*esp_mqtt_status_callback_t)(esp_mqtt_status_t); 20 | 21 | /** 22 | * The message callback. 23 | */ 24 | typedef void (*esp_mqtt_message_callback_t)(const char *topic, const uint8_t *payload, size_t len, int qos, 25 | bool retained); 26 | 27 | /** 28 | * Initialize the MQTT management system. 29 | * 30 | * Note: Should only be called once on boot. 31 | * 32 | * @param scb - The status callback. 33 | * @param mcb - The message callback. 34 | * @param buffer_size - The read and write buffer size. 35 | * @param command_timeout - The command timeout. 36 | * @param core - The core to run the background task on. 37 | */ 38 | void esp_mqtt_init(esp_mqtt_status_callback_t scb, esp_mqtt_message_callback_t mcb, size_t buffer_size, 39 | int command_timeout, int core); 40 | 41 | /** 42 | * Configure TLS connection. 43 | * 44 | * The specified CA certificate is not copied and must be available during the whole duration of the TLS session. 45 | * 46 | * Note: This method must be called before `esp_mqtt_start`. 47 | * 48 | * @param enable - Whether TLS should be used. 49 | * @param verify - Whether the connection should be verified. 50 | * @param ca_buf - The beginning of the CA certificate buffer. 51 | * @param ca_len - The length of the CA certificate buffer. 52 | * @return Whether TLS configuration was successful. 53 | */ 54 | bool esp_mqtt_tls(bool enable, bool verify, const uint8_t *ca_buf, size_t ca_len); 55 | 56 | /** 57 | * Configure Last Will and Testament. 58 | * 59 | * Note: Must be called before `esp_mqtt_start`. 60 | * 61 | * @param topic - The LWT topic. 62 | * @param payload - The LWT payload. 63 | * @param qos - The LWT QoS level. 64 | * @param retained - The LWT retained flag. 65 | */ 66 | void esp_mqtt_lwt(const char *topic, const char *payload, int qos, bool retained); 67 | 68 | /** 69 | * Start the MQTT process. 70 | * 71 | * The background process will continuously attempt to connect to the specified broker. If a connection has been 72 | * established the status `ESP_MQTT_STATUS_CONNECTED` is emitted. Upon receiving this event the functions 73 | * `esp_mqtt_subscribe`, `esp_mqtt_unsubscribe` and `esp_mqtt_publish` can be used to interact with the broker. If the 74 | * connection is lost the status `ESP_MQTT_STATUS_DISCONNECTED` es emitted and the process restarted. The process can be 75 | * stopped anytime by calling `esp_mqtt_stop()`. However, if an established connection is stopped, the status 76 | * `ESP_MQTT_STATUS_DISCONNECTED` will not be emitted. 77 | * 78 | * @param host - The broker host. 79 | * @param port - The broker port. 80 | * @param client_id - The client id. 81 | * @param username - The client username. 82 | * @param password - The client password. 83 | * @return Whether the operation was successful. 84 | */ 85 | bool esp_mqtt_start(const char *host, const char *port, const char *client_id, const char *username, 86 | const char *password); 87 | 88 | /** 89 | * Subscribe to specified topic. 90 | * 91 | * When false is returned the current operation failed and any subsequent interactions will also fail until a new 92 | * connection has been established and the status `ESP_MQTT_STATUS_CONNECTED` is emitted. 93 | * 94 | * @param topic - The topic. 95 | * @param qos - The qos level. 96 | * @return Whether the operation was successful. 97 | */ 98 | bool esp_mqtt_subscribe(const char *topic, int qos); 99 | 100 | /** 101 | * Unsubscribe from specified topic. 102 | * 103 | * When false is returned the current operation failed and any subsequent interactions will also fail until a new 104 | * connection has been established and the status `ESP_MQTT_STATUS_CONNECTED` is emitted. 105 | * 106 | * @param topic - The topic. 107 | * @return Whether the operation was successful. 108 | */ 109 | bool esp_mqtt_unsubscribe(const char *topic); 110 | 111 | /** 112 | * Publish bytes payload to specified topic. 113 | * 114 | * When false is returned the current operation failed and any subsequent interactions will also fail until a new 115 | * connection has been established and the status `ESP_MQTT_STATUS_CONNECTED` is emitted. 116 | * 117 | * @param topic - The topic. 118 | * @param payload - The payload. 119 | * @param len - The payload length. 120 | * @param qos - The qos level. 121 | * @param retained - The retained flag. 122 | * @return Whether the operation was successful. 123 | */ 124 | bool esp_mqtt_publish(const char *topic, const uint8_t *payload, size_t len, int qos, bool retained); 125 | 126 | /** 127 | * Stop the MQTT process. 128 | * 129 | * Will stop the running MQTT process. 130 | */ 131 | void esp_mqtt_stop(); 132 | 133 | #ifdef __cplusplus 134 | } 135 | #endif 136 | 137 | #endif // ESP_MQTT_H 138 | -------------------------------------------------------------------------------- /esp_tls_lwmqtt.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include // needed 3 | 4 | // mbed TLS documentation: https://tls.mbed.org 5 | 6 | #include "esp_tls_lwmqtt.h" 7 | 8 | static void esp_tls_log(const char *name, int ret) { 9 | char str[256]; 10 | mbedtls_strerror(ret, str, 256); 11 | ESP_LOGE("esp-mqtt", "%s: %s (%d)", name, str, ret); 12 | } 13 | 14 | lwmqtt_err_t esp_tls_lwmqtt_network_connect(esp_tls_lwmqtt_network_t *n, char *host, char *port) { 15 | // disconnect if not already the case 16 | esp_tls_lwmqtt_network_disconnect(n); 17 | 18 | // initialize support structures 19 | mbedtls_net_init(&n->socket); 20 | mbedtls_ssl_init(&n->ssl); 21 | mbedtls_ssl_config_init(&n->conf); 22 | mbedtls_x509_crt_init(&n->cacert); 23 | mbedtls_ctr_drbg_init(&n->ctr_drbg); 24 | mbedtls_entropy_init(&n->entropy); 25 | 26 | // setup entropy source 27 | int ret = mbedtls_ctr_drbg_seed(&n->ctr_drbg, mbedtls_entropy_func, &n->entropy, NULL, 0); 28 | if (ret != 0) { 29 | esp_tls_log("mbedtls_ctr_drbg_seed", ret); 30 | return LWMQTT_NETWORK_FAILED_CONNECT; 31 | } 32 | 33 | // parse ca certificate 34 | if (n->ca_buf) { 35 | ret = mbedtls_x509_crt_parse(&n->cacert, n->ca_buf, n->ca_len); 36 | if (ret != 0) { 37 | esp_tls_log("mbedtls_x509_crt_parse", ret); 38 | return LWMQTT_NETWORK_FAILED_CONNECT; 39 | } 40 | } 41 | 42 | // connect socket 43 | ret = mbedtls_net_connect(&n->socket, host, port, MBEDTLS_NET_PROTO_TCP); 44 | if (ret != 0) { 45 | esp_tls_log("mbedtls_net_connect", ret); 46 | return LWMQTT_NETWORK_FAILED_CONNECT; 47 | } 48 | 49 | // load defaults 50 | ret = mbedtls_ssl_config_defaults(&n->conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, 51 | MBEDTLS_SSL_PRESET_DEFAULT); 52 | if (ret != 0) { 53 | esp_tls_log("mbedtls_ssl_config_defaults", ret); 54 | return LWMQTT_NETWORK_FAILED_CONNECT; 55 | } 56 | 57 | // set ca certificate 58 | if (n->ca_buf) { 59 | mbedtls_ssl_conf_ca_chain(&n->conf, &n->cacert, NULL); 60 | } 61 | 62 | // set auth mode 63 | mbedtls_ssl_conf_authmode(&n->conf, (n->verify) ? MBEDTLS_SSL_VERIFY_REQUIRED : MBEDTLS_SSL_VERIFY_NONE); 64 | 65 | // set rng callback 66 | mbedtls_ssl_conf_rng(&n->conf, mbedtls_ctr_drbg_random, &n->ctr_drbg); 67 | 68 | // setup ssl context 69 | ret = mbedtls_ssl_setup(&n->ssl, &n->conf); 70 | if (ret != 0) { 71 | esp_tls_log("mbedtls_ssl_setup", ret); 72 | return LWMQTT_NETWORK_FAILED_CONNECT; 73 | } 74 | 75 | // set hostname 76 | ret = mbedtls_ssl_set_hostname(&n->ssl, host); 77 | if (ret != 0) { 78 | esp_tls_log("mbedtls_ssl_set_hostname", ret); 79 | return LWMQTT_NETWORK_FAILED_CONNECT; 80 | } 81 | 82 | // set bio callbacks 83 | mbedtls_ssl_set_bio(&n->ssl, &n->socket, mbedtls_net_send, mbedtls_net_recv, NULL); 84 | 85 | // verify certificate if requested 86 | if (n->verify) { 87 | uint32_t flags = mbedtls_ssl_get_verify_result(&n->ssl); 88 | if (flags != 0) { 89 | char verify_buf[100] = {0}; 90 | mbedtls_x509_crt_verify_info(verify_buf, sizeof(verify_buf), " ! ", flags); 91 | ESP_LOGE("esp-mqtt", "%mbedtls_ssl_get_verify_result: %s (%ld)", verify_buf, flags); 92 | } 93 | } 94 | 95 | // perform handshake 96 | ret = mbedtls_ssl_handshake(&n->ssl); 97 | if (ret != 0) { 98 | esp_tls_log("mbedtls_ssl_handshake", ret); 99 | return LWMQTT_NETWORK_FAILED_CONNECT; 100 | } 101 | 102 | return LWMQTT_SUCCESS; 103 | } 104 | 105 | lwmqtt_err_t esp_tls_lwmqtt_network_wait(esp_tls_lwmqtt_network_t *n, bool *connected, uint32_t timeout) { 106 | // prepare sets 107 | fd_set set; 108 | fd_set ex_set; 109 | FD_ZERO(&set); 110 | FD_ZERO(&ex_set); 111 | FD_SET(n->socket.fd, &set); 112 | FD_SET(n->socket.fd, &ex_set); 113 | 114 | // wait for data 115 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 116 | int result = select(n->socket.fd + 1, NULL, &set, &ex_set, &t); 117 | if (result < 0 || FD_ISSET(n->socket.fd, &ex_set)) { 118 | return LWMQTT_NETWORK_FAILED_CONNECT; 119 | } 120 | 121 | // set whether socket is connected 122 | *connected = result > 0; 123 | 124 | // set socket to blocking 125 | int ret = mbedtls_net_set_block(&n->socket); 126 | if (ret < 0) { 127 | esp_tls_log("mbedtls_net_set_block", ret); 128 | return LWMQTT_NETWORK_FAILED_CONNECT; 129 | } 130 | 131 | return LWMQTT_SUCCESS; 132 | } 133 | 134 | void esp_tls_lwmqtt_network_disconnect(esp_tls_lwmqtt_network_t *n) { 135 | // check if network is available 136 | if (!n) { 137 | return; 138 | } 139 | 140 | // cleanup resources 141 | mbedtls_ssl_close_notify(&n->ssl); 142 | mbedtls_x509_crt_free(&n->cacert); 143 | mbedtls_entropy_free(&n->entropy); 144 | mbedtls_ssl_config_free(&n->conf); 145 | mbedtls_ctr_drbg_free(&n->ctr_drbg); 146 | mbedtls_ssl_free(&n->ssl); 147 | mbedtls_net_free(&n->socket); 148 | } 149 | 150 | lwmqtt_err_t esp_tls_lwmqtt_network_select(esp_tls_lwmqtt_network_t *n, bool *available, uint32_t timeout) { 151 | // prepare sets 152 | fd_set set; 153 | fd_set ex_set; 154 | FD_ZERO(&set); 155 | FD_ZERO(&ex_set); 156 | FD_SET(n->socket.fd, &set); 157 | FD_SET(n->socket.fd, &ex_set); 158 | 159 | // wait for data 160 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 161 | int result = select(n->socket.fd + 1, &set, NULL, &ex_set, &t); 162 | if (result < 0 || FD_ISSET(n->socket.fd, &ex_set)) { 163 | return LWMQTT_NETWORK_FAILED_READ; 164 | } 165 | 166 | // set whether data is available 167 | *available = result > 0; 168 | 169 | return LWMQTT_SUCCESS; 170 | } 171 | 172 | lwmqtt_err_t esp_tls_lwmqtt_network_peek(esp_tls_lwmqtt_network_t *n, size_t *available, uint32_t timeout) { 173 | // set timeout 174 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 175 | int rc = setsockopt(n->socket.fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof(t)); 176 | if (rc < 0) { 177 | return LWMQTT_NETWORK_FAILED_READ; 178 | } 179 | 180 | // set socket to non blocking 181 | int ret = mbedtls_net_set_nonblock(&n->socket); 182 | if (ret != 0) { 183 | esp_tls_log("mbedtls_net_set_nonblock", ret); 184 | return LWMQTT_NETWORK_FAILED_READ; 185 | } 186 | 187 | // TODO: Directly peek on underlying socket? 188 | 189 | // check if socket is valid 190 | ret = mbedtls_ssl_read(&n->ssl, NULL, 0); 191 | if (ret < 0 && ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { 192 | esp_tls_log("mbedtls_ssl_read", ret); 193 | return LWMQTT_NETWORK_FAILED_READ; 194 | } 195 | 196 | // set available bytes 197 | *available = mbedtls_ssl_get_bytes_avail(&n->ssl); 198 | 199 | // set socket back to blocking 200 | ret = mbedtls_net_set_block(&n->socket); 201 | if (ret != 0) { 202 | esp_tls_log("mbedtls_net_set_block", ret); 203 | return LWMQTT_NETWORK_FAILED_READ; 204 | } 205 | 206 | return LWMQTT_SUCCESS; 207 | } 208 | 209 | lwmqtt_err_t esp_tls_lwmqtt_network_read(void *ref, uint8_t *buffer, size_t len, size_t *received, uint32_t timeout) { 210 | // cast network reference 211 | esp_tls_lwmqtt_network_t *n = (esp_tls_lwmqtt_network_t *)ref; 212 | 213 | // set timeout 214 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 215 | int rc = setsockopt(n->socket.fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&t, sizeof(t)); 216 | if (rc < 0) { 217 | return LWMQTT_NETWORK_FAILED_READ; 218 | } 219 | 220 | // read from socket 221 | int ret = mbedtls_ssl_read(&n->ssl, buffer, len); 222 | if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { 223 | return LWMQTT_SUCCESS; 224 | } else if (ret <= 0) { 225 | esp_tls_log("mbedtls_ssl_read", ret); 226 | return LWMQTT_NETWORK_FAILED_READ; 227 | } 228 | 229 | // increment counter 230 | *received += ret; 231 | 232 | return LWMQTT_SUCCESS; 233 | } 234 | 235 | lwmqtt_err_t esp_tls_lwmqtt_network_write(void *ref, uint8_t *buffer, size_t len, size_t *sent, uint32_t timeout) { 236 | // cast network reference 237 | esp_tls_lwmqtt_network_t *n = (esp_tls_lwmqtt_network_t *)ref; 238 | 239 | // set timeout 240 | struct timeval t = {.tv_sec = timeout / 1000, .tv_usec = (timeout % 1000) * 1000}; 241 | int rc = setsockopt(n->socket.fd, SOL_SOCKET, SO_SNDTIMEO, (char *)&t, sizeof(t)); 242 | if (rc < 0) { 243 | return LWMQTT_NETWORK_FAILED_WRITE; 244 | } 245 | 246 | // write to socket 247 | int ret = mbedtls_ssl_write(&n->ssl, buffer, len); 248 | if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) { 249 | return LWMQTT_SUCCESS; 250 | } else if (ret < 0) { 251 | esp_tls_log("mbedtls_ssl_write", ret); 252 | return LWMQTT_NETWORK_FAILED_WRITE; 253 | } 254 | 255 | // increment counter 256 | *sent += ret; 257 | 258 | return LWMQTT_SUCCESS; 259 | } 260 | -------------------------------------------------------------------------------- /esp_tls_lwmqtt.h: -------------------------------------------------------------------------------- 1 | #ifndef ESP_TLS_LWMQTT_H 2 | #define ESP_TLS_LWMQTT_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | /** 15 | * The tls lwmqtt network object for the esp platform. 16 | */ 17 | typedef struct { 18 | mbedtls_entropy_context entropy; 19 | mbedtls_ctr_drbg_context ctr_drbg; 20 | mbedtls_ssl_context ssl; 21 | mbedtls_ssl_config conf; 22 | mbedtls_x509_crt cacert; 23 | mbedtls_net_context socket; 24 | uint8_t *ca_buf; 25 | size_t ca_len; 26 | bool verify; 27 | } esp_tls_lwmqtt_network_t; 28 | 29 | /** 30 | * Initiate a connection to the specified remote host. 31 | */ 32 | lwmqtt_err_t esp_tls_lwmqtt_network_connect(esp_tls_lwmqtt_network_t *n, char *host, char *port); 33 | 34 | /** 35 | * Wait until the socket is connected or a timeout has been reached. 36 | */ 37 | lwmqtt_err_t esp_tls_lwmqtt_network_wait(esp_tls_lwmqtt_network_t *n, bool *connected, uint32_t timeout); 38 | 39 | /** 40 | * Terminate the connection. 41 | */ 42 | void esp_tls_lwmqtt_network_disconnect(esp_tls_lwmqtt_network_t *n); 43 | 44 | /** 45 | * Will set available to the available amount of data in the underlying network buffer. 46 | */ 47 | lwmqtt_err_t esp_tls_lwmqtt_network_peek(esp_tls_lwmqtt_network_t *n, size_t *available, uint32_t timeout); 48 | 49 | /** 50 | * Will wait for a socket until data is available or the timeout has been reached. 51 | */ 52 | lwmqtt_err_t esp_tls_lwmqtt_network_select(esp_tls_lwmqtt_network_t *n, bool *available, uint32_t timeout); 53 | 54 | /** 55 | * The tls lwmqtt network read callback for the esp platform. 56 | */ 57 | lwmqtt_err_t esp_tls_lwmqtt_network_read(void *ref, uint8_t *buf, size_t len, size_t *received, uint32_t timeout); 58 | 59 | /** 60 | * The tls lwmqtt network write callback for the esp platform. 61 | */ 62 | lwmqtt_err_t esp_tls_lwmqtt_network_write(void *ref, uint8_t *buf, size_t len, size_t *sent, uint32_t timeout); 63 | 64 | #endif // ESP_LWMQTT_H 65 | -------------------------------------------------------------------------------- /test/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.5) 2 | include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3 | project(esp-mqtt) 4 | -------------------------------------------------------------------------------- /test/components/esp-mqtt: -------------------------------------------------------------------------------- 1 | ../../ -------------------------------------------------------------------------------- /test/main/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | idf_component_register(SRCS "main.c" INCLUDE_DIRS "" EMBED_FILES server_root_cert.pem) 2 | -------------------------------------------------------------------------------- /test/main/main.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #define WIFI_SSID "" 10 | #define WIFI_PASS "" 11 | 12 | #define MQTT_HOST "public.cloud.shiftr.io" 13 | #define MQTT_USER "public" 14 | #define MQTT_PASS "public" 15 | 16 | #define MQTT_PORT "1883" 17 | #define MQTTS_PORT "8883" 18 | 19 | #define PUBLISH_INTERVAL 1000 20 | #define RESTART_INTERVAL 20000 21 | 22 | // openssl s_client -showcerts -connect garage.cloud.shiftr.io:8883 -servername garage.cloud.shiftr.io 23 | extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start"); 24 | extern const uint8_t server_root_cert_pem_end[] asm("_binary_server_root_cert_pem_end"); 25 | 26 | static void connect() { 27 | static bool use_tls = false; 28 | 29 | // cycle use tls 30 | use_tls = !use_tls; 31 | 32 | // start mqtt 33 | ESP_LOGI("test", "starting mqtt (tls=%d)", use_tls); 34 | esp_mqtt_tls(use_tls, true, server_root_cert_pem_start, server_root_cert_pem_end - server_root_cert_pem_start); 35 | esp_mqtt_start(MQTT_HOST, use_tls ? MQTTS_PORT : MQTT_PORT, "esp-mqtt", MQTT_USER, MQTT_PASS); 36 | } 37 | 38 | static void process(void *p) { 39 | for (;;) { 40 | // publish every second 41 | esp_mqtt_publish("/hello", (uint8_t *)"world", 5, 2, false); 42 | vTaskDelay(PUBLISH_INTERVAL / portTICK_PERIOD_MS); 43 | } 44 | } 45 | 46 | static void restart(void *_) { 47 | // initial start 48 | connect(); 49 | 50 | for (;;) { 51 | // restart periodically 52 | vTaskDelay(RESTART_INTERVAL / portTICK_PERIOD_MS); 53 | esp_mqtt_stop(); 54 | connect(); 55 | } 56 | } 57 | 58 | static void event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { 59 | if (event_base == WIFI_EVENT) { 60 | switch (event_id) { 61 | case WIFI_EVENT_STA_START: 62 | // connect to ap 63 | ESP_ERROR_CHECK_WITHOUT_ABORT(esp_wifi_connect()); 64 | 65 | break; 66 | 67 | case IP_EVENT_STA_GOT_IP: 68 | break; 69 | 70 | case WIFI_EVENT_STA_DISCONNECTED: 71 | // reconnect Wi-Fi 72 | ESP_ERROR_CHECK_WITHOUT_ABORT(esp_wifi_connect()); 73 | 74 | break; 75 | 76 | default: 77 | break; 78 | } 79 | } 80 | } 81 | 82 | static void status_callback(esp_mqtt_status_t status) { 83 | switch (status) { 84 | case ESP_MQTT_STATUS_CONNECTED: 85 | // subscribe 86 | esp_mqtt_subscribe("/hello", 2); 87 | 88 | break; 89 | 90 | case ESP_MQTT_STATUS_DISCONNECTED: 91 | default: 92 | break; 93 | } 94 | } 95 | 96 | static void message_callback(const char *topic, const uint8_t *payload, size_t len, int qos, bool retained) { 97 | ESP_LOGI("test", "incoming: %s => %s (len=%d qos=%d ret=%d)", topic, payload, (int)len, qos, retained); 98 | } 99 | 100 | void app_main() { 101 | // initialize NVS flash 102 | ESP_ERROR_CHECK(nvs_flash_init()); 103 | 104 | // initialize networking 105 | ESP_ERROR_CHECK(esp_netif_init()); 106 | 107 | // create default event loop 108 | ESP_ERROR_CHECK(esp_event_loop_create_default()); 109 | 110 | // enable Wi-Fi 111 | esp_netif_create_default_wifi_sta(); 112 | 113 | // initialize Wi-Fi 114 | wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); 115 | ESP_ERROR_CHECK(esp_wifi_init(&cfg)); 116 | 117 | // set Wi-Fi storage to ram 118 | ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM)); 119 | 120 | // set wifi mode 121 | ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); 122 | 123 | // register event handlers 124 | ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, NULL)); 125 | ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, NULL)); 126 | 127 | // prepare Wi-Fi config 128 | wifi_config_t wifi_config = {.sta = {.ssid = WIFI_SSID, .password = WIFI_PASS}}; 129 | ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); 130 | ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); 131 | 132 | // start Wi-Fi 133 | ESP_ERROR_CHECK(esp_wifi_start()); 134 | 135 | // initialize mqtt 136 | esp_mqtt_init(status_callback, message_callback, 256, 2000, 1); 137 | 138 | // create tasks 139 | xTaskCreatePinnedToCore(process, "process", 4096, NULL, 10, NULL, 1); 140 | xTaskCreatePinnedToCore(restart, "restart", 4066, NULL, 10, NULL, 1); 141 | } 142 | -------------------------------------------------------------------------------- /test/main/server_root_cert.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/ 3 | MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT 4 | DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow 5 | TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh 6 | cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB 7 | AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC 8 | ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL 9 | wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D 10 | LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK 11 | 4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5 12 | bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y 13 | sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ 14 | Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4 15 | FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc 16 | SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql 17 | PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND 18 | TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw 19 | SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1 20 | c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx 21 | +tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB 22 | ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu 23 | b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E 24 | U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu 25 | MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC 26 | 5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW 27 | 9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG 28 | WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O 29 | he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC 30 | Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5 31 | -----END CERTIFICATE----- 32 | -------------------------------------------------------------------------------- /test/sdkconfig: -------------------------------------------------------------------------------- 1 | # 2 | # Automatically generated file. DO NOT EDIT. 3 | # Espressif IoT Development Framework (ESP-IDF) 5.2.2 Project Configuration 4 | # 5 | CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" 6 | CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" 7 | CONFIG_SOC_DPORT_WORKAROUND="Not determined" 8 | CONFIG_SOC_CAPS_ECO_VER_MAX=301 9 | CONFIG_SOC_ADC_SUPPORTED=y 10 | CONFIG_SOC_DAC_SUPPORTED=y 11 | CONFIG_SOC_UART_SUPPORTED=y 12 | CONFIG_SOC_MCPWM_SUPPORTED=y 13 | CONFIG_SOC_GPTIMER_SUPPORTED=y 14 | CONFIG_SOC_SDMMC_HOST_SUPPORTED=y 15 | CONFIG_SOC_BT_SUPPORTED=y 16 | CONFIG_SOC_PCNT_SUPPORTED=y 17 | CONFIG_SOC_WIFI_SUPPORTED=y 18 | CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y 19 | CONFIG_SOC_TWAI_SUPPORTED=y 20 | CONFIG_SOC_EFUSE_SUPPORTED=y 21 | CONFIG_SOC_EMAC_SUPPORTED=y 22 | CONFIG_SOC_ULP_SUPPORTED=y 23 | CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y 24 | CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y 25 | CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y 26 | CONFIG_SOC_RTC_MEM_SUPPORTED=y 27 | CONFIG_SOC_I2S_SUPPORTED=y 28 | CONFIG_SOC_RMT_SUPPORTED=y 29 | CONFIG_SOC_SDM_SUPPORTED=y 30 | CONFIG_SOC_GPSPI_SUPPORTED=y 31 | CONFIG_SOC_LEDC_SUPPORTED=y 32 | CONFIG_SOC_I2C_SUPPORTED=y 33 | CONFIG_SOC_SUPPORT_COEXISTENCE=y 34 | CONFIG_SOC_AES_SUPPORTED=y 35 | CONFIG_SOC_MPI_SUPPORTED=y 36 | CONFIG_SOC_SHA_SUPPORTED=y 37 | CONFIG_SOC_FLASH_ENC_SUPPORTED=y 38 | CONFIG_SOC_SECURE_BOOT_SUPPORTED=y 39 | CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y 40 | CONFIG_SOC_BOD_SUPPORTED=y 41 | CONFIG_SOC_ULP_FSM_SUPPORTED=y 42 | CONFIG_SOC_CLK_TREE_SUPPORTED=y 43 | CONFIG_SOC_MPU_SUPPORTED=y 44 | CONFIG_SOC_WDT_SUPPORTED=y 45 | CONFIG_SOC_SPI_FLASH_SUPPORTED=y 46 | CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 47 | CONFIG_SOC_XTAL_SUPPORT_26M=y 48 | CONFIG_SOC_XTAL_SUPPORT_40M=y 49 | CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y 50 | CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y 51 | CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y 52 | CONFIG_SOC_ADC_DMA_SUPPORTED=y 53 | CONFIG_SOC_ADC_PERIPH_NUM=2 54 | CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 55 | CONFIG_SOC_ADC_ATTEN_NUM=4 56 | CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 57 | CONFIG_SOC_ADC_PATT_LEN_MAX=16 58 | CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 59 | CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 60 | CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 61 | CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 62 | CONFIG_SOC_ADC_DIGI_MONITOR_NUM=0 63 | CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 64 | CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 65 | CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 66 | CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 67 | CONFIG_SOC_ADC_SHARED_POWER=y 68 | CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y 69 | CONFIG_SOC_IDCACHE_PER_CORE=y 70 | CONFIG_SOC_CPU_CORES_NUM=2 71 | CONFIG_SOC_CPU_INTR_NUM=32 72 | CONFIG_SOC_CPU_HAS_FPU=y 73 | CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y 74 | CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 75 | CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 76 | CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 77 | CONFIG_SOC_DAC_CHAN_NUM=2 78 | CONFIG_SOC_DAC_RESOLUTION=8 79 | CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y 80 | CONFIG_SOC_GPIO_PORT=1 81 | CONFIG_SOC_GPIO_PIN_COUNT=40 82 | CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF 83 | CONFIG_SOC_GPIO_IN_RANGE_MAX=39 84 | CONFIG_SOC_GPIO_OUT_RANGE_MAX=33 85 | CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA 86 | CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y 87 | CONFIG_SOC_I2C_NUM=2 88 | CONFIG_SOC_I2C_FIFO_LEN=32 89 | CONFIG_SOC_I2C_CMD_REG_NUM=16 90 | CONFIG_SOC_I2C_SUPPORT_SLAVE=y 91 | CONFIG_SOC_I2C_SUPPORT_APB=y 92 | CONFIG_SOC_I2C_STOP_INDEPENDENT=y 93 | CONFIG_SOC_I2S_NUM=2 94 | CONFIG_SOC_I2S_HW_VERSION_1=y 95 | CONFIG_SOC_I2S_SUPPORTS_APLL=y 96 | CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y 97 | CONFIG_SOC_I2S_SUPPORTS_PDM=y 98 | CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y 99 | CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 100 | CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y 101 | CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 102 | CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y 103 | CONFIG_SOC_I2S_SUPPORTS_ADC=y 104 | CONFIG_SOC_I2S_SUPPORTS_DAC=y 105 | CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y 106 | CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y 107 | CONFIG_SOC_I2S_LCD_I80_VARIANT=y 108 | CONFIG_SOC_LCD_I80_SUPPORTED=y 109 | CONFIG_SOC_LCD_I80_BUSES=2 110 | CONFIG_SOC_LCD_I80_BUS_WIDTH=24 111 | CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y 112 | CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y 113 | CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y 114 | CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y 115 | CONFIG_SOC_LEDC_CHANNEL_NUM=8 116 | CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 117 | CONFIG_SOC_MCPWM_GROUPS=2 118 | CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 119 | CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 120 | CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 121 | CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 122 | CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 123 | CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 124 | CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y 125 | CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 126 | CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 127 | CONFIG_SOC_MMU_PERIPH_NUM=2 128 | CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 129 | CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 130 | CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 131 | CONFIG_SOC_PCNT_GROUPS=1 132 | CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 133 | CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 134 | CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 135 | CONFIG_SOC_RMT_GROUPS=1 136 | CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 137 | CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 138 | CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 139 | CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 140 | CONFIG_SOC_RMT_SUPPORT_REF_TICK=y 141 | CONFIG_SOC_RMT_SUPPORT_APB=y 142 | CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y 143 | CONFIG_SOC_RTCIO_PIN_COUNT=18 144 | CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y 145 | CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y 146 | CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y 147 | CONFIG_SOC_SDM_GROUPS=1 148 | CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 149 | CONFIG_SOC_SDM_CLK_SUPPORT_APB=y 150 | CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y 151 | CONFIG_SOC_SPI_AS_CS_SUPPORTED=y 152 | CONFIG_SOC_SPI_PERIPH_NUM=3 153 | CONFIG_SOC_SPI_DMA_CHAN_NUM=2 154 | CONFIG_SOC_SPI_MAX_CS_NUM=3 155 | CONFIG_SOC_SPI_SUPPORT_CLK_APB=y 156 | CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 157 | CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 158 | CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y 159 | CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y 160 | CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y 161 | CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y 162 | CONFIG_SOC_TIMER_GROUPS=2 163 | CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 164 | CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 165 | CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 166 | CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y 167 | CONFIG_SOC_TOUCH_VERSION_1=y 168 | CONFIG_SOC_TOUCH_SENSOR_NUM=10 169 | CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF 170 | CONFIG_SOC_TWAI_CONTROLLER_NUM=1 171 | CONFIG_SOC_TWAI_BRP_MIN=2 172 | CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y 173 | CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y 174 | CONFIG_SOC_UART_NUM=3 175 | CONFIG_SOC_UART_HP_NUM=3 176 | CONFIG_SOC_UART_SUPPORT_APB_CLK=y 177 | CONFIG_SOC_UART_SUPPORT_REF_TICK=y 178 | CONFIG_SOC_UART_FIFO_LEN=128 179 | CONFIG_SOC_UART_BITRATE_MAX=5000000 180 | CONFIG_SOC_SPIRAM_SUPPORTED=y 181 | CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y 182 | CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y 183 | CONFIG_SOC_SHA_ENDIANNESS_BE=y 184 | CONFIG_SOC_SHA_SUPPORT_SHA1=y 185 | CONFIG_SOC_SHA_SUPPORT_SHA256=y 186 | CONFIG_SOC_SHA_SUPPORT_SHA384=y 187 | CONFIG_SOC_SHA_SUPPORT_SHA512=y 188 | CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 189 | CONFIG_SOC_MPI_OPERATIONS_NUM=y 190 | CONFIG_SOC_RSA_MAX_BIT_LEN=4096 191 | CONFIG_SOC_AES_SUPPORT_AES_128=y 192 | CONFIG_SOC_AES_SUPPORT_AES_192=y 193 | CONFIG_SOC_AES_SUPPORT_AES_256=y 194 | CONFIG_SOC_SECURE_BOOT_V1=y 195 | CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y 196 | CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 197 | CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 198 | CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y 199 | CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y 200 | CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y 201 | CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y 202 | CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y 203 | CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y 204 | CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y 205 | CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y 206 | CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y 207 | CONFIG_SOC_PM_SUPPORT_MODEM_PD=y 208 | CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y 209 | CONFIG_SOC_CLK_APLL_SUPPORTED=y 210 | CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y 211 | CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y 212 | CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y 213 | CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y 214 | CONFIG_SOC_SDMMC_USE_IOMUX=y 215 | CONFIG_SOC_SDMMC_NUM_SLOTS=2 216 | CONFIG_SOC_WIFI_WAPI_SUPPORT=y 217 | CONFIG_SOC_WIFI_CSI_SUPPORT=y 218 | CONFIG_SOC_WIFI_MESH_SUPPORT=y 219 | CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y 220 | CONFIG_SOC_WIFI_NAN_SUPPORT=y 221 | CONFIG_SOC_BLE_SUPPORTED=y 222 | CONFIG_SOC_BLE_MESH_SUPPORTED=y 223 | CONFIG_SOC_BT_CLASSIC_SUPPORTED=y 224 | CONFIG_SOC_BLUFI_SUPPORTED=y 225 | CONFIG_SOC_ULP_HAS_ADC=y 226 | CONFIG_SOC_PHY_COMBO_MODULE=y 227 | CONFIG_IDF_CMAKE=y 228 | CONFIG_IDF_TOOLCHAIN="gcc" 229 | CONFIG_IDF_TARGET_ARCH_XTENSA=y 230 | CONFIG_IDF_TARGET_ARCH="xtensa" 231 | CONFIG_IDF_TARGET="esp32" 232 | CONFIG_IDF_INIT_VERSION="5.2.2" 233 | CONFIG_IDF_TARGET_ESP32=y 234 | CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 235 | 236 | # 237 | # Build type 238 | # 239 | CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y 240 | # CONFIG_APP_BUILD_TYPE_RAM is not set 241 | CONFIG_APP_BUILD_GENERATE_BINARIES=y 242 | CONFIG_APP_BUILD_BOOTLOADER=y 243 | CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y 244 | # CONFIG_APP_REPRODUCIBLE_BUILD is not set 245 | # CONFIG_APP_NO_BLOBS is not set 246 | # CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set 247 | # CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set 248 | # end of Build type 249 | 250 | # 251 | # Bootloader config 252 | # 253 | 254 | # 255 | # Bootloader manager 256 | # 257 | CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y 258 | CONFIG_BOOTLOADER_PROJECT_VER=1 259 | # end of Bootloader manager 260 | 261 | CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 262 | CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y 263 | # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set 264 | # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set 265 | # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set 266 | # CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set 267 | # CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set 268 | # CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set 269 | CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y 270 | # CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set 271 | # CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set 272 | CONFIG_BOOTLOADER_LOG_LEVEL=3 273 | 274 | # 275 | # Serial Flash Configurations 276 | # 277 | # CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set 278 | CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y 279 | # end of Serial Flash Configurations 280 | 281 | # CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set 282 | CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y 283 | # CONFIG_BOOTLOADER_FACTORY_RESET is not set 284 | # CONFIG_BOOTLOADER_APP_TEST is not set 285 | CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y 286 | CONFIG_BOOTLOADER_WDT_ENABLE=y 287 | # CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set 288 | CONFIG_BOOTLOADER_WDT_TIME_MS=9000 289 | # CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set 290 | # CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set 291 | # CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set 292 | # CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set 293 | CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 294 | # CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set 295 | # end of Bootloader config 296 | 297 | # 298 | # Security features 299 | # 300 | CONFIG_SECURE_BOOT_V1_SUPPORTED=y 301 | # CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set 302 | # CONFIG_SECURE_BOOT is not set 303 | # CONFIG_SECURE_FLASH_ENC_ENABLED is not set 304 | # end of Security features 305 | 306 | # 307 | # Application manager 308 | # 309 | CONFIG_APP_COMPILE_TIME_DATE=y 310 | # CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set 311 | # CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set 312 | # CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set 313 | CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 314 | # end of Application manager 315 | 316 | CONFIG_ESP_ROM_HAS_CRC_LE=y 317 | CONFIG_ESP_ROM_HAS_CRC_BE=y 318 | CONFIG_ESP_ROM_HAS_MZ_CRC32=y 319 | CONFIG_ESP_ROM_HAS_JPEG_DECODE=y 320 | CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y 321 | CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y 322 | CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y 323 | CONFIG_ESP_ROM_HAS_SW_FLOAT=y 324 | CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1 325 | 326 | # 327 | # Serial flasher config 328 | # 329 | # CONFIG_ESPTOOLPY_NO_STUB is not set 330 | # CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set 331 | # CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set 332 | CONFIG_ESPTOOLPY_FLASHMODE_DIO=y 333 | # CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set 334 | CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y 335 | CONFIG_ESPTOOLPY_FLASHMODE="dio" 336 | # CONFIG_ESPTOOLPY_FLASHFREQ_80M is not set 337 | CONFIG_ESPTOOLPY_FLASHFREQ_40M=y 338 | # CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set 339 | # CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set 340 | CONFIG_ESPTOOLPY_FLASHFREQ="40m" 341 | # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set 342 | CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y 343 | # CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set 344 | # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set 345 | # CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set 346 | # CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set 347 | # CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set 348 | # CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set 349 | CONFIG_ESPTOOLPY_FLASHSIZE="2MB" 350 | # CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set 351 | CONFIG_ESPTOOLPY_BEFORE_RESET=y 352 | # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set 353 | CONFIG_ESPTOOLPY_BEFORE="default_reset" 354 | CONFIG_ESPTOOLPY_AFTER_RESET=y 355 | # CONFIG_ESPTOOLPY_AFTER_NORESET is not set 356 | CONFIG_ESPTOOLPY_AFTER="hard_reset" 357 | CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 358 | # end of Serial flasher config 359 | 360 | # 361 | # Partition Table 362 | # 363 | CONFIG_PARTITION_TABLE_SINGLE_APP=y 364 | # CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set 365 | # CONFIG_PARTITION_TABLE_TWO_OTA is not set 366 | # CONFIG_PARTITION_TABLE_CUSTOM is not set 367 | CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" 368 | CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" 369 | CONFIG_PARTITION_TABLE_OFFSET=0x8000 370 | CONFIG_PARTITION_TABLE_MD5=y 371 | # end of Partition Table 372 | 373 | # 374 | # Compiler options 375 | # 376 | CONFIG_COMPILER_OPTIMIZATION_DEBUG=y 377 | # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set 378 | # CONFIG_COMPILER_OPTIMIZATION_PERF is not set 379 | # CONFIG_COMPILER_OPTIMIZATION_NONE is not set 380 | CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y 381 | # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set 382 | # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set 383 | CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y 384 | CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 385 | # CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set 386 | CONFIG_COMPILER_HIDE_PATHS_MACROS=y 387 | # CONFIG_COMPILER_CXX_EXCEPTIONS is not set 388 | # CONFIG_COMPILER_CXX_RTTI is not set 389 | CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y 390 | # CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set 391 | # CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set 392 | # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set 393 | # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set 394 | # CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set 395 | # CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set 396 | # CONFIG_COMPILER_DUMP_RTL_FILES is not set 397 | CONFIG_COMPILER_RT_LIB_GCCLIB=y 398 | CONFIG_COMPILER_RT_LIB_NAME="gcc" 399 | # end of Compiler options 400 | 401 | # 402 | # Component config 403 | # 404 | 405 | # 406 | # Application Level Tracing 407 | # 408 | # CONFIG_APPTRACE_DEST_JTAG is not set 409 | CONFIG_APPTRACE_DEST_NONE=y 410 | # CONFIG_APPTRACE_DEST_UART1 is not set 411 | # CONFIG_APPTRACE_DEST_UART2 is not set 412 | CONFIG_APPTRACE_DEST_UART_NONE=y 413 | CONFIG_APPTRACE_UART_TASK_PRIO=1 414 | CONFIG_APPTRACE_LOCK_ENABLE=y 415 | # end of Application Level Tracing 416 | 417 | # 418 | # Bluetooth 419 | # 420 | # CONFIG_BT_ENABLED is not set 421 | CONFIG_BT_ALARM_MAX_NUM=50 422 | # end of Bluetooth 423 | 424 | # 425 | # Driver Configurations 426 | # 427 | 428 | # 429 | # Legacy ADC Configuration 430 | # 431 | CONFIG_ADC_DISABLE_DAC=y 432 | # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set 433 | 434 | # 435 | # Legacy ADC Calibration Configuration 436 | # 437 | CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y 438 | CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y 439 | CONFIG_ADC_CAL_LUT_ENABLE=y 440 | # CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set 441 | # end of Legacy ADC Calibration Configuration 442 | # end of Legacy ADC Configuration 443 | 444 | # 445 | # SPI Configuration 446 | # 447 | # CONFIG_SPI_MASTER_IN_IRAM is not set 448 | CONFIG_SPI_MASTER_ISR_IN_IRAM=y 449 | # CONFIG_SPI_SLAVE_IN_IRAM is not set 450 | CONFIG_SPI_SLAVE_ISR_IN_IRAM=y 451 | # end of SPI Configuration 452 | 453 | # 454 | # TWAI Configuration 455 | # 456 | # CONFIG_TWAI_ISR_IN_IRAM is not set 457 | # CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set 458 | # CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set 459 | # CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set 460 | # CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set 461 | CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y 462 | # end of TWAI Configuration 463 | 464 | # 465 | # UART Configuration 466 | # 467 | # CONFIG_UART_ISR_IN_IRAM is not set 468 | # end of UART Configuration 469 | 470 | # 471 | # GPIO Configuration 472 | # 473 | # CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set 474 | # CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set 475 | # end of GPIO Configuration 476 | 477 | # 478 | # Sigma Delta Modulator Configuration 479 | # 480 | # CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set 481 | # CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set 482 | # CONFIG_SDM_ENABLE_DEBUG_LOG is not set 483 | # end of Sigma Delta Modulator Configuration 484 | 485 | # 486 | # GPTimer Configuration 487 | # 488 | CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y 489 | # CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set 490 | # CONFIG_GPTIMER_ISR_IRAM_SAFE is not set 491 | # CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set 492 | # CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set 493 | # end of GPTimer Configuration 494 | 495 | # 496 | # PCNT Configuration 497 | # 498 | # CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set 499 | # CONFIG_PCNT_ISR_IRAM_SAFE is not set 500 | # CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set 501 | # CONFIG_PCNT_ENABLE_DEBUG_LOG is not set 502 | # end of PCNT Configuration 503 | 504 | # 505 | # RMT Configuration 506 | # 507 | # CONFIG_RMT_ISR_IRAM_SAFE is not set 508 | # CONFIG_RMT_RECV_FUNC_IN_IRAM is not set 509 | # CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set 510 | # CONFIG_RMT_ENABLE_DEBUG_LOG is not set 511 | # end of RMT Configuration 512 | 513 | # 514 | # MCPWM Configuration 515 | # 516 | # CONFIG_MCPWM_ISR_IRAM_SAFE is not set 517 | # CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set 518 | # CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set 519 | # CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set 520 | # end of MCPWM Configuration 521 | 522 | # 523 | # I2S Configuration 524 | # 525 | # CONFIG_I2S_ISR_IRAM_SAFE is not set 526 | # CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set 527 | # CONFIG_I2S_ENABLE_DEBUG_LOG is not set 528 | # end of I2S Configuration 529 | 530 | # 531 | # DAC Configuration 532 | # 533 | # CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set 534 | # CONFIG_DAC_ISR_IRAM_SAFE is not set 535 | # CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set 536 | # CONFIG_DAC_ENABLE_DEBUG_LOG is not set 537 | CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y 538 | # end of DAC Configuration 539 | 540 | # 541 | # LEDC Configuration 542 | # 543 | # CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set 544 | # end of LEDC Configuration 545 | 546 | # 547 | # I2C Configuration 548 | # 549 | # CONFIG_I2C_ISR_IRAM_SAFE is not set 550 | # CONFIG_I2C_ENABLE_DEBUG_LOG is not set 551 | # end of I2C Configuration 552 | # end of Driver Configurations 553 | 554 | # 555 | # eFuse Bit Manager 556 | # 557 | # CONFIG_EFUSE_CUSTOM_TABLE is not set 558 | # CONFIG_EFUSE_VIRTUAL is not set 559 | # CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set 560 | CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y 561 | # CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set 562 | CONFIG_EFUSE_MAX_BLK_LEN=192 563 | # end of eFuse Bit Manager 564 | 565 | # 566 | # ESP-TLS 567 | # 568 | CONFIG_ESP_TLS_USING_MBEDTLS=y 569 | # CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set 570 | # CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set 571 | # CONFIG_ESP_TLS_SERVER is not set 572 | # CONFIG_ESP_TLS_PSK_VERIFICATION is not set 573 | # CONFIG_ESP_TLS_INSECURE is not set 574 | # end of ESP-TLS 575 | 576 | # 577 | # ADC and ADC Calibration 578 | # 579 | # CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set 580 | # CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set 581 | 582 | # 583 | # ADC Calibration Configurations 584 | # 585 | CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y 586 | CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y 587 | CONFIG_ADC_CALI_LUT_ENABLE=y 588 | # end of ADC Calibration Configurations 589 | 590 | CONFIG_ADC_DISABLE_DAC_OUTPUT=y 591 | # end of ADC and ADC Calibration 592 | 593 | # 594 | # Wireless Coexistence 595 | # 596 | # end of Wireless Coexistence 597 | 598 | # 599 | # Common ESP-related 600 | # 601 | CONFIG_ESP_ERR_TO_NAME_LOOKUP=y 602 | # end of Common ESP-related 603 | 604 | # 605 | # Ethernet 606 | # 607 | CONFIG_ETH_ENABLED=y 608 | CONFIG_ETH_USE_ESP32_EMAC=y 609 | CONFIG_ETH_PHY_INTERFACE_RMII=y 610 | CONFIG_ETH_RMII_CLK_INPUT=y 611 | # CONFIG_ETH_RMII_CLK_OUTPUT is not set 612 | CONFIG_ETH_RMII_CLK_IN_GPIO=0 613 | CONFIG_ETH_DMA_BUFFER_SIZE=512 614 | CONFIG_ETH_DMA_RX_BUFFER_NUM=10 615 | CONFIG_ETH_DMA_TX_BUFFER_NUM=10 616 | # CONFIG_ETH_IRAM_OPTIMIZATION is not set 617 | CONFIG_ETH_USE_SPI_ETHERNET=y 618 | # CONFIG_ETH_SPI_ETHERNET_DM9051 is not set 619 | # CONFIG_ETH_SPI_ETHERNET_W5500 is not set 620 | # CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set 621 | # CONFIG_ETH_USE_OPENETH is not set 622 | # CONFIG_ETH_TRANSMIT_MUTEX is not set 623 | # end of Ethernet 624 | 625 | # 626 | # Event Loop Library 627 | # 628 | # CONFIG_ESP_EVENT_LOOP_PROFILING is not set 629 | CONFIG_ESP_EVENT_POST_FROM_ISR=y 630 | CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y 631 | # end of Event Loop Library 632 | 633 | # 634 | # GDB Stub 635 | # 636 | CONFIG_ESP_GDBSTUB_ENABLED=y 637 | # CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set 638 | CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y 639 | CONFIG_ESP_GDBSTUB_MAX_TASKS=32 640 | # end of GDB Stub 641 | 642 | # 643 | # ESP HTTP client 644 | # 645 | CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y 646 | # CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set 647 | CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH=y 648 | # end of ESP HTTP client 649 | 650 | # 651 | # HTTP Server 652 | # 653 | CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 654 | CONFIG_HTTPD_MAX_URI_LEN=512 655 | CONFIG_HTTPD_ERR_RESP_NO_DELAY=y 656 | CONFIG_HTTPD_PURGE_BUF_LEN=32 657 | # CONFIG_HTTPD_LOG_PURGE_DATA is not set 658 | # CONFIG_HTTPD_WS_SUPPORT is not set 659 | # CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set 660 | # end of HTTP Server 661 | 662 | # 663 | # ESP HTTPS OTA 664 | # 665 | # CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set 666 | # CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set 667 | # end of ESP HTTPS OTA 668 | 669 | # 670 | # ESP HTTPS server 671 | # 672 | # CONFIG_ESP_HTTPS_SERVER_ENABLE is not set 673 | # end of ESP HTTPS server 674 | 675 | # 676 | # Hardware Settings 677 | # 678 | 679 | # 680 | # Chip revision 681 | # 682 | CONFIG_ESP32_REV_MIN_0=y 683 | # CONFIG_ESP32_REV_MIN_1 is not set 684 | # CONFIG_ESP32_REV_MIN_1_1 is not set 685 | # CONFIG_ESP32_REV_MIN_2 is not set 686 | # CONFIG_ESP32_REV_MIN_3 is not set 687 | # CONFIG_ESP32_REV_MIN_3_1 is not set 688 | CONFIG_ESP32_REV_MIN=0 689 | CONFIG_ESP32_REV_MIN_FULL=0 690 | CONFIG_ESP_REV_MIN_FULL=0 691 | 692 | # 693 | # Maximum Supported ESP32 Revision (Rev v3.99) 694 | # 695 | CONFIG_ESP32_REV_MAX_FULL=399 696 | CONFIG_ESP_REV_MAX_FULL=399 697 | # end of Chip revision 698 | 699 | # 700 | # MAC Config 701 | # 702 | CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y 703 | CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y 704 | CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y 705 | CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y 706 | CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y 707 | # CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set 708 | CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y 709 | CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 710 | # CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set 711 | # CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set 712 | # end of MAC Config 713 | 714 | # 715 | # Sleep Config 716 | # 717 | CONFIG_ESP_SLEEP_POWER_DOWN_FLASH=y 718 | CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y 719 | # CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set 720 | CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0 721 | # CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set 722 | # CONFIG_ESP_SLEEP_DEBUG is not set 723 | CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y 724 | # end of Sleep Config 725 | 726 | # 727 | # RTC Clock Config 728 | # 729 | CONFIG_RTC_CLK_SRC_INT_RC=y 730 | # CONFIG_RTC_CLK_SRC_EXT_CRYS is not set 731 | # CONFIG_RTC_CLK_SRC_EXT_OSC is not set 732 | # CONFIG_RTC_CLK_SRC_INT_8MD256 is not set 733 | CONFIG_RTC_CLK_CAL_CYCLES=1024 734 | # end of RTC Clock Config 735 | 736 | # 737 | # Peripheral Control 738 | # 739 | CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y 740 | # end of Peripheral Control 741 | 742 | # 743 | # Main XTAL Config 744 | # 745 | # CONFIG_XTAL_FREQ_26 is not set 746 | # CONFIG_XTAL_FREQ_40 is not set 747 | CONFIG_XTAL_FREQ_AUTO=y 748 | CONFIG_XTAL_FREQ=0 749 | # end of Main XTAL Config 750 | # end of Hardware Settings 751 | 752 | # 753 | # LCD and Touch Panel 754 | # 755 | 756 | # 757 | # LCD Touch Drivers are maintained in the IDF Component Registry 758 | # 759 | 760 | # 761 | # LCD Peripheral Configuration 762 | # 763 | CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 764 | # CONFIG_LCD_ENABLE_DEBUG_LOG is not set 765 | # end of LCD Peripheral Configuration 766 | # end of LCD and Touch Panel 767 | 768 | # 769 | # ESP NETIF Adapter 770 | # 771 | CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 772 | CONFIG_ESP_NETIF_TCPIP_LWIP=y 773 | # CONFIG_ESP_NETIF_LOOPBACK is not set 774 | CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y 775 | # CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set 776 | # CONFIG_ESP_NETIF_L2_TAP is not set 777 | # CONFIG_ESP_NETIF_BRIDGE_EN is not set 778 | # end of ESP NETIF Adapter 779 | 780 | # 781 | # Partition API Configuration 782 | # 783 | # end of Partition API Configuration 784 | 785 | # 786 | # PHY 787 | # 788 | CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y 789 | # CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set 790 | CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 791 | CONFIG_ESP_PHY_MAX_TX_POWER=20 792 | CONFIG_ESP_PHY_REDUCE_TX_POWER=y 793 | CONFIG_ESP_PHY_RF_CAL_PARTIAL=y 794 | # CONFIG_ESP_PHY_RF_CAL_NONE is not set 795 | # CONFIG_ESP_PHY_RF_CAL_FULL is not set 796 | CONFIG_ESP_PHY_CALIBRATION_MODE=0 797 | # CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set 798 | # end of PHY 799 | 800 | # 801 | # Power Management 802 | # 803 | # CONFIG_PM_ENABLE is not set 804 | # end of Power Management 805 | 806 | # 807 | # ESP PSRAM 808 | # 809 | # CONFIG_SPIRAM is not set 810 | # end of ESP PSRAM 811 | 812 | # 813 | # ESP Ringbuf 814 | # 815 | # CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set 816 | # end of ESP Ringbuf 817 | 818 | # 819 | # ESP System Settings 820 | # 821 | # CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set 822 | # CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set 823 | CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y 824 | CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 825 | 826 | # 827 | # Memory 828 | # 829 | # CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set 830 | 831 | # 832 | # Non-backward compatible options 833 | # 834 | # CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set 835 | # end of Non-backward compatible options 836 | # end of Memory 837 | 838 | # 839 | # Trace memory 840 | # 841 | # CONFIG_ESP32_TRAX is not set 842 | CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 843 | # end of Trace memory 844 | 845 | # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set 846 | CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y 847 | # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set 848 | # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set 849 | CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 850 | 851 | # 852 | # Memory protection 853 | # 854 | # end of Memory protection 855 | 856 | CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 857 | CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096 858 | CONFIG_ESP_MAIN_TASK_STACK_SIZE=4096 859 | CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y 860 | # CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set 861 | # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set 862 | CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 863 | CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 864 | CONFIG_ESP_CONSOLE_UART_DEFAULT=y 865 | # CONFIG_ESP_CONSOLE_UART_CUSTOM is not set 866 | # CONFIG_ESP_CONSOLE_NONE is not set 867 | CONFIG_ESP_CONSOLE_UART=y 868 | CONFIG_ESP_CONSOLE_UART_NUM=0 869 | CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 870 | CONFIG_ESP_INT_WDT=y 871 | CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 872 | CONFIG_ESP_INT_WDT_CHECK_CPU1=y 873 | CONFIG_ESP_TASK_WDT_EN=y 874 | CONFIG_ESP_TASK_WDT_INIT=y 875 | # CONFIG_ESP_TASK_WDT_PANIC is not set 876 | CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 877 | CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y 878 | CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 879 | # CONFIG_ESP_PANIC_HANDLER_IRAM is not set 880 | # CONFIG_ESP_DEBUG_STUBS_ENABLE is not set 881 | CONFIG_ESP_DEBUG_OCDAWARE=y 882 | # CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set 883 | CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y 884 | 885 | # 886 | # Brownout Detector 887 | # 888 | CONFIG_ESP_BROWNOUT_DET=y 889 | CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y 890 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set 891 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set 892 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set 893 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set 894 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set 895 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set 896 | # CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set 897 | CONFIG_ESP_BROWNOUT_DET_LVL=0 898 | # end of Brownout Detector 899 | 900 | # CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set 901 | CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y 902 | # end of ESP System Settings 903 | 904 | # 905 | # IPC (Inter-Processor Call) 906 | # 907 | CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 908 | CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y 909 | CONFIG_ESP_IPC_ISR_ENABLE=y 910 | # end of IPC (Inter-Processor Call) 911 | 912 | # 913 | # High resolution timer (esp_timer) 914 | # 915 | # CONFIG_ESP_TIMER_PROFILING is not set 916 | CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y 917 | CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y 918 | CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 919 | CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 920 | # CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set 921 | CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 922 | CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y 923 | CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 924 | CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y 925 | # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set 926 | CONFIG_ESP_TIMER_IMPL_TG0_LAC=y 927 | # end of High resolution timer (esp_timer) 928 | 929 | # 930 | # Wi-Fi 931 | # 932 | CONFIG_ESP_WIFI_ENABLED=y 933 | CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10 934 | CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32 935 | # CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set 936 | CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y 937 | CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1 938 | CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32 939 | CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y 940 | # CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set 941 | CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0 942 | CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5 943 | # CONFIG_ESP_WIFI_CSI_ENABLED is not set 944 | CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y 945 | CONFIG_ESP_WIFI_TX_BA_WIN=6 946 | CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y 947 | CONFIG_ESP_WIFI_RX_BA_WIN=6 948 | CONFIG_ESP_WIFI_NVS_ENABLED=y 949 | CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y 950 | # CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set 951 | CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 952 | CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 953 | CONFIG_ESP_WIFI_IRAM_OPT=y 954 | # CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set 955 | CONFIG_ESP_WIFI_RX_IRAM_OPT=y 956 | CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y 957 | CONFIG_ESP_WIFI_ENABLE_SAE_PK=y 958 | CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y 959 | CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y 960 | # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set 961 | # CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE is not set 962 | # CONFIG_ESP_WIFI_GMAC_SUPPORT is not set 963 | CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y 964 | # CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set 965 | CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 966 | # CONFIG_ESP_WIFI_NAN_ENABLE is not set 967 | CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y 968 | CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y 969 | # CONFIG_ESP_WIFI_WAPI_PSK is not set 970 | # CONFIG_ESP_WIFI_11KV_SUPPORT is not set 971 | # CONFIG_ESP_WIFI_MBO_SUPPORT is not set 972 | # CONFIG_ESP_WIFI_DPP_SUPPORT is not set 973 | # CONFIG_ESP_WIFI_11R_SUPPORT is not set 974 | # CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set 975 | 976 | # 977 | # WPS Configuration Options 978 | # 979 | # CONFIG_ESP_WIFI_WPS_STRICT is not set 980 | # CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set 981 | # end of WPS Configuration Options 982 | 983 | # CONFIG_ESP_WIFI_DEBUG_PRINT is not set 984 | # CONFIG_ESP_WIFI_TESTING_OPTIONS is not set 985 | CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y 986 | # CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set 987 | # end of Wi-Fi 988 | 989 | # 990 | # Core dump 991 | # 992 | # CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set 993 | CONFIG_ESP_COREDUMP_ENABLE_TO_UART=y 994 | # CONFIG_ESP_COREDUMP_ENABLE_TO_NONE is not set 995 | # CONFIG_ESP_COREDUMP_DATA_FORMAT_BIN is not set 996 | CONFIG_ESP_COREDUMP_DATA_FORMAT_ELF=y 997 | CONFIG_ESP_COREDUMP_CHECKSUM_CRC32=y 998 | # CONFIG_ESP_COREDUMP_CHECKSUM_SHA256 is not set 999 | CONFIG_ESP_COREDUMP_ENABLE=y 1000 | CONFIG_ESP_COREDUMP_LOGS=y 1001 | CONFIG_ESP_COREDUMP_MAX_TASKS_NUM=64 1002 | CONFIG_ESP_COREDUMP_UART_DELAY=0 1003 | CONFIG_ESP_COREDUMP_STACK_SIZE=0 1004 | CONFIG_ESP_COREDUMP_DECODE_INFO=y 1005 | # CONFIG_ESP_COREDUMP_DECODE_DISABLE is not set 1006 | CONFIG_ESP_COREDUMP_DECODE="info" 1007 | # end of Core dump 1008 | 1009 | # 1010 | # FAT Filesystem support 1011 | # 1012 | CONFIG_FATFS_VOLUME_COUNT=2 1013 | CONFIG_FATFS_LFN_NONE=y 1014 | # CONFIG_FATFS_LFN_HEAP is not set 1015 | # CONFIG_FATFS_LFN_STACK is not set 1016 | # CONFIG_FATFS_SECTOR_512 is not set 1017 | CONFIG_FATFS_SECTOR_4096=y 1018 | # CONFIG_FATFS_CODEPAGE_DYNAMIC is not set 1019 | CONFIG_FATFS_CODEPAGE_437=y 1020 | # CONFIG_FATFS_CODEPAGE_720 is not set 1021 | # CONFIG_FATFS_CODEPAGE_737 is not set 1022 | # CONFIG_FATFS_CODEPAGE_771 is not set 1023 | # CONFIG_FATFS_CODEPAGE_775 is not set 1024 | # CONFIG_FATFS_CODEPAGE_850 is not set 1025 | # CONFIG_FATFS_CODEPAGE_852 is not set 1026 | # CONFIG_FATFS_CODEPAGE_855 is not set 1027 | # CONFIG_FATFS_CODEPAGE_857 is not set 1028 | # CONFIG_FATFS_CODEPAGE_860 is not set 1029 | # CONFIG_FATFS_CODEPAGE_861 is not set 1030 | # CONFIG_FATFS_CODEPAGE_862 is not set 1031 | # CONFIG_FATFS_CODEPAGE_863 is not set 1032 | # CONFIG_FATFS_CODEPAGE_864 is not set 1033 | # CONFIG_FATFS_CODEPAGE_865 is not set 1034 | # CONFIG_FATFS_CODEPAGE_866 is not set 1035 | # CONFIG_FATFS_CODEPAGE_869 is not set 1036 | # CONFIG_FATFS_CODEPAGE_932 is not set 1037 | # CONFIG_FATFS_CODEPAGE_936 is not set 1038 | # CONFIG_FATFS_CODEPAGE_949 is not set 1039 | # CONFIG_FATFS_CODEPAGE_950 is not set 1040 | CONFIG_FATFS_CODEPAGE=437 1041 | CONFIG_FATFS_FS_LOCK=0 1042 | CONFIG_FATFS_TIMEOUT_MS=10000 1043 | CONFIG_FATFS_PER_FILE_CACHE=y 1044 | # CONFIG_FATFS_USE_FASTSEEK is not set 1045 | CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 1046 | # CONFIG_FATFS_IMMEDIATE_FSYNC is not set 1047 | # end of FAT Filesystem support 1048 | 1049 | # 1050 | # FreeRTOS 1051 | # 1052 | 1053 | # 1054 | # Kernel 1055 | # 1056 | # CONFIG_FREERTOS_SMP is not set 1057 | # CONFIG_FREERTOS_UNICORE is not set 1058 | CONFIG_FREERTOS_HZ=1000 1059 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set 1060 | # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set 1061 | CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y 1062 | CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 1063 | CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1024 1064 | # CONFIG_FREERTOS_USE_IDLE_HOOK is not set 1065 | # CONFIG_FREERTOS_USE_TICK_HOOK is not set 1066 | CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 1067 | # CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set 1068 | CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" 1069 | CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 1070 | CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 1071 | CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 1072 | CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 1073 | CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 1074 | # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set 1075 | # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set 1076 | # CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set 1077 | # end of Kernel 1078 | 1079 | # 1080 | # Port 1081 | # 1082 | CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y 1083 | CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK=y 1084 | CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y 1085 | # CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set 1086 | # CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set 1087 | CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y 1088 | CONFIG_FREERTOS_ISR_STACKSIZE=2096 1089 | CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y 1090 | # CONFIG_FREERTOS_FPU_IN_ISR is not set 1091 | CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y 1092 | CONFIG_FREERTOS_CORETIMER_0=y 1093 | # CONFIG_FREERTOS_CORETIMER_1 is not set 1094 | CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y 1095 | # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set 1096 | # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set 1097 | # end of Port 1098 | 1099 | CONFIG_FREERTOS_PORT=y 1100 | CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF 1101 | CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y 1102 | CONFIG_FREERTOS_DEBUG_OCDAWARE=y 1103 | CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y 1104 | CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y 1105 | # end of FreeRTOS 1106 | 1107 | # 1108 | # Hardware Abstraction Layer (HAL) and Low Level (LL) 1109 | # 1110 | CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y 1111 | # CONFIG_HAL_ASSERTION_DISABLE is not set 1112 | # CONFIG_HAL_ASSERTION_SILENT is not set 1113 | # CONFIG_HAL_ASSERTION_ENABLE is not set 1114 | CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2 1115 | CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y 1116 | CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y 1117 | # end of Hardware Abstraction Layer (HAL) and Low Level (LL) 1118 | 1119 | # 1120 | # Heap memory debugging 1121 | # 1122 | CONFIG_HEAP_POISONING_DISABLED=y 1123 | # CONFIG_HEAP_POISONING_LIGHT is not set 1124 | # CONFIG_HEAP_POISONING_COMPREHENSIVE is not set 1125 | CONFIG_HEAP_TRACING_OFF=y 1126 | # CONFIG_HEAP_TRACING_STANDALONE is not set 1127 | # CONFIG_HEAP_TRACING_TOHOST is not set 1128 | # CONFIG_HEAP_USE_HOOKS is not set 1129 | # CONFIG_HEAP_TASK_TRACKING is not set 1130 | # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set 1131 | # CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set 1132 | # end of Heap memory debugging 1133 | 1134 | # 1135 | # Log output 1136 | # 1137 | # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set 1138 | # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set 1139 | # CONFIG_LOG_DEFAULT_LEVEL_WARN is not set 1140 | CONFIG_LOG_DEFAULT_LEVEL_INFO=y 1141 | # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set 1142 | # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set 1143 | CONFIG_LOG_DEFAULT_LEVEL=3 1144 | CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y 1145 | # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set 1146 | # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set 1147 | CONFIG_LOG_MAXIMUM_LEVEL=3 1148 | # CONFIG_LOG_MASTER_LEVEL is not set 1149 | CONFIG_LOG_COLORS=y 1150 | CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y 1151 | # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set 1152 | # end of Log output 1153 | 1154 | # 1155 | # LWIP 1156 | # 1157 | CONFIG_LWIP_ENABLE=y 1158 | CONFIG_LWIP_LOCAL_HOSTNAME="espressif" 1159 | # CONFIG_LWIP_NETIF_API is not set 1160 | CONFIG_LWIP_TCPIP_TASK_PRIO=18 1161 | # CONFIG_LWIP_TCPIP_CORE_LOCKING is not set 1162 | # CONFIG_LWIP_CHECK_THREAD_SAFETY is not set 1163 | CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y 1164 | # CONFIG_LWIP_L2_TO_L3_COPY is not set 1165 | # CONFIG_LWIP_IRAM_OPTIMIZATION is not set 1166 | # CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set 1167 | CONFIG_LWIP_TIMERS_ONDEMAND=y 1168 | CONFIG_LWIP_ND6=y 1169 | # CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set 1170 | CONFIG_LWIP_MAX_SOCKETS=10 1171 | # CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set 1172 | # CONFIG_LWIP_SO_LINGER is not set 1173 | CONFIG_LWIP_SO_REUSE=y 1174 | CONFIG_LWIP_SO_REUSE_RXTOALL=y 1175 | CONFIG_LWIP_SO_RCVBUF=y 1176 | # CONFIG_LWIP_NETBUF_RECVINFO is not set 1177 | CONFIG_LWIP_IP_DEFAULT_TTL=64 1178 | CONFIG_LWIP_IP4_FRAG=y 1179 | CONFIG_LWIP_IP6_FRAG=y 1180 | # CONFIG_LWIP_IP4_REASSEMBLY is not set 1181 | # CONFIG_LWIP_IP6_REASSEMBLY is not set 1182 | CONFIG_LWIP_IP_REASS_MAX_PBUFS=10 1183 | # CONFIG_LWIP_IP_FORWARD is not set 1184 | # CONFIG_LWIP_STATS is not set 1185 | CONFIG_LWIP_ESP_GRATUITOUS_ARP=y 1186 | CONFIG_LWIP_GARP_TMR_INTERVAL=60 1187 | CONFIG_LWIP_ESP_MLDV6_REPORT=y 1188 | CONFIG_LWIP_MLDV6_TMR_INTERVAL=40 1189 | CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 1190 | CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y 1191 | # CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set 1192 | CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y 1193 | # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set 1194 | CONFIG_LWIP_DHCP_OPTIONS_LEN=68 1195 | CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0 1196 | CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 1197 | 1198 | # 1199 | # DHCP server 1200 | # 1201 | CONFIG_LWIP_DHCPS=y 1202 | CONFIG_LWIP_DHCPS_LEASE_UNIT=60 1203 | CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 1204 | CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y 1205 | # end of DHCP server 1206 | 1207 | # CONFIG_LWIP_AUTOIP is not set 1208 | CONFIG_LWIP_IPV4=y 1209 | CONFIG_LWIP_IPV6=y 1210 | # CONFIG_LWIP_IPV6_AUTOCONFIG is not set 1211 | CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 1212 | # CONFIG_LWIP_IPV6_FORWARD is not set 1213 | # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set 1214 | CONFIG_LWIP_NETIF_LOOPBACK=y 1215 | CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 1216 | 1217 | # 1218 | # TCP 1219 | # 1220 | CONFIG_LWIP_MAX_ACTIVE_TCP=16 1221 | CONFIG_LWIP_MAX_LISTENING_TCP=16 1222 | CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y 1223 | CONFIG_LWIP_TCP_MAXRTX=12 1224 | CONFIG_LWIP_TCP_SYNMAXRTX=6 1225 | CONFIG_LWIP_TCP_MSS=1436 1226 | CONFIG_LWIP_TCP_TMR_INTERVAL=250 1227 | CONFIG_LWIP_TCP_MSL=60000 1228 | CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 1229 | CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5744 1230 | CONFIG_LWIP_TCP_WND_DEFAULT=5744 1231 | CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 1232 | CONFIG_LWIP_TCP_QUEUE_OOSEQ=y 1233 | CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 1234 | CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 1235 | # CONFIG_LWIP_TCP_SACK_OUT is not set 1236 | CONFIG_LWIP_TCP_OVERSIZE_MSS=y 1237 | # CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set 1238 | # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set 1239 | CONFIG_LWIP_TCP_RTO_TIME=1500 1240 | # end of TCP 1241 | 1242 | # 1243 | # UDP 1244 | # 1245 | CONFIG_LWIP_MAX_UDP_PCBS=16 1246 | CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 1247 | # end of UDP 1248 | 1249 | # 1250 | # Checksums 1251 | # 1252 | # CONFIG_LWIP_CHECKSUM_CHECK_IP is not set 1253 | # CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set 1254 | CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y 1255 | # end of Checksums 1256 | 1257 | CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=2560 1258 | CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y 1259 | # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set 1260 | # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set 1261 | CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF 1262 | # CONFIG_LWIP_PPP_SUPPORT is not set 1263 | CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 1264 | CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 1265 | # CONFIG_LWIP_SLIP_SUPPORT is not set 1266 | 1267 | # 1268 | # ICMP 1269 | # 1270 | CONFIG_LWIP_ICMP=y 1271 | # CONFIG_LWIP_MULTICAST_PING is not set 1272 | # CONFIG_LWIP_BROADCAST_PING is not set 1273 | # end of ICMP 1274 | 1275 | # 1276 | # LWIP RAW API 1277 | # 1278 | CONFIG_LWIP_MAX_RAW_PCBS=16 1279 | # end of LWIP RAW API 1280 | 1281 | # 1282 | # SNTP 1283 | # 1284 | CONFIG_LWIP_SNTP_MAX_SERVERS=1 1285 | # CONFIG_LWIP_DHCP_GET_NTP_SRV is not set 1286 | CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 1287 | # end of SNTP 1288 | 1289 | # 1290 | # DNS 1291 | # 1292 | CONFIG_LWIP_DNS_MAX_SERVERS=3 1293 | # CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set 1294 | # end of DNS 1295 | 1296 | CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 1297 | CONFIG_LWIP_ESP_LWIP_ASSERT=y 1298 | 1299 | # 1300 | # Hooks 1301 | # 1302 | # CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set 1303 | CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y 1304 | # CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set 1305 | CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y 1306 | # CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set 1307 | # CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set 1308 | CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y 1309 | # CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set 1310 | # CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set 1311 | CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y 1312 | # CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set 1313 | # CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set 1314 | CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y 1315 | # CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set 1316 | # CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set 1317 | CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y 1318 | # CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set 1319 | # CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set 1320 | # end of Hooks 1321 | 1322 | # CONFIG_LWIP_DEBUG is not set 1323 | # end of LWIP 1324 | 1325 | # 1326 | # mbedTLS 1327 | # 1328 | CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y 1329 | # CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set 1330 | # CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set 1331 | CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y 1332 | CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384 1333 | CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096 1334 | # CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set 1335 | # CONFIG_MBEDTLS_DEBUG is not set 1336 | 1337 | # 1338 | # mbedTLS v3.x related 1339 | # 1340 | # CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set 1341 | # CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set 1342 | # CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set 1343 | # CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set 1344 | CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y 1345 | CONFIG_MBEDTLS_PKCS7_C=y 1346 | # end of mbedTLS v3.x related 1347 | 1348 | # 1349 | # Certificate Bundle 1350 | # 1351 | CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y 1352 | CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y 1353 | # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set 1354 | # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set 1355 | # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set 1356 | CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 1357 | # end of Certificate Bundle 1358 | 1359 | # CONFIG_MBEDTLS_ECP_RESTARTABLE is not set 1360 | CONFIG_MBEDTLS_CMAC_C=y 1361 | CONFIG_MBEDTLS_HARDWARE_AES=y 1362 | # CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set 1363 | CONFIG_MBEDTLS_HARDWARE_MPI=y 1364 | # CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set 1365 | CONFIG_MBEDTLS_HARDWARE_SHA=y 1366 | CONFIG_MBEDTLS_ROM_MD5=y 1367 | # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set 1368 | # CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set 1369 | CONFIG_MBEDTLS_HAVE_TIME=y 1370 | # CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set 1371 | # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set 1372 | CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y 1373 | CONFIG_MBEDTLS_SHA512_C=y 1374 | CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y 1375 | # CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set 1376 | # CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set 1377 | # CONFIG_MBEDTLS_TLS_DISABLED is not set 1378 | CONFIG_MBEDTLS_TLS_SERVER=y 1379 | CONFIG_MBEDTLS_TLS_CLIENT=y 1380 | CONFIG_MBEDTLS_TLS_ENABLED=y 1381 | 1382 | # 1383 | # TLS Key Exchange Methods 1384 | # 1385 | # CONFIG_MBEDTLS_PSK_MODES is not set 1386 | CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y 1387 | CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y 1388 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y 1389 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y 1390 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y 1391 | CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y 1392 | # end of TLS Key Exchange Methods 1393 | 1394 | CONFIG_MBEDTLS_SSL_RENEGOTIATION=y 1395 | CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y 1396 | # CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set 1397 | # CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set 1398 | CONFIG_MBEDTLS_SSL_ALPN=y 1399 | CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y 1400 | CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y 1401 | 1402 | # 1403 | # Symmetric Ciphers 1404 | # 1405 | CONFIG_MBEDTLS_AES_C=y 1406 | # CONFIG_MBEDTLS_CAMELLIA_C is not set 1407 | # CONFIG_MBEDTLS_DES_C is not set 1408 | # CONFIG_MBEDTLS_BLOWFISH_C is not set 1409 | # CONFIG_MBEDTLS_XTEA_C is not set 1410 | CONFIG_MBEDTLS_CCM_C=y 1411 | CONFIG_MBEDTLS_GCM_C=y 1412 | # CONFIG_MBEDTLS_NIST_KW_C is not set 1413 | # end of Symmetric Ciphers 1414 | 1415 | # CONFIG_MBEDTLS_RIPEMD160_C is not set 1416 | 1417 | # 1418 | # Certificates 1419 | # 1420 | CONFIG_MBEDTLS_PEM_PARSE_C=y 1421 | CONFIG_MBEDTLS_PEM_WRITE_C=y 1422 | CONFIG_MBEDTLS_X509_CRL_PARSE_C=y 1423 | CONFIG_MBEDTLS_X509_CSR_PARSE_C=y 1424 | # end of Certificates 1425 | 1426 | CONFIG_MBEDTLS_ECP_C=y 1427 | # CONFIG_MBEDTLS_DHM_C is not set 1428 | CONFIG_MBEDTLS_ECDH_C=y 1429 | CONFIG_MBEDTLS_ECDSA_C=y 1430 | # CONFIG_MBEDTLS_ECJPAKE_C is not set 1431 | CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y 1432 | CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y 1433 | CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y 1434 | CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y 1435 | CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y 1436 | CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y 1437 | CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y 1438 | CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y 1439 | CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y 1440 | CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y 1441 | CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y 1442 | CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y 1443 | CONFIG_MBEDTLS_ECP_NIST_OPTIM=y 1444 | CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y 1445 | # CONFIG_MBEDTLS_POLY1305_C is not set 1446 | # CONFIG_MBEDTLS_CHACHA20_C is not set 1447 | # CONFIG_MBEDTLS_HKDF_C is not set 1448 | # CONFIG_MBEDTLS_THREADING_C is not set 1449 | CONFIG_MBEDTLS_ERROR_STRINGS=y 1450 | # end of mbedTLS 1451 | 1452 | # 1453 | # ESP-MQTT Configurations 1454 | # 1455 | CONFIG_MQTT_PROTOCOL_311=y 1456 | # CONFIG_MQTT_PROTOCOL_5 is not set 1457 | CONFIG_MQTT_TRANSPORT_SSL=y 1458 | CONFIG_MQTT_TRANSPORT_WEBSOCKET=y 1459 | CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y 1460 | # CONFIG_MQTT_MSG_ID_INCREMENTAL is not set 1461 | # CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set 1462 | # CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set 1463 | # CONFIG_MQTT_USE_CUSTOM_CONFIG is not set 1464 | # CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set 1465 | # CONFIG_MQTT_CUSTOM_OUTBOX is not set 1466 | # end of ESP-MQTT Configurations 1467 | 1468 | # 1469 | # Newlib 1470 | # 1471 | CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y 1472 | # CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set 1473 | # CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set 1474 | # CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set 1475 | # CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set 1476 | CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y 1477 | # CONFIG_NEWLIB_NANO_FORMAT is not set 1478 | CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y 1479 | # CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set 1480 | # CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set 1481 | # CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set 1482 | # end of Newlib 1483 | 1484 | # 1485 | # NVS 1486 | # 1487 | # CONFIG_NVS_ASSERT_ERROR_CHECK is not set 1488 | # CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set 1489 | # end of NVS 1490 | 1491 | # 1492 | # OpenThread 1493 | # 1494 | # CONFIG_OPENTHREAD_ENABLED is not set 1495 | 1496 | # 1497 | # Thread Operational Dataset 1498 | # 1499 | CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" 1500 | CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" 1501 | CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 1502 | CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 1503 | CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" 1504 | CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" 1505 | CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" 1506 | # end of Thread Operational Dataset 1507 | 1508 | CONFIG_OPENTHREAD_XTAL_ACCURACY=130 1509 | # CONFIG_OPENTHREAD_SPINEL_ONLY is not set 1510 | CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y 1511 | 1512 | # 1513 | # Thread Address Query Config 1514 | # 1515 | # end of Thread Address Query Config 1516 | # end of OpenThread 1517 | 1518 | # 1519 | # Protocomm 1520 | # 1521 | CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y 1522 | CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y 1523 | CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y 1524 | # end of Protocomm 1525 | 1526 | # 1527 | # PThreads 1528 | # 1529 | CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 1530 | CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 1531 | CONFIG_PTHREAD_STACK_MIN=768 1532 | CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y 1533 | # CONFIG_PTHREAD_DEFAULT_CORE_0 is not set 1534 | # CONFIG_PTHREAD_DEFAULT_CORE_1 is not set 1535 | CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 1536 | CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" 1537 | # end of PThreads 1538 | 1539 | # 1540 | # MMU Config 1541 | # 1542 | CONFIG_MMU_PAGE_SIZE_64KB=y 1543 | CONFIG_MMU_PAGE_MODE="64KB" 1544 | CONFIG_MMU_PAGE_SIZE=0x10000 1545 | # end of MMU Config 1546 | 1547 | # 1548 | # Main Flash configuration 1549 | # 1550 | 1551 | # 1552 | # SPI Flash behavior when brownout 1553 | # 1554 | CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y 1555 | CONFIG_SPI_FLASH_BROWNOUT_RESET=y 1556 | # end of SPI Flash behavior when brownout 1557 | 1558 | # 1559 | # Optional and Experimental Features (READ DOCS FIRST) 1560 | # 1561 | 1562 | # 1563 | # Features here require specific hardware (READ DOCS FIRST!) 1564 | # 1565 | # end of Optional and Experimental Features (READ DOCS FIRST) 1566 | # end of Main Flash configuration 1567 | 1568 | # 1569 | # SPI Flash driver 1570 | # 1571 | # CONFIG_SPI_FLASH_VERIFY_WRITE is not set 1572 | # CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set 1573 | CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y 1574 | CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y 1575 | # CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set 1576 | # CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set 1577 | # CONFIG_SPI_FLASH_SHARE_SPI1_BUS is not set 1578 | # CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set 1579 | CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y 1580 | CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20 1581 | CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1 1582 | CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192 1583 | # CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set 1584 | # CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set 1585 | # CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set 1586 | 1587 | # 1588 | # Auto-detect flash chips 1589 | # 1590 | CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y 1591 | CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y 1592 | CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y 1593 | CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y 1594 | CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y 1595 | CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y 1596 | CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y 1597 | CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y 1598 | CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y 1599 | # CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP is not set 1600 | # CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set 1601 | # end of Auto-detect flash chips 1602 | 1603 | CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y 1604 | # end of SPI Flash driver 1605 | 1606 | # 1607 | # SPIFFS Configuration 1608 | # 1609 | CONFIG_SPIFFS_MAX_PARTITIONS=3 1610 | 1611 | # 1612 | # SPIFFS Cache Configuration 1613 | # 1614 | CONFIG_SPIFFS_CACHE=y 1615 | CONFIG_SPIFFS_CACHE_WR=y 1616 | # CONFIG_SPIFFS_CACHE_STATS is not set 1617 | # end of SPIFFS Cache Configuration 1618 | 1619 | CONFIG_SPIFFS_PAGE_CHECK=y 1620 | CONFIG_SPIFFS_GC_MAX_RUNS=10 1621 | # CONFIG_SPIFFS_GC_STATS is not set 1622 | CONFIG_SPIFFS_PAGE_SIZE=256 1623 | CONFIG_SPIFFS_OBJ_NAME_LEN=32 1624 | # CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set 1625 | CONFIG_SPIFFS_USE_MAGIC=y 1626 | CONFIG_SPIFFS_USE_MAGIC_LENGTH=y 1627 | CONFIG_SPIFFS_META_LENGTH=4 1628 | CONFIG_SPIFFS_USE_MTIME=y 1629 | 1630 | # 1631 | # Debug Configuration 1632 | # 1633 | # CONFIG_SPIFFS_DBG is not set 1634 | # CONFIG_SPIFFS_API_DBG is not set 1635 | # CONFIG_SPIFFS_GC_DBG is not set 1636 | # CONFIG_SPIFFS_CACHE_DBG is not set 1637 | # CONFIG_SPIFFS_CHECK_DBG is not set 1638 | # CONFIG_SPIFFS_TEST_VISUALISATION is not set 1639 | # end of Debug Configuration 1640 | # end of SPIFFS Configuration 1641 | 1642 | # 1643 | # TCP Transport 1644 | # 1645 | 1646 | # 1647 | # Websocket 1648 | # 1649 | CONFIG_WS_TRANSPORT=y 1650 | CONFIG_WS_BUFFER_SIZE=1024 1651 | # CONFIG_WS_DYNAMIC_BUFFER is not set 1652 | # end of Websocket 1653 | # end of TCP Transport 1654 | 1655 | # 1656 | # Ultra Low Power (ULP) Co-processor 1657 | # 1658 | # CONFIG_ULP_COPROC_ENABLED is not set 1659 | # end of Ultra Low Power (ULP) Co-processor 1660 | 1661 | # 1662 | # Unity unit testing library 1663 | # 1664 | CONFIG_UNITY_ENABLE_FLOAT=y 1665 | CONFIG_UNITY_ENABLE_DOUBLE=y 1666 | # CONFIG_UNITY_ENABLE_64BIT is not set 1667 | # CONFIG_UNITY_ENABLE_COLOR is not set 1668 | CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y 1669 | # CONFIG_UNITY_ENABLE_FIXTURE is not set 1670 | # CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set 1671 | # end of Unity unit testing library 1672 | 1673 | # 1674 | # Virtual file system 1675 | # 1676 | CONFIG_VFS_SUPPORT_IO=y 1677 | CONFIG_VFS_SUPPORT_DIR=y 1678 | CONFIG_VFS_SUPPORT_SELECT=y 1679 | CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y 1680 | # CONFIG_VFS_SELECT_IN_RAM is not set 1681 | CONFIG_VFS_SUPPORT_TERMIOS=y 1682 | CONFIG_VFS_MAX_COUNT=8 1683 | 1684 | # 1685 | # Host File System I/O (Semihosting) 1686 | # 1687 | CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 1688 | # end of Host File System I/O (Semihosting) 1689 | # end of Virtual file system 1690 | 1691 | # 1692 | # Wear Levelling 1693 | # 1694 | # CONFIG_WL_SECTOR_SIZE_512 is not set 1695 | CONFIG_WL_SECTOR_SIZE_4096=y 1696 | CONFIG_WL_SECTOR_SIZE=4096 1697 | # end of Wear Levelling 1698 | 1699 | # 1700 | # Wi-Fi Provisioning Manager 1701 | # 1702 | CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16 1703 | CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30 1704 | CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION=y 1705 | CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y 1706 | # CONFIG_WIFI_PROV_STA_FAST_SCAN is not set 1707 | # end of Wi-Fi Provisioning Manager 1708 | 1709 | # 1710 | # esp-mqtt 1711 | # 1712 | CONFIG_ESP_MQTT_ENABLED=y 1713 | CONFIG_ESP_MQTT_TASK_STACK=9216 1714 | CONFIG_ESP_MQTT_TASK_PRIORITY=5 1715 | CONFIG_ESP_MQTT_EVENT_QUEUE_SIZE=64 1716 | CONFIG_ESP_MQTT_TLS_ENABLE=y 1717 | # end of esp-mqtt 1718 | # end of Component config 1719 | 1720 | # CONFIG_IDF_EXPERIMENTAL_FEATURES is not set 1721 | 1722 | # Deprecated options for backward compatibility 1723 | # CONFIG_APP_BUILD_TYPE_ELF_RAM is not set 1724 | # CONFIG_NO_BLOBS is not set 1725 | # CONFIG_ESP32_NO_BLOBS is not set 1726 | # CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set 1727 | # CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set 1728 | # CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set 1729 | # CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set 1730 | # CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set 1731 | CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y 1732 | # CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set 1733 | # CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set 1734 | CONFIG_LOG_BOOTLOADER_LEVEL=3 1735 | # CONFIG_APP_ROLLBACK_ENABLE is not set 1736 | # CONFIG_FLASH_ENCRYPTION_ENABLED is not set 1737 | # CONFIG_FLASHMODE_QIO is not set 1738 | # CONFIG_FLASHMODE_QOUT is not set 1739 | CONFIG_FLASHMODE_DIO=y 1740 | # CONFIG_FLASHMODE_DOUT is not set 1741 | CONFIG_MONITOR_BAUD=115200 1742 | CONFIG_OPTIMIZATION_LEVEL_DEBUG=y 1743 | CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y 1744 | CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y 1745 | # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set 1746 | # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set 1747 | CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y 1748 | # CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set 1749 | # CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set 1750 | CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 1751 | # CONFIG_CXX_EXCEPTIONS is not set 1752 | CONFIG_STACK_CHECK_NONE=y 1753 | # CONFIG_STACK_CHECK_NORM is not set 1754 | # CONFIG_STACK_CHECK_STRONG is not set 1755 | # CONFIG_STACK_CHECK_ALL is not set 1756 | # CONFIG_WARN_WRITE_STRINGS is not set 1757 | # CONFIG_ESP32_APPTRACE_DEST_TRAX is not set 1758 | CONFIG_ESP32_APPTRACE_DEST_NONE=y 1759 | CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y 1760 | CONFIG_ADC2_DISABLE_DAC=y 1761 | # CONFIG_MCPWM_ISR_IN_IRAM is not set 1762 | # CONFIG_EVENT_LOOP_PROFILING is not set 1763 | CONFIG_POST_EVENTS_FROM_ISR=y 1764 | CONFIG_POST_EVENTS_FROM_IRAM_ISR=y 1765 | CONFIG_GDBSTUB_SUPPORT_TASKS=y 1766 | CONFIG_GDBSTUB_MAX_TASKS=32 1767 | # CONFIG_OTA_ALLOW_HTTP is not set 1768 | # CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set 1769 | CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y 1770 | CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 1771 | CONFIG_ESP_SYSTEM_PD_FLASH=y 1772 | CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=0 1773 | CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=0 1774 | CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y 1775 | CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y 1776 | # CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set 1777 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set 1778 | # CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set 1779 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set 1780 | # CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set 1781 | # CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set 1782 | CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 1783 | # CONFIG_ESP32_XTAL_FREQ_26 is not set 1784 | # CONFIG_ESP32_XTAL_FREQ_40 is not set 1785 | CONFIG_ESP32_XTAL_FREQ_AUTO=y 1786 | CONFIG_ESP32_XTAL_FREQ=0 1787 | CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y 1788 | # CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set 1789 | CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 1790 | CONFIG_ESP32_PHY_MAX_TX_POWER=20 1791 | CONFIG_REDUCE_PHY_TX_POWER=y 1792 | CONFIG_ESP32_REDUCE_PHY_TX_POWER=y 1793 | # CONFIG_SPIRAM_SUPPORT is not set 1794 | # CONFIG_ESP32_SPIRAM_SUPPORT is not set 1795 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set 1796 | # CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set 1797 | CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y 1798 | CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 1799 | CONFIG_TRACEMEM_RESERVE_DRAM=0x0 1800 | # CONFIG_ESP32_PANIC_PRINT_HALT is not set 1801 | CONFIG_ESP32_PANIC_PRINT_REBOOT=y 1802 | # CONFIG_ESP32_PANIC_SILENT_REBOOT is not set 1803 | # CONFIG_ESP32_PANIC_GDBSTUB is not set 1804 | CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 1805 | CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4096 1806 | CONFIG_MAIN_TASK_STACK_SIZE=4096 1807 | CONFIG_CONSOLE_UART_DEFAULT=y 1808 | # CONFIG_CONSOLE_UART_CUSTOM is not set 1809 | # CONFIG_CONSOLE_UART_NONE is not set 1810 | # CONFIG_ESP_CONSOLE_UART_NONE is not set 1811 | CONFIG_CONSOLE_UART=y 1812 | CONFIG_CONSOLE_UART_NUM=0 1813 | CONFIG_CONSOLE_UART_BAUDRATE=115200 1814 | CONFIG_INT_WDT=y 1815 | CONFIG_INT_WDT_TIMEOUT_MS=300 1816 | CONFIG_INT_WDT_CHECK_CPU1=y 1817 | CONFIG_TASK_WDT=y 1818 | CONFIG_ESP_TASK_WDT=y 1819 | # CONFIG_TASK_WDT_PANIC is not set 1820 | CONFIG_TASK_WDT_TIMEOUT_S=5 1821 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y 1822 | CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y 1823 | # CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set 1824 | CONFIG_ESP32_DEBUG_OCDAWARE=y 1825 | CONFIG_BROWNOUT_DET=y 1826 | CONFIG_ESP32_BROWNOUT_DET=y 1827 | CONFIG_BROWNOUT_DET_LVL_SEL_0=y 1828 | CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y 1829 | # CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set 1830 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set 1831 | # CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set 1832 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set 1833 | # CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set 1834 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set 1835 | # CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set 1836 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set 1837 | # CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set 1838 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set 1839 | # CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set 1840 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set 1841 | # CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set 1842 | # CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set 1843 | CONFIG_BROWNOUT_DET_LVL=0 1844 | CONFIG_ESP32_BROWNOUT_DET_LVL=0 1845 | # CONFIG_DISABLE_BASIC_ROM_CONSOLE is not set 1846 | CONFIG_IPC_TASK_STACK_SIZE=1024 1847 | CONFIG_TIMER_TASK_STACK_SIZE=3584 1848 | CONFIG_ESP32_WIFI_ENABLED=y 1849 | CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 1850 | CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 1851 | # CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set 1852 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y 1853 | CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1 1854 | CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32 1855 | # CONFIG_ESP32_WIFI_CSI_ENABLED is not set 1856 | CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y 1857 | CONFIG_ESP32_WIFI_TX_BA_WIN=6 1858 | CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y 1859 | CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y 1860 | CONFIG_ESP32_WIFI_RX_BA_WIN=6 1861 | CONFIG_ESP32_WIFI_RX_BA_WIN=6 1862 | CONFIG_ESP32_WIFI_NVS_ENABLED=y 1863 | CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y 1864 | # CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set 1865 | CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 1866 | CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 1867 | CONFIG_ESP32_WIFI_IRAM_OPT=y 1868 | CONFIG_ESP32_WIFI_RX_IRAM_OPT=y 1869 | CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y 1870 | CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y 1871 | CONFIG_WPA_MBEDTLS_CRYPTO=y 1872 | CONFIG_WPA_MBEDTLS_TLS_CLIENT=y 1873 | # CONFIG_WPA_WAPI_PSK is not set 1874 | # CONFIG_WPA_11KV_SUPPORT is not set 1875 | # CONFIG_WPA_MBO_SUPPORT is not set 1876 | # CONFIG_WPA_DPP_SUPPORT is not set 1877 | # CONFIG_WPA_11R_SUPPORT is not set 1878 | # CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set 1879 | # CONFIG_WPA_WPS_STRICT is not set 1880 | # CONFIG_WPA_DEBUG_PRINT is not set 1881 | # CONFIG_WPA_TESTING_OPTIONS is not set 1882 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set 1883 | CONFIG_ESP32_ENABLE_COREDUMP_TO_UART=y 1884 | # CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE is not set 1885 | # CONFIG_ESP32_COREDUMP_DATA_FORMAT_BIN is not set 1886 | CONFIG_ESP32_COREDUMP_DATA_FORMAT_ELF=y 1887 | CONFIG_ESP32_COREDUMP_CHECKSUM_CRC32=y 1888 | # CONFIG_ESP32_COREDUMP_CHECKSUM_SHA256 is not set 1889 | CONFIG_ESP32_ENABLE_COREDUMP=y 1890 | CONFIG_ESP32_CORE_DUMP_MAX_TASKS_NUM=64 1891 | CONFIG_ESP32_CORE_DUMP_UART_DELAY=0 1892 | CONFIG_ESP32_CORE_DUMP_STACK_SIZE=0 1893 | CONFIG_ESP32_CORE_DUMP_DECODE_INFO=y 1894 | # CONFIG_ESP32_CORE_DUMP_DECODE_DISABLE is not set 1895 | CONFIG_ESP32_CORE_DUMP_DECODE="info" 1896 | CONFIG_TIMER_TASK_PRIORITY=1 1897 | CONFIG_TIMER_TASK_STACK_DEPTH=2048 1898 | CONFIG_TIMER_QUEUE_LENGTH=10 1899 | # CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set 1900 | # CONFIG_HAL_ASSERTION_SILIENT is not set 1901 | # CONFIG_L2_TO_L3_COPY is not set 1902 | CONFIG_ESP_GRATUITOUS_ARP=y 1903 | CONFIG_GARP_TMR_INTERVAL=60 1904 | CONFIG_TCPIP_RECVMBOX_SIZE=32 1905 | CONFIG_TCP_MAXRTX=12 1906 | CONFIG_TCP_SYNMAXRTX=6 1907 | CONFIG_TCP_MSS=1436 1908 | CONFIG_TCP_MSL=60000 1909 | CONFIG_TCP_SND_BUF_DEFAULT=5744 1910 | CONFIG_TCP_WND_DEFAULT=5744 1911 | CONFIG_TCP_RECVMBOX_SIZE=6 1912 | CONFIG_TCP_QUEUE_OOSEQ=y 1913 | CONFIG_TCP_OVERSIZE_MSS=y 1914 | # CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set 1915 | # CONFIG_TCP_OVERSIZE_DISABLE is not set 1916 | CONFIG_UDP_RECVMBOX_SIZE=6 1917 | CONFIG_TCPIP_TASK_STACK_SIZE=2560 1918 | CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y 1919 | # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set 1920 | # CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set 1921 | CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF 1922 | # CONFIG_PPP_SUPPORT is not set 1923 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y 1924 | CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y 1925 | # CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set 1926 | # CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set 1927 | # CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set 1928 | # CONFIG_ESP32_TIME_SYSCALL_USE_NONE is not set 1929 | CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 1930 | CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 1931 | CONFIG_ESP32_PTHREAD_STACK_MIN=768 1932 | CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y 1933 | # CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set 1934 | # CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set 1935 | CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 1936 | CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" 1937 | CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y 1938 | # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set 1939 | # CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set 1940 | # CONFIG_ESP32_ULP_COPROC_ENABLED is not set 1941 | CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y 1942 | CONFIG_SUPPORT_TERMIOS=y 1943 | CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 1944 | # End of deprecated options 1945 | --------------------------------------------------------------------------------