初版使用版本5.5.0以前5.3.1的弃用
authord15521469561 <1731678236@qq.com>
Thu, 23 Apr 2026 03:02:43 +0000 (11:02 +0800)
committerd15521469561 <1731678236@qq.com>
Thu, 23 Apr 2026 03:02:43 +0000 (11:02 +0800)
66 files changed:
.clangd [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
README.md [new file with mode: 0644]
customized/certificate.bin [new file with mode: 0644]
customized/certificate.csv [new file with mode: 0644]
customized/certificate/client.crt [new file with mode: 0644]
customized/certificate/client.key [new file with mode: 0644]
customized/certificate/mosquitto.org.crt [new file with mode: 0644]
dependencies.lock [new file with mode: 0644]
json_file.bin [new file with mode: 0644]
json_file.bin.bak [new file with mode: 0644]
main/CMakeLists.txt [new file with mode: 0644]
main/CMakeLists1.txt [new file with mode: 0644]
main/aes.c [new file with mode: 0644]
main/aes.h [new file with mode: 0644]
main/app_main.c [new file with mode: 0644]
main/ble.c [new file with mode: 0644]
main/ble.h [new file with mode: 0644]
main/client.crt [new file with mode: 0644]
main/client.key [new file with mode: 0644]
main/crc.c [new file with mode: 0644]
main/crc.h [new file with mode: 0644]
main/gap.c [new file with mode: 0644]
main/gap.h [new file with mode: 0644]
main/gatt_svc.c [new file with mode: 0644]
main/gatt_svc.h [new file with mode: 0644]
main/https_ota.c [new file with mode: 0644]
main/https_ota.h [new file with mode: 0644]
main/iap.c [new file with mode: 0644]
main/iap.h [new file with mode: 0644]
main/idf_component.yml [new file with mode: 0644]
main/mosquitto.org.crt [new file with mode: 0644]
main/project_common.c [new file with mode: 0644]
main/project_common.h [new file with mode: 0644]
main/uart.c [new file with mode: 0644]
main/uart.h [new file with mode: 0644]
main/user_flash.c [new file with mode: 0644]
main/user_flash.h [new file with mode: 0644]
main/user_http.c [new file with mode: 0644]
main/user_http.h [new file with mode: 0644]
main/user_mqtt.c [new file with mode: 0644]
main/user_mqtt.h [new file with mode: 0644]
main/version.h [new file with mode: 0644]
main/wifi.c [new file with mode: 0644]
main/wifi.h [new file with mode: 0644]
partitions - 副本 (2).csv [new file with mode: 0644]
partitions - 副本 (3).csv [new file with mode: 0644]
partitions - 副本.csv [new file with mode: 0644]
partitions.csv [new file with mode: 0644]
pxn_merge/Qt5Core.dll [new file with mode: 0644]
pxn_merge/WGTL_ESP32C2_0.01_build2.lsuf [new file with mode: 0644]
pxn_merge/WGTL_ESP32C2_0.01_build3.lsuf [new file with mode: 0644]
pxn_merge/WGTL_ESP32C2_0.01_build4.lsuf [new file with mode: 0644]
pxn_merge/WGTL_ESP32C2_0.01_build5.lsuf [new file with mode: 0644]
pxn_merge/WGTL_ESP32C2_0.01_build6.lsuf [new file with mode: 0644]
pxn_merge/WGTL_ESP32C2_0.01_build7.lsuf [new file with mode: 0644]
pxn_merge/merge.bat [new file with mode: 0644]
pxn_merge/pxn_fw_header_esp32.exe [new file with mode: 0644]
sdkconfig [new file with mode: 0644]
sdkconfig - 副本 [new file with mode: 0644]
sdkconfig.old [new file with mode: 0644]
sdkconfig_BLE5.0 [new file with mode: 0644]
test.txt [new file with mode: 0644]
url.txt [new file with mode: 0644]
version.txt [new file with mode: 0644]
公网测试环境证书.zip [new file with mode: 0644]

diff --git a/.clangd b/.clangd
new file mode 100644 (file)
index 0000000..437f255
--- /dev/null
+++ b/.clangd
@@ -0,0 +1,2 @@
+CompileFlags:
+    Remove: [-f*, -m*]
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c7b182a
--- /dev/null
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 3.2.0)
+
+# 每次编译都强制重新生成时间戳(不清空build也更新)
+string(TIMESTAMP COMPILE_TIME "%Y%m%d_%H%M")
+set(PROJECT_VER "V0.0.0_${COMPILE_TIME}")
+file(WRITE ${CMAKE_CURRENT_LIST_DIR}/version.txt "${PROJECT_VER}\n")
+# 关键:强制每次编译都重新运行CMake,刷新时间
+add_custom_target(
+    force_cmake_refresh ALL
+    COMMAND ${CMAKE_COMMAND} -E touch_nocreate "${CMAKE_CURRENT_LIST_FILE}"
+    COMMENT "Forcing CMake refresh to update compile time..."
+)
+
+include($ENV{IDF_PATH}/tools/cmake/project.cmake)
+project(mqtt_ssl_mutual_auth)
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..4750ff1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,82 @@
+| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 |
+| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- |
+
+# ESP-MQTT SSL Sample application (mutual authentication)
+
+(See the README.md file in the upper level 'examples' directory for more information about examples.)
+
+This example connects to the broker test.mosquitto.org using ssl transport with client certificate and as a demonstration subscribes/unsubscribes and send a message on certain topic.
+(Please note that the public broker is maintained by the community so may not be always available, for details please visit http://test.mosquitto.org)
+
+It uses ESP-MQTT library which implements mqtt client to connect to mqtt broker.
+
+## How to use example
+
+### Hardware Required
+
+This example can be executed on any ESP32 board, the only required interface is WiFi and connection to internet.
+
+### Configure the project
+
+* Open the project configuration menu (`idf.py menuconfig`)
+* Configure Wi-Fi or Ethernet under "Example Connection Configuration" menu. See "Establishing Wi-Fi or Ethernet Connection" section in [examples/protocols/README.md](../../README.md) for more details.
+
+* Generate your client keys and certificate
+
+Navigate to the main directory
+
+```
+cd main
+```
+
+Generate a client key and a CSR. When you are generating the CSR, do not use the default values. At a minimum, the CSR must include the Country, Organisation and Common Name fields.
+
+```
+openssl genrsa -out client.key
+openssl req -out client.csr -key client.key -new
+```
+
+Paste the generated CSR in the [Mosquitto test certificate signer](https://test.mosquitto.org/ssl/index.php), click Submit and copy the downloaded `client.crt` in the `main` directory.
+
+Please note, that the supplied files `client.crt` and `client.key` in the `main` directory are only placeholders for your client certificate and key (i.e. the example "as is" would compile but would not connect to the broker)
+
+The server certificate `mosquitto.org.crt` can be downloaded in pem format from [mosquitto.org.crt](https://test.mosquitto.org/ssl/mosquitto.org.crt).
+
+### Build and Flash
+
+Build the project and flash it to the board, then run monitor tool to view serial output:
+
+```
+idf.py -p PORT flash monitor
+```
+
+(To exit the serial monitor, type ``Ctrl-]``.)
+
+See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects.
+
+## Example Output
+
+```
+I (3714) event: sta ip: 192.168.0.139, mask: 255.255.255.0, gw: 192.168.0.2
+I (3714) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
+I (3964) MQTT_CLIENT: Sending MQTT CONNECT message, type: 1, id: 0000
+I (4164) MQTTS_EXAMPLE: MQTT_EVENT_CONNECTED
+I (4174) MQTTS_EXAMPLE: sent publish successful, msg_id=41464
+I (4174) MQTTS_EXAMPLE: sent subscribe successful, msg_id=17886
+I (4174) MQTTS_EXAMPLE: sent subscribe successful, msg_id=42970
+I (4184) MQTTS_EXAMPLE: sent unsubscribe successful, msg_id=50241
+I (4314) MQTTS_EXAMPLE: MQTT_EVENT_PUBLISHED, msg_id=41464
+I (4484) MQTTS_EXAMPLE: MQTT_EVENT_SUBSCRIBED, msg_id=17886
+I (4484) MQTTS_EXAMPLE: sent publish successful, msg_id=0
+I (4684) MQTTS_EXAMPLE: MQTT_EVENT_SUBSCRIBED, msg_id=42970
+I (4684) MQTTS_EXAMPLE: sent publish successful, msg_id=0
+I (4884) MQTT_CLIENT: deliver_publish, message_length_read=19, message_length=19
+I (4884) MQTTS_EXAMPLE: MQTT_EVENT_DATA
+TOPIC=/topic/qos0
+DATA=data
+I (5194) MQTT_CLIENT: deliver_publish, message_length_read=19, message_length=19
+I (5194) MQTTS_EXAMPLE: MQTT_EVENT_DATA
+TOPIC=/topic/qos0
+DATA=data
+```
+
diff --git a/customized/certificate.bin b/customized/certificate.bin
new file mode 100644 (file)
index 0000000..0938d55
Binary files /dev/null and b/customized/certificate.bin differ
diff --git a/customized/certificate.csv b/customized/certificate.csv
new file mode 100644 (file)
index 0000000..9a06ae1
--- /dev/null
@@ -0,0 +1,7 @@
+key,type,encoding,value
+client_cert,namespace,,
+client_cert,file,binary,D:\esp_vscode\ssl_mutual_auth_nvs_test\customized\certificate\client.crt
+client_key,namespace,,
+client_key,file,binary,D:\esp_vscode\ssl_mutual_auth_nvs_test\customized\certificate\client.key
+mosquitto_ca,namespace,,
+mosquitto_ca,file,binary,D:\esp_vscode\ssl_mutual_auth_nvs_test\customized\certificate\mosquitto.org.crt
\ No newline at end of file
diff --git a/customized/certificate/client.crt b/customized/certificate/client.crt
new file mode 100644 (file)
index 0000000..e693922
--- /dev/null
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDWTCCAkGgAwIBAgIURpSxKjdraq6TLFCENuhtjNelfLYwDQYJKoZIhvcNAQEL
+BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g
+SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTI1MDcxNDEyMjk1
+MloXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0
+ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMARxe7gi6kJPTDgNyiR
+X9SaFaYxe1nNUx6ukcNalUfdgy4QFRdxb2oRJgOiISsYnRvzDsGR5kKGYaHiuI+D
+oUT58f6h19++aLjF5fg2e42Di/zFBNZtRzByOUP/WulHA4xAGIEAxNtjytLzxO+W
+Dt4vCEEIfrYTW9P5r92+r8ZUaJKrSafll/LM5Zcj6GkcR9C39EX7uaYg95CIdx4Y
+bgvsYZbb/PIAP/4wRbOwzyXxrwjh+WYBzPb1dxnDixF5NfPDaHWzGHH9EtX2zqnY
++L2g+bgRfgjEIM1m8TCxnpzJTyyfhIb1Coc+bOdk3LROxKNQ/lsvpGJvIqBFCjQ0
+yqsCAwEAAaNgMF4wHwYDVR0jBBgwFoAU4dLvDsL/yIHxYiAY/6KLleZoDMowHQYD
+VR0OBBYEFOPECh7CdzVR61Dtfj0k9T0CYok9MAwGA1UdEwEB/wQCMAAwDgYDVR0P
+AQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQCjgzLzbRkxY7JFK4IvPRSWtYxm
+46apVPCdRFIqhv0LaZT74HSpHSvxmLvjdb9c/I5HwCtM+PI3/XRDDy8TOvQlFvAN
+zXDtocxO5nF06o1hado/XvJVO7t5EvEHqzYnOb1ntYL2FSZdNR/qX8Sthj3xxLYT
+RUgkzmACuP6Ivm94c3nJ85MKZS8Q+hlp9HQcQig6JKfbGh0zDluHOF0NcFSl7dTm
+MVfZbCQoC8jh7p7MAnKNs8/yvqSpCUOOzQMzEAdkZh/UWJvruJ9Ip4IikaCyHp4s
+5pB+GyXaiG9k//JLuL2CHijTLcCJrm6PG3TLvtZqgDgvlkVnKc9j1Yy+zCe7
+-----END CERTIFICATE-----
diff --git a/customized/certificate/client.key b/customized/certificate/client.key
new file mode 100644 (file)
index 0000000..6aaef17
--- /dev/null
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpgIBAAKCAQEAwBHF7uCLqQk9MOA3KJFf1JoVpjF7Wc1THq6Rw1qVR92DLhAV
+F3FvahEmA6IhKxidG/MOwZHmQoZhoeK4j4OhRPnx/qHX375ouMXl+DZ7jYOL/MUE
+1m1HMHI5Q/9a6UcDjEAYgQDE22PK0vPE75YO3i8IQQh+thNb0/mv3b6vxlRokqtJ
+p+WX8szllyPoaRxH0Lf0Rfu5piD3kIh3HhhuC+xhltv88gA//jBFs7DPJfGvCOH5
+ZgHM9vV3GcOLEXk188NodbMYcf0S1fbOqdj4vaD5uBF+CMQgzWbxMLGenMlPLJ+E
+hvUKhz5s52TctE7Eo1D+Wy+kYm8ioEUKNDTKqwIDAQABAoIBAQC2JWTHSC1KLdfY
+7RmCIHN4BHQ5er2XCVAlTbowQExHrfuEiH3oEIxvUznwwiWgYCRGaDd7POjX9+bJ
+BmCuwU8EQeDL8SHvLvzTFeIkhU6ggrsUCKewzktv1zMVmCnYBp+HtxVF6bvGrxme
++sytxWnuLT4vpmW8OBmiqiytJvQ9KRNsgNoHQqKhUQAP5Zg3jhTFdDGobvssdnLI
+6nT6EJ5K89jEoi5FK0kqcsqvRfgFctrQBY79kTv5glPm8vsbVms/CyyWARhsOFNE
+8nMwKrZBCILH7I0xtjLmDT1xIAxq13ndqnqjxQ32KN3bjuCRyVU6OsDFYwFuArDY
+L525Fso5AoGBAO/qdku3T3Z0eiwTDN25VRVEkufMv00fAywzAvLyyfWZ+9JPzaZL
+xK8YfO8h+xJmSEsu81jIu7hg8FziT18nOXWVhSl7/QSbWpd7oxpYHVya0WwMGQ/o
+5U99GP0oDBzE0L/+YLZFLWoYOvg67Gsz5T3aJathR1G4IKGIacJfSCyNAoGBAMzy
+JnEDCGA53N28GgHH3nGZUUL5PmLd7hQxHiNXd86rfWKlbkZGXm+jLtd7NIK8JhAY
+lr6OCm9fvAA1Rnu9bZKqedMimQZAre0xUcFqR0RaVwg/T1Ddu+1b4vXOvEdnWYN3
+MxxPnNbxkOCgeRGlRxVXlGMxL3eQLelFfkHo6nIXAoGBAJTNj2GW6KpHxB7iEfDT
+qnnudk9fJqfmvEkFuqaE/85dG1tuM9cY13zia1rGcLsQxXYcQMKofgX12h9CHoie
+A31yp4z7YgshcCbUgG0uiceOHqYtOr4rbU7IAF/EHv8Y84ChfcqPTYOoU6ryoQA8
+x8p9KzAIvftpgJOv0CjGgDVhAoGBAKeLeuO+z/UiuK5JHZXBGNgTt/whmN/ogL7f
+HL1Vv2skhR/FEG7BDmkDpcKhRV9vg0p7X5kus9czE5Wz+Agm51IUrf1udl1HOSkE
+vcp6IQL/O9FROH1qmDzGdrfvJ7rUAbjZFN6bMyQBXihU6EUFsiP/ch7ZUe3T38Sp
+fDtTt35HAoGBAMow/0jcQC67Rj6Of9z13QjqJ/gTr3OeWo1LwSnz1S40W9mF3LXY
+ipjcYdWNtNuJU/oAWv9UpoqnIluXVmLFF11QX9R2yNLlU9CFgCUA4zItwFx5dZWa
+hBk3V0vfvXrDRTkxVvybL0IZa69SVYT4KybXYPkKNZ9bqFaMz/hh47po
+-----END RSA PRIVATE KEY-----
diff --git a/customized/certificate/mosquitto.org.crt b/customized/certificate/mosquitto.org.crt
new file mode 100644 (file)
index 0000000..a6f3e92
--- /dev/null
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
+ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
+b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
+MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
+b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
+ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
+9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
+IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
+VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
+93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
+jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
+A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
+U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
+N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
+o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
+5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
+rqXRfboQnoZsG4q5WTP468SQvvG5
+-----END CERTIFICATE-----
diff --git a/dependencies.lock b/dependencies.lock
new file mode 100644 (file)
index 0000000..4c2b722
--- /dev/null
@@ -0,0 +1,16 @@
+dependencies:
+  idf:
+    source:
+      type: idf
+    version: 5.5.0
+  protocol_examples_common:
+    dependencies: []
+    source:
+      path: D:\Espressif\frameworks\esp-idf-v5.5\examples\common_components\protocol_examples_common
+      type: local
+    version: '*'
+direct_dependencies:
+- protocol_examples_common
+manifest_hash: 9a9520c926aa0a3e6ab6efa4fb14c3591e654d3887543776c1f730f359b02661
+target: esp32c2
+version: 2.0.0
diff --git a/json_file.bin b/json_file.bin
new file mode 100644 (file)
index 0000000..837ad5e
--- /dev/null
@@ -0,0 +1,9 @@
+{
+    "deviceNumberAndProductIds": [
+        {
+            "deviceNumber": "D1PGLPG58KZ2",
+            "productId": 230
+        }
+    ],
+    "userId": 1
+}
\ No newline at end of file
diff --git a/json_file.bin.bak b/json_file.bin.bak
new file mode 100644 (file)
index 0000000..de87d0b
Binary files /dev/null and b/json_file.bin.bak differ
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
new file mode 100644 (file)
index 0000000..51521a0
--- /dev/null
@@ -0,0 +1,28 @@
+idf_component_register(SRCS "user_http.c" 
+                                                       "user_mqtt.c" 
+                                                       "app_main.c"
+                                                       "iap.c"
+                                                       "project_common.c"
+                                                       "aes.c" 
+                                                       "gap.c" 
+                                                       "gatt_svc.c" 
+                                                       "ble.c"
+                                                       "wifi.c"
+                                                       "user_flash.c"
+                                                       "crc.c"
+                                                       "uart.c"
+                                                       "https_ota.c"         
+                                                    
+                    PRIV_REQUIRES mqtt
+                                                               esp_wifi
+                                                               bt
+                                                               nvs_flash
+                                                               esp_http_client
+                                                               esp_driver_uart
+                                                               esp_driver_gpio
+                                                               esp_https_ota
+                                                               json
+                                                               app_update
+                    INCLUDE_DIRS "."
+
+                                                               )
diff --git a/main/CMakeLists1.txt b/main/CMakeLists1.txt
new file mode 100644 (file)
index 0000000..0d72519
--- /dev/null
@@ -0,0 +1,3 @@
+idf_component_register(SRCS "app_main.c"
+                            "aes.c"   
+                    INCLUDE_DIRS ".")
\ No newline at end of file
diff --git a/main/aes.c b/main/aes.c
new file mode 100644 (file)
index 0000000..dd6e95f
--- /dev/null
@@ -0,0 +1,442 @@
+#include "aes.h"
+#include "string.h"
+
+    
+// 为了能针对C51进行优化,并且又使代码可用于ARM和PC等环境,
+// 在非C51环境(没有定义__C51__)下需要把C51特定的关键字定义为空
+#ifndef __C51__
+       #define code
+       #define data
+       #define idata
+       #define xdata
+       #define pdata
+       typedef unsigned char BOOL;
+#else
+       typedef bit BOOL;
+#endif
+
+#define Nk     (AES_KEY_LENGTH / 32)           // 以“字”(4字节)为单位的密钥长度
+#define Nb     4                                                       // 以“字”(4字节)为单位的加解密数据块大小,固定为4
+
+// Nr:加密的轮数
+#if   AES_KEY_LENGTH == 128
+       #define Nr      10
+#elif AES_KEY_LENGTH == 192
+       #define Nr      12
+#elif AES_KEY_LENGTH == 256
+       #define Nr      14
+#else
+       #error AES_KEY_LENGTH must be 128, 192 or 256 BOOLs!
+#endif
+
+// GF(28) 多项式
+#define BPOLY 0x1B // Lower 8 BOOLs of (x^8 + x^4 + x^3 + x + 1), ie. (x^4 + x^3 + x + 1).
+
+/*****************************************************************************
+*  Typedef  Enum                        枚举定义
+*****************************************************************************/
+
+/*****************************************************************************
+*  Struct                               数据结构定义
+******************************************************************************/
+
+
+/*****************************************************************************
+*  Local variable                       局部变量
+*****************************************************************************/
+
+// AES子密钥表,当密钥长度为128位时,占用176字节空间
+static xdata unsigned char g_roundKeyTable[4*Nb*(Nr+1)];
+
+// 加密用的SBox
+static code const unsigned char sBox[256] = 
+{
+       0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+       0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+       0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+       0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+       0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+       0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+       0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+       0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+       0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+       0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+       0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+       0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+       0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+       0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+       0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+       0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 
+};
+
+// 解密用的SBox
+static code const unsigned char invSBox[256] = 
+{
+       0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
+       0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
+       0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+       0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
+       0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
+       0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+       0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
+       0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
+       0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+       0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
+       0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
+       0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+       0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
+       0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
+       0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+       0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d  
+};
+
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    rotation_word
+//     描述:               对一个“字”数据进行循环右移。
+//     输入参数: pWord -- 要右移的4字节数据。
+//     输出参数: pWord -- 右移后的4字节数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void rotation_word(unsigned char *pWord)
+{
+       unsigned char temp = pWord[0];
+       pWord[0]  = pWord[1];
+       pWord[1]  = pWord[2];
+       pWord[2]  = pWord[3];
+       pWord[3]  = temp;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    xor_bytes
+//     描述:               批量异或两组数据。
+//     输入参数: pData1 -- 要异或的第一组数据。
+//                             pData1 -- 要异或的第二组数据。
+//                             nCount -- 要异或的数据长度。
+//     输出参数: pData1 -- 异或后的结果。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void xor_bytes(unsigned char *pData1, const unsigned char *pData2, unsigned char nCount)
+{
+       unsigned char i;
+       
+       for (i = 0; i < nCount; i++)
+       {
+               pData1[i] ^= pData2[i];
+       }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    AddRoundKey
+//     描述:               把 中间状态数据 加上(异或)子密钥,数据长度为16字节。
+//     输入参数: pState    -- 状态数据。
+//                             pRoundKey -- 子密钥数据。
+//     输出参数: pState    -- 加上子密钥后的状态数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+// static void AddRoundKey(unsigned char *pState, const unsigned char *pRoundKey)
+// {
+//     xor_bytes(pState, pRoundKey, 4*Nb);
+// }
+
+// AddRoundKey的宏形式,比函数形式可以节省4字节的data数据
+#define AddRoundKey(pState, pRoundKey) \
+       xor_bytes((pState), (pRoundKey), 4*Nb)
+
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    sub_bytes
+//     描述:               通过S盒子置换状态数据。
+//     输入参数: pState  -- 状态数据。
+//                             nCount  -- 状态数据长度。
+//                             bInvert -- 是否使用反向S盒子(解密时使用)。
+//     输出参数: pState  -- 置换后的状态数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void sub_bytes(unsigned char *pState, unsigned char nCount, BOOL bInvert)
+{
+       unsigned char i;
+       const unsigned char code *pSBox = bInvert ? invSBox : sBox;
+       
+       for (i = 0; i < nCount; i++)
+       {
+               pState[i] = pSBox[pState[i]];
+       }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    shift_rows
+//     描述:               把状态数据移行。
+//     输入参数: pState  -- 状态数据。
+//                             bInvert -- 是否反向移行(解密时使用)。
+//     输出参数: pState  -- 移行后的状态数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void shift_rows(unsigned char *pState, BOOL bInvert)
+{
+       // 注意:状态数据以列形式存放!
+
+       unsigned char r;        // row,   行
+       unsigned char c;        // column,列
+       unsigned char temp;
+       unsigned char rowData[4];
+       
+       for (r = 1; r < 4; r++)
+       {
+               // 备份一行数据
+               for (c = 0; c < 4; c++)
+               {
+                       rowData[c] = pState[r + 4*c];
+               }
+               
+               temp = bInvert ? (4 - r) : r;
+               for (c = 0; c < 4; c++)
+               {
+                       pState[r + 4*c] = rowData[(c + temp) % 4];
+               }
+       }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    gf_mult_by02
+//     描述:               在GF(28)域的 乘2 运算。
+//     输入参数: num     -- 乘数。
+//     输出参数: 无。
+//     返回值:    num乘以2的结果。
+///////////////////////////////////////////////////////////////////////////////
+static unsigned char gf_mult_by02(unsigned char num)
+{
+       if ((num & 0x80) == 0)
+       {
+               num = num << 1;
+       }
+       else
+       {
+               num = (num << 1) ^ BPOLY;
+       }
+       
+       return num;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    mix_columns
+//     描述:               混合状态各列数据。
+//     输入参数: pState  -- 状态数据。
+//                             bInvert -- 是否反向混合(解密时使用)。
+//     输出参数: pState  -- 混合列后的状态数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void mix_columns(unsigned char *pState, BOOL bInvert)
+{
+       unsigned char i;
+       unsigned char temp;
+       unsigned char a0Pa2_M4; // 4(a0 + a2)
+       unsigned char a1Pa3_M4; // 4(a1 + a3)
+       unsigned char result[4];
+
+       for (i = 0; i < 4; i++, pState += 4)
+       {
+               // b0 = 2a0 + 3a1 + a2 + a3 
+               //    = (a0 + a1 + a2 + a3) + 2(a0 + a1) + a0
+
+               temp = pState[0] ^ pState[1] ^ pState[2] ^ pState[3];
+               result[0] = temp ^ pState[0] ^ gf_mult_by02((unsigned char) (pState[0] ^ pState[1]));
+               result[1] = temp ^ pState[1] ^ gf_mult_by02((unsigned char) (pState[1] ^ pState[2]));
+               result[2] = temp ^ pState[2] ^ gf_mult_by02((unsigned char) (pState[2] ^ pState[3]));
+               result[3] = temp ^ pState[3] ^ gf_mult_by02((unsigned char) (pState[3] ^ pState[0]));
+
+               if (bInvert)
+               {
+               // b0' = 14a0 + 11a1 + 13a2 + 9a3 
+               //     = (a0 + a1 + a2 + a3) + 2(a0 + a1) + a0  (这部分为b0)
+               //       + 2(4(a0 + a2) + 4(a1 + a3))
+               //       +   4(a0 + a2)
+
+                       a0Pa2_M4 = gf_mult_by02(gf_mult_by02((unsigned char) (pState[0] ^ pState[2])));
+                       a1Pa3_M4 = gf_mult_by02(gf_mult_by02((unsigned char) (pState[1] ^ pState[3])));
+                       temp     = gf_mult_by02((unsigned char) (a0Pa2_M4 ^ a1Pa3_M4));
+                       result[0] ^= temp ^ a0Pa2_M4;
+                       result[1] ^= temp ^ a1Pa3_M4;
+                       result[2] ^= temp ^ a0Pa2_M4;
+                       result[3] ^= temp ^ a1Pa3_M4;
+               }
+
+               memcpy(pState, result, 4);
+       }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    block_encrypt
+//     描述:               对单块数据加密。
+//     输入参数: pState -- 状态数据。
+//     输出参数: pState -- 加密后的状态数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void block_encrypt(unsigned char *pState)
+{
+       unsigned char i;
+       
+       AddRoundKey(pState, g_roundKeyTable);
+       
+       for (i = 1; i <= Nr; i++)       // i = [1, Nr]
+       {
+               sub_bytes(pState, 4*Nb, 0);
+               shift_rows(pState, 0);
+
+               if (i != Nr)
+               {
+                       mix_columns(pState, 0);
+               }
+
+               AddRoundKey(pState, &g_roundKeyTable[4*Nb*i]);
+       }
+       
+// 为了节省代码,合并到循化执行
+//     sub_bytes(pState, 4*Nb);
+//     shift_rows(pState, 0);
+//     AddRoundKey(pState, &g_roundKeyTable[4*Nb*Nr]);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    block_decrypt
+//     描述:               对单块数据解密。
+//     输入参数: pState -- 状态数据。
+//     输出参数: pState -- 解密后的状态数据。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+static void block_decrypt(unsigned char *pState)
+{
+       unsigned char i;
+       
+       AddRoundKey(pState, &g_roundKeyTable[4*Nb*Nr]);
+       
+       for (i = Nr; i > 0; i--)        // i = [Nr, 1]
+       {
+               shift_rows(pState, 1);
+               sub_bytes(pState, 4*Nb, 1);
+               AddRoundKey(pState, &g_roundKeyTable[4*Nb*(i-1)]);
+
+               if (i != 1)
+               {
+                       mix_columns(pState, 1);
+               }
+       }
+       
+// 为了节省代码,合并到循化执行
+//  shift_rows(pState, 1);
+//  sub_bytes(pState, 4*Nb, 1);
+//  AddRoundKey(pState, g_roundKeyTable);
+}
+
+/*****************************************************************************
+*  Global Functions                     全局函数
+******************************************************************************/
+
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    aes_init
+//     描述:               初始化,在此执行扩展密钥操作。
+//     输入参数: pKey -- 原始密钥,其长度必须为 AES_KEY_LENGTH/8 字节。
+//     输出参数: 无。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+void aes_init(const void *pKey)
+{
+       // 扩展密钥
+       unsigned char i;
+       unsigned char *pRoundKey;
+       unsigned char Rcon[4] = {0x01, 0x00, 0x00, 0x00};
+
+       memcpy(g_roundKeyTable, pKey, 4*Nk);
+
+       pRoundKey = &g_roundKeyTable[4*Nk];
+
+       for (i = Nk; i < Nb*(Nr+1); pRoundKey += 4, i++)
+       {
+               memcpy(pRoundKey, pRoundKey - 4, 4);
+
+               if (i % Nk == 0)
+               {
+                       rotation_word(pRoundKey);
+                       sub_bytes(pRoundKey, 4, 0);
+                       xor_bytes(pRoundKey, Rcon, 4);
+
+                       Rcon[0] = gf_mult_by02(Rcon[0]);
+               }
+               else if (Nk > 6 && i % Nk == Nb)
+               {
+                       sub_bytes(pRoundKey, 4, 0);
+               }
+
+               xor_bytes(pRoundKey, pRoundKey - 4*Nk, 4);
+       }
+}
+
+//////////////////////////////////////////////////////////////////////////
+//     函数名:    aes_soft_encrypt
+//     描述:               加密数据
+//     输入参数: pPlainText      -- 明文,即需加密的数据,其长度为nDataLen字节。
+//                             nDataLen        -- 数据长度,以字节为单位,必须为AES_KEY_LENGTH/8的整倍数。
+//                             pIV                     -- 初始化向量,如果使用ECB模式,可设为NULL。
+//     输出参数: pCipherText     -- 密文,即由明文加密后的数据,可以与pPlainText相同。
+//     返回值:    无。
+//////////////////////////////////////////////////////////////////////////
+void aes_soft_encrypt(const unsigned char *pPlainText, unsigned char *pCipherText, 
+                                unsigned int nDataLen, const unsigned char *pIV)
+{
+       unsigned int i;
+       (void)pIV;
+
+       if (pPlainText != pCipherText)
+       {
+               memcpy(pCipherText, pPlainText, nDataLen);
+       }
+
+       for (i = nDataLen/(4*Nb); i > 0 ; i--, pCipherText += 4*Nb)
+       {
+               #if AES_MODE == AES_MODE_CBC
+                       xor_bytes(pCipherText, pIV, 4*Nb);
+               #endif
+
+               block_encrypt(pCipherText);
+               pIV = pCipherText;
+       }
+}
+
+//////////////////////////////////////////////////////////////////////////
+//     函数名:    aes_soft_decrypt
+//     描述:               解密数据
+//     输入参数: pCipherText -- 密文,即需解密的数据,其长度为nDataLen字节。
+//                             nDataLen        -- 数据长度,以字节为单位,必须为AES_KEY_LENGTH/8的整倍数。
+//                             pIV                     -- 初始化向量,如果使用ECB模式,可设为NULL。
+//     输出参数: pPlainText  -- 明文,即由密文解密后的数据,可以与pCipherText相同。
+//     返回值:    无。
+//////////////////////////////////////////////////////////////////////////
+void aes_soft_decrypt( const unsigned char *pCipherText,unsigned char *pPlainText, 
+                                unsigned int nDataLen, const unsigned char *pIV)
+{
+       unsigned int i;
+
+       if (pPlainText != pCipherText)
+       {
+               memcpy(pPlainText, pCipherText, nDataLen);
+       }
+
+       // 从最后一块数据开始解密,这样不用开辟空间来保存IV
+       pPlainText += nDataLen - 4*Nb;
+       for (i = nDataLen/(4*Nb); i > 0 ; i--, pPlainText -= 4*Nb)
+       {
+               block_decrypt(pPlainText);
+
+               #if AES_MODE == AES_MODE_CBC
+                       if (i == 1)
+                       {// 最后一块数据
+                               xor_bytes(pPlainText, pIV, 4*Nb);
+                       }
+                       else
+                       {
+                               xor_bytes(pPlainText, pPlainText - 4*Nb, 4*Nb);
+                       }
+               #endif
+       }
+}
diff --git a/main/aes.h b/main/aes.h
new file mode 100644 (file)
index 0000000..baeb72f
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef _AES_H
+#define _AES_H
+
+
+// 以bit为单位的密钥长度,只能为 128,192 和 256 三种
+#define AES_KEY_LENGTH 128
+
+// 加解密模式
+#define AES_MODE_ECB   0                               // 电子密码本模式(一般模式)
+#define AES_MODE_CBC   1                               // 密码分组链接模式
+#define AES_MODE               AES_MODE_ECB
+
+
+///////////////////////////////////////////////////////////////////////////////
+//     函数名:    aes_init
+//     描述:               初始化,在此执行扩展密钥操作。
+//     输入参数: pKey -- 原始密钥,其长度必须为 AES_KEY_LENGTH/8 字节。
+//     输出参数: 无。
+//     返回值:    无。
+///////////////////////////////////////////////////////////////////////////////
+void aes_init(const void *pKey);
+
+//////////////////////////////////////////////////////////////////////////
+//     函数名:    aes_soft_encrypt
+//     描述:               加密数据
+//     输入参数: pPlainText      -- 明文,即需加密的数据,其长度为nDataLen字节。
+//                             nDataLen        -- 数据长度,以字节为单位,必须为AES_KEY_LENGTH/8的整倍数。
+//                             pIV                     -- 初始化向量,如果使用ECB模式,可设为NULL。
+//     输出参数: pCipherText     -- 密文,即由明文加密后的数据,可以与pPlainText相同。
+//     返回值:    无。
+//////////////////////////////////////////////////////////////////////////
+void aes_soft_encrypt(const unsigned char *pPlainText, unsigned char *pCipherText, 
+                                unsigned int nDataLen, const unsigned char *pIV);
+
+//////////////////////////////////////////////////////////////////////////
+//     函数名:    aes_soft_decrypt
+//     描述:               解密数据
+//     输入参数: pCipherText -- 密文,即需解密的数据,其长度为nDataLen字节。
+//                             nDataLen        -- 数据长度,以字节为单位,必须为AES_KEY_LENGTH/8的整倍数。
+//                             pIV                     -- 初始化向量,如果使用ECB模式,可设为NULL。
+//     输出参数: pPlainText  -- 明文,即由密文解密后的数据,可以与pCipherText相同。
+//     返回值:    无。
+//////////////////////////////////////////////////////////////////////////
+void aes_soft_decrypt( const unsigned char *pCipherText,unsigned char *pPlainText, 
+                                unsigned int nDataLen, const unsigned char *pIV);
+#endif  /* _AES_H */
diff --git a/main/app_main.c b/main/app_main.c
new file mode 100644 (file)
index 0000000..70db96d
--- /dev/null
@@ -0,0 +1,260 @@
+/* MQTT Mutual Authentication Example
+
+   This example code is in the Public Domain (or CC0 licensed, at your option.)
+
+   Unless required by applicable law or agreed to in writing, this
+   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+   CONDITIONS OF ANY KIND, either express or implied.
+*/
+#include "project_common.h"
+#include "esp_timer.h"
+#include "https_ota.h"
+#include "user_mqtt.h"
+#include "user_http.h"
+#include "wifi.h"
+#include "ble.h"
+static const char *MAIN_TAG = "main";
+// MAIN_LOOP
+#define MAIN_LOOP_TASK_STACK            (2*1024)
+TaskHandle_t main_loop_task_handler;
+StackType_t main_loop_task_stack[MAIN_LOOP_TASK_STACK];
+StaticTask_t main_loop_task_tcb;
+// 1秒定时器句柄
+static esp_timer_handle_t onesec_timer_handle = NULL;
+
+// 1秒定时器回调函数
+static void onesec_timer_callback(void* arg)
+{
+    #if ENABLE_MQTT_FUNC
+    Mqtt_Send_Data();
+    #endif
+    // 在这里添加每秒执行的代码
+    ESP_LOGI(MAIN_TAG, "onesec_timer: %" PRIu32 " bytes",esp_get_free_heap_size());
+
+    // 例如:检查状态、发送心跳等
+}
+
+
+#if (IOT_ENABLE)
+#if (1)
+const char* device_name = "PXN-W GTL";
+const char* http_url = "http://192.168.66.85:8080";//"http://107.23.202.137:8080";//"http://192.168.66.80:8080";//http://107.23.202.137:8080
+const char* http_token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImJhZWRiZjUyLTUzMDgtNDRlOS04MWI3LTE1MmU4NGYwYzk5ZCJ9.fyxIGmmYD-pKd7VQ02DrL6FwBKVkqXoIu4iKSVMOUj8WubDvuSdbX6j8YzQw8K_t6UTRVZsRDTlO5me2KKhs7A";//"eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjRhNjBlZDdiLTExMDUtNDU5Ny1iNDBhLTg5ZDRiMzMzNTIyYSJ9.CUxkgU2F6BoxzE3HHVdXAin2OEDD1-D_iI0zh7VWTnlNsjsHHulvZVMq2hQLXF4cAQIJpLWwiMZJQO6Bvy9vwg";
+const uint32_t user_id = 1;
+// const char* wifi_ssid = "PXN";
+// const char* wifi_pwd = "PXN998877";
+const char* wifi_ssid = "PXN";
+const char* wifi_pwd = "PXN998877";
+
+const uint16_t mcu_vid = 0x36E6;
+const uint16_t mcu_pid = 0xA00B;
+#endif
+#endif
+
+void Main_Loop_Task(void *pvParameters)
+{
+    common_setting.heart_beat_interval = 1000;
+    common_setting.mcu_info_got_flag = 1;
+    common_setting.heart_beat_enable = 1;
+    common_setting.ble_status.ble_state=0;
+    // // 创建1秒周期性定时器
+    const esp_timer_create_args_t onesec_timer_args = {
+        .callback = &onesec_timer_callback,
+        .arg = NULL,
+        .name = "onesec_timer"
+    };
+    ESP_ERROR_CHECK(esp_timer_create(&onesec_timer_args, &onesec_timer_handle));
+    // 启动1秒周期性定时器 (1000000微秒 = 1秒)
+    ESP_ERROR_CHECK(esp_timer_start_periodic(onesec_timer_handle, 1000000));
+    
+    // ESP_LOGI(MAIN_TAG, "1 second periodic timer started");
+    
+
+#if (IOT_ENABLE)
+    common_setting.mcu_info.vid = mcu_vid;
+    common_setting.mcu_info.pid = mcu_pid;
+    common_setting.mcu_info.fw_version = 0x0001;
+    common_setting.mcu_info.build_version = 0x0001;
+    memcpy(common_setting.mcu_info.product_name, device_name, strlen(device_name));
+    common_setting.mcu_info.product_name_len = strlen(device_name);
+    common_setting.mcu_info_got_flag = 1;
+    
+#if (0)
+    // BLE Test
+    
+    common_setting.mcu_info.vid = mcu_vid;
+    common_setting.mcu_info.pid = mcu_pid;
+    common_setting.mcu_info.fw_version = 0x0001;
+    common_setting.mcu_info.build_version = 0x0001;
+    memcpy(common_setting.mcu_info.product_name, device_name, strlen(device_name));
+    common_setting.mcu_info.product_name_len = strlen(device_name);
+    common_setting.mcu_info_got_flag = 1;
+    common_setting.net_pairing_info.serial_number_flag =1;//等同于device_id
+    // Ble_Queue_Send(0xFF, 0x01);
+    // xEventGroupSetBits(ble_event_group, BLE_ON_BIT);
+
+    memset(common_setting.net_pairing_info.http_url, 0x00, sizeof(common_setting.net_pairing_info.http_url));
+    memset(common_setting.net_pairing_info.http_token, 0x00, sizeof(common_setting.net_pairing_info.http_token));
+    memcpy(common_setting.net_pairing_info.http_url, http_url, strlen(http_url));
+    memcpy(common_setting.net_pairing_info.http_token, http_token, strlen(http_token));
+    common_setting.net_pairing_info.http_url_length = strlen(http_url);
+    common_setting.net_pairing_info.http_token_length = strlen(http_token);
+
+    common_setting.net_pairing_info.user_id = user_id;
+
+    common_setting.net_pairing_info.http_url_flag = 1;
+    common_setting.net_pairing_info.http_token_flag = 1;
+    common_setting.net_pairing_info.user_id_flag = 1;
+
+    memcpy(common_setting.wifi_status.cur_ssid, wifi_ssid, strlen(wifi_ssid));
+    memcpy(common_setting.wifi_status.cur_pwd, wifi_pwd, strlen(wifi_pwd));
+    common_setting.wifi_status.cur_ssid_len = strlen(wifi_ssid);
+    common_setting.wifi_status.cur_pwd_len = strlen(wifi_pwd);
+    common_setting.ble_status.ble_state=0;
+    common_storage.net_info.wifi_info_flag=1;
+    common_storage.net_info.serial_number_flag=1;
+    // Esp_Check_Mcu_info_Flag();
+    
+    Wifi_Queue_Send(0, 0x03, 0);
+#endif
+#endif
+    
+    for(;;)
+    {
+        #if ENABLE_BLE_FUNC
+        Ble_Enable_Status_Check();
+        #endif
+        #if ENABLE_WIFI_FUNC
+        Wifi_Enable_Status_Check();
+        #endif
+        #if ENABLE_HTTP_FUNC
+        Http_Download_Status_Check();
+        #endif
+        #if ENABLE_HTTPS_OTA_FUNC
+        Https_Ota_Status_Check();
+        #endif
+        #if ENABLE_MQTT_FUNC
+        Mqtt_Connect_Status_Check();
+        #endif
+        // heart beat
+        if(common_setting.heart_beat_enable == 1 && common_setting.heart_beat_interval != 0)
+        {
+            static uint32_t heart_beat_tick = 0;
+            heart_beat_tick += MAIN_LOOP_INTERVAL;
+            if(heart_beat_tick >= common_setting.heart_beat_interval)
+            {
+                heart_beat_tick = 0;
+                ESP_LOGI(MAIN_TAG, "send heart\n");
+                #if ENABLE_MQTT_FUNC
+                uint8_t heart_beat_data[2] = {0};//数据
+                heart_beat_data[0]=COMMON_MQTT_STATUS;//状态类型
+                if(Mqtt_Get_Connect_Flag())
+                {
+                    heart_beat_data[1]=0x01;//mqtt连接状态
+                }else{
+                    heart_beat_data[1]=0x00;
+                }
+                Uart_Reply_Send(COMMON_UART_HEART_CMD, heart_beat_data, sizeof(heart_beat_data), HOST_TYPE_UART);//(cmd, pbuf, len, host_type);
+                #else
+                Uart_Reply_Send(COMMON_UART_HEART_CMD, NULL, 0, HOST_TYPE_UART);//(cmd, pbuf, len, host_type);
+                #endif
+                // Check_Host_Type(0xFF, heart_beat_data, sizeof(heart
+                
+               
+                if(common_setting.mcu_info_got_flag == 0)
+                {
+                    // Uart_Reply_Send(0x01, NULL, 0, HOST_TYPE_UART);//发送查询主控信息 这个指令由主控主动发起
+                }
+            }
+        }
+
+        if((xEventGroupWaitBits(common_event_group, COMMON_RESET_BIT, pdFALSE, pdFALSE, 0) & COMMON_RESET_BIT) != 0)
+        {
+            xEventGroupClearBits(common_event_group, COMMON_RESET_BIT);
+            iap_end_cnt = 100;
+        }
+
+        if(iap_end_cnt > 0)
+        {
+            iap_end_cnt -= MAIN_LOOP_INTERVAL;
+            if(iap_end_cnt <= 0)
+            {
+                esp_restart();
+            }
+        }
+        
+        vTaskDelay(MAIN_LOOP_INTERVAL / portTICK_PERIOD_MS);
+    }
+}
+
+void app_main(void)
+{
+    ESP_LOGI(MAIN_TAG, "[APP] Startup..");
+    
+    ESP_LOGI(MAIN_TAG, "[APP] IDF version: %s", esp_get_idf_version());
+    ESP_LOGI(MAIN_TAG, "[DEVICE] Version: %04x %04x", FW_VERSION, BUILD_VERSION);
+    // esp_log_level_set("*", ESP_LOG_INFO);
+    // esp_log_level_set("mqtt_client", ESP_LOG_VERBOSE);
+    // esp_log_level_set("transport_base", ESP_LOG_VERBOSE);
+    // esp_log_level_set("transport", ESP_LOG_VERBOSE);
+    // esp_log_level_set("outbox", ESP_LOG_VERBOSE);
+    ESP_LOGI(MAIN_TAG, "[APP] Free memory start: %" PRIu32 " bytes", esp_get_free_heap_size());
+
+    /* Initialize NVS. */
+    esp_err_t ret;
+    ret = nvs_flash_init();
+    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
+        ESP_ERROR_CHECK(nvs_flash_erase());
+        ret = nvs_flash_init();
+    }
+    ESP_ERROR_CHECK( ret );
+
+    
+    user_flash_mutex = xSemaphoreCreateBinary();
+    xSemaphoreGive(user_flash_mutex);
+
+    #if ENABLE_WIFI_FUNC
+    wifi_scan_mutex = xSemaphoreCreateBinary();
+    xSemaphoreGive(wifi_scan_mutex);
+    wifi_queue_handle = xQueueCreateStatic(WIFI_QUEUE_LENGTH, WIFI_QUEUE_ITEM_SIZE, wifi_queue_storage, &wifi_queue_buffer);
+    #endif
+    // ble_queue_handle = xQueueCreateStatic(BLE_QUEUE_LENGTH, BLE_QUEUE_ITEM_SIZE, ble_queue_storage, &ble_queue_buffer);
+    ble_event_group = xEventGroupCreate();
+    #if ENABLE_BLE_FUNC
+    ble_write_queue_handle = xQueueCreateStatic(BLE_WRTIE_QUEUE_LENGTH, BLE_WRTIE_QUEUE_ITEM_SIZE, ble_write_queue_storage, &ble_write_queue_buffer);
+    ble_notify_queue_handle = xQueueCreateStatic(BLE_NOTIFY_QUEUE_LENGTH, BLE_NOTIFY_QUEUE_ITEM_SIZE, ble_notify_queue_storage, &ble_notify_queue_buffer);
+    #endif
+    
+    uart_tx_queue_handle = xQueueCreateStatic(UART_TX_QUEUE_LENGTH, UART_TX_QUEUE_ITEM_SIZE, uart_tx_queue_storage, &uart_tx_queue_buffer);
+    
+    common_event_group = xEventGroupCreate();
+
+    User_Flash_Check(); 
+    // ESP_LOGI(MAIN_TAG, "[APP] Free memory after User_Flash_Check: %" PRIu32 " bytes", esp_get_free_heap_size());
+    // UART
+    Uart_Initialize();
+    uart_task_handler = xTaskCreateStatic(Uart_Task, "Uart_Task", UART_TASK_STACK, NULL, 2, uart_task_stack, &uart_task_tcb);
+    // ESP_LOGI(MAIN_TAG, "[APP] Free memory after Uart_Initialize: %" PRIu32 " bytes", esp_get_free_heap_size());
+#if (1)//#if (IOT_ENABLE)
+    // LWIP
+    ESP_ERROR_CHECK(esp_netif_init());
+    ESP_ERROR_CHECK(esp_event_loop_create_default());
+    // ESP_LOGI(MAIN_TAG, "[APP] Free memory after lwip: %" PRIu32 " bytes", esp_get_free_heap_size());
+
+    
+    // WIFI
+    #if ENABLE_WIFI_FUNC
+    Wifi_Sta_Init();
+    vTaskDelay(1000);
+    #endif
+    //等待wifi稳定再去连接wifi
+    // ESP_LOGI(MAIN_TAG, "[APP] Free memory after wifi: %" PRIu32 " bytes", esp_get_free_heap_size());
+#endif
+    main_loop_task_handler = xTaskCreateStatic(Main_Loop_Task, "Main_Loop_Task", MAIN_LOOP_TASK_STACK, NULL, 4, main_loop_task_stack, &main_loop_task_tcb);
+    // ESP_LOGI(MAIN_TAG, "[APP] Free memory after Main_Loop: %" PRIu32 " bytes", esp_get_free_heap_size());
+    #if (!USER_TEST_ENABLE)
+    
+    #endif
+}
+
+
diff --git a/main/ble.c b/main/ble.c
new file mode 100644 (file)
index 0000000..52146ba
--- /dev/null
@@ -0,0 +1,258 @@
+#include "project_common.h"
+#include "ble.h"
+#if ENABLE_BLE_FUNC
+static const char *BLE_TAG = "ble";
+
+uint8_t ble_write_queue_storage[BLE_WRTIE_QUEUE_LENGTH*BLE_WRTIE_QUEUE_ITEM_SIZE];
+QueueHandle_t ble_write_queue_handle;
+StaticQueue_t ble_write_queue_buffer;
+
+uint8_t ble_notify_queue_storage[BLE_NOTIFY_QUEUE_LENGTH*BLE_NOTIFY_QUEUE_ITEM_SIZE];
+QueueHandle_t ble_notify_queue_handle;
+StaticQueue_t ble_notify_queue_buffer;
+
+// BLE
+TaskHandle_t nimble_task_handler;
+StackType_t nimble_task_stack[NIMBLE_TASK_STACK];
+StaticTask_t nimble_task_tcb;
+
+TaskHandle_t ble_task_handler;
+StackType_t ble_task_stack[BLE_TASK_STACK];
+StaticTask_t ble_task_tcb;
+
+/* Library function declarations */
+void ble_store_config_init(void);
+
+/* Private function declarations */
+static void on_stack_reset(int reason);
+static void on_stack_sync(void);
+static void nimble_host_config_init(void);
+static void nimble_host_task(void *param);
+
+/* Private functions */
+/*
+ *  Stack event callback functions
+ *      - on_stack_reset is called when host resets BLE stack due to errors
+ *      - on_stack_sync is called when host has synced with controller
+ */
+static void on_stack_reset(int reason) {
+    /* On reset, print reset reason to console */
+    ESP_LOGI(BLE_TAG, "nimble stack reset, reset reason: %d", reason);
+}
+
+static void on_stack_sync(void) {
+    /* On stack sync, do advertising initialization */
+    adv_init();
+}
+
+static void nimble_host_config_init(void) {
+    /* Set host callbacks */
+    ble_hs_cfg.reset_cb = on_stack_reset;
+    ble_hs_cfg.sync_cb = on_stack_sync;
+    ble_hs_cfg.gatts_register_cb = gatt_svr_register_cb;
+    ble_hs_cfg.store_status_cb = ble_store_util_status_rr;
+
+    /* Store host configuration */
+    ble_store_config_init();
+}
+
+static void nimble_host_task(void *param) {
+    /* Task entry log */
+    ESP_LOGI(BLE_TAG, "nimble host task has been started!");
+
+    /* This function won't return until nimble_port_stop() is executed */
+    nimble_port_run();
+
+    /* Clean up at exit */
+    vTaskDelete(NULL);
+}
+
+static void ble_task(void *param)
+{
+    /* Task entry log */
+    ESP_LOGI(BLE_TAG, "ble task has been started!");
+    static BLE_MESSAGE_T ble_write = {0};
+    /* Loop forever */
+    while (1)
+    {
+        send_comm_2_indication();
+        
+        if(xQueueReceive(ble_write_queue_handle, &ble_write, 0) == pdTRUE)
+        {
+            Ble_Pairing_Handle(ble_write.data, ble_write.length, HOST_TYPE_BLE);
+        }
+        /* Sleep */
+        vTaskDelay(10 / portTICK_PERIOD_MS);
+    }
+
+    /* Clean up at exit */
+    vTaskDelete(NULL);
+}
+
+void Ble_Nimble_Init(void)
+{
+    /* Local variables */
+    int rc;
+    esp_err_t ret;
+
+    /* NimBLE stack initialization */
+    ret = nimble_port_init();
+    if (ret != ESP_OK) {
+        ESP_LOGE(BLE_TAG, "failed to initialize nimble stack, error code: %d ",
+                 ret);
+        return;
+    }
+
+    /* GAP service initialization */
+    rc = gap_init();
+    if (rc != 0) {
+        ESP_LOGE(BLE_TAG, "failed to initialize GAP service, error code: %d", rc);
+        return;
+    }
+
+    /* GATT server initialization */
+    rc = gatt_svc_init();
+    if (rc != 0) {
+        ESP_LOGE(BLE_TAG, "failed to initialize GATT server, error code: %d", rc);
+        return;
+    }
+
+    /* NimBLE host configuration initialization */
+    nimble_host_config_init();
+
+    /* Start NimBLE host task thread and return */
+    nimble_task_handler = xTaskCreateStatic(nimble_host_task, "NimBLE", NIMBLE_TASK_STACK, NULL, 5, nimble_task_stack, &nimble_task_tcb);
+    ble_task_handler = xTaskCreateStatic(ble_task, "ble_task", BLE_TASK_STACK, NULL, 6, ble_task_stack, &ble_task_tcb);
+}
+
+
+//串口接收主控发过来的消息 才开启判断是否需要配网
+static uint8_t check_mcu_init = 0;
+void Ble_Start_Nimble_NetWork(void)
+{
+    //如果产品信息改变 需要配网 或者蓝牙状态是关闭的 需要配网清除配网信息
+    if(check_mcu_init == 1)
+    {
+        return;
+    }
+    check_mcu_init=1;
+    if(common_setting.mcu_info_got_flag == 1) //flag=2uart发送的信息 并且没有连接wifi
+    {
+        //无serial_number wifi info 并且蓝牙关闭状态开启蓝牙配网功能 
+        ESP_LOGI(BLE_TAG, "Ble_Start_Nimble_NetWork on: %d %d %d\n",common_storage.net_info.serial_number_flag,common_storage.net_info.wifi_info_flag,\
+        common_setting.ble_status.ble_state);
+        //只要有一个不为1都需要重新配网
+        if((common_storage.net_info.serial_number_flag == 0 || common_storage.net_info.wifi_info_flag == 0) && common_setting.ble_status.ble_state == 0 )
+        {
+
+            xEventGroupSetBits(ble_event_group, BLE_ON_BIT);
+            // ESP_LOGI(BLE_TAG, "[APP] Free memory start BLE_ON_BIT on: %" PRIu32 " bytes", esp_get_free_heap_size());
+        }
+        else if(common_storage.net_info.serial_number_flag == 1 && common_storage.net_info.wifi_info_flag == 1){
+            //有serial_number wifi信息 
+            // ESP_LOGI(BLE_TAG, "[APP] Free memory have serial_number on: %" PRIu32 " bytes", esp_get_free_heap_size());
+            //还要查询是否有订阅地址和证书 没有订阅地址 或者 没有密码 没有wifi名称 没有证书长度
+            if(common_storage.net_info.mqtt_url_len == 0 || common_storage.net_info.wifi_ssid_len == 0 || common_storage.net_info.wifi_pwd_len == 0 || \
+            common_storage.ssl_cert[SSL_CLIENT_CRT].length == 0 || common_storage.ssl_cert[SSL_CLIENT_KEY].length == 0 || common_storage.ssl_cert[SSL_SERVER_CRT].length == 0)
+            {
+                ESP_LOGI(BLE_TAG, "have mqtt_sub_url  on: %d %d %d %d %d %d\n", common_storage.net_info.mqtt_url_len,common_storage.net_info.wifi_ssid_len,\
+                    common_storage.net_info.wifi_pwd_len,common_storage.ssl_cert[SSL_SERVER_CRT].length,common_storage.ssl_cert[SSL_CLIENT_KEY].length,\
+                    common_storage.ssl_cert[SSL_CLIENT_CRT].length);
+                xEventGroupSetBits(ble_event_group, BLE_ON_BIT);//开启配网模式
+            }else//有mqtt地址 密码 名称 证书才能直连mqtt服务器
+            {
+                //直连mqtts
+                common_setting.wifi_status.cur_ssid_len=common_storage.net_info.wifi_ssid_len;
+                common_setting.wifi_status.cur_pwd_len=common_storage.net_info.wifi_pwd_len;
+                if(common_setting.wifi_status.cur_pwd_len !=0 && common_setting.wifi_status.cur_ssid_len != 0)
+                {
+                    memcpy(common_setting.wifi_status.cur_ssid, common_storage.net_info.wifi_ssid,common_storage.net_info.wifi_ssid_len);
+                    memcpy(common_setting.wifi_status.cur_pwd, common_storage.net_info.wifi_pwd,common_storage.net_info.wifi_pwd_len);
+                    if(common_storage.net_info.mqtt_url_len !=0)
+                    {
+                        #if ENABLE_WIFI_FUNC
+                        Wifi_Queue_Send(0, 3, 0);
+                        #endif
+                        
+                    }else{
+                        ESP_LOGI(BLE_TAG, "connect mqtt_sub_url no len");
+                    }
+                }else{
+                    ESP_LOGI(BLE_TAG, "connect ssid pwd no len");
+                }
+                // ESP_LOGI(BLE_TAG, "[APP] Free memory connect mqtt_sub_url  on: on: %" PRIu32 " bytes", esp_get_free_heap_size());
+            }
+        }else{
+            xEventGroupSetBits(ble_event_group, BLE_ON_BIT);//开启配网模式
+            ESP_LOGI(BLE_TAG, "start BLE_ON_BIT error  on: on: %" PRIu32 " bytes", esp_get_free_heap_size());
+        }
+    }
+}
+
+void Ble_Enable_Status_Check(void)
+{
+    
+
+    // static uint8_t ble_queue_read[BLE_QUEUE_ITEM_SIZE] = {0}; // byte0:0:串口   1:蓝牙   0xFF:本地     byte1:1:打开BLE   0xFF:关闭
+    EventBits_t ble_bits = xEventGroupWaitBits(ble_event_group, BLE_ON_BIT | BLE_OFF_BIT, pdFALSE, pdFALSE, 0);
+    if((ble_bits & BLE_ON_BIT) != 0)
+    {
+        ESP_LOGI(BLE_TAG, "BLE_ON_BIT: %d", common_setting.ble_status.ble_state);
+        xEventGroupClearBits(ble_event_group, BLE_ON_BIT);
+        if(common_setting.ble_status.ble_state == 0)//蓝牙开始广播并打开蓝牙开始配网
+        {
+            // 开始配网
+            common_setting.ble_status.ble_state = 1;
+            common_setting.ble_enable_tick = 0;
+            common_setting.ble_status.nimble_flag=1;
+
+            common_setting.net_pairing_info.http_url_flag = 0;
+            common_setting.net_pairing_info.http_token_flag = 0;
+            common_setting.net_pairing_info.user_id_flag = 0;
+            // ESP_LOGI(BLE_TAG, "[APP] Free memory ble on1: %" PRIu32 " bytes", esp_get_free_heap_size());
+            Ble_Nimble_Init();
+            // ESP_LOGI(BLE_TAG, "[APP] Free memory ble on2: %" PRIu32 " bytes", esp_get_free_heap_size());
+        }
+    }
+    else if((ble_bits & BLE_OFF_BIT) != 0)
+    {
+        ESP_LOGI(BLE_TAG, "stop_ble: %d", common_setting.ble_status.ble_state);
+        xEventGroupClearBits(ble_event_group, BLE_OFF_BIT);
+        if(common_setting.ble_status.ble_state > 0)
+        {
+            // 停止配网
+            int ret = nimble_port_stop();
+            if (ret == 0)
+            {
+                if(ble_task_handler != NULL)
+                {
+                    vTaskDelete(ble_task_handler);
+                }
+                nimble_port_deinit();
+                common_setting.ble_status.ble_state = 0;
+                common_setting.ble_enable_tick = 0;
+                common_setting.ble_status.nimble_flag=0;
+                ESP_LOGI(BLE_TAG, "nimble_port_stop\n");
+            }
+            else
+            {
+                ESP_LOGI(BLE_TAG, "nimble_port_stop fail\n");
+            }
+            // ESP_LOGI(BLE_TAG, "[APP] Free memory ble off: %" PRIu32 " bytes", esp_get_free_heap_size());
+        }
+    }
+
+    // 30分钟无配网动作则关闭蓝牙
+    if(common_setting.ble_status.ble_state > 0)
+    {
+        common_setting.ble_enable_tick += MAIN_LOOP_INTERVAL;
+        if(common_setting.ble_enable_tick > (30*60*1000))
+        {
+            // Ble_Queue_Send(0xFF, 0xFF);
+            xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);
+            common_setting.ble_enable_tick = 0;
+        }
+    }
+
+}
+#endif
diff --git a/main/ble.h b/main/ble.h
new file mode 100644 (file)
index 0000000..aecbc2a
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef _BLE_H_
+#define _BLE_H_
+#define ENABLE_BLE_FUNC 1
+#if ENABLE_BLE_FUNC
+/* Includes */
+/* STD APIs */
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+
+/* ESP APIs */
+#include "esp_log.h"
+#include "nvs_flash.h"
+#include "sdkconfig.h"
+
+/* FreeRTOS APIs */
+#include <freertos/FreeRTOS.h>
+#include <freertos/task.h>
+
+/* NimBLE stack APIs */
+#include "host/ble_hs.h"
+#include "host/ble_uuid.h"
+#include "host/util/util.h"
+#include "nimble/ble.h"
+#include "nimble/nimble_port.h"
+#include "nimble/nimble_port_freertos.h"
+
+/* Defines */
+#define DEVICE_NAME "PXN-W GTL"
+// #define DEVICE_NAME ""
+
+#define GATT_UUID_COMM_0    0xFFD0
+#define GATT_UUID_COMM_1    0xFFD1
+#define GATT_UUID_COMM_2    0xFFD2
+
+#define BLE_RECV_BUF_SIZE                         512 //根据mtu最大设置23-512
+typedef struct
+{
+    uint16_t length;
+    uint8_t data[BLE_RECV_BUF_SIZE];
+}BLE_MESSAGE_T;
+
+
+#define BLE_WRTIE_QUEUE_LENGTH          2
+#define BLE_WRTIE_QUEUE_ITEM_SIZE       (sizeof(BLE_MESSAGE_T))
+extern uint8_t ble_write_queue_storage[BLE_WRTIE_QUEUE_LENGTH*BLE_WRTIE_QUEUE_ITEM_SIZE];
+extern QueueHandle_t ble_write_queue_handle;
+extern StaticQueue_t ble_write_queue_buffer;
+
+#define BLE_NOTIFY_QUEUE_LENGTH          2
+#define BLE_NOTIFY_QUEUE_ITEM_SIZE       (sizeof(BLE_MESSAGE_T))
+extern uint8_t ble_notify_queue_storage[BLE_NOTIFY_QUEUE_LENGTH*BLE_NOTIFY_QUEUE_ITEM_SIZE];
+extern QueueHandle_t ble_notify_queue_handle;
+extern StaticQueue_t ble_notify_queue_buffer;
+
+// BLE
+#define NIMBLE_TASK_STACK               (2*1024)
+extern TaskHandle_t nimble_task_handler;
+extern StackType_t nimble_task_stack[NIMBLE_TASK_STACK];
+extern StaticTask_t nimble_task_tcb;
+
+#define BLE_TASK_STACK                  (2*1024)
+extern TaskHandle_t ble_task_handler;
+extern StackType_t ble_task_stack[BLE_TASK_STACK];
+extern StaticTask_t ble_task_tcb;
+
+void Ble_Nimble_Init(void);
+
+// void Ble_Queue_Send(uint8_t host_type, uint8_t enable);
+void Ble_Enable_Status_Check(void);
+void Ble_Start_Nimble_NetWork(void);
+#endif
+#endif
diff --git a/main/client.crt b/main/client.crt
new file mode 100644 (file)
index 0000000..e693922
--- /dev/null
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDWTCCAkGgAwIBAgIURpSxKjdraq6TLFCENuhtjNelfLYwDQYJKoZIhvcNAQEL
+BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g
+SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTI1MDcxNDEyMjk1
+MloXDTQ5MTIzMTIzNTk1OVowHjEcMBoGA1UEAwwTQVdTIElvVCBDZXJ0aWZpY2F0
+ZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMARxe7gi6kJPTDgNyiR
+X9SaFaYxe1nNUx6ukcNalUfdgy4QFRdxb2oRJgOiISsYnRvzDsGR5kKGYaHiuI+D
+oUT58f6h19++aLjF5fg2e42Di/zFBNZtRzByOUP/WulHA4xAGIEAxNtjytLzxO+W
+Dt4vCEEIfrYTW9P5r92+r8ZUaJKrSafll/LM5Zcj6GkcR9C39EX7uaYg95CIdx4Y
+bgvsYZbb/PIAP/4wRbOwzyXxrwjh+WYBzPb1dxnDixF5NfPDaHWzGHH9EtX2zqnY
++L2g+bgRfgjEIM1m8TCxnpzJTyyfhIb1Coc+bOdk3LROxKNQ/lsvpGJvIqBFCjQ0
+yqsCAwEAAaNgMF4wHwYDVR0jBBgwFoAU4dLvDsL/yIHxYiAY/6KLleZoDMowHQYD
+VR0OBBYEFOPECh7CdzVR61Dtfj0k9T0CYok9MAwGA1UdEwEB/wQCMAAwDgYDVR0P
+AQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4IBAQCjgzLzbRkxY7JFK4IvPRSWtYxm
+46apVPCdRFIqhv0LaZT74HSpHSvxmLvjdb9c/I5HwCtM+PI3/XRDDy8TOvQlFvAN
+zXDtocxO5nF06o1hado/XvJVO7t5EvEHqzYnOb1ntYL2FSZdNR/qX8Sthj3xxLYT
+RUgkzmACuP6Ivm94c3nJ85MKZS8Q+hlp9HQcQig6JKfbGh0zDluHOF0NcFSl7dTm
+MVfZbCQoC8jh7p7MAnKNs8/yvqSpCUOOzQMzEAdkZh/UWJvruJ9Ip4IikaCyHp4s
+5pB+GyXaiG9k//JLuL2CHijTLcCJrm6PG3TLvtZqgDgvlkVnKc9j1Yy+zCe7
+-----END CERTIFICATE-----
diff --git a/main/client.key b/main/client.key
new file mode 100644 (file)
index 0000000..6aaef17
--- /dev/null
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpgIBAAKCAQEAwBHF7uCLqQk9MOA3KJFf1JoVpjF7Wc1THq6Rw1qVR92DLhAV
+F3FvahEmA6IhKxidG/MOwZHmQoZhoeK4j4OhRPnx/qHX375ouMXl+DZ7jYOL/MUE
+1m1HMHI5Q/9a6UcDjEAYgQDE22PK0vPE75YO3i8IQQh+thNb0/mv3b6vxlRokqtJ
+p+WX8szllyPoaRxH0Lf0Rfu5piD3kIh3HhhuC+xhltv88gA//jBFs7DPJfGvCOH5
+ZgHM9vV3GcOLEXk188NodbMYcf0S1fbOqdj4vaD5uBF+CMQgzWbxMLGenMlPLJ+E
+hvUKhz5s52TctE7Eo1D+Wy+kYm8ioEUKNDTKqwIDAQABAoIBAQC2JWTHSC1KLdfY
+7RmCIHN4BHQ5er2XCVAlTbowQExHrfuEiH3oEIxvUznwwiWgYCRGaDd7POjX9+bJ
+BmCuwU8EQeDL8SHvLvzTFeIkhU6ggrsUCKewzktv1zMVmCnYBp+HtxVF6bvGrxme
++sytxWnuLT4vpmW8OBmiqiytJvQ9KRNsgNoHQqKhUQAP5Zg3jhTFdDGobvssdnLI
+6nT6EJ5K89jEoi5FK0kqcsqvRfgFctrQBY79kTv5glPm8vsbVms/CyyWARhsOFNE
+8nMwKrZBCILH7I0xtjLmDT1xIAxq13ndqnqjxQ32KN3bjuCRyVU6OsDFYwFuArDY
+L525Fso5AoGBAO/qdku3T3Z0eiwTDN25VRVEkufMv00fAywzAvLyyfWZ+9JPzaZL
+xK8YfO8h+xJmSEsu81jIu7hg8FziT18nOXWVhSl7/QSbWpd7oxpYHVya0WwMGQ/o
+5U99GP0oDBzE0L/+YLZFLWoYOvg67Gsz5T3aJathR1G4IKGIacJfSCyNAoGBAMzy
+JnEDCGA53N28GgHH3nGZUUL5PmLd7hQxHiNXd86rfWKlbkZGXm+jLtd7NIK8JhAY
+lr6OCm9fvAA1Rnu9bZKqedMimQZAre0xUcFqR0RaVwg/T1Ddu+1b4vXOvEdnWYN3
+MxxPnNbxkOCgeRGlRxVXlGMxL3eQLelFfkHo6nIXAoGBAJTNj2GW6KpHxB7iEfDT
+qnnudk9fJqfmvEkFuqaE/85dG1tuM9cY13zia1rGcLsQxXYcQMKofgX12h9CHoie
+A31yp4z7YgshcCbUgG0uiceOHqYtOr4rbU7IAF/EHv8Y84ChfcqPTYOoU6ryoQA8
+x8p9KzAIvftpgJOv0CjGgDVhAoGBAKeLeuO+z/UiuK5JHZXBGNgTt/whmN/ogL7f
+HL1Vv2skhR/FEG7BDmkDpcKhRV9vg0p7X5kus9czE5Wz+Agm51IUrf1udl1HOSkE
+vcp6IQL/O9FROH1qmDzGdrfvJ7rUAbjZFN6bMyQBXihU6EUFsiP/ch7ZUe3T38Sp
+fDtTt35HAoGBAMow/0jcQC67Rj6Of9z13QjqJ/gTr3OeWo1LwSnz1S40W9mF3LXY
+ipjcYdWNtNuJU/oAWv9UpoqnIluXVmLFF11QX9R2yNLlU9CFgCUA4zItwFx5dZWa
+hBk3V0vfvXrDRTkxVvybL0IZa69SVYT4KybXYPkKNZ9bqFaMz/hh47po
+-----END RSA PRIVATE KEY-----
diff --git a/main/crc.c b/main/crc.c
new file mode 100644 (file)
index 0000000..99aea47
--- /dev/null
@@ -0,0 +1,297 @@
+#include <stdint.h>
+#include "crc.h"
+#include "esp_partition.h"
+#include "esp_log.h"
+static const char *CHECKCRC_TAG = "COMMON";
+#if (0)
+/**
+  * @brief 字节按位逆序  1100 0101 -> 1010 0011
+  */
+static uint8_t bit8_reverse(uint8_t x)
+{
+       x = ((x >> 1) & 0x55) | ((x & 0x55) << 1); 
+       x = ((x >> 2) & 0x33) | ((x & 0x33) << 2);
+
+       return ( x >> 4) | (x << 4);
+}
+ 
+static uint16_t bit16_reverse(uint16_t x)
+{
+       x = ((x >> 1) & 0x5555) | ((x & 0x5555) << 1); 
+       x = ((x >> 2) & 0x3333) | ((x & 0x3333) << 2);
+       x = ((x >> 4) & 0x0f0f) | ((x & 0x0f0f) << 4); 
+
+       return((x >> 8) | (x << 8));
+}
+ 
+static uint32_t bit32_reverse(uint32_t x)
+{
+       x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
+       x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
+       x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
+       x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
+
+       return((x >> 16) | (x << 16));
+}
+ 
+uint8_t crc8_universal(uint8_t *data, uint32_t lenth, uint8_t POLY, uint8_t INIT, uint8_t XOROUT, bool REFIN, bool REFOUT)
+{
+       uint8_t i, new_data;
+       uint8_t crc;
+
+       crc = INIT;
+
+       for (; lenth> 0; lenth--)
+       {
+               new_data = REFIN? bit8_reverse(*(data++)) : (*(data++));
+               crc = crc ^ (new_data);
+
+               for (i = 0; i < 8; i++)            
+               {
+                       if (crc & 0x80)           
+                       crc = (crc << 1) ^ POLY;   
+                       else                          
+                       crc <<= 1;                 
+               }
+       }
+
+       crc = REFOUT? bit8_reverse(crc) : crc;
+       crc ^= XOROUT;
+
+       return(crc);                   
+}
+ 
+uint16_t crc16_universal(uint8_t *data, uint32_t lenth, uint16_t POLY, uint16_t INIT, uint16_t XOROUT, bool REFIN, bool REFOUT)
+{
+       uint8_t i, new_data;
+       uint16_t crc;
+
+       crc = INIT;
+
+       for (; lenth> 0; lenth--)
+       {
+               new_data = REFIN? bit8_reverse(*(data++)) : (*(data++));
+               crc = crc ^ (new_data << 8);
+
+               for (i = 0; i < 8; i++)            
+               {
+                       if (crc & 0x8000)           
+                       crc = (crc << 1) ^ POLY;   
+                       else                          
+                       crc <<= 1;                 
+               }
+       }
+
+       crc = REFOUT? bit16_reverse(crc) : crc;
+       crc ^= XOROUT;
+
+       return(crc);                   
+}
+ 
+uint32_t crc32_universal(uint8_t *data, uint32_t lenth, uint32_t POLY, uint32_t INIT, uint32_t XOROUT, bool REFIN, bool REFOUT)
+{
+       uint8_t i, new_data;
+       uint32_t crc;
+
+       crc = INIT;
+
+       for (; lenth> 0; lenth--)
+       {
+               new_data = REFIN? bit8_reverse(*(data++)) : (*(data++));
+               crc = crc ^ (new_data << 24);
+
+               for (i = 0; i < 8; i++)            
+               {
+                       if (crc & 0x80000000)           
+                       crc = (crc << 1) ^ POLY;   
+                       else                          
+                       crc <<= 1;                 
+               }
+       }
+
+       crc = REFOUT? bit32_reverse(crc) : crc;
+       crc ^= XOROUT;
+
+       return(crc);                   
+}
+#endif
+
+/*********************************************** TABLE CRC8 ***********************************************/
+#if(CRC8_BUILD)
+static const uint8_t crc8_table[256] = 
+{
+       0x00,0x91,0xE3,0x72,0x07,0x96,0xE4,0x75,0x0E,0x9F,0xED,0x7C,0x09,0x98,0xEA,0x7B,
+       0x1C,0x8D,0xFF,0x6E,0x1B,0x8A,0xF8,0x69,0x12,0x83,0xF1,0x60,0x15,0x84,0xF6,0x67,
+       0x38,0xA9,0xDB,0x4A,0x3F,0xAE,0xDC,0x4D,0x36,0xA7,0xD5,0x44,0x31,0xA0,0xD2,0x43,
+       0x24,0xB5,0xC7,0x56,0x23,0xB2,0xC0,0x51,0x2A,0xBB,0xC9,0x58,0x2D,0xBC,0xCE,0x5F,
+       0x70,0xE1,0x93,0x02,0x77,0xE6,0x94,0x05,0x7E,0xEF,0x9D,0x0C,0x79,0xE8,0x9A,0x0B,
+       0x6C,0xFD,0x8F,0x1E,0x6B,0xFA,0x88,0x19,0x62,0xF3,0x81,0x10,0x65,0xF4,0x86,0x17,
+       0x48,0xD9,0xAB,0x3A,0x4F,0xDE,0xAC,0x3D,0x46,0xD7,0xA5,0x34,0x41,0xD0,0xA2,0x33,
+       0x54,0xC5,0xB7,0x26,0x53,0xC2,0xB0,0x21,0x5A,0xCB,0xB9,0x28,0x5D,0xCC,0xBE,0x2F,
+       0xE0,0x71,0x03,0x92,0xE7,0x76,0x04,0x95,0xEE,0x7F,0x0D,0x9C,0xE9,0x78,0x0A,0x9B,
+       0xFC,0x6D,0x1F,0x8E,0xFB,0x6A,0x18,0x89,0xF2,0x63,0x11,0x80,0xF5,0x64,0x16,0x87,
+       0xD8,0x49,0x3B,0xAA,0xDF,0x4E,0x3C,0xAD,0xD6,0x47,0x35,0xA4,0xD1,0x40,0x32,0xA3,
+       0xC4,0x55,0x27,0xB6,0xC3,0x52,0x20,0xB1,0xCA,0x5B,0x29,0xB8,0xCD,0x5C,0x2E,0xBF,
+       0x90,0x01,0x73,0xE2,0x97,0x06,0x74,0xE5,0x9E,0x0F,0x7D,0xEC,0x99,0x08,0x7A,0xEB,
+       0x8C,0x1D,0x6F,0xFE,0x8B,0x1A,0x68,0xF9,0x82,0x13,0x61,0xF0,0x85,0x14,0x66,0xF7,
+       0xA8,0x39,0x4B,0xDA,0xAF,0x3E,0x4C,0xDD,0xA6,0x37,0x45,0xD4,0xA1,0x30,0x42,0xD3,
+       0xB4,0x25,0x57,0xC6,0xB3,0x22,0x50,0xC1,0xBA,0x2B,0x59,0xC8,0xBD,0x2C,0x5E,0xCF,
+};
+
+uint8_t Crc8_ROHC_Cal(uint8_t* data, uint32_t len)
+{
+       unsigned char crc8 = 0xff;
+    
+    while(len--) 
+    {
+        crc8 = crc8_table[(crc8 ^ *data++) & 0xff];
+    }
+    // ESP_LOGI(CHECKCRC_TAG, "Crc8_ROHC_Cal %x bytes:", crc8);
+    return crc8;
+}
+#endif
+/*********************************************** TABLE CRC32 ***********************************************/
+#if(CRC16_BUILD)
+static const uint16_t crc16_table[256] = 
+{
+    0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,
+    0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,
+    0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,
+    0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,
+    0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,
+    0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,
+    0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,
+    0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,
+    0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,
+    0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,
+    0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,
+    0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,
+    0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,
+    0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,
+    0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,
+    0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,
+    0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,
+    0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,
+    0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,
+    0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,
+    0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,
+    0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,
+    0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,
+    0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,
+    0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,
+    0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,
+    0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,
+    0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,
+    0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,
+    0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,
+    0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,
+    0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040,
+};
+
+uint16_t Crc16_Modbus_Cal(uint8_t* data, uint32_t len)
+{
+    uint16_t crc16 = 0xFFFF;
+    
+    for (uint32_t i = 0; i < len; i++)
+    {
+        crc16 = (crc16 >> 8) ^ crc16_table[(crc16 & 0xFF) ^ *data++];
+    }
+    
+    return crc16;
+}
+#endif
+/*********************************************** TABLE CRC32 ***********************************************/
+#if(CRC32_BUILD)
+static const uint32_t crc32_table[256] = 
+{
+       0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL, 0x076DC419L,
+    0x706AF48FL, 0xE963A535L, 0x9E6495A3L, 0x0EDB8832L, 0x79DCB8A4L,
+    0xE0D5E91EL, 0x97D2D988L, 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L,
+    0x90BF1D91L, 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL,
+    0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L, 0x136C9856L,
+    0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL, 0x14015C4FL, 0x63066CD9L,
+    0xFA0F3D63L, 0x8D080DF5L, 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L,
+    0xA2677172L, 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL,
+    0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L, 0x32D86CE3L,
+    0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L, 0x26D930ACL, 0x51DE003AL,
+    0xC8D75180L, 0xBFD06116L, 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L,
+    0xB8BDA50FL, 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L,
+    0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL, 0x76DC4190L,
+    0x01DB7106L, 0x98D220BCL, 0xEFD5102AL, 0x71B18589L, 0x06B6B51FL,
+    0x9FBFE4A5L, 0xE8B8D433L, 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL,
+    0xE10E9818L, 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L,
+    0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL, 0x6C0695EDL,
+    0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L, 0x65B0D9C6L, 0x12B7E950L,
+    0x8BBEB8EAL, 0xFCB9887CL, 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L,
+    0xFBD44C65L, 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L,
+    0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL, 0x4369E96AL,
+    0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L, 0x44042D73L, 0x33031DE5L,
+    0xAA0A4C5FL, 0xDD0D7CC9L, 0x5005713CL, 0x270241AAL, 0xBE0B1010L,
+    0xC90C2086L, 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL,
+    0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L, 0x59B33D17L,
+    0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL, 0xEDB88320L, 0x9ABFB3B6L,
+    0x03B6E20CL, 0x74B1D29AL, 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L,
+    0x73DC1683L, 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L,
+    0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L, 0xF00F9344L,
+    0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL, 0xF762575DL, 0x806567CBL,
+    0x196C3671L, 0x6E6B06E7L, 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL,
+    0x67DD4ACCL, 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L,
+    0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L, 0xD1BB67F1L,
+    0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL, 0xD80D2BDAL, 0xAF0A1B4CL,
+    0x36034AF6L, 0x41047A60L, 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL,
+    0x4669BE79L, 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L,
+    0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL, 0xC5BA3BBEL,
+    0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L, 0xC2D7FFA7L, 0xB5D0CF31L,
+    0x2CD99E8BL, 0x5BDEAE1DL, 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL,
+    0x026D930AL, 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L,
+    0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L, 0x92D28E9BL,
+    0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L, 0x86D3D2D4L, 0xF1D4E242L,
+    0x68DDB3F8L, 0x1FDA836EL, 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L,
+    0x18B74777L, 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL,
+    0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L, 0xA00AE278L,
+    0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L, 0xA7672661L, 0xD06016F7L,
+    0x4969474DL, 0x3E6E77DBL, 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L,
+    0x37D83BF0L, 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L,
+    0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L, 0xBAD03605L,
+    0xCDD70693L, 0x54DE5729L, 0x23D967BFL, 0xB3667A2EL, 0xC4614AB8L,
+    0x5D681B02L, 0x2A6F2B94L, 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL,
+    0x2D02EF8DL
+};
+
+void CRC32_Init(CRC32_CTX_T *ctx)
+{
+       ctx->crc = 0xFFFFFFFF;
+}
+
+void CRC32_Update(CRC32_CTX_T *ctx, uint8_t* data, uint32_t len)
+{
+       for (uint32_t i = 0; i < len; i++)
+       {
+               ctx->crc = (ctx->crc >> 8) ^ crc32_table[(ctx->crc & 0xFF) ^ *data++];
+       }
+}
+ 
+uint32_t CRC32_Final(CRC32_CTX_T *ctx)
+{
+       return (ctx->crc & 0xFFFFFFFF);
+}
+
+uint32_t Crc32_JAMCRC_Cal(uint8_t* data, uint32_t len)
+{
+       uint64_t crc32 = 0xFFFFFFFF;
+       for (uint32_t i = 0; i < len; i++)
+       {
+               crc32 = (crc32 >> 8) ^ crc32_table[(crc32 & 0xFF) ^ *data++];
+       }
+       return crc32;
+}
+uint32_t Crc32_JAMCRC_Cal_Continue(uint32_t crc, const uint8_t *data, uint32_t len)
+{
+    for (uint32_t i = 0; i < len; i++)
+    {
+        crc = (crc >> 8) ^ crc32_table[(crc ^ data[i]) & 0xFF];
+    }
+    return crc;
+}
+#endif
+
diff --git a/main/crc.h b/main/crc.h
new file mode 100644 (file)
index 0000000..9d4fdfe
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef _CRC_H_
+#define _CRC_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#if (0)
+#define CRC8_Cal(x, y)                        crc8_universal(x, y, 0x07, 0x00, 0x00, false, false)
+#define CRC8_ITU_Cal(x, y)                    crc8_universal(x, y, 0x07, 0x00, 0x55, false, false)
+#define CRC8_ROHC_Cal(x, y)                   crc8_universal(x, y, 0x07, 0xFF, 0x00, true, true)
+#define CRC8_Maxim_Cal(x, y)                  crc8_universal(x, y, 0x31, 0x00, 0x00, true, true)
+#define CRC16_IBM_Cal(x, y)                   crc16_universal(x, y, 0x8005, 0x0000, 0x0000, true, true)
+#define CRC16_Maxim_Cal(x, y)                 crc16_universal(x, y, 0x8005, 0x0000, 0xFFFF, true, true)
+#define CRC16_USB_Cal(x, y)                   crc16_universal(x, y, 0x8005, 0xFFFF, 0xFFFF, true, true)
+#define CRC16_Modbus_Cal(x, y)                crc16_universal(x, y, 0x8005, 0xFFFF, 0x0000, true, true)
+#define CRC16_CCITT_Cal(x, y)                 crc16_universal(x, y, 0x1021, 0x0000, 0x0000, true, true)
+#define CRC16_CCITT_False_Cal(x, y)           crc16_universal(x, y, 0x1021, 0xFFFF, 0x0000, false, false)
+#define CRC16_X25_Cal(x, y)                   crc16_universal(x, y, 0x1021, 0xFFFF, 0xFFFF, true, true)
+#define CRC16_Xmodem_Cal(x, y)                crc16_universal(x, y, 0x1021, 0x0000, 0x0000, false, false)
+#define CRC16_DNP_Cal(x, y)                   crc16_universal(x, y, 0x3D65, 0x0000, 0xFFFF, true, true)
+#define CRC32_Cal(x, y)                       crc32_universal(x, y, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, true, true)
+#define CRC32_MPEG2_Cal(x, y)                 crc32_universal(x, y, 0x04C11DB7, 0xFFFFFFFF, 0x00000000, false, false)
+
+/**
+  * @brief 计算CRC通用算法
+  * @param data 数据地址
+  * @param lenth 数据长度
+  * @param POLY 生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7
+  * @param INIT 这是算法开始时寄存器(crc)的初始化预置值,十六进制表示
+  * @param XOROUT 计算结果与此参数异或后得到最终的CRC值
+  * @param REFIN 待测数据的每个字节是否按位反转,True或False
+  * @param REFOUT 在计算后之后,异或输出之前,整个数据是否按位反转,True或False
+  */
+uint8_t crc8_universal(uint8_t *data, uint32_t lenth, uint8_t POLY, uint8_t INIT, \
+               uint8_t XOROUT, bool REFIN, bool REFOUT);
+
+uint16_t crc16_universal(uint8_t *data, uint32_t lenth, uint16_t POLY, uint16_t INIT, \
+               uint16_t XOROUT, bool REFIN, bool REFOUT);
+
+uint32_t crc32_universal(uint8_t *data, uint32_t lenth, uint32_t POLY, uint32_t INIT, \
+               uint32_t XOROUT, bool REFIN, bool REFOUT);
+#endif
+
+
+#define CRC8_BUILD             1
+#define CRC16_BUILD            1
+#define CRC32_BUILD            1
+
+
+uint8_t Crc8_ROHC_Cal(uint8_t* data, uint32_t len);
+
+uint16_t Crc16_Modbus_Cal(uint8_t* data, uint32_t len);
+
+typedef struct
+{
+    uint64_t crc;
+}CRC32_CTX_T; // JAMCRC
+
+void CRC32_Init(CRC32_CTX_T *ctx);
+void CRC32_Update(CRC32_CTX_T *ctx, uint8_t* data, uint32_t len);
+uint32_t CRC32_Final(CRC32_CTX_T *ctx);
+uint32_t Crc32_JAMCRC_Cal(uint8_t* data, uint32_t len);
+
+uint32_t Crc32_JAMCRC_Cal_Continue(uint32_t crc, const uint8_t *data, uint32_t len);
+#endif
diff --git a/main/gap.c b/main/gap.c
new file mode 100644 (file)
index 0000000..f537033
--- /dev/null
@@ -0,0 +1,368 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Unlicense OR CC0-1.0
+ */
+/* Includes */
+#include "project_common.h"
+#include "ble.h"
+#if ENABLE_BLE_FUNC
+static const char *GAP_TAG = "gap";
+uint16_t ble_mtu_max = 23; // 默认MTU为23字节,实际可用为20字节
+static bool ble_advertising_enabled = true; // 广播开关
+
+/* Private function declarations */
+inline static void format_addr(char *addr_str, uint8_t addr[]);
+static void print_conn_desc(struct ble_gap_conn_desc *desc);
+
+static int gap_event_handler(struct ble_gap_event *event, void *arg);
+
+
+
+/* Private variables */
+static uint8_t own_addr_type = 0;
+static uint8_t addr_val[6] = {0};
+uint8_t adv_vendor_data[31] = {0};
+uint8_t adv_vendor_len = 0;
+
+/* Private functions */
+inline static void format_addr(char *addr_str, uint8_t addr[]) {
+    sprintf(addr_str, "%02X:%02X:%02X:%02X:%02X:%02X", addr[0], addr[1],
+            addr[2], addr[3], addr[4], addr[5]);
+}
+
+static void print_conn_desc(struct ble_gap_conn_desc *desc) {
+    /* Local variables */
+    char addr_str[18] = {0};
+
+    /* Connection handle */
+    ESP_LOGI(GAP_TAG, "connection handle: %d", desc->conn_handle);
+
+    /* Local ID address */
+    format_addr(addr_str, desc->our_id_addr.val);
+    ESP_LOGI(GAP_TAG, "device id address: type=%d, value=%s",
+             desc->our_id_addr.type, addr_str);
+
+    /* Peer ID address */
+    format_addr(addr_str, desc->peer_id_addr.val);
+    ESP_LOGI(GAP_TAG, "peer id address: type=%d, value=%s", desc->peer_id_addr.type,
+             addr_str);
+
+    /* Connection info */
+    ESP_LOGI(GAP_TAG,
+             "conn_itvl=%d, conn_latency=%d, supervision_timeout=%d, "
+             "encrypted=%d, authenticated=%d, bonded=%d\n",
+             desc->conn_itvl, desc->conn_latency, desc->supervision_timeout,
+             desc->sec_state.encrypted, desc->sec_state.authenticated,
+             desc->sec_state.bonded);
+}
+
+void start_advertising(void)
+{
+    
+    /* Local variables */
+    int rc = 0;
+    // const char *name;
+    struct ble_hs_adv_fields adv_fields = {0};
+    struct ble_hs_adv_fields rsp_fields = {0};
+    struct ble_gap_adv_params adv_params = {0};
+    memset(&adv_fields, 0, sizeof(adv_fields));
+    memset(&rsp_fields, 0, sizeof(rsp_fields));
+    memset(&adv_params, 0, sizeof(adv_params));
+    /* Set advertising flags */
+    adv_fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP;
+    adv_vendor_len=0;
+    *(uint16_t*)&adv_vendor_data[0] = 0xFFFF; // BLE默认厂商字段前2字节为蓝牙联盟成员厂商ID,因此固定2个字节0xFFFF
+    adv_vendor_len+=2;
+    *(uint16_t*)&adv_vendor_data[2] = common_setting.mcu_info.vid;
+    adv_vendor_len+=2;
+    *(uint16_t*)&adv_vendor_data[4] = common_setting.mcu_info.pid;
+    adv_vendor_len+=2;
+    uint8_t product_name_len = 0;
+    product_name_len = common_setting.mcu_info.product_name_len;
+    if(common_setting.mcu_info.product_name_len > PRODUCT_NAME_MAX_LEN)
+    {
+        product_name_len =PRODUCT_NAME_MAX_LEN;
+    }
+    adv_vendor_len=adv_vendor_len+product_name_len;
+    memcpy(&adv_vendor_data[6], common_setting.mcu_info.product_name, product_name_len);
+
+    adv_fields.mfg_data = adv_vendor_data;
+    ESP_LOGE(GAP_TAG, "advertising data,len: %d", adv_vendor_len);
+    if(adv_vendor_len > 31)
+    {
+        adv_vendor_len=31;
+    }
+    adv_fields.mfg_data_len = adv_vendor_len;
+
+    /* Set device name */
+    // name = ble_svc_gap_device_name();
+    // adv_fields.name = (uint8_t *)name;
+    // adv_fields.name_len = strlen(name);
+    // adv_fields.name_is_complete = 1;
+
+    // /* Set device tx power */
+    // adv_fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
+    // adv_fields.tx_pwr_lvl_is_present = 1;
+
+    // /* Set device appearance */
+    // adv_fields.appearance = BLE_GAP_APPEARANCE_GENERIC_TAG;
+    // adv_fields.appearance_is_present = 1;
+
+    // /* Set device LE role */
+    // adv_fields.le_role = BLE_GAP_LE_ROLE_PERIPHERAL;
+    // adv_fields.le_role_is_present = 1;
+
+    /* Set advertiement fields */
+    rc = ble_gap_adv_set_fields(&adv_fields);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "failed to set advertising data, error code: %d", rc);
+        return;
+    }
+
+    rsp_fields.flags = BLE_HS_ADV_F_DISC_GEN | BLE_HS_ADV_F_BREDR_UNSUP;
+
+    rsp_fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
+    rsp_fields.tx_pwr_lvl_is_present = 1;
+
+    ble_uuid16_t uuids = BLE_UUID16_INIT(GATT_UUID_COMM_0);
+    rsp_fields.uuids16 = &uuids;
+    rsp_fields.num_uuids16 = 1;
+    rsp_fields.uuids16_is_complete = 1;
+
+    // /* Set device address */
+    // rsp_fields.device_addr = addr_val;
+    // rsp_fields.device_addr_type = own_addr_type;
+    // rsp_fields.device_addr_is_present = 1;
+
+    // /* Set URI */
+    // rsp_fields.uri = esp_uri;
+    // rsp_fields.uri_len = sizeof(esp_uri);
+
+    // /* Set advertising interval */
+    // rsp_fields.adv_itvl = BLE_GAP_ADV_ITVL_MS(500);
+    // rsp_fields.adv_itvl_is_present = 1;
+
+    /* Set scan response fields */
+    rc = ble_gap_adv_rsp_set_fields(&rsp_fields);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "failed to set scan response data, error code: %d", rc);
+        return;
+    }
+
+    /* Set non-connetable and general discoverable mode to be a beacon */
+    adv_params.conn_mode = BLE_GAP_CONN_MODE_UND;
+    adv_params.disc_mode = BLE_GAP_DISC_MODE_GEN;
+
+    /* Set advertising interval */
+    adv_params.itvl_min = BLE_GAP_ADV_ITVL_MS(500);
+    adv_params.itvl_max = BLE_GAP_ADV_ITVL_MS(510);
+
+    /* Start advertising */
+    if (!ble_advertising_enabled) {
+        ESP_LOGI(GAP_TAG, "advertising disabled by flag, skip start");
+        return;
+    }
+
+    rc = ble_gap_adv_start(own_addr_type, NULL, BLE_HS_FOREVER, &adv_params,
+                           gap_event_handler, NULL);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "failed to start advertising, error code: %d", rc);
+        return;
+    }
+    ESP_LOGI(GAP_TAG, "advertising started!");
+}
+
+/*
+ * NimBLE applies an event-driven model to keep GAP service going
+ * gap_event_handler is a callback function registered when calling
+ * ble_gap_adv_start API and called when a GAP event arrives
+ */
+static int gap_event_handler(struct ble_gap_event *event, void *arg) {
+    /* Local variables */
+    int rc = 0;
+    struct ble_gap_conn_desc desc;
+
+    /* Handle different GAP event */
+    switch (event->type) {
+
+    /* Connect event */
+    case BLE_GAP_EVENT_CONNECT:
+        /* A new connection was established or a connection attempt failed. */
+        ESP_LOGI(GAP_TAG, "connection %s; status=%d",
+                 event->connect.status == 0 ? "established" : "failed",
+                 event->connect.status);
+
+        /* Connection succeeded */
+        if (event->connect.status == 0)
+        {
+            /* Check connection handle */
+            rc = ble_gap_conn_find(event->connect.conn_handle, &desc);
+            if (rc != 0)
+            {
+                ESP_LOGE(GAP_TAG,
+                         "failed to find connection by handle, error code: %d",
+                         rc);
+                return rc;
+            }
+
+            /* Print connection descriptor */
+            print_conn_desc(&desc);
+
+            /* Try to update connection parameters */
+            struct ble_gap_upd_params params = {.itvl_min = desc.conn_itvl,
+                                                .itvl_max = desc.conn_itvl,
+                                                .latency = 3,
+                                                .supervision_timeout =
+                                                    desc.supervision_timeout};
+            rc = ble_gap_update_params(event->connect.conn_handle, &params);
+            if (rc != 0)
+            {
+                ESP_LOGE(
+                    GAP_TAG,
+                    "failed to update connection parameters, error code: %d",
+                    rc);
+                return rc;
+            }
+            common_setting.ble_enable_tick = 0;
+            common_setting.ble_status.ble_state = 2;
+        }
+        /* Connection failed, restart advertising if allowed */
+        else
+        {
+            if (ble_advertising_enabled) {
+                start_advertising();
+            }
+        }
+        return rc;
+
+    /* Disconnect event */
+    case BLE_GAP_EVENT_DISCONNECT:
+        /* A connection was terminated, print connection descriptor */
+        ESP_LOGI(GAP_TAG, " reason=%d",
+                 event->disconnect.reason);
+        common_setting.ble_status.ble_state=0;
+        /* Restart advertising if allowed */
+        if (ble_advertising_enabled) {
+            start_advertising();
+        }
+        return rc;
+
+    /* Connection parameters update event */
+    case BLE_GAP_EVENT_CONN_UPDATE:
+        /* The central has updated the connection parameters. */
+        ESP_LOGI(GAP_TAG, "connection updated; status=%d",
+                 event->conn_update.status);
+
+        /* Print connection descriptor */
+        rc = ble_gap_conn_find(event->conn_update.conn_handle, &desc);
+        if (rc != 0) {
+            ESP_LOGE(GAP_TAG, "failed to find connection by handle, error code: %d",
+                     rc);
+            return rc;
+        }
+        print_conn_desc(&desc);
+        return rc;
+
+    /* Advertising complete event */
+    case BLE_GAP_EVENT_ADV_COMPLETE:
+        /* Advertising completed */
+        ESP_LOGI(GAP_TAG, "advertise complete; reason=%d",
+                 event->adv_complete.reason);
+        if (ble_advertising_enabled) {
+            start_advertising();
+        }
+        return rc;
+
+    /* Notification sent event */
+    case BLE_GAP_EVENT_NOTIFY_TX:
+        if ((event->notify_tx.status != 0) &&
+            (event->notify_tx.status != BLE_HS_EDONE)) {
+            /* Print notification info on error */
+            ESP_LOGI(GAP_TAG,
+                     "notify event; conn_handle=%d attr_handle=%d "
+                     "status=%d is_indication=%d",
+                     event->notify_tx.conn_handle, event->notify_tx.attr_handle,
+                     event->notify_tx.status, event->notify_tx.indication);
+        }
+        return rc;
+
+    /* Subscribe event */
+    case BLE_GAP_EVENT_SUBSCRIBE:
+        /* Print subscription info to log */
+        ESP_LOGI(GAP_TAG,
+                 "subscribe event; conn_handle=%d attr_handle=%d "
+                 "reason=%d prevn=%d curn=%d previ=%d curi=%d",
+                 event->subscribe.conn_handle, event->subscribe.attr_handle,
+                 event->subscribe.reason, event->subscribe.prev_notify,
+                 event->subscribe.cur_notify, event->subscribe.prev_indicate,
+                 event->subscribe.cur_indicate);
+
+        /* GATT subscribe event callback */
+        gatt_svr_subscribe_cb(event);
+        return rc;
+
+    /* MTU update event */
+    case BLE_GAP_EVENT_MTU:
+        /* Print MTU update info to log */
+        ESP_LOGI(GAP_TAG, "mtu update event; conn_handle=%d cid=%d mtu=%d",
+                 event->mtu.conn_handle, event->mtu.channel_id,
+                 event->mtu.value);
+        ble_mtu_max = event->mtu.value;
+        return rc;
+    }
+
+    return rc;
+}
+
+
+/* Public functions */
+void adv_init(void) {
+    /* Local variables */
+    int rc = 0;
+    char addr_str[18] = {0};
+
+    /* Make sure we have proper BT identity address set (random preferred) */
+    rc = ble_hs_util_ensure_addr(0);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "device does not have any available bt address!");
+        return;
+    }
+
+    /* Figure out BT address to use while advertising (no privacy for now) */
+    rc = ble_hs_id_infer_auto(0, &own_addr_type);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "failed to infer address type, error code: %d", rc);
+        return;
+    }
+
+    /* Printing ADDR */
+    rc = ble_hs_id_copy_addr(own_addr_type, addr_val, NULL);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "failed to copy device address, error code: %d", rc);
+        return;
+    }
+    format_addr(addr_str, addr_val);
+    ESP_LOGI(GAP_TAG, "device address: %s", addr_str);
+
+    /* Start advertising. */
+    start_advertising();
+}
+
+int gap_init(void) {
+    /* Local variables */
+    int rc = 0;
+
+    /* Call NimBLE GAP initialization API */
+    ble_svc_gap_init();
+
+    /* Set GAP device name */
+    rc = ble_svc_gap_device_name_set(DEVICE_NAME);
+    if (rc != 0) {
+        ESP_LOGE(GAP_TAG, "failed to set device name to %s, error code: %d",
+                 DEVICE_NAME, rc);
+        return rc;
+    }
+    return rc;
+}
+#endif
diff --git a/main/gap.h b/main/gap.h
new file mode 100644 (file)
index 0000000..f5bf4cc
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Unlicense OR CC0-1.0
+ */
+#ifndef GAP_SVC_H
+#define GAP_SVC_H
+#include "ble.h"
+#if ENABLE_BLE_FUNC
+/* Includes */
+/* NimBLE GAP APIs */
+#include "host/ble_gap.h"
+#include "services/gap/ble_svc_gap.h"
+
+/* Defines */
+#define BLE_GAP_APPEARANCE_GENERIC_TAG 0x0200
+#define BLE_GAP_URI_PREFIX_HTTPS 0x17
+#define BLE_GAP_LE_ROLE_PERIPHERAL 0x00
+
+/* Public function declarations */
+void start_advertising(void);
+void adv_init(void);
+int gap_init(void);
+#endif
+#endif // GAP_SVC_H
diff --git a/main/gatt_svc.c b/main/gatt_svc.c
new file mode 100644 (file)
index 0000000..d0ec6cb
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Unlicense OR CC0-1.0
+ */
+/* Includes */
+#include "project_common.h"
+#include "ble.h"
+#if ENABLE_BLE_FUNC
+static const char *GATT_TAG = "gatt";
+
+/* Private function declarations */
+static int gatt_svc_access(uint16_t conn_handle, uint16_t attr_handle,
+                                struct ble_gatt_access_ctxt *ctxt, void *arg);
+
+/* Private variables */
+
+/* GATT_SERVER_COMM 0 */
+static uint16_t comm_1_chr_val_handle;
+// static uint8_t comm_1_chr_val;
+
+static uint16_t comm_2_chr_val_handle;
+static BLE_MESSAGE_T ble_notify = {0};
+static uint16_t comm_2_chr_conn_handle = 0;
+static bool comm_2_chr_conn_handle_inited = false;
+static bool comm_2_indicate_status = false;
+// static bool comm_2_notify_status = false;
+
+/* GATT services table */
+static const struct ble_gatt_svc_def gatt_svr_svcs[] = 
+{
+    /* Common service */
+    {
+        .type = BLE_GATT_SVC_TYPE_PRIMARY,
+        .uuid = BLE_UUID16_DECLARE(GATT_UUID_COMM_0),
+        .characteristics =
+            (struct ble_gatt_chr_def[]){
+                                            {
+                                                .uuid = BLE_UUID16_DECLARE(GATT_UUID_COMM_1),
+                                                .access_cb = gatt_svc_access,
+                                                .flags = BLE_GATT_CHR_F_WRITE|BLE_GATT_CHR_F_WRITE_NO_RSP,
+                                                .val_handle = &comm_1_chr_val_handle,
+                                            },
+
+                                            {
+                                                .uuid = BLE_UUID16_DECLARE(GATT_UUID_COMM_2),
+                                                .access_cb = gatt_svc_access,
+                                                .flags = BLE_GATT_CHR_F_NOTIFY,
+                                                .val_handle = &comm_2_chr_val_handle,
+                                            }, 
+
+                                            {
+                                                0
+                                            },
+                                        },
+    },
+
+    {
+        0, /* No more services. */
+    },
+};
+
+/* Private functions */
+static int gatt_svc_access(uint16_t conn_handle, uint16_t attr_handle,
+                struct ble_gatt_access_ctxt *ctxt, void *arg)
+{
+    // const ble_uuid_t *uuid;
+    int rc = 0;
+
+    switch (ctxt->op) {
+    case BLE_GATT_ACCESS_OP_READ_CHR:
+        if (conn_handle != BLE_HS_CONN_HANDLE_NONE) {
+            MODLOG_DFLT(INFO, "Characteristic read; conn_handle=%d attr_handle=%d\n",
+                        conn_handle, attr_handle);
+        } else {
+            MODLOG_DFLT(INFO, "Characteristic read by NimBLE stack; attr_handle=%d\n",
+                        attr_handle);
+        }
+        // uuid = ctxt->chr->uuid;
+        if(attr_handle == comm_2_chr_val_handle)
+        {
+            // MODLOG_DFLT(INFO, "read comm_2_chr_val_handle\n");
+            rc = os_mbuf_append(ctxt->om, ble_notify.data, ble_notify.length);
+            return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;
+        }
+        goto unknown;
+
+    case BLE_GATT_ACCESS_OP_WRITE_CHR: //接受上位机下发的数据
+        if (conn_handle != BLE_HS_CONN_HANDLE_NONE) {
+            MODLOG_DFLT(INFO, "Characteristic write; conn_handle=%d attr_handle=%d",
+                        conn_handle, attr_handle);
+        } else {
+            MODLOG_DFLT(INFO, "Characteristic write by NimBLE stack; attr_handle=%d",
+                        attr_handle);
+        }
+        // uuid = ctxt->chr->uuid;
+        if (attr_handle == comm_1_chr_val_handle) {
+            // rc = gatt_svr_write(ctxt->om,
+            //                     sizeof(comm_1_chr_val),
+            //                     sizeof(comm_1_chr_val),
+            //                     &comm_1_chr_val, NULL);
+            // ble_gatts_chr_updated(attr_handle);
+            // MODLOG_DFLT(INFO, "Notification/Indication scheduled for "
+            //             "all subscribed peers.\n");
+            ESP_LOGI(GATT_TAG,"write %d, %d, %d:\n", ctxt->om->om_flags, ctxt->om->om_pkthdr_len, ctxt->om->om_len);
+            for(size_t i=0;i<20;i++)
+            {
+                ESP_LOGI(GATT_TAG,"%02x ", ctxt->om->om_data[i]);
+            }
+            
+
+            // memset(&ble_notify,0x00,sizeof(BLE_MESSAGE_T));
+            // if(ctxt->om->om_len <= sizeof(ble_notify.data))
+            // {
+            //     ble_notify.length = ctxt->om->om_len;
+            //     memcpy(ble_notify.data, ctxt->om->om_data, ctxt->om->om_len);
+            //     // xQueueSend(ble_notify_queue_handle, &ble_message_temp, 0); // 回传测试
+            //     xQueueSend(ble_write_queue_handle, &ble_notify, 0);
+            // }
+            static BLE_MESSAGE_T ble_message_temp = {0};
+            memset(&ble_message_temp,0x00,sizeof(BLE_MESSAGE_T));
+            if(ctxt->om->om_len <= sizeof(ble_message_temp.data))
+            {
+                ble_message_temp.length = ctxt->om->om_len;
+                memcpy(ble_message_temp.data, ctxt->om->om_data, ctxt->om->om_len);
+                // xQueueSend(ble_notify_queue_handle, &ble_message_temp, 0); // 回传测试
+                xQueueSend(ble_write_queue_handle, &ble_message_temp, 0);
+            }
+            return rc;
+        }
+        goto unknown;
+
+    // case BLE_GATT_ACCESS_OP_READ_DSC:
+    //     if (conn_handle != BLE_HS_CONN_HANDLE_NONE) {
+    //         MODLOG_DFLT(INFO, "Descriptor read; conn_handle=%d attr_handle=%d\n",
+    //                     conn_handle, attr_handle);
+    //     } else {
+    //         MODLOG_DFLT(INFO, "Descriptor read by NimBLE stack; attr_handle=%d\n",
+    //                     attr_handle);
+    //     }
+    //     // uuid = ctxt->dsc->uuid;
+    //     // if (ble_uuid_cmp(uuid, &gatt_svr_dsc_uuid.u) == 0) {
+    //     //     rc = os_mbuf_append(ctxt->om,
+    //     //                         &gatt_svr_dsc_val,
+    //     //                         sizeof(gatt_svr_chr_val));
+    //     //     return rc == 0 ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES;
+    //     // }
+    //     goto unknown;
+
+    // case BLE_GATT_ACCESS_OP_WRITE_DSC:
+    //     goto unknown;
+
+    default:
+        goto unknown;
+    }
+
+unknown:
+    /* Unknown characteristic/descriptor;
+     * The NimBLE host should not have called this function;
+     */
+    assert(0);
+    return BLE_ATT_ERR_UNLIKELY;
+}
+
+/* Public functions */
+void send_comm_2_indication(void)
+{
+    if (comm_2_indicate_status && comm_2_chr_conn_handle_inited)
+    {
+        // static uint32_t cnt_tick = 0;
+        // cnt_tick += 10;
+        // if(cnt_tick >= 2000)
+        // {
+        //     cnt_tick = 0;
+        //     static BLE_MESSAGE_T ble_temp = {0};
+        //     ble_temp.length = 256;
+        //     for(uint16_t i=0;i<sizeof(ble_temp.data);i++)
+        //     {
+        //         ble_temp.data[i] = (esp_random() & 0xFF);
+        //     }
+        //     xQueueSend(ble_notify_queue_handle, &ble_temp, 0);
+        // }
+
+        if(xQueueReceive(ble_notify_queue_handle, &ble_notify, 0) == pdTRUE)
+        {
+            ESP_LOGI(GATT_TAG, "ble send");
+            ESP_LOG_BUFFER_HEX(GATT_TAG, ble_notify.data, ble_notify.length);
+            ble_gatts_notify(comm_2_chr_conn_handle, comm_2_chr_val_handle);
+        }
+
+    }
+
+    // if (comm_2_notify_status && comm_2_chr_conn_handle_inited) {
+    //     ble_gatts_notify(comm_2_chr_conn_handle, comm_2_chr_val_handle);
+
+    //     for(uint16_t i=0;i<sizeof(comm_2_notify_data);i++)
+    //     {
+    //         comm_2_notify_data[i] = i;
+    //     }
+    // }
+}
+
+/*
+ *  Handle GATT attribute register events
+ *      - Service register event
+ *      - Characteristic register event
+ *      - Descriptor register event
+ */
+void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg) {
+    /* Local variables */
+    char buf[BLE_UUID_STR_LEN];
+
+    /* Handle GATT attributes register events */
+    switch (ctxt->op) {
+
+    /* Service register event */
+    case BLE_GATT_REGISTER_OP_SVC:
+        ESP_LOGD(GATT_TAG, "registered service %s with handle=%d",
+                 ble_uuid_to_str(ctxt->svc.svc_def->uuid, buf),
+                 ctxt->svc.handle);
+        break;
+
+    /* Characteristic register event */
+    case BLE_GATT_REGISTER_OP_CHR:
+        ESP_LOGD(GATT_TAG,
+                 "registering characteristic %s with "
+                 "def_handle=%d val_handle=%d",
+                 ble_uuid_to_str(ctxt->chr.chr_def->uuid, buf),
+                 ctxt->chr.def_handle, ctxt->chr.val_handle);
+        break;
+
+    /* Descriptor register event */
+    case BLE_GATT_REGISTER_OP_DSC:
+        ESP_LOGD(GATT_TAG, "registering descriptor %s with handle=%d",
+                 ble_uuid_to_str(ctxt->dsc.dsc_def->uuid, buf),
+                 ctxt->dsc.handle);
+        break;
+
+    /* Unknown event */
+    default:
+        assert(0);
+        break;
+    }
+}
+
+/*
+ *  GATT server subscribe event callback
+ *      1. Update heart rate subscription status
+ */
+
+void gatt_svr_subscribe_cb(struct ble_gap_event *event) {
+    /* Check connection handle */
+    // if (event->subscribe.conn_handle != BLE_HS_CONN_HANDLE_NONE) {
+    //     ESP_LOGI(GATT_TAG, "subscribe event; conn_handle=%d attr_handle=%d",
+    //              event->subscribe.conn_handle, event->subscribe.attr_handle);
+    // } else {
+    //     ESP_LOGI(GATT_TAG, "subscribe by nimble stack; attr_handle=%d",
+    //              event->subscribe.attr_handle);
+    // }
+
+    /* Check attribute handle */
+    if(event->subscribe.attr_handle == comm_2_chr_val_handle)
+    {
+        comm_2_chr_conn_handle = event->subscribe.conn_handle;
+        comm_2_chr_conn_handle_inited = true;
+        comm_2_indicate_status = event->subscribe.cur_notify;
+        // comm_2_notify_status = event->subscribe.cur_notify;
+    }
+}
+
+/*
+ *  GATT server initialization
+ *      1. Initialize GATT service
+ *      2. Update NimBLE host GATT services counter
+ *      3. Add GATT services to server
+ */
+int gatt_svc_init(void) {
+    /* Local variables */
+    int rc;
+
+    /* 1. GATT service initialization */
+    ble_svc_gatt_init();
+
+    /* 2. Update GATT services counter */
+    rc = ble_gatts_count_cfg(gatt_svr_svcs);
+    if (rc != 0) {
+        return rc;
+    }
+
+    /* 3. Add GATT services */
+    rc = ble_gatts_add_svcs(gatt_svr_svcs);
+    if (rc != 0) {
+        return rc;
+    }
+
+    return 0;
+}
+#endif
\ No newline at end of file
diff --git a/main/gatt_svc.h b/main/gatt_svc.h
new file mode 100644 (file)
index 0000000..d6e468b
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Unlicense OR CC0-1.0
+ */
+#ifndef GATT_SVR_H
+#define GATT_SVR_H
+#include "ble.h"
+#if ENABLE_BLE_FUNC
+/* Includes */
+/* NimBLE GATT APIs */
+#include "host/ble_gatt.h"
+#include "services/gatt/ble_svc_gatt.h"
+
+/* NimBLE GAP APIs */
+#include "host/ble_gap.h"
+
+/* Public function declarations */
+void send_comm_2_indication(void);
+
+void gatt_svr_register_cb(struct ble_gatt_register_ctxt *ctxt, void *arg);
+void gatt_svr_subscribe_cb(struct ble_gap_event *event);
+int gatt_svc_init(void);
+
+#endif // GATT_SVR_H
+#endif //
diff --git a/main/https_ota.c b/main/https_ota.c
new file mode 100644 (file)
index 0000000..9912503
--- /dev/null
@@ -0,0 +1,253 @@
+#include <string.h>
+#include <inttypes.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/event_groups.h"
+#include "esp_system.h"
+#include "esp_event.h"
+#include "esp_log.h"
+#include "esp_ota_ops.h"
+#include "esp_http_client.h"
+#include "esp_https_ota.h"
+#include "nvs.h"
+#include "nvs_flash.h"
+#include "protocol_examples_common.h"
+#include "https_ota.h"
+#include "project_common.h"
+#include "user_mqtt.h"
+
+#if (ENABLE_HTTPS_OTA_FUNC)
+static const char *TAG = "OTA";
+#if CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK
+#include "esp_efuse.h"
+#endif
+
+#if CONFIG_EXAMPLE_CONNECT_WIFI
+#include "esp_wifi.h"
+#endif
+#include "esp_crt_bundle.h"
+
+
+
+#define OTA_URL_SIZE 256
+#define OTA_HTTP_OTA   0 //是否使用http请求ota固件包
+#if OTA_HTTP_OTA
+#define HTTPS_OTA_STACK_SIZE   (8*1024)
+static const char *https_ota_url ="http://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/11/ssl_mutual_auth.bin";
+#else
+#define HTTPS_OTA_STACK_SIZE   (4*1024)
+static const char *https_ota_url ="https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/11/ssl_mutual_auth.bin";
+#endif
+//使用http请求还需要 配置表 ESP_HTTPS_OTA_ALLOW_HTTP = y ESP_TLS_INSECURE=y  ESP_TLS_SKIP_SERVER_CERT_VERIFY=y这三个都要打开
+/* Event handler for catching system events */
+
+static esp_err_t validate_image_header(esp_app_desc_t *new_app_info)
+{
+    return ESP_OK;
+    if (new_app_info == NULL) {
+        return ESP_ERR_INVALID_ARG;
+    }
+
+    const esp_partition_t *running = esp_ota_get_running_partition();
+    esp_app_desc_t running_app_info;
+    if (esp_ota_get_partition_description(running, &running_app_info) == ESP_OK) {
+        ESP_LOGI(TAG, "Running firmware version: %s", running_app_info.version);
+    }
+    ESP_LOGI(TAG, "Running firmware version: %s new_app_info->version:%s", running_app_info.version,new_app_info->version);
+#if 1
+    if (memcmp(new_app_info->version, running_app_info.version, sizeof(new_app_info->version)) == 0) {
+        ESP_LOGW(TAG, "Current running version is the same as a new. We will not continue the update.");
+        return ESP_FAIL;
+    }
+#endif
+
+#ifdef CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK
+    /**
+     * Secure version check from firmware image header prevents subsequent download and flash write of
+     * entire firmware image. However this is optional because it is also taken care in API
+     * esp_https_ota_finish at the end of OTA update procedure.
+     */
+    const uint32_t hw_sec_version = esp_efuse_read_secure_version();
+    if (new_app_info->secure_version < hw_sec_version) {
+        ESP_LOGW(TAG, "New firmware security version is less than eFuse programmed, %"PRIu32" < %"PRIu32, new_app_info->secure_version, hw_sec_version);
+        return ESP_FAIL;
+    }
+#endif
+
+    return ESP_OK;
+}
+
+static esp_err_t _http_client_init_cb(esp_http_client_handle_t http_client)
+{
+    esp_err_t err = ESP_OK;
+    /* Uncomment to add custom headers to HTTP request */
+    // err = esp_http_client_set_header(http_client, "Custom-Header", "Value");
+    return err;
+}
+
+//ota升级失败重复升级次数 连续三次都升级不成功不升级了
+static uint8_t retry_ota_num = 0;
+#define HTTPS_OTA_RETRY_NUM  4
+static void https_ota_task_cb(void *pvParameter)
+{
+    ESP_LOGI(TAG, "Starting Advanced OTA example");
+
+    esp_err_t ota_finish_err = ESP_OK;
+    esp_http_client_config_t config = {
+        .url = https_ota_url,
+        
+        .timeout_ms = 5000,
+        .keep_alive_enable = false,
+    };
+    #if (!OTA_HTTP_OTA)
+    config.crt_bundle_attach = esp_crt_bundle_attach;//需要访问https一定要加这句
+    #else
+    config.skip_cert_common_name_check = true;
+    #endif
+
+    esp_https_ota_config_t ota_config = {
+        .http_config = &config,
+        .http_client_init_cb = _http_client_init_cb, // Register a callback to be invoked after esp_http_client is initialized
+    };
+    #if (OTA_HTTP_OTA)
+    
+    ota_config.partial_http_download=true;
+    #endif
+
+    esp_https_ota_handle_t https_ota_handle = NULL;
+    esp_err_t err = esp_https_ota_begin(&ota_config, &https_ota_handle);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "ESP HTTPS OTA Begin failed");
+        xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+        vTaskDelete(NULL);
+    }else{
+        ESP_LOGI(TAG, "ESP HTTPS OTA Begin success");
+    }
+    
+    esp_app_desc_t app_desc;
+    err = esp_https_ota_get_img_desc(https_ota_handle, &app_desc);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "esp_https_ota_get_img_desc failed");
+        goto ota_end;
+    }
+    err = validate_image_header(&app_desc);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "image header verification failed");
+        goto ota_end;
+    }else{
+        ESP_LOGI(TAG, "image header verification success");
+    }
+    while (1) {
+        err = esp_https_ota_perform(https_ota_handle);
+        if (err != ESP_ERR_HTTPS_OTA_IN_PROGRESS) {
+            ESP_LOGI(TAG, "Image err: %d",err);
+            break;
+        }
+        // esp_https_ota_perform returns after every read operation which gives user the ability to
+        // monitor the status of OTA upgrade by calling esp_https_ota_get_image_len_read, which gives length of image
+        // data read so far.
+        ESP_LOGI(TAG, "Image bytes read: %d", esp_https_ota_get_image_len_read(https_ota_handle));
+    }
+
+    if (esp_https_ota_is_complete_data_received(https_ota_handle) != true) {
+        // the OTA image was not completely received and user can customise the response to this situation.
+        ESP_LOGI(TAG, "Complete data was not received. continue ota %d",common_setting.wifi_status.wifi_state);
+        
+        vTaskDelay(50 / portTICK_PERIOD_MS);
+        if(common_setting.wifi_status.wifi_state == 0)
+        {
+            retry_ota_num=0;
+            common_setting.https_ota_cfg.https_ota_start_flag=0;
+        }else{
+            xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+        }
+        
+        vTaskDelete(NULL);
+    } else {
+        ota_finish_err = esp_https_ota_finish(https_ota_handle);
+        if ((err == ESP_OK) && (ota_finish_err == ESP_OK)) {
+            ESP_LOGI(TAG, "ESP_HTTPS_OTA upgrade successful. Rebooting ...");
+            vTaskDelay(1000 / portTICK_PERIOD_MS);
+            esp_restart();
+        } else {
+            if (ota_finish_err == ESP_ERR_OTA_VALIDATE_FAILED) {
+                ESP_LOGI(TAG, "Image validation failed, image is corrupted");
+            }
+            ESP_LOGI(TAG, "ESP_HTTPS_OTA upgrade failed 0x%x", ota_finish_err);
+            vTaskDelay(50 / portTICK_PERIOD_MS);
+            xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+            vTaskDelete(NULL);
+        }
+    }
+
+ota_end:
+    ESP_LOGI(TAG, "ESP_HTTPS_OTA upgrade u11");
+    xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+    esp_https_ota_abort(https_ota_handle);
+    ESP_LOGI(TAG, "ESP_HTTPS_OTA upgrade failed");
+    vTaskDelete(NULL);
+}
+
+
+
+
+
+//ota版本校验 不一致需要升级 一直不需要升级ota
+uint8_t https_ota_version_check(void)
+{
+    return 1;
+
+}
+static uint8_t https_ota_close_fun_flag = 0; //ota升级的时候之关闭一次ble ,mqtt
+void https_ota_start(void)
+{
+    https_ota_close_fun_flag=0;
+    retry_ota_num=0;
+    xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+
+}
+//https_ota 需要关闭ble mqtt
+void https_ota_close_ble_mqtt(void)
+{
+    if(https_ota_close_fun_flag == 1)
+    {
+        return;
+    }
+    https_ota_close_fun_flag=1;
+    //关闭蓝牙
+    xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);
+    vTaskDelay(1000);
+    //关闭mqtt
+    xEventGroupSetBits(common_event_group, COMMON_MQTT_DISCONNECT_BIT);
+    vTaskDelay(1000);
+
+}
+void https_ota_task(void)
+{
+    retry_ota_num++;
+    if(retry_ota_num > HTTPS_OTA_RETRY_NUM){
+        common_setting.https_ota_cfg.https_ota_start_flag=0;
+        retry_ota_num=0;
+        return;
+    }
+    BaseType_t ret = xTaskCreate(&https_ota_task_cb, "https_ota_task", HTTPS_OTA_STACK_SIZE, NULL, 4, NULL);
+    if(ret !=pdPASS )
+    {
+        xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+        ESP_LOGI(TAG, "ESP_HTTPS_OTA https_ota_task failed\n");
+    }else{
+        ESP_LOGI(TAG, "ESP_HTTPS_OTA https_ota_task success\n");
+
+    }
+}
+void Https_Ota_Status_Check(void)
+{
+    if((xEventGroupWaitBits(common_event_group, COMMON_HTTPS_OTA_BIT, pdFALSE, pdFALSE, 0) & COMMON_HTTPS_OTA_BIT) != 0 && common_setting.ble_status.ble_state == 0 \
+    && common_setting.wifi_status.wifi_state == 1)
+    {
+        xEventGroupClearBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+        vTaskDelay(50 / portTICK_PERIOD_MS);
+        https_ota_task();
+    }
+}
+#endif
diff --git a/main/https_ota.h b/main/https_ota.h
new file mode 100644 (file)
index 0000000..a3985ba
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef _HTTPS_OTA_H_
+#define _HTTPS_OTA_H_
+#define ENABLE_HTTPS_OTA_FUNC          0 //是否开启HTTPS_OTA升级
+#if ENABLE_HTTPS_OTA_FUNC
+#include <stdint.h>
+#include <stdbool.h>
+void https_ota_task(void);
+void Https_Ota_Status_Check(void);
+uint8_t https_ota_version_check(void);
+void https_ota_start(void);
+void https_ota_close_ble_mqtt(void);
+#endif
+#endif
\ No newline at end of file
diff --git a/main/iap.c b/main/iap.c
new file mode 100644 (file)
index 0000000..f33445a
--- /dev/null
@@ -0,0 +1,397 @@
+#include "project_common.h"
+
+static const char *IAP_TAG = "IAP";
+
+static const esp_partition_t *update_partition = NULL;
+
+esp_ota_handle_t update_handle = 0;
+
+IAP_CMD_REPLY_T iap_cmd;
+IAP_CMD_REPLY_T iap_reply;
+
+int32_t iap_end_cnt = 0;
+
+uint8_t iap_auth = 0;
+
+static uint8_t iap_data[FLASH_SEC_SIZE];
+
+uint8_t Iap_Erase(uint32_t addr, uint32_t size)
+{
+    (void)addr;
+    (void)size;
+    update_partition = NULL;
+
+    update_handle = 0;
+    
+    
+    
+    // 获取要升级的分区
+    update_partition = esp_ota_get_next_update_partition(NULL);
+    if(update_partition == NULL)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+    ESP_LOGI(IAP_TAG, "update_partition subtype: %d, offset: 0x%x", update_partition->subtype, (unsigned int)update_partition->address);
+
+    // 开始并擦除
+    esp_err_t err = esp_ota_begin(update_partition, OTA_SIZE_UNKNOWN, &update_handle);
+    if (err != ESP_OK || update_handle == 0)
+    {
+        ESP_LOGE(IAP_TAG, "esp_ota_begin failed (%s)", esp_err_to_name(err));
+        return REPLY_STATUS_FAIL;
+    }
+    return REPLY_STATUS_OK;
+}
+
+uint8_t Iap_Write(uint32_t addr, uint8_t packet_size, uint8_t* data)
+{
+       if(update_handle == 0)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+
+    esp_err_t err = esp_ota_write_with_offset(update_handle, data, packet_size, addr);
+    if(err != ESP_OK)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+
+       return REPLY_STATUS_OK;
+}
+
+uint8_t Iap_Read(uint32_t addr, uint8_t packet_size, uint8_t* data)
+{
+       esp_err_t err = 0;
+       
+       //读取flash
+       err = esp_partition_read(update_partition, addr, data, packet_size);
+
+       if(err != 0)
+       {
+               ESP_LOGI(IAP_TAG, "user flash read err %d, offset:0x%08x, size:0x%x", err, (unsigned int)addr, packet_size);
+        return REPLY_STATUS_FAIL;
+       }
+       return REPLY_STATUS_OK;
+}
+
+uint32_t Iap_Check(uint32_t start_addr, uint32_t size, uint8_t *result)
+{
+    esp_err_t err = 0;
+       CRC32_CTX_T ctx = {0};
+       CRC32_Init(&ctx);
+       
+       uint32_t read_num = size/FLASH_SEC_SIZE + ((size%FLASH_SEC_SIZE) != 0);
+       uint32_t read_cnt = 0;
+       uint32_t remain = 0;
+       
+       memset(iap_data, 0x00, sizeof(iap_data));
+       
+    if(update_partition == NULL)
+    {
+        *result = 1;
+        return 0xFFFFFFFF;
+    }
+
+       for(read_cnt = 0;read_cnt<read_num;read_cnt++)
+       {
+               if(read_cnt+1 >= read_num)
+               {
+                       remain = size - (read_num-1)*FLASH_SEC_SIZE;
+               }
+               else
+               {
+                       remain = FLASH_SEC_SIZE;
+               }
+        err = esp_partition_read(update_partition, start_addr+read_cnt*FLASH_SEC_SIZE, iap_data, remain);
+               if(err != ESP_OK)
+        {
+            *result = 2;
+            return 0xFFFFFFFF;
+        }
+               CRC32_Update(&ctx, iap_data, remain);
+               // ESP_LOGI(IAP_TAG, "check_crc32:%d %d %08x\n", read_cnt, read_num, CRC32_Final(&ctx));
+       }
+       
+       uint32_t crc_result = CRC32_Final(&ctx);
+    *result = 0;
+       return crc_result;
+}
+
+uint8_t Iap_Verify(uint32_t addr, uint8_t packet_size, uint8_t* data)
+{
+       uint8_t temp[64];
+    if(packet_size > sizeof(temp) || update_partition == NULL)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+    esp_err_t err = esp_partition_read(update_partition, addr, temp, packet_size);
+       
+       if(err == ESP_OK && memcmp(temp, data, packet_size) == 0)
+       {
+               return REPLY_STATUS_OK;
+       }
+       return REPLY_STATUS_FAIL;
+}
+
+uint8_t Iap_Cache(uint16_t position, uint16_t size, uint8_t* data)
+{
+       if(update_handle == 0)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+
+       if(position == 0)
+       {
+               memset(iap_data, 0xFF, sizeof(iap_data));
+       }
+
+       memcpy(&iap_data[position], data, size);
+
+       return REPLY_STATUS_OK;
+}
+
+uint8_t Iap_Write_Cache(uint32_t addr, uint16_t cache_size)
+{
+       if(update_handle == 0)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+
+    esp_err_t err = esp_ota_write_with_offset(update_handle, iap_data, cache_size, addr);
+    if(err != ESP_OK)
+    {
+        return REPLY_STATUS_FAIL;
+    }
+
+       return REPLY_STATUS_OK;
+}
+
+void Iap_Process(uint8_t* data, uint8_t len)
+{
+       memset(iap_reply.other.buf, 0xFF, sizeof(IAP_CMD_REPLY_T));
+       memcpy(iap_cmd.other.buf, data, len);
+       memcpy(iap_reply.other.buf, iap_cmd.other.buf, 3);
+       iap_reply.cmd.status = REPLY_STATUS_NO_CMD;
+       
+       if(iap_cmd.cmd.cmd1 != CMD1_IAP_CHIP6)
+       {
+               return;
+       }
+       // ESP_LOGI(IAP_TAG, "Iap_Process:%d %d\n", iap_cmd.cmd.cmd2,iap_auth);
+       if(iap_cmd.cmd.cmd2 == CMD2_IAP_FETCH || iap_cmd.cmd.cmd2 == CMD2_IAP_CERTIFICATE || iap_cmd.cmd.cmd2 == CMD2_IAP_END || iap_auth == 1)
+       {
+               // 分析命令码
+               switch(iap_cmd.cmd.cmd2)
+               {
+                       // 获取信息
+                       case CMD2_IAP_FETCH:
+                       {
+                               iap_reply.fetch.status = REPLY_STATUS_OK;
+                               iap_reply.fetch.type = iap_cmd.fetch.type;
+                               if(iap_cmd.fetch.type == FETCH_VID_PID)
+                               {
+                                       *(uint16_t*)&iap_reply.fetch.data[0] = DEVICE_VID;
+                                       *(uint16_t*)&iap_reply.fetch.data[2] = DEVICE_PID;
+                               }
+                               else if(iap_cmd.fetch.type == FETCH_FW_VERSION)
+                               {
+                                       *(uint16_t*)&iap_reply.fetch.data[0] = FW_VERSION;
+                                       *(uint16_t*)&iap_reply.fetch.data[2] = BUILD_VERSION;
+                               }
+                               else if(iap_cmd.fetch.type == FETCH_FW_HEADER_CODE)
+                               {
+                                       char code[FW_HEADER_CODE_SIZE] = FW_HEADER_CODE;
+                                       iap_reply.fetch.data[0] = FW_HEADER_CODE_SIZE;
+                                       memcpy(&iap_reply.fetch.data[1], code, FW_HEADER_CODE_SIZE);
+                               }
+                               else if(iap_cmd.fetch.type == FETCH_APP_PARTITION_INFO)
+                               {
+                                       iap_reply.fetch.data[0] = iap_cmd.fetch.data[0];
+                                       if(iap_cmd.fetch.data[0] == 0x10)
+                                       {
+                        const esp_partition_t *running_partition = NULL;
+                        // 获取当前系统执行的固件所在的Flash分区
+                        running_partition = esp_ota_get_running_partition();
+                        if(running_partition == NULL)
+                        {
+                            iap_reply.fetch.status = REPLY_STATUS_FAIL;
+                        }
+                        else
+                        {
+                            *(uint32_t*)&iap_reply.fetch.data[1] = (running_partition->address) & 0xFFFFFF;
+                            *(uint32_t*)&iap_reply.fetch.data[4] = (running_partition->size);
+                        }
+                                       }
+                    else if(iap_cmd.fetch.data[0] == 0x11)
+                                       {
+                        if(update_partition == NULL)
+                        {
+                            update_partition = esp_ota_get_next_update_partition(NULL);
+                        }
+                        if(update_partition == NULL)
+                        {
+                            iap_reply.fetch.status = REPLY_STATUS_FAIL;
+                        }
+                        else
+                        {
+                            *(uint32_t*)&iap_reply.fetch.data[1] = (update_partition->address) & 0xFFFFFF;
+                            *(uint32_t*)&iap_reply.fetch.data[4] = (update_partition->size);
+                        }
+                                       }
+                                       else
+                                       {
+                                               iap_reply.fetch.status = REPLY_STATUS_NO_CMD;
+                                       }
+                               }
+                               else
+                               {
+                                       iap_reply.fetch.status = REPLY_STATUS_NO_CMD;
+                               }
+                       }
+                       break;
+                       
+                       // 认证
+                       case CMD2_IAP_CERTIFICATE:
+                       {
+                               char code[FW_HEADER_CODE_SIZE] = FW_HEADER_CODE;
+                               
+                               if(memcmp(iap_cmd.certificate.code, code, iap_cmd.certificate.size) == 0)
+                               {
+                                       iap_auth = 1;
+                                       iap_reply.certificate.status = REPLY_STATUS_OK;
+                               }
+                               else
+                               {
+                                       iap_reply.certificate.status = REPLY_STATUS_FAIL;
+                               }
+                       }
+                       break;
+                       
+                       // 擦除
+                       case CMD2_IAP_ERASE:
+                       {
+                               iap_reply.erase.status = Iap_Erase(0, 0);
+                       }
+                       break;
+                       
+                       // 写入
+                       case CMD2_IAP_WRITE:
+                       {
+                               uint32_t start_addr = iap_cmd.write.start_addr[0] | (iap_cmd.write.start_addr[1]<<8) | (iap_cmd.write.start_addr[2]<<16);
+                               iap_reply.write.status = Iap_Write(start_addr, iap_cmd.write.packet_size, iap_cmd.write.data);
+                       }
+                       break;
+                       
+                       // 读取
+                       case CMD2_IAP_READ:
+                       {
+                               uint32_t start_addr = iap_cmd.read.start_addr[0] | (iap_cmd.read.start_addr[1]<<8) | (iap_cmd.read.start_addr[2]<<16);
+                               iap_reply.read.start_addr[0] = iap_cmd.read.start_addr[0];
+                               iap_reply.read.start_addr[1] = iap_cmd.read.start_addr[1];
+                               iap_reply.read.start_addr[2] = iap_cmd.read.start_addr[2];
+                               iap_reply.read.packet_size = iap_cmd.read.packet_size;
+                               iap_reply.read.status = Iap_Read(start_addr, iap_cmd.read.packet_size, iap_reply.read.data);
+                       }
+                       break;
+                       
+                       // crc校验
+                       case CMD2_IAP_CHECK:
+                       {
+                               uint32_t start_addr = iap_cmd.check.start_addr[0] | (iap_cmd.check.start_addr[1]<<8) | (iap_cmd.check.start_addr[2]<<16);
+                               memcpy(&iap_reply.check.start_addr[0], &iap_cmd.check.start_addr[0], 11);
+
+                uint8_t result = 0;
+                               uint32_t crc_result = Iap_Check(start_addr, iap_cmd.check.size, &result);
+                               ESP_LOGI(IAP_TAG, "CRC32_Update:%08x %08x\n", (unsigned int)crc_result, (unsigned int)iap_cmd.check.crc32);
+                               if(crc_result == iap_cmd.check.crc32)
+                               {
+                    if(result == 0)
+                    {
+                                           iap_reply.check.status = REPLY_STATUS_OK;
+                    }
+                    else
+                    {
+                        iap_reply.check.status = REPLY_STATUS_FAIL;
+                    }
+                               }
+                               else
+                               {
+                                       iap_reply.check.status = REPLY_STATUS_FAIL;
+                               }
+                       }
+                       break;
+                       
+                       // 检验
+                       case CMD2_IAP_VERIFY:
+                       {
+                               uint32_t start_addr = iap_cmd.verify.start_addr[0] | (iap_cmd.verify.start_addr[1]<<8) | (iap_cmd.verify.start_addr[2]<<16);
+                               iap_reply.verify.start_addr[0] = iap_cmd.verify.start_addr[0];
+                               iap_reply.verify.start_addr[1] = iap_cmd.verify.start_addr[1];
+                               iap_reply.verify.start_addr[2] = iap_cmd.verify.start_addr[2];
+                               iap_reply.verify.status = Iap_Verify(start_addr, iap_cmd.verify.packet_size, iap_cmd.verify.data);
+                       }
+                       break;
+                       
+                       // 结束
+                       case CMD2_IAP_END:
+                       {
+                esp_err_t err = esp_ota_end(update_handle);
+                if(err == ESP_OK)
+                {
+                    err = esp_ota_set_boot_partition(update_partition);
+                    if(err == ESP_OK)
+                    {
+                        iap_reply.verify.status = REPLY_STATUS_OK;
+                    }
+                    else
+                    {
+                        iap_reply.verify.status = REPLY_STATUS_FAIL;
+                    }
+                }
+                               else
+                {
+                    iap_reply.verify.status = REPLY_STATUS_FAIL;
+                }
+                               xEventGroupSetBits(common_event_group, COMMON_RESET_BIT);
+                       }
+                       break;
+                       
+                       // 缓存
+                       case CMD2_IAP_CACHE:
+                       {
+                               iap_reply.cache.cache_position = iap_cmd.cache.cache_position;
+                               iap_reply.cache.packet_size = iap_cmd.cache.packet_size;
+                               iap_reply.cache.status = Iap_Cache(iap_cmd.cache.cache_position, iap_cmd.cache.packet_size, iap_cmd.cache.data);
+                       }
+                       break;
+
+                       // 写入缓存
+                       case CMD2_IAP_WRITE_CACHE:
+                       {
+                               uint32_t addr = iap_cmd.write_cache.start_addr[0] | (iap_cmd.write_cache.start_addr[1]<<8) | (iap_cmd.write_cache.start_addr[2]<<16);
+                               memcpy(iap_reply.write_cache.start_addr, iap_cmd.write_cache.start_addr, 5);
+                               iap_reply.write_cache.status = Iap_Write_Cache(addr, iap_cmd.write_cache.cache_size);
+                       }
+                       break;
+
+                       default:
+                               iap_reply.end.status = REPLY_STATUS_NO_CMD;
+
+                               ESP_LOGI(IAP_TAG, "unkown cmd\n");
+                               break;
+               }
+       }
+       else
+       {
+               iap_reply.cmd.status = REPLY_STATUS_UNAUTH;
+               // 01 b1 01 0C 57 47 54 4C 5F 45 53 50 33 32 43 32
+               ESP_LOGI(IAP_TAG, "unauth\n");
+       }
+       
+       Uart_Reply_Send(iap_reply.cmd.cmd1, iap_reply.other.buf, sizeof(iap_reply.other.buf), HOST_TYPE_UART);
+}
+
+
+
+
+
diff --git a/main/iap.h b/main/iap.h
new file mode 100644 (file)
index 0000000..3180e16
--- /dev/null
@@ -0,0 +1,205 @@
+#ifndef _IAP_H_
+#define _IAP_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+
+/* usb data length is 64 */
+#define IAP_FW_LEN                     (56)
+#define IAP_LEN                        (63)
+
+
+
+// 固件更新
+#define CMD1_IAP_BASE                                  0xB0
+#define CMD1_IAP_PANEL                                 0xB1
+#define CMD1_IAP_CHIP1                                 0xB2
+#define CMD1_IAP_CHIP2                                 0xB3
+#define CMD1_IAP_CHIP3                                 0xB4
+#define CMD1_IAP_CHIP4                                 0xB5
+#define CMD1_IAP_CHIP5                                 0xB6
+#define CMD1_IAP_CHIP6                                 0xB7
+
+#define CMD2_IAP_FETCH                                 0x00
+#define CMD2_IAP_CERTIFICATE                   0x01
+#define CMD2_IAP_ERASE                         0x02
+#define CMD2_IAP_WRITE                         0x03
+#define CMD2_IAP_READ                          0x04
+#define CMD2_IAP_CHECK                         0x05
+#define CMD2_IAP_VERIFY                        0x06
+#define CMD2_IAP_END                           0x07
+#define CMD2_IAP_MOVE                          0x08
+#define CMD2_IAP_CACHE                         0x09
+#define CMD2_IAP_WRITE_CACHE                   0x0A
+
+typedef enum
+{
+       FETCH_VID_PID = 0,
+       FETCH_FW_VERSION,
+       FETCH_FW_HEADER_CODE,
+       FETCH_APP_PARTITION_INFO,
+}IAP_FETCH_T;
+
+typedef union
+{
+       // 获取信息
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+        uint8_t type;
+               uint8_t data[IAP_LEN-4];
+    }__attribute__((packed)) fetch;
+       
+       // 认证
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+               uint8_t size;
+        uint8_t code[IAP_LEN-4];
+    }__attribute__((packed)) certificate;
+       
+       // 擦除
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+        uint8_t start_addr[3];
+               uint32_t size;
+    }__attribute__((packed)) erase;
+       
+       // 写入
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+        uint8_t start_addr[3];
+               uint8_t packet_size;
+               uint8_t data[IAP_FW_LEN];
+    }__attribute__((packed)) write;
+       
+       // 读出
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+        uint8_t start_addr[3];
+               uint8_t packet_size;
+               uint8_t data[IAP_FW_LEN];
+    }__attribute__((packed)) read;
+       
+       // 校验
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+        uint8_t start_addr[3];
+               uint32_t size;
+               uint32_t crc32;
+    }__attribute__((packed)) check;
+       
+       // 检验
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+        uint8_t start_addr[3];
+               uint8_t packet_size;
+               uint8_t data[IAP_FW_LEN];
+    }__attribute__((packed)) verify;
+       
+       // 结束
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+    }__attribute__((packed)) end;
+       
+       // 搬运
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+               uint8_t type;
+    }__attribute__((packed)) move;
+       
+       // 缓存
+    struct
+    {
+        uint8_t report_id;
+        uint8_t cmd1;
+        uint8_t cmd2:5;
+        uint8_t status:3;
+        uint16_t cache_position;
+        uint16_t packet_size;
+        uint8_t data[IAP_FW_LEN];
+    }__attribute__((packed))cache;
+
+    // 写入缓存
+    struct
+    {
+        uint8_t report_id;
+        uint8_t cmd1;
+        uint8_t cmd2:5;
+        uint8_t status:3;
+        uint8_t start_addr[3];
+        uint16_t cache_size;
+    }__attribute__((packed))write_cache;
+
+       // 命令
+       struct
+    {
+        uint8_t report_id:4;
+               uint8_t device:4;
+        uint8_t cmd1;
+               uint8_t cmd2:5;
+               uint8_t status:3;
+    }__attribute__((packed)) cmd;
+       
+       // 其它
+       struct
+    {
+        uint8_t buf[IAP_LEN];
+    }__attribute__((packed)) other;
+}__attribute__((packed)) IAP_CMD_REPLY_T;
+
+
+
+extern IAP_CMD_REPLY_T iap_cmd;
+extern IAP_CMD_REPLY_T iap_reply;
+
+extern int32_t iap_end_cnt;
+
+
+void Iap_Process(uint8_t* data, uint8_t len);
+
+#endif
diff --git a/main/idf_component.yml b/main/idf_component.yml
new file mode 100644 (file)
index 0000000..7181948
--- /dev/null
@@ -0,0 +1,3 @@
+dependencies:
+  protocol_examples_common:
+    path: ${IDF_PATH}/examples/common_components/protocol_examples_common
diff --git a/main/mosquitto.org.crt b/main/mosquitto.org.crt
new file mode 100644 (file)
index 0000000..e76dbd8
--- /dev/null
@@ -0,0 +1,24 @@
+-----BEGIN CERTIFICATE-----
+MIIEAzCCAuugAwIBAgIUBY1hlCGvdj4NhBXkZ/uLUZNILAwwDQYJKoZIhvcNAQEL
+BQAwgZAxCzAJBgNVBAYTAkdCMRcwFQYDVQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwG
+A1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1vc3F1aXR0bzELMAkGA1UECwwCQ0ExFjAU
+BgNVBAMMDW1vc3F1aXR0by5vcmcxHzAdBgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hv
+by5vcmcwHhcNMjAwNjA5MTEwNjM5WhcNMzAwNjA3MTEwNjM5WjCBkDELMAkGA1UE
+BhMCR0IxFzAVBgNVBAgMDlVuaXRlZCBLaW5nZG9tMQ4wDAYDVQQHDAVEZXJieTES
+MBAGA1UECgwJTW9zcXVpdHRvMQswCQYDVQQLDAJDQTEWMBQGA1UEAwwNbW9zcXVp
+dHRvLm9yZzEfMB0GCSqGSIb3DQEJARYQcm9nZXJAYXRjaG9vLm9yZzCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAME0HKmIzfTOwkKLT3THHe+ObdizamPg
+UZmD64Tf3zJdNeYGYn4CEXbyP6fy3tWc8S2boW6dzrH8SdFf9uo320GJA9B7U1FW
+Te3xda/Lm3JFfaHjkWw7jBwcauQZjpGINHapHRlpiCZsquAthOgxW9SgDgYlGzEA
+s06pkEFiMw+qDfLo/sxFKB6vQlFekMeCymjLCbNwPJyqyhFmPWwio/PDMruBTzPH
+3cioBnrJWKXc3OjXdLGFJOfj7pP0j/dr2LH72eSvv3PQQFl90CZPFhrCUcRHSSxo
+E6yjGOdnz7f6PveLIB574kQORwt8ePn0yidrTC1ictikED3nHYhMUOUCAwEAAaNT
+MFEwHQYDVR0OBBYEFPVV6xBUFPiGKDyo5V3+Hbh4N9YSMB8GA1UdIwQYMBaAFPVV
+6xBUFPiGKDyo5V3+Hbh4N9YSMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL
+BQADggEBAGa9kS21N70ThM6/Hj9D7mbVxKLBjVWe2TPsGfbl3rEDfZ+OKRZ2j6AC
+6r7jb4TZO3dzF2p6dgbrlU71Y/4K0TdzIjRj3cQ3KSm41JvUQ0hZ/c04iGDg/xWf
++pp58nfPAYwuerruPNWmlStWAXf0UTqRtg4hQDWBuUFDJTuWuuBvEXudz74eh/wK
+sMwfu1HFvjy5Z0iMDU8PUDepjVolOCue9ashlS4EB5IECdSR2TItnAIiIwimx839
+LdUdRudafMu5T5Xma182OC0/u/xRlEm+tvKGGmfFcN0piqVl8OrSPBgIlb+1IKJE
+m/XriWr/Cq4h/JfB7NTsezVslgkBaoU=
+-----END CERTIFICATE-----
diff --git a/main/project_common.c b/main/project_common.c
new file mode 100644 (file)
index 0000000..e2e0543
--- /dev/null
@@ -0,0 +1,1040 @@
+#include "project_common.h"
+#include "ble.h"
+static const char *COMMON_TAG = "COMMON";
+
+const FW_FILE_HEADER_T firmware_header = 
+{
+       .header_magic = 0xBAD0C0FFEE00CAFE,
+    .reserved0 = 0x0000,
+    .file_type = 0x0001,
+    .protocol_version = 0x01,
+       .device_type = 0xB7,
+
+       .code_size = FW_HEADER_CODE_SIZE,
+       .code = FW_HEADER_CODE,
+       
+    .single_write_page_size = FLASH_SEC_SIZE,
+
+       .vid_app = DEVICE_VID,
+       .pid_app = DEVICE_PID,
+       .vid_boot = DEVICE_VID,
+       .pid_boot = DEVICE_PID,
+       
+       .fw_version = FW_VERSION,
+       .build_version = BUILD_VERSION,
+       
+       .write_erase_start_addr = 0x00000000,
+       .write_erase_size = 0xFFFFFFFF,
+       .file_start_addr = 0x0100,
+       
+       // .header_type_1.cmd[0] = {.enable = 2, .content = {CMD2_IAP_MOVE, 1}},
+       // .header_type_1.cmd[1] = {.enable = 3, .content = {CMD2_IAP_MOVE, 2}},
+};
+
+
+
+EventGroupHandle_t ble_event_group;
+
+EventGroupHandle_t common_event_group;
+
+COMMON_STORAGE_T common_storage = 
+{
+    .net_info = {.device_id_flag = 0, .wifi_info_flag = 0,.serial_number_flag=0},
+    .ssl_cert = {[SSL_CLIENT_CRT]{.buffer = {0}}, [SSL_CLIENT_KEY]{.buffer = {0}}, [SSL_SERVER_CRT]{.buffer = {0}}},
+};
+
+COMMON_SETTING_T common_setting = 
+{
+    // UNIVERSAL
+    .heart_beat_enable = 1,
+    .heart_beat_interval = 1000, // 默认上电后1秒一次
+    #if ENABLE_WIFI_FUNC
+    // WIFI
+    .wifi_config = 
+    {
+        .sta = 
+        {
+            .ssid = EXAMPLE_ESP_WIFI_SSID,
+            .password = EXAMPLE_ESP_WIFI_PASS,
+            /* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (password len => 8).
+             * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
+             * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
+             * WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
+             */
+            .threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
+            .sae_pwe_h2e = ESP_WIFI_SAE_MODE,
+            .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
+        },
+    },
+    #endif
+
+    //MQTT
+    // .mqtt_cfg = NULL,
+    .mqtt_client_handle = NULL,
+};
+
+// static BLE_SEND_REPLY_T net_pairing_reply;
+
+#define NET_PAIRING_REPLY_MAX_PAYLOAD (BLE_BUF_SIZE - 5) // 5 = header(1) + cmd(1) + len(2) + crc(1)
+
+
+
+
+void Check_Host_Type(uint8_t cmd, uint8_t* pbuf, uint16_t len, uint8_t host_type)
+{
+    switch (host_type)
+    {
+        case HOST_TYPE_UART:
+            Uart_Reply_Send(cmd, pbuf, len, host_type);
+            /* code */
+            break;
+        case HOST_TYPE_BLE:
+            Ble_Pairing_Reply(cmd, pbuf, len, host_type);
+            break;
+        
+        default:
+            break;
+    }
+}
+//*pub不包含帧头 命令 crcr长度等协议字段,纯数据部分,len为数据部分长度
+
+
+
+void Ble_Pairing_Reply(uint8_t cmd, uint8_t* pbuf, uint16_t len, uint8_t host_type)
+{
+    if(common_setting.ble_status.ble_state == 0) //只有蓝牙开启才允许发送蓝牙数据
+    {
+        ESP_LOGE(COMMON_TAG, "ble is not connect\n");
+        return;
+    }
+    if (len > NET_PAIRING_REPLY_MAX_PAYLOAD)
+    {
+        ESP_LOGE(COMMON_TAG, "Ble_Pairing_Reply length too large: %d\n", len);
+        return;
+    }
+    
+    static BLE_RECV_DATA_T net_pairing_reply = { 0 };
+    uint8_t header[4] = {FRAMEHEAD_ESP_TO_APP, cmd, 0x00, 0x00};
+    memcpy(&header[2], &len, 2);
+    net_pairing_reply.size = len + 1 + 1 + 2 + 1; // header(1)+cmd(1)+len(2)+crc(1)
+
+    memcpy(net_pairing_reply.buffer, header, 4);
+    if (len > 0 && pbuf != NULL)
+    {
+        memcpy(&net_pairing_reply.buffer[4], pbuf, len);
+    }
+    uint8_t crc = Crc8_ROHC_Cal(&net_pairing_reply.buffer[1], len + 3);
+    net_pairing_reply.buffer[len + 4] = crc;
+    ESP_LOGI(COMMON_TAG, "Ble_Pairing_Reply crc %02x len %u", crc, len);
+    #if ENABLE_BLE_FUNC
+    xQueueSend(ble_notify_queue_handle, &net_pairing_reply, 0);
+    #endif
+}
+void Ble_Pairing_Handle(uint8_t *data ,uint16_t len, uint8_t host_type)
+{
+    //APP-ESP PROTUCOL协议指令解析 ble接收的数据不需要做数据长度判断 app层处理即可
+    if(len >= 4 && len <= sizeof(BLE_SEND_REPLY_T) && data[0] == FRAMEHEAD_APP_TO_ESP && Crc8_ROHC_Cal(&data[1], len-2) == data[len-1] && host_type == HOST_TYPE_BLE)
+    {
+        ESP_LOGI(COMMON_TAG, "ble recv %d bytes:cmd %0x\n", len, data[1]);
+        // ESP_LOG_BUFFER_HEX(COMMON_TAG, data, len);
+        static BLE_SEND_REPLY_T net_pairing_reply = {0};
+        // net_pairing_reply = (BLE_SEND_REPLY_T *)pvPortMalloc(sizeof(BLE_SEND_REPLY_T));
+        // if(net_pairing_reply == NULL)        {
+        //     ESP_LOGE(COMMON_TAG, "malloc failed for net_pairing_reply");
+        //     return;
+        // }
+        memset(&net_pairing_reply, 0x00, sizeof(BLE_SEND_REPLY_T));
+
+        // Process
+        //data[0] = 0xff
+        //data[1] = cmd
+        //data[2~3] = len
+        //data[4~(4+len-1)] = payload
+        //data[len-1] = crc
+        net_pairing_reply.cmd = data[1];
+        common_setting.ble_enable_tick = 0; // 刷新蓝牙关闭倒计时
+        switch(data[1])
+        {
+            // 心跳检测
+            case COMMON_BLE_CMD1://ble协议暂时使用
+            // {
+            //     if(data[3] == 0)
+            //     {
+            //         common_setting.heart_beat_enable = 0;
+            //     }
+            //     else
+            //     {
+            //         common_setting.heart_beat_enable = 1;
+            //         common_setting.heart_beat_interval = data[3] * 1000;
+            //     }
+            // }
+            break;
+
+            // app查询设备的pid、vid、固件版本等信息,建议APP在配网前调用一次,获取主控信息后再决定是否继续配网
+            case COMMON_BLE_MCU_INFOR_CMD:
+            {
+                net_pairing_reply.send_flag=1;
+                // 需要至少 12 字节(0~11),并且 product_name 中还有内容时要继续检查
+                if (len >= 12 && data[2] >= 9)
+                {
+                    common_setting.mcu_info.vid = *(uint16_t*)&data[3];
+                    common_setting.mcu_info.pid = *(uint16_t*)&data[5];
+                    common_setting.mcu_info.fw_version = *(uint16_t*)&data[7];
+                    common_setting.mcu_info.build_version = *(uint16_t*)&data[9];
+                    memset(common_setting.mcu_info.product_name, 0x00, sizeof(common_setting.mcu_info.product_name));
+                    uint8_t name_len = data[11];
+                    if (name_len > PRODUCT_NAME_MAX_LEN)
+                    {
+                        name_len = PRODUCT_NAME_MAX_LEN;
+                    }
+
+                    if (name_len > 0)
+                    {
+                        if (len >= 12 + name_len)
+                        {
+                            memcpy(common_setting.mcu_info.product_name, &data[12], name_len);
+                            common_setting.mcu_info.product_name[name_len] = '\0'; // 确保字符串结尾
+                            common_setting.mcu_info.product_name_len = name_len;
+                            common_setting.mcu_info_got_flag = 1;
+                            net_pairing_reply.content[0]=0x01;
+                            
+                        }
+                        else
+                        {
+                            ESP_LOGI(COMMON_TAG, "mcu info name len out of range, data len %d, want %d\n", len, (12 + name_len));
+                            name_len = 0;
+                            net_pairing_reply.content[0]=0x01;
+                        }
+                    }
+                    
+                }else{
+                    net_pairing_reply.content[0]=0x00;
+                }
+
+                
+            }
+            break;
+            // app查询设备的pid,MAC地址
+            case COMMON_BLE_PID_MAC_CMD:
+            {
+                net_pairing_reply.len = 8;
+                common_setting.mcu_info.pid=0xA00B;
+                memcpy(&net_pairing_reply.content[0], (uint16_t*)&common_setting.mcu_info.pid, 2);
+                esp_read_mac(&net_pairing_reply.content[2], ESP_MAC_BT);
+                
+                net_pairing_reply.send_flag = 1;//是否需要回复对方
+            }
+            break;
+            // 网络状态通知
+            case COMMON_BLE_NETWORK_STATUS_QUERY_CMD:
+            {
+                net_pairing_reply.send_flag = 1;
+                net_pairing_reply.len = 1;
+                
+                net_pairing_reply.content[0] = 0x00; // 未处于配网状态
+                if(common_setting.ble_status.ble_state == 1)
+                {
+                    net_pairing_reply.content[0] = 0x01; // 蓝牙广播中
+                }
+                if(common_setting.ble_status.ble_state == 2)
+                {
+                    net_pairing_reply.content[0] = 0x02; // 蓝牙已连接
+                }
+                if(common_setting.wifi_status.wifi_mode != 1)
+                {
+                    if(common_setting.wifi_status.wifi_mode == 2)
+                    {
+                        net_pairing_reply.content[0] = 0x03; // wifi连接中
+                    }
+                    if(common_setting.wifi_status.wifi_state == 1)
+                    {
+                        net_pairing_reply.content[0] = 0x04; // wifi已连接
+                    }
+                }
+            }
+            break;
+
+            case COMMON_BLE_NETWORK_STATUS_REPLAY_CMD:
+            {
+
+            }
+            break;
+            // // 属性设置
+            // case 0x06:
+            // {
+
+            // }
+            // break;
+            
+            // 属性上报
+            case 0x07:
+            {
+                // mqtt_upload_len = data[2];
+                // memcpy(mqtt_upload_data, &data[3], data[2]);
+            }
+            break;
+
+            // // 属性全部查询
+            // case 0x08:
+            // {
+
+            // }
+            // break;
+
+            // // 属性批量查询
+            // case 0x09:
+            // {
+
+            // }
+            // break;
+
+            // 获取模组MAC地址
+            case COMMON_BLE_ESP_MAC_CMD:
+            {
+                net_pairing_reply.send_flag = 1;
+                net_pairing_reply.len = 6;
+                esp_read_mac(net_pairing_reply.content, ESP_MAC_BT);
+            }
+            break;
+            // 获取模组WIFI信息
+            case COMMON_BLE_WIFI_INFOR_CMD:
+            {
+                net_pairing_reply.send_flag = 1;
+                if(common_storage.net_info.wifi_info_flag == 0)
+                {
+                    net_pairing_reply.len = 2;
+                    net_pairing_reply.content[0] = 0; // 失败
+                    net_pairing_reply.content[1] = 0;
+                }
+                else
+                {
+                    net_pairing_reply.len = 2 + common_storage.net_info.wifi_ssid_len;
+                    if(common_setting.net_pairing_status >= NET_PAIRING_WIFI_CONNECTED_AP)
+                    {
+                        *(int8_t*)&net_pairing_reply.content[0] = common_setting.wifi_status.rssi;
+                    }
+                    else
+                    {
+                        net_pairing_reply.content[0] = 1; // 未连接
+                    }
+                    net_pairing_reply.content[1] = 1;
+                    memcpy(&net_pairing_reply.content[2], common_storage.net_info.wifi_ssid, common_storage.net_info.wifi_ssid_len);
+                }
+            }
+            break;
+
+            // 获取模组固件版本
+            case COMMON_BLE_FW_VERSION_CMD:
+            {
+                net_pairing_reply.send_flag = 1;
+                net_pairing_reply.len = 6;
+
+                *(uint16_t*)&net_pairing_reply.content[0] = DEVICE_PID;
+                *(uint16_t*)&net_pairing_reply.content[2] = FW_VERSION;
+                *(uint16_t*)&net_pairing_reply.content[4] = BUILD_VERSION;
+            }
+            break;
+            
+            // 关闭心跳检测
+            case COMMON_BLE_CLOSE_HEART_CMD:
+            {
+                net_pairing_reply.send_flag = 1;
+                net_pairing_reply.len = 0;
+
+                common_setting.heart_beat_enable = 0;
+            }
+            break;
+
+            // 事件上报
+            case 0x10:
+            {
+                
+            }
+            break;
+
+            // 属性同步通知
+            case 0x11:
+            {
+
+            }
+            break;
+
+            // 获取时间戳
+            case 0x12:
+            {
+                net_pairing_reply.send_flag = 1;
+                if(common_setting.timestamp.sync_flag)
+                {
+                    net_pairing_reply.len = 10;
+                    net_pairing_reply.content[0] = 0;
+                    net_pairing_reply.content[1] = common_setting.timestamp.time_zone;
+                    *(uint64_t*)&net_pairing_reply.content[2] = common_setting.timestamp.real_time;
+                }
+                else
+                {
+                    net_pairing_reply.len = 1;
+                    net_pairing_reply.content[0] = 1;
+                }
+            }
+            break;
+
+            // 扫描WIFI列表
+            case 0x14:
+            {
+                #if ENABLE_WIFI_FUNC
+                // 开始扫描
+                Wifi_Queue_Send(host_type, 4, 0);
+                #endif
+            }
+            break;
+
+            // 连接WIFI
+            case COMMON_BLE_WIFI_SSID_PWD_CMD:
+            {
+                uint8_t parse_done = 0;
+                char wifi_ssid[32+1] = {0};
+                char wifi_pwd[64+1] = {0};
+
+                if (len < 106)
+                {
+                    ESP_LOGW(COMMON_TAG, "wifi conn data too short (%u)\n",len);
+                    net_pairing_reply.send_flag = 1;
+                    net_pairing_reply.len = 3;
+                    net_pairing_reply.content[0] = 4; // 数据不足代码
+                    net_pairing_reply.content[1] = data[4];
+                    net_pairing_reply.content[2] = data[5];
+                    break;
+                }
+
+                size_t max_ssid_src = (len > 6) ? len - 6 : 0;
+                size_t max_pwd_src = (len > 38) ? len - 38 : 0;
+                size_t wifi_ssid_len = strnlen((const char*)&data[6], max_ssid_src);
+                size_t wifi_pwd_len = strnlen((const char*)&data[38], max_pwd_src);
+
+                if (wifi_ssid_len > 32)
+                {
+                    wifi_ssid_len = 32;
+                }
+                if (wifi_pwd_len > 64)
+                {
+                    wifi_pwd_len = 64;
+                }
+
+                if(Crc32_JAMCRC_Cal(&data[38], 64) != *(uint32_t*)&data[102]) // 校验密文完整性
+                {
+                    net_pairing_reply.send_flag = 1;
+                    net_pairing_reply.len = 3;
+                    net_pairing_reply.content[0] = 2;
+                    net_pairing_reply.content[1] = data[4];
+                    net_pairing_reply.content[2] = data[5];
+                    ESP_LOGI(COMMON_TAG, "net pairing wifi pwd crc32 err:%08x %08x\n", (unsigned int)Crc32_JAMCRC_Cal(&data[38], 64), (unsigned int)*(uint32_t*)&data[102]);
+                    break;
+                }
+
+                memcpy(wifi_ssid, &data[6], wifi_ssid_len);
+                if(wifi_ssid_len > 32)
+                {
+                    
+                    wifi_ssid[31] = '\0';//加上结束符 防止后续使用字符串函数时越界 显示乱码名称
+                }
+                switch(data[5]) // 加密方案
+                {
+                    case 0: // 明文
+                    {
+                        memcpy(wifi_pwd, &data[38], 64);
+                        if(wifi_pwd_len > 64)
+                        {
+                            wifi_pwd[63] = '\0';//加上结束符 防止后续使用字符串函数时越界 显示乱码密码
+                        }
+                        net_pairing_reply.send_flag = 0;
+                        // 开始连接
+                        parse_done = 1;
+                        ESP_LOGI(COMMON_TAG, "wifi pwd no encrypt\n");
+                    }
+                    break;
+
+                    case 1: // AES128-ECB
+                    {
+                        const uint8_t aes_key[16] = {0x53,0x59,0x53,0x54,0x45,0x4D,0x5F,0x53,0x48,0x4F,0x43,0x4B,0x5F,0x50,0x58,0x4E};
+                        aes_init(aes_key);
+                        aes_soft_decrypt(&data[38], (uint8_t*)wifi_pwd, 64, NULL);
+                        net_pairing_reply.send_flag = 0;
+                        // 开始连接
+                        parse_done = 1;
+                        ESP_LOGI(COMMON_TAG, "wifi pwd encrypt\n");
+                    }
+                    break;
+                }
+                
+
+                if(parse_done)
+                {
+                    for(uint8_t i=0;i<64;i++)
+                    {
+                        if(wifi_pwd[i] == 0)
+                        {
+                            wifi_pwd_len = i;
+                            break;
+                        }
+                    }
+                    
+                    common_setting.wifi_status.cur_ssid_len = wifi_ssid_len;
+                    memset(common_setting.wifi_status.cur_ssid,0,32);
+                    memcpy(common_setting.wifi_status.cur_ssid, wifi_ssid, wifi_ssid_len);
+                    common_setting.wifi_status.cur_ssid[wifi_ssid_len]='\0';
+                    common_setting.wifi_status.cur_pwd_len = wifi_pwd_len;
+                    memset(common_setting.wifi_status.cur_pwd,0,64);
+                    memcpy(common_setting.wifi_status.cur_pwd, wifi_pwd, wifi_pwd_len);
+                    common_setting.wifi_status.cur_pwd[wifi_pwd_len]='\0';
+                    ESP_LOGI(COMMON_TAG, "wifi ssid len: %d\n", wifi_ssid_len);
+                    
+                    memset(common_storage.net_info.wifi_ssid,0,32);
+                    common_storage.net_info.wifi_ssid_len=wifi_ssid_len;
+                    memcpy(common_storage.net_info.wifi_ssid, wifi_ssid, wifi_ssid_len);
+
+                    memset(common_storage.net_info.wifi_pwd,0,64);
+                    memcpy(common_storage.net_info.wifi_pwd, wifi_pwd, wifi_pwd_len);
+                    common_storage.net_info.wifi_pwd_len=wifi_pwd_len;
+
+                    common_storage.net_info.wifi_info_flag=1;
+
+                    //保存flash后,
+                    if(User_Flash_Write_With_Flag(UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) == ESP_OK)
+                    {
+                        ESP_LOGI(COMMON_TAG, "save wifi pwd success: %d\n", wifi_ssid_len);
+                    }else{
+                        ESP_LOGI(COMMON_TAG, "save wifi pwd failed: %d\n", wifi_ssid_len);
+                    }
+
+                    ESP_LOG_BUFFER_CHAR(COMMON_TAG, common_setting.wifi_status.cur_ssid, wifi_ssid_len);
+                    ESP_LOGI(COMMON_TAG, "wifi pwd len: %d\n", wifi_pwd_len);
+                    ESP_LOG_BUFFER_CHAR(COMMON_TAG, common_setting.wifi_status.cur_pwd, wifi_pwd_len);
+
+                    ESP_LOGI(COMMON_TAG, "wifi flag: %d %d %d\n",common_setting.net_pairing_info.http_url_flag, common_setting.net_pairing_info.http_token_flag, common_setting.net_pairing_info.user_id_flag);
+                    
+                    //if(common_setting.net_pairing_info.http_url_flag && common_setting.net_pairing_info.http_token_flag && common_setting.net_pairing_info.user_id_flag)
+                    
+                    if(common_setting.net_pairing_info.http_url_flag && common_setting.net_pairing_info.http_token_flag && common_setting.net_pairing_info.user_id_flag)
+                    {
+                        if(data[4] == 0)
+                        {
+                            // 厂测配网,单次连接
+                            net_pairing_reply.send_flag = 0;
+                            // net_pairing_reply->send_flag = 1;
+                            // net_pairing_reply->len = 3;
+                            // net_pairing_reply->content[0] = 0;
+                            // net_pairing_reply->content[1] = data[3];
+                            // net_pairing_reply->content[2] = data[4];
+                            ESP_LOGI(COMMON_TAG, "wifi test start\n");
+                            #if ENABLE_WIFI_FUNC
+                            Wifi_Queue_Send(host_type, 1, data[5]);
+                            #endif
+                        }
+                        else if(data[4] == 1)
+                        {
+                            // 用户配网
+                            net_pairing_reply.send_flag = 0;
+                            // net_pairing_reply->send_flag = 1;
+                            // net_pairing_reply->len = 3;
+                            // net_pairing_reply->content[0] = 0;
+                            // net_pairing_reply.content[1] = data[3];
+                            // net_pairing_reply.content[2] = data[4];
+                            ESP_LOGI(COMMON_TAG, "wifi pair start\n");
+                            #if ENABLE_WIFI_FUNC
+                            Wifi_Queue_Send(host_type, 2, data[5]);
+                            #endif
+                        }
+                        else
+                        {
+                            ESP_LOGI(COMMON_TAG, "wifi pair wrong\n");
+                        }
+                    }
+                    else
+                    {
+                        if(common_setting.net_pairing_info.http_url_flag == 0 && common_setting.net_pairing_info.http_token_flag == 0)
+                        {
+                            net_pairing_reply.send_flag = 1;
+                            net_pairing_reply.len = 3;
+                            net_pairing_reply.content[0] = 0x05;
+                            net_pairing_reply.content[1] = data[4];
+                            net_pairing_reply.content[2] = data[5];
+                        }else if(common_setting.net_pairing_info.http_url_flag==0)
+                        {
+                            net_pairing_reply.send_flag = 1;
+                            net_pairing_reply.len = 3;
+                            net_pairing_reply.content[0] = 0x06;
+                            net_pairing_reply.content[1] = data[4];
+                            net_pairing_reply.content[2] = data[5];
+                        }else if(common_setting.net_pairing_info.http_token_flag==0)
+                        {
+                            net_pairing_reply.send_flag = 1;
+                            net_pairing_reply.len = 3;
+                            net_pairing_reply.content[0] = 0x07;
+                            net_pairing_reply.content[1] = data[4];
+                            net_pairing_reply.content[2] = data[5];
+                        }
+                        
+                    }
+                }
+                else
+                {
+                    // 解析失败
+                    net_pairing_reply.send_flag = 1;
+                    net_pairing_reply.len = 3;
+                    net_pairing_reply.content[0] = 0;
+                    net_pairing_reply.content[1] = data[4];
+                    net_pairing_reply.content[2] = data[5];
+                    ESP_LOGE(COMMON_TAG, "wifi pwd encrypt profile not exist");
+                }
+            }
+            break;
+
+            // 配网认证信息
+            case COMMON_BLE_NETWORK_AUTHENT_CMD:
+            {
+                if (len < 13)
+                {
+                    ESP_LOGW(COMMON_TAG, "net pairing 0x16 len too small (%u)", len);
+                    net_pairing_reply.send_flag = 1;
+                    net_pairing_reply.len = 1;
+                    net_pairing_reply.content[0] = 0x10;
+                    break;
+                }
+
+                uint16_t recv_total_len = *(uint16_t*)&data[2];//不包含cmd+帧头+crc
+                uint16_t total_len = *(uint16_t*)&data[5];//52
+                uint16_t start_byte = *(uint16_t*)&data[10];
+                uint8_t packet_bytes = data[12];
+                static uint8_t http_end = 0;//
+                static uint8_t http_end_flag = 0;//本次接收的包是否是http url包的最后一包,0表示不是最后一包,1表示是最后一包
+                static uint8_t token_end = 0;//
+                static uint8_t token_end_flag = 0;//本次接收的包是否是token包的最后一包,0表示不是最后一包,1表示是最后一包
+
+                if ((size_t)packet_bytes > len - 13)
+                {
+                    ESP_LOGW(COMMON_TAG, "net pairing 0x16 too big (%u > %u)\n", packet_bytes, len - 13);
+                    net_pairing_reply.send_flag = 1;
+                    net_pairing_reply.len = 1;
+                    net_pairing_reply.content[0] = 0x10;
+                    break;
+                }
+
+                net_pairing_reply.send_flag = 1;
+                net_pairing_reply.len = 9;
+                memcpy(net_pairing_reply.content, &data[4], 9);
+                ESP_LOGI(COMMON_TAG, "network info: %d %d %d %d\n",recv_total_len, total_len,start_byte, packet_bytes);
+
+                if(packet_bytes <= NET_PAIRING_INFO_MAX_LEN-13 && start_byte + packet_bytes <= total_len && packet_bytes + 9 <= recv_total_len)
+                {
+                    if(data[4] == 0) // http配网服务器地址
+                    {
+                        if(start_byte == 0)
+                        {
+                            http_end=0;
+                            http_end_flag=1;
+                            memset(common_setting.net_pairing_info.http_url, 0x00, HTTP_URL_MAX_LEN);
+                        }
+
+                        // 
+                        size_t copy_len = MIN(packet_bytes, HTTP_URL_MAX_LEN - start_byte);
+                        if(copy_len > 0)
+                        {
+                            memcpy(&common_setting.net_pairing_info.http_url[start_byte], &data[13], copy_len);
+                        }
+
+                        // ==========================================
+                        // 
+                        // ==========================================
+                        if(data[9] == 1)
+                        {
+                            // 
+                            total_len = start_byte + copy_len;
+
+                            // 
+                            if(total_len > HTTP_URL_MAX_LEN)
+                                total_len = HTTP_URL_MAX_LEN;
+                        }
+
+                        // 字符串结束符(不影响有效数据)
+                        uint32_t str_end = start_byte + copy_len;
+                        if (str_end >= HTTP_URL_MAX_LEN)
+                            str_end = HTTP_URL_MAX_LEN;
+                        common_setting.net_pairing_info.http_url[str_end] = '\0';
+                        // ESP_LOGI(COMMON_TAG, "认证信息数据3: %d %d %d %d\n", recv_total_len, total_len,start_byte, packet_bytes);
+                        if(data[9] == 1)
+                        {
+                            // CRC 
+                            uint16_t calc_crc = Crc16_Modbus_Cal((uint8_t*)common_setting.net_pairing_info.http_url, total_len);
+                            uint16_t packet_crc = (data[7] << 8) | data[8];
+
+                            ESP_LOGI(COMMON_TAG, "http url: %s (len=%u)\n", common_setting.net_pairing_info.http_url, total_len);
+                            
+                            //本次结束接收后数据校验出错了,然后又下发最后一包不完整的数据,结束了上一次的完整包 但是后面又下发了最后一包数据不完整
+                            if(http_end == 1 || http_end_flag == 0)
+                            {
+                                //上一次已经接收完成了一个完整的http url包了,但校验失败了
+                                ESP_LOGI(COMMON_TAG, "http data error\n");
+                                http_end=0;
+                                memset(common_setting.net_pairing_info.http_url, 0x00, HTTP_URL_MAX_LEN);
+                                net_pairing_reply.content[5] |= 0x20;
+                                break;//提前退出,等待APP重新发送一个新的http url包过来
+                            }
+                            http_end_flag=0;//一开始为0说明不是第一包不做数据处理,当接收到第一包数据时把http_end_flag置为1,
+                            if(packet_crc == calc_crc)
+                            {
+                                
+                                http_end=0;
+                                common_setting.net_pairing_info.http_url_length = total_len;
+                                common_setting.net_pairing_info.http_url_flag = 1;
+                                ESP_LOGI(COMMON_TAG, "http crc success: %s\n", common_setting.net_pairing_info.http_url);
+                            }
+                            else
+                            {
+                                http_end=1;
+                                memset(common_setting.net_pairing_info.http_url, 0x00, HTTP_URL_MAX_LEN);
+                                net_pairing_reply.content[5] |= 0x20;
+                                common_setting.net_pairing_info.http_url_flag = 0;
+                                ESP_LOGI(COMMON_TAG, "http CRC: =%04x recv=%04x\n", calc_crc, packet_crc);
+                            }
+                        }
+                    }
+                    else if(data[4] == 1) // token
+                    {
+                        if(start_byte == 0)//第一包数据
+                        {
+                            token_end=0;
+                            token_end_flag=1;//本次接收的包是token包的第一包
+                            memset(common_setting.net_pairing_info.http_token, 0x00, NET_PAIRING_INFO_MAX_LEN+1);
+                        }
+
+                        // 
+                        size_t copy_len = MIN(packet_bytes, NET_PAIRING_INFO_MAX_LEN - start_byte);
+                        if(copy_len > 0)
+                        {
+                            memcpy(&common_setting.net_pairing_info.http_token[start_byte], &data[13], copy_len);
+                        }
+
+                        // ==========================================
+                        // 
+                        // ==========================================
+                        if(data[9] == 1)
+                        {
+                            // 
+                            total_len = start_byte + copy_len;
+
+                            //
+                            if(total_len > NET_PAIRING_INFO_MAX_LEN)
+                                total_len = NET_PAIRING_INFO_MAX_LEN;
+                        }
+
+                        // 字符串结束
+                        uint32_t str_end = start_byte + copy_len;
+                        if (str_end >= NET_PAIRING_INFO_MAX_LEN)
+                            str_end = NET_PAIRING_INFO_MAX_LEN;
+                        common_setting.net_pairing_info.http_token[str_end] = '\0';
+
+                        if(data[9] == 1)
+                        {
+                            // 
+                            uint16_t calc_crc = Crc16_Modbus_Cal((uint8_t*)common_setting.net_pairing_info.http_token, total_len);
+                            uint16_t packet_crc = (data[7] << 8) | data[8];
+
+                            ESP_LOGI(COMMON_TAG, "correct token: %s (len=%u)\n", common_setting.net_pairing_info.http_token, total_len);
+                            //本次结束后校验出错了,然后又下发最后一包不完整的数据
+                            if(token_end == 1 || token_end_flag == 0)//上一次已经接收完成了一个完整的http url包了,但校验失败了,APP又继续发了一个新的http url包过来,那么这一次即使校验成功了,也不应该认为http url接收完成了,因为可能是APP在重试发送同一个有问题的http url包,而不是在发送一个新的正确的http url包,所以需要等到连续两次接收完成的http url包都校验成功了,才认为http url接收完成了
+                            {
+                                ESP_LOGI(COMMON_TAG, "token url data error\n");
+                                token_end=0;
+                                memset(common_setting.net_pairing_info.http_token, 0x00, NET_PAIRING_INFO_MAX_LEN);
+                                net_pairing_reply.content[5] |= 0x20;
+                                break;//提前退出,等待APP重新发送一个新的http url包过来
+                            }
+                            token_end_flag=0;//一开始为0说明不是第一包不做数据处理,当接收到第一包数据时把token_end_flag置为1,
+                            if(packet_crc == calc_crc)
+                            {
+                                token_end=0;
+                                common_setting.net_pairing_info.http_token_length = total_len;
+                                common_setting.net_pairing_info.http_token_flag = 1;
+                                ESP_LOGI(COMMON_TAG, "tokencrc success  %s",common_setting.net_pairing_info.http_token);
+                            }
+                            else
+                            {
+                                token_end=1;
+                                memset(common_setting.net_pairing_info.http_token, 0x00, NET_PAIRING_INFO_MAX_LEN);
+                                net_pairing_reply.content[5] |= 0x20;
+                                common_setting.net_pairing_info.http_token_flag = 0;
+                                ESP_LOGI(COMMON_TAG, "token CRC:=%04x recv=%04x", calc_crc, packet_crc);
+                            }
+                        }
+                    }
+
+                    else if(data[4] == 2) // user_id
+                    {
+                        //  ESP_LOGI(COMMON_TAG, "net pairing 0x16 user_id overflow: start=%u packet=%u", start_b);
+                        // if(start_byte >= sizeof(int) || packet_bytes > sizeof(int) || (size_t)start_byte + packet_bytes > sizeof(int))
+                        // {
+                        //     ESP_LOGI(COMMON_TAG, "net pairing 0x16 user_id overflow: start=%u packet=%u", start_byte, packet_bytes);
+                        //     net_pairing_reply.content[5] |= 0x10;
+                        //     break;
+                        // }
+                        if(start_byte == 0)
+                        {
+                            common_setting.net_pairing_info.user_id=0;
+                        }
+                        uint16_t copy_len = (packet_bytes < (sizeof(int) - start_byte)) ? packet_bytes : (sizeof(int) - start_byte);
+                        memcpy(&common_setting.net_pairing_info.user_id, &data[13], copy_len);
+                    
+                        if(data[9] == 1)
+                        {
+                            if(total_len > sizeof(int))
+                            {
+                                total_len = sizeof(int);
+                            }
+                            uint16_t calc_crc = Crc16_Modbus_Cal((uint8_t*)&common_setting.net_pairing_info.user_id, total_len);
+                            uint16_t packet_crc = (data[7] << 8) | data[8];
+
+                            ESP_LOGI(COMMON_TAG, "user_id: %08x\n", (unsigned int)common_setting.net_pairing_info.user_id);
+                            
+                             //本次结束后校验出错了,然后又下发最后一包不完整的数据
+                            if(packet_crc == calc_crc)
+                            {
+                                common_setting.net_pairing_info.user_id_flag = 1;
+                                ESP_LOGI(COMMON_TAG, "user_id: %08x\n", (unsigned int)common_setting.net_pairing_info.user_id);
+                            }
+                            else
+                            {
+                                common_setting.net_pairing_info.user_id=0;
+                                common_setting.net_pairing_info.user_id_flag = 0;
+                                // 校验失败
+                                net_pairing_reply.content[5] |= 0x20;
+                                ESP_LOGI(COMMON_TAG, "BLE user id crc16 err:%04x %04x\n",packet_crc, calc_crc);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        // 类型错误
+                        net_pairing_reply.content[5] |= 0x30;
+                        ESP_LOGI(COMMON_TAG, "net pair info type err\n");
+                    }
+                }
+                else //当前包的大小加上上一包的数据大小超出了总数据的大小 异常数据处理0x00
+                {
+                    if(data[4] == 0) // http配网服务器地址
+                    {
+                        memset(common_setting.net_pairing_info.http_url, 0x00, NET_PAIRING_INFO_MAX_LEN);
+                    }
+                    else if(data[4] == 1) // token
+                    {
+                        memset(common_setting.net_pairing_info.http_token, 0x00, NET_PAIRING_INFO_MAX_LEN);
+                    }
+                    else if(data[4] == 2) // user_id
+                    {
+                        common_setting.net_pairing_info.user_id = 0;
+                    }
+                    // 失败
+                    net_pairing_reply.content[5] |= 0x10;
+                    ESP_LOGI(COMMON_TAG, "total_len err:%d %d %"PRIu16, start_byte, packet_bytes, total_len);
+                }
+            }
+            break;
+
+            // 其它命令
+            case 0x20:
+            {
+                if (len < 5) break;
+                if(data[4] == 1) // 停止配网
+                {
+                    // common_setting.net_pairing_info.net_pair_cooldown = 0;
+                    // common_setting.net_pairing_info.http_url_flag = 0;
+                    // common_setting.net_pairing_info.http_token_flag = 0;
+                    // common_setting.net_pairing_info.user_id_flag = 0;
+                    net_pairing_reply.content[0] = 1;//0成功 1失败
+                    net_pairing_reply.content[1] = data[4]; //1停止配网
+                    net_pairing_reply.len = 2;
+                    net_pairing_reply.send_flag = 1;
+                    //关闭蓝牙取消配网动作
+                    xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);//停止配网,除非重启设备或者app下发wifi信息重新配网
+                    ESP_LOGI(COMMON_TAG, "net pairing stop by app\n");
+                }
+            }
+            break;
+            //蓝牙开关
+            case 0x21:
+            {
+                if (len < 5) break;
+                if(data[4] == 1) // 开启蓝牙配网
+                {
+                    if(common_setting.ble_status.ble_state == 0){
+                        xEventGroupSetBits(ble_event_group, BLE_ON_BIT);
+                    }
+                    
+                    ESP_LOGI(COMMON_TAG, "ble on by app\n");
+                }
+                else if(data[4] == 0) // 关闭蓝牙配网
+                {
+                    xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);
+                    ESP_LOGI(COMMON_TAG, "ble off by app\n");
+                }
+            }
+            break;
+            // 固件升级
+            case CMD1_IAP_CHIP6:
+            {
+                
+            }
+            break;
+            case COMMON_BLE_USB_UPDATE_INFOR_CMD:
+            {
+                for(uint16_t i=0;i<(sizeof(FW_FILE_HEADER_T));i++)
+                {
+                    printf("%c", ((char*)&firmware_header)[i]);
+                }
+            }
+            break;
+            // 欺骗编译器,勿删
+            case COMMON_BLE_END_CMD:
+            {
+                
+                switch (data[4])
+                {
+                    case 0x01://连接wifi测试
+                        common_setting.wifi_status.cur_ssid_len = 32;
+                        memset(common_setting.wifi_status.cur_ssid,0x00,32);
+                        memcpy(common_setting.wifi_status.cur_ssid, &data[5], 32);
+
+                        common_setting.wifi_status.cur_pwd_len = 64;
+                        memset(common_setting.wifi_status.cur_pwd,0x00,64);
+                        memcpy(common_setting.wifi_status.cur_pwd,  &data[5+32], 64);
+                        ESP_LOGI(COMMON_TAG, "wifi fftest ssid len: %d\n", 32);
+                        ESP_LOG_BUFFER_CHAR(COMMON_TAG, common_setting.wifi_status.cur_ssid, 32);
+                        ESP_LOGI(COMMON_TAG, "wifi fftest len: %d\n", 64);
+                        ESP_LOG_BUFFER_CHAR(COMMON_TAG, common_setting.wifi_status.cur_pwd, 64);
+                        // common_setting.net_pairing_info.http_url_flag=1;
+                        // common_setting.net_pairing_info.http_token_flag=1;
+                        // common_setting.net_pairing_info.user_id_flag=1;
+                        #if ENABLE_WIFI_FUNC
+                        Wifi_Queue_Send(HOST_TYPE_BLE,1,0);
+                        #endif
+                        break;
+                    
+                    default:
+                        break;
+                }
+                
+            }
+        }
+
+        if(net_pairing_reply.send_flag) 
+        {
+            Ble_Pairing_Reply(net_pairing_reply.cmd, net_pairing_reply.content, net_pairing_reply.len, host_type);
+        }
+    }
+    else if(data[0] == FRAMEHEAD_PANEL_TO_IOT)
+    {
+        if(len < 4 || len > UART_BUF_SIZE)
+        {
+            ESP_LOGE(COMMON_TAG, "net pairing len err:%d\n", len);
+        }
+        else if(Crc8_ROHC_Cal(&data[1], len-2) != data[len-1])
+        {
+            ESP_LOGE(COMMON_TAG, "net pairing crc8 err:%02x %02x\n", Crc8_ROHC_Cal(&data[1], len-2), data[len-1]);
+        }
+    }
+    else if(data[0] == FRAMEHEAD_APP_TO_ESP)
+    {
+        //发送调试数据不需要crc校验
+        ESP_LOGI(COMMON_TAG, "no need checkcrc recv %d bytes:cmd %0x",len, data[1]);
+        ESP_LOG_BUFFER_HEX(COMMON_TAG, data, len);
+        BLE_SEND_REPLY_T net_pairing_reply = {0};
+        memset(&net_pairing_reply, 0x00, sizeof(BLE_SEND_REPLY_T));
+        char wifi_ssid[10+1] = {0};
+        char wifi_pwd[15+1] = {0};
+        switch (data[1])
+        {
+            case 0xFE://fe + cmd+cmd1+dataLen+data+crc8  
+            {
+                
+
+                switch (data[4])
+                {
+                    case 0x01://调试app下发wifi名称和密码重新连接新的wifi,不需要加密
+                        //调试指令
+                        if (len < 20)
+                        {
+                            ESP_LOGW(COMMON_TAG, "APP 0xFE len too short %u", len);
+                            break;
+                        }
+                        // memcpy(wifi_ssid, &data[5], 10);
+                        // wifi_ssid[10] = '\0';
+                        // memcpy(wifi_pwd, &data[15], 15);
+                        // wifi_pwd[15] = '\0';
+                        // common_setting.wifi_status.cur_ssid_len = 10;
+                        // memcpy(common_setting.wifi_status.cur_ssid, wifi_ssid, 10);
+                        // common_setting.wifi_status.cur_pwd_len = 15;
+                        // memcpy(common_setting.wifi_status.cur_pwd, wifi_pwd, 15);
+                        // ESP_LOGI(COMMON_TAG, "wifi ssid len: %d", 10);
+                        // ESP_LOG_BUFFER_CHAR(COMMON_TAG, common_setting.wifi_status.cur_ssid, 10);
+                        // ESP_LOGI(COMMON_TAG, "wifi pwd len: %d", 15);
+                        // ESP_LOG_BUFFER_CHAR(COMMON_TAG, common_setting.wifi_status.cur_pwd, 15);
+                        // ESP_LOGI(COMMON_TAG, "wifi test start");
+                        // Wifi_Queue_Send(host_type, 1, 0);
+                        /* code */
+                        break;
+                
+                    default:
+                        break;
+                }
+                
+            }
+            break;
+        
+            default:
+                break;
+        }
+    }
+}
+
+//配网状态回复
+void network_request_replay(uint8_t status)
+{
+    //失败
+    if(!common_setting.ble_status.ble_state)
+    {
+        ESP_LOGI(COMMON_TAG, "network_request_replay is not connect\n");
+        return;
+    }
+    
+
+    static BLE_SEND_REPLY_T wifi_pairing_reply={0};
+    wifi_pairing_reply.send_flag = 1;
+    wifi_pairing_reply.cmd = COMMON_BLE_NETWORK_STATUS_REPLAY_CMD;
+    wifi_pairing_reply.len = 1;
+    wifi_pairing_reply.content[0] = status;//下载证书失败
+    Ble_Pairing_Reply(wifi_pairing_reply.cmd, wifi_pairing_reply.content, wifi_pairing_reply.len, HOST_TYPE_BLE);
+    // Check_Host_Type(wifi_pairing_reply.cmd, wifi_pairing_reply.content, wifi_pairing_reply.len, HOST_TYPE_BLE);
+}
+
+#include "esp_chip_info.h"
+//获取模组的芯片型号
+static const char *CHIP_LOG = "CHIP_TAG";
+void get_chip_info(char *chip_id,uint8_t *chip_len)
+{
+    // 定义 + 获取芯片信息
+    esp_chip_info_t chip_info;
+    esp_chip_info(&chip_info);
+
+    // 打印型号(数字 → 转成文字)
+    char *chip_name = "Unknown";
+    switch(chip_info.model) {
+       
+        case CHIP_ESP32C2:    chip_name = "ESP32-C2";   break;
+        default:
+        break;
+    }
+    uint8_t len = strlen(chip_name);
+    *chip_len=len;
+    memcpy(chip_id,chip_name,strlen(chip_name));
+    // 最终清晰打印
+    ESP_LOGI(CHIP_LOG, "chip_name: %s", chip_name);
+}
\ No newline at end of file
diff --git a/main/project_common.h b/main/project_common.h
new file mode 100644 (file)
index 0000000..7860a14
--- /dev/null
@@ -0,0 +1,473 @@
+#ifndef _PROJECT_COMMON_H_
+#define _PROJECT_COMMON_H_
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+#include <stddef.h>
+
+#include "esp_wifi.h"
+#include "esp_system.h"
+#include "nvs_flash.h"
+#include "esp_event.h"
+#include "esp_netif.h"
+#include "protocol_examples_common.h"
+#include "esp_log.h"
+
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/semphr.h"
+#include "freertos/queue.h"
+
+#include "user_flash.h"
+#include "aes.h"
+#include "wifi.h"
+#include "lwip/sockets.h"
+#include "lwip/dns.h"
+#include "lwip/netdb.h"
+
+#include "esp_http_client.h"
+#include "esp_crt_bundle.h"
+
+#include "cJSON.h"
+
+#include "mqtt_client.h"
+
+
+#include "esp_mac.h"
+#include "ble.h"
+#include "gap.h"
+#include "gatt_svc.h"
+
+#include "driver/gpio.h"
+#include "driver/uart.h"
+#include "uart.h"
+
+#include "crc.h"
+
+#include "iap.h"
+#include "esp_ota_ops.h"
+
+
+
+// 定义原始版本
+#define FW_VERSION_B        0x0001
+
+// 安全检查:如果大于 9999,强制改为 0x270F
+#if (FW_VERSION_B > 9999)
+#undef  FW_VERSION_B
+#define FW_VERSION_B        0x270F
+#endif
+
+// 最终对外版本
+#define FW_VERSION                             (FW_VERSION_B)          // 固件版本 //10.22         // 固件版本 //10.22         // 固件版本 //10.22         // 固件版本 //0A00 10.00 10.21
+#define BUILD_VERSION                  (0x0007)        // 编译测试版本
+#define DEVICE_VID                  (0x36E6)        // 设备厂商代码
+#define DEVICE_PID                  (0xEC01)        // 设备型号代码
+#define LWIP_LOCAL_HOSTNAME         "PXN-Device"    // WIFI本地主机名称
+#define FW_HEADER_CODE_SIZE                    12
+#define FW_HEADER_CODE                         "WGTL_ESP32C2"
+#define IOT_ENABLE                   1
+#define USER_TEST_ENABLE             0
+#define BLE_TEST_WIFI_CONNECT_ENABLE 1//BLE下发wifixin不需要做htttp token user_id校验
+#define IS_CLOSE_BLE                 0  //是否关闭蓝牙广播暂时测试不关闭 一直广播
+#define NIMBLE_NETWORK_MODE             1 //1连上wifi不关闭蓝牙配网 直接请求http 0连上wifi关闭配网 再请求http为了节省空间
+
+#define WIFI_SSID_MAX_LEN            32
+#define WIFI_PWD_MAX_LEN             64
+
+#define NET_PAIRING_INFO_MAX_LEN    256
+#define SERIAL_NUMBER_MAX_LEN       32
+#define MQTT_SUB_URL_MAX_LEN       128
+// WIFI
+#if CONFIG_ESP_STATION_EXAMPLE_WPA3_SAE_PWE_HUNT_AND_PECK
+#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HUNT_AND_PECK
+#define EXAMPLE_H2E_IDENTIFIER ""
+#elif CONFIG_ESP_STATION_EXAMPLE_WPA3_SAE_PWE_HASH_TO_ELEMENT
+#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HASH_TO_ELEMENT
+#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID
+#elif CONFIG_ESP_STATION_EXAMPLE_WPA3_SAE_PWE_BOTH
+#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_BOTH
+#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID
+#endif
+#if CONFIG_ESP_WIFI_AUTH_OPEN
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_OPEN
+#elif CONFIG_ESP_WIFI_AUTH_WEP
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WEP
+#elif CONFIG_ESP_WIFI_AUTH_WPA_PSK
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_PSK
+#elif CONFIG_ESP_WIFI_AUTH_WPA2_PSK
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK
+#elif CONFIG_ESP_WIFI_AUTH_WPA_WPA2_PSK
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_WPA2_PSK
+#elif CONFIG_ESP_WIFI_AUTH_WPA3_PSK
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA3_PSK
+#elif CONFIG_ESP_WIFI_AUTH_WPA2_WPA3_PSK
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_WPA3_PSK
+#elif CONFIG_ESP_WIFI_AUTH_WAPI_PSK
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WAPI_PSK
+#endif
+
+
+
+
+#define MAIN_LOOP_INTERVAL  50
+typedef enum
+{
+    COMMON_BLE_CMD1 = 0x00,//预留未使用
+    COMMON_BLE_MCU_INFOR_CMD=0x01,//主控信息
+    COMMON_BLE_PID_MAC_CMD = 0x02,//PID和MAC地址
+    COMMON_BLE_NETWORK_STATUS_QUERY_CMD = 0x03,//配网查询
+    COMMON_BLE_NETWORK_STATUS_REPLAY_CMD = 0x04,//配网回复
+
+    COMMON_BLE_ESP_MAC_CMD = 0x0A,//wifimac地址
+    COMMON_BLE_WIFI_INFOR_CMD = 0x0B,//wifi信息
+    COMMON_BLE_FW_VERSION_CMD = 0x0C,//wifi模组版本号
+    
+    COMMON_BLE_CLOSE_HEART_CMD = 0x0F,//关闭心跳检查
+
+    COMMON_BLE_WIFI_SCAN_LIST_CMD = 0x14,//wifi扫描列表
+    COMMON_BLE_WIFI_SSID_PWD_CMD =0x15,//WIFI 密码和名称
+    COMMON_BLE_NETWORK_AUTHENT_CMD = 0x16, //network authentication 
+
+
+
+
+
+
+
+    COMMON_BLE_USB_UPDATE_INFOR_CMD = 0xFE,
+    COMMON_BLE_END_CMD = 0xFF,
+
+
+}COMMON_BLE_CMD_E;
+
+typedef enum
+{
+    COMMON_MQTT_STATUS = 0x00,//MQTT状态
+
+
+}COMMON_STATUS_E;
+
+
+typedef enum
+{
+    COMMON_NONE_BIT = 0,
+    COMMON_RESET_BIT = BIT0,
+    COMMON_HTTP_DOWNLOAD_BIT = BIT1,
+    COMMON_MQTT_CONNECT_BIT = BIT2,
+    COMMON_MQTT_DISCONNECT_BIT = BIT3,
+    COMMON_MQTT_INIT_BIT = BIT4,
+    COMMON_HTTPS_OTA_BIT = BIT5,
+}COMMON_EVENT_GROUP_BIT_E;
+
+typedef enum
+{
+    HOST_TYPE_LOCAL = 0,
+    HOST_TYPE_USB,
+    HOST_TYPE_UART,
+    HOST_TYPE_BLE,
+    HOST_TYPE_HTTP,
+    HOST_TYPE_MQTT,
+}HOST_TYPE_E;
+
+//配网状态
+typedef enum
+{
+    NETWORK_HTTPS_DOWNLOAD_CERTIFICATE_OK  = 1,
+    NETWORK_HTTPS_DOWNLOAD_CERTIFICATE_FAILED,
+    NETWORK_HTTPS_GET_SERIALNUMBER_OK,
+    NETWORK_HTTPS_GET_SERIALNUMBER_FAILED,
+    NETWORK_HTTPS_PUT_DEVICE_INFO_OK,
+    NETWORK_HTTPS_PUT_DEVICE_INFO_FAILED,
+    NETWORK_HTTPS_GET_CER_URL_OK,
+    NETWORK_HTTPS_GET_CER_URL_FAILED,
+    NETWORK_CONECT_WIFI_TIMEOUT_REPLAY,//连接wifi超时
+}NETWORK_REQUEST_STATE_T;
+
+
+typedef enum
+{
+    SSL_CLIENT_CRT,
+    SSL_CLIENT_KEY,
+    SSL_SERVER_CRT,
+}CERT_TYPE_E;
+#define SSL_CERT_BUFFER_SIZE 2560
+typedef union
+{
+    struct
+    {
+        uint16_t length;
+        uint8_t content[SSL_CERT_BUFFER_SIZE-2];
+    };
+    uint8_t buffer[SSL_CERT_BUFFER_SIZE];
+}__attribute__((packed)) SSL_CERT_T;
+
+typedef union
+{
+    struct
+    {
+        uint8_t wifi_info_flag:1;
+        uint8_t serial_number_flag:1;
+        uint8_t device_id_flag:1;
+        uint8_t reserved:6;
+
+        uint8_t wifi_ssid_len;
+        uint8_t wifi_ssid[WIFI_SSID_MAX_LEN+1];
+        uint8_t wifi_pwd_len;
+        uint8_t wifi_pwd[WIFI_PWD_MAX_LEN+1];
+        uint8_t serial_number_len;
+        uint8_t serial_number[SERIAL_NUMBER_MAX_LEN+1];
+        uint8_t device_id_len;
+        uint8_t device_id[32];
+        uint8_t mqtt_url_len;
+        char mqtt_sub_url[MQTT_SUB_URL_MAX_LEN+1];
+    };
+}__attribute__((packed)) NET_INFO_T;
+
+typedef struct
+{
+    NET_INFO_T net_info;
+    SSL_CERT_T ssl_cert[3];
+}__attribute__((packed)) COMMON_STORAGE_T;
+
+#define PRODUCT_NAME_MAX_LEN 23
+typedef struct
+{
+    uint16_t vid;
+    uint16_t pid;
+    uint16_t fw_version;
+    uint16_t build_version;
+    uint8_t product_name_len;
+    char product_name[PRODUCT_NAME_MAX_LEN+1]; // 产品名称最长23字节
+}__attribute__((packed)) MCU_INFO_T;
+
+typedef enum
+{
+    NET_PAIRING_BLE_CONFIGURING,
+    NET_PAIRING_WIFI_CONFIGURING,
+    NET_PAIRING_WIFI_CONNECTTING,
+    NET_PAIRING_WIFI_CONNECTED_AP,
+    NET_PAIRING_WIFI_CONNECTED_SERVER,
+}NET_PAIRING_STATUS_E;
+
+typedef struct
+{
+    uint8_t sync_flag;
+    int8_t time_zone;
+    uint64_t real_time;
+    uint64_t system_time;
+}__attribute__((packed)) TIMESTAMP_T;
+
+typedef struct
+{
+    uint8_t ble_state; // 0:关闭   1:广播   2:已连接
+    uint8_t nimble_flag;//1打开配网 0关闭配网
+}__attribute__((packed)) BLE_STATUS_T;
+
+typedef struct
+{
+    uint8_t wifi_mode; // 0:关闭   1:扫描   2:打开
+
+    uint8_t wifi_state:1; // 0:disconnected   1:connected
+    uint8_t connect_mode:2; // 1:厂测模式   2:用户配网模式   3:正常连接
+    uint8_t reserved:5;
+
+    uint8_t net_pair_host;
+    uint8_t net_pair_encrypt_profile; // 0:明文   1:AES-128 ECB
+
+    uint8_t cur_ssid_len;
+    uint8_t cur_pwd_len;
+    char cur_ssid[WIFI_SSID_MAX_LEN+1];
+    char cur_pwd[WIFI_PWD_MAX_LEN+1];
+
+    int32_t rssi;
+}__attribute__((packed)) WIFI_STATUS_T;
+
+#define   HTTP_URL_MAX_LEN     128
+#define   HTTP_TOKEN_MAX_LEN     255
+typedef struct
+{
+    uint8_t serial_number_flag:1;
+    uint8_t device_id_flag:1;
+    uint8_t http_url_flag:1;
+    uint8_t http_token_flag:1;
+    uint8_t user_id_flag:1;
+    uint8_t mqtt_sub_url_flag:1;
+    uint8_t reserved:2;
+
+    // int32_t net_pair_cooldown;
+
+    uint16_t serial_number_length;
+    uint16_t http_url_length;
+    uint16_t http_token_length;
+    uint16_t mqtt_sub_url_length;
+    
+    char serial_number[SERIAL_NUMBER_MAX_LEN+1];
+    int device_id;
+    char http_url[HTTP_URL_MAX_LEN+1];
+    char http_token[NET_PAIRING_INFO_MAX_LEN+1];
+    uint32_t user_id;
+    char mqtt_sub_url[MQTT_SUB_URL_MAX_LEN+1];
+}__attribute__((packed)) NET_PAIR_INFO_T;
+typedef struct
+{
+    uint8_t https_ota_start_flag;//需要升级1 0不需要升级
+    
+    
+}__attribute__((packed)) HTTPS_OTA_CONFIG_INFO_T;
+
+typedef struct
+{
+    uint8_t mqtt_connect_flag;//0 无连接 1已连接
+    uint8_t mqtt_sub_flag; //1订阅成功 0订阅失败
+    uint8_t mqtt_start_flag;//已经配网成功了开始连接mqtt表示
+    
+}__attribute__((packed)) MQTT_CONFIG_INFO_T;
+
+typedef struct
+{
+    uint8_t heart_beat_enable:1;
+    uint8_t mcu_info_got_flag:1;
+    uint8_t reserved:6;
+    
+    // UNIVERSAL
+    uint32_t heart_beat_interval; // ms
+    MCU_INFO_T mcu_info;
+    uint8_t net_pairing_status;
+    TIMESTAMP_T timestamp;
+
+    // BLE
+    BLE_STATUS_T ble_status;
+    uint32_t ble_enable_tick;
+
+    // WIFI
+    WIFI_STATUS_T wifi_status;
+    wifi_config_t wifi_config;
+    
+    // NET PAIR
+    NET_PAIR_INFO_T net_pairing_info;
+
+    // MQTT
+    esp_mqtt_client_config_t mqtt_cfg;
+    esp_mqtt_client_handle_t mqtt_client_handle;
+
+    HTTPS_OTA_CONFIG_INFO_T https_ota_cfg;
+    MQTT_CONFIG_INFO_T mqtt_user_cfg;
+}COMMON_SETTING_T;
+
+
+
+// #define BLE_QUEUE_LENGTH         2
+// #define BLE_QUEUE_ITEM_SIZE      8
+// extern uint8_t ble_queue_storage[BLE_QUEUE_LENGTH*BLE_QUEUE_ITEM_SIZE];
+// extern QueueHandle_t ble_queue_handle;
+// extern StaticQueue_t ble_queue_buffer;
+// extern uint8_t ble_queue_write[BLE_QUEUE_ITEM_SIZE];
+#define BLE_ON_BIT          BIT0
+#define BLE_OFF_BIT         BIT1
+extern EventGroupHandle_t ble_event_group;
+
+extern EventGroupHandle_t common_event_group;
+
+extern COMMON_STORAGE_T common_storage;
+extern COMMON_SETTING_T common_setting;
+
+#define ESP_PROTOCOL_MAX_BUF_SZIE         512
+
+//设备接收数据解析并处理后回复给发送方的结构体,包含协议头、命令、长度、数据内容等
+typedef struct
+{
+    uint8_t send_flag:1;
+    uint8_t reserved:7;
+
+    union
+    {
+        struct
+        {
+            uint8_t cmd;
+            uint16_t len;
+            uint8_t content[ESP_PROTOCOL_MAX_BUF_SZIE-4];
+            // uint8_t crc;
+        };
+        uint8_t buffer[ESP_PROTOCOL_MAX_BUF_SZIE-2];
+    };
+}__attribute__((packed)) BLE_SEND_REPLY_T;
+
+//设备接收BLE的原始数据size + BUFFER
+typedef struct
+{
+    uint16_t size;
+    uint8_t buffer[ESP_PROTOCOL_MAX_BUF_SZIE];
+}__attribute__((packed)) BLE_RECV_DATA_T;
+
+#define FRAMEHEAD_APP_TO_ESP                           (0xFF)
+#define FRAMEHEAD_ESP_TO_APP                           (0xFE)
+
+void Ble_Pairing_Reply(uint8_t cmd, uint8_t* pbuf, uint16_t len, uint8_t host_type);
+void Ble_Pairing_Handle(uint8_t *data ,uint16_t len, uint8_t host_type);
+
+void Check_Host_Type(uint8_t cmd, uint8_t* pbuf, uint16_t len, uint8_t host_type);
+
+
+
+typedef struct
+{
+       uint8_t enable; // 1:认证前   2:认证后   3:写入后
+       uint8_t content[15];
+}__attribute__((packed)) FW_FILE_HEADER_CMD_T;
+
+typedef struct
+{
+    uint64_t header_magic;
+    uint32_t reserved0;
+    uint16_t file_type;
+    uint8_t protocol_version;
+    uint8_t device_type;
+    
+    uint32_t code_size;
+    uint8_t reserved1[4];
+    uint16_t single_write_page_size;
+    uint8_t reserved2[6];
+
+    char code[64];
+    
+    uint16_t vid_app;
+    uint16_t pid_app;
+    uint16_t vid_boot;
+    uint16_t pid_boot;
+    uint8_t reserved3[8];
+    
+    uint16_t fw_version;
+    uint16_t build_version;
+    uint8_t reserved4[12];
+    
+    uint32_t write_erase_start_addr;
+    uint32_t write_erase_size;
+    uint32_t file_start_addr;
+    uint32_t file_size;
+    
+    union
+    {
+        // 额外命令
+        struct
+        {
+            FW_FILE_HEADER_CMD_T cmd[7];
+        }header_type_1;
+        
+        uint8_t data[112];
+    };
+}__attribute__((packed)) FW_FILE_HEADER_T;
+
+
+
+
+
+
+
+void network_request_replay(uint8_t status);
+
+void get_chip_info(char *chip_id,uint8_t *chip_len);
+
+#endif
diff --git a/main/uart.c b/main/uart.c
new file mode 100644 (file)
index 0000000..38913bd
--- /dev/null
@@ -0,0 +1,428 @@
+#include "project_common.h"
+#include "user_mqtt.h"
+#include "uart.h"
+#include "ble.h"
+static const char *UART_TAG = "UART_TASK";
+static const char *COMMON_TAG = "UART_RECV";
+// static const int uart_rx_max = UART_BUF_SIZE;
+static uint8_t uart_rx_data[UART_BUF_SIZE] = {0};
+
+uint8_t uart_tx_queue_storage[UART_TX_QUEUE_LENGTH*UART_TX_QUEUE_ITEM_SIZE];
+QueueHandle_t uart_tx_queue_handle;
+StaticQueue_t uart_tx_queue_buffer;
+
+//
+uint8_t uart_rx_queue_storage[UART_RX_QUEUE_LENGTH*UART_RX_QUEUE_ITEM_SIZE];
+QueueHandle_t uart_rx_queue_handle;
+StaticQueue_t uart_rx_queue_buffer;
+
+// UART
+TaskHandle_t uart_task_handler;
+StackType_t uart_task_stack[UART_TASK_STACK];
+StaticTask_t uart_task_tcb;
+
+void Uart_Initialize(void)
+{
+    const uart_config_t uart_config = {
+        .baud_rate = 921600,//115200,
+        .data_bits = UART_DATA_8_BITS,
+        .parity = UART_PARITY_DISABLE,
+        .stop_bits = UART_STOP_BITS_1,
+        .flow_ctrl = UART_HW_FLOWCTRL_DISABLE,
+        .source_clk = UART_SCLK_DEFAULT,
+    };
+    uart_param_config(UART_NUM_1, &uart_config);
+    uart_set_pin(UART_NUM_1, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
+    uart_driver_install(UART_NUM_1, UART_BUF_SIZE, 0, 0, NULL, 0);
+
+    uart_rx_queue_handle = xQueueCreateStatic(UART_RX_QUEUE_LENGTH, UART_RX_QUEUE_ITEM_SIZE, uart_rx_queue_storage, &uart_rx_queue_buffer);
+}
+
+void Uart_Tx_Queue_Process(void)
+{
+    static UART_RECV_DATA_T uart_tx_data = {0};
+    if(xQueueReceive(uart_tx_queue_handle, &uart_tx_data, 0) == pdTRUE)
+    {
+        taskENTER_CRITICAL(1);
+        uart_write_bytes(UART_NUM_1, uart_tx_data.buffer, uart_tx_data.size);
+        taskEXIT_CRITICAL(1);
+
+        // ESP_LOGI(UART_TAG, "Send %d bytes: ", uart_tx_data.size);
+        // ESP_LOG_BUFFER_HEX(UART_TAG, uart_tx_data.buffer, uart_tx_data.size);
+    }
+}
+void Uart_Rx_Queue_Process(void)
+{
+    static UART_RECV_DATA_T uart_rx_tmp_struct = {0};
+    if(xQueueReceive(uart_rx_queue_handle, &uart_rx_tmp_struct, 0) == pdTRUE)
+    {
+
+        // 这里可以对uart_rx_temp进行解析,处理粘包/断包等问题
+        // ESP_LOGI(UART_TAG, "Received %d bytes: ", uart_rx_temp.size);
+        // ESP_LOG_BUFFER_HEX(UART_TAG, uart_rx_temp.buffer, uart_rx_temp.size);
+        uint16_t uart_buf_offset = 0;
+        while(uart_buf_offset < uart_rx_tmp_struct.size)
+        {
+            if(uart_rx_tmp_struct.size > UART_BUF_SIZE)
+            {
+                break;
+            }
+            // ESP_LOGI(COMMON_TAG, "uart_buf_offset recv2 %d %d",uart_buf_offset,uart_rx_size);
+            if(uart_rx_tmp_struct.buffer[uart_buf_offset] == FRAMEHEAD_PANEL_TO_IOT)
+            {
+                //uart_rx_data[uart_buf_offset+1] //data
+                //uart_rx_data[uart_buf_offset+2] len
+                //uart_rx_data[uart_buf_offset]+2-1) crc
+                // Crc8_ROHC_Cal(&data[1], len-2) == data[len-1]
+                if(uart_buf_offset+4 > uart_rx_tmp_struct.size || uart_rx_tmp_struct.size < 4) 
+                {
+                    break;
+                }
+                uint8_t len = uart_rx_tmp_struct.buffer[uart_buf_offset+2];//长度字段
+                //f2 00 00 c2 f2 00 01 0f c2
+                //f2 00 01 0f c2
+                uint16_t full_len = 1+1+1+len+1;//header+cmd+len类型+实际数据的长度+crc 无论len是否为0 full_len一定要大于4
+                if(len == 0)
+                {
+                    full_len = 1+1+1+1;//header+cmd+len类型+crc
+                }else{
+                    full_len = 1+1+1+len+1;//header+cmd+len类型+实际数据的长度+crc
+                }
+                if(uart_buf_offset + full_len > UART_BUF_SIZE)//254+4 > 256 //防止溢出
+                {
+                    break;
+                }
+                // ESP_LOGI(COMMON_TAG, "uart_buf_offset recv3 %d %d",uart_buf_offset,uart_rx_size);
+                //if(crcr8(data,len) == crc)
+                //f2 00 00 00 crc uart_buf_offset=0
+                //f2 00 01 0f c2
+                
+                uint8_t crc_cal = Crc8_ROHC_Cal(&uart_rx_tmp_struct.buffer[uart_buf_offset + 1],len+2);//00 cmd+len类型
+                uint8_t crc_pkt = uart_rx_tmp_struct.buffer[uart_buf_offset + full_len-1];//1+1+2=4
+                if(crc_cal == crc_pkt)
+                {
+                    // ESP_LOGI(COMMON_TAG, "uart_buf_offset recv5 %d %d",uart_buf_offset,uart_rx_size);
+                    Uart_Pairing_Handle(&uart_rx_tmp_struct.buffer[uart_buf_offset],full_len, HOST_TYPE_UART);
+
+                }
+                //header+cmd+len+crc
+                uart_buf_offset=uart_buf_offset+full_len;
+            }
+            else
+            {
+                uart_buf_offset++;
+            }
+        }
+        
+    
+    }
+
+
+
+
+}
+void Uart_Task(void *arg)
+{
+    esp_log_level_set(UART_TAG, ESP_LOG_INFO);
+    memset(uart_rx_data, 0x00, sizeof(uart_rx_data));
+    static UART_RECV_DATA_T uart_rx_data_struct = {0};
+
+    while (1)
+    {
+        const int uart_rx_size = uart_read_bytes(UART_NUM_1, uart_rx_data_struct.buffer, UART_BUF_SIZE, 1 / portTICK_PERIOD_MS);
+        if (uart_rx_size > 0)
+        {
+            // ESP_LOGI(UART_TAG, "Received %d bytes: ", uart_rx_size);
+            // ESP_LOG_BUFFER_HEX(UART_TAG, uart_rx_data, uart_rx_size);
+            uart_rx_data_struct.size = uart_rx_size;
+            xQueueSend(uart_rx_queue_handle, &uart_rx_data_struct, 0);
+        }
+        
+        Uart_Tx_Queue_Process();
+       
+        Uart_Rx_Queue_Process();
+        vTaskDelay(1 / portTICK_PERIOD_MS);
+    }
+}
+void Uart_Pairing_Handle(uint8_t *data ,uint16_t len, uint8_t host_type)
+{
+    // ESP_LOG_BUFFER_HEX(COMMON_TAG,data,len);
+    //串口-ESP PROTUCOL协议指令解析
+    if(len >= 4 && len <= UART_BUF_SIZE && data[0] == FRAMEHEAD_PANEL_TO_IOT && Crc8_ROHC_Cal(&data[1], len-2) == data[len-1] && host_type == HOST_TYPE_UART)
+    {
+        if(data[1] != 0xb7)
+        {
+            ESP_LOGI(COMMON_TAG, "uart recv %d bytes:cmd %0x", len, data[1]);
+        }
+        // ESP_LOGI(COMMON_TAG, "Read %d bytes:", len);
+        // ESP_LOG_BUFFER_HEX(COMMON_TAG, data, len);
+        static UART_RECV_REPLY_T uart_pairing_reply = {0};
+        memset(&uart_pairing_reply, 0x00, sizeof(UART_RECV_REPLY_T));
+
+        // Process
+        uart_pairing_reply.cmd = data[1];
+        common_setting.ble_enable_tick = 0; // 刷新蓝牙关闭倒计时
+        switch(data[1])
+        {
+            // 心跳检测
+            case COMMON_UART_HEART_CMD:
+            {
+                if(data[3] == 0)
+                {
+                    common_setting.heart_beat_enable = 0;
+                }
+                else
+                {
+                    common_setting.heart_beat_enable = 1;
+                    common_setting.heart_beat_interval = data[3] * 1000;
+                }
+                //0x01
+            }
+            break;
+            // 主控产品信息
+            case COMMON_UART_MCU_INFO_CMD:
+            {
+                uart_pairing_reply.send_flag=0;
+                // 需要至少 12 字节(0~11),并且 product_name 中还有内容时要继续检查
+                if (len >= 12 && data[2] >= 9)
+                {
+                    common_setting.mcu_info.vid = *(uint16_t*)&data[3];
+                    common_setting.mcu_info.pid = *(uint16_t*)&data[5];
+                    common_setting.mcu_info.fw_version = *(uint16_t*)&data[7];
+                    common_setting.mcu_info.build_version = *(uint16_t*)&data[9];
+                    memset(common_setting.mcu_info.product_name, 0x00, sizeof(common_setting.mcu_info.product_name));
+                    uint8_t name_len = data[11];
+                    if (name_len > PRODUCT_NAME_MAX_LEN)
+                    {
+                        name_len = PRODUCT_NAME_MAX_LEN;
+                    }
+
+                    if (name_len > 0)
+                    {
+                        if (len >= 12 + name_len)
+                        {
+                            memcpy(common_setting.mcu_info.product_name, &data[12], name_len);
+                            common_setting.mcu_info.product_name[name_len] = '\0'; // 确保字符串结尾
+                            common_setting.mcu_info.product_name_len = name_len;
+                            common_setting.mcu_info_got_flag = 1;
+                            uart_pairing_reply.content[0]=0x01;
+                            ESP_LOGI(COMMON_TAG, "start nimble 0x%04x 0x%04x 0x%04x 0x%04x %s\n",common_setting.mcu_info.vid,common_setting.mcu_info.pid,\
+                            common_setting.mcu_info.fw_version,common_setting.mcu_info.build_version,common_setting.mcu_info.product_name);
+                            #if ENABLE_BLE_FUNC
+                            Ble_Start_Nimble_NetWork();////开启蓝牙配网
+                            #endif
+                            
+                        }
+                        else
+                        {
+                            ESP_LOGI(COMMON_TAG, "%s mcu info name len out of range, data len %d, want %d\n",__func__, len, (12 + name_len));
+                            name_len = 0;
+                            uart_pairing_reply.content[0]=0x01;
+                        }
+                    }
+                    
+                }else{
+                    ESP_LOGI(COMMON_TAG, "mcu len %d",data[2]);
+                    uart_pairing_reply.content[0]=0x00;
+                }
+            }
+            break;
+
+            // 网络状态通知
+            case COMMON_UART_RNETWORK_STATUS_CMD:
+            {
+                uart_pairing_reply.send_flag = 1;
+                uart_pairing_reply.len = 1;
+                
+                uart_pairing_reply.content[0] = 0x00; // 未处于配网状态
+                if(common_setting.ble_status.ble_state == 1)
+                {
+                    uart_pairing_reply.content[0] = 0x01; // 蓝牙广播中
+                }
+                if(common_setting.ble_status.ble_state == 2)
+                {
+                    uart_pairing_reply.content[0] = 0x02; // 蓝牙已连接
+                }
+                if(common_setting.wifi_status.wifi_mode != 1)
+                {
+                    if(common_setting.wifi_status.wifi_mode == 2)
+                    {
+                        uart_pairing_reply.content[0] = 0x03; // wifi连接中
+                    }
+                    if(common_setting.wifi_status.wifi_state == 1)
+                    {
+                        uart_pairing_reply.content[0] = 0x04; // wifi已连接
+                    }
+                }
+                
+
+                // if(common_setting.wifi_status.wifi_state == 1)
+                // {
+                //     uart_pairing_reply.content[0] = 0x02; // mqtt已连接
+                // }
+            }
+            break;
+
+            // 属性设置
+            case COMMON_UART_PROPERTY_SET_CMD:
+            {
+
+            }
+            break;
+            
+            // 属性上报
+            case COMMON_UART_PROPERTY_REPORT_CMD:
+            {
+                // mqtt_upload_len = data[2];
+                // memcpy(mqtt_upload_data, &data[3], data[2]);
+            }
+            break;
+
+            // 属性全部查询
+            case COMMON_UART_PROPERTY_ALL_QUERY_CMD:
+            {
+
+            }
+            break;
+
+            // 属性批量查询
+            case COMMON_UART_PROPERTY_BATCH_REPORT_CMD:
+            {
+
+            }
+            break;
+
+            // 获取模组MAC地址
+            case COMMON_UART_GET_MAC_ADDR_CMD:
+            {
+                uart_pairing_reply.send_flag = 1;
+                uart_pairing_reply.len = 6;
+                esp_read_mac(uart_pairing_reply.content, ESP_MAC_BT);
+            }
+            break;
+            // 获取模组WIFI信息
+            case COMMON_UART_GET_WIFI_INFO_CMD:
+            {
+                uart_pairing_reply.send_flag = 1;
+                if(common_storage.net_info.wifi_info_flag == 0)
+                {
+                    uart_pairing_reply.len = 2;
+                    uart_pairing_reply.content[0] = 0; // 失败
+                    uart_pairing_reply.content[1] = 0;
+                }
+                else
+                {
+                    uart_pairing_reply.len = 2 + common_storage.net_info.wifi_ssid_len;
+                    if(common_setting.net_pairing_status >= NET_PAIRING_WIFI_CONNECTED_AP)
+                    {
+                        *(int8_t*)&uart_pairing_reply.content[0] = common_setting.wifi_status.rssi;
+                    }
+                    else
+                    {
+                        uart_pairing_reply.content[0] = 1; // 未连接
+                    }
+                    uart_pairing_reply.content[1] = 1;
+                    memcpy(&uart_pairing_reply.content[2], common_storage.net_info.wifi_ssid, common_storage.net_info.wifi_ssid_len);
+                }
+            }
+            break;
+
+            // 获取模组固件版本
+            case COMMON_UART_GET_FW_VERSION_CMD:
+            {
+                uart_pairing_reply.send_flag = 1;
+                uart_pairing_reply.len = 6;
+
+                *(uint16_t*)&uart_pairing_reply.content[0] = DEVICE_PID;
+                *(uint16_t*)&uart_pairing_reply.content[2] = FW_VERSION;
+                *(uint16_t*)&uart_pairing_reply.content[4] = BUILD_VERSION;
+            }
+            break;
+            //按键灯的颜色
+            case COMMON_UART_GET_KEY_COLOR_CMD:
+            {
+                //通过mqtt发送给上位机
+                #if ENABLE_MQTT_FUNC
+                Mqtt_Get_Key_Led_Color(data+3,data[2]);//从第三个字节开始 不包含crc和之前的协议字段
+                #endif
+            }
+            break;
+
+            // 其它命令
+            case 0x20://APP检查到iot服务器地址不可达,通知iot模块停止配网,等待APP重新发起配网
+            {
+                if(data[3] == 1) // 停止配网
+                {
+                    // common_setting.net_pairing_info.http_url_flag = 0;
+                    // common_setting.net_pairing_info.http_token_flag = 0;
+                    // common_setting.net_pairing_info.user_id_flag = 0;
+                    
+                }
+            }
+            break;
+
+            // 固件升级
+            case COMMON_UART_ESP_FIRMWARE_UPDATE_CMD:
+            {
+                if(host_type == HOST_TYPE_UART)
+                {
+
+                    Iap_Process(&data[3], data[2]);
+                }
+            }
+            break;
+            
+            // 欺骗编译器,勿删
+            case 0xFF:
+            {
+                
+            }
+            break;
+        }
+
+        if(uart_pairing_reply.send_flag)
+        {
+            Uart_Reply_Send(uart_pairing_reply.cmd, uart_pairing_reply.content, uart_pairing_reply.len, HOST_TYPE_UART);
+            // Check_Host_Type(uart_pairing_reply.cmd, uart_pairing_reply.content, uart_pairing_reply.len, host_type);
+        }
+    }
+    else if(data[0] == FRAMEHEAD_PANEL_TO_IOT)
+    {
+        ESP_LOGI(COMMON_TAG, "net pairing crc8 %d bytes:cmd %0x", len, data[1]);
+        if(len < 4 || len > UART_BUF_SIZE)
+        {
+            ESP_LOGE(COMMON_TAG, "net pairing len err:%d", len);
+        }
+        else if(Crc8_ROHC_Cal(&data[1], len-2) != data[len-1])
+        {
+            ESP_LOGE(COMMON_TAG, "net pairing crc8 err:%02x %02x", Crc8_ROHC_Cal(&data[1], len-2), data[len-1]);
+        }
+    }
+}
+
+//*pub不包含帧头 命令 crcr长度等协议字段,纯数据部分,len为数据部分长度
+void Uart_Reply_Send(uint8_t cmd, uint8_t* pbuf, uint8_t len, uint8_t host_type)
+{
+    if (len > UART_REPLY_MAX_PAYLOAD-4) // 4 = header(1) + cmd(1) + len(1) + crc(1) 暂时len为1个字节
+    {
+        ESP_LOGE(COMMON_TAG, "Uart_Reply_Send length too large: %d\n", len);
+        return;
+    }
+    static UART_RECV_DATA_T uart_pairing_reply = { 0 };
+    uint8_t header[3] = {FRAMEHEAD_IOT_TO_PANEL, cmd, 0x00};
+    memcpy(&header[2], &len,1);
+    uart_pairing_reply.size = len + 1 + 1 + 1 + 1; // header(1)+cmd(1)+len(1)+crc(1)
+
+    memcpy(uart_pairing_reply.buffer, header, 3);
+    if (len > 0 && pbuf != NULL)
+    {
+        memcpy(&uart_pairing_reply.buffer[3], pbuf, len);
+    }
+
+    uint8_t crc = Crc8_ROHC_Cal(&uart_pairing_reply.buffer[1], len + 2);
+    uart_pairing_reply.buffer[len + 3] = crc;
+    // ESP_LOGI(COMMON_TAG, "%s crc %02x len %d",__func__, crc, len);
+
+    xQueueSend(uart_tx_queue_handle, &uart_pairing_reply, 0);
+}
+
diff --git a/main/uart.h b/main/uart.h
new file mode 100644 (file)
index 0000000..6a37be4
--- /dev/null
@@ -0,0 +1,119 @@
+#ifndef _UART_H_
+#define _UART_H_
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+
+#define TXD_PIN                             (1)
+#define RXD_PIN                             (0)
+
+#define UART_BUF_SIZE                        255
+
+#define BLE_BUF_SIZE                         512
+
+#define FRAMEHEAD_IOT_TO_PANEL                         (0xF1)
+#define FRAMEHEAD_PANEL_TO_IOT                         (0xF2)
+
+typedef enum
+{
+    COMMON_UART_HEART_CMD = 0x00,//心跳
+    COMMON_UART_MCU_INFO_CMD = 0x01,//回复主控产品信息
+
+    //0x02保留
+
+    COMMON_UART_RNETWORK_STATUS_CMD = 0x03,//网络状态通知
+
+    //0X04-0X05保留
+    
+    COMMON_UART_PROPERTY_SET_CMD  = 0x06,//属性上报
+    COMMON_UART_PROPERTY_REPORT_CMD = 0x07,//属性设置 
+    COMMON_UART_PROPERTY_ALL_QUERY_CMD = 0x08,//属性全部查询
+    COMMON_UART_PROPERTY_BATCH_REPORT_CMD = 0x09,//属性批量查询
+    COMMON_UART_GET_MAC_ADDR_CMD = 0X0A,//获取模组MAC地址
+    COMMON_UART_GET_WIFI_INFO_CMD = 0x0B,//获取wifi模组信息
+    COMMON_UART_GET_FW_VERSION_CMD = 0x0C,//获取wifi模组版本号
+    COMMON_UART_GET_KEY_COLOR_CMD = 0x0D,//获取按键灯颜色
+    //0x0D-0x0E保留
+    COMMON_UART_CLOSE_HEART_CMD = 0x0F,//关闭心跳检查
+    COMMON_UART_EVENT_REPORT_CMD = 0x10,//事件上报
+    COMMON_UART_PROPERTY_SYNC_CMD = 0x11,//属性同步通知
+    COMMON_UART_GET_TIMESTAMP_CMD = 0x12,//获取时间戳
+
+    //0x13-0xB0
+    COMMON_UART_MCU_FIRMWARE_UPDATE_CMD = 0xB1,//主控固件升级
+    //0xB2-0xB6保留
+    COMMON_UART_ESP_FIRMWARE_UPDATE_CMD = 0xB7,//模组固件升级
+
+
+    COMMON_UART_END_CMD = 0xFF,
+
+}COMMON_UART_CMD_E;
+
+typedef enum
+{
+       REPLY_STATUS_NONE = 0,
+       REPLY_STATUS_OK = 1,
+       REPLY_STATUS_FAIL,
+       REPLY_STATUS_NO_CMD,
+       REPLY_STATUS_LACK_OF_PARAM,
+       REPLY_STATUS_UNAUTH,
+}REPLY_STATUS_T;
+
+//uart接收数据
+typedef struct
+{
+    uint8_t size;
+    uint8_t buffer[UART_BUF_SIZE];
+}__attribute__((packed)) UART_RECV_DATA_T;
+
+//串口接收数据本地解析回传给UART发送的结构体,包含协议头、命令、长度、数据内容等
+typedef struct
+{
+    uint8_t send_flag:1;
+    uint8_t reserved:7;
+
+    union
+    {
+        struct
+        {
+            uint8_t cmd;
+            uint8_t len;
+            uint8_t content[UART_BUF_SIZE-4];
+            // uint8_t crc;
+        };
+        uint8_t buffer[UART_BUF_SIZE-2];
+    };
+}__attribute__((packed)) UART_RECV_REPLY_T;
+
+#define UART_TX_QUEUE_LENGTH          4
+#define UART_TX_QUEUE_ITEM_SIZE       (sizeof(UART_RECV_DATA_T))
+
+#define UART_RX_QUEUE_LENGTH          4
+#define UART_RX_QUEUE_ITEM_SIZE       (sizeof(UART_RECV_DATA_T))
+
+extern uint8_t uart_tx_queue_storage[UART_TX_QUEUE_LENGTH*UART_TX_QUEUE_ITEM_SIZE];
+extern QueueHandle_t uart_tx_queue_handle;
+extern StaticQueue_t uart_tx_queue_buffer;
+
+
+extern uint8_t uart_rx_queue_storage[UART_RX_QUEUE_LENGTH*UART_RX_QUEUE_ITEM_SIZE];
+extern QueueHandle_t uart_rx_queue_handle;
+extern StaticQueue_t uart_rx_queue_buffer;
+
+#define UART_TASK_STACK                 (2*1024)
+extern TaskHandle_t uart_task_handler;
+extern StackType_t uart_task_stack[UART_TASK_STACK];
+extern StaticTask_t uart_task_tcb;
+
+#define UART_REPLY_MAX_PAYLOAD UART_BUF_SIZE // 4 = header(1) + cmd(1) + len(1) + crc(1)
+
+void Uart_Initialize(void);
+
+void Uart_Tx_Queue_Process(void);
+void Uart_Rx_Queue_Process(void);
+
+void Uart_Task(void *arg);
+void Uart_Reply_Send(uint8_t cmd, uint8_t* pbuf, uint8_t len, uint8_t host_type);
+void Uart_Pairing_Handle(uint8_t *data ,uint16_t len, uint8_t host_type);
+#endif
diff --git a/main/user_flash.c b/main/user_flash.c
new file mode 100644 (file)
index 0000000..75679c9
--- /dev/null
@@ -0,0 +1,179 @@
+#include "project_common.h"
+
+#define PARA_FLASH_NAME "user_data"
+static const char *FLASH_TAG = "user_flash";
+
+static const esp_partition_t *partition;
+
+SemaphoreHandle_t user_flash_mutex;
+// static uint32_t user_flash_write[FLASH_SEC_SIZE/4] = {0};
+// static uint32_t user_flash_read[FLASH_SEC_SIZE/4] = {0};
+static uint32_t user_flash_data[FLASH_SEC_SIZE/sizeof(uint32_t)] = {0};
+
+void User_Flash_Check(void)
+{
+       //寻找分区表
+       partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, PARA_FLASH_NAME);
+       assert(partition != NULL);
+       User_Erase_Nimble_NetWork_Infor();
+       //读取flash数据到common_storage
+       
+       if(User_Flash_Read_Check(UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) != ESP_OK)
+       {
+               ESP_LOGI(FLASH_TAG,"common_storage failed\n");
+               common_storage.net_info.wifi_info_flag = 0;
+               common_storage.net_info.device_id_flag = 0;
+               common_storage.net_info.serial_number_flag=0;
+               memset(&common_storage.net_info,0x00,sizeof(NET_INFO_T));
+               
+       }else{
+               ESP_LOGI(FLASH_TAG,"serialNumber %s %d wifi_info_flag:%d\n",common_storage.net_info.serial_number,common_storage.net_info.serial_number_flag,common_storage.net_info.wifi_info_flag);
+       }
+
+       memset(&common_storage.ssl_cert[SSL_CLIENT_CRT].content,0x00,sizeof(common_storage.ssl_cert[SSL_CLIENT_CRT].content));
+       if(User_Flash_Read_Check(UF_OFFSET_CERT_CLIENT_CRT_ADDR, UF_OFFSET_CERT_CERT_FLAG, &common_storage.ssl_cert[SSL_CLIENT_CRT], sizeof(SSL_CERT_T)) != ESP_OK)
+       {
+               common_storage.ssl_cert[SSL_CLIENT_CRT].length = 0;
+               // printf(" read client_ssl_cer failed\n");
+       }else{
+               ESP_LOGI(FLASH_TAG,"ssl_cer success 0 %d\n",common_storage.ssl_cert[SSL_CLIENT_CRT].length);
+               
+       }
+
+       memset(&common_storage.ssl_cert[SSL_CLIENT_KEY].content,0x00,sizeof(common_storage.ssl_cert[SSL_CLIENT_KEY].content));
+       if(User_Flash_Read_Check(UF_OFFSET_CERT_CLIENT_KEY_ADDR, UF_OFFSET_CERT_CERT_FLAG, &common_storage.ssl_cert[SSL_CLIENT_KEY], sizeof(SSL_CERT_T)) != ESP_OK)
+       {
+               common_storage.ssl_cert[SSL_CLIENT_KEY].length = 0;
+       }
+       else{
+               ESP_LOGI(FLASH_TAG,"ssl_cer  %d\n",common_storage.ssl_cert[SSL_CLIENT_KEY].length);
+
+       }
+       memset(&common_storage.ssl_cert[SSL_SERVER_CRT].content,0x00,sizeof(common_storage.ssl_cert[SSL_SERVER_CRT].content));
+       if(User_Flash_Read_Check(UF_OFFSET_CERT_SERVER_CRT_ADDR, UF_OFFSET_CERT_CERT_FLAG, &common_storage.ssl_cert[SSL_SERVER_CRT], sizeof(SSL_CERT_T)) != ESP_OK)
+       {
+               common_storage.ssl_cert[SSL_SERVER_CRT].length = 0;
+               // printf("read server_ssl_cer failed\n");
+       }else{
+               ESP_LOGI(FLASH_TAG,"ssl_cer %d\n",common_storage.ssl_cert[SSL_SERVER_CRT].length);
+       
+       }
+}
+//清除配网信息
+void User_Erase_Nimble_NetWork_Infor(void)
+{
+       //清除配网信息
+       User_Flash_Erase(UF_OFFSET_USER_CONFIG_INFO_ADDR,FLASH_SEC_SIZE);
+
+       //清除证书信息
+       User_Flash_Erase(UF_OFFSET_CERT_CLIENT_CRT_ADDR,FLASH_SEC_SIZE);
+       User_Flash_Erase(UF_OFFSET_CERT_CLIENT_KEY_ADDR,FLASH_SEC_SIZE);
+       User_Flash_Erase(UF_OFFSET_CERT_SERVER_CRT_ADDR,FLASH_SEC_SIZE);
+}
+esp_err_t User_Flash_Erase(size_t offset, size_t size)
+{      
+       esp_err_t err = 0;
+
+       if(size % partition->erase_size != 0)
+       {
+               err = ESP_ERR_INVALID_SIZE;
+       }
+       else
+       {
+               //擦除flash
+               err = esp_partition_erase_range(partition, offset, size);
+       }
+
+       if(err != 0)
+       {
+               ESP_LOGI(FLASH_TAG, "user flash erase error %d, offset:0x%08x, size:0x%x", err, offset, size);
+       }
+       return err;
+}
+
+esp_err_t User_Flash_Write(size_t offset, void* buf, size_t size)
+{      
+       esp_err_t err = 0;
+
+       //写入flash
+       err = esp_partition_write(partition, offset, buf, size);
+       if(err != 0)
+       {
+               ESP_LOGI(FLASH_TAG, "user flash write error %d, offset:0x%08x, size:0x%x", err, offset, size);
+       }
+       return err;
+}
+
+//在指定地址读出数组
+esp_err_t User_Flash_Read(size_t offset, void* buf, size_t size)
+{
+       esp_err_t err = 0;
+       
+       //读取flash
+       err = esp_partition_read(partition, offset, buf, size);
+
+       if(err != 0)
+       {
+               ESP_LOGI(FLASH_TAG, "user flash read err %d, offset:0x%08x, size:0x%x", err, offset, size);
+       }
+       return err;
+}
+
+esp_err_t User_Flash_Write_With_Flag(uint32_t addr, uint32_t flag, void* data, uint16_t size)
+{
+       esp_err_t err = ESP_FAIL;
+       if(xSemaphoreTake(user_flash_mutex, portMAX_DELAY) == pdTRUE)
+       {
+               uint16_t size_word = ((size/4) + ((size)%4 > 0 ? 1:0)) + 1 + 1;
+               memset(user_flash_data, 0xFF, sizeof(user_flash_data));
+               user_flash_data[0] = flag;
+               memcpy(&user_flash_data[1], data, size);
+               user_flash_data[size_word-1] = Crc32_JAMCRC_Cal(data, size);
+               
+               User_Flash_Erase(addr, FLASH_SEC_SIZE);
+               
+               // DUG_PRINTF("write word %d:", size_word);
+               // for(uint16_t i=0;i<size_word;i++)
+               // {
+                       // DUG_PRINTF("(%d)%08x ", err, user_flash_data[i]);
+               // }
+               // DUG_PRINTF("\n");
+               err = User_Flash_Write(addr, user_flash_data, size_word*4);
+
+#if (0)
+               uint8_t read[16] = {0};
+               Flash_Read(addr, read, 16);
+               DUG_PRINTF("read: ");
+               for(uint16_t i=0;i<16;i++)
+               {
+                       DUG_PRINTF("%02x ", read[i]);
+               }
+               DUG_PRINTF("\n");
+#endif
+               xSemaphoreGive(user_flash_mutex);
+       }
+       return err;
+}
+
+esp_err_t User_Flash_Read_Check(uint32_t addr, uint32_t flag, void* buf, uint16_t size)
+{
+       esp_err_t err = ESP_FAIL;
+       if(xSemaphoreTake(user_flash_mutex, portMAX_DELAY) == pdTRUE)
+       {
+               
+               memset(user_flash_data, 0xFF, sizeof(user_flash_data));
+               uint16_t word_size = ((size/4) + ((size)%4 > 0 ? 1:0)) + 1 + 1;
+               if(User_Flash_Read(addr, user_flash_data, word_size*4) == ESP_OK)
+               {
+                       if(user_flash_data[0] == flag && Crc32_JAMCRC_Cal((uint8_t*)&user_flash_data[1], size) == user_flash_data[word_size-1])
+                       {
+                               memcpy(buf, &user_flash_data[1], size);
+                               err = ESP_OK;
+                       }
+               }
+               xSemaphoreGive(user_flash_mutex);
+       }
+       return err;
+}
+
+
diff --git a/main/user_flash.h b/main/user_flash.h
new file mode 100644 (file)
index 0000000..53c4aa0
--- /dev/null
@@ -0,0 +1,37 @@
+#ifndef _USER_FLASH_H_
+#define _USER_FLASH_H_
+
+#include <stdint.h>
+#include "esp_partition.h"
+
+#define FLASH_SEC_SIZE      4096
+
+#define FLAG_SIZE           4
+#define CRC_SIZE            4
+
+//USER_CONFIGDATA_T结构体的大小不能超过FLASH_SEC_SIZE
+#define UF_OFFSET_START_ADDR                    0x00000000
+#define UF_OFFSET_USER_CONFIG_INFO_ADDR            UF_OFFSET_START_ADDR
+#define UF_OFFSET_USER_CONFIG_INFO_SIZE_NUM            1 //保存配置信息所需要的大小单位是4096  
+
+#define UF_OFFSET_USER_CONFIG_INFO_FLAG            0xABCD0001
+
+#define UF_OFFSET_CERT_CLIENT_CRT_ADDR          UF_OFFSET_USER_CONFIG_INFO_ADDR+FLASH_SEC_SIZE*UF_OFFSET_USER_CONFIG_INFO_SIZE_NUM
+#define UF_OFFSET_CERT_CLIENT_CRT_SIZE            1 //保存配置所需要的大小单位是4096  
+
+#define UF_OFFSET_CERT_CLIENT_KEY_ADDR          UF_OFFSET_CERT_CLIENT_CRT_ADDR+FLASH_SEC_SIZE*UF_OFFSET_CERT_CLIENT_CRT_SIZE
+#define UF_OFFSET_CERT_CLIENT_KEY_SIZE            1 //保存配置所需要的大小单位是4096  
+
+#define UF_OFFSET_CERT_SERVER_CRT_ADDR          UF_OFFSET_CERT_CLIENT_KEY_ADDR+FLASH_SEC_SIZE*UF_OFFSET_CERT_CLIENT_KEY_SIZE
+#define UF_OFFSET_CERT_SERVER_CRT_SIZE            1 //保存配置所需要的大小单位是4096  
+
+#define UF_OFFSET_CERT_CERT_FLAG                0xABCD0001
+
+extern SemaphoreHandle_t user_flash_mutex;
+
+void User_Flash_Check(void);
+void User_Erase_Nimble_NetWork_Infor(void);
+esp_err_t User_Flash_Write_With_Flag(uint32_t addr, uint32_t flag, void* data, uint16_t size);
+esp_err_t User_Flash_Read_Check(uint32_t addr, uint32_t flag, void* buf, uint16_t size);
+esp_err_t User_Flash_Erase(size_t offset, size_t size);
+#endif
diff --git a/main/user_http.c b/main/user_http.c
new file mode 100644 (file)
index 0000000..f5b251b
--- /dev/null
@@ -0,0 +1,825 @@
+#include "project_common.h"
+#include "https_ota.h"
+#include "user_http.h"
+#if ENABLE_HTTP_FUNC
+#define CLOSE_HTTP_LOG  0
+static const char *HTTP_TAG = "http";
+
+static esp_err_t _http_event_handler(esp_http_client_event_t *evt)
+{
+    switch (evt->event_id) {
+    case HTTP_EVENT_ERROR:
+        ESP_LOGI(HTTP_TAG, "HTTP_EVENT_ERROR");
+        break;
+    case HTTP_EVENT_ON_CONNECTED:
+        ESP_LOGI(HTTP_TAG, "HTTP_EVENT_ON_CONNECTED");
+        break;
+    case HTTP_EVENT_HEADER_SENT:
+        ESP_LOGI(HTTP_TAG, "HTTP_EVENT_HEADER_SENT");
+        break;
+    case HTTP_EVENT_ON_HEADER:
+        // ESP_LOGI(HTTP_TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
+        break;
+    case HTTP_EVENT_ON_DATA:
+        // ESP_LOGI(HTTP_TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
+        // if (!esp_http_client_is_chunked_response(evt->client)) 
+        // {
+        //     printf("%.*s", evt->data_len, (char*)evt->data);
+        //     uint8_t *data = (uint8_t*)evt->data;
+        //     for(uint32_t i=0;i<evt->data_len;i++)
+        //     {
+        //         printf("%02x ", *(data++));
+        //     }
+        //     printf("\n");
+        // }
+        break;
+    case HTTP_EVENT_ON_FINISH:
+        ESP_LOGI(HTTP_TAG, "HTTP_EVENT_ON_FINISH");
+        break;
+    case HTTP_EVENT_DISCONNECTED:
+        ESP_LOGI(HTTP_TAG, "HTTP_EVENT_DISCONNECTED");
+        break;
+    case HTTP_EVENT_REDIRECT:
+        ESP_LOGI(HTTP_TAG, "HTTP_EVENT_REDIRECT");
+        break;
+    }
+    return ESP_OK;
+}
+#define MAX_HTTP_OUTPUT_BUFFER  2*1024 //包含证书下载和获取serialNumber的http请求响应数据
+static char http_download_cache[MAX_HTTP_OUTPUT_BUFFER+1] = {0};
+#define HTTP_DOWNLOAD_CER_FUNC_ENABLE 1
+
+#define HTTP_RETRY_NUMBER_MAX (5) //HTTP请求失败重试次数最大值
+
+#define HTTP_GET_MQTT_URL_CER_ENABLE 1 //设备请求下发mqtt地址 证书
+
+#define HTTP_PUT_REPORT_MAC_RSSI_ENABLE   1 //PUT请求上报mac和rssi信息
+#define HTTP_GET_SERIAL_NUMBER_ENBALE 1 //GET请求获取serialNumber,服务器根据设备token mac pid等信息返回对应的serialNumber=deviceID等信息
+
+
+
+HTTP_GET_CERT_TASK_PARAM_T http_get_cert_task_param;
+static const char *HTTP_DOWNLOAD_TASK_TAG = "http_download_task";
+const esp_partition_t *s_ota_partition = NULL;
+esp_ota_handle_t s_ota_handle = 0;
+
+static void Http_Download_Task_Cb(void *pvParameters)
+{
+    uint8_t success_bit = 0;
+    for(uint8_t cert_type=0;cert_type<3;cert_type++)
+    {
+        if(http_get_cert_task_param.url[cert_type][strlen(&http_get_cert_task_param.url[cert_type][0])-1] == ' ')
+        {
+            http_get_cert_task_param.url[cert_type][strlen(&http_get_cert_task_param.url[cert_type][0])-1] = 0;
+        }
+
+        esp_http_client_config_t http_config = {
+            // .url = "https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/11/ssl_mutual_auth.bin",// "https://e-pxn.com.cn/pms/api/mqtt_ssl_mutual_auth.bin",
+            .url = (const char*)&http_get_cert_task_param.url[cert_type][0],
+            .crt_bundle_attach = esp_crt_bundle_attach,
+            .event_handler = _http_event_handler,
+            // .keep_alive_enable = true,
+            // .disable_auto_redirect = true,
+        };
+        // mbedtls_ssl_conf_authmode(&ssl_config, MBEDTLS_SSL_VERIFY_NONE);
+        ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "downloading url %s", (char *)http_get_cert_task_param.url[cert_type]);
+        
+        esp_err_t err = ESP_FAIL;
+        esp_http_client_handle_t http_client = NULL; // 提前定义
+        for(uint8_t retry=0;retry<HTTP_RETRY_NUMBER_MAX;retry++)
+        {
+            ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "[APP] Free memory get cer on: %" PRIu32 " bytes", esp_get_free_heap_size());
+            // printf("剩余堆内存: %" PRIu32, esp_get_free_heap_size());
+            http_client = esp_http_client_init(&http_config);
+            if(http_client == NULL)
+            {
+                ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "client init fail");
+                vTaskDelay(50);
+                continue;
+            }
+            // ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "esp_http_client_init");
+            err = esp_http_client_open(http_client, 0);
+            ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "esp_http_client_init err %d\n",err);
+            if (err == ESP_OK)
+            {
+                int header_ret = esp_http_client_fetch_headers(http_client);
+                int code = esp_http_client_get_status_code(http_client);
+                if(code == 200 && header_ret >= 0)
+                {
+                    int total_size =  esp_http_client_get_content_length(http_client);
+                    ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "http req total_size:%d\n",total_size);
+                    // ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "esp_http_client_get_status_code");
+                    
+                    if(total_size <= MAX_HTTP_OUTPUT_BUFFER)
+                    {
+                        #if HTTP_DOWNLOAD_CER_FUNC_ENABLE
+                        int read_len = 0;
+                        memset(http_download_cache, 0x00, sizeof(http_download_cache));
+                        read_len = esp_http_client_read(http_client, http_download_cache, total_size);
+                        ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "\nread_len len%d: total_size:%d\n", read_len, total_size);
+                        if(read_len == total_size && read_len <= MAX_HTTP_OUTPUT_BUFFER)
+                        {
+                            // 成功
+                            // ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "\nrecv data len%d: %s\n", total_size, http_download_cache);
+                            if(common_storage.ssl_cert[cert_type].length == total_size && memcmp(http_download_cache, common_storage.ssl_cert[cert_type].content, total_size) == 0)
+                            {
+                                ESP_LOGI(HTTP_TAG, "cert same: %d", cert_type);
+                                err = ESP_OK;
+                                success_bit |= (1 << cert_type);
+                                
+                            }
+                            else{
+                                common_storage.ssl_cert[cert_type].length = total_size;
+                                memset(common_storage.ssl_cert[cert_type].content, 0x00, sizeof(common_storage.ssl_cert[0].content));
+                                memcpy(common_storage.ssl_cert[cert_type].content, http_download_cache, total_size);
+                               
+                                // ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "flash write cer key server_crt success: %d\n", cert_type);
+
+                                if(User_Flash_Write_With_Flag(UF_OFFSET_CERT_CLIENT_CRT_ADDR+FLASH_SEC_SIZE*cert_type, UF_OFFSET_CERT_CERT_FLAG, &common_storage.ssl_cert[cert_type], sizeof(SSL_CERT_T)) == ESP_OK)
+                                {
+                                    success_bit |= (1 << cert_type);
+                                    ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "server_crt success: %d\n", cert_type);
+                                    err = ESP_OK;
+                                    
+                                }
+                                else
+                                {
+                                    ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "server_crt error: %d\n", cert_type);
+                                    err = ESP_FAIL;
+                                }
+                                // ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "flash write wifi pwd ssid success: \n");
+                            }
+                        }
+                        else
+                        {
+                            ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "http read size low = %d", read_len);
+                            err = ESP_FAIL;
+                        }
+                        #endif
+                    }
+                    else{
+                        err = ESP_FAIL;
+                        ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "http filed size too large\n");
+                    }
+                }
+                else
+                {
+                    ESP_LOGE(HTTP_DOWNLOAD_TASK_TAG, "http req failed%d %d",code,header_ret);
+                    err = ESP_FAIL;
+                }
+                
+            }
+            else
+            {
+                err = ESP_FAIL;
+            }
+            if(http_client != NULL)
+            {
+                esp_http_client_close(http_client);
+                esp_http_client_cleanup(http_client);
+                http_client = NULL;
+            }
+            if(err == ESP_OK)
+            {
+                break;
+            }
+            vTaskDelay(50 / portTICK_PERIOD_MS);
+        }
+        
+        if(err != ESP_OK)
+        {
+            ESP_LOGI(HTTP_DOWNLOAD_TASK_TAG, "download fail %d", cert_type);
+            break;
+        }
+        vTaskDelay(50 / portTICK_PERIOD_MS);
+    }
+
+
+    if(success_bit == ((1 << SSL_CLIENT_CRT) | (1 << SSL_CLIENT_KEY) | (1 << SSL_SERVER_CRT)))
+    {
+        //成功
+        // Ble_Queue_Send(0xFF, 0xFF);
+        #if (USER_TEST_ENABLE) //开机直连测试使用
+        common_storage.net_info.serial_number_flag = 1;
+        common_storage.net_info.wifi_info_flag = 1;
+        #endif
+        #if (NIMBLE_NETWORK_MODE)
+        //回复配网状态
+        network_request_replay(NETWORK_HTTPS_DOWNLOAD_CERTIFICATE_OK);
+        vTaskDelay(200);
+        xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);//关闭蓝牙配网
+        vTaskDelay(100);
+        #endif
+        ESP_LOGI(HTTP_TAG, "download clientcer clientkey mqtt \n");
+        common_setting.mqtt_user_cfg.mqtt_start_flag=1;
+        #if ENABLE_HTTPS_OTA_FUNC
+        xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+        #endif
+        xEventGroupSetBits(common_event_group, COMMON_MQTT_CONNECT_BIT);
+    }else{
+        //失败
+        network_request_replay(NETWORK_HTTPS_DOWNLOAD_CERTIFICATE_FAILED);
+    }
+
+    vTaskDelete(NULL);
+    return;
+}
+
+
+#define HTTP_CONTENT_AMX_LEN  2048
+#define USE_MALLOC_DATA_SIZE  0
+#define HTTP_CHUNK_SIZE     512
+
+
+static void Http_Get_Url_Task_Cb(void *pvParameters)
+{
+    if(common_setting.net_pairing_info.http_url_flag == 0 || common_setting.net_pairing_info.http_token_flag == 0 || common_setting.net_pairing_info.user_id_flag == 0 || common_setting.mcu_info_got_flag == 0 || common_setting.net_pairing_info.http_url_length == 0 || common_setting.net_pairing_info.http_token_length == 0 || common_setting.net_pairing_info.http_url_length > HTTP_URL_MAX_LEN || common_setting.net_pairing_info.http_token_length > HTTP_TOKEN_MAX_LEN)
+    {
+        ESP_LOGI(HTTP_TAG, "param wrong:%d %d %d %d %d %d\n", common_setting.net_pairing_info.http_url_flag, common_setting.net_pairing_info.http_token_flag, common_setting.net_pairing_info.user_id_flag, common_setting.mcu_info_got_flag, common_setting.net_pairing_info.http_url_length, common_setting.net_pairing_info.http_token_length);
+        vTaskDelete(NULL);
+        
+        return;
+    }
+    //
+    uint8_t result = 0;
+    cJSON* pClientCrt = NULL;
+    cJSON* pClientkey = NULL;
+    cJSON* pServerCrt = NULL;
+    cJSON* pMqttSubUrl = NULL;
+    esp_http_client_config_t http_config = 
+    {
+        .event_handler = _http_event_handler,
+        .disable_auto_redirect = true,
+        .keep_alive_enable = true,
+    };
+    #if HTTP_GET_SERIAL_NUMBER_ENBALE
+    // Get(Send:PID/Get:serialNumber) deviceID
+    ESP_LOGI(HTTP_TAG, "\nGET serialNumber=deviceID\n");
+    esp_http_client_handle_t http_client = NULL;
+    int content_len = 0;
+    int status_code=0;
+    #if (!USE_MALLOC_DATA_SIZE)
+    int data_read=0;
+    #endif
+    for(uint8_t retry=0;retry<HTTP_RETRY_NUMBER_MAX;retry++)
+    {
+        result = 0;
+        
+        if(common_setting.net_pairing_info.http_url_flag == 0 || common_setting.net_pairing_info.http_token_flag == 0)
+        {
+            result = 3;
+            break;
+        }
+
+        char url[HTTP_REQUEST_RUL_LEN] = {0};//预留一个结束符\0 请求地址不能大于255
+        const char path[] = "/iot/device/getDeviceByPid/";
+        memset(url, 0x00, sizeof(url));
+        
+        // if(common_setting.net_pairing_info.http_url_length < (sizeof(url) - sizeof(path)-6)){
+        //     memcpy(url, common_setting.net_pairing_info.http_url, sizeof(url)-common_setting.net_pairing_info.http_url_length);
+        //     memcpy(&url[common_setting.net_pairing_info.http_url_length], path, strlen(path));
+        //     snprintf(&url[common_setting.net_pairing_info.http_url_length+strlen(path)], sizeof(url) - (common_setting.net_pairing_info.http_url_length+strlen(path)), "0x%04x", common_setting.mcu_info.pid);
+        // }
+        
+        // const char *path = "/iot/device/getDeviceByPid/";
+        //注意http_url不能大于255-sizeof(path)-sizeof(common_setting_mcu_info.pid) //会编译出错
+        snprintf(url, sizeof(url)-1, "%s%s0x%04x",common_setting.net_pairing_info.http_url,path,common_setting.mcu_info.pid);
+
+        http_config.url = url;
+
+        ESP_LOGI(HTTP_TAG, "http_config.url = %s", http_config.url);
+        // ESP_LOGI(HTTP_TAG, "\nHTTP STEP 1..666........%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+        http_client = esp_http_client_init(&http_config);
+        if(http_client == NULL)
+        {
+            http_client=NULL;
+            ESP_LOGI(HTTP_TAG, "%s esp_http_client_init FAILE\n",__func__);
+            vTaskDelay(50);
+            continue;
+        }
+        ESP_LOGI(HTTP_TAG, "\nHTTP STEP 1..%s",(const char*)common_setting.net_pairing_info.http_token);
+        esp_http_client_set_header(http_client, "Authorization", (const char*)common_setting.net_pairing_info.http_token);//设置header,key为Authorization,value为http_token
+        esp_http_client_set_method(http_client, HTTP_METHOD_GET);//设置请求方法为GET
+        // ESP_LOGI(HTTP_TAG, "%s esp_http_client_open...1.....%d %" PRIu32 " bytes",__func__,result,esp_get_free_heap_size());
+        esp_err_t err = esp_http_client_open(http_client, 0);//开始连接服务器并发送HTTP请求,write_len参数为0表示没有要发送的请求体
+        // ESP_LOGI(HTTP_TAG, "%s esp_http_client_open....2....%d %" PRIu32 " bytes",__func__,result,esp_get_free_heap_size());
+        content_len = 0;
+        status_code=0;
+        if(err == ESP_OK)
+        {
+            int header_ret = esp_http_client_fetch_headers(http_client);//获取HTTP响应头,返回值为响应头的总长度,如果返回值小于0表示获取响应头失败
+            ESP_LOGI(HTTP_TAG, "esp_http_client_fetch_headers = %d", header_ret);
+            if (header_ret >= 0)
+            {
+                memset(http_download_cache, 0, sizeof(http_download_cache));
+                data_read=0;
+                //读取HTTP响应体,output_buffer为存储响应体的缓冲区,MAX_HTTP_OUTPUT_BUFFER为缓冲区的大小,返回值为实际读取的字节数,如果返回值小于0表示读取响应体失败
+                status_code = esp_http_client_get_status_code(http_client);//获取HTTP响应状态码,返回值为状态码的整数值,例如200表示请求成功,404表示资源未找到等
+                if (status_code == 200)
+                {
+                    content_len = esp_http_client_get_content_length(http_client);
+                    
+                    data_read = esp_http_client_read_response(http_client, http_download_cache, HTTP_CONTENT_AMX_LEN);
+                    //获取HTTP响应体的长度,返回值为响应体的字节数,如果返回值小于0表示获取响应体长度失败
+                    ESP_LOGI(HTTP_TAG, "HTTP GET Status = %d, content_length = %d", status_code, content_len);
+                    // ESP_LOG_BUFFER_CHAR(HTTP_TAG, http_download_cache, data_read);
+                    
+                    http_download_cache[data_read]='\0';
+                    ESP_LOGI(HTTP_TAG, "\nrecv data: %s\n", http_download_cache);
+
+                    if(data_read > 0 && data_read <= MAX_HTTP_OUTPUT_BUFFER)
+                    {
+                        cJSON* root_base = cJSON_Parse(http_download_cache);
+                        if(root_base != NULL)
+                        {
+                            cJSON* pData = cJSON_GetObjectItem(root_base,"data");
+                            if(pData != NULL)
+                            {
+                            //  "serialNumber": "PXN1LJ1QUR078E"
+                                cJSON* pSerialNumber = cJSON_GetObjectItem(pData,"serialNumber");
+                                //get the value
+                                if(pSerialNumber != NULL && cJSON_IsString(pSerialNumber))
+                                {
+                                    char* str_serialNumber = pSerialNumber->valuestring;
+                                    ESP_LOGI(HTTP_TAG, "serialNumber: %s\n", str_serialNumber);
+
+                                    
+                                    uint8_t serial_number_len = strlen(str_serialNumber);
+                                    if(serial_number_len == 0)
+                                    {
+                                        ESP_LOGI(HTTP_TAG, "serialNumber length is 0\n");
+                                        cJSON_Delete(root_base);
+                                        result=2;
+                                    }else{
+
+                                        if(serial_number_len > SERIAL_NUMBER_MAX_LEN)
+                                        {
+                                            serial_number_len= SERIAL_NUMBER_MAX_LEN;
+                                        }
+                                        //临时使用的数据
+                                        memset(common_setting.net_pairing_info.serial_number, 0x00, SERIAL_NUMBER_MAX_LEN+1);
+                                        memccpy(common_setting.net_pairing_info.serial_number, str_serialNumber, 0, serial_number_len);
+                                        common_setting.net_pairing_info.serial_number[serial_number_len] = '\0';
+                                        common_setting.net_pairing_info.serial_number_length = serial_number_len;
+                                        common_setting.net_pairing_info.serial_number_flag = 1;
+
+                                        //真正需要存储的flash数据
+                                        memset(common_storage.net_info.serial_number, 0x00, SERIAL_NUMBER_MAX_LEN+1);
+                                        memccpy(common_storage.net_info.serial_number, str_serialNumber, 0, serial_number_len);
+                                        common_storage.net_info.serial_number[serial_number_len] = '\0';
+                                        common_storage.net_info.serial_number_flag=1;
+                                        common_storage.net_info.serial_number_len=serial_number_len;
+                                        //保存flash后,
+                                        if(User_Flash_Write_With_Flag(UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) == ESP_OK)
+                                        {
+                                            ESP_LOGI(HTTP_TAG, "write usersuccess\n");
+                                            
+                                            result = 1;
+                                            
+                                        }else
+                                        {
+                                            ESP_LOGE(HTTP_TAG, "flash write error\n");  
+                                            result = 2;
+                                            
+                                        }
+                                    }
+
+                                }
+                                else
+                                {
+                                    ESP_LOGI(HTTP_TAG, "root_base is null111\n");
+                                    result = 2;
+                                }
+                            }
+                            else
+                            {
+                                ESP_LOGI(HTTP_TAG, "root_base is STORAGRE\n");
+                                result = 2;
+                            }
+                            cJSON_Delete(root_base);
+                        }
+                        else
+                        {
+                            result = 2;
+                            ESP_LOGI(HTTP_TAG, "root_base is null\n");
+                        }
+                    }
+                    else
+                    {
+                        result = 2;
+                        ESP_LOGE(HTTP_TAG, "data is large\n");
+                    }
+                }
+                else
+                {
+                    result = 2;
+                    ESP_LOGE(HTTP_TAG, "code!=200\n");
+                }
+            }else
+            {
+                result = 2;
+                ESP_LOGE(HTTP_TAG, "Failed to fetch headers\n");
+            }
+        }
+        if(http_client != NULL){
+            esp_http_client_close(http_client);
+            esp_http_client_cleanup(http_client);
+            http_client = NULL;
+        }
+        
+        // ESP_LOGI(HTTP_TAG, "\nHTTP STEP 1..5555........%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+        // 结果
+        if(result == 1)
+        {
+            break;
+        }
+        vTaskDelay(50);
+    }
+    if(result != 1)
+    {
+        // 失败
+        // ESP_LOGI(HTTP_TAG, "\nHTTP STEP 1.......GET serialNumber=deviceID............%d\n", result);
+        ESP_LOGI(HTTP_TAG, "\nH.GET serialNumber=deviceID..%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+        network_request_replay(NETWORK_HTTPS_GET_SERIALNUMBER_FAILED);
+        vTaskDelay(1000);
+        vTaskDelete(NULL);
+        return;
+    }
+    #endif
+    network_request_replay(NETWORK_HTTPS_GET_SERIALNUMBER_OK);
+    vTaskDelay(1000);
+    //put
+    //report token  mac rssi
+    #if HTTP_PUT_REPORT_MAC_RSSI_ENABLE
+    ESP_LOGI(HTTP_TAG, "\nPUT macadder.....");
+    // JSON字段说明
+    //{
+    // "rssi": 0,
+    // "serialNumber": "PXN1A8O0D45XD6",
+    // "status": 3,
+    //  "macAddress":"99-97-77-77-07"
+    // }
+
+    
+    for(uint8_t retry=0;retry<HTTP_RETRY_NUMBER_MAX;retry++)
+    {
+        result = 0;
+        http_client=NULL;
+        char url[HTTP_REQUEST_RUL_LEN] = {0};
+        const char path[] = "/iot/device/";
+        memset(url, 0x00, sizeof(url));
+        //PATH 10 255-10
+        // if(common_setting.net_pairing_info.http_url_length < (sizeof(url) - sizeof(path))){
+        //     memcpy(url, common_setting.net_pairing_info.http_url, sizeof(url)-common_setting.net_pairing_info.http_url_length);
+        //     memcpy(&url[common_setting.net_pairing_info.http_url_length], path, strlen(path));
+        // }
+        snprintf(url,sizeof(url)-1,"%s%s",common_setting.net_pairing_info.http_url,path);
+        
+        http_config.url = url;
+        cJSON *pRoot = cJSON_CreateObject();
+
+        if(pRoot == NULL)
+        {
+            ESP_LOGE(HTTP_TAG, "cJSON_CreateObject fail");
+            result = 3;
+            vTaskDelay(50);
+            continue;
+        }      
+        uint8_t mac[6] = {0};
+        char str_mac[32] = {0};
+        esp_read_mac(mac, ESP_MAC_BT);//获取mac地址
+        sprintf(str_mac, "%02X-%02X-%02X-%02X-%02X-%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+
+        cJSON_AddStringToObject(pRoot, "serialNumber", (const char*)common_setting.net_pairing_info.serial_number);
+        cJSON_AddStringToObject(pRoot, "macAddress", str_mac);
+        cJSON_AddNumberToObject(pRoot, "rssi", common_setting.wifi_status.rssi);
+        uint8_t status = 3;//已激活设备 固定值
+        cJSON_AddNumberToObject(pRoot, "status", status);
+        // cJSON_AddItemToArray(pArray, pProductId);
+        // cJSON_AddNumberToObject(pProductId, "productId", common_setting.net_pairing_info.device_id);
+
+        // cJSON_AddNumberToObject(pRoot, "userId", common_setting.net_pairing_info.user_id);
+
+        char *post_data = cJSON_Print(pRoot);
+        if(strlen(post_data) == 0 && post_data == NULL)//数据为空说明cJSON构建失败
+        {
+            cJSON_Delete(pRoot);
+            // ESP_LOGE(HTTP_TAG, "cJSON_Print fail");
+            // ESP_LOGI(HTTP_TAG, "\ncJSON_Print fail.....%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+            vTaskDelay(50);
+            continue; 
+        }
+        // ESP_LOGI(HTTP_TAG, "put data:%s\n", post_data);
+        ESP_LOGI(HTTP_TAG, "http_config.url = %s", http_config.url);
+        
+        http_client = esp_http_client_init(&http_config);
+        if(http_client == NULL)
+        {
+
+            ESP_LOGI(HTTP_TAG, "%s http_config.url = %s",__func__, http_config.url);
+            cJSON_free(post_data);
+            cJSON_Delete(pRoot);
+            vTaskDelay(50);
+            continue;
+        }
+        esp_http_client_set_header(http_client, "Authorization", (const char*)common_setting.net_pairing_info.http_token);
+        esp_http_client_set_method(http_client, HTTP_METHOD_PUT);
+        esp_http_client_set_header(http_client, "Content-Type", "application/json");
+
+        esp_http_client_set_post_field(http_client, post_data, strlen(post_data));
+        esp_err_t err = esp_http_client_perform(http_client);
+        if (err == ESP_OK)
+        {
+            status_code = esp_http_client_get_status_code(http_client);
+            int read_len = esp_http_client_get_content_length(http_client);
+            if(status_code == 200)
+            {
+                result =  1;
+            }
+            else
+            {
+                result =  2;
+            }
+            ESP_LOGI(HTTP_TAG, "PUT Status = %d, content_length = %d", status_code, read_len);
+        }
+        else
+        {
+            result = 2;
+            ESP_LOGE(HTTP_TAG, "PUTfailed: %s", esp_err_to_name(err));
+        }
+        cJSON_free(post_data);
+        cJSON_Delete(pRoot);
+        if(http_client != NULL)
+        {   
+            esp_http_client_close(http_client);
+            esp_http_client_cleanup(http_client);
+            http_client=NULL;
+        }
+        
+        
+        // 结果
+        if(result == 1)
+        {
+            network_request_replay(NETWORK_HTTPS_PUT_DEVICE_INFO_OK);
+            vTaskDelay(1000);
+            break;
+        }
+        vTaskDelay(50);
+    }
+    if(result != 1)
+    {
+        // 失败
+        // ESP_LOGI(HTTP_TAG, "http_put_mac_rssi_task fail 3:%d\n", result);
+        // ESP_LOGI(HTTP_TAG, "\nHTTP STEP 2....PUT.....report rssi.....status.....macadder...faile..%d\n",result);
+        ESP_LOGI(HTTP_TAG, "\nPUT...%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+        
+        network_request_replay(NETWORK_HTTPS_PUT_DEVICE_INFO_FAILED);
+        vTaskDelay(1000);
+        vTaskDelete(NULL);
+        return;
+    }
+    #endif
+    //GET 配置配网服务器下发成功 下发证书 mqtt地址
+    
+    #if HTTP_GET_MQTT_URL_CER_ENABLE 
+    ESP_LOGI(HTTP_TAG, "\nGET MQTT CER\n");
+    for(uint8_t retry=0;retry<HTTP_RETRY_NUMBER_MAX;retry++)
+    {
+        result = 0;
+        http_client = NULL;
+        if(common_setting.net_pairing_info.http_url_flag == 0 || common_setting.net_pairing_info.http_token_flag == 0 || common_setting.net_pairing_info.serial_number_flag == 0)
+        {
+            result = 3;
+            break;
+        }
+        
+        char url[HTTP_REQUEST_RUL_LEN] = {0};
+        const char path[] = "/iot/device/getDeviceBySerialNumber/";
+        memset(url, 0x00, sizeof(url));
+        // if(common_setting.net_pairing_info.http_url_length < (sizeof(url) - sizeof(path)-sizeof(common_setting.net_pairing_info.serial_number))){
+        //     memcpy(url, common_setting.net_pairing_info.http_url, common_setting.net_pairing_info.http_url_length);
+        //     memcpy(&url[common_setting.net_pairing_info.http_url_length], path, strlen(path));
+        //     memcpy(&url[common_setting.net_pairing_info.http_url_length+strlen(path)], common_setting.net_pairing_info.serial_number, common_setting.net_pairing_info.serial_number_length);
+        
+        // }
+        // const char *path = "/iot/device/getDeviceBySerialNumber/";
+        snprintf(url, sizeof(url)-1,"%s%s%s",common_setting.net_pairing_info.http_url,path,common_setting.net_pairing_info.serial_number);
+        
+        http_config.url = url;
+
+        ESP_LOGI(HTTP_TAG, "http_config.url = %s", http_config.url);
+        // ESP_LOGI(HTTP_TAG, "HTTP_TAG1 memory head size: %" PRIu32 " bytes", esp_get_free_heap_size());
+        http_client = esp_http_client_init(&http_config);
+        if(http_client == NULL)
+        {
+            ESP_LOGI(HTTP_TAG, "%s failed = %s",__func__,http_config.url);
+            vTaskDelay(50);
+            continue;
+        }
+        // ESP_LOGI(HTTP_TAG, "HTTP_TAG2 memory head size: %" PRIu32 " bytes", esp_get_free_heap_size());
+        esp_http_client_set_header(http_client, "Authorization", (const char*)common_setting.net_pairing_info.http_token);
+        esp_http_client_set_method(http_client, HTTP_METHOD_GET);
+
+        esp_err_t err = esp_http_client_open(http_client, 0);
+        
+        if(err == ESP_OK)
+        {
+            content_len = 0;
+            status_code=0;
+            int header_ret = esp_http_client_fetch_headers(http_client);
+            ESP_LOGI(HTTP_TAG, "esp_http_client_fetch_headers = %d", header_ret);
+            if (header_ret >= 0)
+            {
+
+                memset(http_download_cache, 0x00, sizeof(http_download_cache));
+                data_read=0;
+                status_code = esp_http_client_get_status_code(http_client);
+                if (status_code == 200)
+                {
+                    int read_len = esp_http_client_get_content_length(http_client);
+                    ESP_LOGI(HTTP_TAG, "%s HTTP GET Status = %d, content_length = %d data_read = %d\n",__func__, status_code, read_len,data_read);
+
+                    data_read = esp_http_client_read_response(http_client, http_download_cache, MAX_HTTP_OUTPUT_BUFFER);
+                    ESP_LOGI(HTTP_TAG, "\nrecv data: %s\n", http_download_cache);
+                    http_download_cache[data_read]='\0';
+                    if(data_read > 0 && data_read <= MAX_HTTP_OUTPUT_BUFFER)
+                    {
+                        cJSON* root_base = cJSON_Parse(http_download_cache);
+                        if(root_base != NULL)
+                        {
+                            cJSON* pData = cJSON_GetObjectItem(root_base,"data");
+                            if(pData != NULL)
+                            {
+                                // cJSON* pDevice_id = cJSON_GetObjectItem(pData,"deviceId");
+                                // {
+                                //     "serialNumber":"PXN1LJ1QUR078E",
+                                //     "firmwareVersion":1.0,
+                                //     "status":4,
+                                //     "rssi":-80,
+                                //     "clientcrtUrl":"https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/02/69ce08f0bfcbe4e5bea9a6a5.crt",
+                                //     "clientkeyUrl":"https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/02/69ce08b3bfcbe4e5bea9a6a4.key",
+                                //     "mosquittoorgcrtUrl":"https://pxn-iot.s3.us-east-2.amazonaws.com/iot01/2026/04/02/69ce0836bfcbe4e5bea9a6a3.crt",
+                                //     "mqttUrl":"mqtts://a3l6aw6tvk7fvq-ats.iot.us-east-1.amazonaws.com:8883",
+                                //     "macAddress":"1",
+                                //     "pid":"0xA00B"
+                                // }
+                                pClientCrt = cJSON_GetObjectItem(pData,"clientcrtUrl");
+                                pClientkey = cJSON_GetObjectItem(pData,"clientkeyUrl");
+                                pServerCrt = cJSON_GetObjectItem(pData,"mosquittoorgcrtUrl");
+                                pMqttSubUrl = cJSON_GetObjectItem(pData,"mqttUrl");
+
+                                memset(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], 0x00, strlen(http_get_cert_task_param.url[SSL_CLIENT_CRT]));
+                                memset(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], 0x00, strlen(http_get_cert_task_param.url[SSL_CLIENT_KEY]));
+                                memset(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], 0x00, strlen(http_get_cert_task_param.url[SSL_SERVER_CRT]));
+                                //get the value
+                                if((pClientCrt != NULL && cJSON_IsString(pClientCrt)) &&
+                                (pClientkey != NULL && cJSON_IsString(pClientkey)) &&
+                                (pServerCrt != NULL && cJSON_IsString(pServerCrt)) &&
+                                (pMqttSubUrl != NULL && cJSON_IsString(pMqttSubUrl)))
+                                {
+                                    ESP_LOGI(HTTP_TAG, "get mqtt\n");
+                                    // common_setting.net_pairing_info.device_id = pDevice_id->valueint;
+                                    // common_setting.net_pairing_info.device_id_flag = 1;
+                                    
+                                    if(strlen(pClientkey->valuestring) > sizeof(http_get_cert_task_param.url[SSL_CLIENT_KEY]) - 1 ||
+                                    strlen(pClientCrt->valuestring) > sizeof(http_get_cert_task_param.url[SSL_CLIENT_CRT]) - 1 ||
+                                    strlen(pServerCrt->valuestring) > sizeof(http_get_cert_task_param.url[SSL_SERVER_CRT]) - 1)
+                                    {
+                                        ESP_LOGE(HTTP_TAG, "url length error\n");
+                                        result = 2;
+                                    }else{
+
+                                        memcpy(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], pClientCrt->valuestring, strlen((const char*)pClientCrt->valuestring));
+                                        memcpy(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], pClientkey->valuestring, strlen((const char*)pClientkey->valuestring));
+                                        memcpy(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], pServerCrt->valuestring, strlen((const char*)pServerCrt->valuestring));
+
+                                        uint16_t mqtt_url_len = strlen((const char*)pMqttSubUrl->valuestring);
+                                        if(mqtt_url_len > MQTT_SUB_URL_MAX_LEN)
+                                        {
+                                            mqtt_url_len=MQTT_SUB_URL_MAX_LEN;
+                                        }
+
+                                        memset(common_setting.net_pairing_info.mqtt_sub_url, 0x00, sizeof(common_setting.net_pairing_info.mqtt_sub_url));
+                                        memcpy(common_setting.net_pairing_info.mqtt_sub_url, pMqttSubUrl->valuestring, mqtt_url_len);
+                                        common_setting.net_pairing_info.mqtt_sub_url_length = mqtt_url_len;
+                                        common_setting.net_pairing_info.mqtt_sub_url_flag = 1;
+
+
+                                        memset(common_storage.net_info.mqtt_sub_url, 0x00, sizeof(common_storage.net_info.mqtt_sub_url));
+                                        memcpy(common_storage.net_info.mqtt_sub_url, pMqttSubUrl->valuestring,mqtt_url_len);
+                                        common_storage.net_info.mqtt_sub_url[mqtt_url_len]='\0';
+                                        common_storage.net_info.mqtt_url_len=mqtt_url_len;
+
+                                        //保存mqtt 地址
+                                        //UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) != ESP_OK
+                                        if(User_Flash_Write_With_Flag(UF_OFFSET_USER_CONFIG_INFO_ADDR, UF_OFFSET_USER_CONFIG_INFO_FLAG, &common_storage.net_info, sizeof(NET_INFO_T)) == ESP_OK)
+                                        {
+                                            ESP_LOGE(HTTP_TAG, "mqtt_sub_url success: %s\n",common_storage.net_info.mqtt_sub_url);
+                                            result = 1;
+                                        }
+                                        else
+                                        {
+                                            ESP_LOGE(HTTP_TAG, "mqtt_sub_url fail: %s\n",common_storage.net_info.mqtt_sub_url);
+                                            result = 2;
+                                        }
+                                    }
+
+                                }
+                                else
+                                {
+                                    result = 2;
+                                }
+                            }
+                            else
+                            {
+                                result = 3;
+                            }
+                            cJSON_Delete(root_base);
+                        }
+                        else
+                        {
+                            result = 4;
+                            ESP_LOGI(HTTP_TAG, "root_base is null\n");
+                        }
+                    }else
+                    {
+                        result = 6;
+                        ESP_LOGE(HTTP_TAG, "data large");
+                    }
+                    
+                }
+                else
+                {
+                    result = 6;
+                    ESP_LOGE(HTTP_TAG, "code!=200\n");
+                }
+            }else{
+                result = 6;
+                ESP_LOGE(HTTP_TAG, "code!=200\n");
+            }
+        }
+        if(http_client != NULL)
+        {
+            esp_http_client_close(http_client);
+            esp_http_client_cleanup(http_client);
+            http_client=NULL;
+        }
+        
+
+        // 结果
+        if(result == 1)
+        {
+            network_request_replay(NETWORK_HTTPS_GET_CER_URL_OK);
+            vTaskDelay(1000);
+            break;
+        }
+        vTaskDelay(50);
+    }
+    if(result != 1)
+    {
+        // 失败
+        ESP_LOGI(HTTP_TAG, "\n.GET MQTT CER......FAILED..%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+        // ESP_LOGI(HTTP_TAG, "HTTP_TAG1 memory head size: %" PRIu32 " bytes", esp_get_free_heap_size());
+        //GET 配置配网服务器下发成功 下发证书 mqtt地址
+        network_request_replay(NETWORK_HTTPS_GET_CER_URL_FAILED);
+        vTaskDelay(1000);
+        vTaskDelete(NULL);
+        return;
+    }
+    #endif
+
+    
+    if(pClientCrt != NULL && pClientkey != NULL && pServerCrt != NULL && pMqttSubUrl != NULL && result == 1)
+    {
+        result = 0;
+        ESP_LOGI(HTTP_TAG, "\nCER.....HTTP%d %" PRIu32 " bytes",result,esp_get_free_heap_size());
+        xEventGroupSetBits(common_event_group, COMMON_HTTP_DOWNLOAD_BIT);
+    }
+    else
+    {
+        result = 2;
+    }
+    vTaskDelete(NULL);
+    return;
+}
+
+void Http_Get_Url_Task(void){
+    xTaskCreate(Http_Get_Url_Task_Cb, "http_get_url_task", HTTP_GET_URL_TASK_STACK, NULL, 2, NULL);
+}
+
+void Http_Download_Task(void){
+    xTaskCreate(Http_Download_Task_Cb, "http_download_task", HTTP_DOWNLOAD_CRT_TASK_STACK, NULL, 2, NULL);
+}
+void Http_Download_Status_Check(void)
+{
+    // ESP_LOGI(HTTP_TAG, "[APP] Free memory http1 on: %" PRIu32 " bytes", esp_get_free_heap_size());
+    if((xEventGroupWaitBits(common_event_group, COMMON_HTTP_DOWNLOAD_BIT, pdFALSE, pdFALSE, 0) & COMMON_HTTP_DOWNLOAD_BIT) != 0)
+    {
+        xEventGroupClearBits(common_event_group, COMMON_HTTP_DOWNLOAD_BIT);
+        vTaskDelay(50 / portTICK_PERIOD_MS);
+        Http_Download_Task();
+        ESP_LOGI(HTTP_TAG, "http_download_task %" PRIu32 " bytes", esp_get_free_heap_size());
+    }
+}
+
+#endif
diff --git a/main/user_http.h b/main/user_http.h
new file mode 100644 (file)
index 0000000..15218d9
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _HTTP_H_
+#define _HTTP_H_
+#define ENABLE_HTTP_FUNC     1
+#if ENABLE_HTTP_FUNC
+#include "esp_http_client.h"
+
+#define HTTP_REQUEST_RUL_LEN     255
+#define CONFIG_EXAMPLE_ENABLE_RESPONSE_BUFFER_DUMP  1
+#define HTTP_GET_URL_TASK_STACK         (2*1024)
+
+#define HTTP_DOWNLOAD_CRT_TASK_STACK    (4*1024)
+
+typedef struct
+{
+    char url[3][128];
+}HTTP_GET_CERT_TASK_PARAM_T;
+
+extern HTTP_GET_CERT_TASK_PARAM_T http_get_cert_task_param;;
+void Http_Download_Status_Check(void);
+void Http_Get_Url_Task(void);
+void Http_Download_Task(void);
+#endif
+#endif
diff --git a/main/user_mqtt.c b/main/user_mqtt.c
new file mode 100644 (file)
index 0000000..d7a3298
--- /dev/null
@@ -0,0 +1,567 @@
+#include "user_mqtt.h"
+#include "https_ota.h"
+#include "cJSON.h"
+#if ENABLE_MQTT_FUNC
+static const char *MQTT_TAG = "MQTT";
+
+#define REPLY_STATUS_OK 1
+#define REPLY_STATUS_FAIL 0
+// 发送队列静态内存
+uint8_t  mqtt_send_queue_storage[MQTT_SEND_QUEUE_LENGTH * sizeof(mqtt_send_msg_t)];
+QueueHandle_t mqtt_send_queue_handle=NULL;
+StaticQueue_t mqtt_send_queue_buffer;
+
+uint8_t mqtt_recv_queue_storage[MQTT_RECV_QUEUE_LENGTH * sizeof(mqtt_recv_msg_t)];
+QueueHandle_t mqtt_recv_queue_handle=NULL;
+StaticQueue_t mqtt_recv_queue_buffer;
+static uint8_t retry_connect_cnt = 0;
+
+// MQTT_LOOP
+TaskHandle_t mqtt_connect_task_handler;
+StackType_t mqtt_connect_task_stack[MQTT_CONNECT_TASK_STACK];
+StaticTask_t mqtt_connect_task_tcb;
+
+
+static void log_error_if_nonzero(const char *message, int error_code)
+{
+    if (error_code != 0) {
+        ESP_LOGE(MQTT_TAG, "Last error %s: 0x%x", message, error_code);
+    }
+}
+
+/*
+ * @brief Event handler registered to receive MQTT events
+ *
+ *  This function is called by the MQTT client event loop.
+ *
+ * @param handler_args user data registered to the event.
+ * @param base Event base for the handler(always MQTT Base in this example).
+ * @param event_id The id for the received event.
+ * @param event_data The data for the event, esp_mqtt_event_handle_t.
+ */
+
+static uint8_t mqtt_init_task_flag = 0;
+static uint8_t mqtt_send_data_count = 0;
+static uint8_t mqtt_init_flag = 0;
+static char topic_str[64]={"/property/post"};
+#define MQTT_USER_DEFAULT_TOPIC     1
+static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
+{
+    ESP_LOGD(MQTT_TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32, base, event_id);
+    esp_mqtt_event_handle_t event = event_data;
+    esp_mqtt_client_handle_t mqtt_client = event->client;
+    int msg_id;
+    switch ((esp_mqtt_event_id_t)event_id) {
+    case MQTT_EVENT_CONNECTED:
+        retry_connect_cnt = 0;
+        mqtt_send_data_count=0;
+        common_setting.mqtt_user_cfg.mqtt_sub_flag = 0;
+        common_setting.mqtt_user_cfg.mqtt_connect_flag = 1;
+        ESP_LOGI(MQTT_TAG, "MQTT_EVENT_CONNECTED");
+        // /{pid}/{serialNumber}/property/post  
+        #if MQTT_USER_DEFAULT_TOPIC
+        snprintf(topic_str,sizeof(topic_str),"%s",MQTT_TOPIC);
+        msg_id = esp_mqtt_client_subscribe(mqtt_client, topic_str, 0);
+        #else
+        snprintf(topic_str,sizeof(topic_str),"%04X/%s/property/post",common_setting.mcu_info.pid,(char *)common_storage.net_info.serial_number);
+        msg_id = esp_mqtt_client_subscribe(mqtt_client, topic_str, 0);
+        #endif
+        ESP_LOGI(MQTT_TAG, "send subscribe msg_id=%d topic_str=%s", msg_id,topic_str);
+        break;
+    case MQTT_EVENT_DISCONNECTED:
+        common_setting.mqtt_user_cfg.mqtt_connect_flag = 0;
+        common_setting.mqtt_user_cfg.mqtt_sub_flag = 0;
+        Mqtt_Send_Connect_Status();
+        // xEventGroupSetBits(common_event_group, COMMON_MQTT_DISCONNECT_BIT);//
+        ESP_LOGI(MQTT_TAG, "MQTT_EVENT_DISCONNECTED");
+        break;
+
+    case MQTT_EVENT_SUBSCRIBED:
+        common_setting.mqtt_user_cfg.mqtt_sub_flag =1;
+        Mqtt_Send_Connect_Status();
+        Mqtt_Send_Mcu_Info();
+        ESP_LOGI(MQTT_TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d ", event->msg_id);
+        break;
+
+    case MQTT_EVENT_UNSUBSCRIBED:
+        common_setting.mqtt_user_cfg.mqtt_sub_flag = 0;
+        ESP_LOGI(MQTT_TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
+        break;
+
+    case MQTT_EVENT_PUBLISHED:
+        ESP_LOGI(MQTT_TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
+        break;
+
+    case MQTT_EVENT_DATA:
+        ESP_LOGI(MQTT_TAG, "TOPIC=%.*s\r\n", event->topic_len, event->topic);
+        ESP_LOGI(MQTT_TAG, "DATA=%.*s\r\n", event->data_len, event->data);
+        Mqtt_Recv_Data(event->topic,event->topic_len,event->data,event->data_len);
+        break;
+
+    case MQTT_EVENT_ERROR:
+        ESP_LOGI(MQTT_TAG, "MQTT_EVENT_ERROR");
+        if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
+            log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
+            log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
+            log_error_if_nonzero("captured as transport's socket errno",  event->error_handle->esp_transport_sock_errno);
+            ESP_LOGI(MQTT_TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
+
+        }
+        break;
+    
+    case MQTT_EVENT_BEFORE_CONNECT:
+        // mqtt用户信息有误
+
+        break;
+
+    default:
+        ESP_LOGI(MQTT_TAG, "Other event id:%d", event->event_id);
+        break;
+    }
+}
+void Mqtt_Send_Connect_Status(void)//包含心跳
+{
+    uint8_t heart_beat_data[2] = {0};//数据
+    heart_beat_data[0]=COMMON_MQTT_STATUS;//状态类型
+    if(Mqtt_Get_Connect_Flag())
+    {
+        heart_beat_data[1]=0x01;//mqtt连接状态
+    }else{
+        heart_beat_data[1]=0x00;
+    }
+    Uart_Reply_Send(COMMON_UART_HEART_CMD, heart_beat_data, sizeof(heart_beat_data), HOST_TYPE_UART);//(cmd, pbuf, len, host_type);
+}
+
+
+static esp_err_t Mqtt_App_Init(void)
+{
+    esp_err_t err = ESP_FAIL;
+    if(common_setting.wifi_status.wifi_state != 1)
+    {
+        ESP_LOGI(MQTT_TAG, "wifi disconnected");
+        return ESP_FAIL;
+    }
+    if(common_storage.ssl_cert[SSL_CLIENT_CRT].length == 0 || common_storage.ssl_cert[SSL_CLIENT_KEY].length == 0 || common_storage.ssl_cert[SSL_SERVER_CRT].length == 0)
+    {
+        ESP_LOGI(MQTT_TAG, "cert error");
+        return ESP_FAIL;
+    }
+    if(common_storage.net_info.mqtt_url_len == 0)
+    {
+        ESP_LOGI(MQTT_TAG, "mqtt url error");
+        return ESP_FAIL;
+    }
+    
+    if(common_storage.net_info.mqtt_url_len==0)
+    {
+        ESP_LOGI(MQTT_TAG, "mqtt_sub_url == 0");
+        return ESP_FAIL;
+    }
+    if(mqtt_init_flag)
+    {
+        //
+        ESP_LOGI(MQTT_TAG, "Mqtt initialized.\n");
+        return ESP_OK;
+    }
+    memset(&common_setting.mqtt_cfg, 0, sizeof(common_setting.mqtt_cfg));
+    retry_connect_cnt = 0;
+    // common_setting.mqtt_cfg.session.keepalive = 60;
+    common_setting.mqtt_cfg.network.disable_auto_reconnect = false;
+    // common_setting.mqtt_cfg.broker.address.transport = MQTT_TRANSPORT_OVER_TCP;
+    // common_setting.mqtt_cfg.buffer.out_size = 2048;
+    // common_setting.mqtt_cfg.buffer.size = 2048;
+    
+    ESP_LOGI(MQTT_TAG, "URI: %s %s", common_storage.net_info.mqtt_sub_url,common_setting.net_pairing_info.mqtt_sub_url);
+    common_setting.mqtt_cfg.broker.address.uri = (const char *)common_storage.net_info.mqtt_sub_url;
+    
+    common_setting.mqtt_cfg.broker.verification.certificate = (const char *)common_storage.ssl_cert[SSL_SERVER_CRT].content;
+    common_setting.mqtt_cfg.credentials.authentication.certificate = (const char *)common_storage.ssl_cert[SSL_CLIENT_CRT].content;
+    common_setting.mqtt_cfg.credentials.authentication.key = (const char *)common_storage.ssl_cert[SSL_CLIENT_KEY].content;
+    
+    #if MQTT_USER_DEFAULT_TOPIC
+    common_setting.mqtt_cfg.credentials.client_id = "basicPubSub";
+    #else
+    common_setting.mqtt_cfg.credentials.client_id = (const char *)common_storage.net_info.serial_number;
+    #endif
+    ESP_LOGI(MQTT_TAG, "Mqtt init %s",(char *)common_storage.net_info.serial_number);
+    common_setting.mqtt_client_handle = esp_mqtt_client_init(&common_setting.mqtt_cfg);
+    if(common_setting.mqtt_client_handle == NULL){
+        ESP_LOGI(MQTT_TAG, "client_handle null\n");
+        err = ESP_FAIL;
+        return err;
+    }
+    ESP_LOGI(MQTT_TAG, "Mqtt init");
+    /* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
+    err = esp_mqtt_client_register_event(common_setting.mqtt_client_handle, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
+    if(err == ESP_OK)
+    {
+        err = esp_mqtt_client_start(common_setting.mqtt_client_handle);
+        if(err == ESP_OK)
+        {
+            mqtt_init_flag=1;
+            ESP_LOGI(MQTT_TAG, "success \n");
+        }
+    }
+    return err;
+}
+uint8_t Mqtt_Get_Connect_Flag(void)
+{
+    if(common_setting.mqtt_client_handle != NULL &&common_setting.mqtt_user_cfg.mqtt_connect_flag == 1 && \
+        common_setting.mqtt_user_cfg.mqtt_sub_flag == 1 && \
+        common_setting.ble_status.ble_state == 0 && common_setting.wifi_status.wifi_state == 1)
+    {
+        return 1;
+    }
+    return 0;
+}
+// MQTT发送按键灯颜色
+void Mqtt_Get_Key_Led_Color(uint8_t *color_data,uint16_t color_len)
+{
+    
+    ESP_LOG_BUFFER_HEX(MQTT_TAG, color_data, color_len);
+    uint8_t uart_reply_data[1]={0};
+    //没有订阅成 没有连接wifi 没有连接mqtt 直接返回NULL
+    if(!Mqtt_Get_Connect_Flag() || color_data == NULL || color_len == 0 || color_len < 5) 
+    {
+        uart_reply_data[0] = REPLY_STATUS_FAIL;
+        Uart_Reply_Send(COMMON_UART_GET_KEY_COLOR_CMD,uart_reply_data, sizeof(uart_reply_data), HOST_TYPE_UART);
+        ESP_LOGI(MQTT_TAG, "Mqtt_Get_Key_Led_Color!!!%d\n",color_len);
+        // ESP_LOG_BUFFER_HEX(MQTT_TAG, color_data, color_len);
+        return;
+    }
+    
+    //key==dpid value==color 12*3=36
+    // "383":"FF0000",
+    
+    char key[8]={0};
+    char value[10]={0};
+    cJSON *root = cJSON_CreateObject();
+    if(root==NULL)
+    {
+        ESP_LOGI(MQTT_TAG, "is not storage\n");
+        uart_reply_data[0] = REPLY_STATUS_FAIL;
+        Uart_Reply_Send(COMMON_UART_GET_KEY_COLOR_CMD,uart_reply_data, sizeof(uart_reply_data), HOST_TYPE_UART);
+        
+        return;
+    }
+    for(int i=0;i<color_len/5;i++)
+    {
+        uint8_t dpid_h = color_data[i*5 + 0];   // 高8位 0x01
+        uint8_t dpid_l = color_data[i*5 + 1];   // 低8位 0x7F
+        uint16_t dpid = (dpid_h << 8) | dpid_l; // 0x017F = 383
+
+        snprintf(key,sizeof(key),"%d", dpid);
+        uint8_t r = color_data[i*5 + 2];
+        uint8_t g = color_data[i*5 + 3];
+        uint8_t b = color_data[i*5 + 4];
+
+        snprintf(value,sizeof(value),"%02X%02X%02X",r,g,b);
+        cJSON_AddStringToObject(root, key, value);
+    }
+    char *json_str = cJSON_PrintUnformatted(root);
+    cJSON_Delete(root);
+    uint16_t json_str_len = strlen(json_str);
+    if(json_str_len == 0 || json_str_len >= MQTT_SEND_DATA_BUF_SIZE)
+    {
+        ESP_LOGI(MQTT_TAG, "key led is large:%s %d\n", json_str,strlen(json_str));
+        if(json_str != NULL)
+        {
+            free(json_str);
+        }
+        json_str = NULL;
+        //回复串口信息
+        
+        uart_reply_data[0] = REPLY_STATUS_FAIL;
+        Uart_Reply_Send(COMMON_UART_GET_KEY_COLOR_CMD,uart_reply_data, sizeof(uart_reply_data), HOST_TYPE_UART);
+        return;
+    }
+    mqtt_send_msg_t send_msg={0};
+    memcpy(send_msg.data,json_str,json_str_len);
+    ESP_LOGI(MQTT_TAG, "key led:%s\n", json_str);
+    free(json_str);
+    json_str = NULL;
+    memcpy(send_msg.topic, topic_str, strlen(topic_str));
+    
+    if(mqtt_send_queue_handle==NULL)
+    {
+        ESP_LOGI(MQTT_TAG, "mqtt_send_queue_handle is null\n");
+        return;
+    }
+    if (xQueueSend(mqtt_send_queue_handle, &send_msg, 0) != pdPASS) {
+        // ESP_LOGW(MQTT_TAG, "QUEUE is full\n");
+        uart_reply_data[0] = REPLY_STATUS_FAIL;
+        Uart_Reply_Send(COMMON_UART_GET_KEY_COLOR_CMD,uart_reply_data, sizeof(uart_reply_data), HOST_TYPE_UART);
+    }else{
+        
+        uart_reply_data[0] = REPLY_STATUS_OK;
+        Uart_Reply_Send(COMMON_UART_GET_KEY_COLOR_CMD,uart_reply_data, sizeof(uart_reply_data), HOST_TYPE_UART);
+    }
+
+    return;
+}
+
+//开机连上mqtt订阅成功之后发送主控信息
+static uint8_t mqtt_send_mcu_info_flag = 0;//发送主控信息标志,1表示已发送过,0表示未发送过
+void Mqtt_Send_Mcu_Info(void)
+{
+
+    if(mqtt_send_mcu_info_flag)
+    {
+        return;
+    }
+    if(!Mqtt_Get_Connect_Flag()) 
+    {
+        return;
+    }
+    char pid_str[6] = {0};
+    char vid_str[6] = {0};
+    char wifi_soc[15] = {"Unknown"};
+
+    // PID、VID 大写十六进制格式
+    snprintf(pid_str, sizeof(pid_str), "%04X", common_setting.mcu_info.pid);
+    snprintf(vid_str, sizeof(vid_str), "%04X", common_setting.mcu_info.vid);
+
+    // 获取芯片型号
+    uint8_t chip_len = 0;
+    get_chip_info(wifi_soc, &chip_len);
+    if (chip_len == 0) {
+        strcpy(wifi_soc, "Unknown");
+    }
+
+    // 版本号格式化 0x0015 → V0021
+    char fw_ver[8] = {0}, wifi_ver[8] = {0};
+    snprintf(fw_ver, sizeof(fw_ver), "%04u", common_setting.mcu_info.fw_version);
+    snprintf(wifi_ver, sizeof(wifi_ver), "%04u", (unsigned int)FW_VERSION);
+    if(FW_VERSION > 9999)
+    {
+
+       snprintf(wifi_ver, sizeof(wifi_ver), "%s","9999");
+    }
+    // ===================== 构建正确的 JSON =====================
+    cJSON *root = cJSON_CreateObject();
+    if (root == NULL) return;
+    
+
+    // 把设备信息加到里面
+    cJSON_AddStringToObject(root, "pid", pid_str);
+    cJSON_AddStringToObject(root, "vid", vid_str);
+    cJSON_AddStringToObject(root, "wifi_soc", wifi_soc);
+    cJSON_AddStringToObject(root, "fw_version", fw_ver);
+    cJSON_AddStringToObject(root, "wifi_version", wifi_ver);
+    cJSON_AddStringToObject(root, "serial_id", (char *)common_storage.net_info.serial_number);
+    cJSON_AddNumberToObject(root, "connected_platform", 2);
+    cJSON_AddNumberToObject(root, "power_on", 0);
+    // 生成压缩格式JSON(不带换行,HTTP专用)
+    char *post_data = cJSON_Print(root);
+    // char *post_data = cJSON_PrintUnformatted(root);
+    cJSON_Delete(root);
+
+    if (post_data == NULL) return;
+
+    
+    if(strlen(post_data) >= MQTT_SEND_DATA_BUF_SIZE)
+    {
+        ESP_LOGI(MQTT_TAG, "len large %d", strlen(post_data));
+        free(post_data);
+        post_data=NULL;
+        return;
+    }
+    if(strlen(post_data) == 0 || strlen(topic_str) == 0)
+    {
+        ESP_LOGI(MQTT_TAG, "len no %d", strlen(topic_str),strlen(post_data));
+        free(post_data);
+        post_data=NULL;
+        return;
+    }
+    mqtt_send_msg_t send_msg={0};
+    memcpy(send_msg.data,post_data,strlen(post_data));
+    ESP_LOGI(MQTT_TAG, "CJSON:%s", post_data);
+    free(post_data);
+    post_data = NULL;
+
+    memcpy(send_msg.topic,topic_str,strlen(topic_str));
+    
+    if(mqtt_send_queue_handle==NULL)
+    {
+        ESP_LOGI(MQTT_TAG, "Mqtt_Send_Mcu_Info is null\n");
+        return;
+    }
+    if (xQueueSend(mqtt_send_queue_handle, &send_msg, 0) != pdPASS) {
+        // ESP_LOGW(MQTT_TAG, "QUEUE is full\n");
+        mqtt_send_mcu_info_flag = 1;
+    }else{
+        ESP_LOGI(MQTT_TAG, "Send Data OK\n");
+        mqtt_send_mcu_info_flag = 0;
+    }
+}
+void Mqtt_Send_Data(void)
+{
+    // return;
+
+    if(mqtt_send_data_count >= 60)
+    {
+        mqtt_send_data_count=0;
+        Mqtt_Send_Mcu_Info();   
+    }
+    mqtt_send_data_count++;
+}
+// 接收mqtt发过来的数据
+void Mqtt_Recv_Data(char *topic, int topic_len, char *data, int data_len)
+{
+    // 1. 长度判断
+    
+    if (topic_len > MQTT_TOPIC_LEN || data_len > MQTT_DATA_BUF_SIZE || data_len <= 0 || topic_len <= 0) {
+        ESP_LOGI(MQTT_TAG, "len large\n");
+        return;
+    }
+
+    // 2. 构建消息
+    mqtt_recv_msg_t msg;
+    memset(&msg, 0, sizeof(mqtt_recv_msg_t));
+
+    // 拷贝主题
+    memcpy(msg.topic, topic, topic_len);
+    msg.topic_len = topic_len;
+
+    // 拷贝数据
+    memcpy(msg.data, data, data_len);
+    msg.data_len = data_len;
+    if(mqtt_recv_queue_handle){
+        if (xQueueSend(mqtt_recv_queue_handle, &msg, 0) != pdPASS) {
+            ESP_LOGW(MQTT_TAG, "QUEUE is full\n");
+        }
+    }else{
+        ESP_LOGI(MQTT_TAG,"QUEUE is NULL");
+    }
+}
+
+void Mqtt_Connect_Status_Check(void)
+{
+    if((xEventGroupWaitBits(common_event_group, COMMON_MQTT_CONNECT_BIT, pdFALSE, pdFALSE, 0) & COMMON_MQTT_CONNECT_BIT) != 0 && common_setting.ble_status.ble_state == 0\
+    && common_setting.wifi_status.wifi_state == 1 && common_setting.https_ota_cfg.https_ota_start_flag == 0)
+    {
+        xEventGroupClearBits(common_event_group, COMMON_MQTT_CONNECT_BIT);
+        vTaskDelay(50 / portTICK_PERIOD_MS);
+        if(Mqtt_App_Init() == ESP_OK)
+        {
+            ESP_LOGI(MQTT_TAG, "Mqtt_Init_Task");
+            Mqtt_Init_Task();
+        }
+        else
+        {
+            ESP_LOGI(MQTT_TAG, "Mqtt init fail");
+        }
+    }
+
+    if((xEventGroupWaitBits(common_event_group, COMMON_MQTT_DISCONNECT_BIT, pdFALSE, pdFALSE, 0) & COMMON_MQTT_DISCONNECT_BIT) != 0)
+    {
+        xEventGroupClearBits(common_event_group, COMMON_MQTT_DISCONNECT_BIT);
+        vTaskDelay(50 / portTICK_PERIOD_MS);
+        
+        if(mqtt_init_flag == 1 && common_setting.mqtt_client_handle != NULL){
+            if(esp_mqtt_client_stop(common_setting.mqtt_client_handle) == ESP_OK)
+            {
+                
+                ESP_LOGI(MQTT_TAG, "Mqtt stop OK");
+            }
+            else
+            {
+                ESP_LOGI(MQTT_TAG, "Mqtt stop fail");
+            }
+            vTaskDelay(50 / portTICK_PERIOD_MS);
+            esp_mqtt_client_destroy(common_setting.mqtt_client_handle);
+            common_setting.mqtt_client_handle=NULL;
+            retry_connect_cnt = 0;
+            mqtt_init_flag=0;
+            common_setting.mqtt_user_cfg.mqtt_connect_flag = 0;
+            common_setting.mqtt_user_cfg.mqtt_sub_flag = 0;
+        }
+    }
+    
+}
+//断开wifi连接同时断开mqtt连接 释放mqtt资源
+void Mqtt_Force_Stop(void)
+{
+    if(mqtt_init_flag && common_setting.mqtt_client_handle != NULL && (common_setting.mqtt_user_cfg.mqtt_start_flag == 1 || \
+    common_setting.wifi_status.connect_mode == 3))
+    {
+        
+        esp_mqtt_client_stop(common_setting.mqtt_client_handle);
+        
+        //
+        vTaskDelay(pdMS_TO_TICKS(150));
+        
+        //释放资源
+        esp_mqtt_client_destroy(common_setting.mqtt_client_handle);
+        
+       
+        common_setting.mqtt_client_handle = NULL;
+        mqtt_init_flag = 0;
+        retry_connect_cnt = 0;
+        common_setting.mqtt_user_cfg.mqtt_connect_flag = 0;
+        common_setting.mqtt_user_cfg.mqtt_sub_flag = 0;
+        
+        ESP_LOGW(MQTT_TAG, "MQTT STOP");
+    }
+}
+static void Mqtt_Init_Task_Cb(void *p)
+{
+    mqtt_recv_msg_t recv_msg;
+    mqtt_send_msg_t send_msg;
+    while (1)
+    {
+        if(mqtt_recv_queue_handle != NULL){
+            if(xQueueReceive(mqtt_recv_queue_handle, &recv_msg, 0) == pdTRUE)
+            {
+                ESP_LOGI(MQTT_TAG, "mqtt recv data");
+                ESP_LOGI(MQTT_TAG, "主题:%.*s", recv_msg.topic_len, recv_msg.topic);
+                ESP_LOGI(MQTT_TAG, "数据:%.*s", recv_msg.data_len, recv_msg.data);
+
+                // =============================================
+
+                // 1. JSON 解析
+            }
+        }
+        if(mqtt_send_queue_handle != NULL){
+            if (xQueueReceive(mqtt_send_queue_handle, &send_msg, 0) == pdTRUE) {
+                if (common_setting.mqtt_user_cfg.mqtt_connect_flag == 1 && common_setting.wifi_status.wifi_state == 1) {
+                    ESP_LOGI(MQTT_TAG, "queue: msg_id=%s %s", send_msg.topic,send_msg.data);
+                    esp_mqtt_client_publish(common_setting.mqtt_client_handle,send_msg.topic,\
+                        send_msg.data,strlen(send_msg.data),\
+                        0, 0
+                    );
+                    
+                }
+            }
+        }
+        vTaskDelay(10 / portTICK_PERIOD_MS);
+    }
+}
+
+void Mqtt_Init_Task(void)
+{
+    if(mqtt_init_task_flag){
+        return;
+    }
+    mqtt_init_task_flag=1;
+
+    // mqtt_recv_queue_handle = xQueueCreate(MQTT_RECV_QUEUE_LENGTH,sizeof(mqtt_recv_msg_t));
+    // if(mqtt_recv_queue_handle == NULL){
+    //     ESP_LOGI(MQTT_TAG,"mqtt_recv_queue_handle ERROR");
+    // }
+    // mqtt_send_queue_handle = xQueueCreate(MQTT_SEND_QUEUE_LENGTH,sizeof(mqtt_send_msg_t));
+    // if(mqtt_send_queue_handle == NULL){
+    //     ESP_LOGI(MQTT_TAG,"mqtt_send_queue_handle ERROR");
+    // }
+    mqtt_recv_queue_handle = xQueueCreateStatic(MQTT_RECV_QUEUE_LENGTH, MQTT_RECV_QUEUE_ITEM_SIZE, mqtt_recv_queue_storage, &mqtt_recv_queue_buffer);
+    mqtt_send_queue_handle = xQueueCreateStatic(MQTT_SEND_QUEUE_LENGTH, MQTT_SEND_QUEUE_ITEM_SIZE, mqtt_send_queue_storage, &mqtt_send_queue_buffer);
+    mqtt_connect_task_handler = xTaskCreateStatic(Mqtt_Init_Task_Cb, "mqtt_task", MQTT_CONNECT_TASK_STACK, NULL, 2, mqtt_connect_task_stack, &mqtt_connect_task_tcb);
+     
+}
+
+
+#endif
+
+
+
+
diff --git a/main/user_mqtt.h b/main/user_mqtt.h
new file mode 100644 (file)
index 0000000..74d1c76
--- /dev/null
@@ -0,0 +1,61 @@
+#ifndef _MQTT_H_
+#define _MQTT_H_
+#include "project_common.h"
+#define ENABLE_MQTT_FUNC 1
+#if ENABLE_MQTT_FUNC
+
+#define MQTT_TOPIC  "sdk/test/python"
+#define MQTT_TOPIC_LEN    64
+#define MQTT_MAX_TRY_CONNECT_TIME   10
+#define MQTT_DATA_BUF_SIZE  256
+#define MQTT_RECV_QUEUE_LENGTH 4
+
+#define MQTT_SEND_QUEUE_LENGTH  4
+#define MQTT_SEND_MSG_MAX_LEN   512
+
+
+#define MQTT_PUT_URL_LEN 255
+
+// MQTT 接收消息结构体
+typedef struct {
+    char topic[MQTT_TOPIC_LEN+1];          // 主题
+    uint8_t data[MQTT_DATA_BUF_SIZE+1];       // 数据
+    uint8_t topic_len;      // 主题长度
+    uint16_t data_len;       // 数据长度
+} mqtt_recv_msg_t;
+
+// 发送消息结构体
+#define MQTT_SEND_DATA_BUF_SIZE 512
+
+typedef struct {
+    char topic[MQTT_TOPIC_LEN+1];
+    char data[MQTT_SEND_DATA_BUF_SIZE];
+} mqtt_send_msg_t;
+
+#define MQTT_RECV_QUEUE_ITEM_SIZE   sizeof(mqtt_recv_msg_t)
+#define MQTT_SEND_QUEUE_ITEM_SIZE   sizeof(mqtt_send_msg_t)
+#define MQTT_CONNECT_TASK_STACK            (2*1024)
+extern TaskHandle_t mqtt_connect_task_handler;
+extern StackType_t mqtt_connect_task_stack[MQTT_CONNECT_TASK_STACK];
+extern StaticTask_t mqtt_connect_task_tcb;
+
+extern uint8_t mqtt_recv_queue_storage[MQTT_RECV_QUEUE_LENGTH * sizeof(mqtt_recv_msg_t)];
+extern QueueHandle_t mqtt_recv_queue_handle;
+extern StaticQueue_t mqtt_recv_queue_buffer;
+
+extern uint8_t  mqtt_send_queue_storage[MQTT_SEND_QUEUE_LENGTH * sizeof(mqtt_send_msg_t)];
+extern QueueHandle_t mqtt_send_queue_handle;
+extern StaticQueue_t mqtt_send_queue_buffer;
+
+
+void Mqtt_Connect_Status_Check(void);
+void Mqtt_Send_Data(void);
+void Mqtt_Recv_Data(char *topic,int topic_len,char *data,int data_len);
+void Mqtt_Init_Task(void);
+void Mqtt_Force_Stop(void);
+void Mqtt_Get_Key_Led_Color(uint8_t *color_data,uint16_t color_len);
+void Mqtt_Send_Mcu_Info(void);
+uint8_t Mqtt_Get_Connect_Flag(void);
+void Mqtt_Send_Connect_Status(void);//发送mqtt连接状态给主控
+#endif
+#endif
\ No newline at end of file
diff --git a/main/version.h b/main/version.h
new file mode 100644 (file)
index 0000000..60f2433
--- /dev/null
@@ -0,0 +1,10 @@
+
+#ifndef __VERSION_H__
+#define __VERSION_H__
+#include "project_common.h"
+
+#define VERSION_TO_STR(num)  ({ char b[5]; snprintf(b,5,"%04u",num); b; })
+#define FW_VERSION_STR       VERSION_TO_STR(FW_VERSION)
+
+#endif
+
diff --git a/main/wifi.c b/main/wifi.c
new file mode 100644 (file)
index 0000000..1aecb00
--- /dev/null
@@ -0,0 +1,746 @@
+/* WiFi
+
+   This example code is in the Public Domain (or CC0 licensed, at your option.)
+
+   Unless required by applicable law or agreed to in writing, this
+   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+   CONDITIONS OF ANY KIND, either express or implied.
+*/
+#include <string.h>
+#include "project_common.h"
+#include "wifi.h"
+#if ENABLE_WIFI_FUNC
+#include "esp_https_ota.h"
+#include "user_mqtt.h"
+#include "https_ota.h"
+#include "user_http.h"
+#include "esp_timer.h"
+// #include "freertos/FreeRTOS.h"
+// #include "freertos/task.h"
+// #include "freertos/event_groups.h"
+// #include "esp_system.h"
+// #include "esp_wifi.h"
+// #include "esp_event.h"
+// #include "esp_log.h"
+// #include "nvs_flash.h"
+
+// #include "lwip/err.h"
+// #include "lwip/sys.h"
+
+// #include "wifi.h"
+// #include "mqtt_client.h"
+// #include "user_flash.h"
+
+/* FreeRTOS event group to signal when we are connected*/
+static EventGroupHandle_t s_wifi_event_group;
+uint8_t wifi_queue_storage[WIFI_QUEUE_LENGTH*WIFI_QUEUE_ITEM_SIZE];
+QueueHandle_t wifi_queue_handle;
+StaticQueue_t wifi_queue_buffer;
+
+// WIFI SCAN
+
+TaskHandle_t wifi_scan_task_handler;
+StackType_t wifi_scan_task_stack[WIFI_SCAN_TASK_STACK];
+StaticTask_t wifi_scan_task_tcb;
+
+uint8_t wifi_queue_write[WIFI_QUEUE_ITEM_SIZE] = {0};
+esp_netif_t *wifi_sta_netif = NULL;
+
+
+/* The event group allows multiple bits for each event, but we only care about two events:
+ * - we are connected to the AP with an IP
+ * - we failed to connect after the maximum amount of retries */
+#define WIFI_CONNECTED_BIT      BIT0
+#define WIFI_FAIL_BIT           BIT1
+#define WIFI_AP_NOT_FOUND_BIT   BIT2
+#define WIFI_PWD_FAIL_BIT       BIT3
+
+static const char *WIFI_TAG = "wifi station";
+
+static int s_retry_num = 0;
+static uint32_t wifi_connect_retry_max = 0xFFFFFFFF;//EXAMPLE_ESP_MAXIMUM_RETRY;
+
+SemaphoreHandle_t wifi_scan_mutex;
+
+//获取wifi的rssi事件处理函数
+static void esp_bss_rssi_low_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
+{
+    wifi_event_bss_rssi_low_t *event = event_data;
+
+    // ESP_LOGI(WIFI_TAG, "%s:bss rssi is=%ld", __func__, event->rssi);
+    common_setting.wifi_status.rssi = event->rssi;
+}
+
+// wifi事件处理函数 断开 连接 获取ip等事件都会进入这个函数
+static void event_handler(void* arg, esp_event_base_t event_base,
+                                int32_t event_id, void* event_data)
+{
+    // ESP_LOGE(WIFI_TAG, "event_handler %" PRId32 "\n", event_id);
+    if(event_base == WIFI_EVENT)
+    {
+        switch(event_id)
+        {
+            case WIFI_EVENT_STA_START:
+            {
+                if(1)//
+                {
+                    esp_wifi_set_ps(WIFI_PS_NONE);
+                    esp_wifi_set_inactive_time(WIFI_IF_STA, 60); // 延长超时时间
+                    esp_wifi_connect();
+                    common_setting.wifi_status.wifi_state = 0;
+                }
+            }
+            break;
+
+            case WIFI_EVENT_STA_DISCONNECTED:
+            {
+                #if ENABLE_MQTT_FUNC
+                Mqtt_Force_Stop();
+                #endif
+                wifi_event_sta_disconnected_t* disconnected = (wifi_event_sta_disconnected_t*) event_data;
+                ESP_LOGE(WIFI_TAG, "Disconnect reason : %d", disconnected->reason);
+                uint8_t fail_reason = 0;
+                /* Set code corresponding to the reason for disconnection */
+                switch (disconnected->reason)
+                {
+                    case WIFI_REASON_AUTH_EXPIRE:
+                    case WIFI_REASON_4WAY_HANDSHAKE_TIMEOUT:
+                    case WIFI_REASON_AUTH_FAIL:
+                    case WIFI_REASON_HANDSHAKE_TIMEOUT:
+                    case WIFI_REASON_MIC_FAILURE:
+                        ESP_LOGE(WIFI_TAG, "STA Auth Error");
+                        fail_reason = 2;
+                        break;
+                    case WIFI_REASON_NO_AP_FOUND:
+                        ESP_LOGE(WIFI_TAG, "STA AP Not found");
+                        fail_reason = 1;
+                        break;
+                }
+
+                if (s_retry_num < wifi_connect_retry_max)//尝试重连wifi的次数,默认为0xFFFFFFFF,即一直重试
+                {
+                    esp_wifi_connect();
+                    s_retry_num++;
+                    ESP_LOGI(WIFI_TAG, "retry to connect to the AP");
+                }
+                else
+                {
+                    if(fail_reason == 1)//连接失败次数已上线了就不需要再开启wifi连接了,除非重启设备或者app下发wifi信息重新配网
+                    {
+                        xEventGroupSetBits(s_wifi_event_group, WIFI_AP_NOT_FOUND_BIT);
+                    }
+                    else if(fail_reason == 2)//pwm错误不需要再开启wifi连接了,除非重启设备或者app下发wifi信息重新配网
+                    {
+                        xEventGroupSetBits(s_wifi_event_group, WIFI_PWD_FAIL_BIT);
+                    }
+                    xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
+                    
+                }
+                ESP_LOGI(WIFI_TAG,"connect to the AP fail");
+                common_setting.wifi_status.wifi_state = 0;
+            }
+            break;
+        }
+    }
+    else if(event_base == IP_EVENT)
+    {
+        switch(event_id)
+        {
+            case IP_EVENT_STA_GOT_IP://连接路由成功获取ip地址事件
+            {
+                ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
+                ESP_LOGI(WIFI_TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
+                s_retry_num = 0;
+                common_setting.wifi_status.wifi_state = 1;
+                Wifi_Connect_Timerout_Stop();//连接成功了就关闭定时器
+                #define USER_TMP 0
+                #if USER_TMP
+
+                #else
+                #if 0
+                // if(1) //在配网状态下还不能ota升级只有配完网之后 有证书 wifi密码
+                {
+                    xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);
+                    xEventGroupSetBits(common_event_group, COMMON_HTTPS_OTA_BIT);
+                }
+                
+                #else
+                #if NIMBLE_NETWORK_MODE
+                if(common_setting.ble_status.nimble_flag) //在配网状态下 不允许连接mqtt
+                {
+                    xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
+                }else{
+                    if(common_setting.wifi_status.connect_mode == 3 || common_setting.mqtt_user_cfg.mqtt_start_flag == 1)//已经连过一次了
+                    {   
+                        
+                        xEventGroupSetBits(common_event_group, COMMON_MQTT_CONNECT_BIT);
+                    }
+                }
+                
+                
+                #else
+                ESP_LOGI(WIFI_TAG, "got common_setting.ble_status.nimble_flag:%d",common_setting.ble_status.nimble_flag);
+                if(common_setting.ble_status.nimble_flag)//在配网状态不是普通wifi连接
+                {
+                    //要先关闭配网再发送ble数据
+                    ESP_LOGI(WIFI_TAG, "start http get put1 :\n");
+                    xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);
+                    ESP_LOGI(WIFI_TAG, "start http get put2 :\n");
+                    xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
+                }
+                else{
+                    ESP_LOGI(WIFI_TAG, "start http get common_setting.wifi_status.connect_mode %d\n",common_setting.wifi_status.connect_mode);
+                    if(common_setting.wifi_status.connect_mode == 3 || common_setting.mqtt_user_cfg.mqtt_start_flag == 1)//已经连过一次了
+                    {   
+                        xEventGroupSetBits(common_event_group, COMMON_MQTT_CONNECT_BIT);
+                    }
+                }
+                #endif
+                #endif
+                #endif
+                
+
+                esp_wifi_set_rssi_threshold(WIFI_RSSI_THRESHOLD);
+            }
+            break;
+        }
+    }
+    else if (event_base == ESP_HTTPS_OTA_EVENT) {
+        switch (event_id) {
+            case ESP_HTTPS_OTA_START:
+                ESP_LOGI(WIFI_TAG, "OTA started");
+                break;
+            case ESP_HTTPS_OTA_CONNECTED:
+                ESP_LOGI(WIFI_TAG, "Connected to server");
+                break;
+            case ESP_HTTPS_OTA_GET_IMG_DESC:
+                ESP_LOGI(WIFI_TAG, "Reading Image Description");
+                break;
+            case ESP_HTTPS_OTA_VERIFY_CHIP_ID:
+                ESP_LOGI(WIFI_TAG, "Verifying chip id of new image: %d", *(esp_chip_id_t *)event_data);
+                break;
+            case ESP_HTTPS_OTA_DECRYPT_CB:
+                ESP_LOGI(WIFI_TAG, "Callback to decrypt function");
+                break;
+            case ESP_HTTPS_OTA_WRITE_FLASH:
+                // ESP_LOGI(WIFI_TAG, "Writing to flash: %d written", *(int *)event_data);
+                break;
+            case ESP_HTTPS_OTA_UPDATE_BOOT_PARTITION:
+                ESP_LOGI(WIFI_TAG, "Boot partition updated. Next Partition: %d", *(esp_partition_subtype_t *)event_data);
+                break;
+            case ESP_HTTPS_OTA_FINISH:
+                ESP_LOGI(WIFI_TAG, "OTA finish");
+                break;
+            case ESP_HTTPS_OTA_ABORT:
+                ESP_LOGI(WIFI_TAG, "OTA abort");
+                break;
+        }
+    }
+}
+
+void Wifi_Sta_Init(void)
+{
+    s_wifi_event_group = xEventGroupCreate();
+
+    // ESP_ERROR_CHECK(esp_netif_init());
+
+    // ESP_ERROR_CHECK(esp_event_loop_create_default());
+    wifi_sta_netif = esp_netif_create_default_wifi_sta();
+
+    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
+
+    esp_event_handler_instance_t instance_any_id;
+    esp_event_handler_instance_t instance_got_ip;
+    ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
+                                                        ESP_EVENT_ANY_ID,
+                                                        &event_handler,
+                                                        NULL,
+                                                        &instance_any_id));
+    ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
+                                                        IP_EVENT_STA_GOT_IP,
+                                                        &event_handler,
+                                                        NULL,
+                                                        &instance_got_ip));
+
+    ESP_ERROR_CHECK(esp_event_handler_register(ESP_HTTPS_OTA_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL));
+
+    ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_BSS_RSSI_LOW, &esp_bss_rssi_low_handler, NULL));
+
+    
+}
+
+#define SEC_TO_US(sec)   ((sec) * 1000000ULL)
+static void Wifi_connect_timerout_callback(void* arg)
+{
+    // ESP_LOGI(WIFI_TAG, "One-time timer triggered after 80 s");
+    // xEventGroupSetBits(ble_event_group, BLE_OFF_BIT);//超时了就关闭ble,停止配网,除非重启设备或者app下发wifi信息重新配网
+    network_request_replay(NETWORK_CONECT_WIFI_TIMEOUT_REPLAY);
+}
+static esp_timer_handle_t wifi_one_timer_handle;//创建定时器handle
+static uint8_t wifi_one_timer_flag = 0;//0:未创建  1:已创建
+void Wifi_Connect_Timerout_Start(void)
+{
+    if(common_setting.wifi_status.connect_mode != 2)//只有用户配网才开启定时器
+    {
+        return;
+    }
+    #if (1)
+    if(common_setting.wifi_status.connect_mode == 2)
+    {
+        // Create and start one-time timer for 80 ms
+    
+        const esp_timer_create_args_t one_time_timer_args = {
+            .callback = &Wifi_connect_timerout_callback,
+            .arg = NULL,
+            .name = "one_time_timer"
+        };
+        esp_timer_create(&one_time_timer_args, &wifi_one_timer_handle);
+        esp_timer_start_once(wifi_one_timer_handle, SEC_TO_US(80)); // 80 s in microseconds 根据客户自定义修改超时时间
+        wifi_one_timer_flag = 1;
+    }
+    
+    #endif
+}
+void Wifi_Connect_Timerout_Stop(void)
+{
+    if(wifi_one_timer_flag)
+    {
+        // Stop and delete the timer if it's still running
+        wifi_one_timer_flag = 0;
+        esp_timer_stop(wifi_one_timer_handle);
+    }
+}
+void Wifi_Start(void)
+{
+    memset(common_setting.wifi_config.sta.ssid, 0x00, sizeof(common_setting.wifi_config.sta.ssid));
+    memset(common_setting.wifi_config.sta.password, 0x00, sizeof(common_setting.wifi_config.sta.password));
+    // memcpy(common_setting.wifi_config.sta.ssid, "H0110W", 7);
+    // memcpy(common_setting.wifi_config.sta.password, "264222264222", 13);
+    // memcpy(common_setting.wifi_config.sta.ssid, "PXN@SZoffice", 13);
+    // memcpy(common_setting.wifi_config.sta.password, "PXN201807", 10);
+    // memcpy(common_setting.wifi_config.sta.ssid, "ChinaNet-LaDe", 13);
+    // memcpy(common_setting.wifi_config.sta.password, "9596w3wq", 9);
+    // ESP_LOGI(WIFI_TAG, "[APP] Free memory  wifi len on: %d %d\n",common_setting.wifi_status.cur_ssid_len,common_setting.wifi_status.cur_pwd_len);
+    if(common_setting.wifi_status.cur_ssid_len == 0 || common_setting.wifi_status.cur_pwd_len == 0)
+    {
+        ESP_LOGI(WIFI_TAG, "[APP] Free memory not wifi on: %" PRIu32 " bytes", esp_get_free_heap_size());
+        return;
+    }
+    memcpy(common_setting.wifi_config.sta.ssid, common_setting.wifi_status.cur_ssid, common_setting.wifi_status.cur_ssid_len);
+    memcpy(common_setting.wifi_config.sta.password, common_setting.wifi_status.cur_pwd, common_setting.wifi_status.cur_pwd_len);
+
+    ESP_LOGI(WIFI_TAG, "Wifi connnect ssid: %s", common_setting.wifi_config.sta.ssid);
+    ESP_LOGI(WIFI_TAG, "Wifi connnect pwd: %s", common_setting.wifi_config.sta.password);
+    ESP_ERROR_CHECK(esp_netif_set_hostname(wifi_sta_netif, LWIP_LOCAL_HOSTNAME));
+    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
+    ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &common_setting.wifi_config));
+    s_retry_num = 0;
+    Wifi_Connect_Timerout_Start();
+    ESP_ERROR_CHECK(esp_wifi_start());
+    common_setting.wifi_status.wifi_mode = 2;
+    
+    // common_setting.net_pairing_info.net_pair_cooldown = 80 * 60 * 1000;
+    ESP_LOGI(WIFI_TAG, "[APP] Free memory wifi on: %" PRIu32 " bytes", esp_get_free_heap_size());
+}
+void Wifi_Stop(void)
+{
+    if(common_setting.wifi_status.wifi_mode > 0)
+    {
+        xEventGroupClearBits(s_wifi_event_group, WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_AP_NOT_FOUND_BIT | WIFI_PWD_FAIL_BIT);
+        ESP_ERROR_CHECK(esp_wifi_stop());
+        ESP_LOGI(WIFI_TAG, "[APP] Free memory wifi off: %" PRIu32 " bytes", esp_get_free_heap_size());
+        xSemaphoreGive(wifi_scan_mutex);
+        common_setting.wifi_status.wifi_mode = 0;
+        common_setting.wifi_status.wifi_state = 0;
+        // common_setting.net_pairing_info.http_url_flag = 0;
+        // common_setting.net_pairing_info.http_token_flag = 0;
+        // common_setting.net_pairing_info.user_id_flag = 0;
+    }
+}
+
+static void print_auth_mode(int authmode)
+{
+    switch (authmode) {
+    case WIFI_AUTH_OPEN:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_OPEN");
+        break;
+    case WIFI_AUTH_OWE:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_OWE");
+        break;
+    case WIFI_AUTH_WEP:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WEP");
+        break;
+    case WIFI_AUTH_WPA_PSK:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA_PSK");
+        break;
+    case WIFI_AUTH_WPA2_PSK:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA2_PSK");
+        break;
+    case WIFI_AUTH_WPA_WPA2_PSK:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA_WPA2_PSK");
+        break;
+    case WIFI_AUTH_ENTERPRISE:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_ENTERPRISE");
+        break;
+    case WIFI_AUTH_WPA3_PSK:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA3_PSK");
+        break;
+    case WIFI_AUTH_WPA2_WPA3_PSK:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_PSK");
+        break;
+    case WIFI_AUTH_WPA3_ENTERPRISE:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA3_ENTERPRISE");
+        break;
+    case WIFI_AUTH_WPA2_WPA3_ENTERPRISE:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_ENTERPRISE");
+        break;
+    case WIFI_AUTH_WPA3_ENT_192:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_WPA3_ENT_192");
+        break;
+    default:
+        ESP_LOGI(WIFI_TAG, "Authmode \tWIFI_AUTH_UNKNOWN");
+        break;
+    }
+}
+
+static void print_cipher_type(int pairwise_cipher, int group_cipher)
+{
+    switch (pairwise_cipher) {
+    case WIFI_CIPHER_TYPE_NONE:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_NONE");
+        break;
+    case WIFI_CIPHER_TYPE_WEP40:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP40");
+        break;
+    case WIFI_CIPHER_TYPE_WEP104:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP104");
+        break;
+    case WIFI_CIPHER_TYPE_TKIP:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP");
+        break;
+    case WIFI_CIPHER_TYPE_CCMP:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_CCMP");
+        break;
+    case WIFI_CIPHER_TYPE_TKIP_CCMP:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP");
+        break;
+    case WIFI_CIPHER_TYPE_AES_CMAC128:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_AES_CMAC128");
+        break;
+    case WIFI_CIPHER_TYPE_SMS4:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_SMS4");
+        break;
+    case WIFI_CIPHER_TYPE_GCMP:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_GCMP");
+        break;
+    case WIFI_CIPHER_TYPE_GCMP256:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_GCMP256");
+        break;
+    default:
+        ESP_LOGI(WIFI_TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_UNKNOWN");
+        break;
+    }
+
+    switch (group_cipher) {
+    case WIFI_CIPHER_TYPE_NONE:
+        // ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_NONE");
+        break;
+    case WIFI_CIPHER_TYPE_WEP40:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP40");
+        break;
+    case WIFI_CIPHER_TYPE_WEP104:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP104");
+        break;
+    case WIFI_CIPHER_TYPE_TKIP:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP");
+        break;
+    case WIFI_CIPHER_TYPE_CCMP:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_CCMP");
+        break;
+    case WIFI_CIPHER_TYPE_TKIP_CCMP:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP");
+        break;
+    case WIFI_CIPHER_TYPE_SMS4:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_SMS4");
+        break;
+    case WIFI_CIPHER_TYPE_GCMP:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_GCMP");
+        break;
+    case WIFI_CIPHER_TYPE_GCMP256:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_GCMP256");
+        break;
+    default:
+        ESP_LOGI(WIFI_TAG, "Group Cipher \tWIFI_CIPHER_TYPE_UNKNOWN");
+        break;
+    }
+}
+
+typedef struct
+{
+    uint8_t cnt;
+    char ssid[32];
+    int8_t rssi;
+    uint8_t auth_mode;
+    uint8_t pairwise_cipher;
+    uint8_t group_cipher;
+    uint8_t channel;
+}WIFI_SCAN_UNIT_T;
+
+#define WIFI_SCAN_PACKET_WIFI_NUM        6
+#define DEFAULT_SCAN_LIST_SIZE          24
+void Wifi_Scan_Task(void *pvParameters)
+{
+    // wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+    // ESP_ERROR_CHECK(esp_wifi_init(&cfg));
+    static BLE_SEND_REPLY_T wifi_scan_reply={0};
+    memset(&wifi_scan_reply, 0x00, sizeof(BLE_SEND_REPLY_T));
+    wifi_scan_reply.send_flag = 1;
+    wifi_scan_reply.cmd = 0x14;
+
+    uint8_t host_type = *(uint8_t*)pvParameters;
+
+    uint16_t number = DEFAULT_SCAN_LIST_SIZE;
+    wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
+    uint16_t ap_count = 0;
+    memset(ap_info, 0, sizeof(ap_info));
+    common_setting.wifi_status.wifi_mode = 1;
+    ESP_ERROR_CHECK(esp_netif_set_hostname(wifi_sta_netif, LWIP_LOCAL_HOSTNAME));
+    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
+    ESP_ERROR_CHECK(esp_wifi_start());
+    esp_wifi_disconnect();
+    if(esp_wifi_scan_start(NULL, true) == ESP_OK)
+    {
+        ESP_LOGI(WIFI_TAG, "Max AP number ap_info can hold = %u", number);
+        ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
+        ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
+        ESP_LOGI(WIFI_TAG, "Total APs scanned = %u, actual AP number ap_info holds = %u\n", ap_count, number);
+
+        // 填装配网回复
+        for (int i = 0; i < number; i++)
+        {
+            ESP_LOGI(WIFI_TAG, "SSID \t\t%s", ap_info[i].ssid);
+            ESP_LOGI(WIFI_TAG, "RSSI \t\t%d", ap_info[i].rssi);
+            print_auth_mode(ap_info[i].authmode);
+            if (ap_info[i].authmode != WIFI_AUTH_WEP) {
+                print_cipher_type(ap_info[i].pairwise_cipher, ap_info[i].group_cipher);
+            }
+            ESP_LOGI(WIFI_TAG, "Channel \t\t%d\n", ap_info[i].primary);
+
+            // 填装配网回复
+            WIFI_SCAN_UNIT_T wifi_scan_unit = {0};
+            wifi_scan_unit.cnt = i;
+            memcpy(wifi_scan_unit.ssid, ap_info[i].ssid, sizeof(wifi_scan_unit.ssid));
+            wifi_scan_unit.rssi = ap_info[i].rssi;
+            wifi_scan_unit.auth_mode = ap_info[i].authmode;
+            wifi_scan_unit.pairwise_cipher = ap_info[i].pairwise_cipher;
+            wifi_scan_unit.group_cipher = ap_info[i].group_cipher;
+            wifi_scan_unit.channel = ap_info[i].primary;
+
+            memcpy(&wifi_scan_reply.content[3+(i%WIFI_SCAN_PACKET_WIFI_NUM)*sizeof(wifi_scan_unit.ssid)], &wifi_scan_unit, sizeof(wifi_scan_unit));
+            
+            if((i+1) >= number || (i+1) % WIFI_SCAN_PACKET_WIFI_NUM == 0)
+            {
+                wifi_scan_reply.len = 3+((i%WIFI_SCAN_PACKET_WIFI_NUM)+1)*sizeof(wifi_scan_unit.ssid);
+
+                wifi_scan_reply.content[0] = number > 0xFF ? 0xFF:number;
+                wifi_scan_reply.content[1] = i/WIFI_SCAN_PACKET_WIFI_NUM;
+                wifi_scan_reply.content[2] = i%WIFI_SCAN_PACKET_WIFI_NUM;
+                Ble_Pairing_Reply(wifi_scan_reply.cmd, wifi_scan_reply.content, wifi_scan_reply.len, HOST_TYPE_BLE);
+                // Check_Host_Type(wifi_scan_reply.cmd, wifi_scan_reply.content, wifi_scan_reply.len, host_type);
+                memset(&wifi_scan_reply, 0x00, sizeof(BLE_SEND_REPLY_T));
+            }
+        }
+    }
+    else
+    {
+        ESP_LOGI(WIFI_TAG, "esp_wifi_scan_start fail\n");
+        wifi_scan_reply.len = 3;
+        wifi_scan_reply.content[0] = 0;
+        wifi_scan_reply.content[1] = 0;
+        wifi_scan_reply.content[2] = 0;
+        Ble_Pairing_Reply(wifi_scan_reply.cmd, wifi_scan_reply.content, wifi_scan_reply.len, HOST_TYPE_BLE);
+        // Check_Host_Type(wifi_scan_reply.cmd, wifi_scan_reply.content, wifi_scan_reply.len, host_type);
+    }
+    
+    Wifi_Stop();
+    vTaskDelete(NULL);
+    return;
+}
+
+void Wifi_Queue_Send(uint8_t host, uint8_t enable, uint8_t net_pair_encrypt_profile)
+{
+    ESP_LOGI(WIFI_TAG, "Wifi_Queue_Send %d %d %d\n",host,enable,net_pair_encrypt_profile);
+    wifi_queue_write[0] = host;
+    wifi_queue_write[1] = enable;
+    wifi_queue_write[2] = net_pair_encrypt_profile;
+    xQueueSend(wifi_queue_handle, wifi_queue_write, 0);
+}
+
+void Wifi_Enable_Status_Check(void)
+{
+    static uint8_t wifi_queue_read[WIFI_QUEUE_ITEM_SIZE] = {0}; // byte0:0:本地   2:串口   3:蓝牙     byte1:1:厂测连接   2:用户配网   3:正常连接   4:扫描wifi列表   0xFF:关闭
+    if(xQueueReceive(wifi_queue_handle, wifi_queue_read, 0) == pdTRUE)
+    {
+        common_setting.wifi_status.net_pair_host = wifi_queue_read[0];
+        if(wifi_queue_read[1] == 4)
+        {
+            common_setting.wifi_status.connect_mode = 0;
+            // 扫描wifi列表
+            Wifi_Stop();
+            if(xSemaphoreTake(wifi_scan_mutex, 0) == pdTRUE)
+            {
+                wifi_scan_task_handler = xTaskCreateStatic(Wifi_Scan_Task, "Wifi_Scan_Task", WIFI_SCAN_TASK_STACK, &common_setting.wifi_status.net_pair_host, 2, wifi_scan_task_stack, &wifi_scan_task_tcb);
+                ESP_LOGI(WIFI_TAG, "[APP] Free memory wifi scan: %" PRIu32 " bytes", esp_get_free_heap_size());
+                vTaskDelay(10 / portTICK_PERIOD_MS);
+            }
+        }
+        else if(wifi_queue_read[1] == 1)
+        {
+            ESP_LOGI(WIFI_TAG, "厂测连接wifi\n");
+            // 厂测连接
+            Wifi_Stop();
+            if(xSemaphoreTake(wifi_scan_mutex, 0) == pdTRUE)
+            {
+                common_setting.wifi_status.connect_mode = 1;
+                common_setting.wifi_status.net_pair_encrypt_profile = wifi_queue_read[2];
+                wifi_connect_retry_max = EXAMPLE_ESP_MAXIMUM_RETRY;
+                Wifi_Start();
+            }
+        }
+        else if(wifi_queue_read[1] == 2)
+        {
+            // 用户配网
+            Wifi_Stop();
+            if(xSemaphoreTake(wifi_scan_mutex, 0) == pdTRUE)
+            {
+                common_setting.wifi_status.connect_mode = 2;
+                common_setting.wifi_status.net_pair_encrypt_profile = wifi_queue_read[2];
+                wifi_connect_retry_max = EXAMPLE_ESP_MAXIMUM_RETRY;
+                Wifi_Start();
+            }
+        }
+        else if(wifi_queue_read[1] == 3)
+        {
+            // 正常连接
+            Wifi_Stop();
+            if(xSemaphoreTake(wifi_scan_mutex, 0) == pdTRUE)
+            {
+                common_setting.wifi_status.connect_mode = 3;
+                wifi_connect_retry_max = 0xFFFFFFFF;
+                Wifi_Start();
+            }
+        }
+        else if(wifi_queue_read[1] == 0xFF)
+        {
+            common_setting.wifi_status.connect_mode = 0;
+            // 关闭
+            Wifi_Stop();
+        }
+        
+    }
+
+    static EventBits_t bits_last = 0;
+    EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_AP_NOT_FOUND_BIT | WIFI_PWD_FAIL_BIT, pdFALSE, pdFALSE, 0);
+
+    if(bits_last != (bits&(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT)))
+    {
+        bits_last = (bits&(WIFI_CONNECTED_BIT | WIFI_FAIL_BIT));
+        if (bits & WIFI_CONNECTED_BIT)
+        {
+            ESP_LOGI(WIFI_TAG, "wifi connected %d\n",common_setting.wifi_status.connect_mode);
+            Wifi_Connect_Timerout_Stop();//关闭定时器
+            #if (1)
+            if((common_setting.wifi_status.connect_mode == 1 || common_setting.wifi_status.connect_mode == 2))
+            {
+                if(common_setting.ble_status.ble_state > 0) //只有蓝牙开启才允许发送蓝牙数据
+                {
+                    static BLE_SEND_REPLY_T wifi_pairing_reply={0};
+                    wifi_pairing_reply.send_flag = 1;
+                    wifi_pairing_reply.cmd = 0x15;
+                    wifi_pairing_reply.len = 3;
+                    wifi_pairing_reply.content[0] = 0;
+                    wifi_pairing_reply.content[1] = common_setting.wifi_status.connect_mode-1;
+                    wifi_pairing_reply.content[2] = common_setting.wifi_status.net_pair_encrypt_profile;
+                    Ble_Pairing_Reply(wifi_pairing_reply.cmd, wifi_pairing_reply.content, wifi_pairing_reply.len, HOST_TYPE_BLE);
+                    // Check_Host_Type(wifi_pairing_reply.cmd, wifi_pairing_reply.content, wifi_pairing_reply.len, common_setting.wifi_status.net_pair_host);
+                }
+                if (USER_TEST_ENABLE)
+                {
+                    common_setting.net_pairing_info.http_url_flag = 1;
+                    common_setting.net_pairing_info.http_token_flag = 1;
+                    common_setting.net_pairing_info.user_id_flag = 1;
+                }
+                
+                ESP_LOGI(WIFI_TAG, "connect_mode:%d %d %d %d\n", common_setting.wifi_status.connect_mode,common_setting.net_pairing_info.http_url_flag,common_setting.net_pairing_info.http_token_flag,\
+                common_setting.net_pairing_info.user_id_flag);
+                if(common_setting.net_pairing_info.http_url_flag && common_setting.net_pairing_info.http_token_flag && common_setting.net_pairing_info.user_id_flag)
+                {
+                    ESP_LOGI(WIFI_TAG, "http_get_url_task start\n");
+                    // http_get_url_task_handler = xTaskCreateStatic(http_get_url_task, "http_get_url_task", HTTP_GET_URL_TASK_STACK, NULL, 2, http_get_url_task_stack, &http_get_url_task_tcb);
+                    #if ENABLE_HTTP_FUNC
+                    Http_Get_Url_Task();
+                    #endif
+                    // ESP_LOGI(WIFI_TAG, "[APP] Free memory http1 on: %" PRIu32 " bytes", esp_get_free_heap_size());
+
+                    // ESP_LOGI(WIFI_TAG, "http_download_task start\n");
+                    // memset(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], 0x00, sizeof(http_get_cert_task_param.url[SSL_CLIENT_CRT]));
+                    // memset(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], 0x00, strlen(http_get_cert_task_param.url[SSL_CLIENT_KEY]));
+                    // memset(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], 0x00, strlen(http_get_cert_task_param.url[SSL_SERVER_CRT]));
+                    // memcpy(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], "https://e-pxn.com.cn/pms/api/client.crt", 40);
+                    // memcpy(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], "https://e-pxn.com.cn/pms/api/client.key", 40);
+                    // memcpy(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], "https://e-pxn.com.cn/pms/api/mosquitto.org.crt", 47);
+                    // http_download_crt_task_handler = xTaskCreateStatic(http_download_task, "http_download_task", HTTP_DOWNLOAD_CRT_TASK_STACK, NULL, 2, http_download_crt_task_stack, &http_download_crt_task_tcb);
+                }
+                
+            }
+            #else
+            
+            #endif
+        }
+        else if (bits & WIFI_FAIL_BIT)
+        {
+            ESP_LOGI(WIFI_TAG, "wifi connect fail\n");
+            Wifi_Connect_Timerout_Stop();//连接失败了就关闭定时器
+            if((common_setting.wifi_status.connect_mode == 1 || common_setting.wifi_status.connect_mode == 2))
+            {
+                static BLE_SEND_REPLY_T wifi_pairing_reply={0};
+                wifi_pairing_reply.send_flag = 1;
+                wifi_pairing_reply.cmd = 0x15;
+                wifi_pairing_reply.len = 3;
+                if(bits & WIFI_AP_NOT_FOUND_BIT)
+                {
+                    wifi_pairing_reply.content[0] = 2;
+                }
+                else if(bits & WIFI_PWD_FAIL_BIT)
+                {
+                    wifi_pairing_reply.content[0] = 3;
+                }
+                else
+                {
+                    wifi_pairing_reply.content[0] = 1;
+                }
+                wifi_pairing_reply.content[1] = common_setting.wifi_status.connect_mode-1;
+                wifi_pairing_reply.content[2] = common_setting.wifi_status.net_pair_encrypt_profile;
+                Ble_Pairing_Reply(wifi_pairing_reply.cmd, wifi_pairing_reply.content, wifi_pairing_reply.len, HOST_TYPE_BLE);
+                // Check_Host_Type(wifi_pairing_reply.cmd, wifi_pairing_reply.content, wifi_pairing_reply.len, common_setting.wifi_status.net_pair_host);
+            }
+        }
+        else
+        {
+            ESP_LOGI(WIFI_TAG, "wifi stop\n");
+        }
+    }
+
+    if(common_setting.wifi_status.wifi_state == 1)
+    {
+        static uint32_t rssi_tick = 0;
+        rssi_tick += MAIN_LOOP_INTERVAL;
+        if(rssi_tick >= 1000)
+        {
+            rssi_tick = 0;
+            esp_wifi_set_rssi_threshold(WIFI_RSSI_THRESHOLD);
+        }
+    }
+}
+#endif
\ No newline at end of file
diff --git a/main/wifi.h b/main/wifi.h
new file mode 100644 (file)
index 0000000..b22d3bb
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef _WIFI_H_
+#define _WIFI_H_
+
+#define ENABLE_WIFI_FUNC 1
+#if ENABLE_WIFI_FUNC
+#define EXAMPLE_ESP_WIFI_SSID      CONFIG_EXAMPLE_WIFI_SSID
+#define EXAMPLE_ESP_WIFI_PASS      CONFIG_EXAMPLE_WIFI_PASSWORD
+#define EXAMPLE_ESP_MAXIMUM_RETRY  (12) // 连接失败重试次数,默认为12次,设置为0xFFFFFFFF则一直重试
+
+#define CONFIG_ESP_STATION_EXAMPLE_WPA3_SAE_PWE_BOTH 1
+#define CONFIG_ESP_WIFI_AUTH_WPA2_PSK 1
+#define CONFIG_ESP_WIFI_PW_ID ""
+
+#define WIFI_RSSI_THRESHOLD     (-1)
+#define WIFI_QUEUE_LENGTH         2
+#define WIFI_QUEUE_ITEM_SIZE      8
+extern uint8_t wifi_queue_storage[WIFI_QUEUE_LENGTH*WIFI_QUEUE_ITEM_SIZE];
+extern QueueHandle_t wifi_queue_handle;
+extern StaticQueue_t wifi_queue_buffer;
+extern uint8_t wifi_queue_write[WIFI_QUEUE_ITEM_SIZE];
+
+#define WIFI_SCAN_TASK_STACK            (1*1024)
+extern TaskHandle_t wifi_scan_task_handler;
+extern StackType_t wifi_scan_task_stack[WIFI_SCAN_TASK_STACK];
+extern StaticTask_t wifi_scan_task_tcb;
+
+extern esp_netif_t *wifi_sta_netif;
+
+extern SemaphoreHandle_t wifi_scan_mutex;
+
+void Wifi_Sta_Init(void);
+
+void Wifi_Start(void);
+
+void Wifi_Queue_Send(uint8_t host, uint8_t enable, uint8_t net_pair_encrypt_profile);
+void Wifi_Enable_Status_Check(void);
+
+void Wifi_Connect_Timerout_Start(void);
+void Wifi_Connect_Timerout_Stop(void);
+#endif
+#endif
diff --git a/partitions - 副本 (2).csv b/partitions - 副本 (2).csv
new file mode 100644 (file)
index 0000000..1ca168c
--- /dev/null
@@ -0,0 +1,5 @@
+# Name,           Type,               SubType,   Offset,  Size,      Flags
+nvs,                           data,   nvs,    0x9000,         24K,
+phy_init,                      data,   phy,    0xf000,         4K,
+factory,                       app,    factory,0x10000,        1M,
+user_data,                     data,   nvs,    0x110000,       256K,
\ No newline at end of file
diff --git a/partitions - 副本 (3).csv b/partitions - 副本 (3).csv
new file mode 100644 (file)
index 0000000..fe32a14
--- /dev/null
@@ -0,0 +1,7 @@
+# Name,           Type,               SubType,   Offset,  Size,      Flags
+nvs,                           data,   nvs,    0x9000,         16K,
+otadata,                       data,   ota,    0xd000,         8K,
+phy_init,                      data,   phy,    0xf000,         4K,
+ota_0,                 app,    ota_0,  0x10000,        960K,
+ota_1,                 app,    ota_1,  0x100000,       960K,
+user_data,                     data,   nvs,    0x1f0000,       64K,
\ No newline at end of file
diff --git a/partitions - 副本.csv b/partitions - 副本.csv
new file mode 100644 (file)
index 0000000..7028b55
--- /dev/null
@@ -0,0 +1,5 @@
+# Name,           Type,               SubType,   Offset,  Size,      Flags
+nvs,                           data,   nvs,    0x9000,         24K,
+phy_init,                      data,   phy,    0xf000,         4K,
+factory,                       app,    factory,0x10000,        1M,
+certificate,           data,   nvs,    0x110000,       32K,
\ No newline at end of file
diff --git a/partitions.csv b/partitions.csv
new file mode 100644 (file)
index 0000000..fe32a14
--- /dev/null
@@ -0,0 +1,7 @@
+# Name,           Type,               SubType,   Offset,  Size,      Flags
+nvs,                           data,   nvs,    0x9000,         16K,
+otadata,                       data,   ota,    0xd000,         8K,
+phy_init,                      data,   phy,    0xf000,         4K,
+ota_0,                 app,    ota_0,  0x10000,        960K,
+ota_1,                 app,    ota_1,  0x100000,       960K,
+user_data,                     data,   nvs,    0x1f0000,       64K,
\ No newline at end of file
diff --git a/pxn_merge/Qt5Core.dll b/pxn_merge/Qt5Core.dll
new file mode 100644 (file)
index 0000000..373d144
Binary files /dev/null and b/pxn_merge/Qt5Core.dll differ
diff --git a/pxn_merge/WGTL_ESP32C2_0.01_build2.lsuf b/pxn_merge/WGTL_ESP32C2_0.01_build2.lsuf
new file mode 100644 (file)
index 0000000..5c1a560
Binary files /dev/null and b/pxn_merge/WGTL_ESP32C2_0.01_build2.lsuf differ
diff --git a/pxn_merge/WGTL_ESP32C2_0.01_build3.lsuf b/pxn_merge/WGTL_ESP32C2_0.01_build3.lsuf
new file mode 100644 (file)
index 0000000..5a6e80f
Binary files /dev/null and b/pxn_merge/WGTL_ESP32C2_0.01_build3.lsuf differ
diff --git a/pxn_merge/WGTL_ESP32C2_0.01_build4.lsuf b/pxn_merge/WGTL_ESP32C2_0.01_build4.lsuf
new file mode 100644 (file)
index 0000000..7eab09e
Binary files /dev/null and b/pxn_merge/WGTL_ESP32C2_0.01_build4.lsuf differ
diff --git a/pxn_merge/WGTL_ESP32C2_0.01_build5.lsuf b/pxn_merge/WGTL_ESP32C2_0.01_build5.lsuf
new file mode 100644 (file)
index 0000000..c4d9814
Binary files /dev/null and b/pxn_merge/WGTL_ESP32C2_0.01_build5.lsuf differ
diff --git a/pxn_merge/WGTL_ESP32C2_0.01_build6.lsuf b/pxn_merge/WGTL_ESP32C2_0.01_build6.lsuf
new file mode 100644 (file)
index 0000000..4abf7ab
Binary files /dev/null and b/pxn_merge/WGTL_ESP32C2_0.01_build6.lsuf differ
diff --git a/pxn_merge/WGTL_ESP32C2_0.01_build7.lsuf b/pxn_merge/WGTL_ESP32C2_0.01_build7.lsuf
new file mode 100644 (file)
index 0000000..e298a36
Binary files /dev/null and b/pxn_merge/WGTL_ESP32C2_0.01_build7.lsuf differ
diff --git a/pxn_merge/merge.bat b/pxn_merge/merge.bat
new file mode 100644 (file)
index 0000000..719aad6
--- /dev/null
@@ -0,0 +1 @@
+pxn_fw_header_esp32.exe 1 ..\build\mqtt_ssl_mutual_auth.bin .\ lsuf
\ No newline at end of file
diff --git a/pxn_merge/pxn_fw_header_esp32.exe b/pxn_merge/pxn_fw_header_esp32.exe
new file mode 100644 (file)
index 0000000..2188492
Binary files /dev/null and b/pxn_merge/pxn_fw_header_esp32.exe differ
diff --git a/sdkconfig b/sdkconfig
new file mode 100644 (file)
index 0000000..06a241c
--- /dev/null
+++ b/sdkconfig
@@ -0,0 +1,2223 @@
+#
+# Automatically generated file. DO NOT EDIT.
+# Espressif IoT Development Framework (ESP-IDF) 5.5.0 Project Configuration
+#
+CONFIG_SOC_ADC_SUPPORTED=y
+CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
+CONFIG_SOC_UART_SUPPORTED=y
+CONFIG_SOC_GDMA_SUPPORTED=y
+CONFIG_SOC_AHB_GDMA_SUPPORTED=y
+CONFIG_SOC_GPTIMER_SUPPORTED=y
+CONFIG_SOC_PHY_SUPPORTED=y
+CONFIG_SOC_BT_SUPPORTED=y
+CONFIG_SOC_WIFI_SUPPORTED=y
+CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y
+CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y
+CONFIG_SOC_EFUSE_CONSISTS_OF_ONE_KEY_BLOCK=y
+CONFIG_SOC_EFUSE_SUPPORTED=y
+CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y
+CONFIG_SOC_LEDC_SUPPORTED=y
+CONFIG_SOC_I2C_SUPPORTED=y
+CONFIG_SOC_GPSPI_SUPPORTED=y
+CONFIG_SOC_SHA_SUPPORTED=y
+CONFIG_SOC_ECC_SUPPORTED=y
+CONFIG_SOC_FLASH_ENC_SUPPORTED=y
+CONFIG_SOC_SECURE_BOOT_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_SUPPORTED=y
+CONFIG_SOC_BOD_SUPPORTED=y
+CONFIG_SOC_CLK_TREE_SUPPORTED=y
+CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y
+CONFIG_SOC_WDT_SUPPORTED=y
+CONFIG_SOC_SPI_FLASH_SUPPORTED=y
+CONFIG_SOC_RNG_SUPPORTED=y
+CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y
+CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
+CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y
+CONFIG_SOC_PM_SUPPORTED=y
+CONFIG_SOC_XTAL_SUPPORT_26M=y
+CONFIG_SOC_XTAL_SUPPORT_40M=y
+CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y
+CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y
+CONFIG_SOC_ADC_MONITOR_SUPPORTED=y
+CONFIG_SOC_ADC_PERIPH_NUM=1
+CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5
+CONFIG_SOC_ADC_ATTEN_NUM=4
+CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1
+CONFIG_SOC_ADC_PATT_LEN_MAX=8
+CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2
+CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611
+CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y
+CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y
+CONFIG_SOC_ADC_SHARED_POWER=y
+CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y
+CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y
+CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y
+CONFIG_SOC_CPU_CORES_NUM=1
+CONFIG_SOC_CPU_INTR_NUM=32
+CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y
+CONFIG_SOC_CPU_HAS_CSR_PC=y
+CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000
+CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y
+CONFIG_SOC_ECC_SUPPORT_POINT_VERIFY_QUIRK=y
+CONFIG_SOC_AHB_GDMA_VERSION=1
+CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1
+CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=1
+CONFIG_SOC_GPIO_PORT=1
+CONFIG_SOC_GPIO_PIN_COUNT=21
+CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y
+CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y
+CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y
+CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y
+CONFIG_SOC_GPIO_IN_RANGE_MAX=20
+CONFIG_SOC_GPIO_OUT_RANGE_MAX=20
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6
+CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000001FFFC0
+CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y
+CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3
+CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y
+CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y
+CONFIG_SOC_I2C_NUM=1
+CONFIG_SOC_HP_I2C_NUM=1
+CONFIG_SOC_I2C_FIFO_LEN=16
+CONFIG_SOC_I2C_CMD_REG_NUM=8
+CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y
+CONFIG_SOC_I2C_SUPPORT_XTAL=y
+CONFIG_SOC_I2C_SUPPORT_RTC=y
+CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y
+CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y
+CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y
+CONFIG_SOC_LEDC_TIMER_NUM=4
+CONFIG_SOC_LEDC_CHANNEL_NUM=6
+CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14
+CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y
+CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y
+CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1
+CONFIG_SOC_MMU_PERIPH_NUM=1
+CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
+CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
+CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128
+CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108
+CONFIG_SOC_RTCIO_PIN_COUNT=0
+CONFIG_SOC_SHA_SUPPORT_RESUME=y
+CONFIG_SOC_SHA_SUPPORT_SHA1=y
+CONFIG_SOC_SHA_SUPPORT_SHA224=y
+CONFIG_SOC_SHA_SUPPORT_SHA256=y
+CONFIG_SOC_SPI_PERIPH_NUM=2
+CONFIG_SOC_SPI_MAX_CS_NUM=6
+CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64
+CONFIG_SOC_SPI_SUPPORT_DDRCLK=y
+CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_CD_SIG=y
+CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y
+CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y
+CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F40M=y
+CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y
+CONFIG_SOC_SPI_SCT_SUPPORTED=y
+CONFIG_SOC_SPI_SCT_REG_NUM=14
+CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y
+CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA
+CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y
+CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y
+CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y
+CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y
+CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_60M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_30M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_15M_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_COUNTER_NUM=2
+CONFIG_SOC_SYSTIMER_ALARM_NUM=3
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20
+CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y
+CONFIG_SOC_SYSTIMER_INT_LEVEL=y
+CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y
+CONFIG_SOC_TIMER_GROUPS=1
+CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1
+CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54
+CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y
+CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=1
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16
+CONFIG_SOC_MWDT_SUPPORT_XTAL=y
+CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y
+CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y
+CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y
+CONFIG_SOC_SECURE_BOOT_V2_ECC=y
+CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=1
+CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128_DERIVED=y
+CONFIG_SOC_UART_NUM=2
+CONFIG_SOC_UART_HP_NUM=2
+CONFIG_SOC_UART_FIFO_LEN=128
+CONFIG_SOC_UART_BITRATE_MAX=2500000
+CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
+CONFIG_SOC_UART_SUPPORT_PLL_F40M_CLK=y
+CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
+CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
+CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
+CONFIG_SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE=y
+CONFIG_SOC_SUPPORT_COEXISTENCE=y
+CONFIG_SOC_COEX_HW_PTI=y
+CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
+CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21
+CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12
+CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y
+CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y
+CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y
+CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y
+CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
+CONFIG_SOC_CLK_OSC_SLOW_SUPPORTED=y
+CONFIG_SOC_CLK_LP_FAST_SUPPORT_XTAL_D2=y
+CONFIG_SOC_WIFI_HW_TSF=y
+CONFIG_SOC_WIFI_FTM_SUPPORT=y
+CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
+CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y
+CONFIG_SOC_BLE_SUPPORTED=y
+CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y
+CONFIG_SOC_BLE_50_SUPPORTED=y
+CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y
+CONFIG_SOC_BLUFI_SUPPORTED=y
+CONFIG_SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED=y
+CONFIG_SOC_PHY_IMPROVE_RX_11B=y
+CONFIG_SOC_PHY_COMBO_MODULE=y
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TOOLCHAIN="gcc"
+CONFIG_IDF_TOOLCHAIN_GCC=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32c2"
+CONFIG_IDF_INIT_VERSION="5.5.0"
+CONFIG_IDF_TARGET_ESP32C2=y
+CONFIG_IDF_FIRMWARE_CHIP_ID=0x000C
+
+#
+# Build type
+#
+CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
+# CONFIG_APP_BUILD_TYPE_RAM is not set
+CONFIG_APP_BUILD_GENERATE_BINARIES=y
+CONFIG_APP_BUILD_BOOTLOADER=y
+CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
+# CONFIG_APP_REPRODUCIBLE_BUILD is not set
+# CONFIG_APP_NO_BLOBS is not set
+# end of Build type
+
+#
+# Bootloader config
+#
+
+#
+# Bootloader manager
+#
+CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y
+CONFIG_BOOTLOADER_PROJECT_VER=1
+# end of Bootloader manager
+
+#
+# Application Rollback
+#
+# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
+# end of Application Rollback
+
+#
+# Bootloader Rollback
+#
+# end of Bootloader Rollback
+
+CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
+CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set
+
+#
+# Log
+#
+CONFIG_BOOTLOADER_LOG_VERSION_1=y
+CONFIG_BOOTLOADER_LOG_VERSION=1
+CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
+# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
+CONFIG_BOOTLOADER_LOG_LEVEL=0
+
+#
+# Format
+#
+# CONFIG_BOOTLOADER_LOG_COLORS is not set
+CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
+# end of Format
+
+#
+# Settings
+#
+CONFIG_BOOTLOADER_LOG_MODE_TEXT_EN=y
+CONFIG_BOOTLOADER_LOG_MODE_TEXT=y
+# end of Settings
+# end of Log
+
+#
+# Serial Flash Configurations
+#
+# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set
+CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
+# end of Serial Flash Configurations
+
+# CONFIG_BOOTLOADER_FACTORY_RESET is not set
+# CONFIG_BOOTLOADER_APP_TEST is not set
+CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y
+CONFIG_BOOTLOADER_WDT_ENABLE=y
+# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set
+CONFIG_BOOTLOADER_WDT_TIME_MS=9000
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
+# end of Bootloader config
+
+#
+# Security features
+#
+CONFIG_SECURE_BOOT_V2_ECC_SUPPORTED=y
+CONFIG_SECURE_BOOT_V2_PREFERRED=y
+# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
+# CONFIG_SECURE_BOOT is not set
+# CONFIG_SECURE_FLASH_ENC_ENABLED is not set
+CONFIG_SECURE_ROM_DL_MODE_ENABLED=y
+# end of Security features
+
+#
+# Application manager
+#
+CONFIG_APP_COMPILE_TIME_DATE=y
+# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
+# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
+# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
+CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9
+# end of Application manager
+
+CONFIG_ESP_ROM_HAS_CRC_LE=y
+CONFIG_ESP_ROM_HAS_CRC_BE=y
+CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y
+CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
+CONFIG_ESP_ROM_GET_CLK_FREQ=y
+CONFIG_ESP_ROM_HAS_RVFPLIB=y
+CONFIG_ESP_ROM_HAS_HAL_WDT=y
+CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y
+CONFIG_ESP_ROM_HAS_HEAP_TLSF=y
+CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y
+CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y
+CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH_MMAP=y
+CONFIG_ESP_ROM_HAS_NEWLIB=y
+CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y
+CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y
+CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y
+CONFIG_ESP_ROM_HAS_MBEDTLS_CRYPTO_LIB=y
+CONFIG_ESP_ROM_HAS_SW_FLOAT=y
+CONFIG_ESP_ROM_USB_OTG_NUM=-1
+CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1
+CONFIG_ESP_ROM_HAS_VERSION=y
+CONFIG_ESP_ROM_HAS_VPRINTF_FUNC=y
+CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
+CONFIG_ESP_ROM_CONSOLE_OUTPUT_SECONDARY=y
+CONFIG_ESP_ROM_HAS_SUBOPTIMAL_NEWLIB_ON_MISALIGNED_MEMORY=y
+
+#
+# Boot ROM Behavior
+#
+# CONFIG_BOOT_ROM_LOG_ALWAYS_ON is not set
+CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
+# end of Boot ROM Behavior
+
+#
+# Serial flasher config
+#
+# CONFIG_ESPTOOLPY_NO_STUB is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
+CONFIG_ESPTOOLPY_FLASHMODE_DIO=y
+# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set
+CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y
+CONFIG_ESPTOOLPY_FLASHMODE="dio"
+CONFIG_ESPTOOLPY_FLASHFREQ_60M=y
+# CONFIG_ESPTOOLPY_FLASHFREQ_30M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_15M is not set
+CONFIG_ESPTOOLPY_FLASHFREQ="60m"
+# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
+# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE="2MB"
+# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set
+CONFIG_ESPTOOLPY_BEFORE_RESET=y
+# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
+CONFIG_ESPTOOLPY_BEFORE="default_reset"
+CONFIG_ESPTOOLPY_AFTER_RESET=y
+# CONFIG_ESPTOOLPY_AFTER_NORESET is not set
+CONFIG_ESPTOOLPY_AFTER="hard_reset"
+CONFIG_ESPTOOLPY_MONITOR_BAUD=74880
+# end of Serial flasher config
+
+#
+# Partition Table
+#
+# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
+# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set
+CONFIG_PARTITION_TABLE_CUSTOM=y
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_OFFSET=0x8000
+CONFIG_PARTITION_TABLE_MD5=y
+# end of Partition Table
+
+#
+# Example Connection Configuration
+#
+CONFIG_ENV_GPIO_RANGE_MIN=0
+CONFIG_ENV_GPIO_RANGE_MAX=18
+CONFIG_ENV_GPIO_IN_RANGE_MAX=18
+CONFIG_ENV_GPIO_OUT_RANGE_MAX=18
+CONFIG_EXAMPLE_CONNECT_WIFI=y
+# CONFIG_EXAMPLE_WIFI_SSID_PWD_FROM_STDIN is not set
+CONFIG_EXAMPLE_PROVIDE_WIFI_CONSOLE_CMD=y
+CONFIG_EXAMPLE_WIFI_SSID="dxy"
+CONFIG_EXAMPLE_WIFI_PASSWORD="p3833058"
+CONFIG_EXAMPLE_WIFI_CONN_MAX_RETRY=5
+CONFIG_EXAMPLE_WIFI_SCAN_METHOD_FAST=y
+# CONFIG_EXAMPLE_WIFI_SCAN_METHOD_ALL_CHANNEL is not set
+
+#
+# WiFi Scan threshold
+#
+CONFIG_EXAMPLE_WIFI_SCAN_RSSI_THRESHOLD=-127
+CONFIG_EXAMPLE_WIFI_AUTH_OPEN=y
+# CONFIG_EXAMPLE_WIFI_AUTH_WEP is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_ENTERPRISE is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WAPI_PSK is not set
+# end of WiFi Scan threshold
+
+CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SIGNAL=y
+# CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SECURITY is not set
+# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set
+# CONFIG_EXAMPLE_CONNECT_PPP is not set
+CONFIG_EXAMPLE_CONNECT_IPV4=y
+# CONFIG_EXAMPLE_CONNECT_IPV6 is not set
+# end of Example Connection Configuration
+
+#
+# Compiler options
+#
+# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set
+CONFIG_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
+CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y
+# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set
+CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y
+CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set
+CONFIG_COMPILER_HIDE_PATHS_MACROS=y
+# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
+# CONFIG_COMPILER_CXX_RTTI is not set
+CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
+# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
+# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set
+# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
+# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set
+CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
+# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set
+# CONFIG_COMPILER_DUMP_RTL_FILES is not set
+CONFIG_COMPILER_RT_LIB_GCCLIB=y
+CONFIG_COMPILER_RT_LIB_NAME="gcc"
+CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y
+# CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE is not set
+# CONFIG_COMPILER_STATIC_ANALYZER is not set
+# end of Compiler options
+
+#
+# Component config
+#
+
+#
+# Application Level Tracing
+#
+# CONFIG_APPTRACE_DEST_JTAG is not set
+CONFIG_APPTRACE_DEST_NONE=y
+# CONFIG_APPTRACE_DEST_UART1 is not set
+CONFIG_APPTRACE_DEST_UART_NONE=y
+CONFIG_APPTRACE_UART_TASK_PRIO=1
+CONFIG_APPTRACE_LOCK_ENABLE=y
+# end of Application Level Tracing
+
+#
+# Bluetooth
+#
+CONFIG_BT_ENABLED=y
+# CONFIG_BT_BLUEDROID_ENABLED is not set
+CONFIG_BT_NIMBLE_ENABLED=y
+# CONFIG_BT_CONTROLLER_ONLY is not set
+CONFIG_BT_CONTROLLER_ENABLED=y
+# CONFIG_BT_CONTROLLER_DISABLED is not set
+
+#
+# NimBLE Options
+#
+CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y
+# CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set
+# CONFIG_BT_NIMBLE_LOG_LEVEL_NONE is not set
+# CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR is not set
+# CONFIG_BT_NIMBLE_LOG_LEVEL_WARNING is not set
+CONFIG_BT_NIMBLE_LOG_LEVEL_INFO=y
+# CONFIG_BT_NIMBLE_LOG_LEVEL_DEBUG is not set
+CONFIG_BT_NIMBLE_LOG_LEVEL=1
+CONFIG_BT_NIMBLE_MAX_CONNECTIONS=1
+CONFIG_BT_NIMBLE_MAX_BONDS=2
+CONFIG_BT_NIMBLE_MAX_CCCDS=2
+CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0
+CONFIG_BT_NIMBLE_PINNED_TO_CORE=0
+CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=4096
+# CONFIG_BT_NIMBLE_ROLE_CENTRAL is not set
+CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y
+CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y
+# CONFIG_BT_NIMBLE_ROLE_OBSERVER is not set
+CONFIG_BT_NIMBLE_GATT_SERVER=y
+# CONFIG_BT_NIMBLE_NVS_PERSIST is not set
+# CONFIG_BT_NIMBLE_SMP_ID_RESET is not set
+# CONFIG_BT_NIMBLE_SECURITY_ENABLE is not set
+CONFIG_BT_NIMBLE_PRINT_ERR_NAME=y
+# CONFIG_BT_NIMBLE_DEBUG is not set
+# CONFIG_BT_NIMBLE_DYNAMIC_SERVICE is not set
+CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME=""
+CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=30
+CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=261
+CONFIG_BT_NIMBLE_ATT_MAX_PREP_ENTRIES=16
+CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0
+
+#
+# Memory Settings
+#
+CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=12
+CONFIG_BT_NIMBLE_MSYS_1_BLOCK_SIZE=100
+CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=4
+CONFIG_BT_NIMBLE_MSYS_2_BLOCK_SIZE=320
+CONFIG_BT_NIMBLE_TRANSPORT_ACL_FROM_LL_COUNT=12
+CONFIG_BT_NIMBLE_TRANSPORT_ACL_SIZE=255
+CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=70
+CONFIG_BT_NIMBLE_TRANSPORT_EVT_COUNT=5
+CONFIG_BT_NIMBLE_TRANSPORT_EVT_DISCARD_COUNT=3
+CONFIG_BT_NIMBLE_L2CAP_COC_SDU_BUFF_COUNT=1
+# end of Memory Settings
+
+CONFIG_BT_NIMBLE_GATT_MAX_PROCS=4
+CONFIG_BT_NIMBLE_RPA_TIMEOUT=900
+# CONFIG_BT_NIMBLE_MESH is not set
+CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y
+CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000
+CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT=y
+CONFIG_BT_NIMBLE_MAX_CONN_REATTEMPT=3
+# CONFIG_BT_NIMBLE_HANDLE_REPEAT_PAIRING_DELETION is not set
+# CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT is not set
+# CONFIG_BT_NIMBLE_GATT_CACHING is not set
+# CONFIG_BT_NIMBLE_INCL_SVC_DISCOVERY is not set
+CONFIG_BT_NIMBLE_WHITELIST_SIZE=2
+# CONFIG_BT_NIMBLE_TEST_THROUGHPUT_TEST is not set
+# CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set
+CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
+# CONFIG_BT_NIMBLE_BLE_GATT_BLOB_TRANSFER is not set
+
+#
+# BLE Services
+#
+# CONFIG_BT_NIMBLE_PROX_SERVICE is not set
+# CONFIG_BT_NIMBLE_ANS_SERVICE is not set
+# CONFIG_BT_NIMBLE_CTS_SERVICE is not set
+# CONFIG_BT_NIMBLE_HTP_SERVICE is not set
+# CONFIG_BT_NIMBLE_IPSS_SERVICE is not set
+CONFIG_BT_NIMBLE_TPS_SERVICE=y
+# CONFIG_BT_NIMBLE_IAS_SERVICE is not set
+# CONFIG_BT_NIMBLE_LLS_SERVICE is not set
+# CONFIG_BT_NIMBLE_SPS_SERVICE is not set
+# CONFIG_BT_NIMBLE_HR_SERVICE is not set
+# CONFIG_BT_NIMBLE_HID_SERVICE is not set
+# CONFIG_BT_NIMBLE_BAS_SERVICE is not set
+# CONFIG_BT_NIMBLE_DIS_SERVICE is not set
+CONFIG_BT_NIMBLE_GAP_SERVICE=y
+
+#
+# GAP Appearance write permissions
+#
+# CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE is not set
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM=0
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ENC=0
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHN=0
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHR=0
+# end of GAP Appearance write permissions
+
+CONFIG_BT_NIMBLE_SVC_GAP_CAR_CHAR_NOT_SUPP=y
+# CONFIG_BT_NIMBLE_SVC_GAP_CAR_NOT_SUPP is not set
+# CONFIG_BT_NIMBLE_SVC_GAP_CAR_SUPP is not set
+CONFIG_BT_NIMBLE_SVC_GAP_CENT_ADDR_RESOLUTION=-1
+
+#
+# GAP device name write permissions
+#
+# CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE is not set
+# end of GAP device name write permissions
+
+#
+# PPCP settings
+#
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MAX_CONN_INTERVAL=0
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MIN_CONN_INTERVAL=0
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SLAVE_LATENCY=0
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SUPERVISION_TMO=0
+# end of PPCP settings
+
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM=0
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_ENC=0
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHEN=0
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHOR=0
+# CONFIG_BT_NIMBLE_SVC_GAP_GATT_SECURITY_LEVEL is not set
+# CONFIG_BT_NIMBLE_SVC_GAP_RPA_ONLY is not set
+# end of BLE Services
+
+# CONFIG_BT_NIMBLE_VS_SUPPORT is not set
+# CONFIG_BT_NIMBLE_ENC_ADV_DATA is not set
+# CONFIG_BT_NIMBLE_HIGH_DUTY_ADV_ITVL is not set
+# CONFIG_BT_NIMBLE_HOST_QUEUE_CONG_CHECK is not set
+# CONFIG_BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT is not set
+
+#
+# Host-controller Transport
+#
+CONFIG_UART_HW_FLOWCTRL_DISABLE=y
+# CONFIG_UART_HW_FLOWCTRL_CTS_RTS is not set
+CONFIG_BT_NIMBLE_HCI_UART_FLOW_CTRL=0
+CONFIG_BT_NIMBLE_HCI_UART_RTS_PIN=19
+CONFIG_BT_NIMBLE_HCI_UART_CTS_PIN=23
+# end of Host-controller Transport
+
+CONFIG_BT_NIMBLE_EATT_CHAN_NUM=0
+# CONFIG_BT_NIMBLE_SUBRATE is not set
+# end of NimBLE Options
+
+#
+# Controller Options
+#
+
+#
+# HCI Config
+#
+CONFIG_BT_LE_HCI_INTERFACE_USE_RAM=y
+# CONFIG_BT_LE_HCI_INTERFACE_USE_UART is not set
+# end of HCI Config
+
+CONFIG_BT_LE_CONTROLLER_NPL_OS_PORTING_SUPPORT=y
+CONFIG_BT_LE_CONTROLLER_TASK_STACK_SIZE=4096
+# CONFIG_BT_LE_CONTROLLER_LOG_ENABLED is not set
+CONFIG_BT_LE_LL_RESOLV_LIST_SIZE=4
+CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT=20
+CONFIG_BT_LE_LL_SCA=60
+# CONFIG_BT_LE_LL_PEER_SCA_SET_ENABLE is not set
+# CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
+CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
+CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
+# CONFIG_BT_LE_SLEEP_ENABLE is not set
+CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL=y
+# CONFIG_BT_LE_LP_CLK_SRC_DEFAULT is not set
+CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED=y
+# CONFIG_BT_LE_TX_CCA_ENABLED is not set
+# CONFIG_BT_LE_DTM_ENABLED is not set
+CONFIG_BT_LE_FEAT_LL_ENCRYPTION=y
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N24 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N21 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N18 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N15 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N12 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N9 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N6 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N3 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N0 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P3 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P6 is not set
+CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P9=y
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P12 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P15 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P18 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P20 is not set
+CONFIG_BT_LE_DFT_TX_POWER_LEVEL_DBM_EFF=9
+# CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY is not set
+# CONFIG_BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS is not set
+
+#
+# BLE disconnects when Instant Passed (0x28) occurs
+#
+# CONFIG_BT_LE_CTRL_LLCP_CONN_UPDATE is not set
+# CONFIG_BT_LE_CTRL_LLCP_CHAN_MAP_UPDATE is not set
+# CONFIG_BT_LE_CTRL_LLCP_PHY_UPDATE is not set
+# end of BLE disconnects when Instant Passed (0x28) occurs
+
+CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX=32
+# end of Controller Options
+
+# CONFIG_BT_RELEASE_IRAM is not set
+
+#
+# Common Options
+#
+CONFIG_BT_ALARM_MAX_NUM=50
+# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set
+# end of Common Options
+
+# CONFIG_BT_HCI_LOG_DEBUG_EN is not set
+# end of Bluetooth
+
+# CONFIG_BLE_MESH is not set
+
+#
+# Console Library
+#
+# CONFIG_CONSOLE_SORTED_HELP is not set
+# end of Console Library
+
+#
+# Driver Configurations
+#
+
+#
+# Legacy ADC Driver Configuration
+#
+# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
+
+#
+# Legacy ADC Calibration Configuration
+#
+# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set
+# end of Legacy ADC Calibration Configuration
+# end of Legacy ADC Driver Configuration
+
+#
+# Legacy Timer Group Driver Configurations
+#
+# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Timer Group Driver Configurations
+
+#
+# Legacy I2C Driver Configurations
+#
+# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy I2C Driver Configurations
+
+#
+# Legacy Temperature Sensor Driver Configurations
+#
+# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Temperature Sensor Driver Configurations
+# end of Driver Configurations
+
+#
+# eFuse Bit Manager
+#
+# CONFIG_EFUSE_CUSTOM_TABLE is not set
+# CONFIG_EFUSE_VIRTUAL is not set
+CONFIG_EFUSE_MAX_BLK_LEN=256
+# end of eFuse Bit Manager
+
+#
+# ESP-TLS
+#
+CONFIG_ESP_TLS_USING_MBEDTLS=y
+# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
+# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set
+# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
+# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
+# CONFIG_ESP_TLS_INSECURE is not set
+# end of ESP-TLS
+
+#
+# ADC and ADC Calibration
+#
+# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set
+# CONFIG_ADC_ENABLE_DEBUG_LOG is not set
+# end of ADC and ADC Calibration
+
+#
+# Wireless Coexistence
+#
+CONFIG_ESP_COEX_ENABLED=y
+CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y
+# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set
+# CONFIG_ESP_COEX_GPIO_DEBUG is not set
+# end of Wireless Coexistence
+
+#
+# Common ESP-related
+#
+CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
+# end of Common ESP-related
+
+#
+# ESP-Driver:GPIO Configurations
+#
+# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:GPIO Configurations
+
+#
+# ESP-Driver:GPTimer Configurations
+#
+# CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM is not set
+# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
+# CONFIG_GPTIMER_ISR_CACHE_SAFE is not set
+# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:GPTimer Configurations
+
+#
+# ESP-Driver:I2C Configurations
+#
+# CONFIG_I2C_ISR_IRAM_SAFE is not set
+# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
+# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
+# CONFIG_I2C_MASTER_ISR_HANDLER_IN_IRAM is not set
+# end of ESP-Driver:I2C Configurations
+
+#
+# ESP-Driver:LEDC Configurations
+#
+# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:LEDC Configurations
+
+#
+# ESP-Driver:SPI Configurations
+#
+# CONFIG_SPI_MASTER_ISR_IN_IRAM is not set
+# CONFIG_SPI_SLAVE_IN_IRAM is not set
+# CONFIG_SPI_SLAVE_ISR_IN_IRAM is not set
+# end of ESP-Driver:SPI Configurations
+
+#
+# ESP-Driver:Temperature Sensor Configurations
+#
+# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:Temperature Sensor Configurations
+
+#
+# ESP-Driver:UART Configurations
+#
+# end of ESP-Driver:UART Configurations
+
+#
+# ESP-Driver:UHCI Configurations
+#
+# CONFIG_UHCI_ISR_HANDLER_IN_IRAM is not set
+# CONFIG_UHCI_ISR_CACHE_SAFE is not set
+# CONFIG_UHCI_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:UHCI Configurations
+
+#
+# Ethernet
+#
+CONFIG_ETH_ENABLED=y
+CONFIG_ETH_USE_SPI_ETHERNET=y
+# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
+# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
+# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set
+# CONFIG_ETH_USE_OPENETH is not set
+# CONFIG_ETH_TRANSMIT_MUTEX is not set
+# end of Ethernet
+
+#
+# Event Loop Library
+#
+# CONFIG_ESP_EVENT_LOOP_PROFILING is not set
+CONFIG_ESP_EVENT_POST_FROM_ISR=y
+# CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR is not set
+# end of Event Loop Library
+
+#
+# GDB Stub
+#
+CONFIG_ESP_GDBSTUB_ENABLED=y
+# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set
+CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
+CONFIG_ESP_GDBSTUB_MAX_TASKS=32
+# end of GDB Stub
+
+#
+# ESP HID
+#
+CONFIG_ESPHID_TASK_SIZE_BT=2048
+CONFIG_ESPHID_TASK_SIZE_BLE=4096
+# end of ESP HID
+
+#
+# ESP HTTP client
+#
+CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set
+CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000
+# end of ESP HTTP client
+
+#
+# HTTP Server
+#
+CONFIG_HTTPD_MAX_REQ_HDR_LEN=1024
+CONFIG_HTTPD_MAX_URI_LEN=512
+CONFIG_HTTPD_ERR_RESP_NO_DELAY=y
+CONFIG_HTTPD_PURGE_BUF_LEN=32
+# CONFIG_HTTPD_LOG_PURGE_DATA is not set
+# CONFIG_HTTPD_WS_SUPPORT is not set
+# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set
+CONFIG_HTTPD_SERVER_EVENT_POST_TIMEOUT=2000
+# end of HTTP Server
+
+#
+# ESP HTTPS OTA
+#
+# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set
+# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set
+CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000
+# end of ESP HTTPS OTA
+
+#
+# ESP HTTPS server
+#
+CONFIG_ESP_HTTPS_SERVER_EVENT_POST_TIMEOUT=2000
+# CONFIG_ESP_HTTPS_SERVER_CERT_SELECT_HOOK is not set
+# end of ESP HTTPS server
+
+#
+# Hardware Settings
+#
+
+#
+# Chip revision
+#
+CONFIG_ESP32C2_REV_MIN_1=y
+# CONFIG_ESP32C2_REV_MIN_1_1 is not set
+# CONFIG_ESP32C2_REV_MIN_200 is not set
+CONFIG_ESP32C2_REV_MIN_FULL=100
+CONFIG_ESP_REV_MIN_FULL=100
+
+#
+# Maximum Supported ESP32-C2 Revision (Rev v2.99)
+#
+CONFIG_ESP32C2_REV_MAX_FULL=299
+CONFIG_ESP_REV_MAX_FULL=299
+CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
+CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
+
+#
+# Maximum Supported ESP32-C2 eFuse Block Revision (eFuse Block Rev v0.99)
+#
+# end of Chip revision
+
+#
+# MAC Config
+#
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_TWO is not set
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set
+# end of MAC Config
+
+#
+# Sleep Config
+#
+# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set
+CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y
+CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y
+CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
+CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0
+# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
+# CONFIG_ESP_SLEEP_DEBUG is not set
+CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
+# end of Sleep Config
+
+#
+# RTC Clock Config
+#
+CONFIG_RTC_CLK_SRC_INT_RC=y
+# CONFIG_RTC_CLK_SRC_EXT_OSC is not set
+# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set
+CONFIG_RTC_CLK_CAL_CYCLES=1024
+# end of RTC Clock Config
+
+#
+# Peripheral Control
+#
+# CONFIG_ESP_PERIPH_CTRL_FUNC_IN_IRAM is not set
+CONFIG_ESP_REGI2C_CTRL_FUNC_IN_IRAM=y
+# end of Peripheral Control
+
+#
+# GDMA Configurations
+#
+CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y
+CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y
+CONFIG_GDMA_OBJ_DRAM_SAFE=y
+# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set
+# CONFIG_GDMA_ISR_IRAM_SAFE is not set
+# end of GDMA Configurations
+
+#
+# Main XTAL Config
+#
+CONFIG_XTAL_FREQ_26=y
+# CONFIG_XTAL_FREQ_40 is not set
+CONFIG_XTAL_FREQ=26
+# end of Main XTAL Config
+
+#
+# Power Supplier
+#
+
+#
+# Brownout Detector
+#
+CONFIG_ESP_BROWNOUT_DET=y
+CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_ESP_BROWNOUT_DET_LVL=7
+CONFIG_ESP_BROWNOUT_USE_INTR=y
+# end of Brownout Detector
+# end of Power Supplier
+
+CONFIG_ESP_INTR_IN_IRAM=y
+# end of Hardware Settings
+
+#
+# ESP-Driver:LCD Controller Configurations
+#
+# CONFIG_LCD_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:LCD Controller Configurations
+
+#
+# ESP-MM: Memory Management Configurations
+#
+# end of ESP-MM: Memory Management Configurations
+
+#
+# ESP NETIF Adapter
+#
+CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
+# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set
+CONFIG_ESP_NETIF_TCPIP_LWIP=y
+# CONFIG_ESP_NETIF_LOOPBACK is not set
+CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y
+CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y
+# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set
+# CONFIG_ESP_NETIF_L2_TAP is not set
+# CONFIG_ESP_NETIF_BRIDGE_EN is not set
+# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set
+# end of ESP NETIF Adapter
+
+#
+# Partition API Configuration
+#
+# end of Partition API Configuration
+
+#
+# PHY
+#
+CONFIG_ESP_PHY_ENABLED=y
+CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP_PHY_MAX_TX_POWER=20
+# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set
+# CONFIG_ESP_PHY_ENABLE_USB is not set
+# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set
+CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
+# CONFIG_ESP_PHY_RF_CAL_NONE is not set
+# CONFIG_ESP_PHY_RF_CAL_FULL is not set
+CONFIG_ESP_PHY_CALIBRATION_MODE=0
+# CONFIG_ESP_PHY_IMPROVE_RX_11B is not set
+# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
+# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
+CONFIG_ESP_PHY_IRAM_OPT=y
+# end of PHY
+
+#
+# Power Management
+#
+# CONFIG_PM_SLEEP_FUNC_IN_IRAM is not set
+# CONFIG_PM_ENABLE is not set
+# CONFIG_PM_SLP_IRAM_OPT is not set
+# end of Power Management
+
+#
+# ESP PSRAM
+#
+
+#
+# ESP Ringbuf
+#
+CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH=y
+CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH=y
+# end of ESP Ringbuf
+
+#
+# ESP-ROM
+#
+CONFIG_ESP_ROM_PRINT_IN_IRAM=y
+# end of ESP-ROM
+
+#
+# ESP Security Specific
+#
+# end of ESP Security Specific
+
+#
+# ESP System Settings
+#
+# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_120=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=120
+
+#
+# Cache config
+#
+# CONFIG_ESP32C2_INSTRUCTION_CACHE_WRAP is not set
+# end of Cache config
+
+# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
+CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
+# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
+# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
+CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0
+CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y
+CONFIG_ESP_SYSTEM_NO_BACKTRACE=y
+# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set
+# CONFIG_ESP_SYSTEM_USE_FRAME_POINTER is not set
+
+#
+# Memory protection
+#
+CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y
+# end of Memory protection
+
+CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=16
+CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_ESP_MAIN_TASK_STACK_SIZE=4096
+CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y
+# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set
+CONFIG_ESP_MAIN_TASK_AFFINITY=0x0
+CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048
+CONFIG_ESP_CONSOLE_UART_DEFAULT=y
+# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set
+# CONFIG_ESP_CONSOLE_NONE is not set
+CONFIG_ESP_CONSOLE_UART=y
+CONFIG_ESP_CONSOLE_UART_NUM=0
+CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0
+CONFIG_ESP_CONSOLE_UART_BAUDRATE=74880
+CONFIG_ESP_INT_WDT=y
+CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
+CONFIG_ESP_TASK_WDT_EN=y
+CONFIG_ESP_TASK_WDT_USE_ESP_TIMER=y
+CONFIG_ESP_TASK_WDT_INIT=y
+# CONFIG_ESP_TASK_WDT_PANIC is not set
+CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
+CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
+# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
+CONFIG_ESP_DEBUG_OCDAWARE=y
+CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
+CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y
+CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y
+CONFIG_ESP_SYSTEM_HW_PC_RECORD=y
+# end of ESP System Settings
+
+#
+# IPC (Inter-Processor Call)
+#
+CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
+# end of IPC (Inter-Processor Call)
+
+#
+# ESP Timer (High Resolution Timer)
+#
+CONFIG_ESP_TIMER_IN_IRAM=y
+# CONFIG_ESP_TIMER_PROFILING is not set
+CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y
+CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y
+CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1
+# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set
+CONFIG_ESP_TIMER_TASK_AFFINITY=0x0
+CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD=y
+CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
+# end of ESP Timer (High Resolution Timer)
+
+#
+# Wi-Fi
+#
+CONFIG_ESP_WIFI_ENABLED=y
+CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y
+# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0
+CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5
+CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP_WIFI_TX_BA_WIN=6
+CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP_WIFI_RX_BA_WIN=6
+CONFIG_ESP_WIFI_NVS_ENABLED=y
+CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32
+# CONFIG_ESP_WIFI_IRAM_OPT is not set
+# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set
+# CONFIG_ESP_WIFI_RX_IRAM_OPT is not set
+CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP_WIFI_ENABLE_SAE_PK=y
+CONFIG_ESP_WIFI_ENABLE_SAE_H2E=y
+CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y
+# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50
+# CONFIG_ESP_WIFI_BSS_MAX_IDLE_SUPPORT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10
+CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15
+# CONFIG_ESP_WIFI_FTM_ENABLE is not set
+CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y
+CONFIG_ESP_WIFI_GMAC_SUPPORT=y
+# CONFIG_ESP_WIFI_SOFTAP_SUPPORT is not set
+# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
+CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=2
+CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y
+CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
+# CONFIG_ESP_WIFI_11KV_SUPPORT is not set
+# CONFIG_ESP_WIFI_MBO_SUPPORT is not set
+# CONFIG_ESP_WIFI_DPP_SUPPORT is not set
+# CONFIG_ESP_WIFI_11R_SUPPORT is not set
+
+#
+# WPS Configuration Options
+#
+# CONFIG_ESP_WIFI_WPS_STRICT is not set
+# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set
+# end of WPS Configuration Options
+
+# CONFIG_ESP_WIFI_DEBUG_PRINT is not set
+# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set
+CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y
+CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER=y
+# end of Wi-Fi
+
+#
+# Core dump
+#
+# CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH is not set
+# CONFIG_ESP_COREDUMP_ENABLE_TO_UART is not set
+CONFIG_ESP_COREDUMP_ENABLE_TO_NONE=y
+# end of Core dump
+
+#
+# FAT Filesystem support
+#
+CONFIG_FATFS_VOLUME_COUNT=2
+CONFIG_FATFS_LFN_NONE=y
+# CONFIG_FATFS_LFN_HEAP is not set
+# CONFIG_FATFS_LFN_STACK is not set
+# CONFIG_FATFS_SECTOR_512 is not set
+CONFIG_FATFS_SECTOR_4096=y
+# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set
+CONFIG_FATFS_CODEPAGE_437=y
+# CONFIG_FATFS_CODEPAGE_720 is not set
+# CONFIG_FATFS_CODEPAGE_737 is not set
+# CONFIG_FATFS_CODEPAGE_771 is not set
+# CONFIG_FATFS_CODEPAGE_775 is not set
+# CONFIG_FATFS_CODEPAGE_850 is not set
+# CONFIG_FATFS_CODEPAGE_852 is not set
+# CONFIG_FATFS_CODEPAGE_855 is not set
+# CONFIG_FATFS_CODEPAGE_857 is not set
+# CONFIG_FATFS_CODEPAGE_860 is not set
+# CONFIG_FATFS_CODEPAGE_861 is not set
+# CONFIG_FATFS_CODEPAGE_862 is not set
+# CONFIG_FATFS_CODEPAGE_863 is not set
+# CONFIG_FATFS_CODEPAGE_864 is not set
+# CONFIG_FATFS_CODEPAGE_865 is not set
+# CONFIG_FATFS_CODEPAGE_866 is not set
+# CONFIG_FATFS_CODEPAGE_869 is not set
+# CONFIG_FATFS_CODEPAGE_932 is not set
+# CONFIG_FATFS_CODEPAGE_936 is not set
+# CONFIG_FATFS_CODEPAGE_949 is not set
+# CONFIG_FATFS_CODEPAGE_950 is not set
+CONFIG_FATFS_CODEPAGE=437
+CONFIG_FATFS_FS_LOCK=0
+CONFIG_FATFS_TIMEOUT_MS=10000
+CONFIG_FATFS_PER_FILE_CACHE=y
+# CONFIG_FATFS_USE_FASTSEEK is not set
+CONFIG_FATFS_USE_STRFUNC_NONE=y
+# CONFIG_FATFS_USE_STRFUNC_WITHOUT_CRLF_CONV is not set
+# CONFIG_FATFS_USE_STRFUNC_WITH_CRLF_CONV is not set
+CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0
+# CONFIG_FATFS_IMMEDIATE_FSYNC is not set
+# CONFIG_FATFS_USE_LABEL is not set
+CONFIG_FATFS_LINK_LOCK=y
+# CONFIG_FATFS_USE_DYN_BUFFERS is not set
+
+#
+# File system free space calculation behavior
+#
+CONFIG_FATFS_DONT_TRUST_FREE_CLUSTER_CNT=0
+CONFIG_FATFS_DONT_TRUST_LAST_ALLOC=0
+# end of File system free space calculation behavior
+# end of FAT Filesystem support
+
+#
+# FreeRTOS
+#
+
+#
+# Kernel
+#
+# CONFIG_FREERTOS_SMP is not set
+CONFIG_FREERTOS_UNICORE=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set
+CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
+# CONFIG_FREERTOS_USE_IDLE_HOOK is not set
+# CONFIG_FREERTOS_USE_TICK_HOOK is not set
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
+# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set
+CONFIG_FREERTOS_USE_TIMERS=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
+# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
+CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1
+# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
+# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set
+# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
+# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set
+# end of Kernel
+
+#
+# Port
+#
+# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
+CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
+# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
+# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set
+CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
+CONFIG_FREERTOS_ISR_STACKSIZE=1536
+CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y
+CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y
+CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y
+# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set
+CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y
+CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y
+# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
+# end of Port
+
+#
+# Extra
+#
+# end of Extra
+
+CONFIG_FREERTOS_PORT=y
+CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
+CONFIG_FREERTOS_DEBUG_OCDAWARE=y
+CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
+CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
+CONFIG_FREERTOS_NUMBER_OF_CORES=1
+CONFIG_FREERTOS_IN_IRAM=y
+# end of FreeRTOS
+
+#
+# Hardware Abstraction Layer (HAL) and Low Level (LL)
+#
+CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y
+# CONFIG_HAL_ASSERTION_DISABLE is not set
+# CONFIG_HAL_ASSERTION_SILENT is not set
+# CONFIG_HAL_ASSERTION_ENABLE is not set
+CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
+CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y
+CONFIG_HAL_WDT_USE_ROM_IMPL=y
+# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
+
+#
+# Heap memory debugging
+#
+CONFIG_HEAP_POISONING_DISABLED=y
+# CONFIG_HEAP_POISONING_LIGHT is not set
+# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set
+CONFIG_HEAP_TRACING_OFF=y
+# CONFIG_HEAP_TRACING_STANDALONE is not set
+# CONFIG_HEAP_TRACING_TOHOST is not set
+# CONFIG_HEAP_USE_HOOKS is not set
+# CONFIG_HEAP_TASK_TRACKING is not set
+# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set
+CONFIG_HEAP_TLSF_USE_ROM_IMPL=y
+# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
+# end of Heap memory debugging
+
+#
+# Log
+#
+CONFIG_LOG_VERSION_1=y
+# CONFIG_LOG_VERSION_2 is not set
+CONFIG_LOG_VERSION=1
+
+#
+# Log Level
+#
+# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
+# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
+# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
+CONFIG_LOG_DEFAULT_LEVEL_INFO=y
+# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
+# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
+CONFIG_LOG_DEFAULT_LEVEL=3
+CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
+# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
+# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
+CONFIG_LOG_MAXIMUM_LEVEL=3
+
+#
+# Level Settings
+#
+# CONFIG_LOG_MASTER_LEVEL is not set
+CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
+# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
+# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y
+# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set
+CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
+# end of Level Settings
+# end of Log Level
+
+#
+# Format
+#
+# CONFIG_LOG_COLORS is not set
+CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
+# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
+# end of Format
+
+#
+# Settings
+#
+CONFIG_LOG_MODE_TEXT_EN=y
+CONFIG_LOG_MODE_TEXT=y
+# end of Settings
+
+CONFIG_LOG_IN_IRAM=y
+# end of Log
+
+#
+# LWIP
+#
+CONFIG_LWIP_ENABLE=y
+CONFIG_LWIP_LOCAL_HOSTNAME="PXN-Device"
+CONFIG_LWIP_TCPIP_TASK_PRIO=18
+# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
+# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# CONFIG_LWIP_L2_TO_L3_COPY is not set
+# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
+# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set
+CONFIG_LWIP_TIMERS_ONDEMAND=y
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# CONFIG_LWIP_SO_RCVBUF is not set
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+CONFIG_LWIP_IP_DEFAULT_TTL=64
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP4_REASSEMBLY is not set
+CONFIG_LWIP_IP_REASS_MAX_PBUFS=10
+# CONFIG_LWIP_IP_FORWARD is not set
+# CONFIG_LWIP_STATS is not set
+CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
+CONFIG_LWIP_GARP_TMR_INTERVAL=60
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
+# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set
+# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
+CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
+
+#
+# DHCP server
+#
+CONFIG_LWIP_DHCPS=y
+CONFIG_LWIP_DHCPS_LEASE_UNIT=60
+CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
+CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
+CONFIG_LWIP_DHCPS_ADD_DNS=y
+# end of DHCP server
+
+# CONFIG_LWIP_AUTOIP is not set
+CONFIG_LWIP_IPV4=y
+# CONFIG_LWIP_IPV6 is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+
+#
+# TCP
+#
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760
+CONFIG_LWIP_TCP_WND_DEFAULT=5760
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6
+CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_RTO_TIME=1500
+# end of TCP
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# end of UDP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+# CONFIG_LWIP_PPP_SUPPORT is not set
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+# CONFIG_LWIP_MULTICAST_PING is not set
+# CONFIG_LWIP_BROADCAST_PING is not set
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# SNTP
+#
+CONFIG_LWIP_SNTP_MAX_SERVERS=1
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000
+CONFIG_LWIP_SNTP_STARTUP_DELAY=y
+CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
+# end of SNTP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_MAX_HOST_IP=1
+CONFIG_LWIP_DNS_MAX_SERVERS=3
+# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
+# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
+# end of DNS
+
+CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
+CONFIG_LWIP_ESP_LWIP_ASSERT=y
+
+#
+# Hooks
+#
+# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set
+CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y
+# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set
+CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_NONE=y
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_DEFAULT is not set
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_CUSTOM is not set
+CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set
+CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set
+# end of Hooks
+
+# CONFIG_LWIP_DEBUG is not set
+# end of LWIP
+
+#
+# mbedTLS
+#
+CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
+# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
+# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
+CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
+CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
+CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
+CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
+CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y
+CONFIG_MBEDTLS_DYNAMIC_FREE_CA_CERT=y
+# CONFIG_MBEDTLS_DEBUG is not set
+
+#
+# mbedTLS v3.x related
+#
+# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
+# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
+# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
+# CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE is not set
+CONFIG_MBEDTLS_PKCS7_C=y
+# end of mbedTLS v3.x related
+
+#
+# Certificate Bundle
+#
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
+# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
+# end of Certificate Bundle
+
+# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set
+CONFIG_MBEDTLS_CMAC_C=y
+CONFIG_MBEDTLS_HARDWARE_SHA=y
+CONFIG_MBEDTLS_HARDWARE_ECC=y
+CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK=y
+CONFIG_MBEDTLS_ROM_MD5=y
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set
+CONFIG_MBEDTLS_HAVE_TIME=y
+# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
+# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
+CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
+CONFIG_MBEDTLS_SHA1_C=y
+# CONFIG_MBEDTLS_SHA512_C is not set
+# CONFIG_MBEDTLS_SHA3_C is not set
+# CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT is not set
+# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
+CONFIG_MBEDTLS_TLS_CLIENT_ONLY=y
+# CONFIG_MBEDTLS_TLS_DISABLED is not set
+CONFIG_MBEDTLS_TLS_CLIENT=y
+CONFIG_MBEDTLS_TLS_ENABLED=y
+
+#
+# TLS Key Exchange Methods
+#
+# CONFIG_MBEDTLS_PSK_MODES is not set
+CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y
+# end of TLS Key Exchange Methods
+
+CONFIG_MBEDTLS_SSL_RENEGOTIATION=y
+CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
+# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
+# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
+CONFIG_MBEDTLS_SSL_ALPN=y
+CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y
+CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y
+
+#
+# Symmetric Ciphers
+#
+CONFIG_MBEDTLS_AES_C=y
+# CONFIG_MBEDTLS_CAMELLIA_C is not set
+# CONFIG_MBEDTLS_DES_C is not set
+# CONFIG_MBEDTLS_BLOWFISH_C is not set
+# CONFIG_MBEDTLS_XTEA_C is not set
+CONFIG_MBEDTLS_CCM_C=y
+CONFIG_MBEDTLS_GCM_C=y
+# CONFIG_MBEDTLS_NIST_KW_C is not set
+# end of Symmetric Ciphers
+
+# CONFIG_MBEDTLS_RIPEMD160_C is not set
+
+#
+# Certificates
+#
+CONFIG_MBEDTLS_PEM_PARSE_C=y
+CONFIG_MBEDTLS_PEM_WRITE_C=y
+CONFIG_MBEDTLS_X509_CRL_PARSE_C=y
+CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
+# end of Certificates
+
+CONFIG_MBEDTLS_ECP_C=y
+CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y
+CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y
+# CONFIG_MBEDTLS_DHM_C is not set
+CONFIG_MBEDTLS_ECDH_C=y
+CONFIG_MBEDTLS_ECDSA_C=y
+# CONFIG_MBEDTLS_ECJPAKE_C is not set
+CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y
+CONFIG_MBEDTLS_ECP_NIST_OPTIM=y
+# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set
+# CONFIG_MBEDTLS_POLY1305_C is not set
+# CONFIG_MBEDTLS_CHACHA20_C is not set
+# CONFIG_MBEDTLS_HKDF_C is not set
+# CONFIG_MBEDTLS_THREADING_C is not set
+CONFIG_MBEDTLS_ERROR_STRINGS=y
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL_BOOTLOADER is not set
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL is not set
+CONFIG_MBEDTLS_FS_IO=y
+# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set
+# end of mbedTLS
+
+#
+# ESP-MQTT Configurations
+#
+CONFIG_MQTT_PROTOCOL_311=y
+# CONFIG_MQTT_PROTOCOL_5 is not set
+CONFIG_MQTT_TRANSPORT_SSL=y
+# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
+# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
+# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set
+# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set
+# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set
+# CONFIG_MQTT_CUSTOM_OUTBOX is not set
+# end of ESP-MQTT Configurations
+
+#
+# LibC
+#
+CONFIG_LIBC_NEWLIB=y
+CONFIG_LIBC_MISC_IN_IRAM=y
+CONFIG_LIBC_LOCKS_PLACE_IN_IRAM=y
+CONFIG_LIBC_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_LIBC_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_LIBC_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_LF is not set
+CONFIG_LIBC_STDIN_LINE_ENDING_CR=y
+CONFIG_LIBC_NEWLIB_NANO_FORMAT=y
+CONFIG_LIBC_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_LIBC_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_NONE is not set
+# CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS is not set
+# end of LibC
+
+#
+# NVS
+#
+# CONFIG_NVS_ASSERT_ERROR_CHECK is not set
+# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set
+# end of NVS
+
+#
+# OpenThread
+#
+# CONFIG_OPENTHREAD_ENABLED is not set
+
+#
+# OpenThread Spinel
+#
+# CONFIG_OPENTHREAD_SPINEL_ONLY is not set
+# end of OpenThread Spinel
+# end of OpenThread
+
+#
+# Protocomm
+#
+CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y
+CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y
+CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y
+CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y
+# end of Protocomm
+
+#
+# PThreads
+#
+CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_PTHREAD_STACK_MIN=768
+CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread"
+# end of PThreads
+
+#
+# MMU Config
+#
+CONFIG_MMU_PAGE_SIZE_32KB=y
+CONFIG_MMU_PAGE_MODE="32KB"
+CONFIG_MMU_PAGE_SIZE=0x8000
+# end of MMU Config
+
+#
+# Main Flash configuration
+#
+
+#
+# SPI Flash behavior when brownout
+#
+CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
+CONFIG_SPI_FLASH_BROWNOUT_RESET=y
+# end of SPI Flash behavior when brownout
+
+#
+# Optional and Experimental Features (READ DOCS FIRST)
+#
+
+#
+# Features here require specific hardware (READ DOCS FIRST!)
+#
+# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
+CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
+# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
+# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set
+CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM=y
+# end of Optional and Experimental Features (READ DOCS FIRST)
+# end of Main Flash configuration
+
+#
+# SPI Flash driver
+#
+# CONFIG_SPI_FLASH_VERIFY_WRITE is not set
+# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set
+CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y
+# CONFIG_SPI_FLASH_ROM_IMPL is not set
+CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set
+# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set
+CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
+CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20
+CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1
+CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
+# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set
+# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set
+# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set
+
+#
+# Auto-detect flash chips
+#
+CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y
+CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y
+# end of Auto-detect flash chips
+
+CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
+# end of SPI Flash driver
+
+#
+# SPIFFS Configuration
+#
+CONFIG_SPIFFS_MAX_PARTITIONS=3
+
+#
+# SPIFFS Cache Configuration
+#
+CONFIG_SPIFFS_CACHE=y
+CONFIG_SPIFFS_CACHE_WR=y
+# CONFIG_SPIFFS_CACHE_STATS is not set
+# end of SPIFFS Cache Configuration
+
+CONFIG_SPIFFS_PAGE_CHECK=y
+CONFIG_SPIFFS_GC_MAX_RUNS=10
+# CONFIG_SPIFFS_GC_STATS is not set
+CONFIG_SPIFFS_PAGE_SIZE=256
+CONFIG_SPIFFS_OBJ_NAME_LEN=32
+# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set
+CONFIG_SPIFFS_USE_MAGIC=y
+CONFIG_SPIFFS_USE_MAGIC_LENGTH=y
+CONFIG_SPIFFS_META_LENGTH=4
+CONFIG_SPIFFS_USE_MTIME=y
+
+#
+# Debug Configuration
+#
+# CONFIG_SPIFFS_DBG is not set
+# CONFIG_SPIFFS_API_DBG is not set
+# CONFIG_SPIFFS_GC_DBG is not set
+# CONFIG_SPIFFS_CACHE_DBG is not set
+# CONFIG_SPIFFS_CHECK_DBG is not set
+# CONFIG_SPIFFS_TEST_VISUALISATION is not set
+# end of Debug Configuration
+# end of SPIFFS Configuration
+
+#
+# TCP Transport
+#
+
+#
+# Websocket
+#
+# CONFIG_WS_TRANSPORT is not set
+# end of Websocket
+# end of TCP Transport
+
+#
+# Unity unit testing library
+#
+CONFIG_UNITY_ENABLE_FLOAT=y
+CONFIG_UNITY_ENABLE_DOUBLE=y
+# CONFIG_UNITY_ENABLE_64BIT is not set
+# CONFIG_UNITY_ENABLE_COLOR is not set
+CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y
+# CONFIG_UNITY_ENABLE_FIXTURE is not set
+# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set
+# CONFIG_UNITY_TEST_ORDER_BY_FILE_PATH_AND_LINE is not set
+# end of Unity unit testing library
+
+#
+# Virtual file system
+#
+CONFIG_VFS_SUPPORT_IO=y
+CONFIG_VFS_SUPPORT_DIR=y
+CONFIG_VFS_SUPPORT_SELECT=y
+CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+# CONFIG_VFS_SELECT_IN_RAM is not set
+CONFIG_VFS_SUPPORT_TERMIOS=y
+CONFIG_VFS_MAX_COUNT=8
+
+#
+# Host File System I/O (Semihosting)
+#
+CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# end of Host File System I/O (Semihosting)
+
+CONFIG_VFS_INITIALIZE_DEV_NULL=y
+# end of Virtual file system
+
+#
+# Wear Levelling
+#
+# CONFIG_WL_SECTOR_SIZE_512 is not set
+CONFIG_WL_SECTOR_SIZE_4096=y
+CONFIG_WL_SECTOR_SIZE=4096
+# end of Wear Levelling
+
+#
+# Wi-Fi Provisioning Manager
+#
+CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES=16
+CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT=30
+# CONFIG_WIFI_PROV_BLE_BONDING is not set
+CONFIG_WIFI_PROV_BLE_SEC_CONN=y
+# CONFIG_WIFI_PROV_BLE_FORCE_ENCRYPTION is not set
+# CONFIG_WIFI_PROV_BLE_NOTIFY is not set
+# CONFIG_WIFI_PROV_KEEP_BLE_ON_AFTER_PROV is not set
+CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y
+# CONFIG_WIFI_PROV_STA_FAST_SCAN is not set
+# end of Wi-Fi Provisioning Manager
+# end of Component config
+
+# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set
+
+# Deprecated options for backward compatibility
+# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set
+# CONFIG_NO_BLOBS is not set
+# CONFIG_APP_ROLLBACK_ENABLE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL_NONE=y
+# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL=0
+# CONFIG_FLASH_ENCRYPTION_ENABLED is not set
+# CONFIG_FLASHMODE_QIO is not set
+# CONFIG_FLASHMODE_QOUT is not set
+CONFIG_FLASHMODE_DIO=y
+# CONFIG_FLASHMODE_DOUT is not set
+CONFIG_MONITOR_BAUD=74880
+# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set
+# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
+# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
+CONFIG_OPTIMIZATION_LEVEL_RELEASE=y
+CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
+CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
+# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
+CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_CXX_EXCEPTIONS is not set
+CONFIG_STACK_CHECK_NONE=y
+# CONFIG_STACK_CHECK_NORM is not set
+# CONFIG_STACK_CHECK_STRONG is not set
+# CONFIG_STACK_CHECK_ALL is not set
+# CONFIG_WARN_WRITE_STRINGS is not set
+# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set
+CONFIG_ESP32_APPTRACE_DEST_NONE=y
+CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
+# CONFIG_BLUEDROID_ENABLED is not set
+CONFIG_NIMBLE_ENABLED=y
+CONFIG_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y
+# CONFIG_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set
+CONFIG_NIMBLE_MAX_CONNECTIONS=1
+CONFIG_NIMBLE_MAX_BONDS=2
+CONFIG_NIMBLE_MAX_CCCDS=2
+CONFIG_NIMBLE_L2CAP_COC_MAX_NUM=0
+CONFIG_NIMBLE_PINNED_TO_CORE=0
+CONFIG_NIMBLE_TASK_STACK_SIZE=4096
+CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096
+# CONFIG_NIMBLE_ROLE_CENTRAL is not set
+CONFIG_NIMBLE_ROLE_PERIPHERAL=y
+CONFIG_NIMBLE_ROLE_BROADCASTER=y
+# CONFIG_NIMBLE_ROLE_OBSERVER is not set
+# CONFIG_NIMBLE_NVS_PERSIST is not set
+# CONFIG_NIMBLE_DEBUG is not set
+CONFIG_NIMBLE_SVC_GAP_DEVICE_NAME=""
+CONFIG_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=30
+CONFIG_NIMBLE_ATT_PREFERRED_MTU=261
+CONFIG_NIMBLE_SVC_GAP_APPEARANCE=0
+CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12
+CONFIG_BT_NIMBLE_ACL_BUF_COUNT=12
+CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255
+CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70
+CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=5
+CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=3
+CONFIG_NIMBLE_RPA_TIMEOUT=900
+# CONFIG_NIMBLE_MESH is not set
+CONFIG_NIMBLE_CRYPTO_STACK_MBEDTLS=y
+# CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
+CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
+CONFIG_SW_COEXIST_ENABLE=y
+CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y
+CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y
+# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
+# CONFIG_EVENT_LOOP_PROFILING is not set
+CONFIG_POST_EVENTS_FROM_ISR=y
+# CONFIG_POST_EVENTS_FROM_IRAM_ISR is not set
+CONFIG_GDBSTUB_SUPPORT_TASKS=y
+CONFIG_GDBSTUB_MAX_TASKS=32
+# CONFIG_OTA_ALLOW_HTTP is not set
+# CONFIG_ESP_SYSTEM_PD_FLASH is not set
+# CONFIG_PERIPH_CTRL_FUNC_IN_IRAM is not set
+CONFIG_BROWNOUT_DET=y
+CONFIG_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_BROWNOUT_DET_LVL=7
+CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
+CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP32_PHY_MAX_TX_POWER=20
+# CONFIG_REDUCE_PHY_TX_POWER is not set
+# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set
+CONFIG_SYSTEM_EVENT_QUEUE_SIZE=16
+CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_MAIN_TASK_STACK_SIZE=4096
+CONFIG_CONSOLE_UART_DEFAULT=y
+# CONFIG_CONSOLE_UART_CUSTOM is not set
+# CONFIG_CONSOLE_UART_NONE is not set
+# CONFIG_ESP_CONSOLE_UART_NONE is not set
+CONFIG_CONSOLE_UART=y
+CONFIG_CONSOLE_UART_NUM=0
+CONFIG_CONSOLE_UART_BAUDRATE=74880
+CONFIG_INT_WDT=y
+CONFIG_INT_WDT_TIMEOUT_MS=300
+CONFIG_TASK_WDT=y
+CONFIG_ESP_TASK_WDT=y
+# CONFIG_TASK_WDT_PANIC is not set
+CONFIG_TASK_WDT_TIMEOUT_S=5
+CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set
+CONFIG_IPC_TASK_STACK_SIZE=1024
+CONFIG_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP32_WIFI_ENABLED=y
+CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP32_WIFI_TX_BA_WIN=6
+CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP32_WIFI_RX_BA_WIN=6
+CONFIG_ESP32_WIFI_NVS_ENABLED=y
+CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
+# CONFIG_ESP32_WIFI_IRAM_OPT is not set
+# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
+CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y
+CONFIG_WPA_MBEDTLS_CRYPTO=y
+CONFIG_WPA_MBEDTLS_TLS_CLIENT=y
+# CONFIG_WPA_11KV_SUPPORT is not set
+# CONFIG_WPA_MBO_SUPPORT is not set
+# CONFIG_WPA_DPP_SUPPORT is not set
+# CONFIG_WPA_11R_SUPPORT is not set
+# CONFIG_WPA_WPS_STRICT is not set
+# CONFIG_WPA_DEBUG_PRINT is not set
+# CONFIG_WPA_TESTING_OPTIONS is not set
+# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set
+# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set
+CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y
+CONFIG_TIMER_TASK_PRIORITY=1
+CONFIG_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_TIMER_QUEUE_LENGTH=10
+# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set
+# CONFIG_HAL_ASSERTION_SILIENT is not set
+# CONFIG_L2_TO_L3_COPY is not set
+CONFIG_ESP_GRATUITOUS_ARP=y
+CONFIG_GARP_TMR_INTERVAL=60
+CONFIG_TCPIP_RECVMBOX_SIZE=32
+CONFIG_TCP_MAXRTX=12
+CONFIG_TCP_SYNMAXRTX=12
+CONFIG_TCP_MSS=1440
+CONFIG_TCP_MSL=60000
+CONFIG_TCP_SND_BUF_DEFAULT=5760
+CONFIG_TCP_WND_DEFAULT=5760
+CONFIG_TCP_RECVMBOX_SIZE=6
+CONFIG_TCP_QUEUE_OOSEQ=y
+CONFIG_TCP_OVERSIZE_MSS=y
+# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_TCP_OVERSIZE_DISABLE is not set
+CONFIG_UDP_RECVMBOX_SIZE=6
+CONFIG_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+# CONFIG_PPP_SUPPORT is not set
+CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set
+CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
+CONFIG_NEWLIB_NANO_FORMAT=y
+CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set
+CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_ESP32_PTHREAD_STACK_MIN=768
+CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
+CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set
+CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+CONFIG_SUPPORT_TERMIOS=y
+CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# End of deprecated options
diff --git a/sdkconfig - 副本 b/sdkconfig - 副本
new file mode 100644 (file)
index 0000000..d24e10d
--- /dev/null
@@ -0,0 +1,1785 @@
+#
+# Automatically generated file. DO NOT EDIT.
+# Espressif IoT Development Framework (ESP-IDF) 5.5.0 Project Configuration
+#
+CONFIG_SOC_ADC_SUPPORTED=y
+CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
+CONFIG_SOC_UART_SUPPORTED=y
+CONFIG_SOC_GDMA_SUPPORTED=y
+CONFIG_SOC_AHB_GDMA_SUPPORTED=y
+CONFIG_SOC_GPTIMER_SUPPORTED=y
+CONFIG_SOC_PHY_SUPPORTED=y
+CONFIG_SOC_BT_SUPPORTED=y
+CONFIG_SOC_WIFI_SUPPORTED=y
+CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y
+CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y
+CONFIG_SOC_EFUSE_CONSISTS_OF_ONE_KEY_BLOCK=y
+CONFIG_SOC_EFUSE_SUPPORTED=y
+CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y
+CONFIG_SOC_LEDC_SUPPORTED=y
+CONFIG_SOC_I2C_SUPPORTED=y
+CONFIG_SOC_GPSPI_SUPPORTED=y
+CONFIG_SOC_SHA_SUPPORTED=y
+CONFIG_SOC_ECC_SUPPORTED=y
+CONFIG_SOC_FLASH_ENC_SUPPORTED=y
+CONFIG_SOC_SECURE_BOOT_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_SUPPORTED=y
+CONFIG_SOC_BOD_SUPPORTED=y
+CONFIG_SOC_CLK_TREE_SUPPORTED=y
+CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y
+CONFIG_SOC_WDT_SUPPORTED=y
+CONFIG_SOC_SPI_FLASH_SUPPORTED=y
+CONFIG_SOC_RNG_SUPPORTED=y
+CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y
+CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
+CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y
+CONFIG_SOC_PM_SUPPORTED=y
+CONFIG_SOC_XTAL_SUPPORT_26M=y
+CONFIG_SOC_XTAL_SUPPORT_40M=y
+CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y
+CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y
+CONFIG_SOC_ADC_MONITOR_SUPPORTED=y
+CONFIG_SOC_ADC_PERIPH_NUM=1
+CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5
+CONFIG_SOC_ADC_ATTEN_NUM=4
+CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1
+CONFIG_SOC_ADC_PATT_LEN_MAX=8
+CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2
+CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611
+CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y
+CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y
+CONFIG_SOC_ADC_SHARED_POWER=y
+CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y
+CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y
+CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y
+CONFIG_SOC_CPU_CORES_NUM=1
+CONFIG_SOC_CPU_INTR_NUM=32
+CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y
+CONFIG_SOC_CPU_HAS_CSR_PC=y
+CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000
+CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y
+CONFIG_SOC_ECC_SUPPORT_POINT_VERIFY_QUIRK=y
+CONFIG_SOC_AHB_GDMA_VERSION=1
+CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1
+CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=1
+CONFIG_SOC_GPIO_PORT=1
+CONFIG_SOC_GPIO_PIN_COUNT=21
+CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y
+CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y
+CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y
+CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y
+CONFIG_SOC_GPIO_IN_RANGE_MAX=20
+CONFIG_SOC_GPIO_OUT_RANGE_MAX=20
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6
+CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000001FFFC0
+CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y
+CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3
+CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y
+CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y
+CONFIG_SOC_I2C_NUM=1
+CONFIG_SOC_HP_I2C_NUM=1
+CONFIG_SOC_I2C_FIFO_LEN=16
+CONFIG_SOC_I2C_CMD_REG_NUM=8
+CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y
+CONFIG_SOC_I2C_SUPPORT_XTAL=y
+CONFIG_SOC_I2C_SUPPORT_RTC=y
+CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y
+CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y
+CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y
+CONFIG_SOC_LEDC_TIMER_NUM=4
+CONFIG_SOC_LEDC_CHANNEL_NUM=6
+CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14
+CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y
+CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y
+CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1
+CONFIG_SOC_MMU_PERIPH_NUM=1
+CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
+CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
+CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128
+CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108
+CONFIG_SOC_RTCIO_PIN_COUNT=0
+CONFIG_SOC_SHA_SUPPORT_RESUME=y
+CONFIG_SOC_SHA_SUPPORT_SHA1=y
+CONFIG_SOC_SHA_SUPPORT_SHA224=y
+CONFIG_SOC_SHA_SUPPORT_SHA256=y
+CONFIG_SOC_SPI_PERIPH_NUM=2
+CONFIG_SOC_SPI_MAX_CS_NUM=6
+CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64
+CONFIG_SOC_SPI_SUPPORT_DDRCLK=y
+CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_CD_SIG=y
+CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y
+CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y
+CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F40M=y
+CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y
+CONFIG_SOC_SPI_SCT_SUPPORTED=y
+CONFIG_SOC_SPI_SCT_REG_NUM=14
+CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y
+CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA
+CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y
+CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y
+CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y
+CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y
+CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_60M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_30M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_15M_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_COUNTER_NUM=2
+CONFIG_SOC_SYSTIMER_ALARM_NUM=3
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20
+CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y
+CONFIG_SOC_SYSTIMER_INT_LEVEL=y
+CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y
+CONFIG_SOC_TIMER_GROUPS=1
+CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1
+CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54
+CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y
+CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=1
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16
+CONFIG_SOC_MWDT_SUPPORT_XTAL=y
+CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y
+CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y
+CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y
+CONFIG_SOC_SECURE_BOOT_V2_ECC=y
+CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=1
+CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128_DERIVED=y
+CONFIG_SOC_UART_NUM=2
+CONFIG_SOC_UART_HP_NUM=2
+CONFIG_SOC_UART_FIFO_LEN=128
+CONFIG_SOC_UART_BITRATE_MAX=2500000
+CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
+CONFIG_SOC_UART_SUPPORT_PLL_F40M_CLK=y
+CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
+CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
+CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
+CONFIG_SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE=y
+CONFIG_SOC_SUPPORT_COEXISTENCE=y
+CONFIG_SOC_COEX_HW_PTI=y
+CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
+CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21
+CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12
+CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y
+CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y
+CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y
+CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y
+CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
+CONFIG_SOC_CLK_OSC_SLOW_SUPPORTED=y
+CONFIG_SOC_CLK_LP_FAST_SUPPORT_XTAL_D2=y
+CONFIG_SOC_WIFI_HW_TSF=y
+CONFIG_SOC_WIFI_FTM_SUPPORT=y
+CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
+CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y
+CONFIG_SOC_BLE_SUPPORTED=y
+CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y
+CONFIG_SOC_BLE_50_SUPPORTED=y
+CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y
+CONFIG_SOC_BLUFI_SUPPORTED=y
+CONFIG_SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED=y
+CONFIG_SOC_PHY_IMPROVE_RX_11B=y
+CONFIG_SOC_PHY_COMBO_MODULE=y
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TOOLCHAIN="gcc"
+CONFIG_IDF_TOOLCHAIN_GCC=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32c2"
+CONFIG_IDF_INIT_VERSION="5.5.0"
+CONFIG_IDF_TARGET_ESP32C2=y
+CONFIG_IDF_FIRMWARE_CHIP_ID=0x000C
+
+#
+# Build type
+#
+CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
+# CONFIG_APP_BUILD_TYPE_RAM is not set
+CONFIG_APP_BUILD_GENERATE_BINARIES=y
+CONFIG_APP_BUILD_BOOTLOADER=y
+CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
+# CONFIG_APP_REPRODUCIBLE_BUILD is not set
+# CONFIG_APP_NO_BLOBS is not set
+# end of Build type
+
+#
+# Bootloader config
+#
+
+#
+# Bootloader manager
+#
+CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y
+CONFIG_BOOTLOADER_PROJECT_VER=1
+# end of Bootloader manager
+
+#
+# Application Rollback
+#
+# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
+# end of Application Rollback
+
+#
+# Bootloader Rollback
+#
+# end of Bootloader Rollback
+
+CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
+CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set
+
+#
+# Log
+#
+CONFIG_BOOTLOADER_LOG_VERSION_1=y
+CONFIG_BOOTLOADER_LOG_VERSION=1
+# CONFIG_BOOTLOADER_LOG_LEVEL_NONE is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
+CONFIG_BOOTLOADER_LOG_LEVEL_INFO=y
+# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
+CONFIG_BOOTLOADER_LOG_LEVEL=3
+
+#
+# Format
+#
+# CONFIG_BOOTLOADER_LOG_COLORS is not set
+CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
+# end of Format
+
+#
+# Settings
+#
+CONFIG_BOOTLOADER_LOG_MODE_TEXT_EN=y
+CONFIG_BOOTLOADER_LOG_MODE_TEXT=y
+# end of Settings
+# end of Log
+
+#
+# Serial Flash Configurations
+#
+# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set
+CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
+# end of Serial Flash Configurations
+
+# CONFIG_BOOTLOADER_FACTORY_RESET is not set
+# CONFIG_BOOTLOADER_APP_TEST is not set
+CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y
+CONFIG_BOOTLOADER_WDT_ENABLE=y
+# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set
+CONFIG_BOOTLOADER_WDT_TIME_MS=9000
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
+# end of Bootloader config
+
+#
+# Security features
+#
+CONFIG_SECURE_BOOT_V2_ECC_SUPPORTED=y
+CONFIG_SECURE_BOOT_V2_PREFERRED=y
+# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
+# CONFIG_SECURE_BOOT is not set
+# CONFIG_SECURE_FLASH_ENC_ENABLED is not set
+CONFIG_SECURE_ROM_DL_MODE_ENABLED=y
+# end of Security features
+
+#
+# Application manager
+#
+CONFIG_APP_COMPILE_TIME_DATE=y
+# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
+# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
+# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
+CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9
+# end of Application manager
+
+CONFIG_ESP_ROM_HAS_CRC_LE=y
+CONFIG_ESP_ROM_HAS_CRC_BE=y
+CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y
+CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
+CONFIG_ESP_ROM_GET_CLK_FREQ=y
+CONFIG_ESP_ROM_HAS_RVFPLIB=y
+CONFIG_ESP_ROM_HAS_HAL_WDT=y
+CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y
+CONFIG_ESP_ROM_HAS_HEAP_TLSF=y
+CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y
+CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y
+CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH_MMAP=y
+CONFIG_ESP_ROM_HAS_NEWLIB=y
+CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y
+CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y
+CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y
+CONFIG_ESP_ROM_HAS_MBEDTLS_CRYPTO_LIB=y
+CONFIG_ESP_ROM_HAS_SW_FLOAT=y
+CONFIG_ESP_ROM_USB_OTG_NUM=-1
+CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1
+CONFIG_ESP_ROM_HAS_VERSION=y
+CONFIG_ESP_ROM_HAS_VPRINTF_FUNC=y
+CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
+CONFIG_ESP_ROM_CONSOLE_OUTPUT_SECONDARY=y
+CONFIG_ESP_ROM_HAS_SUBOPTIMAL_NEWLIB_ON_MISALIGNED_MEMORY=y
+
+#
+# Boot ROM Behavior
+#
+CONFIG_BOOT_ROM_LOG_ALWAYS_ON=y
+# CONFIG_BOOT_ROM_LOG_ALWAYS_OFF is not set
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
+# end of Boot ROM Behavior
+
+#
+# Serial flasher config
+#
+# CONFIG_ESPTOOLPY_NO_STUB is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
+CONFIG_ESPTOOLPY_FLASHMODE_DIO=y
+# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set
+CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y
+CONFIG_ESPTOOLPY_FLASHMODE="dio"
+CONFIG_ESPTOOLPY_FLASHFREQ_60M=y
+# CONFIG_ESPTOOLPY_FLASHFREQ_30M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_15M is not set
+CONFIG_ESPTOOLPY_FLASHFREQ="60m"
+# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
+# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE="2MB"
+# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set
+CONFIG_ESPTOOLPY_BEFORE_RESET=y
+# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
+CONFIG_ESPTOOLPY_BEFORE="default_reset"
+CONFIG_ESPTOOLPY_AFTER_RESET=y
+# CONFIG_ESPTOOLPY_AFTER_NORESET is not set
+CONFIG_ESPTOOLPY_AFTER="hard_reset"
+CONFIG_ESPTOOLPY_MONITOR_BAUD=74880
+# end of Serial flasher config
+
+#
+# Partition Table
+#
+CONFIG_PARTITION_TABLE_SINGLE_APP=y
+# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set
+# CONFIG_PARTITION_TABLE_CUSTOM is not set
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv"
+CONFIG_PARTITION_TABLE_OFFSET=0x8000
+CONFIG_PARTITION_TABLE_MD5=y
+# end of Partition Table
+
+#
+# Example Connection Configuration
+#
+CONFIG_ENV_GPIO_RANGE_MIN=0
+CONFIG_ENV_GPIO_RANGE_MAX=18
+CONFIG_ENV_GPIO_IN_RANGE_MAX=18
+CONFIG_ENV_GPIO_OUT_RANGE_MAX=18
+CONFIG_EXAMPLE_CONNECT_WIFI=y
+# CONFIG_EXAMPLE_WIFI_SSID_PWD_FROM_STDIN is not set
+CONFIG_EXAMPLE_PROVIDE_WIFI_CONSOLE_CMD=y
+CONFIG_EXAMPLE_WIFI_SSID="PXN"
+CONFIG_EXAMPLE_WIFI_PASSWORD="PXN998877"
+CONFIG_EXAMPLE_WIFI_CONN_MAX_RETRY=6
+# CONFIG_EXAMPLE_WIFI_SCAN_METHOD_FAST is not set
+CONFIG_EXAMPLE_WIFI_SCAN_METHOD_ALL_CHANNEL=y
+
+#
+# WiFi Scan threshold
+#
+CONFIG_EXAMPLE_WIFI_SCAN_RSSI_THRESHOLD=-127
+CONFIG_EXAMPLE_WIFI_AUTH_OPEN=y
+# CONFIG_EXAMPLE_WIFI_AUTH_WEP is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_ENTERPRISE is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WAPI_PSK is not set
+# end of WiFi Scan threshold
+
+CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SIGNAL=y
+# CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SECURITY is not set
+# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set
+# CONFIG_EXAMPLE_CONNECT_PPP is not set
+CONFIG_EXAMPLE_CONNECT_IPV4=y
+CONFIG_EXAMPLE_CONNECT_IPV6=y
+CONFIG_EXAMPLE_CONNECT_IPV6_PREF_LOCAL_LINK=y
+# CONFIG_EXAMPLE_CONNECT_IPV6_PREF_GLOBAL is not set
+# CONFIG_EXAMPLE_CONNECT_IPV6_PREF_SITE_LOCAL is not set
+# CONFIG_EXAMPLE_CONNECT_IPV6_PREF_UNIQUE_LOCAL is not set
+# end of Example Connection Configuration
+
+#
+# Compiler options
+#
+CONFIG_COMPILER_OPTIMIZATION_DEBUG=y
+# CONFIG_COMPILER_OPTIMIZATION_SIZE is not set
+# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
+CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y
+# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set
+CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y
+CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set
+CONFIG_COMPILER_HIDE_PATHS_MACROS=y
+# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
+# CONFIG_COMPILER_CXX_RTTI is not set
+CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
+# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
+# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set
+# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
+# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set
+CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
+# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set
+# CONFIG_COMPILER_DUMP_RTL_FILES is not set
+CONFIG_COMPILER_RT_LIB_GCCLIB=y
+CONFIG_COMPILER_RT_LIB_NAME="gcc"
+CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y
+# CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE is not set
+# CONFIG_COMPILER_STATIC_ANALYZER is not set
+# end of Compiler options
+
+#
+# Component config
+#
+
+#
+# !!! MINIMAL_BUILD is enabled !!!
+#
+
+#
+# Only common components and those transitively required by the main component are listed
+#
+
+#
+# If a component configuration is missing, please add it to the main component's requirements
+#
+
+#
+# Console Library
+#
+# CONFIG_CONSOLE_SORTED_HELP is not set
+# end of Console Library
+
+#
+# Driver Configurations
+#
+
+#
+# Legacy ADC Driver Configuration
+#
+# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
+
+#
+# Legacy ADC Calibration Configuration
+#
+# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set
+# end of Legacy ADC Calibration Configuration
+# end of Legacy ADC Driver Configuration
+
+#
+# Legacy Timer Group Driver Configurations
+#
+# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Timer Group Driver Configurations
+
+#
+# Legacy I2C Driver Configurations
+#
+# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy I2C Driver Configurations
+
+#
+# Legacy Temperature Sensor Driver Configurations
+#
+# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Temperature Sensor Driver Configurations
+# end of Driver Configurations
+
+#
+# eFuse Bit Manager
+#
+# CONFIG_EFUSE_CUSTOM_TABLE is not set
+# CONFIG_EFUSE_VIRTUAL is not set
+CONFIG_EFUSE_MAX_BLK_LEN=256
+# end of eFuse Bit Manager
+
+#
+# ESP-TLS
+#
+CONFIG_ESP_TLS_USING_MBEDTLS=y
+# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
+# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set
+# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
+# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
+# CONFIG_ESP_TLS_INSECURE is not set
+# end of ESP-TLS
+
+#
+# Wireless Coexistence
+#
+CONFIG_ESP_COEX_ENABLED=y
+# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set
+# CONFIG_ESP_COEX_GPIO_DEBUG is not set
+# end of Wireless Coexistence
+
+#
+# Common ESP-related
+#
+CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
+# end of Common ESP-related
+
+#
+# ESP-Driver:GPIO Configurations
+#
+# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:GPIO Configurations
+
+#
+# ESP-Driver:GPTimer Configurations
+#
+CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
+# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
+# CONFIG_GPTIMER_ISR_CACHE_SAFE is not set
+CONFIG_GPTIMER_OBJ_CACHE_SAFE=y
+# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:GPTimer Configurations
+
+#
+# ESP-Driver:I2C Configurations
+#
+# CONFIG_I2C_ISR_IRAM_SAFE is not set
+# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
+# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
+CONFIG_I2C_MASTER_ISR_HANDLER_IN_IRAM=y
+# end of ESP-Driver:I2C Configurations
+
+#
+# ESP-Driver:LEDC Configurations
+#
+# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:LEDC Configurations
+
+#
+# ESP-Driver:SPI Configurations
+#
+# CONFIG_SPI_MASTER_IN_IRAM is not set
+CONFIG_SPI_MASTER_ISR_IN_IRAM=y
+# CONFIG_SPI_SLAVE_IN_IRAM is not set
+CONFIG_SPI_SLAVE_ISR_IN_IRAM=y
+# end of ESP-Driver:SPI Configurations
+
+#
+# ESP-Driver:Temperature Sensor Configurations
+#
+# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:Temperature Sensor Configurations
+
+#
+# ESP-Driver:UART Configurations
+#
+# CONFIG_UART_ISR_IN_IRAM is not set
+# end of ESP-Driver:UART Configurations
+
+#
+# ESP-Driver:UHCI Configurations
+#
+# CONFIG_UHCI_ISR_HANDLER_IN_IRAM is not set
+# CONFIG_UHCI_ISR_CACHE_SAFE is not set
+# CONFIG_UHCI_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:UHCI Configurations
+
+#
+# Ethernet
+#
+CONFIG_ETH_ENABLED=y
+CONFIG_ETH_USE_SPI_ETHERNET=y
+# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
+# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
+# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set
+# CONFIG_ETH_USE_OPENETH is not set
+# CONFIG_ETH_TRANSMIT_MUTEX is not set
+# end of Ethernet
+
+#
+# Event Loop Library
+#
+# CONFIG_ESP_EVENT_LOOP_PROFILING is not set
+CONFIG_ESP_EVENT_POST_FROM_ISR=y
+CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
+# end of Event Loop Library
+
+#
+# Hardware Settings
+#
+
+#
+# Chip revision
+#
+CONFIG_ESP32C2_REV_MIN_1=y
+# CONFIG_ESP32C2_REV_MIN_1_1 is not set
+# CONFIG_ESP32C2_REV_MIN_200 is not set
+CONFIG_ESP32C2_REV_MIN_FULL=100
+CONFIG_ESP_REV_MIN_FULL=100
+
+#
+# Maximum Supported ESP32-C2 Revision (Rev v2.99)
+#
+CONFIG_ESP32C2_REV_MAX_FULL=299
+CONFIG_ESP_REV_MAX_FULL=299
+CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
+CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
+
+#
+# Maximum Supported ESP32-C2 eFuse Block Revision (eFuse Block Rev v0.99)
+#
+# end of Chip revision
+
+#
+# MAC Config
+#
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_TWO is not set
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set
+# end of MAC Config
+
+#
+# Sleep Config
+#
+# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set
+CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y
+CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y
+CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
+CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0
+# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
+# CONFIG_ESP_SLEEP_DEBUG is not set
+CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
+# end of Sleep Config
+
+#
+# RTC Clock Config
+#
+CONFIG_RTC_CLK_SRC_INT_RC=y
+# CONFIG_RTC_CLK_SRC_EXT_OSC is not set
+# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set
+CONFIG_RTC_CLK_CAL_CYCLES=1024
+# end of RTC Clock Config
+
+#
+# Peripheral Control
+#
+CONFIG_ESP_PERIPH_CTRL_FUNC_IN_IRAM=y
+CONFIG_ESP_REGI2C_CTRL_FUNC_IN_IRAM=y
+# end of Peripheral Control
+
+#
+# GDMA Configurations
+#
+CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y
+CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y
+CONFIG_GDMA_OBJ_DRAM_SAFE=y
+# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set
+# CONFIG_GDMA_ISR_IRAM_SAFE is not set
+# end of GDMA Configurations
+
+#
+# Main XTAL Config
+#
+CONFIG_XTAL_FREQ_26=y
+# CONFIG_XTAL_FREQ_40 is not set
+CONFIG_XTAL_FREQ=26
+# end of Main XTAL Config
+
+#
+# Power Supplier
+#
+
+#
+# Brownout Detector
+#
+CONFIG_ESP_BROWNOUT_DET=y
+CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_ESP_BROWNOUT_DET_LVL=7
+CONFIG_ESP_BROWNOUT_USE_INTR=y
+# end of Brownout Detector
+# end of Power Supplier
+
+CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y
+CONFIG_ESP_INTR_IN_IRAM=y
+# end of Hardware Settings
+
+#
+# ESP-MM: Memory Management Configurations
+#
+# end of ESP-MM: Memory Management Configurations
+
+#
+# ESP NETIF Adapter
+#
+CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
+# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set
+CONFIG_ESP_NETIF_TCPIP_LWIP=y
+# CONFIG_ESP_NETIF_LOOPBACK is not set
+CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y
+CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y
+# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set
+# CONFIG_ESP_NETIF_L2_TAP is not set
+# CONFIG_ESP_NETIF_BRIDGE_EN is not set
+# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set
+# end of ESP NETIF Adapter
+
+#
+# Partition API Configuration
+#
+# end of Partition API Configuration
+
+#
+# PHY
+#
+CONFIG_ESP_PHY_ENABLED=y
+CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP_PHY_MAX_TX_POWER=20
+# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set
+# CONFIG_ESP_PHY_ENABLE_USB is not set
+# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set
+CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
+# CONFIG_ESP_PHY_RF_CAL_NONE is not set
+# CONFIG_ESP_PHY_RF_CAL_FULL is not set
+CONFIG_ESP_PHY_CALIBRATION_MODE=0
+# CONFIG_ESP_PHY_IMPROVE_RX_11B is not set
+# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
+# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
+CONFIG_ESP_PHY_IRAM_OPT=y
+# end of PHY
+
+#
+# Power Management
+#
+CONFIG_PM_SLEEP_FUNC_IN_IRAM=y
+# CONFIG_PM_ENABLE is not set
+CONFIG_PM_SLP_IRAM_OPT=y
+# end of Power Management
+
+#
+# ESP Ringbuf
+#
+# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set
+# end of ESP Ringbuf
+
+#
+# ESP-ROM
+#
+CONFIG_ESP_ROM_PRINT_IN_IRAM=y
+# end of ESP-ROM
+
+#
+# ESP Security Specific
+#
+# end of ESP Security Specific
+
+#
+# ESP System Settings
+#
+# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_120=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=120
+
+#
+# Cache config
+#
+# CONFIG_ESP32C2_INSTRUCTION_CACHE_WRAP is not set
+# end of Cache config
+
+# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
+CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
+# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
+CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0
+CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y
+CONFIG_ESP_SYSTEM_NO_BACKTRACE=y
+# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set
+# CONFIG_ESP_SYSTEM_USE_FRAME_POINTER is not set
+
+#
+# Memory protection
+#
+CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y
+# end of Memory protection
+
+CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
+CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584
+CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y
+# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set
+CONFIG_ESP_MAIN_TASK_AFFINITY=0x0
+CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048
+CONFIG_ESP_CONSOLE_UART_DEFAULT=y
+# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set
+# CONFIG_ESP_CONSOLE_NONE is not set
+CONFIG_ESP_CONSOLE_UART=y
+CONFIG_ESP_CONSOLE_UART_NUM=0
+CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0
+CONFIG_ESP_CONSOLE_UART_BAUDRATE=74880
+CONFIG_ESP_INT_WDT=y
+CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
+CONFIG_ESP_TASK_WDT_EN=y
+CONFIG_ESP_TASK_WDT_USE_ESP_TIMER=y
+CONFIG_ESP_TASK_WDT_INIT=y
+# CONFIG_ESP_TASK_WDT_PANIC is not set
+CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
+CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
+# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
+CONFIG_ESP_DEBUG_OCDAWARE=y
+CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
+CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y
+CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y
+CONFIG_ESP_SYSTEM_HW_PC_RECORD=y
+# end of ESP System Settings
+
+#
+# IPC (Inter-Processor Call)
+#
+CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
+# end of IPC (Inter-Processor Call)
+
+#
+# ESP Timer (High Resolution Timer)
+#
+CONFIG_ESP_TIMER_IN_IRAM=y
+# CONFIG_ESP_TIMER_PROFILING is not set
+CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y
+CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y
+CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1
+# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set
+CONFIG_ESP_TIMER_TASK_AFFINITY=0x0
+CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD=y
+CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
+# end of ESP Timer (High Resolution Timer)
+
+#
+# Wi-Fi
+#
+CONFIG_ESP_WIFI_ENABLED=y
+CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y
+# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0
+CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5
+CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP_WIFI_TX_BA_WIN=6
+CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP_WIFI_RX_BA_WIN=6
+CONFIG_ESP_WIFI_NVS_ENABLED=y
+CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32
+CONFIG_ESP_WIFI_IRAM_OPT=y
+# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set
+CONFIG_ESP_WIFI_RX_IRAM_OPT=y
+CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP_WIFI_ENABLE_SAE_PK=y
+CONFIG_ESP_WIFI_ENABLE_SAE_H2E=y
+CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y
+CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y
+# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50
+# CONFIG_ESP_WIFI_BSS_MAX_IDLE_SUPPORT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10
+CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15
+# CONFIG_ESP_WIFI_FTM_ENABLE is not set
+CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y
+CONFIG_ESP_WIFI_GMAC_SUPPORT=y
+CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y
+# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
+CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=2
+CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y
+CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
+# CONFIG_ESP_WIFI_11KV_SUPPORT is not set
+# CONFIG_ESP_WIFI_MBO_SUPPORT is not set
+# CONFIG_ESP_WIFI_DPP_SUPPORT is not set
+# CONFIG_ESP_WIFI_11R_SUPPORT is not set
+# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set
+
+#
+# WPS Configuration Options
+#
+# CONFIG_ESP_WIFI_WPS_STRICT is not set
+# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set
+# end of WPS Configuration Options
+
+# CONFIG_ESP_WIFI_DEBUG_PRINT is not set
+# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set
+CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y
+CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER=y
+# end of Wi-Fi
+
+#
+# FreeRTOS
+#
+
+#
+# Kernel
+#
+# CONFIG_FREERTOS_SMP is not set
+CONFIG_FREERTOS_UNICORE=y
+CONFIG_FREERTOS_HZ=100
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set
+CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
+# CONFIG_FREERTOS_USE_IDLE_HOOK is not set
+# CONFIG_FREERTOS_USE_TICK_HOOK is not set
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
+# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set
+CONFIG_FREERTOS_USE_TIMERS=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
+# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
+CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1
+# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
+# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set
+# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
+# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set
+# end of Kernel
+
+#
+# Port
+#
+CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y
+# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
+CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
+# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
+# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set
+CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
+CONFIG_FREERTOS_ISR_STACKSIZE=1536
+CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y
+CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y
+CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y
+# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set
+CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y
+# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
+# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
+# end of Port
+
+#
+# Extra
+#
+# end of Extra
+
+CONFIG_FREERTOS_PORT=y
+CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
+CONFIG_FREERTOS_DEBUG_OCDAWARE=y
+CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
+CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
+CONFIG_FREERTOS_NUMBER_OF_CORES=1
+CONFIG_FREERTOS_IN_IRAM=y
+# end of FreeRTOS
+
+#
+# Hardware Abstraction Layer (HAL) and Low Level (LL)
+#
+CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y
+# CONFIG_HAL_ASSERTION_DISABLE is not set
+# CONFIG_HAL_ASSERTION_SILENT is not set
+# CONFIG_HAL_ASSERTION_ENABLE is not set
+CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
+CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y
+CONFIG_HAL_WDT_USE_ROM_IMPL=y
+# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
+
+#
+# Heap memory debugging
+#
+CONFIG_HEAP_POISONING_DISABLED=y
+# CONFIG_HEAP_POISONING_LIGHT is not set
+# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set
+CONFIG_HEAP_TRACING_OFF=y
+# CONFIG_HEAP_TRACING_STANDALONE is not set
+# CONFIG_HEAP_TRACING_TOHOST is not set
+# CONFIG_HEAP_USE_HOOKS is not set
+# CONFIG_HEAP_TASK_TRACKING is not set
+# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set
+CONFIG_HEAP_TLSF_USE_ROM_IMPL=y
+# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
+# end of Heap memory debugging
+
+#
+# Log
+#
+CONFIG_LOG_VERSION_1=y
+# CONFIG_LOG_VERSION_2 is not set
+CONFIG_LOG_VERSION=1
+
+#
+# Log Level
+#
+# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
+# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
+# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
+CONFIG_LOG_DEFAULT_LEVEL_INFO=y
+# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
+# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
+CONFIG_LOG_DEFAULT_LEVEL=3
+CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
+# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
+# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
+CONFIG_LOG_MAXIMUM_LEVEL=3
+
+#
+# Level Settings
+#
+# CONFIG_LOG_MASTER_LEVEL is not set
+CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
+# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
+# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y
+# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set
+CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
+# end of Level Settings
+# end of Log Level
+
+#
+# Format
+#
+# CONFIG_LOG_COLORS is not set
+CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
+# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
+# end of Format
+
+#
+# Settings
+#
+CONFIG_LOG_MODE_TEXT_EN=y
+CONFIG_LOG_MODE_TEXT=y
+# end of Settings
+
+CONFIG_LOG_IN_IRAM=y
+# end of Log
+
+#
+# LWIP
+#
+CONFIG_LWIP_ENABLE=y
+CONFIG_LWIP_LOCAL_HOSTNAME="espressif"
+CONFIG_LWIP_TCPIP_TASK_PRIO=18
+# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
+# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# CONFIG_LWIP_L2_TO_L3_COPY is not set
+# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
+# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set
+CONFIG_LWIP_TIMERS_ONDEMAND=y
+CONFIG_LWIP_ND6=y
+# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# CONFIG_LWIP_SO_RCVBUF is not set
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+CONFIG_LWIP_IP_DEFAULT_TTL=64
+CONFIG_LWIP_IP4_FRAG=y
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP4_REASSEMBLY is not set
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+CONFIG_LWIP_IP_REASS_MAX_PBUFS=10
+# CONFIG_LWIP_IP_FORWARD is not set
+# CONFIG_LWIP_STATS is not set
+CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
+CONFIG_LWIP_GARP_TMR_INTERVAL=60
+CONFIG_LWIP_ESP_MLDV6_REPORT=y
+CONFIG_LWIP_MLDV6_TMR_INTERVAL=40
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
+# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set
+# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
+CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
+
+#
+# DHCP server
+#
+CONFIG_LWIP_DHCPS=y
+CONFIG_LWIP_DHCPS_LEASE_UNIT=60
+CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
+CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
+CONFIG_LWIP_DHCPS_ADD_DNS=y
+# end of DHCP server
+
+# CONFIG_LWIP_AUTOIP is not set
+CONFIG_LWIP_IPV4=y
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+
+#
+# TCP
+#
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760
+CONFIG_LWIP_TCP_WND_DEFAULT=5760
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6
+CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_RTO_TIME=1500
+# end of TCP
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# end of UDP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5
+CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3
+CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10
+# CONFIG_LWIP_PPP_SUPPORT is not set
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+# CONFIG_LWIP_MULTICAST_PING is not set
+# CONFIG_LWIP_BROADCAST_PING is not set
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# SNTP
+#
+CONFIG_LWIP_SNTP_MAX_SERVERS=1
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000
+CONFIG_LWIP_SNTP_STARTUP_DELAY=y
+CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
+# end of SNTP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_MAX_HOST_IP=1
+CONFIG_LWIP_DNS_MAX_SERVERS=3
+# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
+# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
+# CONFIG_LWIP_USE_ESP_GETADDRINFO is not set
+# end of DNS
+
+CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
+CONFIG_LWIP_ESP_LWIP_ASSERT=y
+
+#
+# Hooks
+#
+# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set
+CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y
+# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set
+CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y
+# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set
+# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set
+CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y
+# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set
+# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set
+CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y
+# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set
+# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set
+CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_NONE=y
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_DEFAULT is not set
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_CUSTOM is not set
+CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set
+CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set
+# CONFIG_LWIP_HOOK_IP6_INPUT_NONE is not set
+CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT=y
+# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set
+# end of Hooks
+
+# CONFIG_LWIP_DEBUG is not set
+# end of LWIP
+
+#
+# mbedTLS
+#
+CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
+# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
+# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
+CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
+CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
+CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
+# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
+# CONFIG_MBEDTLS_DEBUG is not set
+
+#
+# mbedTLS v3.x related
+#
+# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set
+# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
+# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
+# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
+CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
+CONFIG_MBEDTLS_PKCS7_C=y
+# end of mbedTLS v3.x related
+
+#
+# Certificate Bundle
+#
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
+# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
+# end of Certificate Bundle
+
+# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set
+CONFIG_MBEDTLS_CMAC_C=y
+CONFIG_MBEDTLS_HARDWARE_SHA=y
+CONFIG_MBEDTLS_HARDWARE_ECC=y
+CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK=y
+CONFIG_MBEDTLS_ROM_MD5=y
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set
+CONFIG_MBEDTLS_HAVE_TIME=y
+# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
+# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
+CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
+CONFIG_MBEDTLS_SHA1_C=y
+CONFIG_MBEDTLS_SHA512_C=y
+# CONFIG_MBEDTLS_SHA3_C is not set
+CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
+# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
+# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set
+# CONFIG_MBEDTLS_TLS_DISABLED is not set
+CONFIG_MBEDTLS_TLS_SERVER=y
+CONFIG_MBEDTLS_TLS_CLIENT=y
+CONFIG_MBEDTLS_TLS_ENABLED=y
+
+#
+# TLS Key Exchange Methods
+#
+# CONFIG_MBEDTLS_PSK_MODES is not set
+CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y
+# end of TLS Key Exchange Methods
+
+CONFIG_MBEDTLS_SSL_RENEGOTIATION=y
+CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
+# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
+# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
+CONFIG_MBEDTLS_SSL_ALPN=y
+CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y
+CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y
+
+#
+# Symmetric Ciphers
+#
+CONFIG_MBEDTLS_AES_C=y
+# CONFIG_MBEDTLS_CAMELLIA_C is not set
+# CONFIG_MBEDTLS_DES_C is not set
+# CONFIG_MBEDTLS_BLOWFISH_C is not set
+# CONFIG_MBEDTLS_XTEA_C is not set
+CONFIG_MBEDTLS_CCM_C=y
+CONFIG_MBEDTLS_GCM_C=y
+# CONFIG_MBEDTLS_NIST_KW_C is not set
+# end of Symmetric Ciphers
+
+# CONFIG_MBEDTLS_RIPEMD160_C is not set
+
+#
+# Certificates
+#
+CONFIG_MBEDTLS_PEM_PARSE_C=y
+CONFIG_MBEDTLS_PEM_WRITE_C=y
+CONFIG_MBEDTLS_X509_CRL_PARSE_C=y
+CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
+# end of Certificates
+
+CONFIG_MBEDTLS_ECP_C=y
+CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y
+CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y
+# CONFIG_MBEDTLS_DHM_C is not set
+CONFIG_MBEDTLS_ECDH_C=y
+CONFIG_MBEDTLS_ECDSA_C=y
+# CONFIG_MBEDTLS_ECJPAKE_C is not set
+CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y
+CONFIG_MBEDTLS_ECP_NIST_OPTIM=y
+# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set
+# CONFIG_MBEDTLS_POLY1305_C is not set
+# CONFIG_MBEDTLS_CHACHA20_C is not set
+# CONFIG_MBEDTLS_HKDF_C is not set
+# CONFIG_MBEDTLS_THREADING_C is not set
+CONFIG_MBEDTLS_ERROR_STRINGS=y
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL_BOOTLOADER is not set
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL is not set
+CONFIG_MBEDTLS_FS_IO=y
+# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set
+# end of mbedTLS
+
+#
+# ESP-MQTT Configurations
+#
+CONFIG_MQTT_PROTOCOL_311=y
+# CONFIG_MQTT_PROTOCOL_5 is not set
+CONFIG_MQTT_TRANSPORT_SSL=y
+CONFIG_MQTT_TRANSPORT_WEBSOCKET=y
+CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y
+# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
+# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
+# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set
+# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set
+# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set
+# CONFIG_MQTT_CUSTOM_OUTBOX is not set
+# end of ESP-MQTT Configurations
+
+#
+# LibC
+#
+CONFIG_LIBC_NEWLIB=y
+CONFIG_LIBC_MISC_IN_IRAM=y
+CONFIG_LIBC_LOCKS_PLACE_IN_IRAM=y
+CONFIG_LIBC_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_LIBC_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_LIBC_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_LF is not set
+CONFIG_LIBC_STDIN_LINE_ENDING_CR=y
+CONFIG_LIBC_NEWLIB_NANO_FORMAT=y
+CONFIG_LIBC_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_LIBC_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_NONE is not set
+# CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS is not set
+# end of LibC
+
+#
+# NVS
+#
+# CONFIG_NVS_ASSERT_ERROR_CHECK is not set
+# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set
+# end of NVS
+
+#
+# OpenThread
+#
+# CONFIG_OPENTHREAD_ENABLED is not set
+
+#
+# OpenThread Spinel
+#
+# CONFIG_OPENTHREAD_SPINEL_ONLY is not set
+# end of OpenThread Spinel
+# end of OpenThread
+
+#
+# PThreads
+#
+CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_PTHREAD_STACK_MIN=768
+CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread"
+# end of PThreads
+
+#
+# MMU Config
+#
+CONFIG_MMU_PAGE_SIZE_32KB=y
+CONFIG_MMU_PAGE_MODE="32KB"
+CONFIG_MMU_PAGE_SIZE=0x8000
+# end of MMU Config
+
+#
+# Main Flash configuration
+#
+
+#
+# SPI Flash behavior when brownout
+#
+CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
+CONFIG_SPI_FLASH_BROWNOUT_RESET=y
+# end of SPI Flash behavior when brownout
+
+#
+# Optional and Experimental Features (READ DOCS FIRST)
+#
+
+#
+# Features here require specific hardware (READ DOCS FIRST!)
+#
+# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
+CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
+# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
+# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set
+CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM=y
+# end of Optional and Experimental Features (READ DOCS FIRST)
+# end of Main Flash configuration
+
+#
+# SPI Flash driver
+#
+# CONFIG_SPI_FLASH_VERIFY_WRITE is not set
+# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set
+CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y
+# CONFIG_SPI_FLASH_ROM_IMPL is not set
+CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set
+# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set
+CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
+CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20
+CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1
+CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
+# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set
+# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set
+# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set
+
+#
+# Auto-detect flash chips
+#
+CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y
+CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y
+# end of Auto-detect flash chips
+
+CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
+# end of SPI Flash driver
+
+#
+# TCP Transport
+#
+
+#
+# Websocket
+#
+CONFIG_WS_TRANSPORT=y
+CONFIG_WS_BUFFER_SIZE=1024
+# CONFIG_WS_DYNAMIC_BUFFER is not set
+# end of Websocket
+# end of TCP Transport
+
+#
+# Virtual file system
+#
+CONFIG_VFS_SUPPORT_IO=y
+CONFIG_VFS_SUPPORT_DIR=y
+CONFIG_VFS_SUPPORT_SELECT=y
+CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+# CONFIG_VFS_SELECT_IN_RAM is not set
+CONFIG_VFS_SUPPORT_TERMIOS=y
+CONFIG_VFS_MAX_COUNT=8
+
+#
+# Host File System I/O (Semihosting)
+#
+CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# end of Host File System I/O (Semihosting)
+
+CONFIG_VFS_INITIALIZE_DEV_NULL=y
+# end of Virtual file system
+# end of Component config
+
+# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set
+
+# Deprecated options for backward compatibility
+# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set
+# CONFIG_NO_BLOBS is not set
+# CONFIG_APP_ROLLBACK_ENABLE is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set
+CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y
+# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL=3
+# CONFIG_FLASH_ENCRYPTION_ENABLED is not set
+# CONFIG_FLASHMODE_QIO is not set
+# CONFIG_FLASHMODE_QOUT is not set
+CONFIG_FLASHMODE_DIO=y
+# CONFIG_FLASHMODE_DOUT is not set
+CONFIG_MONITOR_BAUD=74880
+CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
+CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y
+CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y
+# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set
+# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set
+CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
+# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
+CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_CXX_EXCEPTIONS is not set
+CONFIG_STACK_CHECK_NONE=y
+# CONFIG_STACK_CHECK_NORM is not set
+# CONFIG_STACK_CHECK_STRONG is not set
+# CONFIG_STACK_CHECK_ALL is not set
+# CONFIG_WARN_WRITE_STRINGS is not set
+# CONFIG_EXTERNAL_COEX_ENABLE is not set
+# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set
+# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
+# CONFIG_EVENT_LOOP_PROFILING is not set
+CONFIG_POST_EVENTS_FROM_ISR=y
+CONFIG_POST_EVENTS_FROM_IRAM_ISR=y
+# CONFIG_ESP_SYSTEM_PD_FLASH is not set
+CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y
+CONFIG_BROWNOUT_DET=y
+CONFIG_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_BROWNOUT_DET_LVL=7
+CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
+CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP32_PHY_MAX_TX_POWER=20
+# CONFIG_REDUCE_PHY_TX_POWER is not set
+# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set
+CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
+CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_MAIN_TASK_STACK_SIZE=3584
+CONFIG_CONSOLE_UART_DEFAULT=y
+# CONFIG_CONSOLE_UART_CUSTOM is not set
+# CONFIG_CONSOLE_UART_NONE is not set
+# CONFIG_ESP_CONSOLE_UART_NONE is not set
+CONFIG_CONSOLE_UART=y
+CONFIG_CONSOLE_UART_NUM=0
+CONFIG_CONSOLE_UART_BAUDRATE=74880
+CONFIG_INT_WDT=y
+CONFIG_INT_WDT_TIMEOUT_MS=300
+CONFIG_TASK_WDT=y
+CONFIG_ESP_TASK_WDT=y
+# CONFIG_TASK_WDT_PANIC is not set
+CONFIG_TASK_WDT_TIMEOUT_S=5
+CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set
+CONFIG_IPC_TASK_STACK_SIZE=1024
+CONFIG_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP32_WIFI_ENABLED=y
+CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP32_WIFI_TX_BA_WIN=6
+CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP32_WIFI_RX_BA_WIN=6
+CONFIG_ESP32_WIFI_NVS_ENABLED=y
+CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
+CONFIG_ESP32_WIFI_IRAM_OPT=y
+CONFIG_ESP32_WIFI_RX_IRAM_OPT=y
+CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y
+CONFIG_WPA_MBEDTLS_CRYPTO=y
+CONFIG_WPA_MBEDTLS_TLS_CLIENT=y
+# CONFIG_WPA_11KV_SUPPORT is not set
+# CONFIG_WPA_MBO_SUPPORT is not set
+# CONFIG_WPA_DPP_SUPPORT is not set
+# CONFIG_WPA_11R_SUPPORT is not set
+# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set
+# CONFIG_WPA_WPS_STRICT is not set
+# CONFIG_WPA_DEBUG_PRINT is not set
+# CONFIG_WPA_TESTING_OPTIONS is not set
+CONFIG_TIMER_TASK_PRIORITY=1
+CONFIG_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_TIMER_QUEUE_LENGTH=10
+# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set
+# CONFIG_HAL_ASSERTION_SILIENT is not set
+# CONFIG_L2_TO_L3_COPY is not set
+CONFIG_ESP_GRATUITOUS_ARP=y
+CONFIG_GARP_TMR_INTERVAL=60
+CONFIG_TCPIP_RECVMBOX_SIZE=32
+CONFIG_TCP_MAXRTX=12
+CONFIG_TCP_SYNMAXRTX=12
+CONFIG_TCP_MSS=1440
+CONFIG_TCP_MSL=60000
+CONFIG_TCP_SND_BUF_DEFAULT=5760
+CONFIG_TCP_WND_DEFAULT=5760
+CONFIG_TCP_RECVMBOX_SIZE=6
+CONFIG_TCP_QUEUE_OOSEQ=y
+CONFIG_TCP_OVERSIZE_MSS=y
+# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_TCP_OVERSIZE_DISABLE is not set
+CONFIG_UDP_RECVMBOX_SIZE=6
+CONFIG_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+# CONFIG_PPP_SUPPORT is not set
+CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set
+CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
+CONFIG_NEWLIB_NANO_FORMAT=y
+CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set
+CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_ESP32_PTHREAD_STACK_MIN=768
+CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
+CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set
+CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+CONFIG_SUPPORT_TERMIOS=y
+CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# End of deprecated options
diff --git a/sdkconfig.old b/sdkconfig.old
new file mode 100644 (file)
index 0000000..8804c14
--- /dev/null
@@ -0,0 +1,2021 @@
+#
+# Automatically generated file. DO NOT EDIT.
+# Espressif IoT Development Framework (ESP-IDF) 5.5.0 Project Configuration
+#
+CONFIG_SOC_ADC_SUPPORTED=y
+CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
+CONFIG_SOC_UART_SUPPORTED=y
+CONFIG_SOC_GDMA_SUPPORTED=y
+CONFIG_SOC_AHB_GDMA_SUPPORTED=y
+CONFIG_SOC_GPTIMER_SUPPORTED=y
+CONFIG_SOC_PHY_SUPPORTED=y
+CONFIG_SOC_BT_SUPPORTED=y
+CONFIG_SOC_WIFI_SUPPORTED=y
+CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y
+CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y
+CONFIG_SOC_EFUSE_CONSISTS_OF_ONE_KEY_BLOCK=y
+CONFIG_SOC_EFUSE_SUPPORTED=y
+CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y
+CONFIG_SOC_LEDC_SUPPORTED=y
+CONFIG_SOC_I2C_SUPPORTED=y
+CONFIG_SOC_GPSPI_SUPPORTED=y
+CONFIG_SOC_SHA_SUPPORTED=y
+CONFIG_SOC_ECC_SUPPORTED=y
+CONFIG_SOC_FLASH_ENC_SUPPORTED=y
+CONFIG_SOC_SECURE_BOOT_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_SUPPORTED=y
+CONFIG_SOC_BOD_SUPPORTED=y
+CONFIG_SOC_CLK_TREE_SUPPORTED=y
+CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y
+CONFIG_SOC_WDT_SUPPORTED=y
+CONFIG_SOC_SPI_FLASH_SUPPORTED=y
+CONFIG_SOC_RNG_SUPPORTED=y
+CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y
+CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
+CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y
+CONFIG_SOC_PM_SUPPORTED=y
+CONFIG_SOC_XTAL_SUPPORT_26M=y
+CONFIG_SOC_XTAL_SUPPORT_40M=y
+CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y
+CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y
+CONFIG_SOC_ADC_MONITOR_SUPPORTED=y
+CONFIG_SOC_ADC_PERIPH_NUM=1
+CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5
+CONFIG_SOC_ADC_ATTEN_NUM=4
+CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1
+CONFIG_SOC_ADC_PATT_LEN_MAX=8
+CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2
+CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611
+CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y
+CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y
+CONFIG_SOC_ADC_SHARED_POWER=y
+CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y
+CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y
+CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y
+CONFIG_SOC_CPU_CORES_NUM=1
+CONFIG_SOC_CPU_INTR_NUM=32
+CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y
+CONFIG_SOC_CPU_HAS_CSR_PC=y
+CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000
+CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y
+CONFIG_SOC_ECC_SUPPORT_POINT_VERIFY_QUIRK=y
+CONFIG_SOC_AHB_GDMA_VERSION=1
+CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1
+CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=1
+CONFIG_SOC_GPIO_PORT=1
+CONFIG_SOC_GPIO_PIN_COUNT=21
+CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y
+CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y
+CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y
+CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y
+CONFIG_SOC_GPIO_IN_RANGE_MAX=20
+CONFIG_SOC_GPIO_OUT_RANGE_MAX=20
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6
+CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000001FFFC0
+CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y
+CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3
+CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y
+CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y
+CONFIG_SOC_I2C_NUM=1
+CONFIG_SOC_HP_I2C_NUM=1
+CONFIG_SOC_I2C_FIFO_LEN=16
+CONFIG_SOC_I2C_CMD_REG_NUM=8
+CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y
+CONFIG_SOC_I2C_SUPPORT_XTAL=y
+CONFIG_SOC_I2C_SUPPORT_RTC=y
+CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y
+CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y
+CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y
+CONFIG_SOC_LEDC_TIMER_NUM=4
+CONFIG_SOC_LEDC_CHANNEL_NUM=6
+CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14
+CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y
+CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y
+CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1
+CONFIG_SOC_MMU_PERIPH_NUM=1
+CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
+CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
+CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128
+CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108
+CONFIG_SOC_RTCIO_PIN_COUNT=0
+CONFIG_SOC_SHA_SUPPORT_RESUME=y
+CONFIG_SOC_SHA_SUPPORT_SHA1=y
+CONFIG_SOC_SHA_SUPPORT_SHA224=y
+CONFIG_SOC_SHA_SUPPORT_SHA256=y
+CONFIG_SOC_SPI_PERIPH_NUM=2
+CONFIG_SOC_SPI_MAX_CS_NUM=6
+CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64
+CONFIG_SOC_SPI_SUPPORT_DDRCLK=y
+CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_CD_SIG=y
+CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y
+CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y
+CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F40M=y
+CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y
+CONFIG_SOC_SPI_SCT_SUPPORTED=y
+CONFIG_SOC_SPI_SCT_REG_NUM=14
+CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y
+CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA
+CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y
+CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y
+CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y
+CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y
+CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_60M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_30M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_15M_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_COUNTER_NUM=2
+CONFIG_SOC_SYSTIMER_ALARM_NUM=3
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20
+CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y
+CONFIG_SOC_SYSTIMER_INT_LEVEL=y
+CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y
+CONFIG_SOC_TIMER_GROUPS=1
+CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1
+CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54
+CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y
+CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=1
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16
+CONFIG_SOC_MWDT_SUPPORT_XTAL=y
+CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y
+CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y
+CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y
+CONFIG_SOC_SECURE_BOOT_V2_ECC=y
+CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=1
+CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128_DERIVED=y
+CONFIG_SOC_UART_NUM=2
+CONFIG_SOC_UART_HP_NUM=2
+CONFIG_SOC_UART_FIFO_LEN=128
+CONFIG_SOC_UART_BITRATE_MAX=2500000
+CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
+CONFIG_SOC_UART_SUPPORT_PLL_F40M_CLK=y
+CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
+CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
+CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
+CONFIG_SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE=y
+CONFIG_SOC_SUPPORT_COEXISTENCE=y
+CONFIG_SOC_COEX_HW_PTI=y
+CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
+CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21
+CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12
+CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y
+CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y
+CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y
+CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y
+CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
+CONFIG_SOC_CLK_OSC_SLOW_SUPPORTED=y
+CONFIG_SOC_CLK_LP_FAST_SUPPORT_XTAL_D2=y
+CONFIG_SOC_WIFI_HW_TSF=y
+CONFIG_SOC_WIFI_FTM_SUPPORT=y
+CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
+CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y
+CONFIG_SOC_BLE_SUPPORTED=y
+CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y
+CONFIG_SOC_BLE_50_SUPPORTED=y
+CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y
+CONFIG_SOC_BLUFI_SUPPORTED=y
+CONFIG_SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED=y
+CONFIG_SOC_PHY_IMPROVE_RX_11B=y
+CONFIG_SOC_PHY_COMBO_MODULE=y
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TOOLCHAIN="gcc"
+CONFIG_IDF_TOOLCHAIN_GCC=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32c2"
+CONFIG_IDF_INIT_VERSION="$IDF_INIT_VERSION"
+CONFIG_IDF_TARGET_ESP32C2=y
+CONFIG_IDF_FIRMWARE_CHIP_ID=0x000C
+
+#
+# Build type
+#
+CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
+# CONFIG_APP_BUILD_TYPE_RAM is not set
+CONFIG_APP_BUILD_GENERATE_BINARIES=y
+CONFIG_APP_BUILD_BOOTLOADER=y
+CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
+# CONFIG_APP_REPRODUCIBLE_BUILD is not set
+# CONFIG_APP_NO_BLOBS is not set
+# end of Build type
+
+#
+# Bootloader config
+#
+
+#
+# Bootloader manager
+#
+CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y
+CONFIG_BOOTLOADER_PROJECT_VER=1
+# end of Bootloader manager
+
+#
+# Application Rollback
+#
+# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
+# end of Application Rollback
+
+#
+# Bootloader Rollback
+#
+# end of Bootloader Rollback
+
+CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
+CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set
+
+#
+# Log
+#
+CONFIG_BOOTLOADER_LOG_VERSION_1=y
+CONFIG_BOOTLOADER_LOG_VERSION=1
+CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
+# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
+CONFIG_BOOTLOADER_LOG_LEVEL=0
+
+#
+# Format
+#
+# CONFIG_BOOTLOADER_LOG_COLORS is not set
+CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
+# end of Format
+
+#
+# Settings
+#
+CONFIG_BOOTLOADER_LOG_MODE_TEXT_EN=y
+CONFIG_BOOTLOADER_LOG_MODE_TEXT=y
+# end of Settings
+# end of Log
+
+#
+# Serial Flash Configurations
+#
+# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set
+CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
+# end of Serial Flash Configurations
+
+# CONFIG_BOOTLOADER_FACTORY_RESET is not set
+# CONFIG_BOOTLOADER_APP_TEST is not set
+CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y
+CONFIG_BOOTLOADER_WDT_ENABLE=y
+# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set
+CONFIG_BOOTLOADER_WDT_TIME_MS=9000
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
+# end of Bootloader config
+
+#
+# Security features
+#
+CONFIG_SECURE_BOOT_V2_ECC_SUPPORTED=y
+CONFIG_SECURE_BOOT_V2_PREFERRED=y
+# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
+# CONFIG_SECURE_BOOT is not set
+# CONFIG_SECURE_FLASH_ENC_ENABLED is not set
+CONFIG_SECURE_ROM_DL_MODE_ENABLED=y
+# end of Security features
+
+#
+# Application manager
+#
+CONFIG_APP_COMPILE_TIME_DATE=y
+# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
+# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
+# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
+CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9
+# end of Application manager
+
+CONFIG_ESP_ROM_HAS_CRC_LE=y
+CONFIG_ESP_ROM_HAS_CRC_BE=y
+CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y
+CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
+CONFIG_ESP_ROM_GET_CLK_FREQ=y
+CONFIG_ESP_ROM_HAS_RVFPLIB=y
+CONFIG_ESP_ROM_HAS_HAL_WDT=y
+CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y
+CONFIG_ESP_ROM_HAS_HEAP_TLSF=y
+CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y
+CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y
+CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH_MMAP=y
+CONFIG_ESP_ROM_HAS_NEWLIB=y
+CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y
+CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y
+CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y
+CONFIG_ESP_ROM_HAS_MBEDTLS_CRYPTO_LIB=y
+CONFIG_ESP_ROM_HAS_SW_FLOAT=y
+CONFIG_ESP_ROM_USB_OTG_NUM=-1
+CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1
+CONFIG_ESP_ROM_HAS_VERSION=y
+CONFIG_ESP_ROM_HAS_VPRINTF_FUNC=y
+CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
+CONFIG_ESP_ROM_CONSOLE_OUTPUT_SECONDARY=y
+CONFIG_ESP_ROM_HAS_SUBOPTIMAL_NEWLIB_ON_MISALIGNED_MEMORY=y
+
+#
+# Boot ROM Behavior
+#
+# CONFIG_BOOT_ROM_LOG_ALWAYS_ON is not set
+CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
+# end of Boot ROM Behavior
+
+#
+# Serial flasher config
+#
+# CONFIG_ESPTOOLPY_NO_STUB is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
+CONFIG_ESPTOOLPY_FLASHMODE_DIO=y
+# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set
+CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y
+CONFIG_ESPTOOLPY_FLASHMODE="dio"
+CONFIG_ESPTOOLPY_FLASHFREQ_60M=y
+# CONFIG_ESPTOOLPY_FLASHFREQ_30M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_15M is not set
+CONFIG_ESPTOOLPY_FLASHFREQ="60m"
+# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
+# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE="2MB"
+# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set
+CONFIG_ESPTOOLPY_BEFORE_RESET=y
+# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
+CONFIG_ESPTOOLPY_BEFORE="default_reset"
+CONFIG_ESPTOOLPY_AFTER_RESET=y
+# CONFIG_ESPTOOLPY_AFTER_NORESET is not set
+CONFIG_ESPTOOLPY_AFTER="hard_reset"
+CONFIG_ESPTOOLPY_MONITOR_BAUD=74880
+# end of Serial flasher config
+
+#
+# Partition Table
+#
+# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
+# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set
+CONFIG_PARTITION_TABLE_CUSTOM=y
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_OFFSET=0x8000
+CONFIG_PARTITION_TABLE_MD5=y
+# end of Partition Table
+
+#
+# Example Connection Configuration
+#
+CONFIG_ENV_GPIO_RANGE_MIN=0
+CONFIG_ENV_GPIO_RANGE_MAX=18
+CONFIG_ENV_GPIO_IN_RANGE_MAX=18
+CONFIG_ENV_GPIO_OUT_RANGE_MAX=18
+CONFIG_EXAMPLE_CONNECT_WIFI=y
+# CONFIG_EXAMPLE_WIFI_SSID_PWD_FROM_STDIN is not set
+CONFIG_EXAMPLE_PROVIDE_WIFI_CONSOLE_CMD=y
+CONFIG_EXAMPLE_WIFI_SSID="dxy"
+CONFIG_EXAMPLE_WIFI_PASSWORD="p3833058"
+CONFIG_EXAMPLE_WIFI_CONN_MAX_RETRY=5
+CONFIG_EXAMPLE_WIFI_SCAN_METHOD_FAST=y
+# CONFIG_EXAMPLE_WIFI_SCAN_METHOD_ALL_CHANNEL is not set
+
+#
+# WiFi Scan threshold
+#
+CONFIG_EXAMPLE_WIFI_SCAN_RSSI_THRESHOLD=-127
+CONFIG_EXAMPLE_WIFI_AUTH_OPEN=y
+# CONFIG_EXAMPLE_WIFI_AUTH_WEP is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_ENTERPRISE is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WAPI_PSK is not set
+# end of WiFi Scan threshold
+
+CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SIGNAL=y
+# CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SECURITY is not set
+# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set
+# CONFIG_EXAMPLE_CONNECT_PPP is not set
+CONFIG_EXAMPLE_CONNECT_IPV4=y
+# CONFIG_EXAMPLE_CONNECT_IPV6 is not set
+# end of Example Connection Configuration
+
+#
+# Compiler options
+#
+# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set
+CONFIG_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
+CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y
+# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set
+CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y
+CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set
+CONFIG_COMPILER_HIDE_PATHS_MACROS=y
+# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
+# CONFIG_COMPILER_CXX_RTTI is not set
+CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
+# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
+# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set
+# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
+# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set
+CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
+# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set
+# CONFIG_COMPILER_DUMP_RTL_FILES is not set
+CONFIG_COMPILER_RT_LIB_GCCLIB=y
+CONFIG_COMPILER_RT_LIB_NAME="gcc"
+CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y
+# CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE is not set
+# CONFIG_COMPILER_STATIC_ANALYZER is not set
+# end of Compiler options
+
+#
+# Component config
+#
+
+#
+# Bluetooth
+#
+CONFIG_BT_ENABLED=y
+# CONFIG_BT_BLUEDROID_ENABLED is not set
+CONFIG_BT_NIMBLE_ENABLED=y
+# CONFIG_BT_CONTROLLER_ONLY is not set
+CONFIG_BT_CONTROLLER_ENABLED=y
+# CONFIG_BT_CONTROLLER_DISABLED is not set
+
+#
+# NimBLE Options
+#
+CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y
+# CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set
+# CONFIG_BT_NIMBLE_LOG_LEVEL_NONE is not set
+# CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR is not set
+# CONFIG_BT_NIMBLE_LOG_LEVEL_WARNING is not set
+CONFIG_BT_NIMBLE_LOG_LEVEL_INFO=y
+# CONFIG_BT_NIMBLE_LOG_LEVEL_DEBUG is not set
+CONFIG_BT_NIMBLE_LOG_LEVEL=1
+CONFIG_BT_NIMBLE_MAX_CONNECTIONS=1
+CONFIG_BT_NIMBLE_MAX_BONDS=2
+CONFIG_BT_NIMBLE_MAX_CCCDS=2
+CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0
+CONFIG_BT_NIMBLE_PINNED_TO_CORE=0
+CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=4096
+# CONFIG_BT_NIMBLE_ROLE_CENTRAL is not set
+CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y
+CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y
+# CONFIG_BT_NIMBLE_ROLE_OBSERVER is not set
+CONFIG_BT_NIMBLE_GATT_SERVER=y
+# CONFIG_BT_NIMBLE_NVS_PERSIST is not set
+# CONFIG_BT_NIMBLE_SMP_ID_RESET is not set
+# CONFIG_BT_NIMBLE_SECURITY_ENABLE is not set
+CONFIG_BT_NIMBLE_PRINT_ERR_NAME=y
+# CONFIG_BT_NIMBLE_DEBUG is not set
+# CONFIG_BT_NIMBLE_DYNAMIC_SERVICE is not set
+CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME=""
+CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=30
+CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=261
+CONFIG_BT_NIMBLE_ATT_MAX_PREP_ENTRIES=16
+CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0
+
+#
+# Memory Settings
+#
+CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=12
+CONFIG_BT_NIMBLE_MSYS_1_BLOCK_SIZE=100
+CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=4
+CONFIG_BT_NIMBLE_MSYS_2_BLOCK_SIZE=320
+CONFIG_BT_NIMBLE_TRANSPORT_ACL_FROM_LL_COUNT=12
+CONFIG_BT_NIMBLE_TRANSPORT_ACL_SIZE=255
+CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=70
+CONFIG_BT_NIMBLE_TRANSPORT_EVT_COUNT=5
+CONFIG_BT_NIMBLE_TRANSPORT_EVT_DISCARD_COUNT=3
+CONFIG_BT_NIMBLE_L2CAP_COC_SDU_BUFF_COUNT=1
+# end of Memory Settings
+
+CONFIG_BT_NIMBLE_GATT_MAX_PROCS=4
+CONFIG_BT_NIMBLE_RPA_TIMEOUT=900
+# CONFIG_BT_NIMBLE_MESH is not set
+CONFIG_BT_NIMBLE_CRYPTO_STACK_MBEDTLS=y
+CONFIG_BT_NIMBLE_HS_STOP_TIMEOUT_MS=2000
+CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT=y
+CONFIG_BT_NIMBLE_MAX_CONN_REATTEMPT=3
+# CONFIG_BT_NIMBLE_HANDLE_REPEAT_PAIRING_DELETION is not set
+# CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT is not set
+# CONFIG_BT_NIMBLE_GATT_CACHING is not set
+# CONFIG_BT_NIMBLE_INCL_SVC_DISCOVERY is not set
+CONFIG_BT_NIMBLE_WHITELIST_SIZE=2
+# CONFIG_BT_NIMBLE_TEST_THROUGHPUT_TEST is not set
+# CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set
+CONFIG_BT_NIMBLE_USE_ESP_TIMER=y
+# CONFIG_BT_NIMBLE_BLE_GATT_BLOB_TRANSFER is not set
+
+#
+# BLE Services
+#
+# CONFIG_BT_NIMBLE_PROX_SERVICE is not set
+# CONFIG_BT_NIMBLE_ANS_SERVICE is not set
+# CONFIG_BT_NIMBLE_CTS_SERVICE is not set
+# CONFIG_BT_NIMBLE_HTP_SERVICE is not set
+# CONFIG_BT_NIMBLE_IPSS_SERVICE is not set
+CONFIG_BT_NIMBLE_TPS_SERVICE=y
+# CONFIG_BT_NIMBLE_IAS_SERVICE is not set
+# CONFIG_BT_NIMBLE_LLS_SERVICE is not set
+# CONFIG_BT_NIMBLE_SPS_SERVICE is not set
+# CONFIG_BT_NIMBLE_HR_SERVICE is not set
+# CONFIG_BT_NIMBLE_HID_SERVICE is not set
+# CONFIG_BT_NIMBLE_BAS_SERVICE is not set
+# CONFIG_BT_NIMBLE_DIS_SERVICE is not set
+CONFIG_BT_NIMBLE_GAP_SERVICE=y
+
+#
+# GAP Appearance write permissions
+#
+# CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE is not set
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM=0
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ENC=0
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHN=0
+CONFIG_BT_NIMBLE_SVC_GAP_APPEAR_WRITE_PERM_ATHR=0
+# end of GAP Appearance write permissions
+
+CONFIG_BT_NIMBLE_SVC_GAP_CAR_CHAR_NOT_SUPP=y
+# CONFIG_BT_NIMBLE_SVC_GAP_CAR_NOT_SUPP is not set
+# CONFIG_BT_NIMBLE_SVC_GAP_CAR_SUPP is not set
+CONFIG_BT_NIMBLE_SVC_GAP_CENT_ADDR_RESOLUTION=-1
+
+#
+# GAP device name write permissions
+#
+# CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE is not set
+# end of GAP device name write permissions
+
+#
+# PPCP settings
+#
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MAX_CONN_INTERVAL=0
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_MIN_CONN_INTERVAL=0
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SLAVE_LATENCY=0
+CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SUPERVISION_TMO=0
+# end of PPCP settings
+
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM=0
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_ENC=0
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHEN=0
+CONFIG_BT_NIMBLE_SVC_GAP_NAME_WRITE_PERM_AUTHOR=0
+# CONFIG_BT_NIMBLE_SVC_GAP_GATT_SECURITY_LEVEL is not set
+# CONFIG_BT_NIMBLE_SVC_GAP_RPA_ONLY is not set
+# end of BLE Services
+
+# CONFIG_BT_NIMBLE_VS_SUPPORT is not set
+# CONFIG_BT_NIMBLE_ENC_ADV_DATA is not set
+# CONFIG_BT_NIMBLE_HIGH_DUTY_ADV_ITVL is not set
+# CONFIG_BT_NIMBLE_HOST_QUEUE_CONG_CHECK is not set
+# CONFIG_BT_NIMBLE_GATTC_PROC_PREEMPTION_PROTECT is not set
+
+#
+# Host-controller Transport
+#
+CONFIG_UART_HW_FLOWCTRL_DISABLE=y
+# CONFIG_UART_HW_FLOWCTRL_CTS_RTS is not set
+CONFIG_BT_NIMBLE_HCI_UART_FLOW_CTRL=0
+CONFIG_BT_NIMBLE_HCI_UART_RTS_PIN=19
+CONFIG_BT_NIMBLE_HCI_UART_CTS_PIN=23
+# end of Host-controller Transport
+
+CONFIG_BT_NIMBLE_EATT_CHAN_NUM=0
+# CONFIG_BT_NIMBLE_SUBRATE is not set
+# end of NimBLE Options
+
+#
+# Controller Options
+#
+
+#
+# HCI Config
+#
+CONFIG_BT_LE_HCI_INTERFACE_USE_RAM=y
+# CONFIG_BT_LE_HCI_INTERFACE_USE_UART is not set
+# end of HCI Config
+
+CONFIG_BT_LE_CONTROLLER_NPL_OS_PORTING_SUPPORT=y
+CONFIG_BT_LE_CONTROLLER_TASK_STACK_SIZE=4096
+# CONFIG_BT_LE_CONTROLLER_LOG_ENABLED is not set
+CONFIG_BT_LE_LL_RESOLV_LIST_SIZE=4
+CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT=20
+CONFIG_BT_LE_LL_SCA=60
+# CONFIG_BT_LE_LL_PEER_SCA_SET_ENABLE is not set
+# CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
+CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
+CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
+# CONFIG_BT_LE_SLEEP_ENABLE is not set
+CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL=y
+# CONFIG_BT_LE_LP_CLK_SRC_DEFAULT is not set
+CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED=y
+# CONFIG_BT_LE_TX_CCA_ENABLED is not set
+# CONFIG_BT_LE_DTM_ENABLED is not set
+CONFIG_BT_LE_FEAT_LL_ENCRYPTION=y
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N24 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N21 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N18 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N15 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N12 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N9 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N6 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N3 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N0 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P3 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P6 is not set
+CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P9=y
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P12 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P15 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P18 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P20 is not set
+CONFIG_BT_LE_DFT_TX_POWER_LEVEL_DBM_EFF=9
+# CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY is not set
+# CONFIG_BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS is not set
+
+#
+# BLE disconnects when Instant Passed (0x28) occurs
+#
+# CONFIG_BT_LE_CTRL_LLCP_CONN_UPDATE is not set
+# CONFIG_BT_LE_CTRL_LLCP_CHAN_MAP_UPDATE is not set
+# CONFIG_BT_LE_CTRL_LLCP_PHY_UPDATE is not set
+# end of BLE disconnects when Instant Passed (0x28) occurs
+
+CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX=32
+# end of Controller Options
+
+# CONFIG_BT_RELEASE_IRAM is not set
+
+#
+# Common Options
+#
+CONFIG_BT_ALARM_MAX_NUM=50
+# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set
+# end of Common Options
+
+# CONFIG_BT_HCI_LOG_DEBUG_EN is not set
+# end of Bluetooth
+
+# CONFIG_BLE_MESH is not set
+
+#
+# Console Library
+#
+# CONFIG_CONSOLE_SORTED_HELP is not set
+# end of Console Library
+
+#
+# Driver Configurations
+#
+
+#
+# Legacy ADC Driver Configuration
+#
+# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
+
+#
+# Legacy ADC Calibration Configuration
+#
+# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set
+# end of Legacy ADC Calibration Configuration
+# end of Legacy ADC Driver Configuration
+
+#
+# Legacy Timer Group Driver Configurations
+#
+# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Timer Group Driver Configurations
+
+#
+# Legacy I2C Driver Configurations
+#
+# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy I2C Driver Configurations
+
+#
+# Legacy Temperature Sensor Driver Configurations
+#
+# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Temperature Sensor Driver Configurations
+# end of Driver Configurations
+
+#
+# eFuse Bit Manager
+#
+# CONFIG_EFUSE_CUSTOM_TABLE is not set
+# CONFIG_EFUSE_VIRTUAL is not set
+CONFIG_EFUSE_MAX_BLK_LEN=256
+# end of eFuse Bit Manager
+
+#
+# ESP-TLS
+#
+CONFIG_ESP_TLS_USING_MBEDTLS=y
+# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
+# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set
+# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
+# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
+# CONFIG_ESP_TLS_INSECURE is not set
+# end of ESP-TLS
+
+#
+# Wireless Coexistence
+#
+CONFIG_ESP_COEX_ENABLED=y
+CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y
+# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set
+# CONFIG_ESP_COEX_GPIO_DEBUG is not set
+# end of Wireless Coexistence
+
+#
+# Common ESP-related
+#
+CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
+# end of Common ESP-related
+
+#
+# ESP-Driver:GPIO Configurations
+#
+# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:GPIO Configurations
+
+#
+# ESP-Driver:GPTimer Configurations
+#
+# CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM is not set
+# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
+# CONFIG_GPTIMER_ISR_CACHE_SAFE is not set
+# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:GPTimer Configurations
+
+#
+# ESP-Driver:I2C Configurations
+#
+# CONFIG_I2C_ISR_IRAM_SAFE is not set
+# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
+# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
+# CONFIG_I2C_MASTER_ISR_HANDLER_IN_IRAM is not set
+# end of ESP-Driver:I2C Configurations
+
+#
+# ESP-Driver:LEDC Configurations
+#
+# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:LEDC Configurations
+
+#
+# ESP-Driver:SPI Configurations
+#
+# CONFIG_SPI_MASTER_ISR_IN_IRAM is not set
+# CONFIG_SPI_SLAVE_IN_IRAM is not set
+# CONFIG_SPI_SLAVE_ISR_IN_IRAM is not set
+# end of ESP-Driver:SPI Configurations
+
+#
+# ESP-Driver:Temperature Sensor Configurations
+#
+# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:Temperature Sensor Configurations
+
+#
+# ESP-Driver:UART Configurations
+#
+# end of ESP-Driver:UART Configurations
+
+#
+# ESP-Driver:UHCI Configurations
+#
+# CONFIG_UHCI_ISR_HANDLER_IN_IRAM is not set
+# CONFIG_UHCI_ISR_CACHE_SAFE is not set
+# CONFIG_UHCI_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:UHCI Configurations
+
+#
+# Ethernet
+#
+CONFIG_ETH_ENABLED=y
+CONFIG_ETH_USE_SPI_ETHERNET=y
+# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
+# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
+# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set
+# CONFIG_ETH_USE_OPENETH is not set
+# CONFIG_ETH_TRANSMIT_MUTEX is not set
+# end of Ethernet
+
+#
+# Event Loop Library
+#
+# CONFIG_ESP_EVENT_LOOP_PROFILING is not set
+CONFIG_ESP_EVENT_POST_FROM_ISR=y
+# CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR is not set
+# end of Event Loop Library
+
+#
+# GDB Stub
+#
+CONFIG_ESP_GDBSTUB_ENABLED=y
+# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set
+CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
+CONFIG_ESP_GDBSTUB_MAX_TASKS=32
+# end of GDB Stub
+
+#
+# ESP HTTP client
+#
+CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set
+CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000
+# end of ESP HTTP client
+
+#
+# ESP HTTPS OTA
+#
+# CONFIG_ESP_HTTPS_OTA_DECRYPT_CB is not set
+# CONFIG_ESP_HTTPS_OTA_ALLOW_HTTP is not set
+CONFIG_ESP_HTTPS_OTA_EVENT_POST_TIMEOUT=2000
+# end of ESP HTTPS OTA
+
+#
+# Hardware Settings
+#
+
+#
+# Chip revision
+#
+CONFIG_ESP32C2_REV_MIN_1=y
+# CONFIG_ESP32C2_REV_MIN_1_1 is not set
+# CONFIG_ESP32C2_REV_MIN_200 is not set
+CONFIG_ESP32C2_REV_MIN_FULL=100
+CONFIG_ESP_REV_MIN_FULL=100
+
+#
+# Maximum Supported ESP32-C2 Revision (Rev v2.99)
+#
+CONFIG_ESP32C2_REV_MAX_FULL=299
+CONFIG_ESP_REV_MAX_FULL=299
+CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
+CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
+
+#
+# Maximum Supported ESP32-C2 eFuse Block Revision (eFuse Block Rev v0.99)
+#
+# end of Chip revision
+
+#
+# MAC Config
+#
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_TWO is not set
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set
+# end of MAC Config
+
+#
+# Sleep Config
+#
+# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set
+CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y
+CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y
+CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
+CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0
+# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
+# CONFIG_ESP_SLEEP_DEBUG is not set
+CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
+# end of Sleep Config
+
+#
+# RTC Clock Config
+#
+CONFIG_RTC_CLK_SRC_INT_RC=y
+# CONFIG_RTC_CLK_SRC_EXT_OSC is not set
+# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set
+CONFIG_RTC_CLK_CAL_CYCLES=1024
+# end of RTC Clock Config
+
+#
+# Peripheral Control
+#
+# CONFIG_ESP_PERIPH_CTRL_FUNC_IN_IRAM is not set
+CONFIG_ESP_REGI2C_CTRL_FUNC_IN_IRAM=y
+# end of Peripheral Control
+
+#
+# GDMA Configurations
+#
+CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y
+CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y
+CONFIG_GDMA_OBJ_DRAM_SAFE=y
+# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set
+# CONFIG_GDMA_ISR_IRAM_SAFE is not set
+# end of GDMA Configurations
+
+#
+# Main XTAL Config
+#
+CONFIG_XTAL_FREQ_26=y
+# CONFIG_XTAL_FREQ_40 is not set
+CONFIG_XTAL_FREQ=26
+# end of Main XTAL Config
+
+#
+# Power Supplier
+#
+
+#
+# Brownout Detector
+#
+CONFIG_ESP_BROWNOUT_DET=y
+CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_ESP_BROWNOUT_DET_LVL=7
+CONFIG_ESP_BROWNOUT_USE_INTR=y
+# end of Brownout Detector
+# end of Power Supplier
+
+CONFIG_ESP_INTR_IN_IRAM=y
+# end of Hardware Settings
+
+#
+# ESP-MM: Memory Management Configurations
+#
+# end of ESP-MM: Memory Management Configurations
+
+#
+# ESP NETIF Adapter
+#
+CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
+# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set
+CONFIG_ESP_NETIF_TCPIP_LWIP=y
+# CONFIG_ESP_NETIF_LOOPBACK is not set
+CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y
+CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y
+# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set
+# CONFIG_ESP_NETIF_L2_TAP is not set
+# CONFIG_ESP_NETIF_BRIDGE_EN is not set
+# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set
+# end of ESP NETIF Adapter
+
+#
+# Partition API Configuration
+#
+# end of Partition API Configuration
+
+#
+# PHY
+#
+CONFIG_ESP_PHY_ENABLED=y
+CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP_PHY_MAX_TX_POWER=20
+# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set
+# CONFIG_ESP_PHY_ENABLE_USB is not set
+# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set
+CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
+# CONFIG_ESP_PHY_RF_CAL_NONE is not set
+# CONFIG_ESP_PHY_RF_CAL_FULL is not set
+CONFIG_ESP_PHY_CALIBRATION_MODE=0
+# CONFIG_ESP_PHY_IMPROVE_RX_11B is not set
+# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
+# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
+CONFIG_ESP_PHY_IRAM_OPT=y
+# end of PHY
+
+#
+# Power Management
+#
+# CONFIG_PM_SLEEP_FUNC_IN_IRAM is not set
+# CONFIG_PM_ENABLE is not set
+# CONFIG_PM_SLP_IRAM_OPT is not set
+# end of Power Management
+
+#
+# ESP Ringbuf
+#
+CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH=y
+CONFIG_RINGBUF_PLACE_ISR_FUNCTIONS_INTO_FLASH=y
+# end of ESP Ringbuf
+
+#
+# ESP-ROM
+#
+CONFIG_ESP_ROM_PRINT_IN_IRAM=y
+# end of ESP-ROM
+
+#
+# ESP Security Specific
+#
+# end of ESP Security Specific
+
+#
+# ESP System Settings
+#
+# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_120=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=120
+
+#
+# Cache config
+#
+# CONFIG_ESP32C2_INSTRUCTION_CACHE_WRAP is not set
+# end of Cache config
+
+# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
+CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
+# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
+# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
+CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0
+CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y
+CONFIG_ESP_SYSTEM_NO_BACKTRACE=y
+# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set
+# CONFIG_ESP_SYSTEM_USE_FRAME_POINTER is not set
+
+#
+# Memory protection
+#
+CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y
+# end of Memory protection
+
+CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=16
+CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_ESP_MAIN_TASK_STACK_SIZE=4096
+CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y
+# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set
+CONFIG_ESP_MAIN_TASK_AFFINITY=0x0
+CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048
+CONFIG_ESP_CONSOLE_UART_DEFAULT=y
+# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set
+# CONFIG_ESP_CONSOLE_NONE is not set
+CONFIG_ESP_CONSOLE_UART=y
+CONFIG_ESP_CONSOLE_UART_NUM=0
+CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0
+CONFIG_ESP_CONSOLE_UART_BAUDRATE=74880
+CONFIG_ESP_INT_WDT=y
+CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
+CONFIG_ESP_TASK_WDT_EN=y
+CONFIG_ESP_TASK_WDT_USE_ESP_TIMER=y
+CONFIG_ESP_TASK_WDT_INIT=y
+# CONFIG_ESP_TASK_WDT_PANIC is not set
+CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
+CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
+# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
+CONFIG_ESP_DEBUG_OCDAWARE=y
+CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
+CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y
+CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y
+CONFIG_ESP_SYSTEM_HW_PC_RECORD=y
+# end of ESP System Settings
+
+#
+# IPC (Inter-Processor Call)
+#
+CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
+# end of IPC (Inter-Processor Call)
+
+#
+# ESP Timer (High Resolution Timer)
+#
+CONFIG_ESP_TIMER_IN_IRAM=y
+# CONFIG_ESP_TIMER_PROFILING is not set
+CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y
+CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y
+CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1
+# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set
+CONFIG_ESP_TIMER_TASK_AFFINITY=0x0
+CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD=y
+CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
+# end of ESP Timer (High Resolution Timer)
+
+#
+# Wi-Fi
+#
+CONFIG_ESP_WIFI_ENABLED=y
+CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y
+# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0
+CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5
+CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP_WIFI_TX_BA_WIN=6
+CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP_WIFI_RX_BA_WIN=6
+CONFIG_ESP_WIFI_NVS_ENABLED=y
+CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32
+# CONFIG_ESP_WIFI_IRAM_OPT is not set
+# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set
+# CONFIG_ESP_WIFI_RX_IRAM_OPT is not set
+CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP_WIFI_ENABLE_SAE_PK=y
+CONFIG_ESP_WIFI_ENABLE_SAE_H2E=y
+CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y
+# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50
+# CONFIG_ESP_WIFI_BSS_MAX_IDLE_SUPPORT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10
+CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15
+# CONFIG_ESP_WIFI_FTM_ENABLE is not set
+CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y
+CONFIG_ESP_WIFI_GMAC_SUPPORT=y
+# CONFIG_ESP_WIFI_SOFTAP_SUPPORT is not set
+# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
+CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=2
+CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y
+CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
+# CONFIG_ESP_WIFI_11KV_SUPPORT is not set
+# CONFIG_ESP_WIFI_MBO_SUPPORT is not set
+# CONFIG_ESP_WIFI_DPP_SUPPORT is not set
+# CONFIG_ESP_WIFI_11R_SUPPORT is not set
+
+#
+# WPS Configuration Options
+#
+# CONFIG_ESP_WIFI_WPS_STRICT is not set
+# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set
+# end of WPS Configuration Options
+
+# CONFIG_ESP_WIFI_DEBUG_PRINT is not set
+# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set
+CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y
+CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER=y
+# end of Wi-Fi
+
+#
+# FreeRTOS
+#
+
+#
+# Kernel
+#
+# CONFIG_FREERTOS_SMP is not set
+CONFIG_FREERTOS_UNICORE=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set
+CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
+# CONFIG_FREERTOS_USE_IDLE_HOOK is not set
+# CONFIG_FREERTOS_USE_TICK_HOOK is not set
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
+# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set
+CONFIG_FREERTOS_USE_TIMERS=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
+# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
+CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1
+# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
+# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set
+# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
+# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set
+# end of Kernel
+
+#
+# Port
+#
+# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
+CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
+# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
+# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set
+CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
+CONFIG_FREERTOS_ISR_STACKSIZE=1536
+CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y
+CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y
+CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y
+# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set
+CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y
+CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH=y
+# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
+# end of Port
+
+#
+# Extra
+#
+# end of Extra
+
+CONFIG_FREERTOS_PORT=y
+CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
+CONFIG_FREERTOS_DEBUG_OCDAWARE=y
+CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
+CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
+CONFIG_FREERTOS_NUMBER_OF_CORES=1
+CONFIG_FREERTOS_IN_IRAM=y
+# end of FreeRTOS
+
+#
+# Hardware Abstraction Layer (HAL) and Low Level (LL)
+#
+CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y
+# CONFIG_HAL_ASSERTION_DISABLE is not set
+# CONFIG_HAL_ASSERTION_SILENT is not set
+# CONFIG_HAL_ASSERTION_ENABLE is not set
+CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
+CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y
+CONFIG_HAL_WDT_USE_ROM_IMPL=y
+# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
+
+#
+# Heap memory debugging
+#
+CONFIG_HEAP_POISONING_DISABLED=y
+# CONFIG_HEAP_POISONING_LIGHT is not set
+# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set
+CONFIG_HEAP_TRACING_OFF=y
+# CONFIG_HEAP_TRACING_STANDALONE is not set
+# CONFIG_HEAP_TRACING_TOHOST is not set
+# CONFIG_HEAP_USE_HOOKS is not set
+# CONFIG_HEAP_TASK_TRACKING is not set
+# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set
+CONFIG_HEAP_TLSF_USE_ROM_IMPL=y
+# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
+# end of Heap memory debugging
+
+#
+# Log
+#
+CONFIG_LOG_VERSION_1=y
+# CONFIG_LOG_VERSION_2 is not set
+CONFIG_LOG_VERSION=1
+
+#
+# Log Level
+#
+# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
+# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
+# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
+CONFIG_LOG_DEFAULT_LEVEL_INFO=y
+# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
+# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
+CONFIG_LOG_DEFAULT_LEVEL=3
+CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
+# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
+# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
+CONFIG_LOG_MAXIMUM_LEVEL=3
+
+#
+# Level Settings
+#
+# CONFIG_LOG_MASTER_LEVEL is not set
+CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
+# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
+# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y
+# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set
+CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
+# end of Level Settings
+# end of Log Level
+
+#
+# Format
+#
+# CONFIG_LOG_COLORS is not set
+CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
+# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
+# end of Format
+
+#
+# Settings
+#
+CONFIG_LOG_MODE_TEXT_EN=y
+CONFIG_LOG_MODE_TEXT=y
+# end of Settings
+
+CONFIG_LOG_IN_IRAM=y
+# end of Log
+
+#
+# LWIP
+#
+CONFIG_LWIP_ENABLE=y
+CONFIG_LWIP_LOCAL_HOSTNAME="PXN-Device"
+CONFIG_LWIP_TCPIP_TASK_PRIO=18
+# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
+# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# CONFIG_LWIP_L2_TO_L3_COPY is not set
+# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
+# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set
+CONFIG_LWIP_TIMERS_ONDEMAND=y
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# CONFIG_LWIP_SO_RCVBUF is not set
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+CONFIG_LWIP_IP_DEFAULT_TTL=64
+CONFIG_LWIP_IP4_FRAG=y
+# CONFIG_LWIP_IP4_REASSEMBLY is not set
+CONFIG_LWIP_IP_REASS_MAX_PBUFS=10
+# CONFIG_LWIP_IP_FORWARD is not set
+# CONFIG_LWIP_STATS is not set
+CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
+CONFIG_LWIP_GARP_TMR_INTERVAL=60
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
+# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set
+# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
+CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
+
+#
+# DHCP server
+#
+CONFIG_LWIP_DHCPS=y
+CONFIG_LWIP_DHCPS_LEASE_UNIT=60
+CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
+CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
+CONFIG_LWIP_DHCPS_ADD_DNS=y
+# end of DHCP server
+
+# CONFIG_LWIP_AUTOIP is not set
+CONFIG_LWIP_IPV4=y
+# CONFIG_LWIP_IPV6 is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+
+#
+# TCP
+#
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760
+CONFIG_LWIP_TCP_WND_DEFAULT=5760
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6
+CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_RTO_TIME=1500
+# end of TCP
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# end of UDP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+# CONFIG_LWIP_PPP_SUPPORT is not set
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+# CONFIG_LWIP_MULTICAST_PING is not set
+# CONFIG_LWIP_BROADCAST_PING is not set
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# SNTP
+#
+CONFIG_LWIP_SNTP_MAX_SERVERS=1
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000
+CONFIG_LWIP_SNTP_STARTUP_DELAY=y
+CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
+# end of SNTP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_MAX_HOST_IP=1
+CONFIG_LWIP_DNS_MAX_SERVERS=3
+# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
+# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
+# end of DNS
+
+CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
+CONFIG_LWIP_ESP_LWIP_ASSERT=y
+
+#
+# Hooks
+#
+# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set
+CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y
+# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set
+CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_NONE=y
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_DEFAULT is not set
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_CUSTOM is not set
+CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set
+CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set
+# end of Hooks
+
+# CONFIG_LWIP_DEBUG is not set
+# end of LWIP
+
+#
+# mbedTLS
+#
+CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
+# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
+# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
+CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
+CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
+CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
+CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
+CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y
+CONFIG_MBEDTLS_DYNAMIC_FREE_CA_CERT=y
+# CONFIG_MBEDTLS_DEBUG is not set
+
+#
+# mbedTLS v3.x related
+#
+# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
+# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
+# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
+# CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE is not set
+CONFIG_MBEDTLS_PKCS7_C=y
+# end of mbedTLS v3.x related
+
+#
+# Certificate Bundle
+#
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
+# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
+# end of Certificate Bundle
+
+# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set
+CONFIG_MBEDTLS_CMAC_C=y
+CONFIG_MBEDTLS_HARDWARE_SHA=y
+CONFIG_MBEDTLS_HARDWARE_ECC=y
+CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK=y
+CONFIG_MBEDTLS_ROM_MD5=y
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set
+CONFIG_MBEDTLS_HAVE_TIME=y
+# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
+# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
+CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
+CONFIG_MBEDTLS_SHA1_C=y
+CONFIG_MBEDTLS_SHA512_C=y
+# CONFIG_MBEDTLS_SHA3_C is not set
+# CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT is not set
+# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
+CONFIG_MBEDTLS_TLS_CLIENT_ONLY=y
+# CONFIG_MBEDTLS_TLS_DISABLED is not set
+CONFIG_MBEDTLS_TLS_CLIENT=y
+CONFIG_MBEDTLS_TLS_ENABLED=y
+
+#
+# TLS Key Exchange Methods
+#
+# CONFIG_MBEDTLS_PSK_MODES is not set
+CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y
+# end of TLS Key Exchange Methods
+
+CONFIG_MBEDTLS_SSL_RENEGOTIATION=y
+CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
+# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
+# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
+CONFIG_MBEDTLS_SSL_ALPN=y
+CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y
+CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y
+
+#
+# Symmetric Ciphers
+#
+CONFIG_MBEDTLS_AES_C=y
+# CONFIG_MBEDTLS_CAMELLIA_C is not set
+# CONFIG_MBEDTLS_DES_C is not set
+# CONFIG_MBEDTLS_BLOWFISH_C is not set
+# CONFIG_MBEDTLS_XTEA_C is not set
+CONFIG_MBEDTLS_CCM_C=y
+CONFIG_MBEDTLS_GCM_C=y
+# CONFIG_MBEDTLS_NIST_KW_C is not set
+# end of Symmetric Ciphers
+
+# CONFIG_MBEDTLS_RIPEMD160_C is not set
+
+#
+# Certificates
+#
+CONFIG_MBEDTLS_PEM_PARSE_C=y
+CONFIG_MBEDTLS_PEM_WRITE_C=y
+CONFIG_MBEDTLS_X509_CRL_PARSE_C=y
+CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
+# end of Certificates
+
+CONFIG_MBEDTLS_ECP_C=y
+CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y
+CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y
+# CONFIG_MBEDTLS_DHM_C is not set
+CONFIG_MBEDTLS_ECDH_C=y
+CONFIG_MBEDTLS_ECDSA_C=y
+# CONFIG_MBEDTLS_ECJPAKE_C is not set
+CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y
+CONFIG_MBEDTLS_ECP_NIST_OPTIM=y
+# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set
+# CONFIG_MBEDTLS_POLY1305_C is not set
+# CONFIG_MBEDTLS_CHACHA20_C is not set
+# CONFIG_MBEDTLS_HKDF_C is not set
+# CONFIG_MBEDTLS_THREADING_C is not set
+CONFIG_MBEDTLS_ERROR_STRINGS=y
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL_BOOTLOADER is not set
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL is not set
+CONFIG_MBEDTLS_FS_IO=y
+# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set
+# end of mbedTLS
+
+#
+# ESP-MQTT Configurations
+#
+CONFIG_MQTT_PROTOCOL_311=y
+# CONFIG_MQTT_PROTOCOL_5 is not set
+CONFIG_MQTT_TRANSPORT_SSL=y
+# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
+# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
+# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set
+# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set
+# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set
+# CONFIG_MQTT_CUSTOM_OUTBOX is not set
+# end of ESP-MQTT Configurations
+
+#
+# LibC
+#
+CONFIG_LIBC_NEWLIB=y
+CONFIG_LIBC_MISC_IN_IRAM=y
+CONFIG_LIBC_LOCKS_PLACE_IN_IRAM=y
+CONFIG_LIBC_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_LIBC_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_LIBC_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_LF is not set
+CONFIG_LIBC_STDIN_LINE_ENDING_CR=y
+CONFIG_LIBC_NEWLIB_NANO_FORMAT=y
+CONFIG_LIBC_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_LIBC_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_NONE is not set
+# CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS is not set
+# end of LibC
+
+#
+# NVS
+#
+# CONFIG_NVS_ASSERT_ERROR_CHECK is not set
+# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set
+# end of NVS
+
+#
+# OpenThread
+#
+# CONFIG_OPENTHREAD_ENABLED is not set
+
+#
+# OpenThread Spinel
+#
+# CONFIG_OPENTHREAD_SPINEL_ONLY is not set
+# end of OpenThread Spinel
+# end of OpenThread
+
+#
+# PThreads
+#
+CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_PTHREAD_STACK_MIN=768
+CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread"
+# end of PThreads
+
+#
+# MMU Config
+#
+CONFIG_MMU_PAGE_SIZE_32KB=y
+CONFIG_MMU_PAGE_MODE="32KB"
+CONFIG_MMU_PAGE_SIZE=0x8000
+# end of MMU Config
+
+#
+# Main Flash configuration
+#
+
+#
+# SPI Flash behavior when brownout
+#
+CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
+CONFIG_SPI_FLASH_BROWNOUT_RESET=y
+# end of SPI Flash behavior when brownout
+
+#
+# Optional and Experimental Features (READ DOCS FIRST)
+#
+
+#
+# Features here require specific hardware (READ DOCS FIRST!)
+#
+# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
+CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
+# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
+# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set
+CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM=y
+# end of Optional and Experimental Features (READ DOCS FIRST)
+# end of Main Flash configuration
+
+#
+# SPI Flash driver
+#
+# CONFIG_SPI_FLASH_VERIFY_WRITE is not set
+# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set
+CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y
+# CONFIG_SPI_FLASH_ROM_IMPL is not set
+CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set
+# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set
+CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
+CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20
+CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1
+CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
+# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set
+# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set
+# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set
+
+#
+# Auto-detect flash chips
+#
+CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y
+CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y
+# end of Auto-detect flash chips
+
+CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
+# end of SPI Flash driver
+
+#
+# TCP Transport
+#
+
+#
+# Websocket
+#
+# CONFIG_WS_TRANSPORT is not set
+# end of Websocket
+# end of TCP Transport
+
+#
+# Virtual file system
+#
+CONFIG_VFS_SUPPORT_IO=y
+CONFIG_VFS_SUPPORT_DIR=y
+CONFIG_VFS_SUPPORT_SELECT=y
+CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+# CONFIG_VFS_SELECT_IN_RAM is not set
+CONFIG_VFS_SUPPORT_TERMIOS=y
+CONFIG_VFS_MAX_COUNT=8
+
+#
+# Host File System I/O (Semihosting)
+#
+CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# end of Host File System I/O (Semihosting)
+
+CONFIG_VFS_INITIALIZE_DEV_NULL=y
+# end of Virtual file system
+# end of Component config
+
+# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set
+
+# Deprecated options for backward compatibility
+# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set
+# CONFIG_NO_BLOBS is not set
+# CONFIG_APP_ROLLBACK_ENABLE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL_NONE=y
+# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL=0
+# CONFIG_FLASH_ENCRYPTION_ENABLED is not set
+# CONFIG_FLASHMODE_QIO is not set
+# CONFIG_FLASHMODE_QOUT is not set
+CONFIG_FLASHMODE_DIO=y
+# CONFIG_FLASHMODE_DOUT is not set
+CONFIG_MONITOR_BAUD=74880
+# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set
+# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
+# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
+CONFIG_OPTIMIZATION_LEVEL_RELEASE=y
+CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
+CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
+# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
+CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_CXX_EXCEPTIONS is not set
+CONFIG_STACK_CHECK_NONE=y
+# CONFIG_STACK_CHECK_NORM is not set
+# CONFIG_STACK_CHECK_STRONG is not set
+# CONFIG_STACK_CHECK_ALL is not set
+# CONFIG_WARN_WRITE_STRINGS is not set
+# CONFIG_BLUEDROID_ENABLED is not set
+CONFIG_NIMBLE_ENABLED=y
+CONFIG_NIMBLE_MEM_ALLOC_MODE_INTERNAL=y
+# CONFIG_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set
+CONFIG_NIMBLE_MAX_CONNECTIONS=1
+CONFIG_NIMBLE_MAX_BONDS=2
+CONFIG_NIMBLE_MAX_CCCDS=2
+CONFIG_NIMBLE_L2CAP_COC_MAX_NUM=0
+CONFIG_NIMBLE_PINNED_TO_CORE=0
+CONFIG_NIMBLE_TASK_STACK_SIZE=4096
+CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096
+# CONFIG_NIMBLE_ROLE_CENTRAL is not set
+CONFIG_NIMBLE_ROLE_PERIPHERAL=y
+CONFIG_NIMBLE_ROLE_BROADCASTER=y
+# CONFIG_NIMBLE_ROLE_OBSERVER is not set
+# CONFIG_NIMBLE_NVS_PERSIST is not set
+# CONFIG_NIMBLE_DEBUG is not set
+CONFIG_NIMBLE_SVC_GAP_DEVICE_NAME=""
+CONFIG_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=30
+CONFIG_NIMBLE_ATT_PREFERRED_MTU=261
+CONFIG_NIMBLE_SVC_GAP_APPEARANCE=0
+CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12
+CONFIG_BT_NIMBLE_ACL_BUF_COUNT=12
+CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255
+CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70
+CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=5
+CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=3
+CONFIG_NIMBLE_RPA_TIMEOUT=900
+# CONFIG_NIMBLE_MESH is not set
+CONFIG_NIMBLE_CRYPTO_STACK_MBEDTLS=y
+# CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
+CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
+CONFIG_SW_COEXIST_ENABLE=y
+CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y
+CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y
+# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
+# CONFIG_EVENT_LOOP_PROFILING is not set
+CONFIG_POST_EVENTS_FROM_ISR=y
+# CONFIG_POST_EVENTS_FROM_IRAM_ISR is not set
+CONFIG_GDBSTUB_SUPPORT_TASKS=y
+CONFIG_GDBSTUB_MAX_TASKS=32
+# CONFIG_OTA_ALLOW_HTTP is not set
+# CONFIG_ESP_SYSTEM_PD_FLASH is not set
+# CONFIG_PERIPH_CTRL_FUNC_IN_IRAM is not set
+CONFIG_BROWNOUT_DET=y
+CONFIG_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_BROWNOUT_DET_LVL=7
+CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
+CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP32_PHY_MAX_TX_POWER=20
+# CONFIG_REDUCE_PHY_TX_POWER is not set
+# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set
+CONFIG_SYSTEM_EVENT_QUEUE_SIZE=16
+CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_MAIN_TASK_STACK_SIZE=4096
+CONFIG_CONSOLE_UART_DEFAULT=y
+# CONFIG_CONSOLE_UART_CUSTOM is not set
+# CONFIG_CONSOLE_UART_NONE is not set
+# CONFIG_ESP_CONSOLE_UART_NONE is not set
+CONFIG_CONSOLE_UART=y
+CONFIG_CONSOLE_UART_NUM=0
+CONFIG_CONSOLE_UART_BAUDRATE=74880
+CONFIG_INT_WDT=y
+CONFIG_INT_WDT_TIMEOUT_MS=300
+CONFIG_TASK_WDT=y
+CONFIG_ESP_TASK_WDT=y
+# CONFIG_TASK_WDT_PANIC is not set
+CONFIG_TASK_WDT_TIMEOUT_S=5
+CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set
+CONFIG_IPC_TASK_STACK_SIZE=1024
+CONFIG_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP32_WIFI_ENABLED=y
+CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP32_WIFI_TX_BA_WIN=6
+CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP32_WIFI_RX_BA_WIN=6
+CONFIG_ESP32_WIFI_NVS_ENABLED=y
+CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
+# CONFIG_ESP32_WIFI_IRAM_OPT is not set
+# CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set
+CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y
+CONFIG_WPA_MBEDTLS_CRYPTO=y
+CONFIG_WPA_MBEDTLS_TLS_CLIENT=y
+# CONFIG_WPA_11KV_SUPPORT is not set
+# CONFIG_WPA_MBO_SUPPORT is not set
+# CONFIG_WPA_DPP_SUPPORT is not set
+# CONFIG_WPA_11R_SUPPORT is not set
+# CONFIG_WPA_WPS_STRICT is not set
+# CONFIG_WPA_DEBUG_PRINT is not set
+# CONFIG_WPA_TESTING_OPTIONS is not set
+CONFIG_TIMER_TASK_PRIORITY=1
+CONFIG_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_TIMER_QUEUE_LENGTH=10
+# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set
+# CONFIG_HAL_ASSERTION_SILIENT is not set
+# CONFIG_L2_TO_L3_COPY is not set
+CONFIG_ESP_GRATUITOUS_ARP=y
+CONFIG_GARP_TMR_INTERVAL=60
+CONFIG_TCPIP_RECVMBOX_SIZE=32
+CONFIG_TCP_MAXRTX=12
+CONFIG_TCP_SYNMAXRTX=12
+CONFIG_TCP_MSS=1440
+CONFIG_TCP_MSL=60000
+CONFIG_TCP_SND_BUF_DEFAULT=5760
+CONFIG_TCP_WND_DEFAULT=5760
+CONFIG_TCP_RECVMBOX_SIZE=6
+CONFIG_TCP_QUEUE_OOSEQ=y
+CONFIG_TCP_OVERSIZE_MSS=y
+# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_TCP_OVERSIZE_DISABLE is not set
+CONFIG_UDP_RECVMBOX_SIZE=6
+CONFIG_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+# CONFIG_PPP_SUPPORT is not set
+CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set
+CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
+CONFIG_NEWLIB_NANO_FORMAT=y
+CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set
+CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_ESP32_PTHREAD_STACK_MIN=768
+CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
+CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set
+CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+CONFIG_SUPPORT_TERMIOS=y
+CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# End of deprecated options
diff --git a/sdkconfig_BLE5.0 b/sdkconfig_BLE5.0
new file mode 100644 (file)
index 0000000..5821293
--- /dev/null
@@ -0,0 +1,2340 @@
+#
+# Automatically generated file. DO NOT EDIT.
+# Espressif IoT Development Framework (ESP-IDF) 5.5.0 Project Configuration
+#
+CONFIG_SOC_ADC_SUPPORTED=y
+CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y
+CONFIG_SOC_UART_SUPPORTED=y
+CONFIG_SOC_GDMA_SUPPORTED=y
+CONFIG_SOC_AHB_GDMA_SUPPORTED=y
+CONFIG_SOC_GPTIMER_SUPPORTED=y
+CONFIG_SOC_PHY_SUPPORTED=y
+CONFIG_SOC_BT_SUPPORTED=y
+CONFIG_SOC_WIFI_SUPPORTED=y
+CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y
+CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y
+CONFIG_SOC_EFUSE_CONSISTS_OF_ONE_KEY_BLOCK=y
+CONFIG_SOC_EFUSE_SUPPORTED=y
+CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y
+CONFIG_SOC_LEDC_SUPPORTED=y
+CONFIG_SOC_I2C_SUPPORTED=y
+CONFIG_SOC_GPSPI_SUPPORTED=y
+CONFIG_SOC_SHA_SUPPORTED=y
+CONFIG_SOC_ECC_SUPPORTED=y
+CONFIG_SOC_FLASH_ENC_SUPPORTED=y
+CONFIG_SOC_SECURE_BOOT_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_SUPPORTED=y
+CONFIG_SOC_BOD_SUPPORTED=y
+CONFIG_SOC_CLK_TREE_SUPPORTED=y
+CONFIG_SOC_ASSIST_DEBUG_SUPPORTED=y
+CONFIG_SOC_WDT_SUPPORTED=y
+CONFIG_SOC_SPI_FLASH_SUPPORTED=y
+CONFIG_SOC_RNG_SUPPORTED=y
+CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y
+CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y
+CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y
+CONFIG_SOC_PM_SUPPORTED=y
+CONFIG_SOC_XTAL_SUPPORT_26M=y
+CONFIG_SOC_XTAL_SUPPORT_40M=y
+CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y
+CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y
+CONFIG_SOC_ADC_MONITOR_SUPPORTED=y
+CONFIG_SOC_ADC_PERIPH_NUM=1
+CONFIG_SOC_ADC_MAX_CHANNEL_NUM=5
+CONFIG_SOC_ADC_ATTEN_NUM=4
+CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=1
+CONFIG_SOC_ADC_PATT_LEN_MAX=8
+CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2
+CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333
+CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611
+CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12
+CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12
+CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y
+CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y
+CONFIG_SOC_ADC_SHARED_POWER=y
+CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y
+CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y
+CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y
+CONFIG_SOC_CPU_CORES_NUM=1
+CONFIG_SOC_CPU_INTR_NUM=32
+CONFIG_SOC_CPU_HAS_FLEXIBLE_INTC=y
+CONFIG_SOC_CPU_HAS_CSR_PC=y
+CONFIG_SOC_CPU_BREAKPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINTS_NUM=2
+CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=0x80000000
+CONFIG_SOC_CPU_IDRAM_SPLIT_USING_PMP=y
+CONFIG_SOC_ECC_SUPPORT_POINT_VERIFY_QUIRK=y
+CONFIG_SOC_AHB_GDMA_VERSION=1
+CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1
+CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=1
+CONFIG_SOC_GPIO_PORT=1
+CONFIG_SOC_GPIO_PIN_COUNT=21
+CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y
+CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y
+CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y
+CONFIG_SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP=y
+CONFIG_SOC_GPIO_IN_RANGE_MAX=20
+CONFIG_SOC_GPIO_OUT_RANGE_MAX=20
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK=0
+CONFIG_SOC_GPIO_DEEP_SLEEP_WAKE_SUPPORTED_PIN_CNT=6
+CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x00000000001FFFC0
+CONFIG_SOC_GPIO_CLOCKOUT_BY_GPIO_MATRIX=y
+CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3
+CONFIG_SOC_GPIO_SUPPORT_HOLD_IO_IN_DSLP=y
+CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8
+CONFIG_SOC_DEDIC_PERIPH_ALWAYS_ENABLE=y
+CONFIG_SOC_I2C_NUM=1
+CONFIG_SOC_HP_I2C_NUM=1
+CONFIG_SOC_I2C_FIFO_LEN=16
+CONFIG_SOC_I2C_CMD_REG_NUM=8
+CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y
+CONFIG_SOC_I2C_SUPPORT_XTAL=y
+CONFIG_SOC_I2C_SUPPORT_RTC=y
+CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y
+CONFIG_SOC_LEDC_SUPPORT_PLL_DIV_CLOCK=y
+CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y
+CONFIG_SOC_LEDC_TIMER_NUM=4
+CONFIG_SOC_LEDC_CHANNEL_NUM=6
+CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14
+CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y
+CONFIG_SOC_MMU_PAGE_SIZE_CONFIGURABLE=y
+CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1
+CONFIG_SOC_MMU_PERIPH_NUM=1
+CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
+CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
+CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128
+CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=108
+CONFIG_SOC_RTCIO_PIN_COUNT=0
+CONFIG_SOC_SHA_SUPPORT_RESUME=y
+CONFIG_SOC_SHA_SUPPORT_SHA1=y
+CONFIG_SOC_SHA_SUPPORT_SHA224=y
+CONFIG_SOC_SHA_SUPPORT_SHA256=y
+CONFIG_SOC_SPI_PERIPH_NUM=2
+CONFIG_SOC_SPI_MAX_CS_NUM=6
+CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64
+CONFIG_SOC_SPI_SUPPORT_DDRCLK=y
+CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_CD_SIG=y
+CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y
+CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y
+CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y
+CONFIG_SOC_SPI_SUPPORT_CLK_PLL_F40M=y
+CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y
+CONFIG_SOC_SPI_SCT_SUPPORTED=y
+CONFIG_SOC_SPI_SCT_REG_NUM=14
+CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y
+CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA
+CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y
+CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y
+CONFIG_SOC_SPI_MEM_SUPPORT_IDLE_INTR=y
+CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y
+CONFIG_SOC_SPI_MEM_SUPPORT_CHECK_SUS=y
+CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_60M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_30M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y
+CONFIG_SOC_MEMSPI_SRC_FREQ_15M_SUPPORTED=y
+CONFIG_SOC_SYSTIMER_COUNTER_NUM=2
+CONFIG_SOC_SYSTIMER_ALARM_NUM=3
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20
+CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y
+CONFIG_SOC_SYSTIMER_INT_LEVEL=y
+CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y
+CONFIG_SOC_TIMER_GROUPS=1
+CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=1
+CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54
+CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y
+CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=1
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_LO=32
+CONFIG_SOC_LP_TIMER_BIT_WIDTH_HI=16
+CONFIG_SOC_MWDT_SUPPORT_XTAL=y
+CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y
+CONFIG_SOC_EFUSE_DIS_PAD_JTAG=y
+CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y
+CONFIG_SOC_SECURE_BOOT_V2_ECC=y
+CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=1
+CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128=y
+CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128_DERIVED=y
+CONFIG_SOC_UART_NUM=2
+CONFIG_SOC_UART_HP_NUM=2
+CONFIG_SOC_UART_FIFO_LEN=128
+CONFIG_SOC_UART_BITRATE_MAX=2500000
+CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y
+CONFIG_SOC_UART_SUPPORT_PLL_F40M_CLK=y
+CONFIG_SOC_UART_SUPPORT_RTC_CLK=y
+CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y
+CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y
+CONFIG_SOC_UART_WAKEUP_SUPPORT_ACTIVE_THRESH_MODE=y
+CONFIG_SOC_SUPPORT_COEXISTENCE=y
+CONFIG_SOC_COEX_HW_PTI=y
+CONFIG_SOC_EXTERNAL_COEX_ADVANCE=y
+CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21
+CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12
+CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y
+CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y
+CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y
+CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y
+CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y
+CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y
+CONFIG_SOC_CLK_OSC_SLOW_SUPPORTED=y
+CONFIG_SOC_CLK_LP_FAST_SUPPORT_XTAL_D2=y
+CONFIG_SOC_WIFI_HW_TSF=y
+CONFIG_SOC_WIFI_FTM_SUPPORT=y
+CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
+CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y
+CONFIG_SOC_BLE_SUPPORTED=y
+CONFIG_SOC_ESP_NIMBLE_CONTROLLER=y
+CONFIG_SOC_BLE_50_SUPPORTED=y
+CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y
+CONFIG_SOC_BLUFI_SUPPORTED=y
+CONFIG_SOC_BLE_PERIODIC_ADV_ENH_SUPPORTED=y
+CONFIG_SOC_PHY_IMPROVE_RX_11B=y
+CONFIG_SOC_PHY_COMBO_MODULE=y
+CONFIG_IDF_CMAKE=y
+CONFIG_IDF_TOOLCHAIN="gcc"
+CONFIG_IDF_TOOLCHAIN_GCC=y
+CONFIG_IDF_TARGET_ARCH_RISCV=y
+CONFIG_IDF_TARGET_ARCH="riscv"
+CONFIG_IDF_TARGET="esp32c2"
+CONFIG_IDF_INIT_VERSION="5.5.0"
+CONFIG_IDF_TARGET_ESP32C2=y
+CONFIG_IDF_FIRMWARE_CHIP_ID=0x000C
+
+#
+# Build type
+#
+CONFIG_APP_BUILD_TYPE_APP_2NDBOOT=y
+# CONFIG_APP_BUILD_TYPE_RAM is not set
+CONFIG_APP_BUILD_GENERATE_BINARIES=y
+CONFIG_APP_BUILD_BOOTLOADER=y
+CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y
+# CONFIG_APP_REPRODUCIBLE_BUILD is not set
+# CONFIG_APP_NO_BLOBS is not set
+# end of Build type
+
+#
+# Bootloader config
+#
+
+#
+# Bootloader manager
+#
+CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y
+CONFIG_BOOTLOADER_PROJECT_VER=1
+# end of Bootloader manager
+
+#
+# Application Rollback
+#
+# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set
+# end of Application Rollback
+
+#
+# Bootloader Rollback
+#
+# end of Bootloader Rollback
+
+CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0
+CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_NONE is not set
+
+#
+# Log
+#
+CONFIG_BOOTLOADER_LOG_VERSION_1=y
+CONFIG_BOOTLOADER_LOG_VERSION=1
+CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
+# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
+# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
+CONFIG_BOOTLOADER_LOG_LEVEL=0
+
+#
+# Format
+#
+# CONFIG_BOOTLOADER_LOG_COLORS is not set
+CONFIG_BOOTLOADER_LOG_TIMESTAMP_SOURCE_CPU_TICKS=y
+# end of Format
+
+#
+# Settings
+#
+CONFIG_BOOTLOADER_LOG_MODE_TEXT_EN=y
+CONFIG_BOOTLOADER_LOG_MODE_TEXT=y
+# end of Settings
+# end of Log
+
+#
+# Serial Flash Configurations
+#
+# CONFIG_BOOTLOADER_FLASH_DC_AWARE is not set
+CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y
+# end of Serial Flash Configurations
+
+# CONFIG_BOOTLOADER_FACTORY_RESET is not set
+# CONFIG_BOOTLOADER_APP_TEST is not set
+CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y
+CONFIG_BOOTLOADER_WDT_ENABLE=y
+# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set
+CONFIG_BOOTLOADER_WDT_TIME_MS=9000
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set
+# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set
+# end of Bootloader config
+
+#
+# Security features
+#
+CONFIG_SECURE_BOOT_V2_ECC_SUPPORTED=y
+CONFIG_SECURE_BOOT_V2_PREFERRED=y
+# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set
+# CONFIG_SECURE_BOOT is not set
+# CONFIG_SECURE_FLASH_ENC_ENABLED is not set
+CONFIG_SECURE_ROM_DL_MODE_ENABLED=y
+# end of Security features
+
+#
+# Application manager
+#
+CONFIG_APP_COMPILE_TIME_DATE=y
+# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set
+# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set
+# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set
+CONFIG_APP_RETRIEVE_LEN_ELF_SHA=9
+# end of Application manager
+
+CONFIG_ESP_ROM_HAS_CRC_LE=y
+CONFIG_ESP_ROM_HAS_CRC_BE=y
+CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y
+CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
+CONFIG_ESP_ROM_GET_CLK_FREQ=y
+CONFIG_ESP_ROM_HAS_RVFPLIB=y
+CONFIG_ESP_ROM_HAS_HAL_WDT=y
+CONFIG_ESP_ROM_HAS_HAL_SYSTIMER=y
+CONFIG_ESP_ROM_HAS_HEAP_TLSF=y
+CONFIG_ESP_ROM_TLSF_CHECK_PATCH=y
+CONFIG_ESP_ROM_MULTI_HEAP_WALK_PATCH=y
+CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH=y
+CONFIG_ESP_ROM_HAS_SPI_FLASH_MMAP=y
+CONFIG_ESP_ROM_HAS_NEWLIB=y
+CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y
+CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y
+CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y
+CONFIG_ESP_ROM_HAS_MBEDTLS_CRYPTO_LIB=y
+CONFIG_ESP_ROM_HAS_SW_FLOAT=y
+CONFIG_ESP_ROM_USB_OTG_NUM=-1
+CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=-1
+CONFIG_ESP_ROM_HAS_VERSION=y
+CONFIG_ESP_ROM_HAS_VPRINTF_FUNC=y
+CONFIG_ESP_ROM_HAS_OUTPUT_PUTC_FUNC=y
+CONFIG_ESP_ROM_CONSOLE_OUTPUT_SECONDARY=y
+CONFIG_ESP_ROM_HAS_SUBOPTIMAL_NEWLIB_ON_MISALIGNED_MEMORY=y
+
+#
+# Boot ROM Behavior
+#
+# CONFIG_BOOT_ROM_LOG_ALWAYS_ON is not set
+CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set
+# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
+# end of Boot ROM Behavior
+
+#
+# Serial flasher config
+#
+# CONFIG_ESPTOOLPY_NO_STUB is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QIO is not set
+# CONFIG_ESPTOOLPY_FLASHMODE_QOUT is not set
+CONFIG_ESPTOOLPY_FLASHMODE_DIO=y
+# CONFIG_ESPTOOLPY_FLASHMODE_DOUT is not set
+CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR=y
+CONFIG_ESPTOOLPY_FLASHMODE="dio"
+CONFIG_ESPTOOLPY_FLASHFREQ_60M=y
+# CONFIG_ESPTOOLPY_FLASHFREQ_30M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set
+# CONFIG_ESPTOOLPY_FLASHFREQ_15M is not set
+CONFIG_ESPTOOLPY_FLASHFREQ="60m"
+# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE_2MB=y
+# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
+# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
+CONFIG_ESPTOOLPY_FLASHSIZE="2MB"
+# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set
+CONFIG_ESPTOOLPY_BEFORE_RESET=y
+# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set
+CONFIG_ESPTOOLPY_BEFORE="default_reset"
+CONFIG_ESPTOOLPY_AFTER_RESET=y
+# CONFIG_ESPTOOLPY_AFTER_NORESET is not set
+CONFIG_ESPTOOLPY_AFTER="hard_reset"
+CONFIG_ESPTOOLPY_MONITOR_BAUD=74880
+# end of Serial flasher config
+
+#
+# Partition Table
+#
+# CONFIG_PARTITION_TABLE_SINGLE_APP is not set
+# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA is not set
+# CONFIG_PARTITION_TABLE_TWO_OTA_LARGE is not set
+CONFIG_PARTITION_TABLE_CUSTOM=y
+CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_FILENAME="partitions.csv"
+CONFIG_PARTITION_TABLE_OFFSET=0x8000
+CONFIG_PARTITION_TABLE_MD5=y
+# end of Partition Table
+
+#
+# Example Connection Configuration
+#
+CONFIG_ENV_GPIO_RANGE_MIN=0
+CONFIG_ENV_GPIO_RANGE_MAX=18
+CONFIG_ENV_GPIO_IN_RANGE_MAX=18
+CONFIG_ENV_GPIO_OUT_RANGE_MAX=18
+CONFIG_EXAMPLE_CONNECT_WIFI=y
+# CONFIG_EXAMPLE_WIFI_SSID_PWD_FROM_STDIN is not set
+CONFIG_EXAMPLE_PROVIDE_WIFI_CONSOLE_CMD=y
+CONFIG_EXAMPLE_WIFI_SSID="PXN"
+CONFIG_EXAMPLE_WIFI_PASSWORD="PXN998877"
+CONFIG_EXAMPLE_WIFI_CONN_MAX_RETRY=5
+CONFIG_EXAMPLE_WIFI_SCAN_METHOD_FAST=y
+# CONFIG_EXAMPLE_WIFI_SCAN_METHOD_ALL_CHANNEL is not set
+
+#
+# WiFi Scan threshold
+#
+CONFIG_EXAMPLE_WIFI_SCAN_RSSI_THRESHOLD=-127
+CONFIG_EXAMPLE_WIFI_AUTH_OPEN=y
+# CONFIG_EXAMPLE_WIFI_AUTH_WEP is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA_WPA2_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_ENTERPRISE is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WPA2_WPA3_PSK is not set
+# CONFIG_EXAMPLE_WIFI_AUTH_WAPI_PSK is not set
+# end of WiFi Scan threshold
+
+CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SIGNAL=y
+# CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SECURITY is not set
+# CONFIG_EXAMPLE_CONNECT_ETHERNET is not set
+# CONFIG_EXAMPLE_CONNECT_PPP is not set
+CONFIG_EXAMPLE_CONNECT_IPV4=y
+CONFIG_EXAMPLE_CONNECT_IPV6=y
+CONFIG_EXAMPLE_CONNECT_IPV6_PREF_LOCAL_LINK=y
+# CONFIG_EXAMPLE_CONNECT_IPV6_PREF_GLOBAL is not set
+# CONFIG_EXAMPLE_CONNECT_IPV6_PREF_SITE_LOCAL is not set
+# CONFIG_EXAMPLE_CONNECT_IPV6_PREF_UNIQUE_LOCAL is not set
+# end of Example Connection Configuration
+
+#
+# Compiler options
+#
+# CONFIG_COMPILER_OPTIMIZATION_DEBUG is not set
+CONFIG_COMPILER_OPTIMIZATION_SIZE=y
+# CONFIG_COMPILER_OPTIMIZATION_PERF is not set
+# CONFIG_COMPILER_OPTIMIZATION_NONE is not set
+CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE is not set
+CONFIG_COMPILER_ASSERT_NDEBUG_EVALUATE=y
+# CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB is not set
+CONFIG_COMPILER_FLOAT_LIB_FROM_RVFPLIB=y
+CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set
+CONFIG_COMPILER_HIDE_PATHS_MACROS=y
+# CONFIG_COMPILER_CXX_EXCEPTIONS is not set
+# CONFIG_COMPILER_CXX_RTTI is not set
+CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y
+# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set
+# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set
+# CONFIG_COMPILER_NO_MERGE_CONSTANTS is not set
+# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set
+# CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS is not set
+CONFIG_COMPILER_DISABLE_DEFAULT_ERRORS=y
+# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set
+# CONFIG_COMPILER_DISABLE_GCC14_WARNINGS is not set
+# CONFIG_COMPILER_DUMP_RTL_FILES is not set
+CONFIG_COMPILER_RT_LIB_GCCLIB=y
+CONFIG_COMPILER_RT_LIB_NAME="gcc"
+CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING=y
+# CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE is not set
+# CONFIG_COMPILER_STATIC_ANALYZER is not set
+# end of Compiler options
+
+#
+# Component config
+#
+
+#
+# !!! MINIMAL_BUILD is enabled !!!
+#
+
+#
+# Only common components and those transitively required by the main component are listed
+#
+
+#
+# If a component configuration is missing, please add it to the main component's requirements
+#
+
+#
+# Bluetooth
+#
+CONFIG_BT_ENABLED=y
+CONFIG_BT_BLUEDROID_ENABLED=y
+# CONFIG_BT_NIMBLE_ENABLED is not set
+# CONFIG_BT_CONTROLLER_ONLY is not set
+CONFIG_BT_CONTROLLER_ENABLED=y
+# CONFIG_BT_CONTROLLER_DISABLED is not set
+
+#
+# Bluedroid Options
+#
+CONFIG_BT_BTC_TASK_STACK_SIZE=3072
+CONFIG_BT_BLUEDROID_PINNED_TO_CORE=0
+CONFIG_BT_BTU_TASK_STACK_SIZE=4352
+# CONFIG_BT_BLUEDROID_MEM_DEBUG is not set
+CONFIG_BT_BLUEDROID_ESP_COEX_VSC=y
+CONFIG_BT_BLE_ENABLED=y
+CONFIG_BT_GATTS_ENABLE=y
+# CONFIG_BT_GATTS_PPCP_CHAR_GAP is not set
+# CONFIG_BT_BLE_BLUFI_ENABLE is not set
+CONFIG_BT_GATT_MAX_SR_PROFILES=8
+CONFIG_BT_GATT_MAX_SR_ATTRIBUTES=100
+# CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set
+CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_AUTO=y
+CONFIG_BT_GATTS_SEND_SERVICE_CHANGE_MODE=0
+# CONFIG_BT_GATTS_ROBUST_CACHING_ENABLED is not set
+# CONFIG_BT_GATTS_DEVICE_NAME_WRITABLE is not set
+# CONFIG_BT_GATTS_APPEARANCE_WRITABLE is not set
+CONFIG_BT_GATTC_ENABLE=y
+CONFIG_BT_GATTC_MAX_CACHE_CHAR=40
+CONFIG_BT_GATTC_NOTIF_REG_MAX=5
+# CONFIG_BT_GATTC_CACHE_NVS_FLASH is not set
+CONFIG_BT_GATTC_CONNECT_RETRY_COUNT=3
+CONFIG_BT_BLE_ESTAB_LINK_CONN_TOUT=30
+CONFIG_BT_BLE_SMP_ENABLE=y
+# CONFIG_BT_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set
+# CONFIG_BT_BLE_SMP_ID_RESET_ENABLE is not set
+CONFIG_BT_BLE_SMP_BOND_NVS_FLASH=y
+# CONFIG_BT_STACK_NO_LOG is not set
+
+#
+# BT DEBUG LOG LEVEL
+#
+# CONFIG_BT_LOG_HCI_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_HCI_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_HCI_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_HCI_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_HCI_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_HCI_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_HCI_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_HCI_TRACE_LEVEL=2
+# CONFIG_BT_LOG_BTM_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_BTM_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_BTM_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_BTM_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_BTM_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_BTM_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_BTM_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_BTM_TRACE_LEVEL=2
+# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_L2CAP_TRACE_LEVEL=2
+# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL=2
+# CONFIG_BT_LOG_SDP_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_SDP_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_SDP_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_SDP_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_SDP_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_SDP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_SDP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_SDP_TRACE_LEVEL=2
+# CONFIG_BT_LOG_GAP_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_GAP_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_GAP_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_GAP_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_GAP_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_GAP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_GAP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_GAP_TRACE_LEVEL=2
+# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_BNEP_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_BNEP_TRACE_LEVEL=2
+# CONFIG_BT_LOG_PAN_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_PAN_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_PAN_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_PAN_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_PAN_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_PAN_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_PAN_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_PAN_TRACE_LEVEL=2
+# CONFIG_BT_LOG_A2D_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_A2D_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_A2D_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_A2D_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_A2D_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_A2D_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_A2D_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_A2D_TRACE_LEVEL=2
+# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_AVDT_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_AVDT_TRACE_LEVEL=2
+# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_AVCT_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_AVCT_TRACE_LEVEL=2
+# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_AVRC_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_AVRC_TRACE_LEVEL=2
+# CONFIG_BT_LOG_MCA_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_MCA_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_MCA_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_MCA_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_MCA_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_MCA_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_MCA_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_MCA_TRACE_LEVEL=2
+# CONFIG_BT_LOG_HID_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_HID_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_HID_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_HID_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_HID_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_HID_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_HID_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_HID_TRACE_LEVEL=2
+# CONFIG_BT_LOG_APPL_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_APPL_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_APPL_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_APPL_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_APPL_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_APPL_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_APPL_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_APPL_TRACE_LEVEL=2
+# CONFIG_BT_LOG_GATT_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_GATT_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_GATT_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_GATT_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_GATT_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_GATT_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_GATT_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_GATT_TRACE_LEVEL=2
+# CONFIG_BT_LOG_SMP_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_SMP_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_SMP_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_SMP_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_SMP_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_SMP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_SMP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_SMP_TRACE_LEVEL=2
+# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_BTIF_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_BTIF_TRACE_LEVEL=2
+# CONFIG_BT_LOG_BTC_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_BTC_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_BTC_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_BTC_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_BTC_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_BTC_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_BTC_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_BTC_TRACE_LEVEL=2
+# CONFIG_BT_LOG_OSI_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_OSI_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_OSI_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_OSI_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_OSI_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_OSI_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_OSI_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_OSI_TRACE_LEVEL=2
+# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_NONE is not set
+# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_ERROR is not set
+CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_WARNING=y
+# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_API is not set
+# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_EVENT is not set
+# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2
+# end of BT DEBUG LOG LEVEL
+
+CONFIG_BT_ACL_CONNECTIONS=4
+CONFIG_BT_MULTI_CONNECTION_ENBALE=y
+# CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST is not set
+# CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY is not set
+CONFIG_BT_SMP_ENABLE=y
+CONFIG_BT_SMP_MAX_BONDS=15
+# CONFIG_BT_BLE_ACT_SCAN_REP_ADV_SCAN is not set
+CONFIG_BT_MAX_DEVICE_NAME_LEN=32
+CONFIG_BT_BLE_RPA_TIMEOUT=900
+CONFIG_BT_BLE_50_FEATURES_SUPPORTED=y
+CONFIG_BT_BLE_50_EXTEND_ADV_EN=y
+CONFIG_BT_BLE_50_PERIODIC_ADV_EN=y
+CONFIG_BT_BLE_50_EXTEND_SCAN_EN=y
+CONFIG_BT_BLE_50_EXTEND_SYNC_EN=y
+CONFIG_BT_BLE_50_DTM_TEST_EN=y
+# CONFIG_BT_BLE_FEAT_PERIODIC_ADV_SYNC_TRANSFER is not set
+# CONFIG_BT_BLE_FEAT_PERIODIC_ADV_ENH is not set
+# CONFIG_BT_BLE_FEAT_CREATE_SYNC_ENH is not set
+# CONFIG_BT_BLE_42_FEATURES_SUPPORTED is not set
+CONFIG_BT_BLE_VENDOR_HCI_EN=y
+# CONFIG_BT_BLE_HIGH_DUTY_ADV_INTERVAL is not set
+# CONFIG_BT_ABORT_WHEN_ALLOCATION_FAILS is not set
+# end of Bluedroid Options
+
+#
+# Controller Options
+#
+
+#
+# HCI Config
+#
+CONFIG_BT_LE_HCI_INTERFACE_USE_RAM=y
+# CONFIG_BT_LE_HCI_INTERFACE_USE_UART is not set
+# end of HCI Config
+
+CONFIG_BT_LE_CONTROLLER_NPL_OS_PORTING_SUPPORT=y
+CONFIG_BT_LE_50_FEATURE_SUPPORT=y
+CONFIG_BT_LE_LL_CFG_FEAT_LE_2M_PHY=y
+CONFIG_BT_LE_LL_CFG_FEAT_LE_CODED_PHY=y
+CONFIG_BT_LE_EXT_ADV=y
+CONFIG_BT_LE_MAX_EXT_ADV_INSTANCES=1
+CONFIG_BT_LE_EXT_ADV_MAX_SIZE=1650
+CONFIG_BT_LE_ENABLE_PERIODIC_ADV=y
+CONFIG_BT_LE_PERIODIC_ADV_SYNC_TRANSFER=y
+CONFIG_BT_LE_EXT_SCAN=y
+CONFIG_BT_LE_ENABLE_PERIODIC_SYNC=y
+CONFIG_BT_LE_MAX_PERIODIC_SYNCS=1
+CONFIG_BT_LE_MAX_PERIODIC_ADVERTISER_LIST=5
+
+#
+# Memory Settings
+#
+CONFIG_BT_LE_MSYS_1_BLOCK_COUNT=12
+CONFIG_BT_LE_MSYS_1_BLOCK_SIZE=256
+CONFIG_BT_LE_MSYS_2_BLOCK_COUNT=24
+CONFIG_BT_LE_MSYS_2_BLOCK_SIZE=320
+CONFIG_BT_LE_ACL_BUF_COUNT=10
+CONFIG_BT_LE_ACL_BUF_SIZE=517
+CONFIG_BT_LE_HCI_EVT_BUF_SIZE=257
+CONFIG_BT_LE_HCI_EVT_HI_BUF_COUNT=30
+CONFIG_BT_LE_HCI_EVT_LO_BUF_COUNT=8
+# end of Memory Settings
+
+CONFIG_BT_LE_CONTROLLER_TASK_STACK_SIZE=4096
+# CONFIG_BT_LE_CONTROLLER_LOG_ENABLED is not set
+CONFIG_BT_LE_LL_RESOLV_LIST_SIZE=4
+CONFIG_BT_LE_SECURITY_ENABLE=y
+CONFIG_BT_LE_SM_LEGACY=y
+CONFIG_BT_LE_SM_SC=y
+# CONFIG_BT_LE_SM_SC_DEBUG_KEYS is not set
+CONFIG_BT_LE_LL_CFG_FEAT_LE_ENCRYPTION=y
+CONFIG_BT_LE_CRYPTO_STACK_MBEDTLS=y
+CONFIG_BT_LE_WHITELIST_SIZE=12
+CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT=20
+CONFIG_BT_LE_LL_SCA=60
+# CONFIG_BT_LE_LL_PEER_SCA_SET_ENABLE is not set
+CONFIG_BT_LE_MAX_CONNECTIONS=2
+# CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
+CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
+CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF=0
+# CONFIG_BT_LE_SLEEP_ENABLE is not set
+CONFIG_BT_LE_LP_CLK_SRC_MAIN_XTAL=y
+# CONFIG_BT_LE_LP_CLK_SRC_DEFAULT is not set
+CONFIG_BT_LE_USE_ESP_TIMER=y
+CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y
+CONFIG_BT_CTRL_BLE_ADV_REPORT_FLOW_CTRL_NUM=100
+CONFIG_BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD=20
+CONFIG_BT_LE_RELEASE_IRAM_SUPPORTED=y
+# CONFIG_BT_LE_TX_CCA_ENABLED is not set
+# CONFIG_BT_LE_DTM_ENABLED is not set
+CONFIG_BT_LE_FEAT_LL_ENCRYPTION=y
+CONFIG_BT_LE_ROLE_CENTROL_ENABLE=y
+CONFIG_BT_LE_ROLE_PERIPHERAL_ENABLE=y
+CONFIG_BT_LE_ROLE_BROADCASTER_ENABLE=y
+CONFIG_BT_LE_ROLE_OBSERVER_ENABLE=y
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N24 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N21 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N18 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N15 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N12 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N9 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N6 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N3 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_N0 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P3 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P6 is not set
+CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P9=y
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P12 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P15 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P18 is not set
+# CONFIG_BT_LE_DFT_TX_POWER_LEVEL_P20 is not set
+CONFIG_BT_LE_DFT_TX_POWER_LEVEL_DBM_EFF=9
+# CONFIG_BT_CTRL_RUN_IN_FLASH_ONLY is not set
+# CONFIG_BT_LE_CTRL_CHECK_CONNECT_IND_ACCESS_ADDRESS is not set
+
+#
+# BLE disconnects when Instant Passed (0x28) occurs
+#
+# CONFIG_BT_LE_CTRL_LLCP_CONN_UPDATE is not set
+# CONFIG_BT_LE_CTRL_LLCP_CHAN_MAP_UPDATE is not set
+# CONFIG_BT_LE_CTRL_LLCP_PHY_UPDATE is not set
+# end of BLE disconnects when Instant Passed (0x28) occurs
+
+CONFIG_BT_CTRL_SCAN_BACKOFF_UPPERLIMITMAX=32
+# end of Controller Options
+
+# CONFIG_BT_RELEASE_IRAM is not set
+
+#
+# Common Options
+#
+CONFIG_BT_ALARM_MAX_NUM=50
+# CONFIG_BT_BLE_LOG_SPI_OUT_ENABLED is not set
+# end of Common Options
+
+# CONFIG_BT_HCI_LOG_DEBUG_EN is not set
+# end of Bluetooth
+
+# CONFIG_BLE_MESH is not set
+
+#
+# Console Library
+#
+# CONFIG_CONSOLE_SORTED_HELP is not set
+# end of Console Library
+
+#
+# Driver Configurations
+#
+
+#
+# Legacy ADC Driver Configuration
+#
+# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_ADC_SKIP_LEGACY_CONFLICT_CHECK is not set
+
+#
+# Legacy ADC Calibration Configuration
+#
+# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set
+# end of Legacy ADC Calibration Configuration
+# end of Legacy ADC Driver Configuration
+
+#
+# Legacy Timer Group Driver Configurations
+#
+# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_GPTIMER_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Timer Group Driver Configurations
+
+#
+# Legacy I2C Driver Configurations
+#
+# CONFIG_I2C_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy I2C Driver Configurations
+
+#
+# Legacy Temperature Sensor Driver Configurations
+#
+# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set
+# CONFIG_TEMP_SENSOR_SKIP_LEGACY_CONFLICT_CHECK is not set
+# end of Legacy Temperature Sensor Driver Configurations
+# end of Driver Configurations
+
+#
+# eFuse Bit Manager
+#
+# CONFIG_EFUSE_CUSTOM_TABLE is not set
+# CONFIG_EFUSE_VIRTUAL is not set
+CONFIG_EFUSE_MAX_BLK_LEN=256
+# end of eFuse Bit Manager
+
+#
+# ESP-TLS
+#
+CONFIG_ESP_TLS_USING_MBEDTLS=y
+# CONFIG_ESP_TLS_USE_SECURE_ELEMENT is not set
+# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set
+# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set
+# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set
+# CONFIG_ESP_TLS_PSK_VERIFICATION is not set
+# CONFIG_ESP_TLS_INSECURE is not set
+# end of ESP-TLS
+
+#
+# Wireless Coexistence
+#
+CONFIG_ESP_COEX_ENABLED=y
+CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y
+# CONFIG_ESP_COEX_POWER_MANAGEMENT is not set
+# CONFIG_ESP_COEX_GPIO_DEBUG is not set
+# end of Wireless Coexistence
+
+#
+# Common ESP-related
+#
+CONFIG_ESP_ERR_TO_NAME_LOOKUP=y
+# end of Common ESP-related
+
+#
+# ESP-Driver:GPIO Configurations
+#
+# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:GPIO Configurations
+
+#
+# ESP-Driver:GPTimer Configurations
+#
+CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y
+# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set
+# CONFIG_GPTIMER_ISR_CACHE_SAFE is not set
+CONFIG_GPTIMER_OBJ_CACHE_SAFE=y
+# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:GPTimer Configurations
+
+#
+# ESP-Driver:I2C Configurations
+#
+# CONFIG_I2C_ISR_IRAM_SAFE is not set
+# CONFIG_I2C_ENABLE_DEBUG_LOG is not set
+# CONFIG_I2C_ENABLE_SLAVE_DRIVER_VERSION_2 is not set
+CONFIG_I2C_MASTER_ISR_HANDLER_IN_IRAM=y
+# end of ESP-Driver:I2C Configurations
+
+#
+# ESP-Driver:LEDC Configurations
+#
+# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set
+# end of ESP-Driver:LEDC Configurations
+
+#
+# ESP-Driver:SPI Configurations
+#
+# CONFIG_SPI_MASTER_IN_IRAM is not set
+CONFIG_SPI_MASTER_ISR_IN_IRAM=y
+# CONFIG_SPI_SLAVE_IN_IRAM is not set
+CONFIG_SPI_SLAVE_ISR_IN_IRAM=y
+# end of ESP-Driver:SPI Configurations
+
+#
+# ESP-Driver:Temperature Sensor Configurations
+#
+# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:Temperature Sensor Configurations
+
+#
+# ESP-Driver:UART Configurations
+#
+# CONFIG_UART_ISR_IN_IRAM is not set
+# end of ESP-Driver:UART Configurations
+
+#
+# ESP-Driver:UHCI Configurations
+#
+# CONFIG_UHCI_ISR_HANDLER_IN_IRAM is not set
+# CONFIG_UHCI_ISR_CACHE_SAFE is not set
+# CONFIG_UHCI_ENABLE_DEBUG_LOG is not set
+# end of ESP-Driver:UHCI Configurations
+
+#
+# Ethernet
+#
+CONFIG_ETH_ENABLED=y
+CONFIG_ETH_USE_SPI_ETHERNET=y
+# CONFIG_ETH_SPI_ETHERNET_DM9051 is not set
+# CONFIG_ETH_SPI_ETHERNET_W5500 is not set
+# CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL is not set
+# CONFIG_ETH_USE_OPENETH is not set
+# CONFIG_ETH_TRANSMIT_MUTEX is not set
+# end of Ethernet
+
+#
+# Event Loop Library
+#
+# CONFIG_ESP_EVENT_LOOP_PROFILING is not set
+CONFIG_ESP_EVENT_POST_FROM_ISR=y
+CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
+# end of Event Loop Library
+
+#
+# GDB Stub
+#
+CONFIG_ESP_GDBSTUB_ENABLED=y
+# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set
+CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
+CONFIG_ESP_GDBSTUB_MAX_TASKS=32
+# end of GDB Stub
+
+#
+# ESP HTTP client
+#
+CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS=y
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set
+# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set
+CONFIG_ESP_HTTP_CLIENT_EVENT_POST_TIMEOUT=2000
+# end of ESP HTTP client
+
+#
+# Hardware Settings
+#
+
+#
+# Chip revision
+#
+CONFIG_ESP32C2_REV_MIN_1=y
+# CONFIG_ESP32C2_REV_MIN_1_1 is not set
+# CONFIG_ESP32C2_REV_MIN_200 is not set
+CONFIG_ESP32C2_REV_MIN_FULL=100
+CONFIG_ESP_REV_MIN_FULL=100
+
+#
+# Maximum Supported ESP32-C2 Revision (Rev v2.99)
+#
+CONFIG_ESP32C2_REV_MAX_FULL=299
+CONFIG_ESP_REV_MAX_FULL=299
+CONFIG_ESP_EFUSE_BLOCK_REV_MIN_FULL=0
+CONFIG_ESP_EFUSE_BLOCK_REV_MAX_FULL=99
+
+#
+# Maximum Supported ESP32-C2 eFuse Block Revision (eFuse Block Rev v0.99)
+#
+# end of Chip revision
+
+#
+# MAC Config
+#
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y
+CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_TWO is not set
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES_FOUR=y
+CONFIG_ESP32C2_UNIVERSAL_MAC_ADDRESSES=4
+# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set
+# end of MAC Config
+
+#
+# Sleep Config
+#
+# CONFIG_ESP_SLEEP_POWER_DOWN_FLASH is not set
+CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y
+CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y
+CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y
+CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=0
+# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set
+# CONFIG_ESP_SLEEP_DEBUG is not set
+CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y
+# end of Sleep Config
+
+#
+# RTC Clock Config
+#
+CONFIG_RTC_CLK_SRC_INT_RC=y
+# CONFIG_RTC_CLK_SRC_EXT_OSC is not set
+# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set
+CONFIG_RTC_CLK_CAL_CYCLES=1024
+# end of RTC Clock Config
+
+#
+# Peripheral Control
+#
+CONFIG_ESP_PERIPH_CTRL_FUNC_IN_IRAM=y
+CONFIG_ESP_REGI2C_CTRL_FUNC_IN_IRAM=y
+# end of Peripheral Control
+
+#
+# GDMA Configurations
+#
+CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y
+CONFIG_GDMA_ISR_HANDLER_IN_IRAM=y
+CONFIG_GDMA_OBJ_DRAM_SAFE=y
+# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set
+# CONFIG_GDMA_ISR_IRAM_SAFE is not set
+# end of GDMA Configurations
+
+#
+# Main XTAL Config
+#
+CONFIG_XTAL_FREQ_26=y
+# CONFIG_XTAL_FREQ_40 is not set
+CONFIG_XTAL_FREQ=26
+# end of Main XTAL Config
+
+#
+# Power Supplier
+#
+
+#
+# Brownout Detector
+#
+CONFIG_ESP_BROWNOUT_DET=y
+CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_ESP_BROWNOUT_DET_LVL=7
+CONFIG_ESP_BROWNOUT_USE_INTR=y
+# end of Brownout Detector
+# end of Power Supplier
+
+CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y
+CONFIG_ESP_INTR_IN_IRAM=y
+# end of Hardware Settings
+
+#
+# ESP-MM: Memory Management Configurations
+#
+# end of ESP-MM: Memory Management Configurations
+
+#
+# ESP NETIF Adapter
+#
+CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120
+# CONFIG_ESP_NETIF_PROVIDE_CUSTOM_IMPLEMENTATION is not set
+CONFIG_ESP_NETIF_TCPIP_LWIP=y
+# CONFIG_ESP_NETIF_LOOPBACK is not set
+CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y
+CONFIG_ESP_NETIF_REPORT_DATA_TRAFFIC=y
+# CONFIG_ESP_NETIF_RECEIVE_REPORT_ERRORS is not set
+# CONFIG_ESP_NETIF_L2_TAP is not set
+# CONFIG_ESP_NETIF_BRIDGE_EN is not set
+# CONFIG_ESP_NETIF_SET_DNS_PER_DEFAULT_NETIF is not set
+# end of ESP NETIF Adapter
+
+#
+# Partition API Configuration
+#
+# end of Partition API Configuration
+
+#
+# PHY
+#
+CONFIG_ESP_PHY_ENABLED=y
+CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP_PHY_MAX_TX_POWER=20
+# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set
+# CONFIG_ESP_PHY_ENABLE_USB is not set
+# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set
+CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
+# CONFIG_ESP_PHY_RF_CAL_NONE is not set
+# CONFIG_ESP_PHY_RF_CAL_FULL is not set
+CONFIG_ESP_PHY_CALIBRATION_MODE=0
+# CONFIG_ESP_PHY_IMPROVE_RX_11B is not set
+# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
+# CONFIG_ESP_PHY_RECORD_USED_TIME is not set
+CONFIG_ESP_PHY_IRAM_OPT=y
+# end of PHY
+
+#
+# Power Management
+#
+CONFIG_PM_SLEEP_FUNC_IN_IRAM=y
+# CONFIG_PM_ENABLE is not set
+CONFIG_PM_SLP_IRAM_OPT=y
+# end of Power Management
+
+#
+# ESP Ringbuf
+#
+# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set
+# end of ESP Ringbuf
+
+#
+# ESP-ROM
+#
+CONFIG_ESP_ROM_PRINT_IN_IRAM=y
+# end of ESP-ROM
+
+#
+# ESP Security Specific
+#
+# end of ESP Security Specific
+
+#
+# ESP System Settings
+#
+# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_120=y
+CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=120
+
+#
+# Cache config
+#
+# CONFIG_ESP32C2_INSTRUCTION_CACHE_WRAP is not set
+# end of Cache config
+
+# CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set
+CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y
+# CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set
+# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set
+CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0
+CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y
+CONFIG_ESP_SYSTEM_NO_BACKTRACE=y
+# CONFIG_ESP_SYSTEM_USE_EH_FRAME is not set
+# CONFIG_ESP_SYSTEM_USE_FRAME_POINTER is not set
+
+#
+# Memory protection
+#
+CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=y
+# end of Memory protection
+
+CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32
+CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584
+CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y
+# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set
+CONFIG_ESP_MAIN_TASK_AFFINITY=0x0
+CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048
+CONFIG_ESP_CONSOLE_UART_DEFAULT=y
+# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set
+# CONFIG_ESP_CONSOLE_NONE is not set
+CONFIG_ESP_CONSOLE_UART=y
+CONFIG_ESP_CONSOLE_UART_NUM=0
+CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0
+CONFIG_ESP_CONSOLE_UART_BAUDRATE=74880
+CONFIG_ESP_INT_WDT=y
+CONFIG_ESP_INT_WDT_TIMEOUT_MS=300
+CONFIG_ESP_TASK_WDT_EN=y
+CONFIG_ESP_TASK_WDT_USE_ESP_TIMER=y
+CONFIG_ESP_TASK_WDT_INIT=y
+# CONFIG_ESP_TASK_WDT_PANIC is not set
+CONFIG_ESP_TASK_WDT_TIMEOUT_S=5
+CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP_PANIC_HANDLER_IRAM is not set
+# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set
+CONFIG_ESP_DEBUG_OCDAWARE=y
+CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y
+CONFIG_ESP_SYSTEM_HW_STACK_GUARD=y
+CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y
+CONFIG_ESP_SYSTEM_HW_PC_RECORD=y
+# end of ESP System Settings
+
+#
+# IPC (Inter-Processor Call)
+#
+CONFIG_ESP_IPC_TASK_STACK_SIZE=1024
+# end of IPC (Inter-Processor Call)
+
+#
+# ESP Timer (High Resolution Timer)
+#
+CONFIG_ESP_TIMER_IN_IRAM=y
+# CONFIG_ESP_TIMER_PROFILING is not set
+CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y
+CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y
+CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1
+# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set
+CONFIG_ESP_TIMER_TASK_AFFINITY=0x0
+CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y
+CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD=y
+CONFIG_ESP_TIMER_IMPL_SYSTIMER=y
+# end of ESP Timer (High Resolution Timer)
+
+#
+# Wi-Fi
+#
+CONFIG_ESP_WIFI_ENABLED=y
+CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER=y
+# CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER is not set
+CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF=0
+CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF=5
+CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP_WIFI_TX_BA_WIN=6
+CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP_WIFI_RX_BA_WIN=6
+CONFIG_ESP_WIFI_NVS_ENABLED=y
+CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32
+CONFIG_ESP_WIFI_IRAM_OPT=y
+# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set
+CONFIG_ESP_WIFI_RX_IRAM_OPT=y
+CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP_WIFI_ENABLE_SAE_PK=y
+CONFIG_ESP_WIFI_ENABLE_SAE_H2E=y
+CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y
+# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50
+# CONFIG_ESP_WIFI_BSS_MAX_IDLE_SUPPORT is not set
+CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10
+CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15
+# CONFIG_ESP_WIFI_FTM_ENABLE is not set
+CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y
+CONFIG_ESP_WIFI_GMAC_SUPPORT=y
+# CONFIG_ESP_WIFI_SOFTAP_SUPPORT is not set
+# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set
+CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=2
+CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y
+CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y
+# CONFIG_ESP_WIFI_11KV_SUPPORT is not set
+# CONFIG_ESP_WIFI_MBO_SUPPORT is not set
+# CONFIG_ESP_WIFI_DPP_SUPPORT is not set
+# CONFIG_ESP_WIFI_11R_SUPPORT is not set
+
+#
+# WPS Configuration Options
+#
+# CONFIG_ESP_WIFI_WPS_STRICT is not set
+# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set
+# end of WPS Configuration Options
+
+# CONFIG_ESP_WIFI_DEBUG_PRINT is not set
+# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set
+CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y
+CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER=y
+# end of Wi-Fi
+
+#
+# FreeRTOS
+#
+
+#
+# Kernel
+#
+# CONFIG_FREERTOS_SMP is not set
+CONFIG_FREERTOS_UNICORE=y
+CONFIG_FREERTOS_HZ=1000
+CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set
+# CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set
+CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1
+CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536
+# CONFIG_FREERTOS_USE_IDLE_HOOK is not set
+# CONFIG_FREERTOS_USE_TICK_HOOK is not set
+CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16
+# CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set
+CONFIG_FREERTOS_USE_TIMERS=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc"
+# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set
+CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y
+CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1
+CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10
+CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
+CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1
+# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
+# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set
+# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
+# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set
+# end of Kernel
+
+#
+# Port
+#
+# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set
+CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y
+# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set
+# CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set
+CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y
+CONFIG_FREERTOS_ISR_STACKSIZE=1536
+CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y
+CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER=y
+CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y
+# CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set
+CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y
+# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set
+# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set
+# end of Port
+
+#
+# Extra
+#
+# end of Extra
+
+CONFIG_FREERTOS_PORT=y
+CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF
+CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y
+CONFIG_FREERTOS_DEBUG_OCDAWARE=y
+CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y
+CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y
+CONFIG_FREERTOS_NUMBER_OF_CORES=1
+CONFIG_FREERTOS_IN_IRAM=y
+# end of FreeRTOS
+
+#
+# Hardware Abstraction Layer (HAL) and Low Level (LL)
+#
+CONFIG_HAL_ASSERTION_EQUALS_SYSTEM=y
+# CONFIG_HAL_ASSERTION_DISABLE is not set
+# CONFIG_HAL_ASSERTION_SILENT is not set
+# CONFIG_HAL_ASSERTION_ENABLE is not set
+CONFIG_HAL_DEFAULT_ASSERTION_LEVEL=2
+CONFIG_HAL_SYSTIMER_USE_ROM_IMPL=y
+CONFIG_HAL_WDT_USE_ROM_IMPL=y
+# end of Hardware Abstraction Layer (HAL) and Low Level (LL)
+
+#
+# Heap memory debugging
+#
+CONFIG_HEAP_POISONING_DISABLED=y
+# CONFIG_HEAP_POISONING_LIGHT is not set
+# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set
+CONFIG_HEAP_TRACING_OFF=y
+# CONFIG_HEAP_TRACING_STANDALONE is not set
+# CONFIG_HEAP_TRACING_TOHOST is not set
+# CONFIG_HEAP_USE_HOOKS is not set
+# CONFIG_HEAP_TASK_TRACKING is not set
+# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set
+CONFIG_HEAP_TLSF_USE_ROM_IMPL=y
+# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set
+# end of Heap memory debugging
+
+#
+# Log
+#
+CONFIG_LOG_VERSION_1=y
+# CONFIG_LOG_VERSION_2 is not set
+CONFIG_LOG_VERSION=1
+
+#
+# Log Level
+#
+# CONFIG_LOG_DEFAULT_LEVEL_NONE is not set
+# CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set
+# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set
+CONFIG_LOG_DEFAULT_LEVEL_INFO=y
+# CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set
+# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set
+CONFIG_LOG_DEFAULT_LEVEL=3
+CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y
+# CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set
+# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set
+CONFIG_LOG_MAXIMUM_LEVEL=3
+
+#
+# Level Settings
+#
+# CONFIG_LOG_MASTER_LEVEL is not set
+CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=y
+# CONFIG_LOG_TAG_LEVEL_IMPL_NONE is not set
+# CONFIG_LOG_TAG_LEVEL_IMPL_LINKED_LIST is not set
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_AND_LINKED_LIST=y
+# CONFIG_LOG_TAG_LEVEL_CACHE_ARRAY is not set
+CONFIG_LOG_TAG_LEVEL_CACHE_BINARY_MIN_HEAP=y
+CONFIG_LOG_TAG_LEVEL_IMPL_CACHE_SIZE=31
+# end of Level Settings
+# end of Log Level
+
+#
+# Format
+#
+# CONFIG_LOG_COLORS is not set
+CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y
+# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set
+# end of Format
+
+#
+# Settings
+#
+CONFIG_LOG_MODE_TEXT_EN=y
+CONFIG_LOG_MODE_TEXT=y
+# end of Settings
+
+CONFIG_LOG_IN_IRAM=y
+# end of Log
+
+#
+# LWIP
+#
+CONFIG_LWIP_ENABLE=y
+CONFIG_LWIP_LOCAL_HOSTNAME="espressif"
+CONFIG_LWIP_TCPIP_TASK_PRIO=18
+# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set
+# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set
+CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y
+# CONFIG_LWIP_L2_TO_L3_COPY is not set
+# CONFIG_LWIP_IRAM_OPTIMIZATION is not set
+# CONFIG_LWIP_EXTRA_IRAM_OPTIMIZATION is not set
+CONFIG_LWIP_TIMERS_ONDEMAND=y
+CONFIG_LWIP_ND6=y
+# CONFIG_LWIP_FORCE_ROUTER_FORWARDING is not set
+CONFIG_LWIP_MAX_SOCKETS=10
+# CONFIG_LWIP_USE_ONLY_LWIP_SELECT is not set
+# CONFIG_LWIP_SO_LINGER is not set
+CONFIG_LWIP_SO_REUSE=y
+CONFIG_LWIP_SO_REUSE_RXTOALL=y
+# CONFIG_LWIP_SO_RCVBUF is not set
+# CONFIG_LWIP_NETBUF_RECVINFO is not set
+CONFIG_LWIP_IP_DEFAULT_TTL=64
+CONFIG_LWIP_IP4_FRAG=y
+CONFIG_LWIP_IP6_FRAG=y
+# CONFIG_LWIP_IP4_REASSEMBLY is not set
+# CONFIG_LWIP_IP6_REASSEMBLY is not set
+CONFIG_LWIP_IP_REASS_MAX_PBUFS=10
+# CONFIG_LWIP_IP_FORWARD is not set
+# CONFIG_LWIP_STATS is not set
+CONFIG_LWIP_ESP_GRATUITOUS_ARP=y
+CONFIG_LWIP_GARP_TMR_INTERVAL=60
+CONFIG_LWIP_ESP_MLDV6_REPORT=y
+CONFIG_LWIP_MLDV6_TMR_INTERVAL=40
+CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32
+CONFIG_LWIP_DHCP_DOES_ARP_CHECK=y
+# CONFIG_LWIP_DHCP_DOES_ACD_CHECK is not set
+# CONFIG_LWIP_DHCP_DOES_NOT_CHECK_OFFERED_IP is not set
+# CONFIG_LWIP_DHCP_DISABLE_CLIENT_ID is not set
+CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y
+# CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set
+CONFIG_LWIP_DHCP_OPTIONS_LEN=68
+CONFIG_LWIP_NUM_NETIF_CLIENT_DATA=0
+CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1
+
+#
+# DHCP server
+#
+CONFIG_LWIP_DHCPS=y
+CONFIG_LWIP_DHCPS_LEASE_UNIT=60
+CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8
+CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y
+CONFIG_LWIP_DHCPS_ADD_DNS=y
+# end of DHCP server
+
+# CONFIG_LWIP_AUTOIP is not set
+CONFIG_LWIP_IPV4=y
+CONFIG_LWIP_IPV6=y
+# CONFIG_LWIP_IPV6_AUTOCONFIG is not set
+CONFIG_LWIP_IPV6_NUM_ADDRESSES=3
+# CONFIG_LWIP_IPV6_FORWARD is not set
+# CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set
+CONFIG_LWIP_NETIF_LOOPBACK=y
+CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8
+
+#
+# TCP
+#
+CONFIG_LWIP_MAX_ACTIVE_TCP=16
+CONFIG_LWIP_MAX_LISTENING_TCP=16
+CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y
+CONFIG_LWIP_TCP_MAXRTX=12
+CONFIG_LWIP_TCP_SYNMAXRTX=12
+CONFIG_LWIP_TCP_MSS=1440
+CONFIG_LWIP_TCP_TMR_INTERVAL=250
+CONFIG_LWIP_TCP_MSL=60000
+CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000
+CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760
+CONFIG_LWIP_TCP_WND_DEFAULT=5760
+CONFIG_LWIP_TCP_RECVMBOX_SIZE=6
+CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6
+CONFIG_LWIP_TCP_QUEUE_OOSEQ=y
+CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6
+CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4
+# CONFIG_LWIP_TCP_SACK_OUT is not set
+CONFIG_LWIP_TCP_OVERSIZE_MSS=y
+# CONFIG_LWIP_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set
+CONFIG_LWIP_TCP_RTO_TIME=1500
+# end of TCP
+
+#
+# UDP
+#
+CONFIG_LWIP_MAX_UDP_PCBS=16
+CONFIG_LWIP_UDP_RECVMBOX_SIZE=6
+# end of UDP
+
+#
+# Checksums
+#
+# CONFIG_LWIP_CHECKSUM_CHECK_IP is not set
+# CONFIG_LWIP_CHECKSUM_CHECK_UDP is not set
+CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y
+# end of Checksums
+
+CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3
+CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5
+CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES=5
+CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS=3
+CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS=10
+# CONFIG_LWIP_PPP_SUPPORT is not set
+# CONFIG_LWIP_SLIP_SUPPORT is not set
+
+#
+# ICMP
+#
+CONFIG_LWIP_ICMP=y
+# CONFIG_LWIP_MULTICAST_PING is not set
+# CONFIG_LWIP_BROADCAST_PING is not set
+# end of ICMP
+
+#
+# LWIP RAW API
+#
+CONFIG_LWIP_MAX_RAW_PCBS=16
+# end of LWIP RAW API
+
+#
+# SNTP
+#
+CONFIG_LWIP_SNTP_MAX_SERVERS=1
+# CONFIG_LWIP_DHCP_GET_NTP_SRV is not set
+CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000
+CONFIG_LWIP_SNTP_STARTUP_DELAY=y
+CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000
+# end of SNTP
+
+#
+# DNS
+#
+CONFIG_LWIP_DNS_MAX_HOST_IP=1
+CONFIG_LWIP_DNS_MAX_SERVERS=3
+# CONFIG_LWIP_FALLBACK_DNS_SERVER_SUPPORT is not set
+# CONFIG_LWIP_DNS_SETSERVER_WITH_NETIF is not set
+# CONFIG_LWIP_USE_ESP_GETADDRINFO is not set
+# end of DNS
+
+CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7
+CONFIG_LWIP_ESP_LWIP_ASSERT=y
+
+#
+# Hooks
+#
+# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set
+CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y
+# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set
+CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y
+# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set
+# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set
+CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y
+# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set
+# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set
+CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y
+# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set
+# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set
+CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_NONE=y
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_DEFAULT is not set
+# CONFIG_LWIP_HOOK_DHCP_EXTRA_OPTION_CUSTOM is not set
+CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set
+# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set
+CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE=y
+# CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM is not set
+# CONFIG_LWIP_HOOK_IP6_INPUT_NONE is not set
+CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT=y
+# CONFIG_LWIP_HOOK_IP6_INPUT_CUSTOM is not set
+# end of Hooks
+
+# CONFIG_LWIP_DEBUG is not set
+# end of LWIP
+
+#
+# mbedTLS
+#
+CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC=y
+# CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC is not set
+# CONFIG_MBEDTLS_CUSTOM_MEM_ALLOC is not set
+CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y
+CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
+CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
+# CONFIG_MBEDTLS_DYNAMIC_BUFFER is not set
+# CONFIG_MBEDTLS_DEBUG is not set
+
+#
+# mbedTLS v3.x related
+#
+# CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 is not set
+# CONFIG_MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH is not set
+# CONFIG_MBEDTLS_X509_TRUSTED_CERT_CALLBACK is not set
+# CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION is not set
+CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE=y
+CONFIG_MBEDTLS_PKCS7_C=y
+# end of mbedTLS v3.x related
+
+#
+# Certificate Bundle
+#
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN=y
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set
+# CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set
+# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set
+CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200
+# end of Certificate Bundle
+
+# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set
+CONFIG_MBEDTLS_CMAC_C=y
+CONFIG_MBEDTLS_HARDWARE_SHA=y
+CONFIG_MBEDTLS_HARDWARE_ECC=y
+CONFIG_MBEDTLS_ECC_OTHER_CURVES_SOFT_FALLBACK=y
+CONFIG_MBEDTLS_ROM_MD5=y
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set
+# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set
+CONFIG_MBEDTLS_HAVE_TIME=y
+# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set
+# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set
+CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y
+CONFIG_MBEDTLS_SHA1_C=y
+CONFIG_MBEDTLS_SHA512_C=y
+# CONFIG_MBEDTLS_SHA3_C is not set
+CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT=y
+# CONFIG_MBEDTLS_TLS_SERVER_ONLY is not set
+# CONFIG_MBEDTLS_TLS_CLIENT_ONLY is not set
+# CONFIG_MBEDTLS_TLS_DISABLED is not set
+CONFIG_MBEDTLS_TLS_SERVER=y
+CONFIG_MBEDTLS_TLS_CLIENT=y
+CONFIG_MBEDTLS_TLS_ENABLED=y
+
+#
+# TLS Key Exchange Methods
+#
+# CONFIG_MBEDTLS_PSK_MODES is not set
+CONFIG_MBEDTLS_KEY_EXCHANGE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA=y
+# end of TLS Key Exchange Methods
+
+CONFIG_MBEDTLS_SSL_RENEGOTIATION=y
+CONFIG_MBEDTLS_SSL_PROTO_TLS1_2=y
+# CONFIG_MBEDTLS_SSL_PROTO_GMTSSL1_1 is not set
+# CONFIG_MBEDTLS_SSL_PROTO_DTLS is not set
+CONFIG_MBEDTLS_SSL_ALPN=y
+CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS=y
+CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS=y
+
+#
+# Symmetric Ciphers
+#
+CONFIG_MBEDTLS_AES_C=y
+# CONFIG_MBEDTLS_CAMELLIA_C is not set
+# CONFIG_MBEDTLS_DES_C is not set
+# CONFIG_MBEDTLS_BLOWFISH_C is not set
+# CONFIG_MBEDTLS_XTEA_C is not set
+CONFIG_MBEDTLS_CCM_C=y
+CONFIG_MBEDTLS_GCM_C=y
+# CONFIG_MBEDTLS_NIST_KW_C is not set
+# end of Symmetric Ciphers
+
+# CONFIG_MBEDTLS_RIPEMD160_C is not set
+
+#
+# Certificates
+#
+CONFIG_MBEDTLS_PEM_PARSE_C=y
+CONFIG_MBEDTLS_PEM_WRITE_C=y
+CONFIG_MBEDTLS_X509_CRL_PARSE_C=y
+CONFIG_MBEDTLS_X509_CSR_PARSE_C=y
+# end of Certificates
+
+CONFIG_MBEDTLS_ECP_C=y
+CONFIG_MBEDTLS_PK_PARSE_EC_EXTENDED=y
+CONFIG_MBEDTLS_PK_PARSE_EC_COMPRESSED=y
+# CONFIG_MBEDTLS_DHM_C is not set
+CONFIG_MBEDTLS_ECDH_C=y
+CONFIG_MBEDTLS_ECDSA_C=y
+# CONFIG_MBEDTLS_ECJPAKE_C is not set
+CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y
+CONFIG_MBEDTLS_ECP_NIST_OPTIM=y
+# CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set
+# CONFIG_MBEDTLS_POLY1305_C is not set
+# CONFIG_MBEDTLS_CHACHA20_C is not set
+# CONFIG_MBEDTLS_HKDF_C is not set
+# CONFIG_MBEDTLS_THREADING_C is not set
+CONFIG_MBEDTLS_ERROR_STRINGS=y
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL_BOOTLOADER is not set
+# CONFIG_MBEDTLS_USE_CRYPTO_ROM_IMPL is not set
+CONFIG_MBEDTLS_FS_IO=y
+# CONFIG_MBEDTLS_ALLOW_WEAK_CERTIFICATE_VERIFICATION is not set
+# end of mbedTLS
+
+#
+# ESP-MQTT Configurations
+#
+CONFIG_MQTT_PROTOCOL_311=y
+# CONFIG_MQTT_PROTOCOL_5 is not set
+CONFIG_MQTT_TRANSPORT_SSL=y
+CONFIG_MQTT_TRANSPORT_WEBSOCKET=y
+CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y
+# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set
+# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set
+# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set
+# CONFIG_MQTT_USE_CUSTOM_CONFIG is not set
+# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set
+# CONFIG_MQTT_CUSTOM_OUTBOX is not set
+# end of ESP-MQTT Configurations
+
+#
+# LibC
+#
+CONFIG_LIBC_NEWLIB=y
+CONFIG_LIBC_MISC_IN_IRAM=y
+CONFIG_LIBC_LOCKS_PLACE_IN_IRAM=y
+CONFIG_LIBC_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_LIBC_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_LIBC_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_LIBC_STDIN_LINE_ENDING_LF is not set
+CONFIG_LIBC_STDIN_LINE_ENDING_CR=y
+CONFIG_LIBC_NEWLIB_NANO_FORMAT=y
+CONFIG_LIBC_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_LIBC_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_LIBC_TIME_SYSCALL_USE_NONE is not set
+# CONFIG_LIBC_OPTIMIZED_MISALIGNED_ACCESS is not set
+# end of LibC
+
+#
+# NVS
+#
+# CONFIG_NVS_ASSERT_ERROR_CHECK is not set
+# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set
+# end of NVS
+
+#
+# OpenThread
+#
+# CONFIG_OPENTHREAD_ENABLED is not set
+
+#
+# OpenThread Spinel
+#
+# CONFIG_OPENTHREAD_SPINEL_ONLY is not set
+# end of OpenThread Spinel
+# end of OpenThread
+
+#
+# PThreads
+#
+CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_PTHREAD_STACK_MIN=768
+CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread"
+# end of PThreads
+
+#
+# MMU Config
+#
+CONFIG_MMU_PAGE_SIZE_32KB=y
+CONFIG_MMU_PAGE_MODE="32KB"
+CONFIG_MMU_PAGE_SIZE=0x8000
+# end of MMU Config
+
+#
+# Main Flash configuration
+#
+
+#
+# SPI Flash behavior when brownout
+#
+CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC=y
+CONFIG_SPI_FLASH_BROWNOUT_RESET=y
+# end of SPI Flash behavior when brownout
+
+#
+# Optional and Experimental Features (READ DOCS FIRST)
+#
+
+#
+# Features here require specific hardware (READ DOCS FIRST!)
+#
+# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set
+CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50
+# CONFIG_SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND is not set
+# CONFIG_SPI_FLASH_FORCE_ENABLE_C6_H2_SUSPEND is not set
+CONFIG_SPI_FLASH_PLACE_FUNCTIONS_IN_IRAM=y
+# end of Optional and Experimental Features (READ DOCS FIRST)
+# end of Main Flash configuration
+
+#
+# SPI Flash driver
+#
+# CONFIG_SPI_FLASH_VERIFY_WRITE is not set
+# CONFIG_SPI_FLASH_ENABLE_COUNTERS is not set
+CONFIG_SPI_FLASH_ROM_DRIVER_PATCH=y
+# CONFIG_SPI_FLASH_ROM_IMPL is not set
+CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS=y
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_FAILS is not set
+# CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED is not set
+# CONFIG_SPI_FLASH_BYPASS_BLOCK_ERASE is not set
+CONFIG_SPI_FLASH_YIELD_DURING_ERASE=y
+CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS=20
+CONFIG_SPI_FLASH_ERASE_YIELD_TICKS=1
+CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE=8192
+# CONFIG_SPI_FLASH_SIZE_OVERRIDE is not set
+# CONFIG_SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED is not set
+# CONFIG_SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST is not set
+
+#
+# Auto-detect flash chips
+#
+CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED=y
+CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED=y
+CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_GD_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP=y
+CONFIG_SPI_FLASH_SUPPORT_TH_CHIP=y
+# end of Auto-detect flash chips
+
+CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y
+# end of SPI Flash driver
+
+#
+# TCP Transport
+#
+
+#
+# Websocket
+#
+CONFIG_WS_TRANSPORT=y
+CONFIG_WS_BUFFER_SIZE=1024
+# CONFIG_WS_DYNAMIC_BUFFER is not set
+# end of Websocket
+# end of TCP Transport
+
+#
+# Virtual file system
+#
+CONFIG_VFS_SUPPORT_IO=y
+CONFIG_VFS_SUPPORT_DIR=y
+CONFIG_VFS_SUPPORT_SELECT=y
+CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+# CONFIG_VFS_SELECT_IN_RAM is not set
+CONFIG_VFS_SUPPORT_TERMIOS=y
+CONFIG_VFS_MAX_COUNT=8
+
+#
+# Host File System I/O (Semihosting)
+#
+CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# end of Host File System I/O (Semihosting)
+
+CONFIG_VFS_INITIALIZE_DEV_NULL=y
+# end of Virtual file system
+# end of Component config
+
+# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set
+
+# Deprecated options for backward compatibility
+# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set
+# CONFIG_NO_BLOBS is not set
+# CONFIG_APP_ROLLBACK_ENABLE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL_NONE=y
+# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_INFO is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set
+# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set
+CONFIG_LOG_BOOTLOADER_LEVEL=0
+# CONFIG_FLASH_ENCRYPTION_ENABLED is not set
+# CONFIG_FLASHMODE_QIO is not set
+# CONFIG_FLASHMODE_QOUT is not set
+CONFIG_FLASHMODE_DIO=y
+# CONFIG_FLASHMODE_DOUT is not set
+CONFIG_MONITOR_BAUD=74880
+# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set
+# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set
+# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set
+CONFIG_OPTIMIZATION_LEVEL_RELEASE=y
+CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y
+CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y
+# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set
+# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set
+CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2
+# CONFIG_CXX_EXCEPTIONS is not set
+CONFIG_STACK_CHECK_NONE=y
+# CONFIG_STACK_CHECK_NORM is not set
+# CONFIG_STACK_CHECK_STRONG is not set
+# CONFIG_STACK_CHECK_ALL is not set
+# CONFIG_WARN_WRITE_STRINGS is not set
+CONFIG_BLUEDROID_ENABLED=y
+# CONFIG_NIMBLE_ENABLED is not set
+CONFIG_BTC_TASK_STACK_SIZE=3072
+CONFIG_BLUEDROID_PINNED_TO_CORE=0
+CONFIG_BTU_TASK_STACK_SIZE=4352
+# CONFIG_BLUEDROID_MEM_DEBUG is not set
+CONFIG_GATTS_ENABLE=y
+# CONFIG_GATTS_SEND_SERVICE_CHANGE_MANUAL is not set
+CONFIG_GATTS_SEND_SERVICE_CHANGE_AUTO=y
+CONFIG_GATTS_SEND_SERVICE_CHANGE_MODE=0
+CONFIG_GATTC_ENABLE=y
+# CONFIG_GATTC_CACHE_NVS_FLASH is not set
+CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30
+CONFIG_BLE_SMP_ENABLE=y
+# CONFIG_SMP_SLAVE_CON_PARAMS_UPD_ENABLE is not set
+# CONFIG_HCI_TRACE_LEVEL_NONE is not set
+# CONFIG_HCI_TRACE_LEVEL_ERROR is not set
+CONFIG_HCI_TRACE_LEVEL_WARNING=y
+# CONFIG_HCI_TRACE_LEVEL_API is not set
+# CONFIG_HCI_TRACE_LEVEL_EVENT is not set
+# CONFIG_HCI_TRACE_LEVEL_DEBUG is not set
+# CONFIG_HCI_TRACE_LEVEL_VERBOSE is not set
+CONFIG_HCI_INITIAL_TRACE_LEVEL=2
+# CONFIG_BTM_TRACE_LEVEL_NONE is not set
+# CONFIG_BTM_TRACE_LEVEL_ERROR is not set
+CONFIG_BTM_TRACE_LEVEL_WARNING=y
+# CONFIG_BTM_TRACE_LEVEL_API is not set
+# CONFIG_BTM_TRACE_LEVEL_EVENT is not set
+# CONFIG_BTM_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BTM_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BTM_INITIAL_TRACE_LEVEL=2
+# CONFIG_L2CAP_TRACE_LEVEL_NONE is not set
+# CONFIG_L2CAP_TRACE_LEVEL_ERROR is not set
+CONFIG_L2CAP_TRACE_LEVEL_WARNING=y
+# CONFIG_L2CAP_TRACE_LEVEL_API is not set
+# CONFIG_L2CAP_TRACE_LEVEL_EVENT is not set
+# CONFIG_L2CAP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_L2CAP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_L2CAP_INITIAL_TRACE_LEVEL=2
+# CONFIG_RFCOMM_TRACE_LEVEL_NONE is not set
+# CONFIG_RFCOMM_TRACE_LEVEL_ERROR is not set
+CONFIG_RFCOMM_TRACE_LEVEL_WARNING=y
+# CONFIG_RFCOMM_TRACE_LEVEL_API is not set
+# CONFIG_RFCOMM_TRACE_LEVEL_EVENT is not set
+# CONFIG_RFCOMM_TRACE_LEVEL_DEBUG is not set
+# CONFIG_RFCOMM_TRACE_LEVEL_VERBOSE is not set
+CONFIG_RFCOMM_INITIAL_TRACE_LEVEL=2
+# CONFIG_SDP_TRACE_LEVEL_NONE is not set
+# CONFIG_SDP_TRACE_LEVEL_ERROR is not set
+CONFIG_SDP_TRACE_LEVEL_WARNING=y
+# CONFIG_SDP_TRACE_LEVEL_API is not set
+# CONFIG_SDP_TRACE_LEVEL_EVENT is not set
+# CONFIG_SDP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_SDP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BTH_LOG_SDP_INITIAL_TRACE_LEVEL=2
+# CONFIG_GAP_TRACE_LEVEL_NONE is not set
+# CONFIG_GAP_TRACE_LEVEL_ERROR is not set
+CONFIG_GAP_TRACE_LEVEL_WARNING=y
+# CONFIG_GAP_TRACE_LEVEL_API is not set
+# CONFIG_GAP_TRACE_LEVEL_EVENT is not set
+# CONFIG_GAP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_GAP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_GAP_INITIAL_TRACE_LEVEL=2
+CONFIG_BNEP_INITIAL_TRACE_LEVEL=2
+# CONFIG_PAN_TRACE_LEVEL_NONE is not set
+# CONFIG_PAN_TRACE_LEVEL_ERROR is not set
+CONFIG_PAN_TRACE_LEVEL_WARNING=y
+# CONFIG_PAN_TRACE_LEVEL_API is not set
+# CONFIG_PAN_TRACE_LEVEL_EVENT is not set
+# CONFIG_PAN_TRACE_LEVEL_DEBUG is not set
+# CONFIG_PAN_TRACE_LEVEL_VERBOSE is not set
+CONFIG_PAN_INITIAL_TRACE_LEVEL=2
+# CONFIG_A2D_TRACE_LEVEL_NONE is not set
+# CONFIG_A2D_TRACE_LEVEL_ERROR is not set
+CONFIG_A2D_TRACE_LEVEL_WARNING=y
+# CONFIG_A2D_TRACE_LEVEL_API is not set
+# CONFIG_A2D_TRACE_LEVEL_EVENT is not set
+# CONFIG_A2D_TRACE_LEVEL_DEBUG is not set
+# CONFIG_A2D_TRACE_LEVEL_VERBOSE is not set
+CONFIG_A2D_INITIAL_TRACE_LEVEL=2
+# CONFIG_AVDT_TRACE_LEVEL_NONE is not set
+# CONFIG_AVDT_TRACE_LEVEL_ERROR is not set
+CONFIG_AVDT_TRACE_LEVEL_WARNING=y
+# CONFIG_AVDT_TRACE_LEVEL_API is not set
+# CONFIG_AVDT_TRACE_LEVEL_EVENT is not set
+# CONFIG_AVDT_TRACE_LEVEL_DEBUG is not set
+# CONFIG_AVDT_TRACE_LEVEL_VERBOSE is not set
+CONFIG_AVDT_INITIAL_TRACE_LEVEL=2
+# CONFIG_AVCT_TRACE_LEVEL_NONE is not set
+# CONFIG_AVCT_TRACE_LEVEL_ERROR is not set
+CONFIG_AVCT_TRACE_LEVEL_WARNING=y
+# CONFIG_AVCT_TRACE_LEVEL_API is not set
+# CONFIG_AVCT_TRACE_LEVEL_EVENT is not set
+# CONFIG_AVCT_TRACE_LEVEL_DEBUG is not set
+# CONFIG_AVCT_TRACE_LEVEL_VERBOSE is not set
+CONFIG_AVCT_INITIAL_TRACE_LEVEL=2
+# CONFIG_AVRC_TRACE_LEVEL_NONE is not set
+# CONFIG_AVRC_TRACE_LEVEL_ERROR is not set
+CONFIG_AVRC_TRACE_LEVEL_WARNING=y
+# CONFIG_AVRC_TRACE_LEVEL_API is not set
+# CONFIG_AVRC_TRACE_LEVEL_EVENT is not set
+# CONFIG_AVRC_TRACE_LEVEL_DEBUG is not set
+# CONFIG_AVRC_TRACE_LEVEL_VERBOSE is not set
+CONFIG_AVRC_INITIAL_TRACE_LEVEL=2
+# CONFIG_MCA_TRACE_LEVEL_NONE is not set
+# CONFIG_MCA_TRACE_LEVEL_ERROR is not set
+CONFIG_MCA_TRACE_LEVEL_WARNING=y
+# CONFIG_MCA_TRACE_LEVEL_API is not set
+# CONFIG_MCA_TRACE_LEVEL_EVENT is not set
+# CONFIG_MCA_TRACE_LEVEL_DEBUG is not set
+# CONFIG_MCA_TRACE_LEVEL_VERBOSE is not set
+CONFIG_MCA_INITIAL_TRACE_LEVEL=2
+# CONFIG_HID_TRACE_LEVEL_NONE is not set
+# CONFIG_HID_TRACE_LEVEL_ERROR is not set
+CONFIG_HID_TRACE_LEVEL_WARNING=y
+# CONFIG_HID_TRACE_LEVEL_API is not set
+# CONFIG_HID_TRACE_LEVEL_EVENT is not set
+# CONFIG_HID_TRACE_LEVEL_DEBUG is not set
+# CONFIG_HID_TRACE_LEVEL_VERBOSE is not set
+CONFIG_HID_INITIAL_TRACE_LEVEL=2
+# CONFIG_APPL_TRACE_LEVEL_NONE is not set
+# CONFIG_APPL_TRACE_LEVEL_ERROR is not set
+CONFIG_APPL_TRACE_LEVEL_WARNING=y
+# CONFIG_APPL_TRACE_LEVEL_API is not set
+# CONFIG_APPL_TRACE_LEVEL_EVENT is not set
+# CONFIG_APPL_TRACE_LEVEL_DEBUG is not set
+# CONFIG_APPL_TRACE_LEVEL_VERBOSE is not set
+CONFIG_APPL_INITIAL_TRACE_LEVEL=2
+# CONFIG_GATT_TRACE_LEVEL_NONE is not set
+# CONFIG_GATT_TRACE_LEVEL_ERROR is not set
+CONFIG_GATT_TRACE_LEVEL_WARNING=y
+# CONFIG_GATT_TRACE_LEVEL_API is not set
+# CONFIG_GATT_TRACE_LEVEL_EVENT is not set
+# CONFIG_GATT_TRACE_LEVEL_DEBUG is not set
+# CONFIG_GATT_TRACE_LEVEL_VERBOSE is not set
+CONFIG_GATT_INITIAL_TRACE_LEVEL=2
+# CONFIG_SMP_TRACE_LEVEL_NONE is not set
+# CONFIG_SMP_TRACE_LEVEL_ERROR is not set
+CONFIG_SMP_TRACE_LEVEL_WARNING=y
+# CONFIG_SMP_TRACE_LEVEL_API is not set
+# CONFIG_SMP_TRACE_LEVEL_EVENT is not set
+# CONFIG_SMP_TRACE_LEVEL_DEBUG is not set
+# CONFIG_SMP_TRACE_LEVEL_VERBOSE is not set
+CONFIG_SMP_INITIAL_TRACE_LEVEL=2
+# CONFIG_BTIF_TRACE_LEVEL_NONE is not set
+# CONFIG_BTIF_TRACE_LEVEL_ERROR is not set
+CONFIG_BTIF_TRACE_LEVEL_WARNING=y
+# CONFIG_BTIF_TRACE_LEVEL_API is not set
+# CONFIG_BTIF_TRACE_LEVEL_EVENT is not set
+# CONFIG_BTIF_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BTIF_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BTIF_INITIAL_TRACE_LEVEL=2
+# CONFIG_BTC_TRACE_LEVEL_NONE is not set
+# CONFIG_BTC_TRACE_LEVEL_ERROR is not set
+CONFIG_BTC_TRACE_LEVEL_WARNING=y
+# CONFIG_BTC_TRACE_LEVEL_API is not set
+# CONFIG_BTC_TRACE_LEVEL_EVENT is not set
+# CONFIG_BTC_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BTC_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BTC_INITIAL_TRACE_LEVEL=2
+# CONFIG_OSI_TRACE_LEVEL_NONE is not set
+# CONFIG_OSI_TRACE_LEVEL_ERROR is not set
+CONFIG_OSI_TRACE_LEVEL_WARNING=y
+# CONFIG_OSI_TRACE_LEVEL_API is not set
+# CONFIG_OSI_TRACE_LEVEL_EVENT is not set
+# CONFIG_OSI_TRACE_LEVEL_DEBUG is not set
+# CONFIG_OSI_TRACE_LEVEL_VERBOSE is not set
+CONFIG_OSI_INITIAL_TRACE_LEVEL=2
+# CONFIG_BLUFI_TRACE_LEVEL_NONE is not set
+# CONFIG_BLUFI_TRACE_LEVEL_ERROR is not set
+CONFIG_BLUFI_TRACE_LEVEL_WARNING=y
+# CONFIG_BLUFI_TRACE_LEVEL_API is not set
+# CONFIG_BLUFI_TRACE_LEVEL_EVENT is not set
+# CONFIG_BLUFI_TRACE_LEVEL_DEBUG is not set
+# CONFIG_BLUFI_TRACE_LEVEL_VERBOSE is not set
+CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2
+CONFIG_SMP_ENABLE=y
+# CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY is not set
+# CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_EN is not set
+CONFIG_BT_NIMBLE_COEX_PHY_CODED_TX_RX_TLIM_DIS=y
+CONFIG_SW_COEXIST_ENABLE=y
+CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y
+CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y
+# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set
+# CONFIG_EVENT_LOOP_PROFILING is not set
+CONFIG_POST_EVENTS_FROM_ISR=y
+CONFIG_POST_EVENTS_FROM_IRAM_ISR=y
+CONFIG_GDBSTUB_SUPPORT_TASKS=y
+CONFIG_GDBSTUB_MAX_TASKS=32
+# CONFIG_ESP_SYSTEM_PD_FLASH is not set
+CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y
+CONFIG_BROWNOUT_DET=y
+CONFIG_BROWNOUT_DET_LVL_SEL_7=y
+# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set
+# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set
+CONFIG_BROWNOUT_DET_LVL=7
+CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y
+CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y
+# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set
+CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20
+CONFIG_ESP32_PHY_MAX_TX_POWER=20
+# CONFIG_REDUCE_PHY_TX_POWER is not set
+# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set
+CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32
+CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304
+CONFIG_MAIN_TASK_STACK_SIZE=3584
+CONFIG_CONSOLE_UART_DEFAULT=y
+# CONFIG_CONSOLE_UART_CUSTOM is not set
+# CONFIG_CONSOLE_UART_NONE is not set
+# CONFIG_ESP_CONSOLE_UART_NONE is not set
+CONFIG_CONSOLE_UART=y
+CONFIG_CONSOLE_UART_NUM=0
+CONFIG_CONSOLE_UART_BAUDRATE=74880
+CONFIG_INT_WDT=y
+CONFIG_INT_WDT_TIMEOUT_MS=300
+CONFIG_TASK_WDT=y
+CONFIG_ESP_TASK_WDT=y
+# CONFIG_TASK_WDT_PANIC is not set
+CONFIG_TASK_WDT_TIMEOUT_S=5
+CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y
+# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set
+CONFIG_IPC_TASK_STACK_SIZE=1024
+CONFIG_TIMER_TASK_STACK_SIZE=3584
+CONFIG_ESP32_WIFI_ENABLED=y
+CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10
+CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32
+# CONFIG_ESP32_WIFI_STATIC_TX_BUFFER is not set
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER=y
+CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=1
+CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=32
+CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y
+CONFIG_ESP32_WIFI_TX_BA_WIN=6
+CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y
+CONFIG_ESP32_WIFI_RX_BA_WIN=6
+CONFIG_ESP32_WIFI_NVS_ENABLED=y
+CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752
+CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32
+CONFIG_ESP32_WIFI_IRAM_OPT=y
+CONFIG_ESP32_WIFI_RX_IRAM_OPT=y
+CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y
+CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y
+CONFIG_WPA_MBEDTLS_CRYPTO=y
+CONFIG_WPA_MBEDTLS_TLS_CLIENT=y
+# CONFIG_WPA_11KV_SUPPORT is not set
+# CONFIG_WPA_MBO_SUPPORT is not set
+# CONFIG_WPA_DPP_SUPPORT is not set
+# CONFIG_WPA_11R_SUPPORT is not set
+# CONFIG_WPA_WPS_STRICT is not set
+# CONFIG_WPA_DEBUG_PRINT is not set
+# CONFIG_WPA_TESTING_OPTIONS is not set
+CONFIG_TIMER_TASK_PRIORITY=1
+CONFIG_TIMER_TASK_STACK_DEPTH=2048
+CONFIG_TIMER_QUEUE_LENGTH=10
+# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set
+# CONFIG_HAL_ASSERTION_SILIENT is not set
+# CONFIG_L2_TO_L3_COPY is not set
+CONFIG_ESP_GRATUITOUS_ARP=y
+CONFIG_GARP_TMR_INTERVAL=60
+CONFIG_TCPIP_RECVMBOX_SIZE=32
+CONFIG_TCP_MAXRTX=12
+CONFIG_TCP_SYNMAXRTX=12
+CONFIG_TCP_MSS=1440
+CONFIG_TCP_MSL=60000
+CONFIG_TCP_SND_BUF_DEFAULT=5760
+CONFIG_TCP_WND_DEFAULT=5760
+CONFIG_TCP_RECVMBOX_SIZE=6
+CONFIG_TCP_QUEUE_OOSEQ=y
+CONFIG_TCP_OVERSIZE_MSS=y
+# CONFIG_TCP_OVERSIZE_QUARTER_MSS is not set
+# CONFIG_TCP_OVERSIZE_DISABLE is not set
+CONFIG_UDP_RECVMBOX_SIZE=6
+CONFIG_TCPIP_TASK_STACK_SIZE=3072
+CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y
+# CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set
+CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF
+# CONFIG_PPP_SUPPORT is not set
+CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set
+# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set
+# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set
+CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y
+CONFIG_NEWLIB_NANO_FORMAT=y
+CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set
+# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set
+CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5
+CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072
+CONFIG_ESP32_PTHREAD_STACK_MIN=768
+CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1
+CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread"
+CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_FAILS is not set
+# CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ALLOWED is not set
+CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y
+CONFIG_SUPPORT_TERMIOS=y
+CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1
+# End of deprecated options
diff --git a/test.txt b/test.txt
new file mode 100644 (file)
index 0000000..390bf0f
--- /dev/null
+++ b/test.txt
@@ -0,0 +1,144 @@
+// GET(Get:download_url)
+    ESP_LOGI(HTTP_TAG, "\nHTTP STEP 4........................");
+    for(uint8_t retry=0;retry<3;retry++)
+    {
+        result = 0;
+
+        if(common_setting.net_pairing_info.http_url_flag == 0 || common_setting.net_pairing_info.serial_number_flag == 0)
+        {
+            result = 3;
+            break;
+        }
+
+        char url[NET_PAIRING_INFO_MAX_LEN] = {0};
+        char path[] = "/iot/device/getDeviceBySerialNumber/";
+        memset(url, 0x00, sizeof(url));
+        memcpy(url, common_setting.net_pairing_info.http_url, common_setting.net_pairing_info.http_url_length);
+        memcpy(&url[common_setting.net_pairing_info.http_url_length], path, strlen(path));
+        memcpy(&url[common_setting.net_pairing_info.http_url_length+strlen(path)], common_setting.net_pairing_info.serial_number, common_setting.net_pairing_info.serial_number_length);
+        http_config.url = url;
+
+        ESP_LOGI(HTTP_TAG, "http_config.url = %s", http_config.url);
+        esp_http_client_handle_t http_client = esp_http_client_init(&http_config);
+        esp_http_client_set_header(http_client, "Authorization", (const char*)common_setting.net_pairing_info.http_token);
+        esp_http_client_set_method(http_client, HTTP_METHOD_GET);
+
+        esp_err_t err = esp_http_client_open(http_client, 0);
+        if(err == ESP_OK)
+        {
+            int header_ret = esp_http_client_fetch_headers(http_client);
+            ESP_LOGI(HTTP_TAG, "esp_http_client_fetch_headers = %d", header_ret);
+            if (header_ret >= 0)
+            {
+                memset(output_buffer, 0x00, sizeof(output_buffer));
+                int data_read = esp_http_client_read_response(http_client, output_buffer, MAX_HTTP_OUTPUT_BUFFER);
+                if (data_read >= 0)
+                {
+                    int status_code = esp_http_client_get_status_code(http_client);
+                    int read_len = esp_http_client_get_content_length(http_client);
+                    ESP_LOGI(HTTP_TAG, "HTTP GET Status = %d, content_length = %"PRId64, status_code, read_len);
+                    // ESP_LOG_BUFFER_CHAR(HTTP_TAG, output_buffer, data_read);
+                    ESP_LOGI(HTTP_TAG, "\nrecv data: %s\n", output_buffer);
+                    
+                    if(status_code == 200)
+                    {
+                        cJSON* root_base = cJSON_Parse(output_buffer);
+                        if(root_base != NULL)
+                        {
+                            cJSON* pData = cJSON_GetObjectItem(root_base,"data");
+                            if(pData != NULL)
+                            {
+                                cJSON* pStatus = cJSON_GetObjectItem(pData,"status");
+                                cJSON* pClientCrt = cJSON_GetObjectItem(pData,"clientcrtUrl");
+                                cJSON* pClientkey = cJSON_GetObjectItem(pData,"clientkeyUrl");
+                                cJSON* pServerCrt = cJSON_GetObjectItem(pData,"mosquittoorgcrtUrl");
+                                cJSON* pMqttSubUrl = cJSON_GetObjectItem(pData,"mqttUrl");
+                                //get the value
+                                int sStatus = 0;
+                                if(pStatus != NULL && cJSON_IsString(pStatus) == false)
+                                {
+                                    sStatus = pStatus->valueint;
+                                    if(sStatus != 2)
+                                    {
+                                        ESP_LOGI(HTTP_TAG, "Status fail: %d\n", sStatus);
+                                        result = 2;
+                                    }
+                                }
+                                if(pClientCrt != NULL)
+                                {
+                                    char* sClientCrt = pClientCrt->valuestring;
+                                    ESP_LOGI(HTTP_TAG, "sClientCrt: %s\n", sClientCrt);
+                                }
+                                if(pClientkey != NULL)
+                                {
+                                    char* sClientkey = pClientkey->valuestring;
+                                    ESP_LOGI(HTTP_TAG, "sClientkey: %s\n", sClientkey);
+                                }
+                                if(pServerCrt != NULL)
+                                {
+                                    char* sServerCrt = pServerCrt->valuestring;
+                                    ESP_LOGI(HTTP_TAG, "sServerCrt: %s\n", sServerCrt);
+                                }
+                                if(pMqttSubUrl != NULL)
+                                {
+                                    char* sMqttSubUrl = pMqttSubUrl->valuestring;
+                                    ESP_LOGI(HTTP_TAG, "sMqttSubUrl: %s\n", sMqttSubUrl);
+                                }
+
+                                // 确保链接都存在,开始下载保存
+                                if(pStatus != NULL && sStatus == 2 && pClientCrt != NULL && pClientkey != NULL && pServerCrt != NULL && pMqttSubUrl != NULL)
+                                {
+                                    result = 1;
+                                    memset(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], 0x00, sizeof(http_get_cert_task_param.url[SSL_CLIENT_CRT]));
+                                    memset(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], 0x00, strlen(http_get_cert_task_param.url[SSL_CLIENT_KEY]));
+                                    memset(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], 0x00, strlen(http_get_cert_task_param.url[SSL_SERVER_CRT]));
+                                    memcpy(&http_get_cert_task_param.url[SSL_CLIENT_CRT][0], pClientCrt->valuestring, strlen((const char*)pClientCrt->valuestring));
+                                    memcpy(&http_get_cert_task_param.url[SSL_CLIENT_KEY][0], pClientkey->valuestring, strlen((const char*)pClientkey->valuestring));
+                                    memcpy(&http_get_cert_task_param.url[SSL_SERVER_CRT][0], pServerCrt->valuestring, strlen((const char*)pServerCrt->valuestring));
+                                    http_download_crt_task_handler = xTaskCreateStatic(http_download_task, "http_download_task", HTTP_DOWNLOAD_CRT_TASK_STACK, NULL, 2, http_download_crt_task_stack, &http_download_crt_task_tcb);
+                                    ESP_LOGI(HTTP_TAG, "[APP] Free memory http2 on: %" PRIu32 " bytes", esp_get_free_heap_size());
+                                }
+                                else
+                                {
+                                    ESP_LOGI(HTTP_TAG, "url not exist\n");
+                                    result = 2;
+                                }
+                            }
+                            else
+                            {
+                                result = 2;
+                            }
+                            cJSON_Delete(root_base);
+                        }
+                        else
+                        {
+                            result = 2;
+                            ESP_LOGI(HTTP_TAG, "root_base is null\n");
+                        }
+                    }
+                    else
+                    {
+                        result = 2;
+                    }
+                }
+                else
+                {
+                    ESP_LOGE(HTTP_TAG, "Failed to read response");
+                }
+            }
+        }
+        esp_http_client_close(http_client);
+        esp_http_client_cleanup(http_client);
+
+        // 结果
+        if(result == 1)
+        {
+            break;
+        }
+    }
+    if(result != 1)
+    {
+        // 失败
+        ESP_LOGI(HTTP_TAG, "http_get_url_task fail 4:%d\n", result);
+        vTaskDelete(NULL);
+    }
\ No newline at end of file
diff --git a/url.txt b/url.txt
new file mode 100644 (file)
index 0000000..9ec7544
--- /dev/null
+++ b/url.txt
@@ -0,0 +1 @@
+mqtts://a3l6aw6tvk7fvq-ats.iot.us-east-1.amazonaws.com:8883
\ No newline at end of file
diff --git a/version.txt b/version.txt
new file mode 100644 (file)
index 0000000..9af20ed
--- /dev/null
@@ -0,0 +1 @@
+V0.0.0_20260423_0936
diff --git a/公网测试环境证书.zip b/公网测试环境证书.zip
new file mode 100644 (file)
index 0000000..148adaf
Binary files /dev/null and "b/\345\205\254\347\275\221\346\265\213\350\257\225\347\216\257\345\242\203\350\257\201\344\271\246.zip" differ