diff --git a/.gitignore b/.gitignore index 009af73..5f97938 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ Archive/** build .images - +managed_components diff --git a/devices/mbits-esp32s2-wrover/.gitignore b/devices/mbits-esp32s2-wrover/.gitignore index 4cbedfa..58f998f 100644 --- a/devices/mbits-esp32s2-wrover/.gitignore +++ b/devices/mbits-esp32s2-wrover/.gitignore @@ -1,2 +1,4 @@ build -sdkconfig.old \ No newline at end of file +sdkconfig.old +managed_components +managed_components \ No newline at end of file diff --git a/devices/mbits-esp32s2-wrover/CMakeLists.txt b/devices/mbits-esp32s2-wrover/CMakeLists.txt index 39eb1c6..1b03e2e 100644 --- a/devices/mbits-esp32s2-wrover/CMakeLists.txt +++ b/devices/mbits-esp32s2-wrover/CMakeLists.txt @@ -29,31 +29,66 @@ list(APPEND EXTRA_COMPONENT_DIRS ${COMPONENT_DIR}/ROSMicroPy ) +set(IDF_TARGET esp32) +# Set the board if it's not already set. +if(NOT MICROPY_BOARD) + set(MICROPY_BOARD ESP32_GENERIC) +endif() +get_filename_component(MICROPY_DIR ${PROJECT_DIR}/../../libs/micropython ABSOLUTE) +set (MICROPY_ARCH_DIR ${MICROPY_DIR}/ports/${IDF_TARGET} ) +set (MICROPY_BOARD_DIR ${MICROPY_ARCH_DIR}/boards/${MICROPY_BOARD}) -file(WRITE ${CMAKE_BINARY_DIR}/sdkconfig.combined.in "") -# -# Project Config -# -file(READ ${PROJECT_DIR}/sdkconfig CONTENTS) -file(APPEND ${CMAKE_BINARY_DIR}/sdkconfig.combined.in "${CONTENTS}") +message ("\r\nMicropython CMake #1") +message ("Project Dir: ${PROJECT_DIR}") +message ("CMake Source Dir: ${CMAKE_SOURCE_DIR}") +message ("Micropython Dir: ${MICROPY_DIR}") +message( "MicroPy Arch Dir: ${MICROPY_ARCH_DIR}") +message( "MicroPy Board Dir: ${MICROPY_BOARD_DIR}") + +# Include board config; this is expected to set (among other options): +# - SDKCONFIG_DEFAULTS +# - IDF_TARGET +include(${MICROPY_BOARD_DIR}/mpconfigboard.cmake) + +message("\r\nWrite Config File Starting..") -# -# Micropython Config -# message("\r\n\nSDK Defaults ${SDKCONFIG_DEFAULTS}") message("MICROPY Archdir: ${MICROPY_ARCH_DIR}") -include(${MICROPY_BOARD_DIR}/mpconfigboard.cmake) +set(SDK_CONFIG_FILE_IN ${PROJECT_DIR}/sdkconfig) +set(SDK_CONFIG_FILE ${PROJECT_DIR}/sdkconfig.combined) +set(SDK_CONFIG_FILE_BUILD ${CMAKE_BINARY_DIR}/sdkconfig) + +# Concatenate all sdkconfig files into a combined one for the IDF to use. +file(WRITE ${SDK_CONFIG_FILE} "") + +# +# Main Project config +# +file(READ ${SDK_CONFIG_FILE_IN} CONTENTS) +file(APPEND ${SDK_CONFIG_FILE} "${CONTENTS}") + +# +# Micropython Support +# foreach(SDKCONFIG_DEFAULT ${SDKCONFIG_DEFAULTS}) set(SDKCONFIG_DEFAULT_FULLPATH ${MICROPY_ARCH_DIR}/${SDKCONFIG_DEFAULT}) - message("SDK DEFAULT: ${SDK_DEFAULT_FULLPATH}") + message("SDK DEFAULT FULL: ${SDKCONFIG_DEFAULT_FULLPATH}") file(READ ${SDKCONFIG_DEFAULT_FULLPATH} CONTENTS) - file(APPEND ${CMAKE_BINARY_DIR}/sdkconfig.combined.in "${CONTENTS}") + file(APPEND ${SDK_CONFIG_FILE} "${CONTENTS}") endforeach() -configure_file(${CMAKE_BINARY_DIR}/sdkconfig.combined.in ${CMAKE_BINARY_DIR}/sdkconfig COPYONLY) -set(SDKCONFIG_DEFAULTS ${CMAKE_BINARY_DIR}/sdkconfig) + +message("\r\nSDK_CONFIG_FILE ${SDK_CONFIG_FILE}") +message("\r\nSDK_CONFIG_FILE_BUILD ${SDK_CONFIG_FILE_BUILD}") +# +# Write Output +# +configure_file(${SDK_CONFIG_FILE} ${SDK_CONFIG_FILE_BUILD} ) +set(SDKCONFIG_DEFAULTS ${SDK_CONFIG_FILE_BUILD}) + +message("\r\nWrite Config File Complete") include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(mbits-esp32s2-wrover) diff --git a/devices/mbits-esp32s2-wrover/clean b/devices/mbits-esp32s2-wrover/clean index ce1af69..d991cba 100755 --- a/devices/mbits-esp32s2-wrover/clean +++ b/devices/mbits-esp32s2-wrover/clean @@ -3,6 +3,7 @@ clear idf.py clean idf.py fullclean rm -rf ./build -idf.py build +idf.py reconfigure + diff --git a/devices/mbits-esp32s2-wrover/dependencies.lock b/devices/mbits-esp32s2-wrover/dependencies.lock index 1ec0ac4..028d61c 100644 --- a/devices/mbits-esp32s2-wrover/dependencies.lock +++ b/devices/mbits-esp32s2-wrover/dependencies.lock @@ -1,15 +1,21 @@ dependencies: + ROSMicroPy: + component_hash: null + source: + path: /opt/rosmicropy/extra_packages/ROSMicroPy/main_esp32 + type: local + version: '*' espressif/mdns: - component_hash: d96d277207c4fec77ec290b7a8b0ca4043e10f407df0ff6aa52e54a94f0c54a5 + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed source: service_url: https://api.components.espressif.com/ type: service - version: 1.2.4 + version: 1.1.0 idf: component_hash: null source: type: idf - version: 5.1.2 -manifest_hash: f1a572a6b8b65aece61b0a0f76d62584e1a3d1245f1ab9b4ca2e98bd39ba616e + version: 5.1.3 +manifest_hash: 05172dac7e7c17ef4f869ca444c8d81e91435c460889f1960a676ed43dda1ef9 target: esp32 version: 1.0.0 diff --git a/devices/mbits-esp32s2-wrover/main/CMakeLists.txt b/devices/mbits-esp32s2-wrover/main/CMakeLists.txt index f79e7af..db1487e 100644 --- a/devices/mbits-esp32s2-wrover/main/CMakeLists.txt +++ b/devices/mbits-esp32s2-wrover/main/CMakeLists.txt @@ -1,6 +1,4 @@ -message ("\r\nIn main component cmake file") +message ("\r\nEnter main component cmake file") -message ("\r\n Project Dir: ${PROJECT_DIR}") -message ("\r\n CMake Source Dir: ${CMAKE_SOURCE_DIR}") -message ("\r\n Component Dir is ${COMPONENT_DIR}") +message ("\r\nExit main component cmake file") diff --git a/devices/mbits-esp32s2-wrover/main/idf_component.yml b/devices/mbits-esp32s2-wrover/main/idf_component.yml index 6571fdc..7457cf5 100644 --- a/devices/mbits-esp32s2-wrover/main/idf_component.yml +++ b/devices/mbits-esp32s2-wrover/main/idf_component.yml @@ -1,7 +1,9 @@ ## IDF Component Manager Manifest File dependencies: - espressif/mdns: "*" + #espressif/mdns: "*" ## Required IDF version + ROSMicroPy: + path: '../../../extra_packages/ROSMicroPy/main_esp32' idf: version: ">=4.1.0" # # Put list of dependencies here diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.build-test-rules.yml b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.build-test-rules.yml deleted file mode 100644 index 9a4da23..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.build-test-rules.yml +++ /dev/null @@ -1,11 +0,0 @@ -components/mdns/examples: - disable: - - if: IDF_TARGET in ["esp32h2"] - -components/mdns/tests/unit_test: - disable: - - if: IDF_TARGET in ["esp32h2"] - -components/mdns/tests/test_apps: - disable: - - if: IDF_TARGET in ["esp32h2"] diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.component_hash b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.component_hash deleted file mode 100644 index 6905363..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.component_hash +++ /dev/null @@ -1 +0,0 @@ -d96d277207c4fec77ec290b7a8b0ca4043e10f407df0ff6aa52e54a94f0c54a5 \ No newline at end of file diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.cz.yaml b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.cz.yaml deleted file mode 100644 index 331633d..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/.cz.yaml +++ /dev/null @@ -1,8 +0,0 @@ ---- -commitizen: - bump_message: 'bump(mdns): $current_version -> $new_version' - pre_bump_hooks: python ../../ci/changelog.py mdns - tag_format: mdns-v$version - version: 1.2.4 - version_files: - - idf_component.yml diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/CHANGELOG.md b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/CHANGELOG.md deleted file mode 100644 index d59ad7b..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/CHANGELOG.md +++ /dev/null @@ -1,395 +0,0 @@ -# Changelog - -## [1.2.4](https://github.com/espressif/esp-protocols/commits/mdns-v1.2.4) - -### Bug Fixes - -- Correction on 6d2c475 MDNS_PREDEF_NETIF_ETH fix ([fc59f87c4e](https://github.com/espressif/esp-protocols/commit/fc59f87c4e)) -- fix the logic of creating pcb for networking socket ([5000a9a20a](https://github.com/espressif/esp-protocols/commit/5000a9a20a)) -- fix compiling issue when disabling IPv4 ([2646dcd23a](https://github.com/espressif/esp-protocols/commit/2646dcd23a)) -- Fix compile error when MDNS_PREDEF_NETIF_ETH is defined, but ETH_ENABLED is not (#459) ([6d2c475c20](https://github.com/espressif/esp-protocols/commit/6d2c475c20)) - -## [1.2.3](https://github.com/espressif/esp-protocols/commits/mdns-v1.2.3) - -### Bug Fixes - -- fixed CI issues for host and afl tests ([4be5efc84e](https://github.com/espressif/esp-protocols/commit/4be5efc84e)) -- fix copy delegated host addr ([19fb36000c](https://github.com/espressif/esp-protocols/commit/19fb36000c)) -- enable CONFIG_ESP_WIFI_ENABLED if CONFIG_SOC_WIFI_SUPPORTED is also enabled (for ESP-IDF <= 5.1) ([d20a718320](https://github.com/espressif/esp-protocols/commit/d20a718320)) -- remove protocol_examples_common ([1ee9dae6bf](https://github.com/espressif/esp-protocols/commit/1ee9dae6bf)) -- move the example into a subdirectory ([d28232b9f8](https://github.com/espressif/esp-protocols/commit/d28232b9f8)) -- reference protocol_examples_common from IDF ([c83b76ea8f](https://github.com/espressif/esp-protocols/commit/c83b76ea8f)) - -## [1.2.2](https://github.com/espressif/esp-protocols/commits/mdns-v1.2.2) - -### Bug Fixes - -- add terminator for the getting host name ([b6a4d94](https://github.com/espressif/esp-protocols/commit/b6a4d94)) -- Enable ESP_WIFI_CONFIG when ESP-IDF <= 5.1 ([0b783c0](https://github.com/espressif/esp-protocols/commit/0b783c0)) -- set host list NULL on destroy ([ea54eef](https://github.com/espressif/esp-protocols/commit/ea54eef)) -- removed Wno-format flag and fixed formatting warnings ([c48e442](https://github.com/espressif/esp-protocols/commit/c48e442)) -- remove the the range of MDNS_MAX_SERVICES and fix issues of string functions ([3dadce2](https://github.com/espressif/esp-protocols/commit/3dadce2)) - -## [1.2.1](https://github.com/espressif/esp-protocols/commits/mdns-v1.2.1) - -### Features - -- Allow setting length of mDNS action queue in menuconfig ([28cd898](https://github.com/espressif/esp-protocols/commit/28cd898)) - -### Bug Fixes - -- fix build issue if CONFIG_ESP_WIFI_ENABLED disabled ([24f7031](https://github.com/espressif/esp-protocols/commit/24f7031)) -- added idf_component.yml for examples ([d273e10](https://github.com/espressif/esp-protocols/commit/d273e10)) -- added guard check for null pointer ([71bb461](https://github.com/espressif/esp-protocols/commit/71bb461)) - -## [1.2.0](https://github.com/espressif/esp-protocols/commits/mdns-v1.2.0) - -### Features - -- add an API for setting address to a delegated host ([ddc3eb6](https://github.com/espressif/esp-protocols/commit/ddc3eb6)) -- Add support for lwip build under linux ([588465d](https://github.com/espressif/esp-protocols/commit/588465d)) -- Allow for adding a delegated host with no address ([c562461](https://github.com/espressif/esp-protocols/commit/c562461)) -- Add APIs for looking up self hosted services and getting the self hostname ([f0df12d](https://github.com/espressif/esp-protocols/commit/f0df12d)) - -### Bug Fixes - -- Refactor freertos linux compat layers ([79a0e57](https://github.com/espressif/esp-protocols/commit/79a0e57)) -- Fix delegated service PTR response ([cab0e1d](https://github.com/espressif/esp-protocols/commit/cab0e1d)) -- Added unit tests to CI + minor fix to pass it ([c974c14](https://github.com/espressif/esp-protocols/commit/c974c14)) - -### Updated - -- docs: update documentation links ([4de5298](https://github.com/espressif/esp-protocols/commit/4de5298)) - -## [1.1.0](https://github.com/espressif/esp-protocols/commits/mdns-v1.1.0) - -### Features - -- Decouple main module from mdns-networking ([d238e93](https://github.com/espressif/esp-protocols/commit/d238e93)) - -### Bug Fixes - -- Use idf-build-apps package for building mdns ([1a0a41f](https://github.com/espressif/esp-protocols/commit/1a0a41f)) -- socket networking to init interfaces properly ([ee9b04f](https://github.com/espressif/esp-protocols/commit/ee9b04f)) -- Removed unused internal lock from mdns_server struct ([a06fb77](https://github.com/espressif/esp-protocols/commit/a06fb77)) -- Resolve conflicts only on self hosted items ([e69a9eb](https://github.com/espressif/esp-protocols/commit/e69a9eb), [#185](https://github.com/espressif/esp-protocols/issues/185)) -- Fix memory issues reported by valgrind ([0a682e7](https://github.com/espressif/esp-protocols/commit/0a682e7)) - -### Updated - -- docs(common): updated component and example links ([f48d9b2](https://github.com/espressif/esp-protocols/commit/f48d9b2)) -- Add APIs to look up delegated services ([87dcd7d](https://github.com/espressif/esp-protocols/commit/87dcd7d)) -- Fix deadly mdns crash ([4fa3023](https://github.com/espressif/esp-protocols/commit/4fa3023)) -- docs(common): improving documentation ([ca3fce0](https://github.com/espressif/esp-protocols/commit/ca3fce0)) -- append all ipv6 address in mdns answer ([5ed3e9a](https://github.com/espressif/esp-protocols/commit/5ed3e9a)) -- test(mdns): Host tests to use IDF's esp_event_stub ([537d170](https://github.com/espressif/esp-protocols/commit/537d170)) - -## [1.0.9](https://github.com/espressif/esp-protocols/commits/mdns-v1.0.9) - -### Features - -- Add reverse lookup to the example and test ([d464ed7](https://github.com/espressif/esp-protocols/commit/d464ed7)) -- Add support for IPv6 reverse query ([d4825f5](https://github.com/espressif/esp-protocols/commit/d4825f5)) - -### Bug Fixes - -- Reintroduce missing CHANGELOGs ([200cbb3](https://github.com/espressif/esp-protocols/commit/200cbb3)) -- use semaphore instead of task notification bits (IDFGH-9380) ([73f2800](https://github.com/espressif/esp-protocols/commit/73f2800), [IDF#10754](https://github.com/espressif/esp-idf/issues/10754)) - -### Updated - -- ci(common): force scoping commit messages with components ([c55fcc0](https://github.com/espressif/esp-protocols/commit/c55fcc0)) -- Add homepage URL and License to all components ([ef3f0ee](https://github.com/espressif/esp-protocols/commit/ef3f0ee)) -- docs: fix of mdns link translation ([1c850dd](https://github.com/espressif/esp-protocols/commit/1c850dd)) -- unite all tags under common structure py test: update tags under common structure ([c6db3ea](https://github.com/espressif/esp-protocols/commit/c6db3ea)) - -## [1.0.8](https://github.com/espressif/esp-protocols/commits/b9b4a75) - -### Features - -- Add support for IPv4 reverse query ([b87bef5](https://github.com/espressif/esp-protocols/commit/b87bef5)) - -### Bug Fixes - -- Host test with IDFv5.1 ([fb8a2f0](https://github.com/espressif/esp-protocols/commit/fb8a2f0)) -- Remove strict mode as it's invalid ([d0c9070](https://github.com/espressif/esp-protocols/commit/d0c9070)) -- Allow setting instance name only after hostname set ([a8339e4](https://github.com/espressif/esp-protocols/commit/a8339e4), [#190](https://github.com/espressif/esp-protocols/issues/190)) -- Make unit test executable with pytest ([12cfcb5](https://github.com/espressif/esp-protocols/commit/12cfcb5)) -- AFL port layer per IDF-latest changes ([0247926](https://github.com/espressif/esp-protocols/commit/0247926)) - -### Updated - -- bump the component version to 1.0.8 ([b9b4a75](https://github.com/espressif/esp-protocols/commit/b9b4a75)) -- Make reverse query conditional per Kconfig ([91134f1](https://github.com/espressif/esp-protocols/commit/91134f1)) -- Added badges with version of components to the respective README files ([e4c8a59](https://github.com/espressif/esp-protocols/commit/e4c8a59)) -- fix some coverity reported issues ([c73c797](https://github.com/espressif/esp-protocols/commit/c73c797)) -- Examples: using pytest.ini from top level directory ([aee016d](https://github.com/espressif/esp-protocols/commit/aee016d)) -- mDNS: test_app pytest migration ([f71f61f](https://github.com/espressif/esp-protocols/commit/f71f61f)) -- CI: fixing the files to be complient with pre-commit hooks ([945bd17](https://github.com/espressif/esp-protocols/commit/945bd17)) -- prevent crash when hostname is null ([3498e86](https://github.com/espressif/esp-protocols/commit/3498e86)) -- Example tests integration ([a045c1c](https://github.com/espressif/esp-protocols/commit/a045c1c)) -- Replace hardcoded TTL values with named defines ([bb4c002](https://github.com/espressif/esp-protocols/commit/bb4c002)) -- Fix add_service() to report error if no-hostname ([656ab21](https://github.com/espressif/esp-protocols/commit/656ab21)) - - -## [1.0.7](https://github.com/espressif/esp-protocols/commits/088f7ac) - -### Updated - -- bump up the component version ([088f7ac](https://github.com/espressif/esp-protocols/commit/088f7ac)) -- fix IPV4 only build and also update CI configuration ([e079f8b](https://github.com/espressif/esp-protocols/commit/e079f8b)) -- add test configuration for IPV6 disabled build ([330332a](https://github.com/espressif/esp-protocols/commit/330332a)) - - -## [1.0.6](https://github.com/espressif/esp-protocols/commits/48c157b) - -### Bug Fixes - -- Example makefile to add only mdns as extra comps ([d74c296](https://github.com/espressif/esp-protocols/commit/d74c296)) -- ignore authoritative flag on reception ([415e04a](https://github.com/espressif/esp-protocols/commit/415e04a)) - -### Updated - -- fix build issue with CONFIG_LWIP_IPV6 disabled ([48c157b](https://github.com/espressif/esp-protocols/commit/48c157b)) -- fix bit order issue in DNS header flags ([c4e85bd](https://github.com/espressif/esp-protocols/commit/c4e85bd)) -- updated package version to 0.1.19 ([469f953](https://github.com/espressif/esp-protocols/commit/469f953)) - - -## [1.0.5](https://github.com/espressif/esp-protocols/commits/36de9af) - -### Features - -- Define explicit dependencies on esp-wifi ([36de9af](https://github.com/espressif/esp-protocols/commit/36de9af)) - -### Updated - -- bugfix: mdns IPv6 address convert error ([238ee96](https://github.com/espressif/esp-protocols/commit/238ee96)) - - -## [1.0.4](https://github.com/espressif/esp-protocols/commits/57afa38) - -### Updated - -- Bump asio/mdns/esp_websocket_client versions ([57afa38](https://github.com/espressif/esp-protocols/commit/57afa38)) -- ignore format warnings ([d66f9dc](https://github.com/espressif/esp-protocols/commit/d66f9dc)) -- Fix test_app build ([0b102f6](https://github.com/espressif/esp-protocols/commit/0b102f6)) - - -## [1.0.3](https://github.com/espressif/esp-protocols/commits/4868689) - -### Updated - -- Updated mDNS to explicitely use esp-eth dependency if needed ([4868689](https://github.com/espressif/esp-protocols/commit/4868689), [IDF@5e19b9c](https://github.com/espressif/esp-idf/commit/5e19b9c9518ae253d82400ab24b86af8af832425)) - - -## [1.0.2](https://github.com/espressif/esp-protocols/commits/8fe2a3a) - -### Features - -- fix bug when clean action memory ([81c219d](https://github.com/espressif/esp-protocols/commit/81c219d), [IDF@3d4deb9](https://github.com/espressif/esp-idf/commit/3d4deb972620cae8e8ce4d0050153cc6f39db372)) - -### Bug Fixes - -- add the maximum number of services ([0191d6f](https://github.com/espressif/esp-protocols/commit/0191d6f), [IDF@ba458c6](https://github.com/espressif/esp-idf/commit/ba458c69cfb2f18478d73690c289b09641c62004)) -- fix the exception when remove one of multiple service ([b26c866](https://github.com/espressif/esp-protocols/commit/b26c866), [IDF@696d733](https://github.com/espressif/esp-idf/commit/696d733eb04ee98f764dffdc82bcef51a724c9c6)) - -### Updated - -- Minor fixes here and there ([8fe2a3a](https://github.com/espressif/esp-protocols/commit/8fe2a3a)) -- mDNS: Initial version based on IDF 5.0 ([b6b20ad](https://github.com/espressif/esp-protocols/commit/b6b20ad)) -- soc: moved kconfig options out of the target component. ([4a52cf2](https://github.com/espressif/esp-protocols/commit/4a52cf2), [IDF@d287209](https://github.com/espressif/esp-idf/commit/d2872095f93ed82fb91c776081bc1d032493d93e)) -- cmake: fix issue with passing cxx_std option for GCC 11, a common workaround ([87c2699](https://github.com/espressif/esp-protocols/commit/87c2699), [IDF@ea0d212](https://github.com/espressif/esp-idf/commit/ea0d2123c806bd0ad77bc49843ee905cf9be65ff)) -- kconfig: Changed default values of bool configs - Some bool configs were using default values true and false, instead of y and n. ([eb536a7](https://github.com/espressif/esp-protocols/commit/eb536a7), [IDF@25c5c21](https://github.com/espressif/esp-idf/commit/25c5c214f38ca690b03533e12fb5a4d774c7eae0)) -- esp_netif: Remove tcpip_adapter compatibility layer ([3e93ea9](https://github.com/espressif/esp-protocols/commit/3e93ea9), [IDF@795b7ed](https://github.com/espressif/esp-idf/commit/795b7ed993784e3134195e12b0978504d83dfd56)) -- Fix copyright messages, update API descrition ([2c764b1](https://github.com/espressif/esp-protocols/commit/2c764b1), [IDF@42ba8a8](https://github.com/espressif/esp-idf/commit/42ba8a8338fd5efd82498a5989fc5c105938d447)) -- Add API to control custom network interfaces ([f836ae7](https://github.com/espressif/esp-protocols/commit/f836ae7), [IDF@b02468d](https://github.com/espressif/esp-idf/commit/b02468dc98d614f931d14cd8b5e2373ca51fb18d)) -- CI/mdns: Fix fuzzer build ([4b5f24f](https://github.com/espressif/esp-protocols/commit/4b5f24f), [IDF@98e9426](https://github.com/espressif/esp-idf/commit/98e9426b660a6e825f811cccd45a0722cc801ccd)) -- Add support for registering custom netif ([30f37c0](https://github.com/espressif/esp-protocols/commit/30f37c0), [IDF@bec42ff](https://github.com/espressif/esp-idf/commit/bec42ff85d5091d71e1cb1063bea20d7c6ac8c76)) -- Indicate interface using esp_netif in search results ([ddc58e8](https://github.com/espressif/esp-protocols/commit/ddc58e8), [IDF@f8495f1](https://github.com/espressif/esp-idf/commit/f8495f1e86de9a8e7d046bf13d0ca04775041b4c)) -- Use predefined interfaces to prepare for custom netifs ([fa951bf](https://github.com/espressif/esp-protocols/commit/fa951bf), [IDF@f90b3b7](https://github.com/espressif/esp-idf/commit/f90b3b798b446382d848f8c55c5e1653c81871cd)) -- Prepare for dynamic esp-netif support ([605d1fa](https://github.com/espressif/esp-protocols/commit/605d1fa), [IDF@f9892f7](https://github.com/espressif/esp-idf/commit/f9892f77b88ba77dc6608ba746175f6dc64a7607)) -- esp_hw_support/esp_system: Re-evaluate header inclusions and include directories ([58bf218](https://github.com/espressif/esp-protocols/commit/58bf218), [IDF@a9fda54](https://github.com/espressif/esp-idf/commit/a9fda54d39d1321005c3bc9b3cc268d0b7e9f052)) -- system: move kconfig options out of target component ([ec491ec](https://github.com/espressif/esp-protocols/commit/ec491ec), [IDF@bb88338](https://github.com/espressif/esp-idf/commit/bb88338118957c2214a4c0a33cd4a152e2e1f8ba)) -- Update to drop our own packet if bounced back ([94ae672](https://github.com/espressif/esp-protocols/commit/94ae672), [IDF@b5149e3](https://github.com/espressif/esp-idf/commit/b5149e3ee73728f790798e6757d732fe426e21c7)) -- Fix potential read behind parsed packet ([e5a3a3d](https://github.com/espressif/esp-protocols/commit/e5a3a3d), [IDF@51a5de2](https://github.com/espressif/esp-idf/commit/51a5de2525d0e82adea2e298a0edcc9b2dee5edd)) -- Fix memleak when adding delegated host ([7710ea9](https://github.com/espressif/esp-protocols/commit/7710ea9), [IDF@9cbdb87](https://github.com/espressif/esp-idf/commit/9cbdb8767bdf6e9745e895b2c5af74d0376965e7)) -- Fix null-service issue when parsing packets ([034c55e](https://github.com/espressif/esp-protocols/commit/034c55e), [IDF#8307](https://github.com/espressif/esp-idf/issues/8307), [IDF@a57be7b](https://github.com/espressif/esp-idf/commit/a57be7b7d1135ddb29f9da636e9ad315f7fa1fa7)) -- Update fuzzer test (add delegation, check memory) ([ec03fec](https://github.com/espressif/esp-protocols/commit/ec03fec), [IDF@2c10071](https://github.com/espressif/esp-idf/commit/2c1007156e01b4707b5c89d73cad05c0eef0264f)) -- Remove legacy esp_event API ([5909e9e](https://github.com/espressif/esp-protocols/commit/5909e9e), [IDF@e46aa51](https://github.com/espressif/esp-idf/commit/e46aa515bdf5606a3d868f1034774d5fc96904b8)) -- added missing includes ([82e2a5d](https://github.com/espressif/esp-protocols/commit/82e2a5d), [IDF@28d09c7](https://github.com/espressif/esp-idf/commit/28d09c7dbe145ffa6a7dd90531062d4f7669a9c8)) -- Clear notification value in mdns_hostname_set ([48e4d40](https://github.com/espressif/esp-protocols/commit/48e4d40), [IDF@83a4ddb](https://github.com/espressif/esp-idf/commit/83a4ddbd250e2b386bccabb4705d4c58c1a22bcb)) -- esp_timer: remove legacy ESP32 FRC timer implementation. ([ac6dcb6](https://github.com/espressif/esp-protocols/commit/ac6dcb6), [IDF@edb76f1](https://github.com/espressif/esp-idf/commit/edb76f14d6b3e925568ff04a87befe733ecc4517)) -- freertos: Remove legacy data types ([085dbd8](https://github.com/espressif/esp-protocols/commit/085dbd8), [IDF@57fd78f](https://github.com/espressif/esp-idf/commit/57fd78f5baf93a368a82cf4b2e00ca17ffc09115)) -- Tools: Custom baud-rate setup is not possible for IDF Monitor from menuconfig anymore ([f78e8cf](https://github.com/espressif/esp-protocols/commit/f78e8cf), [IDF@36a4011](https://github.com/espressif/esp-idf/commit/36a4011ff8985bfbae08ba0272194e6c3ef93bbf)) -- Use memcpy() for copy to support non-text TXTs ([6cdf5ee](https://github.com/espressif/esp-protocols/commit/6cdf5ee), [IDF@6aefe9c](https://github.com/espressif/esp-idf/commit/6aefe9c18563ed567d384a956cf02b6f57d6894c)) -- Support for null-value TXT records ([fcb5515](https://github.com/espressif/esp-protocols/commit/fcb5515), [IDF#8267](https://github.com/espressif/esp-idf/issues/8267), [IDF@23c2db4](https://github.com/espressif/esp-idf/commit/23c2db406dee8df09dbdba21cb7eef9fbca8bf27)) -- Fix alloc issue if TXT has empty value ([9fdbe5f](https://github.com/espressif/esp-protocols/commit/9fdbe5f), [IDF@205f6ba](https://github.com/espressif/esp-idf/commit/205f6ba8541e12d958c7c56af5a7136090f12a0e)) -- Fix random crash when defalt service instance queried ([20e6e9e](https://github.com/espressif/esp-protocols/commit/20e6e9e), [IDF@f46dffc](https://github.com/espressif/esp-idf/commit/f46dffca627e9578e49a510580f9754ec1e27e2e)) -- Fix minor memory leaks when creating services ([c588263](https://github.com/espressif/esp-protocols/commit/c588263), [IDF@fad62cc](https://github.com/espressif/esp-idf/commit/fad62cc1ed3dce63b58297172a72a489d7af2d9d)) -- Fix mDNS memory leak ([6258edf](https://github.com/espressif/esp-protocols/commit/6258edf), [IDF@119b4a9](https://github.com/espressif/esp-idf/commit/119b4a9dd12cf89cc5eaf63f8aa19730607ef30b)) -- Fix mDNS memory leak ([c8b0d5e](https://github.com/espressif/esp-protocols/commit/c8b0d5e), [IDF@f5ffd53](https://github.com/espressif/esp-idf/commit/f5ffd53aeb402afc1333a98168bb2fa35d7cdc77)) -- Use multi/uni-cast types in API ([5252b1d](https://github.com/espressif/esp-protocols/commit/5252b1d), [IDF@125c312](https://github.com/espressif/esp-idf/commit/125c3125524c71f4f48f635eda12e22fa3bca500)) -- Allow for unicast PTR queries ([4e11cc8](https://github.com/espressif/esp-protocols/commit/4e11cc8), [IDF@7eeeb01](https://github.com/espressif/esp-idf/commit/7eeeb01ea705745b027bd8bc11d2b142418e9927)) -- Fix potential null deref for ANY query type ([7af91ec](https://github.com/espressif/esp-protocols/commit/7af91ec), [IDF@99dd8ee](https://github.com/espressif/esp-idf/commit/99dd8eedb1a0e957f5f74344e3e4172e61c29ef8)) -- Make fuzzer layers compatible with llvm>=6 ([01256d3](https://github.com/espressif/esp-protocols/commit/01256d3), [IDF@1882cbe](https://github.com/espressif/esp-idf/commit/1882cbe44e6140bebb2d27dc18af06dfcb0157f5)) -- Fix copyright ([5a2d4ea](https://github.com/espressif/esp-protocols/commit/5a2d4ea), [IDF@c83678f](https://github.com/espressif/esp-idf/commit/c83678f64fe27844fc28050bde6433ccb04a0704)) -- Add mDNS miss comment ([9de3f53](https://github.com/espressif/esp-protocols/commit/9de3f53), [IDF@08e0813](https://github.com/espressif/esp-idf/commit/08e081340d9d76d1244e9f2dc527e5ae370b1fbe)) -- freertos: remove FREERTOS_ASSERT option ([bcabc8e](https://github.com/espressif/esp-protocols/commit/bcabc8e), [IDF@7255497](https://github.com/espressif/esp-idf/commit/72554971467a5edc9bd6e390cf8fe7b05e6ade81)) -- Minor err print fix in socket-networking layer ([dfb27b3](https://github.com/espressif/esp-protocols/commit/dfb27b3), [IDF@f1b8f5c](https://github.com/espressif/esp-idf/commit/f1b8f5c1023df7d649161bc76f2bcc9a8f8f4d8b)) -- unified errno format ([076c095](https://github.com/espressif/esp-protocols/commit/076c095), [IDF@87506f4](https://github.com/espressif/esp-idf/commit/87506f46e2922710f48a6b96ca75e53543ff45c4)) -- always send A/AAAA records in announcements ([7dd0bc1](https://github.com/espressif/esp-protocols/commit/7dd0bc1), [IDF@456f80b](https://github.com/espressif/esp-idf/commit/456f80b754ebd0bd74e02c7febdf461c6b573b7a)) -- filter instance name for ANY queries ([7e82a7c](https://github.com/espressif/esp-protocols/commit/7e82a7c), [IDF@5d0c473](https://github.com/espressif/esp-idf/commit/5d0c47303dd9ead0f2ad291dca1d4b7ce4e23b2b)) -- Fix potential null deref reported by fuzzer test ([ae381b7](https://github.com/espressif/esp-protocols/commit/ae381b7), [IDF@cb5653f](https://github.com/espressif/esp-idf/commit/cb5653fd940a9cd41e8554a6d753fab46e0459d7)) -- Minor fix of API description and API usage ([941dc5c](https://github.com/espressif/esp-protocols/commit/941dc5c), [IDF@c297301](https://github.com/espressif/esp-idf/commit/c297301ecc350f8315d7eaf78c72b4aba68d422a)) -- Added results count to MDNS ([525c649](https://github.com/espressif/esp-protocols/commit/525c649), [IDF@f391d61](https://github.com/espressif/esp-idf/commit/f391d610e8185631b5361dc6c844c4c04aac30b1)) -- fix mdns server instance mismatch ([f0839d9](https://github.com/espressif/esp-protocols/commit/f0839d9), [IDF@6173dd7](https://github.com/espressif/esp-idf/commit/6173dd78097216261277c20ebd92a53c68c47f89)) -- support multiple instance for mdns service txt set ([69902ea](https://github.com/espressif/esp-protocols/commit/69902ea), [IDF@50f6302](https://github.com/espressif/esp-idf/commit/50f6302c5d7c0498fa1baa6fd6129d8233971a81)) -- fix wrong PTR record count ([d0bbe88](https://github.com/espressif/esp-protocols/commit/d0bbe88), [IDF@5d3f815](https://github.com/espressif/esp-idf/commit/5d3f8157e0e481363ef93d54a29d957fc91cca86)) -- Build & config: Remove leftover files from the unsupported "make" build system ([4a9d55e](https://github.com/espressif/esp-protocols/commit/4a9d55e), [IDF@766aa57](https://github.com/espressif/esp-idf/commit/766aa5708443099f3f033b739cda0e1de101cca6)) -- Build & config: Remove the "make" build system ([be2a924](https://github.com/espressif/esp-protocols/commit/be2a924), [IDF@9c1d4f5](https://github.com/espressif/esp-idf/commit/9c1d4f5b549d6a7125e5c7c323c80d37361991cb)) -- freertos: update freertos folder structure to match upstream ([76fcd41](https://github.com/espressif/esp-protocols/commit/76fcd41), [IDF@4846222](https://github.com/espressif/esp-idf/commit/48462221029c7da4b1ea233e9e781cd57ff91c7e)) -- support service subtype ([fd8499c](https://github.com/espressif/esp-protocols/commit/fd8499c), [IDF#5508](https://github.com/espressif/esp-idf/issues/5508), [IDF@e7e8610](https://github.com/espressif/esp-idf/commit/e7e8610f563e0b8532a093ea8b803f0eb132fd0e)) -- Fix parsing non-standard queries ([38b4fe2](https://github.com/espressif/esp-protocols/commit/38b4fe2), [IDF#7694](https://github.com/espressif/esp-idf/issues/7694), [IDF@d16f9ba](https://github.com/espressif/esp-idf/commit/d16f9bade5beab3785677dd5b39ebc4e9c895008)) -- allow mutiple instances with same service type ([b266062](https://github.com/espressif/esp-protocols/commit/b266062), [IDF@b7a99f4](https://github.com/espressif/esp-idf/commit/b7a99f46587a69a2cd07e7616c3bb30b7b1a6edf)) -- Update copyright header ([5e087d8](https://github.com/espressif/esp-protocols/commit/5e087d8), [IDF@2a2b95b](https://github.com/espressif/esp-idf/commit/2a2b95b9c22bc5090d87a4f4317288b64b14fcd9)) -- Fix potential null dereference identified by fuzzer tests ([91a3d95](https://github.com/espressif/esp-protocols/commit/91a3d95), [IDF@e7dabb1](https://github.com/espressif/esp-idf/commit/e7dabb14f7c8fd9bd2bea55d8f1accc65323a1c0)) -- components/bt: move config BT_RESERVE_DRAM from bluedroid to ESP32 controller ([6d6dd2b](https://github.com/espressif/esp-protocols/commit/6d6dd2b), [IDF@b310c06](https://github.com/espressif/esp-idf/commit/b310c062cd25f249e00dd03dd27baed783921630)) -- add notification callback for async APIs ([52306e9](https://github.com/espressif/esp-protocols/commit/52306e9), [IDF@986603c](https://github.com/espressif/esp-idf/commit/986603cf07413b46c88c76c324bf500edcfb6171)) -- add more mdns result attributes ([d37ab6d](https://github.com/espressif/esp-protocols/commit/d37ab6d), [IDF@76ec76c](https://github.com/espressif/esp-idf/commit/76ec76c12c871554147343bb7141da1e5de58011)) -- Add host test using linux target ([5c55ea6](https://github.com/espressif/esp-protocols/commit/5c55ea6), [IDF@fc7e2d9](https://github.com/espressif/esp-idf/commit/fc7e2d9e908f61fb4b852cfae72aa5ff7c662ebc)) -- Implement mdns_networking using BSD sockets ([0c71c7b](https://github.com/espressif/esp-protocols/commit/0c71c7b), [IDF@73dfe84](https://github.com/espressif/esp-idf/commit/73dfe84bf295a850edfad39b6b097a71f15964dc)) -- fix crash when adding services without hostname set ([4c368c0](https://github.com/espressif/esp-protocols/commit/4c368c0), [IDF@5e98772](https://github.com/espressif/esp-idf/commit/5e98772eaf7e50d96cf2e6ecdfedcd928b61c864)) -- Fix fuzzer IDF-mock layer ([af22753](https://github.com/espressif/esp-protocols/commit/af22753), [IDF@619235c](https://github.com/espressif/esp-idf/commit/619235c2ee5a1fe8411bd2be2de8798209f95902)) -- Clean the main mdns module from lwip dependencies ([b0957e7](https://github.com/espressif/esp-protocols/commit/b0957e7), [IDF@54e3294](https://github.com/espressif/esp-idf/commit/54e329444a5dd19c51e84b5f1e16455a0f1c6225)) -- Add asynchronous query API ([47c7266](https://github.com/espressif/esp-protocols/commit/47c7266), [IDF#7090](https://github.com/espressif/esp-idf/issues/7090), [IDF@d81482d](https://github.com/espressif/esp-idf/commit/d81482d699232b22f4a5cbee2a76199a5285dadb)) -- Fix crashes reported by the fuzzer tests ([40da0d2](https://github.com/espressif/esp-protocols/commit/40da0d2), [IDF@4a2e726](https://github.com/espressif/esp-idf/commit/4a2e72677c6fb7681a7e2acd1a878d3deb114079)) -- mdns/fuzzer: Fix non-instrumentation test to reproduce fuzzer issues ([5f6b6f9](https://github.com/espressif/esp-protocols/commit/5f6b6f9), [IDF@dae8033](https://github.com/espressif/esp-idf/commit/dae803335e6bc6d9751a360cd3f675ce4027853b)) -- return ESP_OK rather than ERR_OK in API functions ([8a12082](https://github.com/espressif/esp-protocols/commit/8a12082), [IDF@2386113](https://github.com/espressif/esp-idf/commit/2386113972ee51ea93e9740d8c34bfe9289ce909)) -- fix memory leak in mdns_free when adding delegated hostnames ([46f28a8](https://github.com/espressif/esp-protocols/commit/46f28a8), [IDF@0baee93](https://github.com/espressif/esp-idf/commit/0baee932111268c4a2103e1c1adeb7d99914a937)) -- Support for One-Shot mDNS queries ([5a81eae](https://github.com/espressif/esp-protocols/commit/5a81eae), [IDF@f167238](https://github.com/espressif/esp-idf/commit/f167238fac37818aed75dc689eed54ad47528ab9)) -- allow explicit txt value length ([2ddaee2](https://github.com/espressif/esp-protocols/commit/2ddaee2), [IDF@b4e0088](https://github.com/espressif/esp-idf/commit/b4e0088b68321acc4698b01faec7e2ffbe1e37c1)) -- Fix crashes reported by the fuzzer ([27fc285](https://github.com/espressif/esp-protocols/commit/27fc285), [IDF@79ba738](https://github.com/espressif/esp-idf/commit/79ba738626d643d8c6f32bdcd455e0d2476f94c7)) -- Minor correction of the test code ([93e6efe](https://github.com/espressif/esp-protocols/commit/93e6efe), [IDF@7d76245](https://github.com/espressif/esp-idf/commit/7d762451731cb305c3b090509827740f0195a496)) -- Fix fuzzer from miss-interpreting adding services as timeouts ([bc4cda8](https://github.com/espressif/esp-protocols/commit/bc4cda8), [IDF@14099fe](https://github.com/espressif/esp-idf/commit/14099fe15efb1b0cde0a8370096c55bba62ff937)) -- fix test script delayed response ([8a8d58d](https://github.com/espressif/esp-protocols/commit/8a8d58d), [IDF@a4f2639](https://github.com/espressif/esp-idf/commit/a4f263948c35c13340b6f4b59a649c5073787d5e)) -- fix wrong SRV/PTR record handling ([402baeb](https://github.com/espressif/esp-protocols/commit/402baeb), [IDF@e613555](https://github.com/espressif/esp-idf/commit/e6135552d26480e39e11632437020535b1667b7a)) -- fix wrong service hostname after mangling ([9fa25ef](https://github.com/espressif/esp-protocols/commit/9fa25ef), [IDF@439b31d](https://github.com/espressif/esp-idf/commit/439b31d065eddfdfb6eb4cf9c00454edfebc3d9b)) -- fix empty address change announce packets ([121b525](https://github.com/espressif/esp-protocols/commit/121b525), [IDF@7bbb72d](https://github.com/espressif/esp-idf/commit/7bbb72d86540f04d37b0e2c4efb6dc66ee9c9ea0)) -- fix mdns probe/reply behavior ([418fb60](https://github.com/espressif/esp-protocols/commit/418fb60), [IDF@d2a5d25](https://github.com/espressif/esp-idf/commit/d2a5d25984432d149ca31aea4a0d177f3509dd7b)) -- make delegate host address a list ([4049b3b](https://github.com/espressif/esp-protocols/commit/4049b3b), [IDF@2d34352](https://github.com/espressif/esp-idf/commit/2d34352f3db0fa71366a838933a29138a90eb2af)) -- add remove delegate host api ([c882119](https://github.com/espressif/esp-protocols/commit/c882119), [IDF@2174693](https://github.com/espressif/esp-idf/commit/2174693096b73ce93261611c44ecba647cd01859)) -- add mdns delegation ([1eb5df9](https://github.com/espressif/esp-protocols/commit/1eb5df9), [IDF@401ff56](https://github.com/espressif/esp-idf/commit/401ff56cc1ad1d11284143a348cc0c0e4a363e98)) -- fix memory free issue when repeating the query in reply ([b62b4b3](https://github.com/espressif/esp-protocols/commit/b62b4b3), [IDF@5f244c8](https://github.com/espressif/esp-idf/commit/5f244c86f29da46c17610563a245d1663a46b439)) -- Fix of crash when wifi interface get deleted and mdns receives the packets ([4d8aec1](https://github.com/espressif/esp-protocols/commit/4d8aec1), [IDF#6973](https://github.com/espressif/esp-idf/issues/6973), [IDF@03de74a](https://github.com/espressif/esp-idf/commit/03de74a728d4b278f55e1fc30e0425483b806e80)) -- Docs: Added README.md for lwip fuzzer tests ([6d64910](https://github.com/espressif/esp-protocols/commit/6d64910), [IDF@53c18a8](https://github.com/espressif/esp-idf/commit/53c18a85db104bb37ebeadec2faf5d42d764d0f9)) -- Fixed the ip header TTL to be correctly set to 255 ([ab3fa69](https://github.com/espressif/esp-protocols/commit/ab3fa69), [IDF@5cce919](https://github.com/espressif/esp-idf/commit/5cce919cbef87f543bb9f5275b77b97b3b1ea67e)) -- Fix parsing answers with questions when instance name not set ([c3a5826](https://github.com/espressif/esp-protocols/commit/c3a5826), [IDF#6598](https://github.com/espressif/esp-idf/issues/6598), [IDF@3404945](https://github.com/espressif/esp-idf/commit/34049454dfaf5132d9b258ef4d04921befc8997b)) -- Fix the resolver to correctly parse it's own non-strict answers ([cbcbe4f](https://github.com/espressif/esp-protocols/commit/cbcbe4f), [IDF@b649603](https://github.com/espressif/esp-idf/commit/b649603a0d70ec804567f57752c3eddaed56198f)) -- Add MDNS_STRICT_MODE config option ([adc3430](https://github.com/espressif/esp-protocols/commit/adc3430), [IDF@0eee315](https://github.com/espressif/esp-idf/commit/0eee31546dd4e6df0d1c1cc2740da0675dffb4bf)) -- freertos: common config header ([c30617d](https://github.com/espressif/esp-protocols/commit/c30617d), [IDF@39cf818](https://github.com/espressif/esp-idf/commit/39cf818838b0259b3e00b3c198ad47b4add41939)) -- Removed freeRTOS dependancies from fuzzer tests ([1e5eeb1](https://github.com/espressif/esp-protocols/commit/1e5eeb1), [IDF@5571694](https://github.com/espressif/esp-idf/commit/55716945a9908e057743d69e1d59399df03e49bd)) -- mDNS: Updated APIs description and shows the warning when hostname contains domain name during the query ([22c7c0a](https://github.com/espressif/esp-protocols/commit/22c7c0a), [IDF#6590](https://github.com/espressif/esp-idf/issues/6590), [IDF@9f8d2b9](https://github.com/espressif/esp-idf/commit/9f8d2b944d2b3736a012e0dff1a8459b6941d295)) -- components: Use CONFIG_LWIP_IPV6 to strip IPv6 function in components ([1623c0e](https://github.com/espressif/esp-protocols/commit/1623c0e), [IDF@da58235](https://github.com/espressif/esp-idf/commit/da58235a0ee262ff552c5f1155d531b5c31e8de6)) -- add bound check when setting interface as duplicate ([b114ed6](https://github.com/espressif/esp-protocols/commit/b114ed6), [IDF@2b9d2c0](https://github.com/espressif/esp-idf/commit/2b9d2c06f54924b680c41ae641978c8d81612f65)) -- mDNS: Fix of text length calculation when detecting a collision ([2ffd223](https://github.com/espressif/esp-protocols/commit/2ffd223), [IDF@be0ae1e](https://github.com/espressif/esp-idf/commit/be0ae1ebbbe9fae6ecf7de09e8d50cba063b61f4)) -- global: fix sign-compare warnings ([1fe901f](https://github.com/espressif/esp-protocols/commit/1fe901f), [IDF@753a929](https://github.com/espressif/esp-idf/commit/753a9295259126217a9fe6ef1c5e9da21e9b4e28)) -- lwip: Moved default SNTP API to esp_sntp.h ([2cf9fd8](https://github.com/espressif/esp-protocols/commit/2cf9fd8), [IDF@76f6dd6](https://github.com/espressif/esp-idf/commit/76f6dd6214ca583b1a94c7c553ccac739a27f6d5)) -- Allow resolve its own non-strict answers ([89439e0](https://github.com/espressif/esp-protocols/commit/89439e0), [IDF#6190](https://github.com/espressif/esp-idf/issues/6190), [IDF@0693e17](https://github.com/espressif/esp-idf/commit/0693e172de392086b9bfd8cf1474d8d133af3298)) -- mDNS: Fix of collision detection during txt length calculation ([becd5d0](https://github.com/espressif/esp-protocols/commit/becd5d0), [IDF#6114](https://github.com/espressif/esp-idf/issues/6114), [IDF@f33772c](https://github.com/espressif/esp-idf/commit/f33772c96037c795366e60082bdbbefe2a69165f)) -- esp32c3: Apply one-liner/small changes for ESP32-C3 ([0d7a309](https://github.com/espressif/esp-protocols/commit/0d7a309), [IDF@5228d9f](https://github.com/espressif/esp-idf/commit/5228d9f9ced16118d87326f94d9f9dfd411e0be9)) -- test: fix several test build error ([1fdffbb](https://github.com/espressif/esp-protocols/commit/1fdffbb), [IDF@b7ecccd](https://github.com/espressif/esp-idf/commit/b7ecccd9010f1deaba83de54374231c3c7f5b472)) -- freertos: Add RISC-V port ([988d120](https://github.com/espressif/esp-protocols/commit/988d120), [IDF@87e13ba](https://github.com/espressif/esp-idf/commit/87e13baaf12fe6deae715d95e912a310fea4ba88)) -- Fix wrong mdns source address if lwIP IPv6 zones disabled ([fd47df3](https://github.com/espressif/esp-protocols/commit/fd47df3), [IDF@7ac9761](https://github.com/espressif/esp-idf/commit/7ac97616c119e4d2f4cdd377dfc5abbf75ec5e30)) -- Whitespace: Automated whitespace fixes (large commit) ([2cb3a6e](https://github.com/espressif/esp-protocols/commit/2cb3a6e), [IDF@66fb5a2](https://github.com/espressif/esp-idf/commit/66fb5a29bbdc2482d67c52e6f66b303378c9b789)) -- test_compile_fuzzers: Fix include paths for host build ([825652f](https://github.com/espressif/esp-protocols/commit/825652f), [IDF@98a0cc7](https://github.com/espressif/esp-idf/commit/98a0cc783f701b238bea232b53250a538d34920a)) -- CI: Add a test to pre-check fuzzer tests compilation before weekly run ([fc53888](https://github.com/espressif/esp-protocols/commit/fc53888), [IDF@637f5c0](https://github.com/espressif/esp-idf/commit/637f5c0a6842c42ee6cf7f41d3c5ae0cb28a68af)) -- soc: descriptive part occupy whole component ([7635c04](https://github.com/espressif/esp-protocols/commit/7635c04), [IDF@79887fd](https://github.com/espressif/esp-idf/commit/79887fdc6c3d9a2e509cc189bb43c998d3f0f4ee)) -- Coredump config option rename throughout IDF ([d5fe42b](https://github.com/espressif/esp-protocols/commit/d5fe42b), [IDF@20af94f](https://github.com/espressif/esp-idf/commit/20af94ff53c5147a76342800d007a6c49be50a7b)) -- mdns, dns, dhcp, dhcps: update fuzzer test to work in CI ([e0bc60a](https://github.com/espressif/esp-protocols/commit/e0bc60a), [IDF@a43c06a](https://github.com/espressif/esp-idf/commit/a43c06a592bcf9404297b22268c33bb7a246632c)) -- cmock: added cmock as component ([9772e49](https://github.com/espressif/esp-protocols/commit/9772e49), [IDF@20c068e](https://github.com/espressif/esp-idf/commit/20c068ef3b49999387896b90f8011b02f718485f)) -- Support queries in responses in mDNS non-strict mode ([6021a88](https://github.com/espressif/esp-protocols/commit/6021a88), [IDF#5521](https://github.com/espressif/esp-idf/issues/5521), [IDF@bcfa36d](https://github.com/espressif/esp-idf/commit/bcfa36db8ffff997f1f95eaf6b011ffc4d46a10f)) -- Fix include query ID in reponses ([78f71ec](https://github.com/espressif/esp-protocols/commit/78f71ec), [IDF#5574](https://github.com/espressif/esp-idf/issues/5574), [IDF@f62e321](https://github.com/espressif/esp-idf/commit/f62e321d87c1d520cccca951715c27730e06607a)) -- Allow config mDNS task stack size ([3319844](https://github.com/espressif/esp-protocols/commit/3319844), [IDF@cf7e48c](https://github.com/espressif/esp-idf/commit/cf7e48c779edd84c3f99d5e8ed81027932302382)) -- Remove mbedtls dependency ([ac70c9a](https://github.com/espressif/esp-protocols/commit/ac70c9a), [IDF@f4a4549](https://github.com/espressif/esp-idf/commit/f4a4549a344e7ff2444a188adbebbc136b47a7bb)) -- limit the GOT_IP6_EVENT to only known network interfaces ([2b7d43e](https://github.com/espressif/esp-protocols/commit/2b7d43e), [IDF@ab8cab1](https://github.com/espressif/esp-idf/commit/ab8cab1c553ee5312ef47a7dea002f2585605006)) -- esp32: add implementation of esp_timer based on TG0 LAC timer ([4eb3e89](https://github.com/espressif/esp-protocols/commit/4eb3e89), [IDF@739eb05](https://github.com/espressif/esp-idf/commit/739eb05bb97736b70507e7ebcfee58e670672d23)) -- fixed typos in the variable names and the comments ([b5e5a64](https://github.com/espressif/esp-protocols/commit/b5e5a64), [IDF@ecca39e](https://github.com/espressif/esp-idf/commit/ecca39e19f663e32e16aef2a09df15443de347e9)) -- fix preset of esp_netif ptr for local interfaces ([6713ffe](https://github.com/espressif/esp-protocols/commit/6713ffe), [IDF@09e36f9](https://github.com/espressif/esp-idf/commit/09e36f9f3354092b2a528baaaaccab28ff4774d6)) -- fixed crash on event during deinit ([817c4fd](https://github.com/espressif/esp-protocols/commit/817c4fd), [IDF@eaa2f12](https://github.com/espressif/esp-idf/commit/eaa2f12d6761710d2633b4934fe09f6f45e20f4f)) -- respond to discovery with the proper pseudo name _services._dns-sd._udp ([8f0dc6d](https://github.com/espressif/esp-protocols/commit/8f0dc6d), [IDF#4369](https://github.com/espressif/esp-idf/issues/4369), [IDF@de17a14](https://github.com/espressif/esp-idf/commit/de17a1487f8ba6f432b06199f2261132ec6e735f)) -- fixed forgotten merge conflicts in debug code ([d20666f](https://github.com/espressif/esp-protocols/commit/d20666f), [IDF@d9433ef](https://github.com/espressif/esp-idf/commit/d9433ef69223a32d05abdca543fb530f2e6679e4)) -- add missing include of esp_task.h ([662a4ce](https://github.com/espressif/esp-protocols/commit/662a4ce), [IDF@5884b80](https://github.com/espressif/esp-idf/commit/5884b80908d680874e27fa0c8b2df85b69d03dd3)) -- add configuration values for task priority, affinity and internal service timeouts ([fb1de80](https://github.com/espressif/esp-protocols/commit/fb1de80), [IDF@c6f38f0](https://github.com/espressif/esp-idf/commit/c6f38f04f8eec1aae937cc87c111609772681cb3)) -- tcpip_adapter: updated tcpip_adapter compatablity layer to include all public API and keep 100% backward compatibility update build of tcpip adapter when ethernet disabled ([1f35e9a](https://github.com/espressif/esp-protocols/commit/1f35e9a), [IDF@7f5cda1](https://github.com/espressif/esp-idf/commit/7f5cda1b825586903f85dc4ad7736b35712e46d7)) -- update mdns to use esp-netif for mdns supported services such as STA, AP, ETH ([48b819b](https://github.com/espressif/esp-protocols/commit/48b819b), [IDF@19e24fe](https://github.com/espressif/esp-idf/commit/19e24fe61ed5ea6698dfd5e1f427e783360aa846)) -- esp_netif: Introduction of esp-netif component as a replacement of tcpip_adpter ([53e2aa3](https://github.com/espressif/esp-protocols/commit/53e2aa3), [IDF@ffe043b](https://github.com/espressif/esp-idf/commit/ffe043b1a81a0f9e1cc2cfa8873e21318ec89143)) -- examples: removed ip4addr_ntoa and used prefered IP2STR for displaying IP addresses ([3cc6446](https://github.com/espressif/esp-protocols/commit/3cc6446), [IDF@ec9f245](https://github.com/espressif/esp-idf/commit/ec9f245dd35d3e8e7b19a8dec5e05e003dc21f39)) -- esp_event, mdns: fixes for CONFIG_ETH_ENABLED=n ([248b11b](https://github.com/espressif/esp-protocols/commit/248b11b), [IDF@569ad75](https://github.com/espressif/esp-idf/commit/569ad7545c32a2f1d0eff3f1e81df70fb76ad125)) -- build and link hello-world for esp32s2beta ([901124b](https://github.com/espressif/esp-protocols/commit/901124b), [IDF@84b2f9f](https://github.com/espressif/esp-idf/commit/84b2f9f14d16533c84db2210f13a24cd817e0b0a)) -- fix crash for hostname queries ([f6ff165](https://github.com/espressif/esp-protocols/commit/f6ff165), [IDF#4224](https://github.com/espressif/esp-idf/issues/4224), [IDF@3d11700](https://github.com/espressif/esp-idf/commit/3d1170031b340a231949fdc0d9c46d87af0d1b5d)) -- fix possible race condition when checking DHCP status on WIFI_EVENT_STA_CONNECTED event. ([f44c569](https://github.com/espressif/esp-protocols/commit/f44c569), [IDF@7f410a0](https://github.com/espressif/esp-idf/commit/7f410a0bcbafa85dba05807c53c3c38999506509)) -- use constant size of AAAA answer in mdns packets instead of deriving from lwip struct size, since the struct could contain also zones ([286c646](https://github.com/espressif/esp-protocols/commit/286c646), [IDF@e5e31c5](https://github.com/espressif/esp-idf/commit/e5e31c5d0172d68fd207fa31cc5d3bba82dad020)) -- esp_wifi: wifi support new event mechanism ([c70d527](https://github.com/espressif/esp-protocols/commit/c70d527), [IDF@003a987](https://github.com/espressif/esp-idf/commit/003a9872b7de69d799e9d37521cfbcaff9b37e85)) -- fix missing bye packet if services removed with mdns_service_remove_all() or mdns_free() ([7cdf96c](https://github.com/espressif/esp-protocols/commit/7cdf96c), [IDF#3660](https://github.com/espressif/esp-idf/issues/3660), [IDF@a001998](https://github.com/espressif/esp-idf/commit/a001998d5283b29ca9a374adf7cef3357b39a03a)) -- mdns_service_remove_all doesn't take an argument ([407875d](https://github.com/espressif/esp-protocols/commit/407875d), [IDF@c2764f6](https://github.com/espressif/esp-idf/commit/c2764f6fe85681cfaf5dbbe168295284f09c09cd)) -- tools: Mass fixing of empty prototypes (for -Wstrict-prototypes) ([3e753f5](https://github.com/espressif/esp-protocols/commit/3e753f5), [IDF@afbaf74](https://github.com/espressif/esp-idf/commit/afbaf74007e89d016dbade4072bf2e7a3874139a)) -- fix ignoring mdns packet with some invalid name entries in question field ([144d4ad](https://github.com/espressif/esp-protocols/commit/144d4ad), [IDF@4bd4c7c](https://github.com/espressif/esp-idf/commit/4bd4c7caf3f9ef8402c5a27ab44561537407eb60)) -- add esp_eth component ([680bad6](https://github.com/espressif/esp-protocols/commit/680bad6), [IDF@90c4827](https://github.com/espressif/esp-idf/commit/90c4827bd22aa61894a5b22b3b39247a7e44d6cf)) -- components: use new component registration api ([7fb6686](https://github.com/espressif/esp-protocols/commit/7fb6686), [IDF@9eccd7c](https://github.com/espressif/esp-idf/commit/9eccd7c0826d6cc2e9de59304d1e5f76c0063ccf)) -- fix static analysis warnings ([4912bef](https://github.com/espressif/esp-protocols/commit/4912bef), [IDF@c34de4c](https://github.com/espressif/esp-idf/commit/c34de4cba658e8331f8a3ab2f466190c7640595b)) -- added initial suite of api unit tests ([181a22e](https://github.com/espressif/esp-protocols/commit/181a22e), [IDF@e680191](https://github.com/espressif/esp-idf/commit/e6801912c5c4861f828ab1f447280628bba9a5d7)) -- mdns tests: adapt mdns fuzzer test to compile with event loop library ([4172219](https://github.com/espressif/esp-protocols/commit/4172219), [IDF@38d15cb](https://github.com/espressif/esp-idf/commit/38d15cbd637e8b8baacda9fc43e8e99d224530f5)) -- fixed mdns crashing on reception of txt packet without a corresponding service closes #2866 ([98d2c1a](https://github.com/espressif/esp-protocols/commit/98d2c1a), [IDF@af48977](https://github.com/espressif/esp-idf/commit/af48977f21cea6b18dae10b2c8b64a78acfc647f)) -- use const char* for mdns txt items types to remove warning when assigning ([84cbb1f](https://github.com/espressif/esp-protocols/commit/84cbb1f), [IDF@c050a75](https://github.com/espressif/esp-idf/commit/c050a75616803c7871ef11c060e440fae09000d9)) -- updated doxygen comments documenting mdns api ([4c6818e](https://github.com/espressif/esp-protocols/commit/4c6818e), [IDF#1718](https://github.com/espressif/esp-idf/issues/1718), [IDF@a851aac](https://github.com/espressif/esp-idf/commit/a851aac255311124529f504486ca55bad15c1951)) -- update mdns_out_question_s to be in line with mdns_parsed_question_s struct ([c440114](https://github.com/espressif/esp-protocols/commit/c440114), [IDF#1568]( https://github.com/espressif/esp-idf/issues/1568), [IDF@eddd5c4](https://github.com/espressif/esp-idf/commit/eddd5c4f2c686d9a1d6d3258569cc33752e78880)) -- use esp_event library to handle events ([6ea0ea9](https://github.com/espressif/esp-protocols/commit/6ea0ea9), [IDF@a2d5952](https://github.com/espressif/esp-idf/commit/a2d59525e53099ee1ad63c3d60ff853f573ab535)) -- fuzzer tests: update of mdns and lwip host compilation for fuzzer testing ([d9aec9f](https://github.com/espressif/esp-protocols/commit/d9aec9f), [IDF@bc60bbb](https://github.com/espressif/esp-idf/commit/bc60bbbeaf89f2bbfc5db4bd4f1e7ace81a2ab37)) -- fix possible crash when probing on particular interface with duplicated service instances due to naming conflicts on network ([985e691](https://github.com/espressif/esp-protocols/commit/985e691), [IDF@265e983](https://github.com/espressif/esp-idf/commit/265e983a452a7eaefc1662cdc0e6ed839a37fe1a)) -- enable pcbs before starting service thread to avoid updating pcb's internal variables from concurent tasks ([75deebb](https://github.com/espressif/esp-protocols/commit/75deebb), [IDF@c87f0cb](https://github.com/espressif/esp-idf/commit/c87f0cb6cad3c36b077f4aaeb1ca52fe6ed0cdaf)) -- fix possible deadlock on mdns deinit calling mdns_free() ([fdd27dc](https://github.com/espressif/esp-protocols/commit/fdd27dc), [IDF#1696](https://github.com/espressif/esp-idf/issues/1696), [IDF@48b5501](https://github.com/espressif/esp-idf/commit/48b5501c250ed90da51a55ad4fc18e09f466a517)) -- mdsn: fix race condition in updating packet data from user task when failed to allocate or queue a new service ([2ec3b55](https://github.com/espressif/esp-protocols/commit/2ec3b55), [IDF@021dc5d](https://github.com/espressif/esp-idf/commit/021dc5d453e21e2d1707f194668e69cf63ef4e84)) -- fix possible crash when packet scheduled to transmit contained service which might have been already removed ([450cbf0](https://github.com/espressif/esp-protocols/commit/450cbf0), [IDF@67051a2](https://github.com/espressif/esp-idf/commit/67051a286ba60a01d4755c3682129153c2f95953)) -- use binary semaphore instead of mutex when searching ([34f6d8d](https://github.com/espressif/esp-protocols/commit/34f6d8d), [IDF@eef0b50](https://github.com/espressif/esp-idf/commit/eef0b5090aee87efef1a6a37772b3b88c9ce8df8)) -- fix memory leak in pbuf if tcpipadapter failed to get netif ([b6efc68](https://github.com/espressif/esp-protocols/commit/b6efc68), [IDF@8462751](https://github.com/espressif/esp-idf/commit/8462751f95a3ff18bdc1b01d02fabd1829fd9135)) -- fix malfuctional query_txt ([90e4bab](https://github.com/espressif/esp-protocols/commit/90e4bab), [IDF@1a02773](https://github.com/espressif/esp-idf/commit/1a027734af06abf08fcb1c34ee65bdf50d12be4d)) -- fix possible crash when mdns_free called while action queue not empty ([c546ab8](https://github.com/espressif/esp-protocols/commit/c546ab8), [IDF@206b47c](https://github.com/espressif/esp-idf/commit/206b47c03aca0acdf40d1d9c250e18aeddfe1bd7)) -- fix memory leak when query for service receives multiple ptr entries for one instance ([6582b41](https://github.com/espressif/esp-protocols/commit/6582b41), [IDF@9a4da97](https://github.com/espressif/esp-idf/commit/9a4da97fb4b3c241998cb969a08c3a917ffb4cd1)) -- fix crash after init if no memory for task ([358d26c](https://github.com/espressif/esp-protocols/commit/358d26c), [IDF@a47768d](https://github.com/espressif/esp-idf/commit/a47768dc4e4750fd7e1c29b15d6e2dd3c76e6591)) -- fixed crash on free undefined ptr after skipped strdup ([2ac83d0](https://github.com/espressif/esp-protocols/commit/2ac83d0), [IDF@e0a8044](https://github.com/espressif/esp-idf/commit/e0a8044a16907e642001b883469618a999dbe6db)) -- Correct Kconfigs according to the coding style ([98e3171](https://github.com/espressif/esp-protocols/commit/98e3171), [IDF@37126d3](https://github.com/espressif/esp-idf/commit/37126d3451eabb44eeeb48b8e2ee554dc233e2a8)) -- fix networking running udp_sendif from lwip thread ([2f85c07](https://github.com/espressif/esp-protocols/commit/2f85c07), [IDF@f7d4a4b](https://github.com/espressif/esp-idf/commit/f7d4a4be6a9e0b0ac5edb9400d3b123dbbed2ffc)) -- fixed static memory leak ([b30a7fe](https://github.com/espressif/esp-protocols/commit/b30a7fe), [IDF@6bb68a5](https://github.com/espressif/esp-idf/commit/6bb68a5a7567a94c3605136d44960ff060c74663)) -- check all mallocs for failure and add default hook to log error with free heap ([7a4fdad](https://github.com/espressif/esp-protocols/commit/7a4fdad), [IDF@c8cb4cd](https://github.com/espressif/esp-idf/commit/c8cb4cd3c8eb56d5901ade03302ad1231d7f3de5)) -- resolve memory leak when txt record received multiple times ([b4e5742](https://github.com/espressif/esp-protocols/commit/b4e5742), [IDF@a6b2b73](https://github.com/espressif/esp-idf/commit/a6b2b73f03bbb75a39685ddba6cf877fd1e5e6d7)) -- skip sending search when finished, not properly locked timer task ([2763bcd](https://github.com/espressif/esp-protocols/commit/2763bcd), [IDF@31163f0](https://github.com/espressif/esp-idf/commit/31163f02d5c414d8b492dce6f729b43a0061581b)) -- sending search packets also in probing and announcing state ([8cd0e8a](https://github.com/espressif/esp-protocols/commit/8cd0e8a), [IDF@d16762a](https://github.com/espressif/esp-idf/commit/d16762a036e35ce86ece86bb44e6e99f9cc7c431)) -- fixed crashes on network changes ([9b3b41c](https://github.com/espressif/esp-protocols/commit/9b3b41c), [IDF@097282a](https://github.com/espressif/esp-idf/commit/097282a8e3f85958747430d9931ce0a545d37700)) -- Update network code for mDNS to work with newest LwIP ([ea23007](https://github.com/espressif/esp-protocols/commit/ea23007), [IDF@3ec0e7e](https://github.com/espressif/esp-idf/commit/3ec0e7e2d2ddea70e9f8fb5025664d0fe24c301a)) -- bugfix: mdns_service_txt_set() wasn't allocating memory for TXT records ([0c17121](https://github.com/espressif/esp-protocols/commit/0c17121), [IDF@e5e2702](https://github.com/espressif/esp-idf/commit/e5e2702ca3f63a29da57eb138f75a20c74fb2a94)) -- cmake: make main a component again ([67173f6](https://github.com/espressif/esp-protocols/commit/67173f6), [IDF@d9939ce](https://github.com/espressif/esp-idf/commit/d9939cedd9b44d63dc148354c3a0a139b9c7113d)) -- Feature/sync lwip as submodule ([fed787f](https://github.com/espressif/esp-protocols/commit/fed787f), [IDF@3578fe3](https://github.com/espressif/esp-idf/commit/3578fe39e01ba0c2d54824ac70c3276502661c6b)) -- Fix a portion of the queries are issued with the wildcard query type ([b4ab30b](https://github.com/espressif/esp-protocols/commit/b4ab30b), [IDF@f3f0445](https://github.com/espressif/esp-idf/commit/f3f0445f4db7c9ad97ae10a9728767337aa7bb62)) -- added CI job for AFL fuzzer tests ([dd71494](https://github.com/espressif/esp-protocols/commit/dd71494), [IDF@0c14764](https://github.com/espressif/esp-idf/commit/0c147648f7642d058b63fbe2ddd5de31c2326304)) -- Minor fix for mdns_service_remove() ([39de491](https://github.com/espressif/esp-protocols/commit/39de491), [IDF@5c7eb7e](https://github.com/espressif/esp-idf/commit/5c7eb7e27be7508130459d896cf7d13ffefda87f)) -- Replace all DOS line endings with Unix ([19acac7](https://github.com/espressif/esp-protocols/commit/19acac7), [IDF@a67d5d8](https://github.com/espressif/esp-idf/commit/a67d5d89e0e90390fa7ff02816a6a79008d75d40)) -- remove executable permission from source files ([98069f9](https://github.com/espressif/esp-protocols/commit/98069f9), [IDF@cb649e4](https://github.com/espressif/esp-idf/commit/cb649e452f3c64a7db1f4a61e162a16b70248204)) -- Fixed nullptr dereference in MDNS.c ([ad29d34](https://github.com/espressif/esp-protocols/commit/ad29d34), [IDF@fffbf7b](https://github.com/espressif/esp-idf/commit/fffbf7b75065b5852e064e04b0c5102dd0fc2244)) -- MDNS-Fuzzer: AFL fuzzer tests for mdsn packet parser ([9f1be36](https://github.com/espressif/esp-protocols/commit/9f1be36), [IDF@e983230](https://github.com/espressif/esp-idf/commit/e983230be933fb83cebdd1945ba6539a7dc99b28)) -- cmake: Add component dependency support ([c7701d4](https://github.com/espressif/esp-protocols/commit/c7701d4), [IDF@1cb5712](https://github.com/espressif/esp-idf/commit/1cb5712463a8963cd3e8331da90fb5e03f13575f)) -- cmake: Remove defaults for COMPONENT_SRCDIRS, COMPONENT_SRCS, COMPONENT_ADD_INCLUDEDIRS ([f1ccc40](https://github.com/espressif/esp-protocols/commit/f1ccc40), [IDF@4f1a856](https://github.com/espressif/esp-idf/commit/4f1a856dbfd752336cd71730105e02ad8c045541)) -- build system: Initial cmake support, work in progress ([84bd1d7](https://github.com/espressif/esp-protocols/commit/84bd1d7), [IDF@c671a0c](https://github.com/espressif/esp-idf/commit/c671a0c3ebf90f18576d6db55b51b62730c58301)) -- fix the bug that in mdns test code redefine esp_err_t to uint32_t, which should be int32_t ([259d3fc](https://github.com/espressif/esp-protocols/commit/259d3fc), [IDF@81e4cad](https://github.com/espressif/esp-idf/commit/81e4cad61593cde879a5c44a08060d9d336e5a3f)) -- Fix exception when service is removed while there are pending packets that depend on it ([7784d00](https://github.com/espressif/esp-protocols/commit/7784d00), [IDF@421c6f1](https://github.com/espressif/esp-idf/commit/421c6f154b10d9253b78875ab28ee6bdcaaaf3c0)) -- Fix case where service is NULL and that will cause exception ([bce7d52](https://github.com/espressif/esp-protocols/commit/bce7d52), [IDF@4fa130a](https://github.com/espressif/esp-idf/commit/4fa130ae4fb5de99ddddc5a7bed7e26ae645591c)) -- Fix issue with some mDNS parsers ([ef924f1](https://github.com/espressif/esp-protocols/commit/ef924f1), [IDF@51dde19](https://github.com/espressif/esp-idf/commit/51dde19a765533af67fc7be21f116641773a9be4)) -- Import mDNS changes ([ad8c92d](https://github.com/espressif/esp-protocols/commit/ad8c92d), [IDF@4bddbc0](https://github.com/espressif/esp-idf/commit/4bddbc031cee83935c0e4df1dc72cc7000c97ba5)) -- Fix compilation errors when using gcc-7.2.0 for the crosstool-ng toolchain ([3aa605f](https://github.com/espressif/esp-protocols/commit/3aa605f), [IDF@519edc3](https://github.com/espressif/esp-idf/commit/519edc332dae0160069fd790467cde8de78f1a0e)) -- components/mdns: wrong Message compression detect ([00a72b8](https://github.com/espressif/esp-protocols/commit/00a72b8), [IDF@6e24566](https://github.com/espressif/esp-idf/commit/6e24566186c52dc5432b6b25c81abda577c21e85)) -- fix leak after _mdns_create_service if we have a malloc error. ([907e7ee](https://github.com/espressif/esp-protocols/commit/907e7ee), [IDF@b6b36bd](https://github.com/espressif/esp-idf/commit/b6b36bd9ddf169039a5528f8b766048d97b975f7)) -- Use LwIP IPC for low-level API calls ([b367484](https://github.com/espressif/esp-protocols/commit/b367484), [IDF@713964f](https://github.com/espressif/esp-idf/commit/713964fe9e98b4fa34145c497b7ab638dc57614c)) -- Add AFL fuzz test ([4a8582f](https://github.com/espressif/esp-protocols/commit/4a8582f), [IDF@4c26227](https://github.com/espressif/esp-idf/commit/4c2622755d92efa1818d062d433725553437993c)) -- implement fixes for issues found while fuzz testing ([75de31c](https://github.com/espressif/esp-protocols/commit/75de31c), [IDF@99d3990](https://github.com/espressif/esp-idf/commit/99d39909c4f19c63909d663e927ac0a8933a3ed5)) -- add simple dns-sd meta query support ([4acf639](https://github.com/espressif/esp-protocols/commit/4acf639), [IDF@96e8a3c](https://github.com/espressif/esp-idf/commit/96e8a3c725095562d2725aaefa15adcfc5d78dd5)) -- address security issues with mDNS ([91bb509](https://github.com/espressif/esp-protocols/commit/91bb509), [IDF@c89e11c](https://github.com/espressif/esp-idf/commit/c89e11c8fa64641edddf9a055745d825ae3fab9d)) -- Initial mDNS component and example ([7fbf8e5](https://github.com/espressif/esp-protocols/commit/7fbf8e5), [IDF@dd3f18d](https://github.com/espressif/esp-idf/commit/dd3f18d2d88ee78909d4af2840dfdf0b9f715f28)) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/CMakeLists.txt deleted file mode 100644 index 542edb5..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -if(CONFIG_MDNS_NETWORKING_SOCKET) - set(MDNS_NETWORKING "mdns_networking_socket.c") -else() - set(MDNS_NETWORKING "mdns_networking_lwip.c") -endif() - -idf_build_get_property(target IDF_TARGET) -if(${target} STREQUAL "linux") - set(dependencies esp_netif_linux esp_timer esp_system) - set(srcs "mdns.c" ${MDNS_NETWORKING}) -else() - set(dependencies lwip console esp_netif) - set(private_dependencies esp_timer esp_wifi) - set(srcs "mdns.c" ${MDNS_NETWORKING} "mdns_console.c") -endif() - -idf_component_register( - SRCS ${srcs} - INCLUDE_DIRS "include" - PRIV_INCLUDE_DIRS "private_include" - REQUIRES ${dependencies} - PRIV_REQUIRES ${private_dependencies}) - -if(${target} STREQUAL "linux") - target_link_libraries(${COMPONENT_LIB} PRIVATE "-lbsd") -endif() - - -if(CONFIG_ETH_ENABLED) - idf_component_optional_requires(PRIVATE esp_eth) -endif() diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/Kconfig b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/Kconfig deleted file mode 100644 index 7252e86..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/Kconfig +++ /dev/null @@ -1,142 +0,0 @@ -menu "mDNS" - - config MDNS_MAX_INTERFACES - int "Max number of interfaces" - range 1 9 - default 3 - help - Number of network interfaces to be served by the mDNS library. - Lowering this number helps to reduce some static RAM usage. - - config MDNS_MAX_SERVICES - int "Max number of services" - default 10 - help - Services take up a certain amount of memory, and allowing fewer - services to be open at the same time conserves memory. Specify - the maximum amount of services here. - - config MDNS_TASK_PRIORITY - int "mDNS task priority" - range 1 255 - default 1 - help - Allows setting mDNS task priority. Please do not set the task priority - higher than priorities of system tasks. Compile time warning/error - would be emitted if the chosen task priority were too high. - - config MDNS_ACTION_QUEUE_LEN - int "Maximum actions pending to the server" - range 8 64 - default 16 - help - Allows setting the length of mDNS action queue. - - config MDNS_TASK_STACK_SIZE - int "mDNS task stack size" - default 4096 - help - Allows setting mDNS task stacksize. - - choice MDNS_TASK_AFFINITY - prompt "mDNS task affinity" - default MDNS_TASK_AFFINITY_CPU0 - help - Allows setting mDNS tasks affinity, i.e. whether the task is pinned to - CPU0, pinned to CPU1, or allowed to run on any CPU. - - config MDNS_TASK_AFFINITY_NO_AFFINITY - bool "No affinity" - config MDNS_TASK_AFFINITY_CPU0 - bool "CPU0" - config MDNS_TASK_AFFINITY_CPU1 - bool "CPU1" - depends on !FREERTOS_UNICORE - - endchoice - - config MDNS_TASK_AFFINITY - hex - default FREERTOS_NO_AFFINITY if MDNS_TASK_AFFINITY_NO_AFFINITY - default 0x0 if MDNS_TASK_AFFINITY_CPU0 - default 0x1 if MDNS_TASK_AFFINITY_CPU1 - - config MDNS_SERVICE_ADD_TIMEOUT_MS - int "mDNS adding service timeout (ms)" - range 10 30000 - default 2000 - help - Configures timeout for adding a new mDNS service. Adding a service - fails if could not be completed within this time. - - config MDNS_TIMER_PERIOD_MS - int "mDNS timer period (ms)" - range 10 10000 - default 100 - help - Configures period of mDNS timer, which periodically transmits packets - and schedules mDNS searches. - - config MDNS_NETWORKING_SOCKET - bool "Use BSD sockets for mDNS networking" - default n - help - Enables optional mDNS networking implementation using BSD sockets - in UDP multicast mode. - This option creates a new thread to serve receiving packets (TODO). - This option uses additional N sockets, where N is number of interfaces. - - config MDNS_SKIP_SUPPRESSING_OWN_QUERIES - bool "Skip suppressing our own packets" - default n - help - Enable only if the querier and the responder share the same IP address. - This usually happens in test mode, where we may run multiple instances of - responders/queriers on the same interface. - - config MDNS_ENABLE_DEBUG_PRINTS - bool "Enable debug prints of mDNS packets" - default n - help - Enable for the library to log received and sent mDNS packets to stdout. - - config MDNS_RESPOND_REVERSE_QUERIES - bool "Enable responding to IPv4 reverse queries" - default n - help - Enables support for IPv4 reverse lookup. If enabled, the mDNS library - response to PTR queries of "A.B.C.D.in-addr.arpa" type. - - config MDNS_MULTIPLE_INSTANCE - bool "Multiple instances under the same service type" - default y - help - Enables adding multiple service instances under the same service type. - - menu "MDNS Predefined interfaces" - - config MDNS_PREDEF_NETIF_STA - bool "Use predefined interface for WiFi Station" - default y - help - Set up mDNS for the default WiFi station. - Disable this option if you do not need mDNS on default WiFi STA. - - config MDNS_PREDEF_NETIF_AP - bool "Use predefined interface for WiFi Access Point" - default y - help - Set up mDNS for the default WiFi Access Point. - Disable this option if you do not need mDNS on default WiFi AP. - - config MDNS_PREDEF_NETIF_ETH - bool "Use predefined interface for Ethernet" - depends on ETH_ENABLED - default y - help - Set up mDNS for the default Ethernet interface. - Disable this option if you do not need mDNS on default Ethernet. - - endmenu # MDNS Predefined interfaces - -endmenu diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/LICENSE b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/LICENSE deleted file mode 100644 index d645695..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/README.md b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/README.md deleted file mode 100644 index a644ad4..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# mDNS Service - -[![Component Registry](https://components.espressif.com/components/espressif/mdns/badge.svg)](https://components.espressif.com/components/espressif/mdns) - -mDNS is a multicast UDP service that is used to provide local network service and host discovery. - -## Examples - -Get started with example test [Example](https://github.com/espressif/esp-protocols/tree/master/components/mdns/examples): - -## Documentation - -* View the full [documentation(English)](https://docs.espressif.com/projects/esp-protocols/mdns/docs/latest/en/index.html) -* View the full [documentation(Chinese)](https://docs.espressif.com/projects/esp-protocols/mdns/docs/latest/zh_CN/index.html) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/CMakeLists.txt deleted file mode 100644 index 9a16f14..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -# The following lines of boilerplate have to be in your project's CMakeLists -# in this exact order for cmake to work correctly -cmake_minimum_required(VERSION 3.5) - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(query_advertise) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/README.md b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/README.md deleted file mode 100644 index 6ccdef9..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# mDNS example - -Shows how to use mDNS to advertise and query services and hosts - -## Example workflow - -- mDNS is initialized with host name and instance name defined through the project configuration and `_http._tcp` service is added to be advertised -- A delegated host `esp32-delegated._local` is added and another `_http._tcp` service is added for this host. -- WiFi STA is started and trying to connect to the access point defined through the project configuration -- The system event handler is used to pass the network events to mDNS so the service is aware when the interface comes up or down -- GPIO0 (BOOT Button) is initialized as pulled-up input that can be monitored for button press -- Example task is started to check if the button is pressed so it can execute the mDNS queries defined - -### Configure the project - -* Open the project configuration menu (`idf.py menuconfig`) - -* Configure Wi-Fi or Ethernet under "Example Connection Configuration" menu -* Set `mDNS Hostname` as host name prefix for the device and its instance name in `mDNS Instance Name` -* Disable `Resolve test services` to prevent the example from querying defined names/services on startup (cause warnings in example logs, as illustrated below) - -### 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 -``` - -- Wait for WiFi to connect to your access point -- You can now ping the device at `[board-hostname].local`, where `[board-hostname]` is preconfigured hostname, `esp32-mdns` by default. -- You can also browse for `_http._tcp` on the same network to find the advertised service -- Pressing the BOOT button will start querying the local network for the predefined in `check_button` hosts and services -- Note that for purpose of CI tests, configuration options of `MDNS_RESOLVE_TEST_SERVICES` and `MDNS_ADD_MAC_TO_HOSTNAME` are available, but disabled by default. If enabled, then the hostname suffix of last 3 bytes from device MAC address is added, e.g. `esp32-mdns-80FFFF`, and a query for test service is issued. - - -(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 (0) cpu_start: Starting scheduler on APP CPU. -I (276) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE -I (276) mdns-test: mdns hostname set to: [esp32-mdns] -I (286) wifi: wifi driver task: 3ffc2fa4, prio:23, stack:3584, core=0 -I (286) wifi: wifi firmware version: a3be639 -I (286) wifi: config NVS flash: enabled -I (296) wifi: config nano formating: disabled -I (296) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE -I (306) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE -I (336) wifi: Init dynamic tx buffer num: 32 -I (336) wifi: Init data frame dynamic rx buffer num: 32 -I (336) wifi: Init management frame dynamic rx buffer num: 32 -I (346) wifi: Init static rx buffer size: 1600 -I (346) wifi: Init static rx buffer num: 10 -I (346) wifi: Init dynamic rx buffer num: 32 -I (356) mdns-test: Setting WiFi configuration SSID myssid... -I (426) phy: phy_version: 4000, b6198fa, Sep 3 2018, 15:11:06, 0, 0 -I (426) wifi: mode : sta (30:ae:a4:80:FF:FF) -I (426) gpio: GPIO[0]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 -I (1756) wifi: n:11 0, o:1 0, ap:255 255, sta:11 0, prof:1 -I (2736) wifi: state: init -> auth (b0) -I (2756) wifi: state: auth -> assoc (0) -I (2766) wifi: state: assoc -> run (10) -I (2786) wifi: connected with myssid, channel 11 -I (2786) wifi: pm start, type: 1 - -I (4786) event: sta ip: 192.168.0.139, mask: 255.255.255.0, gw: 192.168.0.2 -I (21126) mdns-test: Query A: esp32.local -W (23176) mdns-test: ESP_ERR_NOT_FOUND: Host was not found! -I (23176) mdns-test: Query PTR: _arduino._tcp.local -W (26276) mdns-test: No results found! -I (26276) mdns-test: Query PTR: _http._tcp.local -1: Interface: STA, Type: V6 - PTR : HP Color LaserJet MFP M277dw (7C2E10) - SRV : NPI7C2E10.local:80 - A : 254.128.0.0 -2: Interface: STA, Type: V4 - PTR : switch4e4919 - SRV : switch4e4919.local:80 - TXT : [1] path=/config/authentication_page.htm; - A : 192.168.0.118 -I (29396) mdns-test: Query PTR: _printer._tcp.local -1: Interface: STA, Type: V6 - PTR : HP Color LaserJet MFP M277dw (7C2E10) - SRV : NPI7C2E10.local:515 - A : 254.128.0.0 -2: Interface: STA, Type: V4 - PTR : HP Color LaserJet MFP M277dw (7C2E10) -``` diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/CMakeLists.txt deleted file mode 100644 index eb0e6d9..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -idf_component_register(SRCS "mdns_example_main.c" - INCLUDE_DIRS ".") diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/Kconfig.projbuild b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/Kconfig.projbuild deleted file mode 100644 index 18e1cc2..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/Kconfig.projbuild +++ /dev/null @@ -1,55 +0,0 @@ -menu "Example Configuration" - - orsource "$IDF_PATH/examples/common_components/env_caps/$IDF_TARGET/Kconfig.env_caps" - - config MDNS_HOSTNAME - string "mDNS Hostname" - default "esp32-mdns" - help - mDNS Hostname for example to use - - config MDNS_INSTANCE - string "mDNS Instance Name" - default "ESP32 with mDNS" - help - mDNS Instance Name for example to use - - config MDNS_PUBLISH_DELEGATE_HOST - bool "Publish a delegated host" - help - Enable publishing a delegated host other than ESP32. - The example will also add a mock service for this host. - - config MDNS_RESOLVE_TEST_SERVICES - bool "Resolve test services" - default n - help - Enable resolving test services on startup. - These services are advertized and evaluated in automated tests. - When executed locally, these will not be resolved and warnings appear in the log. - Please set to false to disable initial querying to avoid warnings. - - config MDNS_ADD_MAC_TO_HOSTNAME - bool "Add mac suffix to hostname" - default n - help - If enabled, a portion of MAC address is added to the hostname, this is used - for evaluation of tests in CI - - config MDNS_BUTTON_GPIO - int "Button GPIO to trigger querries" - range ENV_GPIO_RANGE_MIN ENV_GPIO_IN_RANGE_MAX - default 0 - help - Set the GPIO number used as mDNS test button - - config MDNS_ADD_CUSTOM_NETIF - bool "Add user netif to mdns service" - default n - help - If enabled, we try to add a custom netif to mdns service. - Note that for using with common connection example code, we have to disable - all predefined interfaces in mdns component setup (since we're adding one - of the default interfaces) - -endmenu diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/idf_component.yml b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/idf_component.yml deleted file mode 100644 index e9277df..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/idf_component.yml +++ /dev/null @@ -1,8 +0,0 @@ -dependencies: - ## Required IDF version - idf: ">=5.0" - espressif/mdns: - version: "^1.0.0" - override_path: "../../../" - protocol_examples_common: - path: ${IDF_PATH}/examples/common_components/protocol_examples_common diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/mdns_example_main.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/mdns_example_main.c deleted file mode 100644 index a6aaea2..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/main/mdns_example_main.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ - -/* - * MDNS-SD Query and advertise Example -*/ -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "esp_netif_ip_addr.h" -#include "esp_mac.h" -#include "esp_event.h" -#include "esp_log.h" -#include "nvs_flash.h" -#include "esp_netif.h" -#include "protocol_examples_common.h" -#include "mdns.h" -#include "driver/gpio.h" -#include "netdb.h" - -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 0) -/* CONFIG_LWIP_IPV4 was introduced in IDF v5.1, set CONFIG_LWIP_IPV4 to 1 by default for IDF v5.0 */ -#ifndef CONFIG_LWIP_IPV4 -#define CONFIG_LWIP_IPV4 1 -#endif // CONFIG_LWIP_IPV4 -#endif // ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 0) - -#define EXAMPLE_MDNS_INSTANCE CONFIG_MDNS_INSTANCE -#define EXAMPLE_BUTTON_GPIO CONFIG_MDNS_BUTTON_GPIO - -static const char *TAG = "mdns-test"; -static char *generate_hostname(void); - -#if CONFIG_MDNS_RESOLVE_TEST_SERVICES == 1 -static void query_mdns_host_with_gethostbyname(char *host); -static void query_mdns_host_with_getaddrinfo(char *host); -#endif - -static void initialise_mdns(void) -{ - char *hostname = generate_hostname(); - - //initialize mDNS - ESP_ERROR_CHECK( mdns_init() ); - //set mDNS hostname (required if you want to advertise services) - ESP_ERROR_CHECK( mdns_hostname_set(hostname) ); - ESP_LOGI(TAG, "mdns hostname set to: [%s]", hostname); - //set default mDNS instance name - ESP_ERROR_CHECK( mdns_instance_name_set(EXAMPLE_MDNS_INSTANCE) ); - - //structure with TXT records - mdns_txt_item_t serviceTxtData[3] = { - {"board", "esp32"}, - {"u", "user"}, - {"p", "password"} - }; - - //initialize service - ESP_ERROR_CHECK( mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, serviceTxtData, 3) ); - ESP_ERROR_CHECK( mdns_service_subtype_add_for_host("ESP32-WebServer", "_http", "_tcp", NULL, "_server") ); -#if CONFIG_MDNS_MULTIPLE_INSTANCE - ESP_ERROR_CHECK( mdns_service_add("ESP32-WebServer1", "_http", "_tcp", 80, NULL, 0) ); -#endif - -#if CONFIG_MDNS_PUBLISH_DELEGATE_HOST - char *delegated_hostname; - if (-1 == asprintf(&delegated_hostname, "%s-delegated", hostname)) { - abort(); - } - - mdns_ip_addr_t addr4, addr6; - esp_netif_str_to_ip4("10.0.0.1", &addr4.addr.u_addr.ip4); - addr4.addr.type = ESP_IPADDR_TYPE_V4; - esp_netif_str_to_ip6("fd11:22::1", &addr6.addr.u_addr.ip6); - addr6.addr.type = ESP_IPADDR_TYPE_V6; - addr4.next = &addr6; - addr6.next = NULL; - ESP_ERROR_CHECK( mdns_delegate_hostname_add(delegated_hostname, &addr4) ); - ESP_ERROR_CHECK( mdns_service_add_for_host("test0", "_http", "_tcp", delegated_hostname, 1234, serviceTxtData, 3) ); - free(delegated_hostname); -#endif // CONFIG_MDNS_PUBLISH_DELEGATE_HOST - - //add another TXT item - ESP_ERROR_CHECK( mdns_service_txt_item_set("_http", "_tcp", "path", "/foobar") ); - //change TXT item value - ESP_ERROR_CHECK( mdns_service_txt_item_set_with_explicit_value_len("_http", "_tcp", "u", "admin", strlen("admin")) ); - free(hostname); -} - -/* these strings match mdns_ip_protocol_t enumeration */ -static const char *ip_protocol_str[] = {"V4", "V6", "MAX"}; - -static void mdns_print_results(mdns_result_t *results) -{ - mdns_result_t *r = results; - mdns_ip_addr_t *a = NULL; - int i = 1, t; - while (r) { - if (r->esp_netif) { - printf("%d: Interface: %s, Type: %s, TTL: %" PRIu32 "\n", i++, esp_netif_get_ifkey(r->esp_netif), - ip_protocol_str[r->ip_protocol], r->ttl); - } - if (r->instance_name) { - printf(" PTR : %s.%s.%s\n", r->instance_name, r->service_type, r->proto); - } - if (r->hostname) { - printf(" SRV : %s.local:%u\n", r->hostname, r->port); - } - if (r->txt_count) { - printf(" TXT : [%zu] ", r->txt_count); - for (t = 0; t < r->txt_count; t++) { - printf("%s=%s(%d); ", r->txt[t].key, r->txt[t].value ? r->txt[t].value : "NULL", r->txt_value_len[t]); - } - printf("\n"); - } - a = r->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V6) { - printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6)); - } else { - printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4))); - } - a = a->next; - } - r = r->next; - } -} - -static void query_mdns_service(const char *service_name, const char *proto) -{ - ESP_LOGI(TAG, "Query PTR: %s.%s.local", service_name, proto); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query_ptr(service_name, proto, 3000, 20, &results); - if (err) { - ESP_LOGE(TAG, "Query Failed: %s", esp_err_to_name(err)); - return; - } - if (!results) { - ESP_LOGW(TAG, "No results found!"); - return; - } - - mdns_print_results(results); - mdns_query_results_free(results); -} - -#if CONFIG_MDNS_PUBLISH_DELEGATE_HOST -static void lookup_mdns_delegated_service(const char *service_name, const char *proto) -{ - ESP_LOGI(TAG, "Lookup delegated service: %s.%s.local", service_name, proto); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_lookup_delegated_service(NULL, service_name, proto, 20, &results); - if (err) { - ESP_LOGE(TAG, "Lookup Failed: %s", esp_err_to_name(err)); - return; - } - if (!results) { - ESP_LOGW(TAG, "No results found!"); - return; - } - - mdns_print_results(results); - mdns_query_results_free(results); -} -#endif // CONFIG_MDNS_PUBLISH_DELEGATE_HOST - -static void lookup_mdns_selfhosted_service(const char *service_name, const char *proto) -{ - ESP_LOGI(TAG, "Lookup selfhosted service: %s.%s.local", service_name, proto); - mdns_result_t *results = NULL; - esp_err_t err = mdns_lookup_selfhosted_service(NULL, service_name, proto, 20, &results); - if (err) { - ESP_LOGE(TAG, "Lookup Failed: %s", esp_err_to_name(err)); - return; - } - if (!results) { - ESP_LOGW(TAG, "No results found!"); - return; - } - mdns_print_results(results); - mdns_query_results_free(results); -} - -static bool check_and_print_result(mdns_search_once_t *search) -{ - // Check if any result is available - mdns_result_t *result = NULL; - if (!mdns_query_async_get_results(search, 0, &result, NULL)) { - return false; - } - - if (!result) { // search timeout, but no result - return true; - } - - // If yes, print the result - mdns_ip_addr_t *a = result->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V6) { - printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6)); - } else { - printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4))); - } - a = a->next; - } - // and free the result - mdns_query_results_free(result); - return true; -} - -static void query_mdns_hosts_async(const char *host_name) -{ - ESP_LOGI(TAG, "Query both A and AAA: %s.local", host_name); - - mdns_search_once_t *s_a = mdns_query_async_new(host_name, NULL, NULL, MDNS_TYPE_A, 1000, 1, NULL); - mdns_search_once_t *s_aaaa = mdns_query_async_new(host_name, NULL, NULL, MDNS_TYPE_AAAA, 1000, 1, NULL); - while (s_a || s_aaaa) { - if (s_a && check_and_print_result(s_a)) { - ESP_LOGI(TAG, "Query A %s.local finished", host_name); - mdns_query_async_delete(s_a); - s_a = NULL; - } - if (s_aaaa && check_and_print_result(s_aaaa)) { - ESP_LOGI(TAG, "Query AAAA %s.local finished", host_name); - mdns_query_async_delete(s_aaaa); - s_aaaa = NULL; - } - vTaskDelay(50 / portTICK_PERIOD_MS); - } -} -#ifdef CONFIG_LWIP_IPV4 -static void query_mdns_host(const char *host_name) -{ - ESP_LOGI(TAG, "Query A: %s.local", host_name); - - struct esp_ip4_addr addr; - addr.addr = 0; - - esp_err_t err = mdns_query_a(host_name, 2000, &addr); - if (err) { - if (err == ESP_ERR_NOT_FOUND) { - ESP_LOGW(TAG, "%s: Host was not found!", esp_err_to_name(err)); - return; - } - ESP_LOGE(TAG, "Query Failed: %s", esp_err_to_name(err)); - return; - } - - ESP_LOGI(TAG, "Query A: %s.local resolved to: " IPSTR, host_name, IP2STR(&addr)); -} -#endif // CONFIG_LWIP_IPV4 - -static void initialise_button(void) -{ - gpio_config_t io_conf = {0}; - io_conf.intr_type = GPIO_INTR_DISABLE; - io_conf.pin_bit_mask = BIT64(EXAMPLE_BUTTON_GPIO); - io_conf.mode = GPIO_MODE_INPUT; - io_conf.pull_up_en = 1; - io_conf.pull_down_en = 0; - gpio_config(&io_conf); -} - -static void check_button(void) -{ - static bool old_level = true; - bool new_level = gpio_get_level(EXAMPLE_BUTTON_GPIO); - if (!new_level && old_level) { - query_mdns_hosts_async("esp32-mdns"); -#ifdef CONFIG_LWIP_IPV4 - query_mdns_host("esp32"); -#endif - query_mdns_service("_arduino", "_tcp"); - query_mdns_service("_http", "_tcp"); - query_mdns_service("_printer", "_tcp"); - query_mdns_service("_ipp", "_tcp"); - query_mdns_service("_afpovertcp", "_tcp"); - query_mdns_service("_smb", "_tcp"); - query_mdns_service("_ftp", "_tcp"); - query_mdns_service("_nfs", "_tcp"); -#if CONFIG_MDNS_PUBLISH_DELEGATE_HOST - lookup_mdns_delegated_service("_http", "_tcp"); -#endif // CONFIG_MDNS_PUBLISH_DELEGATE_HOST - lookup_mdns_selfhosted_service("_http", "_tcp"); - } - old_level = new_level; -} - -static void mdns_example_task(void *pvParameters) -{ -#if CONFIG_MDNS_RESOLVE_TEST_SERVICES == 1 - /* Send initial queries that are started by CI tester */ -#ifdef CONFIG_LWIP_IPV4 - query_mdns_host("tinytester"); -#endif - query_mdns_host_with_gethostbyname("tinytester-lwip.local"); - query_mdns_host_with_getaddrinfo("tinytester-lwip.local"); -#endif - - while (1) { - check_button(); - vTaskDelay(50 / portTICK_PERIOD_MS); - } -} - -void app_main(void) -{ - ESP_ERROR_CHECK(nvs_flash_init()); - ESP_ERROR_CHECK(esp_netif_init()); - ESP_ERROR_CHECK(esp_event_loop_create_default()); - - initialise_mdns(); - - /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. - * Read "Establishing Wi-Fi or Ethernet Connection" section in - * examples/protocols/README.md for more information about this function. - */ - ESP_ERROR_CHECK(example_connect()); - -#if defined(CONFIG_MDNS_ADD_CUSTOM_NETIF) && !defined(CONFIG_MDNS_PREDEF_NETIF_STA) && !defined(CONFIG_MDNS_PREDEF_NETIF_ETH) - /* Demonstration of adding a custom netif to mdns service, but we're adding the default example one, - * so we must disable all predefined interfaces (PREDEF_NETIF_STA, AP and ETH) first - */ - ESP_ERROR_CHECK(mdns_register_netif(EXAMPLE_INTERFACE)); - /* It is not enough to just register the interface, we have to enable is manually. - * This is typically performed in "GOT_IP" event handler, but we call it here directly - * since the `EXAMPLE_INTERFACE` netif is connected already, to keep the example simple. - */ - ESP_ERROR_CHECK(mdns_netif_action(EXAMPLE_INTERFACE, MDNS_EVENT_ENABLE_IP4 | MDNS_EVENT_ENABLE_IP6)); - ESP_ERROR_CHECK(mdns_netif_action(EXAMPLE_INTERFACE, MDNS_EVENT_ANNOUNCE_IP4 | MDNS_EVENT_ANNOUNCE_IP6)); - -#if defined(CONFIG_MDNS_RESPOND_REVERSE_QUERIES) - ESP_ERROR_CHECK(mdns_netif_action(EXAMPLE_INTERFACE, MDNS_EVENT_IP4_REVERSE_LOOKUP | MDNS_EVENT_IP6_REVERSE_LOOKUP)); -#endif - -#endif // CONFIG_MDNS_ADD_CUSTOM_NETIF - - initialise_button(); - xTaskCreate(&mdns_example_task, "mdns_example_task", 2048, NULL, 5, NULL); -} - -/** Generate host name based on sdkconfig, optionally adding a portion of MAC address to it. - * @return host name string allocated from the heap - */ -static char *generate_hostname(void) -{ -#ifndef CONFIG_MDNS_ADD_MAC_TO_HOSTNAME - return strdup(CONFIG_MDNS_HOSTNAME); -#else - uint8_t mac[6]; - char *hostname; - esp_read_mac(mac, ESP_MAC_WIFI_STA); - if (-1 == asprintf(&hostname, "%s-%02X%02X%02X", CONFIG_MDNS_HOSTNAME, mac[3], mac[4], mac[5])) { - abort(); - } - return hostname; -#endif -} - -#if CONFIG_MDNS_RESOLVE_TEST_SERVICES == 1 -/** - * @brief Executes gethostbyname and displays list of resolved addresses. - * Note: This function is used only to test advertised mdns hostnames resolution - */ -static void query_mdns_host_with_gethostbyname(char *host) -{ - struct hostent *res = gethostbyname(host); - if (res) { - unsigned int i = 0; - while (res->h_addr_list[i] != NULL) { - ESP_LOGI(TAG, "gethostbyname: %s resolved to: %s", host, -#if defined(CONFIG_LWIP_IPV6) && defined(CONFIG_LWIP_IPV4) - res->h_addrtype == AF_INET ? inet_ntoa(*(struct in_addr *) (res->h_addr_list[i])) : - inet6_ntoa(*(struct in6_addr *) (res->h_addr_list[i])) -#elif defined(CONFIG_LWIP_IPV6) - inet6_ntoa(*(struct in6_addr *) (res->h_addr_list[i])) -#else - inet_ntoa(*(struct in_addr *) (res->h_addr_list[i])) -#endif - ); - i++; - } - } -} - -/** - * @brief Executes getaddrinfo and displays list of resolved addresses. - * Note: This function is used only to test advertised mdns hostnames resolution - */ -static void query_mdns_host_with_getaddrinfo(char *host) -{ - struct addrinfo hints; - struct addrinfo *res; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - - if (!getaddrinfo(host, NULL, &hints, &res)) { - while (res) { - char *resolved_addr; -#if defined(CONFIG_LWIP_IPV6) && defined(CONFIG_LWIP_IPV4) - resolved_addr = res->ai_family == AF_INET ? - inet_ntoa(((struct sockaddr_in *) res->ai_addr)->sin_addr) : - inet6_ntoa(((struct sockaddr_in6 *) res->ai_addr)->sin6_addr); -#elif defined(CONFIG_LWIP_IPV6) - resolved_addr = inet6_ntoa(((struct sockaddr_in6 *) res->ai_addr)->sin6_addr); -#else - resolved_addr = inet_ntoa(((struct sockaddr_in *) res->ai_addr)->sin_addr); -#endif // CONFIG_LWIP_IPV6 - ESP_LOGI(TAG, "getaddrinfo: %s resolved to: %s", host, resolved_addr); - res = res->ai_next; - } - } -} -#endif diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/pytest_mdns.py b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/pytest_mdns.py deleted file mode 100644 index e78e094..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/pytest_mdns.py +++ /dev/null @@ -1,203 +0,0 @@ -# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: Unlicense OR CC0-1.0 -import re -import select -import socket -import struct -import subprocess -import time -from threading import Event, Thread - -try: - import dpkt - import dpkt.dns -except ImportError: - pass - - -def get_dns_query_for_esp(esp_host): - dns = dpkt.dns.DNS( - b'\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01' - ) - dns.qd[0].name = esp_host + u'.local' - print('Created query for esp host: {} '.format(dns.__repr__())) - return dns.pack() - - -def get_dns_answer_to_mdns(tester_host): - dns = dpkt.dns.DNS( - b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - ) - dns.op = dpkt.dns.DNS_QR | dpkt.dns.DNS_AA - dns.rcode = dpkt.dns.DNS_RCODE_NOERR - arr = dpkt.dns.DNS.RR() - arr.cls = dpkt.dns.DNS_IN - arr.type = dpkt.dns.DNS_A - arr.name = tester_host - arr.ip = socket.inet_aton('127.0.0.1') - dns.an.append(arr) - print('Created answer to mdns query: {} '.format(dns.__repr__())) - return dns.pack() - - -def get_dns_answer_to_mdns_lwip(tester_host, id): - dns = dpkt.dns.DNS( - b'\x5e\x39\x84\x00\x00\x01\x00\x01\x00\x00\x00\x00\x0a\x64\x61\x76\x69\x64' - b'\x2d\x63\x6f\x6d\x70\x05\x6c\x6f\x63\x61\x6c\x00\x00\x01\x00\x01\xc0\x0c' - b'\x00\x01\x00\x01\x00\x00\x00\x0a\x00\x04\xc0\xa8\x0a\x6c') - dns.qd[0].name = tester_host - dns.an[0].name = tester_host - dns.an[0].ip = socket.inet_aton('127.0.0.1') - dns.an[0].rdata = socket.inet_aton('127.0.0.1') - dns.id = id - print('Created answer to mdns (lwip) query: {} '.format(dns.__repr__())) - return dns.pack() - - -def mdns_server(esp_host, events): - UDP_IP = '0.0.0.0' - UDP_PORT = 5353 - MCAST_GRP = '224.0.0.251' - TESTER_NAME = u'tinytester.local' - TESTER_NAME_LWIP = u'tinytester-lwip.local' - QUERY_TIMEOUT = 0.2 - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - sock.setblocking(False) - sock.bind((UDP_IP, UDP_PORT)) - mreq = struct.pack('4sl', socket.inet_aton(MCAST_GRP), socket.INADDR_ANY) - sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - last_query_timepoint = time.time() - while not events['stop'].is_set(): - try: - current_time = time.time() - if current_time - last_query_timepoint > QUERY_TIMEOUT: - last_query_timepoint = current_time - if not events['esp_answered'].is_set(): - sock.sendto(get_dns_query_for_esp(esp_host), - (MCAST_GRP, UDP_PORT)) - if not events['esp_delegated_answered'].is_set(): - sock.sendto(get_dns_query_for_esp(esp_host + '-delegated'), - (MCAST_GRP, UDP_PORT)) - timeout = max( - 0, QUERY_TIMEOUT - (current_time - last_query_timepoint)) - read_socks, _, _ = select.select([sock], [], [], timeout) - if not read_socks: - continue - data, addr = sock.recvfrom(1024) - dns = dpkt.dns.DNS(data) - if len(dns.qd) > 0: - for dns_query in dns.qd: - if dns_query.type == dpkt.dns.DNS_A: - if dns_query.name == TESTER_NAME: - print('Received query: {} '.format(dns.__repr__())) - sock.sendto(get_dns_answer_to_mdns(TESTER_NAME), - (MCAST_GRP, UDP_PORT)) - elif dns_query.name == TESTER_NAME_LWIP: - print('Received query: {} '.format(dns.__repr__())) - sock.sendto( - get_dns_answer_to_mdns_lwip(TESTER_NAME_LWIP, dns.id), - addr) - if len(dns.an) > 0: - for dns_answer in dns.an: - if dns_answer.type == dpkt.dns.DNS_A: - print('Received answer from {}'.format(dns_answer.name)) - if dns_answer.name == esp_host + u'.local': - print('Received answer to esp32-mdns query: {}'.format( - dns.__repr__())) - events['esp_answered'].set() - if dns_answer.name == esp_host + u'-delegated.local': - print('Received answer to esp32-mdns-delegate query: {}'.format( - dns.__repr__())) - events['esp_delegated_answered'].set() - except socket.timeout: - break - except dpkt.UnpackError: - continue - - -def test_examples_protocol_mdns(dut): - """ - steps: | - 1. obtain IP address + init mdns example - 2. get the dut host name (and IP address) - 3. check the mdns name is accessible - 4. check DUT output if mdns advertized host is resolved - 5. check if DUT responds to dig - 6. check the DUT is searchable via reverse IP lookup - """ - - specific_host = dut.expect(r'mdns hostname set to: \[(.*?)\]')[1].decode() - - mdns_server_events = { - 'stop': Event(), - 'esp_answered': Event(), - 'esp_delegated_answered': Event() - } - mdns_responder = Thread(target=mdns_server, - args=(str(specific_host), mdns_server_events)) - ip_addresses = [] - if dut.app.sdkconfig.get('LWIP_IPV4') is True: - ipv4 = dut.expect(r'IPv4 address: (\d+\.\d+\.\d+\.\d+)[^\d]', - timeout=30)[1].decode() - ip_addresses.append(ipv4) - if dut.app.sdkconfig.get('LWIP_IPV6') is True: - ipv6_r = r':'.join((r'[0-9a-fA-F]{4}', ) * 8) - ipv6 = dut.expect(ipv6_r, timeout=30)[0].decode() - ip_addresses.append(ipv6) - print('Connected with IP addresses: {}'.format(','.join(ip_addresses))) - try: - # TODO: Add test for example disabling IPV4 - mdns_responder.start() - if dut.app.sdkconfig.get('LWIP_IPV4') is True: - # 3. check the mdns name is accessible. - if not mdns_server_events['esp_answered'].wait(timeout=30): - raise ValueError( - 'Test has failed: did not receive mdns answer within timeout') - if not mdns_server_events['esp_delegated_answered'].wait(timeout=30): - raise ValueError( - 'Test has failed: did not receive mdns answer for delegated host within timeout' - ) - # 4. check DUT output if mdns advertized host is resolved - dut.expect( - re.compile( - b'mdns-test: Query A: tinytester.local resolved to: 127.0.0.1') - ) - dut.expect( - re.compile( - b'mdns-test: gethostbyname: tinytester-lwip.local resolved to: 127.0.0.1' - )) - dut.expect( - re.compile( - b'mdns-test: getaddrinfo: tinytester-lwip.local resolved to: 127.0.0.1' - )) - # 5. check the DUT answers to `dig` command - dig_output = subprocess.check_output([ - 'dig', '+short', '-p', '5353', '@224.0.0.251', - '{}.local'.format(specific_host) - ]) - print('Resolving {} using "dig" succeeded with:\n{}'.format( - specific_host, dig_output)) - if not ipv4.encode('utf-8') in dig_output: - raise ValueError( - 'Test has failed: Incorrectly resolved DUT hostname using dig' - "Output should've contained DUT's IP address:{}".format(ipv4)) - # 6. check the DUT reverse lookup - if dut.app.sdkconfig.get('MDNS_RESPOND_REVERSE_QUERIES') is True: - for ip_address in ip_addresses: - dig_output = subprocess.check_output([ - 'dig', '+short', '-p', '5353', '@224.0.0.251', '-x', - '{}'.format(ip_address) - ]) - print('Reverse lookup for {} using "dig" succeeded with:\n{}'. - format(ip_address, dig_output)) - if specific_host not in dig_output.decode(): - raise ValueError( - 'Test has failed: Incorrectly resolved DUT IP address using dig' - "Output should've contained DUT's name:{}".format( - specific_host)) - - finally: - mdns_server_events['stop'].set() - mdns_responder.join() diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_custom_netif b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_custom_netif deleted file mode 100644 index b9d7120..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_custom_netif +++ /dev/null @@ -1,20 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_MDNS_RESOLVE_TEST_SERVICES=y -CONFIG_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_MDNS_PUBLISH_DELEGATE_HOST=y -CONFIG_MDNS_PREDEF_NETIF_STA=n -CONFIG_MDNS_PREDEF_NETIF_AP=n -CONFIG_MDNS_PREDEF_NETIF_ETH=n -CONFIG_MDNS_ADD_CUSTOM_NETIF=y -CONFIG_MDNS_RESPOND_REVERSE_QUERIES=y -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -CONFIG_EXAMPLE_CONNECT_ETHERNET=y -CONFIG_EXAMPLE_CONNECT_WIFI=n -CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y -CONFIG_EXAMPLE_ETH_PHY_IP101=y -CONFIG_EXAMPLE_ETH_MDC_GPIO=23 -CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 -CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 -CONFIG_EXAMPLE_ETH_PHY_ADDR=1 -CONFIG_EXAMPLE_CONNECT_IPV6=y -CONFIG_MDNS_BUTTON_GPIO=32 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_def b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_def deleted file mode 100644 index 703b454..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_def +++ /dev/null @@ -1,15 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_MDNS_RESOLVE_TEST_SERVICES=y -CONFIG_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_MDNS_PUBLISH_DELEGATE_HOST=y -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -CONFIG_EXAMPLE_CONNECT_ETHERNET=y -CONFIG_EXAMPLE_CONNECT_WIFI=n -CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y -CONFIG_EXAMPLE_ETH_PHY_IP101=y -CONFIG_EXAMPLE_ETH_MDC_GPIO=23 -CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 -CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 -CONFIG_EXAMPLE_ETH_PHY_ADDR=1 -CONFIG_EXAMPLE_CONNECT_IPV6=y -CONFIG_MDNS_BUTTON_GPIO=32 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_no_ipv4 b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_no_ipv4 deleted file mode 100644 index b77a752..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_no_ipv4 +++ /dev/null @@ -1,15 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_MDNS_RESOLVE_TEST_SERVICES=y -CONFIG_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_MDNS_PUBLISH_DELEGATE_HOST=y -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -CONFIG_LWIP_IPV4=n -CONFIG_EXAMPLE_CONNECT_ETHERNET=y -CONFIG_EXAMPLE_CONNECT_WIFI=n -CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y -CONFIG_EXAMPLE_ETH_PHY_IP101=y -CONFIG_EXAMPLE_ETH_MDC_GPIO=23 -CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 -CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 -CONFIG_EXAMPLE_ETH_PHY_ADDR=1 -CONFIG_MDNS_BUTTON_GPIO=32 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_no_ipv6 b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_no_ipv6 deleted file mode 100644 index d669ec0..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_no_ipv6 +++ /dev/null @@ -1,16 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_MDNS_RESOLVE_TEST_SERVICES=y -CONFIG_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_MDNS_PUBLISH_DELEGATE_HOST=y -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -CONFIG_LWIP_IPV6=n -CONFIG_EXAMPLE_CONNECT_IPV6=n -CONFIG_EXAMPLE_CONNECT_ETHERNET=y -CONFIG_EXAMPLE_CONNECT_WIFI=n -CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y -CONFIG_EXAMPLE_ETH_PHY_IP101=y -CONFIG_EXAMPLE_ETH_MDC_GPIO=23 -CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 -CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 -CONFIG_EXAMPLE_ETH_PHY_ADDR=1 -CONFIG_MDNS_BUTTON_GPIO=32 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_socket b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_socket deleted file mode 100644 index 5d92405..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/examples/query_advertise/sdkconfig.ci.eth_socket +++ /dev/null @@ -1,16 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_MDNS_RESOLVE_TEST_SERVICES=y -CONFIG_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_MDNS_PUBLISH_DELEGATE_HOST=y -CONFIG_MDNS_NETWORKING_SOCKET=y -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -CONFIG_EXAMPLE_CONNECT_ETHERNET=y -CONFIG_EXAMPLE_CONNECT_WIFI=n -CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y -CONFIG_EXAMPLE_ETH_PHY_IP101=y -CONFIG_EXAMPLE_ETH_MDC_GPIO=23 -CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 -CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 -CONFIG_EXAMPLE_ETH_PHY_ADDR=1 -CONFIG_EXAMPLE_CONNECT_IPV6=y -CONFIG_MDNS_BUTTON_GPIO=32 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/idf_component.yml b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/idf_component.yml deleted file mode 100644 index b68e93f..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/idf_component.yml +++ /dev/null @@ -1,6 +0,0 @@ -dependencies: - idf: - version: '>=5.0' -description: mDNS -url: https://github.com/espressif/esp-protocols/tree/master/components/mdns -version: 1.2.4 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/include/mdns.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/include/mdns.h deleted file mode 100644 index 7abcc56..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/include/mdns.h +++ /dev/null @@ -1,837 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef ESP_MDNS_H_ -#define ESP_MDNS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define MDNS_TYPE_A 0x0001 -#define MDNS_TYPE_PTR 0x000C -#define MDNS_TYPE_TXT 0x0010 -#define MDNS_TYPE_AAAA 0x001C -#define MDNS_TYPE_SRV 0x0021 -#define MDNS_TYPE_OPT 0x0029 -#define MDNS_TYPE_NSEC 0x002F -#define MDNS_TYPE_ANY 0x00FF - -/** - * @brief Asynchronous query handle - */ -typedef struct mdns_search_once_s mdns_search_once_t; - -typedef enum { - MDNS_EVENT_ENABLE_IP4 = 1 << 1, - MDNS_EVENT_ENABLE_IP6 = 1 << 2, - MDNS_EVENT_ANNOUNCE_IP4 = 1 << 3, - MDNS_EVENT_ANNOUNCE_IP6 = 1 << 4, - MDNS_EVENT_DISABLE_IP4 = 1 << 5, - MDNS_EVENT_DISABLE_IP6 = 1 << 6, - MDNS_EVENT_IP4_REVERSE_LOOKUP = 1 << 7, - MDNS_EVENT_IP6_REVERSE_LOOKUP = 1 << 8, -} mdns_event_actions_t; - -/** - * @brief mDNS enum to specify the ip_protocol type - */ -typedef enum { - MDNS_IP_PROTOCOL_V4, - MDNS_IP_PROTOCOL_V6, - MDNS_IP_PROTOCOL_MAX -} mdns_ip_protocol_t; - -/** - * @brief mDNS basic text item structure - * Used in mdns_service_add() - */ -typedef struct { - const char *key; /*!< item key name */ - const char *value; /*!< item value string */ -} mdns_txt_item_t; - -/** - * @brief mDNS query linked list IP item - */ -typedef struct mdns_ip_addr_s { - esp_ip_addr_t addr; /*!< IP address */ - struct mdns_ip_addr_s *next; /*!< next IP, or NULL for the last IP in the list */ -} mdns_ip_addr_t; - -/** - * @brief mDNS query type to be explicitly set to either Unicast or Multicast - */ -typedef enum { - MDNS_QUERY_UNICAST, - MDNS_QUERY_MULTICAST, -} mdns_query_transmission_type_t; - -/** - * @brief mDNS query result structure - */ -typedef struct mdns_result_s { - struct mdns_result_s *next; /*!< next result, or NULL for the last result in the list */ - - esp_netif_t *esp_netif; /*!< ptr to corresponding esp-netif */ - uint32_t ttl; /*!< time to live */ - - mdns_ip_protocol_t ip_protocol; /*!< ip_protocol type of the interface (v4/v6) */ - // PTR - char *instance_name; /*!< instance name */ - char *service_type; /*!< service type */ - char *proto; /*!< srevice protocol */ - // SRV - char *hostname; /*!< hostname */ - uint16_t port; /*!< service port */ - // TXT - mdns_txt_item_t *txt; /*!< txt record */ - uint8_t *txt_value_len; /*!< array of txt value len of each record */ - size_t txt_count; /*!< number of txt items */ - // A and AAAA - mdns_ip_addr_t *addr; /*!< linked list of IP addresses found */ -} mdns_result_t; - -typedef void (*mdns_query_notify_t)(mdns_search_once_t *search); - -/** - * @brief Initialize mDNS on given interface - * - * @return - * - ESP_OK on success - * - ESP_ERR_INVALID_STATE when failed to register event handler - * - ESP_ERR_NO_MEM on memory error - * - ESP_FAIL when failed to start mdns task - */ -esp_err_t mdns_init(void); - -/** - * @brief Stop and free mDNS server - * - */ -void mdns_free(void); - -/** - * @brief Set the hostname for mDNS server - * required if you want to advertise services - * - * @param hostname Hostname to set - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_hostname_set(const char *hostname); - -/** - * @brief Get the hostname for mDNS server - * - * @param hostname pointer to the hostname, it should be allocated - * and hold at least MDNS_NAME_BUF_LEN chars - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_INVALID_STATE when mdns is not initialized - */ -esp_err_t mdns_hostname_get(char *hostname); - -/** - * @brief Adds a hostname and address to be delegated - * A/AAAA queries will be replied for the hostname and - * services can be added to this host. - * - * @param hostname Hostname to add - * @param address_list The IP address list of the host - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - * - */ -esp_err_t mdns_delegate_hostname_add(const char *hostname, const mdns_ip_addr_t *address_list); - -/** - * @brief Set the address to a delegated hostname - * - * @param hostname Hostname to set - * @param address_list The IP address list of the host - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - * - */ -esp_err_t mdns_delegate_hostname_set_address(const char *hostname, const mdns_ip_addr_t *address_list); - -/** - * @brief Remove a delegated hostname - * All the services added to this host will also be removed. - * - * @param hostname Hostname to remove - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - * - */ -esp_err_t mdns_delegate_hostname_remove(const char *hostname); - -/** - * @brief Query whether a hostname has been added - * - * @param hostname Hostname to query - * - * @return - * - true The hostname has been added. - * - false The hostname has not been added. - * - */ -bool mdns_hostname_exists(const char *hostname); - -/** - * @brief Set the default instance name for mDNS server - * - * @param instance_name Instance name to set - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_instance_name_set(const char *instance_name); - -/** - * @brief Add service to mDNS server - * - * @note The value length of txt items will be automatically decided by strlen - * - * @param instance_name instance name to set. If NULL, - * global instance name or hostname will be used. - * Note that MDNS_MULTIPLE_INSTANCE config option - * needs to be enabled for adding multiple instances - * with the same instance type. - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param port service port - * @param txt string array of TXT data (eg. {{"var","val"},{"other","2"}}) - * @param num_items number of items in TXT data - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - * - ESP_FAIL failed to add service - */ -esp_err_t mdns_service_add(const char *instance_name, const char *service_type, const char *proto, uint16_t port, mdns_txt_item_t txt[], size_t num_items); - -/** - * @brief Add service to mDNS server with a delegated hostname - * - * @note The value length of txt items will be automatically decided by strlen - * - * @param instance_name instance name to set. If NULL, - * global instance name or hostname will be used - * Note that MDNS_MULTIPLE_INSTANCE config option - * needs to be enabled for adding multiple instances - * with the same instance type. - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param port service port - * @param txt string array of TXT data (eg. {{"var","val"},{"other","2"}}) - * @param num_items number of items in TXT data - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NO_MEM memory error - * - ESP_FAIL failed to add service - */ -esp_err_t mdns_service_add_for_host(const char *instance_name, const char *service_type, const char *proto, - const char *hostname, uint16_t port, mdns_txt_item_t txt[], size_t num_items); - -/** - * @brief Check whether a service has been added. - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, checks for the local hostname. - * - * @return - * - true Correspondding service has been added. - * - false Service not found. - */ -bool mdns_service_exists(const char *service_type, const char *proto, const char *hostname); - -/** - * @brief Check whether a service has been added. - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, checks for the local hostname. - * - * @return - * - true Correspondding service has been added. - * - false Service not found. - */ -bool mdns_service_exists_with_instance(const char *instance, const char *service_type, const char *proto, - const char *hostname); - -/** - * @brief Remove service from mDNS server - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_remove(const char *service_type, const char *proto); - -/** - * @brief Remove service from mDNS server with hostname - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_remove_for_host(const char *instance, const char *service_type, const char *proto, const char *hostname); - -/** - * @brief Set instance name for service - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param instance_name instance name to set - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_instance_name_set(const char *service_type, const char *proto, const char *instance_name); - -/** - * @brief Set instance name for service with hostname - * - * @param instance_old original instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param instance_name instance name to set - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_instance_name_set_for_host(const char *instance_old, const char *service_type, const char *proto, const char *hostname, - const char *instance_name); - -/** - * @brief Set service port - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param port service port - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_port_set(const char *service_type, const char *proto, uint16_t port); - - -/** - * @brief Set service port with hostname - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param port service port - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_port_set_for_host(const char *instance, const char *service_type, const char *proto, const char *hostname, - uint16_t port); - -/** - * @brief Replace all TXT items for service - * - * @note The value length of txt items will be automatically decided by strlen - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param txt array of TXT data (eg. {{"var","val"},{"other","2"}}) - * @param num_items number of items in TXT data - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_set(const char *service_type, const char *proto, mdns_txt_item_t txt[], uint8_t num_items); - -/** - * @brief Replace all TXT items for service with hostname - * - * @note The value length of txt items will be automatically decided by strlen - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param txt array of TXT data (eg. {{"var","val"},{"other","2"}}) - * @param num_items number of items in TXT data - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_set_for_host(const char *instance, const char *service_type, const char *proto, const char *hostname, - mdns_txt_item_t txt[], uint8_t num_items); - -/** - * @brief Set/Add TXT item for service TXT record - * - * @note The value length will be automatically decided by strlen - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param key the key that you want to add/update - * @param value the new value of the key - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_item_set(const char *service_type, const char *proto, const char *key, const char *value); - -/** - * @brief Set/Add TXT item for service TXT record - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param key the key that you want to add/update - * @param value the new value of the key - * @param value_len the length of the value - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service_type, const char *proto, - const char *key, const char *value, uint8_t value_len); - -/** - * @brief Set/Add TXT item for service TXT record with hostname - * - * @note The value length will be automatically decided by strlen - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param key the key that you want to add/update - * @param value the new value of the key - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_item_set_for_host(const char *instance, const char *service_type, const char *proto, const char *hostname, - const char *key, const char *value); - -/** - * @brief Set/Add TXT item for service TXT record with hostname and txt value length - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param key the key that you want to add/update - * @param value the new value of the key - * @param value_len the length of the value - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char *instance, const char *service_type, const char *proto, - const char *hostname, const char *key, - const char *value, uint8_t value_len); - -/** - * @brief Remove TXT item for service TXT record - * - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param key the key that you want to remove - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_item_remove(const char *service_type, const char *proto, const char *key); - -/** - * @brief Remove TXT item for service TXT record with hostname - * - * @param instance instance name - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param key the key that you want to remove - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_txt_item_remove_for_host(const char *instance, const char *service_type, const char *proto, const char *hostname, - const char *key); - -/** - * @brief Add subtype for service. - * - * @param instance_name instance name. If NULL, will find the first service with the same service type and protocol. - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param hostname service hostname. If NULL, local hostname will be used. - * @param subtype The subtype to add. - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - * - ESP_ERR_NOT_FOUND Service not found - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_service_subtype_add_for_host(const char *instance_name, const char *service_type, const char *proto, - const char *hostname, const char *subtype); - -/** - * @brief Remove and free all services from mDNS server - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_ARG Parameter error - */ -esp_err_t mdns_service_remove_all(void); - -/** - * @brief Deletes the finished query. Call this only after the search has ended! - * - * @param search pointer to search object - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE search has not finished - * - ESP_ERR_INVALID_ARG pointer to search object is NULL - */ -esp_err_t mdns_query_async_delete(mdns_search_once_t *search); - -/** - * @brief Get results from search pointer. Results available as a pointer to the output parameter. - * Pointer to search object has to be deleted via `mdns_query_async_delete` once the query has finished. - * The results although have to be freed manually. - * - * @param search pointer to search object - * @param timeout time in milliseconds to wait for answers - * @param results pointer to the results of the query - * @param num_results pointer to the number of the actual result items (set to NULL to ignore this return value) - * - * @return - * True if search has finished before or at timeout - * False if search timeout is over - */ -bool mdns_query_async_get_results(mdns_search_once_t *search, uint32_t timeout, mdns_result_t **results, uint8_t *num_results); - -/** - * @brief Query mDNS for host or service asynchronousely. - * Search has to be tested for progress and deleted manually! - * - * @param name service instance or host name (NULL for PTR queries) - * @param service_type service type (_http, _arduino, _ftp etc.) (NULL for host queries) - * @param proto service protocol (_tcp, _udp, etc.) (NULL for host queries) - * @param type type of query (MDNS_TYPE_*) - * @param timeout time in milliseconds during which mDNS query is active - * @param max_results maximum results to be collected - * @param notifier Notification function to be called when the result is ready, can be NULL - * - * @return mdns_search_once_s pointer to new search object if query initiated successfully. - * NULL otherwise. - */ -mdns_search_once_t *mdns_query_async_new(const char *name, const char *service_type, const char *proto, uint16_t type, - uint32_t timeout, size_t max_results, mdns_query_notify_t notifier); - -/** - * @brief Generic mDNS query - * All following query methods are derived from this one - * - * @param name service instance or host name (NULL for PTR queries) - * @param service_type service type (_http, _arduino, _ftp etc.) (NULL for host queries) - * @param proto service protocol (_tcp, _udp, etc.) (NULL for host queries) - * @param type type of query (MDNS_TYPE_*) - * @param transmission_type either Unicast query, or Multicast query - * @param timeout time in milliseconds to wait for answers. - * @param max_results maximum results to be collected - * @param results pointer to the results of the query - * results must be freed using mdns_query_results_free below - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG timeout was not given - */ -esp_err_t mdns_query_generic(const char *name, const char *service_type, const char *proto, uint16_t type, - mdns_query_transmission_type_t transmission_type, uint32_t timeout, size_t max_results, mdns_result_t **results); - -/** - * @brief Query mDNS for host or service - * - * Note that querying PTR types sends Multicast query, all other types send Unicast queries - * - * @param name service instance or host name (NULL for PTR queries) - * @param service_type service type (_http, _arduino, _ftp etc.) (NULL for host queries) - * @param proto service protocol (_tcp, _udp, etc.) (NULL for host queries) - * @param type type of query (MDNS_TYPE_*) - * @param timeout time in milliseconds to wait for answers. - * @param max_results maximum results to be collected - * @param results pointer to the results of the query - * results must be freed using mdns_query_results_free below - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG timeout was not given - */ -esp_err_t mdns_query(const char *name, const char *service_type, const char *proto, uint16_t type, uint32_t timeout, size_t max_results, mdns_result_t **results); - -/** - * @brief Free query results - * - * @param results linked list of results to be freed - */ -void mdns_query_results_free(mdns_result_t *results); - -/** - * @brief Query mDNS for service - * - * @param service_type service type (_http, _arduino, _ftp etc.) - * @param proto service protocol (_tcp, _udp, etc.) - * @param timeout time in milliseconds to wait for answer. - * @param max_results maximum results to be collected - * @param results pointer to the results of the query - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_query_ptr(const char *service_type, const char *proto, uint32_t timeout, size_t max_results, mdns_result_t **results); - -/** - * @brief Query mDNS for SRV record - * - * @param instance_name service instance name - * @param service_type service type (_http, _arduino, _ftp etc.) - * @param proto service protocol (_tcp, _udp, etc.) - * @param timeout time in milliseconds to wait for answer. - * @param result pointer to the result of the query - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_query_srv(const char *instance_name, const char *service_type, const char *proto, uint32_t timeout, mdns_result_t **result); - -/** - * @brief Query mDNS for TXT record - * - * @param instance_name service instance name - * @param service_type service type (_http, _arduino, _ftp etc.) - * @param proto service protocol (_tcp, _udp, etc.) - * @param timeout time in milliseconds to wait for answer. - * @param result pointer to the result of the query - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_query_txt(const char *instance_name, const char *service_type, const char *proto, uint32_t timeout, mdns_result_t **result); - -/** - * @brief Look up delegated services. - * - * @param instance instance name (NULL for uncertain instance) - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param max_results maximum results to be collected - * @param result pointer to the result of the search - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_lookup_delegated_service(const char *instance, const char *service_type, const char *proto, size_t max_results, - mdns_result_t **result); - -/** - * @brief Look up self hosted services. - * - * @param instance instance name (NULL for uncertain instance) - * @param service_type service type (_http, _ftp, etc) - * @param proto service protocol (_tcp, _udp) - * @param max_results maximum results to be collected - * @param result pointer to the result of the search - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_lookup_selfhosted_service(const char *instance, const char *service_type, const char *proto, size_t max_results, - mdns_result_t **result); - -/** - * @brief Query mDNS for A record - * - * @param host_name host name to look for - * @param timeout time in milliseconds to wait for answer. - * @param addr pointer to the resulting IP4 address - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_query_a(const char *host_name, uint32_t timeout, esp_ip4_addr_t *addr); - -#if CONFIG_LWIP_IPV6 -/** - * @brief Query mDNS for A record - * - * Please note that hostname must not contain domain name, as mDNS uses '.local' domain. - * - * @param host_name host name to look for - * @param timeout time in milliseconds to wait for answer. If 0, max_results needs to be defined - * @param addr pointer to the resulting IP6 address - * - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NO_MEM memory error - * - ESP_ERR_INVALID_ARG parameter error - */ -esp_err_t mdns_query_aaaa(const char *host_name, uint32_t timeout, esp_ip6_addr_t *addr); -#endif - - -/** - * @brief Register custom esp_netif with mDNS functionality - * mDNS service runs by default on preconfigured interfaces (STA, AP, ETH). - * This API enables running the service on any customized interface, - * either using standard WiFi or Ethernet driver or any kind of user defined driver. - * - * @param esp_netif Pointer to esp-netif interface - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running or this netif is already registered - * - ESP_ERR_NO_MEM not enough memory for this in interface in the netif list (see CONFIG_MDNS_MAX_INTERFACES) - */ -esp_err_t mdns_register_netif(esp_netif_t *esp_netif); - -/** - * @brief Unregister esp-netif already registered in mDNS service - * - * @param esp_netif Pointer to esp-netif interface - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running - * - ESP_ERR_NOT_FOUND this esp-netif was not registered in mDNS service - */ -esp_err_t mdns_unregister_netif(esp_netif_t *esp_netif); - -/** - * @brief Set esp_netif to a desired state, or perform a desired action, such as enable/disable this interface - * or send announcement packets to this netif - * - * * This function is used to enable (probe, resolve conflicts and announce), announce, or disable (send bye) mDNS - * services on the specified network interface. - * * This function must be called if users registers a specific interface using mdns_register_netif() - * to enable mDNS services on that interface. - * * This function could be used in IP/connection event handlers to automatically enable/announce mDNS services - * when network properties change and/or disable them on disconnection. - * - * @param esp_netif Pointer to esp-netif interface - * @param event_action Disable/Enable/Announce on this interface over IPv4/IPv6 protocol. - * Actions enumerated in mdns_event_actions_t type. - * @return - * - ESP_OK success - * - ESP_ERR_INVALID_STATE mDNS is not running or this netif is not registered - * - ESP_ERR_NO_MEM memory error - */ -esp_err_t mdns_netif_action(esp_netif_t *esp_netif, mdns_event_actions_t event_action); - -#ifdef __cplusplus -} -#endif - -#endif /* ESP_MDNS_H_ */ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/include/mdns_console.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/include/mdns_console.h deleted file mode 100644 index cb28eca..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/include/mdns_console.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef _MDNS_CONSOLE_H_ -#define _MDNS_CONSOLE_H_ - -/** - * @brief Register MDNS functions with the console component - */ -void mdns_console_register(void); - -#endif /* _MDNS_CONSOLE_H_ */ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns.c deleted file mode 100644 index cef1416..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns.c +++ /dev/null @@ -1,6800 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/queue.h" -#include "freertos/semphr.h" -#include "esp_log.h" -#include "esp_event.h" -#include "mdns.h" -#include "mdns_private.h" -#include "mdns_networking.h" -#include "esp_log.h" -#include "esp_random.h" - -#if CONFIG_ETH_ENABLED && CONFIG_MDNS_PREDEF_NETIF_ETH -#include "esp_eth.h" -#endif -#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP -#include "esp_wifi.h" -#endif - -#if ESP_IDF_VERSION <= ESP_IDF_VERSION_VAL(5, 1, 0) -#define MDNS_ESP_WIFI_ENABLED CONFIG_SOC_WIFI_SUPPORTED -#else -#define MDNS_ESP_WIFI_ENABLED CONFIG_ESP_WIFI_ENABLED -#endif - -#ifdef MDNS_ENABLE_DEBUG -void mdns_debug_packet(const uint8_t *data, size_t len); -#endif - -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) -#endif - -// Internal size of IPv6 address is defined here as size of AAAA record in mdns packet -// since the ip6_addr_t is defined in lwip and depends on using IPv6 zones -#define _MDNS_SIZEOF_IP6_ADDR (MDNS_ANSWER_AAAA_SIZE) - -static const char *MDNS_DEFAULT_DOMAIN = "local"; -static const char *MDNS_SUB_STR = "_sub"; - -mdns_server_t *_mdns_server = NULL; -static mdns_host_item_t *_mdns_host_list = NULL; -static mdns_host_item_t _mdns_self_host; - -static const char *TAG = "mdns"; - -static volatile TaskHandle_t _mdns_service_task_handle = NULL; -static SemaphoreHandle_t _mdns_service_semaphore = NULL; - -static void _mdns_search_finish_done(void); -static mdns_search_once_t *_mdns_search_find_from(mdns_search_once_t *search, mdns_name_t *name, uint16_t type, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol); -static void _mdns_search_result_add_ip(mdns_search_once_t *search, const char *hostname, esp_ip_addr_t *ip, - mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint32_t ttl); -static void _mdns_search_result_add_srv(mdns_search_once_t *search, const char *hostname, uint16_t port, - mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint32_t ttl); -static void _mdns_search_result_add_txt(mdns_search_once_t *search, mdns_txt_item_t *txt, uint8_t *txt_value_len, - size_t txt_count, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, - uint32_t ttl); -static mdns_result_t *_mdns_search_result_add_ptr(mdns_search_once_t *search, const char *instance, - const char *service_type, const char *proto, mdns_if_t tcpip_if, - mdns_ip_protocol_t ip_protocol, uint32_t ttl); -static bool _mdns_append_host_list_in_services(mdns_out_answer_t **destination, mdns_srv_item_t *services[], size_t services_len, bool flush, bool bye); -static bool _mdns_append_host_list(mdns_out_answer_t **destination, bool flush, bool bye); -static void _mdns_remap_self_service_hostname(const char *old_hostname, const char *new_hostname); -static esp_err_t mdns_post_custom_action_tcpip_if(mdns_if_t mdns_if, mdns_event_actions_t event_action); - -typedef enum { - MDNS_IF_STA = 0, - MDNS_IF_AP = 1, - MDNS_IF_ETH = 2, -} mdns_predef_if_t; - -typedef struct mdns_interfaces mdns_interfaces_t; - -struct mdns_interfaces { - const bool predefined; - esp_netif_t *netif; - const mdns_predef_if_t predef_if; - mdns_if_t duplicate; -}; - -/* - * @brief Internal collection of mdns supported interfaces - * - */ -static mdns_interfaces_t s_esp_netifs[MDNS_MAX_INTERFACES] = { -#if CONFIG_MDNS_PREDEF_NETIF_STA - { .predefined = true, .netif = NULL, .predef_if = MDNS_IF_STA, .duplicate = MDNS_MAX_INTERFACES }, -#endif -#if CONFIG_MDNS_PREDEF_NETIF_AP - { .predefined = true, .netif = NULL, .predef_if = MDNS_IF_AP, .duplicate = MDNS_MAX_INTERFACES }, -#endif -#if CONFIG_MDNS_PREDEF_NETIF_ETH - { .predefined = true, .netif = NULL, .predef_if = MDNS_IF_ETH, .duplicate = MDNS_MAX_INTERFACES }, -#endif -}; - - -/** - * @brief Convert Predefined interface to the netif id from the internal netif list - * @param predef_if Predefined interface enum - * @return Ordinal number of internal list of mdns network interface. - * Returns MDNS_MAX_INTERFACES if the predefined interface wasn't found in the list - */ -static mdns_if_t mdns_if_from_preset_if(mdns_predef_if_t predef_if) -{ - for (int i = 0; i < MDNS_MAX_INTERFACES; ++i) { - if (s_esp_netifs[i].predefined && s_esp_netifs[i].predef_if == predef_if) { - return i; - } - } - return MDNS_MAX_INTERFACES; -} - -/** - * @brief Convert Predefined interface to esp-netif handle - * @param predef_if Predefined interface enum - * @return esp_netif pointer from system list of network interfaces - */ -static inline esp_netif_t *esp_netif_from_preset_if(mdns_predef_if_t predef_if) -{ - switch (predef_if) { - case MDNS_IF_STA: - return esp_netif_get_handle_from_ifkey("WIFI_STA_DEF"); - case MDNS_IF_AP: - return esp_netif_get_handle_from_ifkey("WIFI_AP_DEF"); -#if CONFIG_ETH_ENABLED && CONFIG_MDNS_PREDEF_NETIF_ETH - case MDNS_IF_ETH: - return esp_netif_get_handle_from_ifkey("ETH_DEF"); -#endif - default: - return NULL; - } -} - -/** - * @brief Gets the actual esp_netif pointer from the internal network interface list - * - * The supplied ordinal number could - * - point to a predef netif -> "STA", "AP", "ETH" - * - if no entry in the list (NULL) -> check if the system added this netif - * - point to a custom netif -> just return the entry in the list - * - users is responsible for the lifetime of this netif (to be valid between mdns-init -> deinit) - * - * @param tcpip_if Ordinal number of the interface - * @return Pointer ot the esp_netif object if the interface is available, NULL otherwise - */ -esp_netif_t *_mdns_get_esp_netif(mdns_if_t tcpip_if) -{ - if (tcpip_if < MDNS_MAX_INTERFACES) { - if (s_esp_netifs[tcpip_if].netif == NULL && s_esp_netifs[tcpip_if].predefined) { - // If the local copy is NULL and this netif is predefined -> we can find it in the global netif list - s_esp_netifs[tcpip_if].netif = esp_netif_from_preset_if(s_esp_netifs[tcpip_if].predef_if); - // failing to find it means that the netif is *not* available -> return NULL - } - return s_esp_netifs[tcpip_if].netif; - } - return NULL; -} - - -/* - * @brief Clean internal mdns interface's pointer - */ -static inline void _mdns_clean_netif_ptr(mdns_if_t tcpip_if) -{ - if (tcpip_if < MDNS_MAX_INTERFACES) { - s_esp_netifs[tcpip_if].netif = NULL; - } -} - - -/* - * @brief Convert esp-netif handle to mdns if - */ -static mdns_if_t _mdns_get_if_from_esp_netif(esp_netif_t *esp_netif) -{ - for (int i = 0; i < MDNS_MAX_INTERFACES; ++i) { - // The predefined netifs in the static array are NULL when firstly calling this function - // if IPv4 is disabled. Set these netifs here. - if (s_esp_netifs[i].netif == NULL && s_esp_netifs[i].predefined) { - s_esp_netifs[i].netif = esp_netif_from_preset_if(s_esp_netifs[i].predef_if); - } - if (esp_netif == s_esp_netifs[i].netif) { - return i; - } - } - return MDNS_MAX_INTERFACES; -} - - - -static inline bool _str_null_or_empty(const char *str) -{ - return (str == NULL || *str == 0); -} - -/* - * @brief Appends/increments a number to name/instance in case of collision - * */ -static char *_mdns_mangle_name(char *in) -{ - char *p = strrchr(in, '-'); - int suffix = 0; - if (p == NULL) { - //No - in ``in`` - suffix = 2; - } else { - char *endp = NULL; - suffix = strtol(p + 1, &endp, 10); - if (*endp != 0) { - //suffix is not numerical - suffix = 2; - p = NULL; //so we append -suffix to the entire string - } - } - char *ret; - if (p == NULL) { - //need to add -2 to string - ret = malloc(strlen(in) + 3); - if (ret == NULL) { - HOOK_MALLOC_FAILED; - return NULL; - } - sprintf(ret, "%s-2", in); - } else { - ret = malloc(strlen(in) + 2); //one extra byte in case 9-10 or 99-100 etc - if (ret == NULL) { - HOOK_MALLOC_FAILED; - return NULL; - } - strcpy(ret, in); - int baseLen = p - in; //length of 'bla' in 'bla-123' - //overwrite suffix with new suffix - sprintf(ret + baseLen, "-%d", suffix + 1); - } - return ret; -} - -static bool _mdns_service_match(const mdns_service_t *srv, const char *service, const char *proto, - const char *hostname) -{ - if (!service || !proto || !srv->hostname) { - return false; - } - return !strcasecmp(srv->service, service) && !strcasecmp(srv->proto, proto) && - (_str_null_or_empty(hostname) || !strcasecmp(srv->hostname, hostname)); -} - -/** - * @brief finds service from given service type - * @param server the server - * @param service service type to match - * @param proto proto to match - * @param hostname hostname of the service (if non-null) - * - * @return the service item if found or NULL on error - */ -static mdns_srv_item_t *_mdns_get_service_item(const char *service, const char *proto, const char *hostname) -{ - mdns_srv_item_t *s = _mdns_server->services; - while (s) { - if (_mdns_service_match(s->service, service, proto, hostname)) { - return s; - } - s = s->next; - } - return NULL; -} - -static mdns_srv_item_t *_mdns_get_service_item_subtype(const char *subtype, const char *service, const char *proto) -{ - mdns_srv_item_t *s = _mdns_server->services; - while (s) { - if (_mdns_service_match(s->service, service, proto, NULL)) { - mdns_subtype_t *subtype_item = s->service->subtype; - while (subtype_item) { - if (!strcasecmp(subtype_item->subtype, subtype)) { - return s; - } - subtype_item = subtype_item->next; - } - } - s = s->next; - } - return NULL; -} - -static mdns_host_item_t *mdns_get_host_item(const char *hostname) -{ - if (hostname == NULL || strcasecmp(hostname, _mdns_server->hostname) == 0) { - return &_mdns_self_host; - } - mdns_host_item_t *host = _mdns_host_list; - while (host != NULL) { - if (strcasecmp(host->hostname, hostname) == 0) { - return host; - } - host = host->next; - } - return NULL; -} - -static bool _mdns_can_add_more_services(void) -{ - mdns_srv_item_t *s = _mdns_server->services; - uint16_t service_num = 0; - while (s) { - service_num ++; - s = s->next; - if (service_num >= MDNS_MAX_SERVICES) { - return false; - } - } - - return true; -} - -esp_err_t _mdns_send_rx_action(mdns_rx_packet_t *packet) -{ - mdns_action_t *action = NULL; - - action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - - action->type = ACTION_RX_HANDLE; - action->data.rx_handle.packet = packet; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -static const char *_mdns_get_default_instance_name(void) -{ - if (_mdns_server && !_str_null_or_empty(_mdns_server->instance)) { - return _mdns_server->instance; - } - - if (_mdns_server && !_str_null_or_empty(_mdns_server->hostname)) { - return _mdns_server->hostname; - } - - return NULL; -} - -/** - * @brief Get the service name of a service - */ -static const char *_mdns_get_service_instance_name(const mdns_service_t *service) -{ - if (service && !_str_null_or_empty(service->instance)) { - return service->instance; - } - - return _mdns_get_default_instance_name(); -} - -static bool _mdns_instance_name_match(const char *lhs, const char *rhs) -{ - if (lhs == NULL) { - lhs = _mdns_get_default_instance_name(); - } - if (rhs == NULL) { - rhs = _mdns_get_default_instance_name(); - } - return !strcasecmp(lhs, rhs); -} - -static bool _mdns_service_match_instance(const mdns_service_t *srv, const char *instance, const char *service, - const char *proto, const char *hostname) -{ - // service and proto must be supplied, if not this instance won't match - if (!service || !proto) { - return false; - } - // instance==NULL -> _mdns_instance_name_match() will check the default instance - // hostname==NULL -> matches if instance, service and proto matches - return !strcasecmp(srv->service, service) && _mdns_instance_name_match(srv->instance, instance) && - !strcasecmp(srv->proto, proto) && (_str_null_or_empty(hostname) || !strcasecmp(srv->hostname, hostname)); -} - -static mdns_srv_item_t *_mdns_get_service_item_instance(const char *instance, const char *service, const char *proto, - const char *hostname) -{ - mdns_srv_item_t *s = _mdns_server->services; - while (s) { - if (instance) { - if (_mdns_service_match_instance(s->service, instance, service, proto, hostname)) { - return s; - } - } else { - if (_mdns_service_match(s->service, service, proto, hostname)) { - return s; - } - } - s = s->next; - } - return NULL; -} - -/** - * @brief reads MDNS FQDN into mdns_name_t structure - * FQDN is in format: [hostname.|[instance.]_service._proto.]local. - * - * @param packet MDNS packet - * @param start Starting point of FQDN - * @param name mdns_name_t structure to populate - * @param buf temporary char buffer - * - * @return the address after the parsed FQDN in the packet or NULL on error - */ -static const uint8_t *_mdns_read_fqdn(const uint8_t *packet, const uint8_t *start, mdns_name_t *name, char *buf, size_t packet_len) -{ - size_t index = 0; - const uint8_t *packet_end = packet + packet_len; - while (start + index < packet_end && start[index]) { - if (name->parts == 4) { - name->invalid = true; - } - uint8_t len = start[index++]; - if (len < 0xC0) { - if (len > 63) { - //length can not be more than 63 - return NULL; - } - uint8_t i; - for (i = 0; i < len; i++) { - if (start + index >= packet_end) { - return NULL; - } - buf[i] = start[index++]; - } - buf[len] = '\0'; - if (name->parts == 1 && buf[0] != '_' - && (strcasecmp(buf, MDNS_DEFAULT_DOMAIN) != 0) - && (strcasecmp(buf, "arpa") != 0) -#ifndef CONFIG_MDNS_RESPOND_REVERSE_QUERIES - && (strcasecmp(buf, "ip6") != 0) - && (strcasecmp(buf, "in-addr") != 0) -#endif - ) { - strlcat(name->host, ".", sizeof(name->host)); - strlcat(name->host, buf, sizeof(name->host)); - } else if (strcasecmp(buf, MDNS_SUB_STR) == 0) { - name->sub = 1; - } else if (!name->invalid) { - char *mdns_name_ptrs[] = {name->host, name->service, name->proto, name->domain}; - memcpy(mdns_name_ptrs[name->parts++], buf, len + 1); - } - } else { - size_t address = (((uint16_t)len & 0x3F) << 8) | start[index++]; - if ((packet + address) >= start) { - //reference address can not be after where we are - return NULL; - } - if (_mdns_read_fqdn(packet, packet + address, name, buf, packet_len)) { - return start + index; - } - return NULL; - } - } - return start + index + 1; -} - -/** - * @brief sets uint16_t value in a packet - * - * @param packet MDNS packet - * @param index offset of uint16_t value - * @param value the value to set - */ -static inline void _mdns_set_u16(uint8_t *packet, uint16_t index, uint16_t value) -{ - if ((index + 1) >= MDNS_MAX_PACKET_SIZE) { - return; - } - packet[index] = (value >> 8) & 0xFF; - packet[index + 1] = value & 0xFF; -} - -/** - * @brief appends byte in a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param value the value to set - * - * @return length of added data: 0 on error or 1 on success - */ -static inline uint8_t _mdns_append_u8(uint8_t *packet, uint16_t *index, uint8_t value) -{ - if (*index >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - packet[*index] = value; - *index += 1; - return 1; -} - -/** - * @brief appends uint16_t in a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param value the value to set - * - * @return length of added data: 0 on error or 2 on success - */ -static inline uint8_t _mdns_append_u16(uint8_t *packet, uint16_t *index, uint16_t value) -{ - if ((*index + 1) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - _mdns_append_u8(packet, index, (value >> 8) & 0xFF); - _mdns_append_u8(packet, index, value & 0xFF); - return 2; -} - -/** - * @brief appends uint32_t in a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param value the value to set - * - * @return length of added data: 0 on error or 4 on success - */ -static inline uint8_t _mdns_append_u32(uint8_t *packet, uint16_t *index, uint32_t value) -{ - if ((*index + 3) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - _mdns_append_u8(packet, index, (value >> 24) & 0xFF); - _mdns_append_u8(packet, index, (value >> 16) & 0xFF); - _mdns_append_u8(packet, index, (value >> 8) & 0xFF); - _mdns_append_u8(packet, index, value & 0xFF); - return 4; -} - -/** - * @brief appends answer type, class, ttl and data length to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param type answer type - * @param ttl answer ttl - * - * @return length of added data: 0 on error or 10 on success - */ -static inline uint8_t _mdns_append_type(uint8_t *packet, uint16_t *index, uint8_t type, bool flush, uint32_t ttl) -{ - if ((*index + 10) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - uint16_t mdns_class = MDNS_CLASS_IN; - if (flush) { - mdns_class = MDNS_CLASS_IN_FLUSH_CACHE; - } - if (type == MDNS_ANSWER_PTR) { - _mdns_append_u16(packet, index, MDNS_TYPE_PTR); - _mdns_append_u16(packet, index, mdns_class); - } else if (type == MDNS_ANSWER_TXT) { - _mdns_append_u16(packet, index, MDNS_TYPE_TXT); - _mdns_append_u16(packet, index, mdns_class); - } else if (type == MDNS_ANSWER_SRV) { - _mdns_append_u16(packet, index, MDNS_TYPE_SRV); - _mdns_append_u16(packet, index, mdns_class); - } else if (type == MDNS_ANSWER_A) { - _mdns_append_u16(packet, index, MDNS_TYPE_A); - _mdns_append_u16(packet, index, mdns_class); - } else if (type == MDNS_ANSWER_AAAA) { - _mdns_append_u16(packet, index, MDNS_TYPE_AAAA); - _mdns_append_u16(packet, index, mdns_class); - } else { - return 0; - } - _mdns_append_u32(packet, index, ttl); - _mdns_append_u16(packet, index, 0); - return 10; -} - -static inline uint8_t _mdns_append_string_with_len(uint8_t *packet, uint16_t *index, const char *string, uint8_t len) -{ - if ((*index + len + 1) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - _mdns_append_u8(packet, index, len); - memcpy(packet + *index, string, len); - *index += len; - return len + 1; -} - -/** - * @brief appends single string to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param string the string to append - * - * @return length of added data: 0 on error or length of the string + 1 on success - */ -static inline uint8_t _mdns_append_string(uint8_t *packet, uint16_t *index, const char *string) -{ - uint8_t len = strlen(string); - if ((*index + len + 1) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - _mdns_append_u8(packet, index, len); - memcpy(packet + *index, string, len); - *index += len; - return len + 1; -} - -/** - * @brief appends one TXT record ("key=value" or "key") - * - * @param packet MDNS packet - * @param index offset in the packet - * @param txt one txt record - * - * @return length of added data: length of the added txt value + 1 on success - * 0 if data won't fit the packet - * -1 if invalid TXT entry - */ -static inline int append_one_txt_record_entry(uint8_t *packet, uint16_t *index, mdns_txt_linked_item_t *txt) -{ - if (txt == NULL || txt->key == NULL) { - return -1; - } - size_t key_len = strlen(txt->key); - size_t len = key_len + txt->value_len + (txt->value ? 1 : 0); - if ((*index + len + 1) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - _mdns_append_u8(packet, index, len); - memcpy(packet + *index, txt->key, key_len); - if (txt->value) { - packet[*index + key_len] = '='; - memcpy(packet + *index + key_len + 1, txt->value, txt->value_len); - } - *index += len; - return len + 1; -} - -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES -static inline int append_single_str(uint8_t *packet, uint16_t *index, const char *str, int len) -{ - if ((*index + len + 1) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - if (!_mdns_append_u8(packet, index, len)) { - return 0; - } - memcpy(packet + *index, str, len); - *index += len; - return *index; -} - -/** - * @brief appends FQDN to a packet from hostname separated by dots. This API works the same way as - * _mdns_append_fqdn(), but refrains from DNS compression (as it's mainly used for IP addresses (many short items), - * where we gain very little (or compression even gets counter-productive mainly for IPv6 addresses) - * - * @param packet MDNS packet - * @param index offset in the packet - * @param name name representing FQDN in '.' separated parts - * @param last true if appending the last part (domain, typically "arpa") - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t append_fqdn_dots(uint8_t *packet, uint16_t *index, const char *name, bool last) -{ - int len = strlen(name); - char *host = (char *)name; - char *end = host; - char *start = host; - do { - end = memchr(start, '.', host + len - start); - end = end ? end : host + len; - int part_len = end - start; - if (!append_single_str(packet, index, start, part_len)) { - return 0; - } - start = ++end; - } while (end < name + len); - - if (!append_single_str(packet, index, "arpa", sizeof("arpa") - 1)) { - return 0; - } - - //empty string so terminate - if (!_mdns_append_u8(packet, index, 0)) { - return 0; - } - return *index; -} -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - -/** - * @brief appends FQDN to a packet, incrementing the index and - * compressing the output if previous occurrence of the string (or part of it) has been found - * - * @param packet MDNS packet - * @param index offset in the packet - * @param strings string array containing the parts of the FQDN - * @param count number of strings in the array - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_fqdn(uint8_t *packet, uint16_t *index, const char *strings[], uint8_t count, size_t packet_len) -{ - if (!count) { - //empty string so terminate - return _mdns_append_u8(packet, index, 0); - } - mdns_name_t name; - static char buf[MDNS_NAME_BUF_LEN]; - uint8_t len = strlen(strings[0]); - //try to find first the string length in the packet (if it exists) - uint8_t *len_location = (uint8_t *)memchr(packet, (char)len, *index); - while (len_location) { - //check if the string after len_location is the string that we are looking for - if (memcmp(len_location + 1, strings[0], len)) { //not continuing with our string -search_next: - //try and find the length byte further in the packet - len_location = (uint8_t *)memchr(len_location + 1, (char)len, *index - (len_location + 1 - packet)); - continue; - } - //seems that we might have found the string that we are looking for - //read the destination into name and compare - name.parts = 0; - name.sub = 0; - name.invalid = false; - name.host[0] = 0; - name.service[0] = 0; - name.proto[0] = 0; - name.domain[0] = 0; - const uint8_t *content = _mdns_read_fqdn(packet, len_location, &name, buf, packet_len); - if (!content) { - //not a readable fqdn? - goto search_next; // could be our unfinished fqdn, continue searching - } - if (name.parts == count) { - uint8_t i; - for (i = 0; i < count; i++) { - if (strcasecmp(strings[i], (const char *)&name + (i * (MDNS_NAME_BUF_LEN)))) { - //not our string! let's search more - goto search_next; - } - } - //we actually have found the string - break; - } else { - goto search_next; - } - } - //string is not yet in the packet, so let's add it - if (!len_location) { - uint8_t written = _mdns_append_string(packet, index, strings[0]); - if (!written) { - return 0; - } - //run the same for the other strings in the name - return written + _mdns_append_fqdn(packet, index, &strings[1], count - 1, packet_len); - } - - //we have found the string so let's insert a pointer to it instead - uint16_t offset = len_location - packet; - offset |= MDNS_NAME_REF; - return _mdns_append_u16(packet, index, offset); -} - -/** - * @brief appends PTR record for service to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param server the server that is hosting the service - * @param service the service to add record for - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_ptr_record(uint8_t *packet, uint16_t *index, const char *instance, const char *service, const char *proto, bool flush, bool bye) -{ - const char *str[4]; - uint16_t record_length = 0; - uint8_t part_length; - - if (service == NULL) { - return 0; - } - - str[0] = instance; - str[1] = service; - str[2] = proto; - str[3] = MDNS_DEFAULT_DOMAIN; - - part_length = _mdns_append_fqdn(packet, index, str + 1, 3, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_PTR, false, bye ? 0 : MDNS_ANSWER_PTR_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - part_length = _mdns_append_fqdn(packet, index, str, 4, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - _mdns_set_u16(packet, data_len_location, part_length); - record_length += part_length; - return record_length; -} - -/** - * @brief appends PTR record for a subtype to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param instance the service instance name - * @param subtype the service subtype - * @param proto the service protocol - * @param flush whether to set the flush flag - * @param bye whether to set the bye flag - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_subtype_ptr_record(uint8_t *packet, uint16_t *index, const char *instance, - const char *subtype, const char *service, const char *proto, bool flush, - bool bye) -{ - const char *subtype_str[5] = {subtype, MDNS_SUB_STR, service, proto, MDNS_DEFAULT_DOMAIN}; - const char *instance_str[4] = {instance, service, proto, MDNS_DEFAULT_DOMAIN}; - uint16_t record_length = 0; - uint8_t part_length; - - if (service == NULL) { - return 0; - } - - part_length = _mdns_append_fqdn(packet, index, subtype_str, ARRAY_SIZE(subtype_str), MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_PTR, false, bye ? 0 : MDNS_ANSWER_PTR_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - part_length = _mdns_append_fqdn(packet, index, instance_str, ARRAY_SIZE(instance_str), MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - _mdns_set_u16(packet, data_len_location, part_length); - record_length += part_length; - return record_length; -} - -/** - * @brief appends DNS-SD PTR record for service to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param server the server that is hosting the service - * @param service the service to add record for - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_sdptr_record(uint8_t *packet, uint16_t *index, mdns_service_t *service, bool flush, bool bye) -{ - const char *str[3]; - const char *sd_str[4]; - uint16_t record_length = 0; - uint8_t part_length; - - if (service == NULL) { - return 0; - } - - sd_str[0] = (char *)"_services"; - sd_str[1] = (char *)"_dns-sd"; - sd_str[2] = (char *)"_udp"; - sd_str[3] = MDNS_DEFAULT_DOMAIN; - - str[0] = service->service; - str[1] = service->proto; - str[2] = MDNS_DEFAULT_DOMAIN; - - part_length = _mdns_append_fqdn(packet, index, sd_str, 4, MDNS_MAX_PACKET_SIZE); - - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_PTR, flush, MDNS_ANSWER_PTR_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - part_length = _mdns_append_fqdn(packet, index, str, 3, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - _mdns_set_u16(packet, data_len_location, part_length); - record_length += part_length; - return record_length; -} - -/** - * @brief appends TXT record for service to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param server the server that is hosting the service - * @param service the service to add record for - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_txt_record(uint8_t *packet, uint16_t *index, mdns_service_t *service, bool flush, bool bye) -{ - const char *str[4]; - uint16_t record_length = 0; - uint8_t part_length; - - if (service == NULL) { - return 0; - } - - str[0] = _mdns_get_service_instance_name(service); - str[1] = service->service; - str[2] = service->proto; - str[3] = MDNS_DEFAULT_DOMAIN; - - if (!str[0]) { - return 0; - } - - part_length = _mdns_append_fqdn(packet, index, str, 4, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_TXT, flush, bye ? 0 : MDNS_ANSWER_TXT_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - uint16_t data_len = 0; - - mdns_txt_linked_item_t *txt = service->txt; - while (txt) { - int l = append_one_txt_record_entry(packet, index, txt); - if (l > 0) { - data_len += l; - } else if (l == 0) { // TXT entry won't fit into the mdns packet - return 0; - } - txt = txt->next; - } - if (!data_len) { - data_len = 1; - packet[*index] = 0; - *index = *index + 1; - } - _mdns_set_u16(packet, data_len_location, data_len); - record_length += data_len; - return record_length; -} - -/** - * @brief appends SRV record for service to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param server the server that is hosting the service - * @param service the service to add record for - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_srv_record(uint8_t *packet, uint16_t *index, mdns_service_t *service, bool flush, bool bye) -{ - const char *str[4]; - uint16_t record_length = 0; - uint8_t part_length; - - if (service == NULL) { - return 0; - } - - str[0] = _mdns_get_service_instance_name(service); - str[1] = service->service; - str[2] = service->proto; - str[3] = MDNS_DEFAULT_DOMAIN; - - if (!str[0]) { - return 0; - } - - part_length = _mdns_append_fqdn(packet, index, str, 4, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_SRV, flush, bye ? 0 : MDNS_ANSWER_SRV_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - - part_length = 0; - part_length += _mdns_append_u16(packet, index, service->priority); - part_length += _mdns_append_u16(packet, index, service->weight); - part_length += _mdns_append_u16(packet, index, service->port); - if (part_length != 6) { - return 0; - } - - if (service->hostname) { - str[0] = service->hostname; - } else { - str[0] = _mdns_server->hostname; - } - str[1] = MDNS_DEFAULT_DOMAIN; - - if (_str_null_or_empty(str[0])) { - return 0; - } - - part_length = _mdns_append_fqdn(packet, index, str, 2, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - _mdns_set_u16(packet, data_len_location, part_length + 6); - - record_length += part_length + 6; - return record_length; -} - -#ifdef CONFIG_LWIP_IPV4 -/** - * @brief appends A record to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param hostname the hostname address to add - * @param ip the IP address to add - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_a_record(uint8_t *packet, uint16_t *index, const char *hostname, uint32_t ip, bool flush, bool bye) -{ - const char *str[2]; - uint16_t record_length = 0; - uint8_t part_length; - - str[0] = hostname; - str[1] = MDNS_DEFAULT_DOMAIN; - - if (_str_null_or_empty(str[0])) { - return 0; - } - - part_length = _mdns_append_fqdn(packet, index, str, 2, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_A, flush, bye ? 0 : MDNS_ANSWER_A_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - - if ((*index + 3) >= MDNS_MAX_PACKET_SIZE) { - return 0; - } - _mdns_append_u8(packet, index, ip & 0xFF); - _mdns_append_u8(packet, index, (ip >> 8) & 0xFF); - _mdns_append_u8(packet, index, (ip >> 16) & 0xFF); - _mdns_append_u8(packet, index, (ip >> 24) & 0xFF); - _mdns_set_u16(packet, data_len_location, 4); - - record_length += 4; - return record_length; -} -#endif /* CONFIG_LWIP_IPV4 */ - -#ifdef CONFIG_LWIP_IPV6 -/** - * @brief appends AAAA record to a packet, incrementing the index - * - * @param packet MDNS packet - * @param index offset in the packet - * @param hostname the hostname address to add - * @param ipv6 the IPv6 address to add - * - * @return length of added data: 0 on error or length on success - */ -static uint16_t _mdns_append_aaaa_record(uint8_t *packet, uint16_t *index, const char *hostname, uint8_t *ipv6, bool flush, bool bye) -{ - const char *str[2]; - uint16_t record_length = 0; - uint8_t part_length; - - str[0] = hostname; - str[1] = MDNS_DEFAULT_DOMAIN; - - if (_str_null_or_empty(str[0])) { - return 0; - } - - - part_length = _mdns_append_fqdn(packet, index, str, 2, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - record_length += part_length; - - part_length = _mdns_append_type(packet, index, MDNS_ANSWER_AAAA, flush, bye ? 0 : MDNS_ANSWER_AAAA_TTL); - if (!part_length) { - return 0; - } - record_length += part_length; - - uint16_t data_len_location = *index - 2; - - if ((*index + MDNS_ANSWER_AAAA_SIZE) > MDNS_MAX_PACKET_SIZE) { - return 0; - } - - part_length = MDNS_ANSWER_AAAA_SIZE; - memcpy(packet + *index, ipv6, part_length); - *index += part_length; - _mdns_set_u16(packet, data_len_location, part_length); - record_length += part_length; - return record_length; -} -#endif - -/** - * @brief Append question to packet - */ -static uint16_t _mdns_append_question(uint8_t *packet, uint16_t *index, mdns_out_question_t *q) -{ - uint8_t part_length; -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES - if (q->host && (strstr(q->host, "in-addr") || strstr(q->host, "ip6"))) { - part_length = append_fqdn_dots(packet, index, q->host, false); - if (!part_length) { - return 0; - } - } else -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - { - const char *str[4]; - uint8_t str_index = 0; - if (q->host) { - str[str_index++] = q->host; - } - if (q->service) { - str[str_index++] = q->service; - } - if (q->proto) { - str[str_index++] = q->proto; - } - if (q->domain) { - str[str_index++] = q->domain; - } - part_length = _mdns_append_fqdn(packet, index, str, str_index, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - } - - part_length += _mdns_append_u16(packet, index, q->type); - part_length += _mdns_append_u16(packet, index, q->unicast ? 0x8001 : 0x0001); - return part_length; -} - -/** - * @brief Helper to get either ETH or STA if the other is provided - * Used when two interfaces are on the same subnet - */ -static mdns_if_t _mdns_get_other_if (mdns_if_t tcpip_if) -{ - if (tcpip_if < MDNS_MAX_INTERFACES) { - return s_esp_netifs[tcpip_if].duplicate; - } - return MDNS_MAX_INTERFACES; -} - -/** - * @brief Check if interface is duplicate (two interfaces on the same subnet) - */ -static bool _mdns_if_is_dup(mdns_if_t tcpip_if) -{ - mdns_if_t other_if = _mdns_get_other_if (tcpip_if); - if (other_if == MDNS_MAX_INTERFACES) { - return false; - } - if (_mdns_server->interfaces[tcpip_if].pcbs[MDNS_IP_PROTOCOL_V4].state == PCB_DUP - || _mdns_server->interfaces[tcpip_if].pcbs[MDNS_IP_PROTOCOL_V6].state == PCB_DUP - || _mdns_server->interfaces[other_if].pcbs[MDNS_IP_PROTOCOL_V4].state == PCB_DUP - || _mdns_server->interfaces[other_if].pcbs[MDNS_IP_PROTOCOL_V6].state == PCB_DUP - ) { - return true; - } - return false; -} - -#ifdef CONFIG_LWIP_IPV6 -/** - * @brief Check if IPv6 address is NULL - */ -static bool _ipv6_address_is_zero(esp_ip6_addr_t ip6) -{ - uint8_t i; - uint8_t *data = (uint8_t *)ip6.addr; - for (i = 0; i < _MDNS_SIZEOF_IP6_ADDR; i++) { - if (data[i]) { - return false; - } - } - return true; -} -#endif /* CONFIG_LWIP_IPV6 */ - -static uint8_t _mdns_append_host_answer(uint8_t *packet, uint16_t *index, mdns_host_item_t *host, - uint8_t address_type, bool flush, bool bye) -{ - mdns_ip_addr_t *addr = host->address_list; - uint8_t num_records = 0; - - while (addr != NULL) { - if (addr->addr.type == address_type) { -#ifdef CONFIG_LWIP_IPV4 - if (address_type == ESP_IPADDR_TYPE_V4 && - _mdns_append_a_record(packet, index, host->hostname, addr->addr.u_addr.ip4.addr, flush, bye) <= 0) { - break; - } -#endif /* CONFIG_LWIP_IPV4 */ -#ifdef CONFIG_LWIP_IPV6 - if (address_type == ESP_IPADDR_TYPE_V6 && - _mdns_append_aaaa_record(packet, index, host->hostname, (uint8_t *)addr->addr.u_addr.ip6.addr, flush, - bye) <= 0) { - break; - } -#endif /* CONFIG_LWIP_IPV6 */ - num_records++; - } - addr = addr->next; - } - return num_records; -} - -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES -/** - * @brief Appends reverse lookup PTR record - */ -static uint8_t _mdns_append_reverse_ptr_record(uint8_t *packet, uint16_t *index, const char *name) -{ - if (strstr(name, "in-addr") == NULL && strstr(name, "ip6") == NULL) { - return 0; - } - - if (!append_fqdn_dots(packet, index, name, false)) { - return 0; - } - - if (!_mdns_append_type(packet, index, MDNS_ANSWER_PTR, false, 10 /* TTL set to 10s*/ )) { - return 0; - } - - uint16_t data_len_location = *index - 2; /* store the position of size (2=16bis) of this record */ - const char *str[2] = { _mdns_self_host.hostname, MDNS_DEFAULT_DOMAIN }; - - int part_length = _mdns_append_fqdn(packet, index, str, 2, MDNS_MAX_PACKET_SIZE); - if (!part_length) { - return 0; - } - - _mdns_set_u16(packet, data_len_location, part_length); - return 1; /* appending only 1 record */ -} -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - -/** - * @brief Append PTR answers to packet - * - * @return number of answers added to the packet - */ -static uint8_t _mdns_append_service_ptr_answers(uint8_t *packet, uint16_t *index, mdns_service_t *service, bool flush, - bool bye) -{ - uint8_t appended_answers = 0; - - if (_mdns_append_ptr_record(packet, index, _mdns_get_service_instance_name(service), service->service, - service->proto, flush, bye) <= 0) { - return appended_answers; - } - appended_answers++; - - mdns_subtype_t *subtype = service->subtype; - while (subtype) { - appended_answers += - (_mdns_append_subtype_ptr_record(packet, index, _mdns_get_service_instance_name(service), subtype->subtype, - service->service, service->proto, flush, bye) > 0); - subtype = subtype->next; - } - - return appended_answers; -} - - -/** - * @brief Append answer to packet - * - * @return number of answers added to the packet - */ -static uint8_t _mdns_append_answer(uint8_t *packet, uint16_t *index, mdns_out_answer_t *answer, mdns_if_t tcpip_if) -{ - if (answer->type == MDNS_TYPE_PTR) { - if (answer->service) { - return _mdns_append_service_ptr_answers(packet, index, answer->service, answer->flush, answer->bye); -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES - } else if (answer->host && answer->host->hostname && - (strstr(answer->host->hostname, "in-addr") || strstr(answer->host->hostname, "ip6"))) { - return _mdns_append_reverse_ptr_record(packet, index, answer->host->hostname) > 0; -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - } else { - return _mdns_append_ptr_record(packet, index, - answer->custom_instance, answer->custom_service, answer->custom_proto, - answer->flush, answer->bye) > 0; - } - } else if (answer->type == MDNS_TYPE_SRV) { - return _mdns_append_srv_record(packet, index, answer->service, answer->flush, answer->bye) > 0; - } else if (answer->type == MDNS_TYPE_TXT) { - return _mdns_append_txt_record(packet, index, answer->service, answer->flush, answer->bye) > 0; - } else if (answer->type == MDNS_TYPE_SDPTR) { - return _mdns_append_sdptr_record(packet, index, answer->service, answer->flush, answer->bye) > 0; - } -#ifdef CONFIG_LWIP_IPV4 - else if (answer->type == MDNS_TYPE_A) { - if (answer->host == &_mdns_self_host) { - esp_netif_ip_info_t if_ip_info; - if (!mdns_is_netif_ready(tcpip_if, MDNS_IP_PROTOCOL_V4) && _mdns_server->interfaces[tcpip_if].pcbs[MDNS_IP_PROTOCOL_V4].state != PCB_DUP) { - return 0; - } - if (esp_netif_get_ip_info(_mdns_get_esp_netif(tcpip_if), &if_ip_info)) { - return 0; - } - if (_mdns_append_a_record(packet, index, _mdns_server->hostname, if_ip_info.ip.addr, answer->flush, answer->bye) <= 0) { - return 0; - } - if (!_mdns_if_is_dup(tcpip_if)) { - return 1; - } - mdns_if_t other_if = _mdns_get_other_if (tcpip_if); - if (esp_netif_get_ip_info(_mdns_get_esp_netif(other_if), &if_ip_info)) { - return 1; - } - if (_mdns_append_a_record(packet, index, _mdns_server->hostname, if_ip_info.ip.addr, answer->flush, answer->bye) > 0) { - return 2; - } - return 1; - } else if (answer->host != NULL) { - return _mdns_append_host_answer(packet, index, answer->host, ESP_IPADDR_TYPE_V4, answer->flush, answer->bye); - } - } -#endif /* CONFIG_LWIP_IPV4 */ -#ifdef CONFIG_LWIP_IPV6 - else if (answer->type == MDNS_TYPE_AAAA) { - if (answer->host == &_mdns_self_host) { - struct esp_ip6_addr if_ip6s[NETIF_IPV6_MAX_NUMS]; - uint8_t count = 0; - if (!mdns_is_netif_ready(tcpip_if, MDNS_IP_PROTOCOL_V6) && _mdns_server->interfaces[tcpip_if].pcbs[MDNS_IP_PROTOCOL_V6].state != PCB_DUP) { - return 0; - } - count = esp_netif_get_all_ip6(_mdns_get_esp_netif(tcpip_if), if_ip6s); - assert(count <= NETIF_IPV6_MAX_NUMS); - for (int i = 0; i < count; i++) { - if (_ipv6_address_is_zero(if_ip6s[i])) { - return 0; - } - if (_mdns_append_aaaa_record(packet, index, _mdns_server->hostname, (uint8_t *)if_ip6s[i].addr, - answer->flush, answer->bye) <= 0) { - return 0; - } - } - if (!_mdns_if_is_dup(tcpip_if)) { - return count; - } - - mdns_if_t other_if = _mdns_get_other_if(tcpip_if); - struct esp_ip6_addr other_ip6; - if (esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(other_if), &other_ip6)) { - return count; - } - if (_mdns_append_aaaa_record(packet, index, _mdns_server->hostname, (uint8_t *)other_ip6.addr, - answer->flush, answer->bye) > 0) { - return 1 + count; - } - return count; - } else if (answer->host != NULL) { - return _mdns_append_host_answer(packet, index, answer->host, ESP_IPADDR_TYPE_V6, answer->flush, - answer->bye); - } - } -#endif /* CONFIG_LWIP_IPV6 */ - return 0; -} - -/** - * @brief sends a packet - * - * @param p the packet - */ -static void _mdns_dispatch_tx_packet(mdns_tx_packet_t *p) -{ - static uint8_t packet[MDNS_MAX_PACKET_SIZE]; - uint16_t index = MDNS_HEAD_LEN; - memset(packet, 0, MDNS_HEAD_LEN); - mdns_out_question_t *q; - mdns_out_answer_t *a; - uint8_t count; - - _mdns_set_u16(packet, MDNS_HEAD_FLAGS_OFFSET, p->flags); - _mdns_set_u16(packet, MDNS_HEAD_ID_OFFSET, p->id); - - count = 0; - q = p->questions; - while (q) { - if (_mdns_append_question(packet, &index, q)) { - count++; - } - q = q->next; - } - _mdns_set_u16(packet, MDNS_HEAD_QUESTIONS_OFFSET, count); - - count = 0; - a = p->answers; - while (a) { - count += _mdns_append_answer(packet, &index, a, p->tcpip_if); - a = a->next; - } - _mdns_set_u16(packet, MDNS_HEAD_ANSWERS_OFFSET, count); - - count = 0; - a = p->servers; - while (a) { - count += _mdns_append_answer(packet, &index, a, p->tcpip_if); - a = a->next; - } - _mdns_set_u16(packet, MDNS_HEAD_SERVERS_OFFSET, count); - - count = 0; - a = p->additional; - while (a) { - count += _mdns_append_answer(packet, &index, a, p->tcpip_if); - a = a->next; - } - _mdns_set_u16(packet, MDNS_HEAD_ADDITIONAL_OFFSET, count); - -#ifdef MDNS_ENABLE_DEBUG - _mdns_dbg_printf("\nTX[%lu][%lu]: ", (unsigned long)p->tcpip_if, (unsigned long)p->ip_protocol); - if (p->dst.type == ESP_IPADDR_TYPE_V4) { - _mdns_dbg_printf("To: " IPSTR ":%u, ", IP2STR(&p->dst.u_addr.ip4), p->port); - } else { - _mdns_dbg_printf("To: " IPV6STR ":%u, ", IPV62STR(p->dst.u_addr.ip6), p->port); - } - mdns_debug_packet(packet, index); -#endif - - _mdns_udp_pcb_write(p->tcpip_if, p->ip_protocol, &p->dst, p->port, packet, index); -} - -/** - * @brief frees a packet - * - * @param packet the packet - */ -static void _mdns_free_tx_packet(mdns_tx_packet_t *packet) -{ - if (!packet) { - return; - } - mdns_out_question_t *q = packet->questions; - while (q) { - mdns_out_question_t *next = q->next; - if (q->own_dynamic_memory) { - free((char *)q->host); - free((char *)q->service); - free((char *)q->proto); - free((char *)q->domain); - } - free(q); - q = next; - } - queueFree(mdns_out_answer_t, packet->answers); - queueFree(mdns_out_answer_t, packet->servers); - queueFree(mdns_out_answer_t, packet->additional); - free(packet); -} - -/** - * @brief schedules a packet to be sent after given milliseconds - * - * @param packet the packet - * @param ms_after number of milliseconds after which the packet should be dispatched - */ -static void _mdns_schedule_tx_packet(mdns_tx_packet_t *packet, uint32_t ms_after) -{ - if (!packet) { - return; - } - packet->send_at = (xTaskGetTickCount() * portTICK_PERIOD_MS) + ms_after; - packet->next = NULL; - if (!_mdns_server->tx_queue_head || _mdns_server->tx_queue_head->send_at > packet->send_at) { - packet->next = _mdns_server->tx_queue_head; - _mdns_server->tx_queue_head = packet; - return; - } - mdns_tx_packet_t *q = _mdns_server->tx_queue_head; - while (q->next && q->next->send_at <= packet->send_at) { - q = q->next; - } - packet->next = q->next; - q->next = packet; -} - -/** - * @brief free all packets scheduled for sending - */ -static void _mdns_clear_tx_queue_head(void) -{ - mdns_tx_packet_t *q; - while (_mdns_server->tx_queue_head) { - q = _mdns_server->tx_queue_head; - _mdns_server->tx_queue_head = _mdns_server->tx_queue_head->next; - _mdns_free_tx_packet(q); - } -} - -/** - * @brief clear packets scheduled for sending on a specific interface - * - * @param tcpip_if the interface - * @param ip_protocol pcb type V4/V6 - */ -static void _mdns_clear_pcb_tx_queue_head(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_tx_packet_t *q, * p; - while (_mdns_server->tx_queue_head && _mdns_server->tx_queue_head->tcpip_if == tcpip_if && _mdns_server->tx_queue_head->ip_protocol == ip_protocol) { - q = _mdns_server->tx_queue_head; - _mdns_server->tx_queue_head = _mdns_server->tx_queue_head->next; - _mdns_free_tx_packet(q); - } - if (_mdns_server->tx_queue_head) { - q = _mdns_server->tx_queue_head; - while (q->next) { - if (q->next->tcpip_if == tcpip_if && q->next->ip_protocol == ip_protocol) { - p = q->next; - q->next = p->next; - _mdns_free_tx_packet(p); - } else { - q = q->next; - } - } - } -} - -/** - * @brief get the next packet scheduled for sending on a specific interface - * - * @param tcpip_if the interface - * @param ip_protocol pcb type V4/V6 - */ -static mdns_tx_packet_t *_mdns_get_next_pcb_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_tx_packet_t *q = _mdns_server->tx_queue_head; - while (q) { - if (q->tcpip_if == tcpip_if && q->ip_protocol == ip_protocol) { - return q; - } - q = q->next; - } - return NULL; -} - -/** - * @brief Find, remove and free answer from the scheduled packets - */ -static void _mdns_remove_scheduled_answer(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint16_t type, mdns_srv_item_t *service) -{ - mdns_srv_item_t s = {NULL, NULL}; - if (!service) { - service = &s; - } - mdns_tx_packet_t *q = _mdns_server->tx_queue_head; - while (q) { - if (q->tcpip_if == tcpip_if && q->ip_protocol == ip_protocol && q->distributed) { - mdns_out_answer_t *a = q->answers; - if (a) { - if (a->type == type && a->service == service->service) { - q->answers = q->answers->next; - free(a); - } else { - while (a->next) { - if (a->next->type == type && a->next->service == service->service) { - mdns_out_answer_t *b = a->next; - a->next = b->next; - free(b); - break; - } - a = a->next; - } - } - } - } - q = q->next; - } -} - -/** - * @brief Remove and free answer from answer list (destination) - */ -static void _mdns_dealloc_answer(mdns_out_answer_t **destination, uint16_t type, mdns_srv_item_t *service) -{ - mdns_out_answer_t *d = *destination; - if (!d) { - return; - } - mdns_srv_item_t s = {NULL, NULL}; - if (!service) { - service = &s; - } - if (d->type == type && d->service == service->service) { - *destination = d->next; - free(d); - return; - } - while (d->next) { - mdns_out_answer_t *a = d->next; - if (a->type == type && a->service == service->service) { - d->next = a->next; - free(a); - return; - } - d = d->next; - } -} - -/** - * @brief Allocate new answer and add it to answer list (destination) - */ -static bool _mdns_alloc_answer(mdns_out_answer_t **destination, uint16_t type, mdns_service_t *service, - mdns_host_item_t *host, bool flush, bool bye) -{ - mdns_out_answer_t *d = *destination; - while (d) { - if (d->type == type && d->service == service && d->host == host) { - return true; - } - d = d->next; - } - - mdns_out_answer_t *a = (mdns_out_answer_t *)malloc(sizeof(mdns_out_answer_t)); - if (!a) { - HOOK_MALLOC_FAILED; - return false; - } - a->type = type; - a->service = service; - a->host = host; - a->custom_service = NULL; - a->bye = bye; - a->flush = flush; - a->next = NULL; - queueToEnd(mdns_out_answer_t, *destination, a); - return true; -} - -/** - * @brief Allocate new packet for sending - */ -static mdns_tx_packet_t *_mdns_alloc_packet_default(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_tx_packet_t *packet = (mdns_tx_packet_t *)malloc(sizeof(mdns_tx_packet_t)); - if (!packet) { - HOOK_MALLOC_FAILED; - return NULL; - } - memset((uint8_t *)packet, 0, sizeof(mdns_tx_packet_t)); - packet->tcpip_if = tcpip_if; - packet->ip_protocol = ip_protocol; - packet->port = MDNS_SERVICE_PORT; -#ifdef CONFIG_LWIP_IPV4 - if (ip_protocol == MDNS_IP_PROTOCOL_V4) { - esp_ip_addr_t addr = ESP_IP4ADDR_INIT(224, 0, 0, 251); - memcpy(&packet->dst, &addr, sizeof(esp_ip_addr_t)); - } -#endif -#ifdef CONFIG_LWIP_IPV6 - if (ip_protocol == MDNS_IP_PROTOCOL_V6) { - esp_ip_addr_t addr = ESP_IP6ADDR_INIT(0x000002ff, 0, 0, 0xfb000000); - memcpy(&packet->dst, &addr, sizeof(esp_ip_addr_t)); - } -#endif - return packet; -} - -static bool _mdns_create_answer_from_service(mdns_tx_packet_t *packet, mdns_service_t *service, - mdns_parsed_question_t *question, bool shared, bool send_flush) -{ - mdns_host_item_t *host = mdns_get_host_item(service->hostname); - bool is_delegated = (host != &_mdns_self_host); - if (question->type == MDNS_TYPE_PTR || question->type == MDNS_TYPE_ANY) { - // According to RFC6763-section12.1, for DNS-SD, SRV, TXT and all address records - // should be included in additional records. - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_PTR, service, NULL, false, false) || - !_mdns_alloc_answer(is_delegated ? &packet->additional : &packet->answers, MDNS_TYPE_SRV, service, NULL, send_flush, false) || - !_mdns_alloc_answer(is_delegated ? &packet->additional : &packet->answers, MDNS_TYPE_TXT, service, NULL, send_flush, false) || - !_mdns_alloc_answer((shared || is_delegated) ? &packet->additional : &packet->answers, MDNS_TYPE_A, service, host, send_flush, - false) || - !_mdns_alloc_answer((shared || is_delegated) ? &packet->additional : &packet->answers, MDNS_TYPE_AAAA, service, host, - send_flush, false)) { - return false; - } - } else if (question->type == MDNS_TYPE_SRV) { - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_SRV, service, NULL, send_flush, false) || - !_mdns_alloc_answer(&packet->additional, MDNS_TYPE_A, service, host, send_flush, false) || - !_mdns_alloc_answer(&packet->additional, MDNS_TYPE_AAAA, service, host, send_flush, false)) { - return false; - } - } else if (question->type == MDNS_TYPE_TXT) { - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_TXT, service, NULL, send_flush, false)) { - return false; - } - } else if (question->type == MDNS_TYPE_SDPTR) { - shared = true; - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_SDPTR, service, NULL, false, false)) { - return false; - } - } - return true; -} - -static bool _mdns_create_answer_from_hostname(mdns_tx_packet_t *packet, const char *hostname, bool send_flush) -{ - mdns_host_item_t *host = mdns_get_host_item(hostname); - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_A, NULL, host, send_flush, false) || - !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_AAAA, NULL, host, send_flush, false)) { - return false; - } - return true; -} - -static bool _mdns_service_match_ptr_question(const mdns_service_t *service, const mdns_parsed_question_t *question) -{ - if (!_mdns_service_match(service, question->service, question->proto, NULL)) { - return false; - } - // The question parser stores anything before _type._proto in question->host - // So the question->host can be subtype or instance name based on its content - if (question->sub) { - mdns_subtype_t *subtype = service->subtype; - while (subtype) { - if (!strcasecmp(subtype->subtype, question->host)) { - return true; - } - subtype = subtype->next; - } - return false; - } - if (question->host) { - if (strcasecmp(_mdns_get_service_instance_name(service), question->host) != 0) { - return false; - } - } - return true; -} - -/** - * @brief Create answer packet to questions from parsed packet - */ -static void _mdns_create_answer_from_parsed_packet(mdns_parsed_packet_t *parsed_packet) -{ - if (!parsed_packet->questions) { - return; - } - bool send_flush = parsed_packet->src_port == MDNS_SERVICE_PORT; - bool unicast = false; - bool shared = false; - mdns_tx_packet_t *packet = _mdns_alloc_packet_default(parsed_packet->tcpip_if, parsed_packet->ip_protocol); - if (!packet) { - return; - } - packet->flags = MDNS_FLAGS_QR_AUTHORITATIVE; - packet->distributed = parsed_packet->distributed; - packet->id = parsed_packet->id; - - mdns_parsed_question_t *q = parsed_packet->questions; - while (q) { - shared = q->type == MDNS_TYPE_PTR || q->type == MDNS_TYPE_SDPTR || !parsed_packet->probe; - if (q->type == MDNS_TYPE_SRV || q->type == MDNS_TYPE_TXT) { - mdns_srv_item_t *service = _mdns_get_service_item_instance(q->host, q->service, q->proto, NULL); - if (service == NULL || !_mdns_create_answer_from_service(packet, service->service, q, shared, send_flush)) { - _mdns_free_tx_packet(packet); - return; - } - } else if (q->service && q->proto) { - mdns_srv_item_t *service = _mdns_server->services; - while (service) { - if (_mdns_service_match_ptr_question(service->service, q)) { - if (!_mdns_create_answer_from_service(packet, service->service, q, shared, send_flush)) { - _mdns_free_tx_packet(packet); - return; - } - } - service = service->next; - } - } else if (q->type == MDNS_TYPE_A || q->type == MDNS_TYPE_AAAA) { - if (!_mdns_create_answer_from_hostname(packet, q->host, send_flush)) { - _mdns_free_tx_packet(packet); - return; - } - } else if (q->type == MDNS_TYPE_ANY) { - if (!_mdns_append_host_list(&packet->answers, send_flush, false)) { - _mdns_free_tx_packet(packet); - return; - } -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES - } else if (q->type == MDNS_TYPE_PTR) { - mdns_host_item_t *host = mdns_get_host_item(q->host); - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_PTR, NULL, host, send_flush, false)) { - return; - } -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - } else if (!_mdns_alloc_answer(&packet->answers, q->type, NULL, NULL, send_flush, false)) { - _mdns_free_tx_packet(packet); - return; - } - - if (parsed_packet->src_port != MDNS_SERVICE_PORT && // Repeat the queries only for "One-Shot mDNS queries" - (q->type == MDNS_TYPE_ANY || q->type == MDNS_TYPE_A || q->type == MDNS_TYPE_AAAA -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES - || q->type == MDNS_TYPE_PTR -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - )) { - mdns_out_question_t *out_question = malloc(sizeof(mdns_out_question_t)); - if (out_question == NULL) { - HOOK_MALLOC_FAILED; - _mdns_free_tx_packet(packet); - return; - } - out_question->type = q->type; - out_question->unicast = q->unicast; - out_question->host = q->host; - q->host = NULL; - out_question->service = q->service; - q->service = NULL; - out_question->proto = q->proto; - q->proto = NULL; - out_question->domain = q->domain; - q->domain = NULL; - out_question->next = NULL; - out_question->own_dynamic_memory = true; - queueToEnd(mdns_out_question_t, packet->questions, out_question); - } - if (q->unicast) { - unicast = true; - } - q = q->next; - } - if (unicast || !send_flush) { - memcpy(&packet->dst, &parsed_packet->src, sizeof(esp_ip_addr_t)); - packet->port = parsed_packet->src_port; - } - - static uint8_t share_step = 0; - if (shared) { - _mdns_schedule_tx_packet(packet, 25 + (share_step * 25)); - share_step = (share_step + 1) & 0x03; - } else { - _mdns_dispatch_tx_packet(packet); - _mdns_free_tx_packet(packet); - } -} - -/** - * @brief Check if question is already in the list - */ -static bool _mdns_question_exists(mdns_out_question_t *needle, mdns_out_question_t *haystack) -{ - while (haystack) { - if (haystack->type == needle->type - && haystack->host == needle->host - && haystack->service == needle->service - && haystack->proto == needle->proto) { - return true; - } - haystack = haystack->next; - } - return false; -} - -static bool _mdns_append_host(mdns_out_answer_t **destination, mdns_host_item_t *host, bool flush, bool bye) -{ - if (!_mdns_alloc_answer(destination, MDNS_TYPE_A, NULL, host, flush, bye)) { - return false; - } - if (!_mdns_alloc_answer(destination, MDNS_TYPE_AAAA, NULL, host, flush, bye)) { - return false; - } - return true; -} - -static bool _mdns_append_host_list_in_services(mdns_out_answer_t **destination, mdns_srv_item_t *services[], - size_t services_len, bool flush, bool bye) -{ - if (services == NULL) { - mdns_host_item_t *host = mdns_get_host_item(_mdns_server->hostname); - if (host != NULL) { - return _mdns_append_host(destination, host, flush, bye); - } - return true; - } - for (size_t i = 0; i < services_len; i++) { - mdns_host_item_t *host = mdns_get_host_item(services[i]->service->hostname); - if (!_mdns_append_host(destination, host, flush, bye)) { - return false; - } - } - return true; -} - -static bool _mdns_append_host_list(mdns_out_answer_t **destination, bool flush, bool bye) -{ - if (!_str_null_or_empty(_mdns_server->hostname)) { - mdns_host_item_t *self_host = mdns_get_host_item(_mdns_server->hostname); - if (!_mdns_append_host(destination, self_host, flush, bye)) { - return false; - } - } - mdns_host_item_t *host = _mdns_host_list; - while (host != NULL) { - host = host->next; - if (!_mdns_append_host(destination, host, flush, bye)) { - return false; - } - } - return true; -} - -static bool _mdns_append_host_question(mdns_out_question_t **questions, const char *hostname, bool unicast) -{ - mdns_out_question_t *q = (mdns_out_question_t *)malloc(sizeof(mdns_out_question_t)); - if (!q) { - HOOK_MALLOC_FAILED; - return false; - } - q->next = NULL; - q->unicast = unicast; - q->type = MDNS_TYPE_ANY; - q->host = hostname; - q->service = NULL; - q->proto = NULL; - q->domain = MDNS_DEFAULT_DOMAIN; - q->own_dynamic_memory = false; - if (_mdns_question_exists(q, *questions)) { - free(q); - } else { - queueToEnd(mdns_out_question_t, *questions, q); - } - return true; -} - -static bool _mdns_append_host_questions_for_services(mdns_out_question_t **questions, mdns_srv_item_t *services[], - size_t len, bool unicast) -{ - if (!_str_null_or_empty(_mdns_server->hostname) && - !_mdns_append_host_question(questions, _mdns_server->hostname, unicast)) { - return false; - } - for (size_t i = 0; i < len; i++) { - if (!_mdns_append_host_question(questions, services[i]->service->hostname, unicast)) { - return false; - } - } - return true; -} - -/** - * @brief Create probe packet for particular services on particular PCB - */ -static mdns_tx_packet_t *_mdns_create_probe_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t *services[], size_t len, bool first, bool include_ip) -{ - mdns_tx_packet_t *packet = _mdns_alloc_packet_default(tcpip_if, ip_protocol); - if (!packet) { - return NULL; - } - - size_t i; - for (i = 0; i < len; i++) { - mdns_out_question_t *q = (mdns_out_question_t *)malloc(sizeof(mdns_out_question_t)); - if (!q) { - HOOK_MALLOC_FAILED; - _mdns_free_tx_packet(packet); - return NULL; - } - q->next = NULL; - q->unicast = first; - q->type = MDNS_TYPE_ANY; - q->host = _mdns_get_service_instance_name(services[i]->service); - q->service = services[i]->service->service; - q->proto = services[i]->service->proto; - q->domain = MDNS_DEFAULT_DOMAIN; - q->own_dynamic_memory = false; - if (!q->host || _mdns_question_exists(q, packet->questions)) { - free(q); - continue; - } else { - queueToEnd(mdns_out_question_t, packet->questions, q); - } - - if (!q->host || !_mdns_alloc_answer(&packet->servers, MDNS_TYPE_SRV, services[i]->service, NULL, false, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - } - - if (include_ip) { - if (!_mdns_append_host_questions_for_services(&packet->questions, services, len, first)) { - _mdns_free_tx_packet(packet); - return NULL; - } - - if (!_mdns_append_host_list_in_services(&packet->servers, services, len, false, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - } - - return packet; -} - -/** - * @brief Create announce packet for particular services on particular PCB - */ -static mdns_tx_packet_t *_mdns_create_announce_packet(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t *services[], size_t len, bool include_ip) -{ - mdns_tx_packet_t *packet = _mdns_alloc_packet_default(tcpip_if, ip_protocol); - if (!packet) { - return NULL; - } - packet->flags = MDNS_FLAGS_QR_AUTHORITATIVE; - - uint8_t i; - for (i = 0; i < len; i++) { - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_SDPTR, services[i]->service, NULL, false, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_PTR, services[i]->service, NULL, false, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_SRV, services[i]->service, NULL, true, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_TXT, services[i]->service, NULL, true, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - } - if (include_ip) { - if (!_mdns_append_host_list_in_services(&packet->servers, services, len, true, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - } - return packet; -} - -/** - * @brief Convert probe packet to announce - */ -static mdns_tx_packet_t *_mdns_create_announce_from_probe(mdns_tx_packet_t *probe) -{ - mdns_tx_packet_t *packet = _mdns_alloc_packet_default(probe->tcpip_if, probe->ip_protocol); - if (!packet) { - return NULL; - } - packet->flags = MDNS_FLAGS_QR_AUTHORITATIVE; - - mdns_out_answer_t *s = probe->servers; - while (s) { - if (s->type == MDNS_TYPE_SRV) { - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_SDPTR, s->service, NULL, false, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_PTR, s->service, NULL, false, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_SRV, s->service, NULL, true, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_TXT, s->service, NULL, true, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - mdns_host_item_t *host = mdns_get_host_item(s->service->hostname); - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_A, NULL, host, true, false) - || !_mdns_alloc_answer(&packet->answers, MDNS_TYPE_AAAA, NULL, host, true, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - - } else if (s->type == MDNS_TYPE_A || s->type == MDNS_TYPE_AAAA) { - if (!_mdns_alloc_answer(&packet->answers, s->type, NULL, s->host, true, false)) { - _mdns_free_tx_packet(packet); - return NULL; - } - } - - s = s->next; - } - return packet; -} - -/** - * @brief Send by for particular services on particular PCB - */ -static void _mdns_pcb_send_bye(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t **services, size_t len, bool include_ip) -{ - mdns_tx_packet_t *packet = _mdns_alloc_packet_default(tcpip_if, ip_protocol); - if (!packet) { - return; - } - packet->flags = MDNS_FLAGS_QR_AUTHORITATIVE; - size_t i; - for (i = 0; i < len; i++) { - if (!_mdns_alloc_answer(&packet->answers, MDNS_TYPE_PTR, services[i]->service, NULL, true, true)) { - _mdns_free_tx_packet(packet); - return; - } - } - if (include_ip) { - _mdns_append_host_list_in_services(&packet->answers, services, len, true, true); - } - _mdns_dispatch_tx_packet(packet); - _mdns_free_tx_packet(packet); -} - -/** - * @brief Send probe for additional services on particular PCB - */ -static void _mdns_init_pcb_probe_new_service(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t **services, size_t len, bool probe_ip) -{ - mdns_pcb_t *pcb = &_mdns_server->interfaces[tcpip_if].pcbs[ip_protocol]; - size_t services_final_len = len; - - if (PCB_STATE_IS_PROBING(pcb)) { - services_final_len += pcb->probe_services_len; - } - mdns_srv_item_t **_services = NULL; - if (services_final_len) { - _services = (mdns_srv_item_t **)malloc(sizeof(mdns_srv_item_t *) * services_final_len); - if (!_services) { - HOOK_MALLOC_FAILED; - return; - } - - size_t i; - for (i = 0; i < len; i++) { - _services[i] = services[i]; - } - if (pcb->probe_services) { - for (i = 0; i < pcb->probe_services_len; i++) { - _services[len + i] = pcb->probe_services[i]; - } - free(pcb->probe_services); - } - } - - probe_ip = pcb->probe_ip || probe_ip; - - pcb->probe_ip = false; - pcb->probe_services = NULL; - pcb->probe_services_len = 0; - pcb->probe_running = false; - - mdns_tx_packet_t *packet = _mdns_create_probe_packet(tcpip_if, ip_protocol, _services, services_final_len, true, probe_ip); - if (!packet) { - free(_services); - return; - } - - pcb->probe_ip = probe_ip; - pcb->probe_services = _services; - pcb->probe_services_len = services_final_len; - pcb->probe_running = true; - _mdns_schedule_tx_packet(packet, ((pcb->failed_probes > 5) ? 1000 : 120) + (esp_random() & 0x7F)); - pcb->state = PCB_PROBE_1; -} - -/** - * @brief Send probe for particular services on particular PCB - * - * Tests possible duplication on probing service structure and probes only for new entries. - * - If pcb probing then add only non-probing services and restarts probing - * - If pcb not probing, run probing for all specified services - */ -static void _mdns_init_pcb_probe(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t **services, size_t len, bool probe_ip) -{ - mdns_pcb_t *pcb = &_mdns_server->interfaces[tcpip_if].pcbs[ip_protocol]; - - _mdns_clear_pcb_tx_queue_head(tcpip_if, ip_protocol); - - if (_str_null_or_empty(_mdns_server->hostname)) { - pcb->state = PCB_RUNNING; - return; - } - - if (PCB_STATE_IS_PROBING(pcb)) { - // Looking for already probing services to resolve duplications - mdns_srv_item_t *new_probe_services[len]; - int new_probe_service_len = 0; - bool found; - for (size_t j = 0; j < len; ++j) { - found = false; - for (int i = 0; i < pcb->probe_services_len; ++i) { - if (pcb->probe_services[i] == services[j]) { - found = true; - break; - } - } - if (!found) { - new_probe_services[new_probe_service_len++] = services[j]; - } - } - // init probing for newly added services - _mdns_init_pcb_probe_new_service(tcpip_if, ip_protocol, - new_probe_service_len ? new_probe_services : NULL, new_probe_service_len, probe_ip); - } else { - // not probing, so init for all services - _mdns_init_pcb_probe_new_service(tcpip_if, ip_protocol, services, len, probe_ip); - } -} - -/** - * @brief Restart the responder on particular PCB - */ -static void _mdns_restart_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - size_t srv_count = 0; - mdns_srv_item_t *a = _mdns_server->services; - while (a) { - srv_count++; - a = a->next; - } - mdns_srv_item_t *services[srv_count]; - size_t i = 0; - a = _mdns_server->services; - while (a) { - services[i++] = a; - a = a->next; - } - _mdns_init_pcb_probe(tcpip_if, ip_protocol, services, srv_count, true); -} - -/** - * @brief Send by for particular services - */ -static void _mdns_send_bye(mdns_srv_item_t **services, size_t len, bool include_ip) -{ - uint8_t i, j; - if (_str_null_or_empty(_mdns_server->hostname)) { - return; - } - - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - for (j = 0; j < MDNS_IP_PROTOCOL_MAX; j++) { - if (mdns_is_netif_ready(i, j) && _mdns_server->interfaces[i].pcbs[j].state == PCB_RUNNING) { - _mdns_pcb_send_bye((mdns_if_t)i, (mdns_ip_protocol_t)j, services, len, include_ip); - } - } - } -} - -/** - * @brief Send announcement on particular PCB - */ -static void _mdns_announce_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, mdns_srv_item_t **services, size_t len, bool include_ip) -{ - mdns_pcb_t *_pcb = &_mdns_server->interfaces[tcpip_if].pcbs[ip_protocol]; - size_t i; - if (mdns_is_netif_ready(tcpip_if, ip_protocol)) { - if (PCB_STATE_IS_PROBING(_pcb)) { - _mdns_init_pcb_probe(tcpip_if, ip_protocol, services, len, include_ip); - } else if (PCB_STATE_IS_ANNOUNCING(_pcb)) { - mdns_tx_packet_t *p = _mdns_get_next_pcb_packet(tcpip_if, ip_protocol); - if (p) { - for (i = 0; i < len; i++) { - if (!_mdns_alloc_answer(&p->answers, MDNS_TYPE_SDPTR, services[i]->service, NULL, false, false) - || !_mdns_alloc_answer(&p->answers, MDNS_TYPE_PTR, services[i]->service, NULL, false, false) - || !_mdns_alloc_answer(&p->answers, MDNS_TYPE_SRV, services[i]->service, NULL, true, false) - || !_mdns_alloc_answer(&p->answers, MDNS_TYPE_TXT, services[i]->service, NULL, true, false)) { - break; - } - } - if (include_ip) { - _mdns_dealloc_answer(&p->additional, MDNS_TYPE_A, NULL); - _mdns_dealloc_answer(&p->additional, MDNS_TYPE_AAAA, NULL); - _mdns_append_host_list_in_services(&p->answers, services, len, true, false); - } - _pcb->state = PCB_ANNOUNCE_1; - } - } else if (_pcb->state == PCB_RUNNING) { - - if (_str_null_or_empty(_mdns_server->hostname)) { - return; - } - - _pcb->state = PCB_ANNOUNCE_1; - mdns_tx_packet_t *p = _mdns_create_announce_packet(tcpip_if, ip_protocol, services, len, include_ip); - if (p) { - _mdns_schedule_tx_packet(p, 0); - } - } - } -} - -/** - * @brief Send probe on all active PCBs - */ -static void _mdns_probe_all_pcbs(mdns_srv_item_t **services, size_t len, bool probe_ip, bool clear_old_probe) -{ - uint8_t i, j; - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - for (j = 0; j < MDNS_IP_PROTOCOL_MAX; j++) { - if (mdns_is_netif_ready(i, j)) { - mdns_pcb_t *_pcb = &_mdns_server->interfaces[i].pcbs[j]; - if (clear_old_probe) { - free(_pcb->probe_services); - _pcb->probe_services = NULL; - _pcb->probe_services_len = 0; - _pcb->probe_running = false; - } - _mdns_init_pcb_probe((mdns_if_t)i, (mdns_ip_protocol_t)j, services, len, probe_ip); - } - } - } -} - -/** - * @brief Send announcement on all active PCBs - */ -static void _mdns_announce_all_pcbs(mdns_srv_item_t **services, size_t len, bool include_ip) -{ - uint8_t i, j; - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - for (j = 0; j < MDNS_IP_PROTOCOL_MAX; j++) { - _mdns_announce_pcb((mdns_if_t)i, (mdns_ip_protocol_t)j, services, len, include_ip); - } - } -} - -/** - * @brief Restart the responder on all active PCBs - */ -static void _mdns_send_final_bye(bool include_ip) -{ - //collect all services and start probe - size_t srv_count = 0; - mdns_srv_item_t *a = _mdns_server->services; - while (a) { - srv_count++; - a = a->next; - } - if (!srv_count) { - return; - } - mdns_srv_item_t *services[srv_count]; - size_t i = 0; - a = _mdns_server->services; - while (a) { - services[i++] = a; - a = a->next; - } - _mdns_send_bye(services, srv_count, include_ip); -} - -/** - * @brief Stop the responder on all services without instance - */ -static void _mdns_send_bye_all_pcbs_no_instance(bool include_ip) -{ - size_t srv_count = 0; - mdns_srv_item_t *a = _mdns_server->services; - while (a) { - if (!a->service->instance) { - srv_count++; - } - a = a->next; - } - if (!srv_count) { - return; - } - mdns_srv_item_t *services[srv_count]; - size_t i = 0; - a = _mdns_server->services; - while (a) { - if (!a->service->instance) { - services[i++] = a; - } - a = a->next; - } - _mdns_send_bye(services, srv_count, include_ip); -} - -/** - * @brief Restart the responder on all services without instance - */ -static void _mdns_restart_all_pcbs_no_instance(void) -{ - size_t srv_count = 0; - mdns_srv_item_t *a = _mdns_server->services; - while (a) { - if (!a->service->instance) { - srv_count++; - } - a = a->next; - } - if (!srv_count) { - return; - } - mdns_srv_item_t *services[srv_count]; - size_t i = 0; - a = _mdns_server->services; - while (a) { - if (!a->service->instance) { - services[i++] = a; - } - a = a->next; - } - _mdns_probe_all_pcbs(services, srv_count, false, true); -} - -/** - * @brief Restart the responder on all active PCBs - */ -static void _mdns_restart_all_pcbs(void) -{ - _mdns_clear_tx_queue_head(); - size_t srv_count = 0; - mdns_srv_item_t *a = _mdns_server->services; - while (a) { - srv_count++; - a = a->next; - } - mdns_srv_item_t *services[srv_count]; - size_t l = 0; - a = _mdns_server->services; - while (a) { - services[l++] = a; - a = a->next; - } - - _mdns_probe_all_pcbs(services, srv_count, true, true); -} - - - -/** - * @brief creates/allocates new text item list - * @param num_items service number of txt items or 0 - * @param txt service txt items array or NULL - * - * @return pointer to the linked txt item list or NULL - */ -static mdns_txt_linked_item_t *_mdns_allocate_txt(size_t num_items, mdns_txt_item_t txt[]) -{ - mdns_txt_linked_item_t *new_txt = NULL; - size_t i = 0; - if (num_items) { - for (i = 0; i < num_items; i++) { - mdns_txt_linked_item_t *new_item = (mdns_txt_linked_item_t *)malloc(sizeof(mdns_txt_linked_item_t)); - if (!new_item) { - HOOK_MALLOC_FAILED; - break; - } - new_item->key = strdup(txt[i].key); - if (!new_item->key) { - free(new_item); - break; - } - new_item->value = strdup(txt[i].value); - if (!new_item->value) { - free((char *)new_item->key); - free(new_item); - break; - } - new_item->value_len = strlen(new_item->value); - new_item->next = new_txt; - new_txt = new_item; - } - } - return new_txt; -} - -/** - * @brief Deallocate the txt linked list - * @param txt pointer to the txt pointer to free, noop if txt==NULL - */ -static void _mdns_free_linked_txt(mdns_txt_linked_item_t *txt) -{ - mdns_txt_linked_item_t *t; - while (txt) { - t = txt; - txt = txt->next; - free((char *)t->value); - free((char *)t->key); - free(t); - } -} - -/** - * @brief creates/allocates new service - * @param service service type - * @param proto service proto - * @param hostname service hostname - * @param port service port - * @param instance service instance - * @param num_items service number of txt items or 0 - * @param txt service txt items array or NULL - * - * @return pointer to the service or NULL on error - */ -static mdns_service_t *_mdns_create_service(const char *service, const char *proto, const char *hostname, - uint16_t port, const char *instance, size_t num_items, - mdns_txt_item_t txt[]) -{ - mdns_service_t *s = (mdns_service_t *)calloc(1, sizeof(mdns_service_t)); - if (!s) { - HOOK_MALLOC_FAILED; - return NULL; - } - - mdns_txt_linked_item_t *new_txt = _mdns_allocate_txt(num_items, txt); - if (num_items && new_txt == NULL) { - goto fail; - } - - s->priority = 0; - s->weight = 0; - s->instance = instance ? strndup(instance, MDNS_NAME_BUF_LEN - 1) : NULL; - s->txt = new_txt; - s->port = port; - s->subtype = NULL; - - if (hostname) { - s->hostname = strndup(hostname, MDNS_NAME_BUF_LEN - 1); - if (!s->hostname) { - goto fail; - } - } else { - s->hostname = NULL; - } - - s->service = strndup(service, MDNS_NAME_BUF_LEN - 1); - if (!s->service) { - goto fail; - } - - s->proto = strndup(proto, MDNS_NAME_BUF_LEN - 1); - if (!s->proto) { - goto fail; - } - return s; - -fail: - _mdns_free_linked_txt(s->txt); - free((char *)s->instance); - free((char *)s->service); - free((char *)s->proto); - free((char *)s->hostname); - free(s); - - return NULL; -} - -/** - * @brief Remove and free service answer from answer list (destination) - */ -static void _mdns_dealloc_scheduled_service_answers(mdns_out_answer_t **destination, mdns_service_t *service) -{ - mdns_out_answer_t *d = *destination; - if (!d) { - return; - } - while (d && d->service == service) { - *destination = d->next; - free(d); - d = *destination; - } - while (d && d->next) { - mdns_out_answer_t *a = d->next; - if (a->service == service) { - d->next = a->next; - free(a); - } else { - d = d->next; - } - } -} - -/** - * @brief Find, remove and free answers and scheduled packets for service - */ -static void _mdns_remove_scheduled_service_packets(mdns_service_t *service) -{ - if (!service) { - return; - } - mdns_tx_packet_t *p = NULL; - mdns_tx_packet_t *q = _mdns_server->tx_queue_head; - while (q) { - bool had_answers = (q->answers != NULL); - - _mdns_dealloc_scheduled_service_answers(&(q->answers), service); - _mdns_dealloc_scheduled_service_answers(&(q->additional), service); - _mdns_dealloc_scheduled_service_answers(&(q->servers), service); - - - mdns_pcb_t *_pcb = &_mdns_server->interfaces[q->tcpip_if].pcbs[q->ip_protocol]; - if (mdns_is_netif_ready(q->tcpip_if, q->ip_protocol)) { - if (PCB_STATE_IS_PROBING(_pcb)) { - uint8_t i; - //check if we are probing this service - for (i = 0; i < _pcb->probe_services_len; i++) { - mdns_srv_item_t *s = _pcb->probe_services[i]; - if (s->service == service) { - break; - } - } - if (i < _pcb->probe_services_len) { - if (_pcb->probe_services_len > 1) { - uint8_t n; - for (n = (i + 1); n < _pcb->probe_services_len; n++) { - _pcb->probe_services[n - 1] = _pcb->probe_services[n]; - } - _pcb->probe_services_len--; - } else { - _pcb->probe_services_len = 0; - free(_pcb->probe_services); - _pcb->probe_services = NULL; - if (!_pcb->probe_ip) { - _pcb->probe_running = false; - _pcb->state = PCB_RUNNING; - } - } - - if (q->questions) { - mdns_out_question_t *qsn = NULL; - mdns_out_question_t *qs = q->questions; - if (qs->type == MDNS_TYPE_ANY - && qs->service && strcmp(qs->service, service->service) == 0 - && qs->proto && strcmp(qs->proto, service->proto) == 0) { - q->questions = q->questions->next; - free(qs); - } else while (qs->next) { - qsn = qs->next; - if (qsn->type == MDNS_TYPE_ANY - && qsn->service && strcmp(qsn->service, service->service) == 0 - && qsn->proto && strcmp(qsn->proto, service->proto) == 0) { - qs->next = qsn->next; - free(qsn); - break; - } - qs = qs->next; - } - } - } - } else if (PCB_STATE_IS_ANNOUNCING(_pcb)) { - //if answers were cleared, set to running - if (had_answers && q->answers == NULL) { - _pcb->state = PCB_RUNNING; - } - } - } - - p = q; - q = q->next; - if (!p->questions && !p->answers && !p->additional && !p->servers) { - queueDetach(mdns_tx_packet_t, _mdns_server->tx_queue_head, p); - _mdns_free_tx_packet(p); - } - } -} - -/** - * @brief free service memory - * - * @param service the service - */ -static void _mdns_free_service(mdns_service_t *service) -{ - if (!service) { - return; - } - free((char *)service->instance); - free((char *)service->service); - free((char *)service->proto); - free((char *)service->hostname); - while (service->txt) { - mdns_txt_linked_item_t *s = service->txt; - service->txt = service->txt->next; - free((char *)s->key); - free((char *)s->value); - free(s); - } - while (service->subtype) { - mdns_subtype_t *next = service->subtype->next; - free((char *)service->subtype->subtype); - free(service->subtype); - service->subtype = next; - } - free(service); -} - - -/* - * Received Packet Handling - * */ - -/** - * @brief Detect SRV collision - */ -static int _mdns_check_srv_collision(mdns_service_t *service, uint16_t priority, uint16_t weight, uint16_t port, const char *host, const char *domain) -{ - if (_str_null_or_empty(_mdns_server->hostname)) { - return 0; - } - - size_t our_host_len = strlen(_mdns_server->hostname); - size_t our_len = 14 + our_host_len; - - size_t their_host_len = strlen(host); - size_t their_domain_len = strlen(domain); - size_t their_len = 9 + their_host_len + their_domain_len; - - if (their_len > our_len) { - return 1;//they win - } else if (their_len < our_len) { - return -1;//we win - } - - uint16_t our_index = 0; - uint8_t our_data[our_len]; - _mdns_append_u16(our_data, &our_index, service->priority); - _mdns_append_u16(our_data, &our_index, service->weight); - _mdns_append_u16(our_data, &our_index, service->port); - our_data[our_index++] = our_host_len; - memcpy(our_data + our_index, _mdns_server->hostname, our_host_len); - our_index += our_host_len; - our_data[our_index++] = 5; - memcpy(our_data + our_index, MDNS_DEFAULT_DOMAIN, 5); - our_index += 5; - our_data[our_index++] = 0; - - uint16_t their_index = 0; - uint8_t their_data[their_len]; - _mdns_append_u16(their_data, &their_index, priority); - _mdns_append_u16(their_data, &their_index, weight); - _mdns_append_u16(their_data, &their_index, port); - their_data[their_index++] = their_host_len; - memcpy(their_data + their_index, host, their_host_len); - their_index += their_host_len; - their_data[their_index++] = their_domain_len; - memcpy(their_data + their_index, domain, their_domain_len); - their_index += their_domain_len; - their_data[their_index++] = 0; - - int ret = memcmp(our_data, their_data, our_len); - if (ret > 0) { - return -1;//we win - } else if (ret < 0) { - return 1;//they win - } - return 0;//same -} - -/** - * @brief Detect TXT collision - */ -static int _mdns_check_txt_collision(mdns_service_t *service, const uint8_t *data, size_t len) -{ - size_t data_len = 0; - if (len == 1 && service->txt) { - return -1;//we win - } else if (len > 1 && !service->txt) { - return 1;//they win - } else if (len == 1 && !service->txt) { - return 0;//same - } - - mdns_txt_linked_item_t *txt = service->txt; - while (txt) { - data_len += 1 /* record-len */ + strlen(txt->key) + txt->value_len + (txt->value ? 1 : 0 /* "=" */); - txt = txt->next; - } - - if (len > data_len) { - return 1;//they win - } else if (len < data_len) { - return -1;//we win - } - - uint8_t ours[len]; - uint16_t index = 0; - - txt = service->txt; - while (txt) { - append_one_txt_record_entry(ours, &index, txt); - txt = txt->next; - } - - int ret = memcmp(ours, data, len); - if (ret > 0) { - return -1;//we win - } else if (ret < 0) { - return 1;//they win - } - return 0;//same -} - -static esp_err_t mdns_pcb_deinit_local(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_proto) -{ - esp_err_t err = _mdns_pcb_deinit(tcpip_if, ip_proto); - mdns_pcb_t *_pcb = &_mdns_server->interfaces[tcpip_if].pcbs[ip_proto]; - if (_pcb == NULL || err != ESP_OK) { - return err; - } - free(_pcb->probe_services); - _pcb->state = PCB_OFF; - _pcb->probe_ip = false; - _pcb->probe_services = NULL; - _pcb->probe_services_len = 0; - _pcb->probe_running = false; - _pcb->failed_probes = 0; - return ESP_OK; -} -/** - * @brief Set interface as duplicate if another is found on the same subnet - */ -static void _mdns_dup_interface(mdns_if_t tcpip_if) -{ - uint8_t i; - mdns_if_t other_if = _mdns_get_other_if (tcpip_if); - if (other_if == MDNS_MAX_INTERFACES) { - return; // no other interface found - } - for (i = 0; i < MDNS_IP_PROTOCOL_MAX; i++) { - if (mdns_is_netif_ready(other_if, i)) { - //stop this interface and mark as dup - if (mdns_is_netif_ready(tcpip_if, i)) { - _mdns_clear_pcb_tx_queue_head(tcpip_if, i); - mdns_pcb_deinit_local(tcpip_if, i); - } - _mdns_server->interfaces[tcpip_if].pcbs[i].state = PCB_DUP; - _mdns_announce_pcb(other_if, i, NULL, 0, true); - } - } -} - -#ifdef CONFIG_LWIP_IPV4 -/** - * @brief Detect IPv4 address collision - */ -static int _mdns_check_a_collision(esp_ip4_addr_t *ip, mdns_if_t tcpip_if) -{ - esp_netif_ip_info_t if_ip_info; - esp_netif_ip_info_t other_ip_info; - if (!ip->addr) { - return 1;//denial! they win - } - if (esp_netif_get_ip_info(_mdns_get_esp_netif(tcpip_if), &if_ip_info)) { - return 1;//they win - } - int ret = memcmp((uint8_t *)&if_ip_info.ip.addr, (uint8_t *)&ip->addr, sizeof(esp_ip4_addr_t)); - if (ret > 0) { - return -1;//we win - } else if (ret < 0) { - //is it the other interface? - mdns_if_t other_if = _mdns_get_other_if (tcpip_if); - if (other_if == MDNS_MAX_INTERFACES) { - return 1;//AP interface! They win - } - if (esp_netif_get_ip_info(_mdns_get_esp_netif(other_if), &other_ip_info)) { - return 1;//IPv4 not active! They win - } - if (ip->addr != other_ip_info.ip.addr) { - return 1;//IPv4 not ours! They win - } - _mdns_dup_interface(tcpip_if); - return 2;//they win - } - return 0;//same -} -#endif /* CONFIG_LWIP_IPV4 */ - -#ifdef CONFIG_LWIP_IPV6 -/** - * @brief Detect IPv6 address collision - */ -static int _mdns_check_aaaa_collision(esp_ip6_addr_t *ip, mdns_if_t tcpip_if) -{ - struct esp_ip6_addr if_ip6; - struct esp_ip6_addr other_ip6; - if (_ipv6_address_is_zero(*ip)) { - return 1;//denial! they win - } - if (esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(tcpip_if), &if_ip6)) { - return 1;//they win - } - int ret = memcmp((uint8_t *)&if_ip6.addr, (uint8_t *)ip->addr, _MDNS_SIZEOF_IP6_ADDR); - if (ret > 0) { - return -1;//we win - } else if (ret < 0) { - //is it the other interface? - mdns_if_t other_if = _mdns_get_other_if (tcpip_if); - if (other_if == MDNS_MAX_INTERFACES) { - return 1;//AP interface! They win - } - if (esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(other_if), &other_ip6)) { - return 1;//IPv6 not active! They win - } - if (memcmp((uint8_t *)&other_ip6.addr, (uint8_t *)ip->addr, _MDNS_SIZEOF_IP6_ADDR)) { - return 1;//IPv6 not ours! They win - } - _mdns_dup_interface(tcpip_if); - return 2;//they win - } - return 0;//same -} -#endif /* CONFIG_LWIP_IPV6 */ - -static bool _hostname_is_ours(const char *hostname) -{ - if (!_str_null_or_empty(_mdns_server->hostname) && - strcasecmp(hostname, _mdns_server->hostname) == 0) { - return true; - } - mdns_host_item_t *host = _mdns_host_list; - while (host != NULL) { - if (strcasecmp(hostname, host->hostname) == 0) { - return true; - } - host = host->next; - } - return false; -} - -/** - * @brief Adds a delegated hostname to the linked list - * @param hostname Host name pointer - * @param address_list Address list - * @return true on success - * false if the host wasn't attached (this is our hostname, or alloc failure) so we have to free the structs - */ -static bool _mdns_delegate_hostname_add(const char *hostname, mdns_ip_addr_t *address_list) -{ - if (_hostname_is_ours(hostname)) { - return false; - } - - mdns_host_item_t *host = (mdns_host_item_t *)malloc(sizeof(mdns_host_item_t)); - - if (host == NULL) { - return false; - } - host->address_list = address_list; - host->hostname = hostname; - host->next = _mdns_host_list; - _mdns_host_list = host; - return true; -} - -static void free_address_list(mdns_ip_addr_t *address_list) -{ - while (address_list != NULL) { - mdns_ip_addr_t *next = address_list->next; - free(address_list); - address_list = next; - } -} - - -static bool _mdns_delegate_hostname_set_address(const char *hostname, mdns_ip_addr_t *address_list) -{ - if (!_str_null_or_empty(_mdns_server->hostname) && - strcasecmp(hostname, _mdns_server->hostname) == 0) { - return false; - } - mdns_host_item_t *host = _mdns_host_list; - while (host != NULL) { - if (strcasecmp(hostname, host->hostname) == 0) { - // free previous address list - free_address_list(host->address_list); - // set current address list to the host - host->address_list = address_list; - return true; - } - host = host->next; - } - return false; -} - -static mdns_ip_addr_t *copy_address_list(const mdns_ip_addr_t *address_list) -{ - mdns_ip_addr_t *head = NULL; - mdns_ip_addr_t *tail = NULL; - while (address_list != NULL) { - mdns_ip_addr_t *addr = (mdns_ip_addr_t *)malloc(sizeof(mdns_ip_addr_t)); - if (addr == NULL) { - free_address_list(head); - return NULL; - } - addr->addr = address_list->addr; - addr->next = NULL; - if (head == NULL) { - head = addr; - tail = addr; - } else { - tail->next = addr; - tail = tail->next; - } - address_list = address_list->next; - } - return head; -} - -static void free_delegated_hostnames(void) -{ - mdns_host_item_t *host = _mdns_host_list; - while (host != NULL) { - free_address_list(host->address_list); - free((char *)host->hostname); - mdns_host_item_t *item = host; - host = host->next; - free(item); - } - _mdns_host_list = NULL; -} - -static bool _mdns_delegate_hostname_remove(const char *hostname) -{ - mdns_srv_item_t *srv = _mdns_server->services; - mdns_srv_item_t *prev_srv = NULL; - while (srv) { - if (strcasecmp(srv->service->hostname, hostname) == 0) { - mdns_srv_item_t *to_free = srv; - _mdns_send_bye(&srv, 1, false); - _mdns_remove_scheduled_service_packets(srv->service); - if (prev_srv == NULL) { - _mdns_server->services = srv->next; - srv = srv->next; - } else { - prev_srv->next = srv->next; - srv = srv->next; - } - _mdns_free_service(to_free->service); - free(to_free); - } else { - prev_srv = srv; - srv = srv->next; - } - } - mdns_host_item_t *host = _mdns_host_list; - mdns_host_item_t *prev_host = NULL; - while (host != NULL) { - if (strcasecmp(hostname, host->hostname) == 0) { - if (prev_host == NULL) { - _mdns_host_list = host->next; - } else { - prev_host->next = host->next; - } - free_address_list(host->address_list); - free((char *)host->hostname); - free(host); - break; - } else { - prev_host = host; - host = host->next; - } - } - return true; -} - -/** - * @brief Check if parsed name is discovery - */ -static bool _mdns_name_is_discovery(mdns_name_t *name, uint16_t type) -{ - return ( - (name->host[0] && !strcasecmp(name->host, "_services")) - && (name->service[0] && !strcasecmp(name->service, "_dns-sd")) - && (name->proto[0] && !strcasecmp(name->proto, "_udp")) - && (name->domain[0] && !strcasecmp(name->domain, MDNS_DEFAULT_DOMAIN)) - && type == MDNS_TYPE_PTR - ); -} - -/** - * @brief Check if the parsed name is self-hosted, i.e. we should resolve conflicts - */ -static bool _mdns_name_is_selfhosted(mdns_name_t *name) -{ - if (_str_null_or_empty(_mdns_server->hostname)) { // self-hostname needs to be defined - return false; - } - - // hostname only -- check if selfhosted name - if (_str_null_or_empty(name->service) && _str_null_or_empty(name->proto) && - strcasecmp(name->host, _mdns_server->hostname) == 0 ) { - return true; - } - - // service -- check if selfhosted service - mdns_srv_item_t *srv = _mdns_get_service_item(name->service, name->proto, NULL); - if (srv && strcasecmp(_mdns_server->hostname, srv->service->hostname) == 0) { - return true; - } - return false; -} - -/** - * @brief Check if the parsed name is ours (matches service or host name) - */ -static bool _mdns_name_is_ours(mdns_name_t *name) -{ - //domain have to be "local" - if (_str_null_or_empty(name->domain) || ( strcasecmp(name->domain, MDNS_DEFAULT_DOMAIN) -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES - && strcasecmp(name->domain, "arpa") -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ - ) ) { - return false; - } - - //if service and proto are empty, host must match out hostname - if (_str_null_or_empty(name->service) && _str_null_or_empty(name->proto)) { - if (!_str_null_or_empty(name->host) - && !_str_null_or_empty(_mdns_server->hostname) - && _hostname_is_ours(name->host)) { - return true; - } - return false; - } - - //if service or proto is empty, name is invalid - if (_str_null_or_empty(name->service) || _str_null_or_empty(name->proto)) { - return false; - } - - - //find the service - mdns_srv_item_t *service; - if (name->sub) { - service = _mdns_get_service_item_subtype(name->host, name->service, name->proto); - } else if (_str_null_or_empty(name->host)) { - service = _mdns_get_service_item(name->service, name->proto, NULL); - } else { - service = _mdns_get_service_item_instance(name->host, name->service, name->proto, NULL); - } - if (!service) { - return false; - } - - //if query is PTR query and we have service, we have success - if (name->sub || _str_null_or_empty(name->host)) { - return true; - } - - //OK we have host in the name. find what is the instance of the service - const char *instance = _mdns_get_service_instance_name(service->service); - if (instance == NULL) { - return false; - } - - //compare the instance against the name - if (strcasecmp(name->host, instance) == 0) { - return true; - } - - return false; -} - -/** - * @brief read uint16_t from a packet - * @param packet the packet - * @param index index in the packet where the value starts - * - * @return the value - */ -static inline uint16_t _mdns_read_u16(const uint8_t *packet, uint16_t index) -{ - return (uint16_t)(packet[index]) << 8 | packet[index + 1]; -} - -/** - * @brief read uint32_t from a packet - * @param packet the packet - * @param index index in the packet where the value starts - * - * @return the value - */ -static inline uint32_t _mdns_read_u32(const uint8_t *packet, uint16_t index) -{ - return (uint32_t)(packet[index]) << 24 | (uint32_t)(packet[index + 1]) << 16 | (uint32_t)(packet[index + 2]) << 8 | packet[index + 3]; -} - -/** - * @brief reads and formats MDNS FQDN into mdns_name_t structure - * - * @param packet MDNS packet - * @param start Starting point of FQDN - * @param name mdns_name_t structure to populate - * - * @return the address after the parsed FQDN in the packet or NULL on error - */ -static const uint8_t *_mdns_parse_fqdn(const uint8_t *packet, const uint8_t *start, mdns_name_t *name, size_t packet_len) -{ - name->parts = 0; - name->sub = 0; - name->host[0] = 0; - name->service[0] = 0; - name->proto[0] = 0; - name->domain[0] = 0; - name->invalid = false; - - static char buf[MDNS_NAME_BUF_LEN]; - - const uint8_t *next_data = (uint8_t *)_mdns_read_fqdn(packet, start, name, buf, packet_len); - if (!next_data) { - return 0; - } - if (!name->parts || name->invalid) { - return next_data; - } - if (name->parts == 3) { - memmove((uint8_t *)name + (MDNS_NAME_BUF_LEN), (uint8_t *)name, 3 * (MDNS_NAME_BUF_LEN)); - name->host[0] = 0; - } else if (name->parts == 2) { - memmove((uint8_t *)(name->domain), (uint8_t *)(name->service), (MDNS_NAME_BUF_LEN)); - name->service[0] = 0; - name->proto[0] = 0; - } - if (strcasecmp(name->domain, MDNS_DEFAULT_DOMAIN) == 0 || strcasecmp(name->domain, "arpa") == 0) { - return next_data; - } - name->invalid = true; // mark the current name invalid, but continue with other question - return next_data; -} - -/** - * @brief Called from parser to check if question matches particular service - */ -static bool _mdns_question_matches(mdns_parsed_question_t *question, uint16_t type, mdns_srv_item_t *service) -{ - if (question->type != type) { - return false; - } - if (type == MDNS_TYPE_A || type == MDNS_TYPE_AAAA) { - return true; - } else if (type == MDNS_TYPE_PTR || type == MDNS_TYPE_SDPTR) { - if (question->service && question->proto && question->domain - && !strcasecmp(service->service->service, question->service) - && !strcasecmp(service->service->proto, question->proto) - && !strcasecmp(MDNS_DEFAULT_DOMAIN, question->domain)) { - return true; - } - } else if (service && (type == MDNS_TYPE_SRV || type == MDNS_TYPE_TXT)) { - const char *name = _mdns_get_service_instance_name(service->service); - if (name && question->host && question->service && question->proto && question->domain - && !strcasecmp(name, question->host) - && !strcasecmp(service->service->service, question->service) - && !strcasecmp(service->service->proto, question->proto) - && !strcasecmp(MDNS_DEFAULT_DOMAIN, question->domain)) { - return true; - } - } - - return false; -} - -/** - * @brief Removes saved question from parsed data - */ -static void _mdns_remove_parsed_question(mdns_parsed_packet_t *parsed_packet, uint16_t type, mdns_srv_item_t *service) -{ - mdns_parsed_question_t *q = parsed_packet->questions; - - if (_mdns_question_matches(q, type, service)) { - parsed_packet->questions = q->next; - free(q->host); - free(q->service); - free(q->proto); - free(q->domain); - free(q); - return; - } - - while (q->next) { - mdns_parsed_question_t *p = q->next; - if (_mdns_question_matches(p, type, service)) { - q->next = p->next; - free(p->host); - free(p->service); - free(p->proto); - free(p->domain); - free(p); - return; - } - q = q->next; - } -} - -/** - * @brief Get number of items in TXT parsed data - */ -static int _mdns_txt_items_count_get(const uint8_t *data, size_t len) -{ - if (len == 1) { - return 0; - } - - int num_items = 0; - uint16_t i = 0; - size_t partLen = 0; - - while (i < len) { - partLen = data[i++]; - if (!partLen) { - break; - } - if ((i + partLen) > len) { - return -1;//error - } - i += partLen; - num_items++; - } - return num_items; -} - -/** - * @brief Get the length of TXT item's key name - */ -static int _mdns_txt_item_name_get_len(const uint8_t *data, size_t len) -{ - if (*data == '=') { - return -1; - } - for (size_t i = 0; i < len; i++) { - if (data[i] == '=') { - return i; - } - } - return len; -} - -/** - * @brief Create TXT result array from parsed TXT data - */ -static void _mdns_result_txt_create(const uint8_t *data, size_t len, mdns_txt_item_t **out_txt, uint8_t **out_value_len, - size_t *out_count) -{ - *out_txt = NULL; - *out_count = 0; - uint16_t i = 0, y; - size_t partLen = 0; - int num_items = _mdns_txt_items_count_get(data, len); - if (num_items < 0) { - return;//error - } - - if (!num_items) { - return; - } - - mdns_txt_item_t *txt = (mdns_txt_item_t *)malloc(sizeof(mdns_txt_item_t) * num_items); - if (!txt) { - HOOK_MALLOC_FAILED; - return; - } - uint8_t *txt_value_len = (uint8_t *)malloc(num_items); - if (!txt_value_len) { - free(txt); - HOOK_MALLOC_FAILED; - return; - } - memset(txt, 0, sizeof(mdns_txt_item_t) * num_items); - memset(txt_value_len, 0, num_items); - size_t txt_num = 0; - - while (i < len) { - partLen = data[i++]; - if (!partLen) { - break; - } - - if ((i + partLen) > len) { - goto handle_error;//error - } - - int name_len = _mdns_txt_item_name_get_len(data + i, partLen); - if (name_len < 0) {//invalid item (no name) - i += partLen; - continue; - } - char *key = (char *)malloc(name_len + 1); - if (!key) { - HOOK_MALLOC_FAILED; - goto handle_error;//error - } - - mdns_txt_item_t *t = &txt[txt_num]; - uint8_t *value_len = &txt_value_len[txt_num]; - txt_num++; - - memcpy(key, data + i, name_len); - key[name_len] = 0; - i += name_len + 1; - t->key = key; - - int new_value_len = partLen - name_len - 1; - if (new_value_len > 0) { - char *value = (char *)malloc(new_value_len + 1); - if (!value) { - HOOK_MALLOC_FAILED; - goto handle_error;//error - } - memcpy(value, data + i, new_value_len); - value[new_value_len] = 0; - *value_len = new_value_len; - i += new_value_len; - t->value = value; - } - } - - *out_txt = txt; - *out_count = txt_num; - *out_value_len = txt_value_len; - return; - -handle_error : - for (y = 0; y < txt_num; y++) { - mdns_txt_item_t *t = &txt[y]; - free((char *)t->key); - free((char *)t->value); - } - free(txt_value_len); - free(txt); -} - -/** - * @brief Duplicate string or return error - */ -static esp_err_t _mdns_strdup_check(char **out, char *in) -{ - if (in && in[0]) { - *out = strdup(in); - if (!*out) { - return ESP_FAIL; - } - return ESP_OK; - } - *out = NULL; - return ESP_OK; -} - -/** - * @brief main packet parser - * - * @param packet the packet - */ -void mdns_parse_packet(mdns_rx_packet_t *packet) -{ - static mdns_name_t n; - mdns_header_t header; - const uint8_t *data = _mdns_get_packet_data(packet); - size_t len = _mdns_get_packet_len(packet); - const uint8_t *content = data + MDNS_HEAD_LEN; - bool do_not_reply = false; - mdns_search_once_t *search_result = NULL; - -#ifdef MDNS_ENABLE_DEBUG - _mdns_dbg_printf("\nRX[%lu][%lu]: ", (unsigned long)packet->tcpip_if, (unsigned long)packet->ip_protocol); - if (packet->src.type == ESP_IPADDR_TYPE_V4) { - _mdns_dbg_printf("From: " IPSTR ":%u, To: " IPSTR ", ", IP2STR(&packet->src.u_addr.ip4), packet->src_port, IP2STR(&packet->dest.u_addr.ip4)); - } else { - _mdns_dbg_printf("From: " IPV6STR ":%u, To: " IPV6STR ", ", IPV62STR(packet->src.u_addr.ip6), packet->src_port, IPV62STR(packet->dest.u_addr.ip6)); - } - mdns_debug_packet(data, len); -#endif - -#ifndef CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES - // Check if the packet wasn't sent by us -#ifdef CONFIG_LWIP_IPV4 - if (packet->ip_protocol == MDNS_IP_PROTOCOL_V4) { - esp_netif_ip_info_t if_ip_info; - if (esp_netif_get_ip_info(_mdns_get_esp_netif(packet->tcpip_if), &if_ip_info) == ESP_OK && - memcmp(&if_ip_info.ip.addr, &packet->src.u_addr.ip4.addr, sizeof(esp_ip4_addr_t)) == 0) { - return; - } - } -#endif /* CONFIG_LWIP_IPV4 */ -#ifdef CONFIG_LWIP_IPV6 - if (packet->ip_protocol == MDNS_IP_PROTOCOL_V6) { - struct esp_ip6_addr if_ip6; - if (esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(packet->tcpip_if), &if_ip6) == ESP_OK && - memcmp(&if_ip6, &packet->src.u_addr.ip6, sizeof(esp_ip6_addr_t)) == 0) { - return; - } - } -#endif /* CONFIG_LWIP_IPV6 */ -#endif // CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES - - // Check for the minimum size of mdns packet - if (len <= MDNS_HEAD_ADDITIONAL_OFFSET) { - return; - } - - mdns_parsed_packet_t *parsed_packet = (mdns_parsed_packet_t *)malloc(sizeof(mdns_parsed_packet_t)); - if (!parsed_packet) { - HOOK_MALLOC_FAILED; - return; - } - memset(parsed_packet, 0, sizeof(mdns_parsed_packet_t)); - - mdns_name_t *name = &n; - memset(name, 0, sizeof(mdns_name_t)); - - header.id = _mdns_read_u16(data, MDNS_HEAD_ID_OFFSET); - header.flags = _mdns_read_u16(data, MDNS_HEAD_FLAGS_OFFSET); - header.questions = _mdns_read_u16(data, MDNS_HEAD_QUESTIONS_OFFSET); - header.answers = _mdns_read_u16(data, MDNS_HEAD_ANSWERS_OFFSET); - header.servers = _mdns_read_u16(data, MDNS_HEAD_SERVERS_OFFSET); - header.additional = _mdns_read_u16(data, MDNS_HEAD_ADDITIONAL_OFFSET); - - if (header.flags == MDNS_FLAGS_QR_AUTHORITATIVE && packet->src_port != MDNS_SERVICE_PORT) { - free(parsed_packet); - return; - } - - //if we have not set the hostname, we can not answer questions - if (header.questions && !header.answers && _str_null_or_empty(_mdns_server->hostname)) { - free(parsed_packet); - return; - } - - parsed_packet->tcpip_if = packet->tcpip_if; - parsed_packet->ip_protocol = packet->ip_protocol; - parsed_packet->multicast = packet->multicast; - parsed_packet->authoritative = (header.flags == MDNS_FLAGS_QR_AUTHORITATIVE); - parsed_packet->distributed = header.flags == MDNS_FLAGS_DISTRIBUTED; - parsed_packet->id = header.id; - esp_netif_ip_addr_copy(&parsed_packet->src, &packet->src); - parsed_packet->src_port = packet->src_port; - - if (header.questions) { - uint8_t qs = header.questions; - - while (qs--) { - content = _mdns_parse_fqdn(data, content, name, len); - if (!content) { - header.answers = 0; - header.additional = 0; - header.servers = 0; - goto clear_rx_packet;//error - } - - if (content + MDNS_CLASS_OFFSET + 1 >= data + len) { - goto clear_rx_packet; // malformed packet, won't read behind it - } - uint16_t type = _mdns_read_u16(content, MDNS_TYPE_OFFSET); - uint16_t mdns_class = _mdns_read_u16(content, MDNS_CLASS_OFFSET); - bool unicast = !!(mdns_class & 0x8000); - mdns_class &= 0x7FFF; - content = content + 4; - - if (mdns_class != 0x0001 || name->invalid) {//bad class or invalid name for this question entry - continue; - } - - if (_mdns_name_is_discovery(name, type)) { - //service discovery - parsed_packet->discovery = true; - mdns_srv_item_t *a = _mdns_server->services; - while (a) { - mdns_parsed_question_t *question = (mdns_parsed_question_t *)calloc(1, sizeof(mdns_parsed_question_t)); - if (!question) { - HOOK_MALLOC_FAILED; - goto clear_rx_packet; - } - question->next = parsed_packet->questions; - parsed_packet->questions = question; - - question->unicast = unicast; - question->type = MDNS_TYPE_SDPTR; - question->host = NULL; - question->service = strdup(a->service->service); - question->proto = strdup(a->service->proto); - question->domain = strdup(MDNS_DEFAULT_DOMAIN); - if (!question->service || !question->proto || !question->domain) { - goto clear_rx_packet; - } - a = a->next; - } - continue; - } - if (!_mdns_name_is_ours(name)) { - continue; - } - - if (type == MDNS_TYPE_ANY && !_str_null_or_empty(name->host)) { - parsed_packet->probe = true; - } - - mdns_parsed_question_t *question = (mdns_parsed_question_t *)calloc(1, sizeof(mdns_parsed_question_t)); - if (!question) { - HOOK_MALLOC_FAILED; - goto clear_rx_packet; - } - question->next = parsed_packet->questions; - parsed_packet->questions = question; - - question->unicast = unicast; - question->type = type; - question->sub = name->sub; - if (_mdns_strdup_check(&(question->host), name->host) - || _mdns_strdup_check(&(question->service), name->service) - || _mdns_strdup_check(&(question->proto), name->proto) - || _mdns_strdup_check(&(question->domain), name->domain)) { - goto clear_rx_packet; - } - } - } - - if (header.questions && !parsed_packet->questions && !parsed_packet->discovery && !header.answers) { - goto clear_rx_packet; - } else if (header.answers || header.servers || header.additional) { - uint16_t recordIndex = 0; - - while (content < (data + len)) { - - content = _mdns_parse_fqdn(data, content, name, len); - if (!content) { - goto clear_rx_packet;//error - } - - if (content + MDNS_LEN_OFFSET + 1 >= data + len) { - goto clear_rx_packet; // malformed packet, won't read behind it - } - uint16_t type = _mdns_read_u16(content, MDNS_TYPE_OFFSET); - uint16_t mdns_class = _mdns_read_u16(content, MDNS_CLASS_OFFSET); - uint32_t ttl = _mdns_read_u32(content, MDNS_TTL_OFFSET); - uint16_t data_len = _mdns_read_u16(content, MDNS_LEN_OFFSET); - const uint8_t *data_ptr = content + MDNS_DATA_OFFSET; - mdns_class &= 0x7FFF; - - content = data_ptr + data_len; - if (content > (data + len)) { - goto clear_rx_packet; - } - - bool discovery = false; - bool ours = false; - mdns_srv_item_t *service = NULL; - mdns_parsed_record_type_t record_type = MDNS_ANSWER; - - if (recordIndex >= (header.answers + header.servers)) { - record_type = MDNS_EXTRA; - } else if (recordIndex >= (header.answers)) { - record_type = MDNS_NS; - } - recordIndex++; - - if (type == MDNS_TYPE_NSEC || type == MDNS_TYPE_OPT) { - //skip NSEC and OPT - continue; - } - - if (parsed_packet->discovery && _mdns_name_is_discovery(name, type)) { - discovery = true; - } else if (!name->sub && _mdns_name_is_ours(name)) { - ours = true; - if (name->service[0] && name->proto[0]) { - service = _mdns_get_service_item(name->service, name->proto, NULL); - } - } else { - if ((header.flags & MDNS_FLAGS_QUERY_REPSONSE) == 0 || record_type == MDNS_NS) { - //skip this record - continue; - } - search_result = _mdns_search_find_from(_mdns_server->search_once, name, type, packet->tcpip_if, packet->ip_protocol); - } - - if (type == MDNS_TYPE_PTR) { - if (!_mdns_parse_fqdn(data, data_ptr, name, len)) { - continue;//error - } - if (search_result) { - _mdns_search_result_add_ptr(search_result, name->host, name->service, name->proto, - packet->tcpip_if, packet->ip_protocol, ttl); - } else if ((discovery || ours) && !name->sub && _mdns_name_is_ours(name)) { - if (discovery && (service = _mdns_get_service_item(name->service, name->proto, NULL))) { - _mdns_remove_parsed_question(parsed_packet, MDNS_TYPE_SDPTR, service); - } else if (service && parsed_packet->questions && !parsed_packet->probe) { - _mdns_remove_parsed_question(parsed_packet, type, service); - } else if (service) { - //check if TTL is more than half of the full TTL value (4500) - if (ttl > (MDNS_ANSWER_PTR_TTL / 2)) { - _mdns_remove_scheduled_answer(packet->tcpip_if, packet->ip_protocol, type, service); - } - } - } - } else if (type == MDNS_TYPE_SRV) { - mdns_result_t *result = NULL; - if (search_result && search_result->type == MDNS_TYPE_PTR) { - result = search_result->result; - while (result) { - if (_mdns_get_esp_netif(packet->tcpip_if) == result->esp_netif - && packet->ip_protocol == result->ip_protocol - && result->instance_name && !strcmp(name->host, result->instance_name)) { - break; - } - result = result->next; - } - if (!result) { - result = _mdns_search_result_add_ptr(search_result, name->host, name->service, name->proto, - packet->tcpip_if, packet->ip_protocol, ttl); - if (!result) { - continue;//error - } - } - } - bool is_selfhosted = _mdns_name_is_selfhosted(name); - if (!_mdns_parse_fqdn(data, data_ptr + MDNS_SRV_FQDN_OFFSET, name, len)) { - continue;//error - } - if (data_ptr + MDNS_SRV_PORT_OFFSET + 1 >= data + len) { - goto clear_rx_packet; // malformed packet, won't read behind it - } - uint16_t priority = _mdns_read_u16(data_ptr, MDNS_SRV_PRIORITY_OFFSET); - uint16_t weight = _mdns_read_u16(data_ptr, MDNS_SRV_WEIGHT_OFFSET); - uint16_t port = _mdns_read_u16(data_ptr, MDNS_SRV_PORT_OFFSET); - - if (search_result) { - if (search_result->type == MDNS_TYPE_PTR) { - if (!result->hostname) { // assign host/port for this entry only if not previously set - result->port = port; - result->hostname = strdup(name->host); - } - } else { - _mdns_search_result_add_srv(search_result, name->host, port, packet->tcpip_if, packet->ip_protocol, ttl); - } - } else if (ours) { - if (parsed_packet->questions && !parsed_packet->probe) { - _mdns_remove_parsed_question(parsed_packet, type, service); - continue; - } else if (parsed_packet->distributed) { - _mdns_remove_scheduled_answer(packet->tcpip_if, packet->ip_protocol, type, service); - continue; - } - if (!is_selfhosted) { - continue; - } - //detect collision (-1=won, 0=none, 1=lost) - int col = 0; - if (mdns_class > 1) { - col = 1; - } else if (!mdns_class) { - col = -1; - } else if (service) { // only detect srv collision if service existed - col = _mdns_check_srv_collision(service->service, priority, weight, port, name->host, name->domain); - } - if (service && col && (parsed_packet->probe || parsed_packet->authoritative)) { - if (col > 0 || !port) { - do_not_reply = true; - if (_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running) { - _mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].failed_probes++; - if (!_str_null_or_empty(service->service->instance)) { - char *new_instance = _mdns_mangle_name((char *)service->service->instance); - if (new_instance) { - free((char *)service->service->instance); - service->service->instance = new_instance; - } - _mdns_probe_all_pcbs(&service, 1, false, false); - } else if (!_str_null_or_empty(_mdns_server->instance)) { - char *new_instance = _mdns_mangle_name((char *)_mdns_server->instance); - if (new_instance) { - free((char *)_mdns_server->instance); - _mdns_server->instance = new_instance; - } - _mdns_restart_all_pcbs_no_instance(); - } else { - char *new_host = _mdns_mangle_name((char *)_mdns_server->hostname); - if (new_host) { - _mdns_remap_self_service_hostname(_mdns_server->hostname, new_host); - free((char *)_mdns_server->hostname); - _mdns_server->hostname = new_host; - _mdns_self_host.hostname = new_host; - } - _mdns_restart_all_pcbs(); - } - } else if (service) { - _mdns_pcb_send_bye(packet->tcpip_if, packet->ip_protocol, &service, 1, false); - _mdns_init_pcb_probe(packet->tcpip_if, packet->ip_protocol, &service, 1, false); - } - } - } else if (ttl > 60 && !col && !parsed_packet->authoritative && !parsed_packet->probe && !parsed_packet->questions) { - _mdns_remove_scheduled_answer(packet->tcpip_if, packet->ip_protocol, type, service); - } - } - } else if (type == MDNS_TYPE_TXT) { - if (search_result) { - mdns_txt_item_t *txt = NULL; - uint8_t *txt_value_len = NULL; - size_t txt_count = 0; - - mdns_result_t *result = NULL; - if (search_result->type == MDNS_TYPE_PTR) { - result = search_result->result; - while (result) { - if (_mdns_get_esp_netif(packet->tcpip_if) == result->esp_netif - && packet->ip_protocol == result->ip_protocol - && result->instance_name && !strcmp(name->host, result->instance_name)) { - break; - } - result = result->next; - } - if (!result) { - result = _mdns_search_result_add_ptr(search_result, name->host, name->service, name->proto, - packet->tcpip_if, packet->ip_protocol, ttl); - if (!result) { - continue;//error - } - } - if (!result->txt) { - _mdns_result_txt_create(data_ptr, data_len, &txt, &txt_value_len, &txt_count); - if (txt_count) { - result->txt = txt; - result->txt_count = txt_count; - result->txt_value_len = txt_value_len; - } - } - } else { - _mdns_result_txt_create(data_ptr, data_len, &txt, &txt_value_len, &txt_count); - if (txt_count) { - _mdns_search_result_add_txt(search_result, txt, txt_value_len, txt_count, packet->tcpip_if, packet->ip_protocol, ttl); - } - } - } else if (ours) { - if (parsed_packet->questions && !parsed_packet->probe && service) { - _mdns_remove_parsed_question(parsed_packet, type, service); - continue; - } - if (!_mdns_name_is_selfhosted(name)) { - continue; - } - //detect collision (-1=won, 0=none, 1=lost) - int col = 0; - if (mdns_class > 1) { - col = 1; - } else if (!mdns_class) { - col = -1; - } else if (service) { // only detect txt collision if service existed - col = _mdns_check_txt_collision(service->service, data_ptr, data_len); - } - if (col && !_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running && service) { - do_not_reply = true; - _mdns_init_pcb_probe(packet->tcpip_if, packet->ip_protocol, &service, 1, true); - } else if (ttl > (MDNS_ANSWER_TXT_TTL / 2) && !col && !parsed_packet->authoritative && !parsed_packet->probe && !parsed_packet->questions && !_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running) { - _mdns_remove_scheduled_answer(packet->tcpip_if, packet->ip_protocol, type, service); - } - } - - } -#ifdef CONFIG_LWIP_IPV6 - else if (type == MDNS_TYPE_AAAA) {//ipv6 - esp_ip_addr_t ip6; - ip6.type = ESP_IPADDR_TYPE_V6; - memcpy(ip6.u_addr.ip6.addr, data_ptr, MDNS_ANSWER_AAAA_SIZE); - if (search_result) { - //check for more applicable searches (PTR & A/AAAA at the same time) - while (search_result) { - _mdns_search_result_add_ip(search_result, name->host, &ip6, packet->tcpip_if, packet->ip_protocol, ttl); - search_result = _mdns_search_find_from(search_result->next, name, type, packet->tcpip_if, packet->ip_protocol); - } - } else if (ours) { - if (parsed_packet->questions && !parsed_packet->probe) { - _mdns_remove_parsed_question(parsed_packet, type, NULL); - continue; - } - if (!_mdns_name_is_selfhosted(name)) { - continue; - } - //detect collision (-1=won, 0=none, 1=lost) - int col = 0; - if (mdns_class > 1) { - col = 1; - } else if (!mdns_class) { - col = -1; - } else { - col = _mdns_check_aaaa_collision(&(ip6.u_addr.ip6), packet->tcpip_if); - } - if (col == 2) { - goto clear_rx_packet; - } else if (col == 1) { - do_not_reply = true; - if (_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running) { - if (col && (parsed_packet->probe || parsed_packet->authoritative)) { - _mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].failed_probes++; - char *new_host = _mdns_mangle_name((char *)_mdns_server->hostname); - if (new_host) { - _mdns_remap_self_service_hostname(_mdns_server->hostname, new_host); - free((char *)_mdns_server->hostname); - _mdns_server->hostname = new_host; - _mdns_self_host.hostname = new_host; - } - _mdns_restart_all_pcbs(); - } - } else { - _mdns_init_pcb_probe(packet->tcpip_if, packet->ip_protocol, NULL, 0, true); - } - } else if (ttl > 60 && !col && !parsed_packet->authoritative && !parsed_packet->probe && !parsed_packet->questions && !_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running) { - _mdns_remove_scheduled_answer(packet->tcpip_if, packet->ip_protocol, type, NULL); - } - } - - } -#endif /* CONFIG_LWIP_IPV6 */ -#ifdef CONFIG_LWIP_IPV4 - else if (type == MDNS_TYPE_A) { - esp_ip_addr_t ip; - ip.type = ESP_IPADDR_TYPE_V4; - memcpy(&(ip.u_addr.ip4.addr), data_ptr, 4); - if (search_result) { - //check for more applicable searches (PTR & A/AAAA at the same time) - while (search_result) { - _mdns_search_result_add_ip(search_result, name->host, &ip, packet->tcpip_if, packet->ip_protocol, ttl); - search_result = _mdns_search_find_from(search_result->next, name, type, packet->tcpip_if, packet->ip_protocol); - } - } else if (ours) { - if (parsed_packet->questions && !parsed_packet->probe) { - _mdns_remove_parsed_question(parsed_packet, type, NULL); - continue; - } - if (!_mdns_name_is_selfhosted(name)) { - continue; - } - //detect collision (-1=won, 0=none, 1=lost) - int col = 0; - if (mdns_class > 1) { - col = 1; - } else if (!mdns_class) { - col = -1; - } else { - col = _mdns_check_a_collision(&(ip.u_addr.ip4), packet->tcpip_if); - } - if (col == 2) { - goto clear_rx_packet; - } else if (col == 1) { - do_not_reply = true; - if (_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running) { - if (col && (parsed_packet->probe || parsed_packet->authoritative)) { - _mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].failed_probes++; - char *new_host = _mdns_mangle_name((char *)_mdns_server->hostname); - if (new_host) { - _mdns_remap_self_service_hostname(_mdns_server->hostname, new_host); - free((char *)_mdns_server->hostname); - _mdns_server->hostname = new_host; - _mdns_self_host.hostname = new_host; - } - _mdns_restart_all_pcbs(); - } - } else { - _mdns_init_pcb_probe(packet->tcpip_if, packet->ip_protocol, NULL, 0, true); - } - } else if (ttl > 60 && !col && !parsed_packet->authoritative && !parsed_packet->probe && !parsed_packet->questions && !_mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].probe_running) { - _mdns_remove_scheduled_answer(packet->tcpip_if, packet->ip_protocol, type, NULL); - } - } - - } -#endif /* CONFIG_LWIP_IPV4 */ - } - //end while - if (parsed_packet->authoritative) { - _mdns_search_finish_done(); - } - } - - if (!do_not_reply && _mdns_server->interfaces[packet->tcpip_if].pcbs[packet->ip_protocol].state > PCB_PROBE_3 && (parsed_packet->questions || parsed_packet->discovery)) { - _mdns_create_answer_from_parsed_packet(parsed_packet); - } - - -clear_rx_packet: - while (parsed_packet->questions) { - mdns_parsed_question_t *question = parsed_packet->questions; - parsed_packet->questions = parsed_packet->questions->next; - if (question->host) { - free(question->host); - } - if (question->service) { - free(question->service); - } - if (question->proto) { - free(question->proto); - } - if (question->domain) { - free(question->domain); - } - free(question); - } - free(parsed_packet); -} - -/** - * @brief Enable mDNS interface - */ -void _mdns_enable_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - if (!mdns_is_netif_ready(tcpip_if, ip_protocol)) { - if (_mdns_pcb_init(tcpip_if, ip_protocol)) { - _mdns_server->interfaces[tcpip_if].pcbs[ip_protocol].failed_probes = 0; - return; - } - } - _mdns_restart_pcb(tcpip_if, ip_protocol); -} - -/** - * @brief Disable mDNS interface - */ -void _mdns_disable_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - _mdns_clean_netif_ptr(tcpip_if); - - if (mdns_is_netif_ready(tcpip_if, ip_protocol)) { - _mdns_clear_pcb_tx_queue_head(tcpip_if, ip_protocol); - mdns_pcb_deinit_local(tcpip_if, ip_protocol); - mdns_if_t other_if = _mdns_get_other_if (tcpip_if); - if (other_if != MDNS_MAX_INTERFACES && _mdns_server->interfaces[other_if].pcbs[ip_protocol].state == PCB_DUP) { - _mdns_server->interfaces[other_if].pcbs[ip_protocol].state = PCB_OFF; - _mdns_enable_pcb(other_if, ip_protocol); - } - } - _mdns_server->interfaces[tcpip_if].pcbs[ip_protocol].state = PCB_OFF; -} - -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES -static inline char nibble_to_hex(int var) -{ - return var > 9 ? var - 10 + 'a' : var + '0'; -} -#endif - -/** - * @brief Performs interface changes based on system events or custom commands - */ -static void perform_event_action(mdns_if_t mdns_if, mdns_event_actions_t action) -{ - if (!_mdns_server || mdns_if >= MDNS_MAX_INTERFACES) { - return; - } - if (action & MDNS_EVENT_ENABLE_IP4) { - _mdns_enable_pcb(mdns_if, MDNS_IP_PROTOCOL_V4); - } - if (action & MDNS_EVENT_ENABLE_IP6) { - _mdns_enable_pcb(mdns_if, MDNS_IP_PROTOCOL_V6); - } - if (action & MDNS_EVENT_DISABLE_IP4) { - _mdns_disable_pcb(mdns_if, MDNS_IP_PROTOCOL_V4); - } - if (action & MDNS_EVENT_DISABLE_IP6) { - _mdns_disable_pcb(mdns_if, MDNS_IP_PROTOCOL_V6); - } - if (action & MDNS_EVENT_ANNOUNCE_IP4) { - _mdns_announce_pcb(mdns_if, MDNS_IP_PROTOCOL_V4, NULL, 0, true); - } - if (action & MDNS_EVENT_ANNOUNCE_IP6) { - _mdns_announce_pcb(mdns_if, MDNS_IP_PROTOCOL_V6, NULL, 0, true); - } - -#ifdef CONFIG_MDNS_RESPOND_REVERSE_QUERIES -#ifdef CONFIG_LWIP_IPV4 - if (action & MDNS_EVENT_IP4_REVERSE_LOOKUP) { - esp_netif_ip_info_t if_ip_info; - if (esp_netif_get_ip_info(_mdns_get_esp_netif(mdns_if), &if_ip_info) == ESP_OK) { - esp_ip4_addr_t *ip = &if_ip_info.ip; - char *reverse_query_name = NULL; - if (asprintf(&reverse_query_name, "%d.%d.%d.%d.in-addr", - esp_ip4_addr4_16(ip), esp_ip4_addr3_16(ip), - esp_ip4_addr2_16(ip), esp_ip4_addr1_16(ip)) > 0 && reverse_query_name) { - ESP_LOGD(TAG, "Registered reverse query: %s.arpa", reverse_query_name); - _mdns_delegate_hostname_add(reverse_query_name, NULL); - } - } - } -#endif /* CONFIG_LWIP_IPV4 */ -#ifdef CONFIG_LWIP_IPV6 - if (action & MDNS_EVENT_IP6_REVERSE_LOOKUP) { - esp_ip6_addr_t addr6; - if (!esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(mdns_if), &addr6) && !_ipv6_address_is_zero(addr6)) { - uint8_t *paddr = (uint8_t *)&addr6.addr; - const char sub[] = "ip6"; - const size_t query_name_size = 4 * sizeof(addr6.addr) /* (2 nibbles + 2 dots)/per byte of IP address */ + sizeof(sub); - char *reverse_query_name = malloc(query_name_size); - if (reverse_query_name) { - char *ptr = &reverse_query_name[query_name_size]; // point to the end - memcpy(ptr - sizeof(sub), sub, sizeof(sub)); // copy the IP sub-domain - ptr -= sizeof(sub) + 1; // move before the sub-domain - while (reverse_query_name < ptr) { // continue populating reverse query from the end - *ptr-- = '.'; // nibble by nibble, until we reach the beginning - *ptr-- = nibble_to_hex(((*paddr) >> 4) & 0x0F); - *ptr-- = '.'; - *ptr-- = nibble_to_hex((*paddr) & 0x0F); - paddr++; - } - ESP_LOGD(TAG, "Registered reverse query: %s.arpa", reverse_query_name); - _mdns_delegate_hostname_add(reverse_query_name, NULL); - } - } - } -#endif /* CONFIG_LWIP_IPV6 */ -#endif /* CONFIG_MDNS_RESPOND_REVERSE_QUERIES */ -} - -/** - * @brief Dispatch interface changes based on system events - */ -static inline void post_mdns_disable_pcb(mdns_predef_if_t preset_if, mdns_ip_protocol_t protocol) -{ - mdns_post_custom_action_tcpip_if(mdns_if_from_preset_if(preset_if), protocol == MDNS_IP_PROTOCOL_V4 ? MDNS_EVENT_DISABLE_IP4 : MDNS_EVENT_DISABLE_IP6); -} - -static inline void post_mdns_enable_pcb(mdns_predef_if_t preset_if, mdns_ip_protocol_t protocol) -{ - mdns_post_custom_action_tcpip_if(mdns_if_from_preset_if(preset_if), protocol == MDNS_IP_PROTOCOL_V4 ? MDNS_EVENT_ENABLE_IP4 : MDNS_EVENT_ENABLE_IP6); -} - -static inline void post_mdns_announce_pcb(mdns_predef_if_t preset_if, mdns_ip_protocol_t protocol) -{ - mdns_post_custom_action_tcpip_if(mdns_if_from_preset_if(preset_if), protocol == MDNS_IP_PROTOCOL_V4 ? MDNS_EVENT_ANNOUNCE_IP4 : MDNS_EVENT_ANNOUNCE_IP6); -} - -#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH -void mdns_preset_if_handle_system_event(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) -{ - if (!_mdns_server) { - return; - } - - esp_netif_dhcp_status_t dcst; -#if MDNS_ESP_WIFI_ENABLED - if (event_base == WIFI_EVENT) { - switch (event_id) { - case WIFI_EVENT_STA_CONNECTED: - if (!esp_netif_dhcpc_get_status(esp_netif_from_preset_if(MDNS_IF_STA), &dcst)) { - if (dcst == ESP_NETIF_DHCP_STOPPED) { - post_mdns_enable_pcb(MDNS_IF_STA, MDNS_IP_PROTOCOL_V4); - } - } - break; - case WIFI_EVENT_STA_DISCONNECTED: - post_mdns_disable_pcb(MDNS_IF_STA, MDNS_IP_PROTOCOL_V4); - post_mdns_disable_pcb(MDNS_IF_STA, MDNS_IP_PROTOCOL_V6); - break; - case WIFI_EVENT_AP_START: - post_mdns_enable_pcb(MDNS_IF_AP, MDNS_IP_PROTOCOL_V4); - break; - case WIFI_EVENT_AP_STOP: - post_mdns_disable_pcb(MDNS_IF_AP, MDNS_IP_PROTOCOL_V4); - post_mdns_disable_pcb(MDNS_IF_AP, MDNS_IP_PROTOCOL_V6); - break; - default: - break; - } - } else -#endif -#if CONFIG_ETH_ENABLED && CONFIG_MDNS_PREDEF_NETIF_ETH - if (event_base == ETH_EVENT) { - switch (event_id) { - case ETHERNET_EVENT_CONNECTED: - if (!esp_netif_dhcpc_get_status(esp_netif_from_preset_if(MDNS_IF_ETH), &dcst)) { - if (dcst == ESP_NETIF_DHCP_STOPPED) { - post_mdns_enable_pcb(MDNS_IF_ETH, MDNS_IP_PROTOCOL_V4); - } - } - break; - case ETHERNET_EVENT_DISCONNECTED: - post_mdns_disable_pcb(MDNS_IF_ETH, MDNS_IP_PROTOCOL_V4); - post_mdns_disable_pcb(MDNS_IF_ETH, MDNS_IP_PROTOCOL_V6); - break; - default: - break; - } - } else -#endif - if (event_base == IP_EVENT) { - switch (event_id) { - case IP_EVENT_STA_GOT_IP: - post_mdns_enable_pcb(MDNS_IF_STA, MDNS_IP_PROTOCOL_V4); - post_mdns_announce_pcb(MDNS_IF_STA, MDNS_IP_PROTOCOL_V6); - break; -#if CONFIG_ETH_ENABLED && CONFIG_MDNS_PREDEF_NETIF_ETH - case IP_EVENT_ETH_GOT_IP: - post_mdns_enable_pcb(MDNS_IF_ETH, MDNS_IP_PROTOCOL_V4); - break; -#endif - case IP_EVENT_GOT_IP6: { - ip_event_got_ip6_t *event = (ip_event_got_ip6_t *) event_data; - mdns_if_t mdns_if = _mdns_get_if_from_esp_netif(event->esp_netif); - if (mdns_if < MDNS_MAX_INTERFACES) { - post_mdns_enable_pcb(mdns_if, MDNS_IP_PROTOCOL_V6); - post_mdns_announce_pcb(mdns_if, MDNS_IP_PROTOCOL_V4); - } - - } - break; - default: - break; - } - } -} -#endif /* CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH */ - -/* - * MDNS Search - * */ - -/** - * @brief Free search structure (except the results) - */ -static void _mdns_search_free(mdns_search_once_t *search) -{ - free(search->instance); - free(search->service); - free(search->proto); - vSemaphoreDelete(search->done_semaphore); - free(search); -} - -/** - * @brief Allocate new search structure - */ -static mdns_search_once_t *_mdns_search_init(const char *name, const char *service, const char *proto, uint16_t type, bool unicast, - uint32_t timeout, uint8_t max_results, mdns_query_notify_t notifier) -{ - mdns_search_once_t *search = (mdns_search_once_t *)malloc(sizeof(mdns_search_once_t)); - if (!search) { - HOOK_MALLOC_FAILED; - return NULL; - } - memset(search, 0, sizeof(mdns_search_once_t)); - - search->done_semaphore = xSemaphoreCreateBinary(); - if (!search->done_semaphore) { - free(search); - return NULL; - } - - if (!_str_null_or_empty(name)) { - search->instance = strndup(name, MDNS_NAME_BUF_LEN - 1); - if (!search->instance) { - _mdns_search_free(search); - return NULL; - } - } - - if (!_str_null_or_empty(service)) { - search->service = strndup(service, MDNS_NAME_BUF_LEN - 1); - if (!search->service) { - _mdns_search_free(search); - return NULL; - } - } - - if (!_str_null_or_empty(proto)) { - search->proto = strndup(proto, MDNS_NAME_BUF_LEN - 1); - if (!search->proto) { - _mdns_search_free(search); - return NULL; - } - } - - search->type = type; - search->unicast = unicast; - search->timeout = timeout; - search->num_results = 0; - search->max_results = max_results; - search->result = NULL; - search->state = SEARCH_INIT; - search->sent_at = 0; - search->started_at = xTaskGetTickCount() * portTICK_PERIOD_MS; - search->notifier = notifier; - search->next = NULL; - - return search; -} - -/** - * @brief Mark search as finished and remove it from search chain - */ -static void _mdns_search_finish(mdns_search_once_t *search) -{ - search->state = SEARCH_OFF; - queueDetach(mdns_search_once_t, _mdns_server->search_once, search); - if (search->notifier) { - search->notifier(search); - } - xSemaphoreGive(search->done_semaphore); -} - -/** - * @brief Add new search to the search chain - */ -static void _mdns_search_add(mdns_search_once_t *search) -{ - search->next = _mdns_server->search_once; - _mdns_server->search_once = search; -} - -/** - * @brief Called from parser to finish any searches that have reached maximum results - */ -static void _mdns_search_finish_done(void) -{ - mdns_search_once_t *search = _mdns_server->search_once; - mdns_search_once_t *s = NULL; - while (search) { - s = search; - search = search->next; - if (s->max_results && s->num_results >= s->max_results) { - _mdns_search_finish(s); - } - } -} - -/** - * @brief Create linked IP (copy) from parsed one - */ -static mdns_ip_addr_t *_mdns_result_addr_create_ip(esp_ip_addr_t *ip) -{ - mdns_ip_addr_t *a = (mdns_ip_addr_t *)malloc(sizeof(mdns_ip_addr_t)); - if (!a) { - HOOK_MALLOC_FAILED; - return NULL; - } - memset(a, 0, sizeof(mdns_ip_addr_t)); - a->addr.type = ip->type; - if (ip->type == ESP_IPADDR_TYPE_V6) { - memcpy(a->addr.u_addr.ip6.addr, ip->u_addr.ip6.addr, 16); - } else { - a->addr.u_addr.ip4.addr = ip->u_addr.ip4.addr; - } - return a; -} - -static inline void _mdns_result_update_ttl(mdns_result_t *r, uint32_t ttl) -{ - r->ttl = r->ttl < ttl ? r->ttl : ttl; -} - -/** - * @brief Chain new IP to search result - */ -static void _mdns_result_add_ip(mdns_result_t *r, esp_ip_addr_t *ip) -{ - mdns_ip_addr_t *a = r->addr; - while (a) { - if (a->addr.type == ip->type) { - if (a->addr.type == ESP_IPADDR_TYPE_V4 && a->addr.u_addr.ip4.addr == ip->u_addr.ip4.addr) { - return; - } - if (a->addr.type == ESP_IPADDR_TYPE_V6 && !memcmp(a->addr.u_addr.ip6.addr, ip->u_addr.ip6.addr, 16)) { - return; - } - } - a = a->next; - } - a = _mdns_result_addr_create_ip(ip); - if (!a) { - return; - } - a->next = r->addr; - r->addr = a; -} - -/** - * @brief Called from parser to add A/AAAA data to search result - */ -static void _mdns_search_result_add_ip(mdns_search_once_t *search, const char *hostname, esp_ip_addr_t *ip, - mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint32_t ttl) -{ - mdns_result_t *r = NULL; - mdns_ip_addr_t *a = NULL; - - if ((search->type == MDNS_TYPE_A && ip->type == ESP_IPADDR_TYPE_V4) - || (search->type == MDNS_TYPE_AAAA && ip->type == ESP_IPADDR_TYPE_V6) - || search->type == MDNS_TYPE_ANY) { - r = search->result; - while (r) { - if (r->esp_netif == _mdns_get_esp_netif(tcpip_if) && r->ip_protocol == ip_protocol) { - _mdns_result_add_ip(r, ip); - _mdns_result_update_ttl(r, ttl); - return; - } - r = r->next; - } - if (!search->max_results || search->num_results < search->max_results) { - r = (mdns_result_t *)malloc(sizeof(mdns_result_t)); - if (!r) { - HOOK_MALLOC_FAILED; - return; - } - - memset(r, 0, sizeof(mdns_result_t)); - - a = _mdns_result_addr_create_ip(ip); - if (!a) { - free(r); - return; - } - a->next = r->addr; - r->hostname = strdup(hostname); - r->addr = a; - r->esp_netif = _mdns_get_esp_netif(tcpip_if); - r->ip_protocol = ip_protocol; - r->next = search->result; - r->ttl = ttl; - search->result = r; - search->num_results++; - } - } else if (search->type == MDNS_TYPE_PTR || search->type == MDNS_TYPE_SRV) { - r = search->result; - while (r) { - if (r->esp_netif == _mdns_get_esp_netif(tcpip_if) && r->ip_protocol == ip_protocol && !_str_null_or_empty(r->hostname) && !strcasecmp(hostname, r->hostname)) { - _mdns_result_add_ip(r, ip); - _mdns_result_update_ttl(r, ttl); - break; - } - r = r->next; - } - } -} - -/** - * @brief Called from parser to add PTR data to search result - */ -static mdns_result_t *_mdns_search_result_add_ptr(mdns_search_once_t *search, const char *instance, - const char *service_type, const char *proto, mdns_if_t tcpip_if, - mdns_ip_protocol_t ip_protocol, uint32_t ttl) -{ - mdns_result_t *r = search->result; - while (r) { - if (r->esp_netif == _mdns_get_esp_netif(tcpip_if) && r->ip_protocol == ip_protocol && !_str_null_or_empty(r->instance_name) && !strcasecmp(instance, r->instance_name)) { - _mdns_result_update_ttl(r, ttl); - return r; - } - r = r->next; - } - if (!search->max_results || search->num_results < search->max_results) { - r = (mdns_result_t *)malloc(sizeof(mdns_result_t)); - if (!r) { - HOOK_MALLOC_FAILED; - return NULL; - } - - memset(r, 0, sizeof(mdns_result_t)); - r->instance_name = strdup(instance); - r->service_type = strdup(service_type); - r->proto = strdup(proto); - if (!r->instance_name) { - free(r); - return NULL; - } - - r->esp_netif = _mdns_get_esp_netif(tcpip_if); - r->ip_protocol = ip_protocol; - r->ttl = ttl; - r->next = search->result; - search->result = r; - search->num_results++; - return r; - } - return NULL; -} - -/** - * @brief Called from parser to add SRV data to search result - */ -static void _mdns_search_result_add_srv(mdns_search_once_t *search, const char *hostname, uint16_t port, - mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, uint32_t ttl) -{ - mdns_result_t *r = search->result; - while (r) { - if (r->esp_netif == _mdns_get_esp_netif(tcpip_if) && r->ip_protocol == ip_protocol && !_str_null_or_empty(r->hostname) && !strcasecmp(hostname, r->hostname)) { - _mdns_result_update_ttl(r, ttl); - return; - } - r = r->next; - } - if (!search->max_results || search->num_results < search->max_results) { - r = (mdns_result_t *)malloc(sizeof(mdns_result_t)); - if (!r) { - HOOK_MALLOC_FAILED; - return; - } - - memset(r, 0, sizeof(mdns_result_t)); - r->hostname = strdup(hostname); - if (!r->hostname) { - free(r); - return; - } - if (search->instance) { - r->instance_name = strdup(search->instance); - } - r->service_type = strdup(search->service); - r->proto = strdup(search->proto); - r->port = port; - r->esp_netif = _mdns_get_esp_netif(tcpip_if); - r->ip_protocol = ip_protocol; - r->ttl = ttl; - r->next = search->result; - search->result = r; - search->num_results++; - } -} - -/** - * @brief Called from parser to add TXT data to search result - */ -static void _mdns_search_result_add_txt(mdns_search_once_t *search, mdns_txt_item_t *txt, uint8_t *txt_value_len, - size_t txt_count, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, - uint32_t ttl) -{ - mdns_result_t *r = search->result; - while (r) { - if (r->esp_netif == _mdns_get_esp_netif(tcpip_if) && r->ip_protocol == ip_protocol) { - if (r->txt) { - goto free_txt; - } - r->txt = txt; - r->txt_value_len = txt_value_len; - r->txt_count = txt_count; - _mdns_result_update_ttl(r, ttl); - return; - } - r = r->next; - } - if (!search->max_results || search->num_results < search->max_results) { - r = (mdns_result_t *)malloc(sizeof(mdns_result_t)); - if (!r) { - HOOK_MALLOC_FAILED; - goto free_txt; - } - - memset(r, 0, sizeof(mdns_result_t)); - r->txt = txt; - r->txt_value_len = txt_value_len; - r->txt_count = txt_count; - r->esp_netif = _mdns_get_esp_netif(tcpip_if); - r->ip_protocol = ip_protocol; - r->ttl = ttl; - r->next = search->result; - search->result = r; - search->num_results++; - } - return; - -free_txt: - for (size_t i = 0; i < txt_count; i++) { - free((char *)(txt[i].key)); - free((char *)(txt[i].value)); - } - free(txt); -} - -/** - * @brief Called from packet parser to find matching running search - */ -static mdns_search_once_t *_mdns_search_find_from(mdns_search_once_t *s, mdns_name_t *name, uint16_t type, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_result_t *r = NULL; - while (s) { - if (s->state == SEARCH_OFF) { - s = s->next; - continue; - } - - if (type == MDNS_TYPE_A || type == MDNS_TYPE_AAAA) { - if ((s->type == MDNS_TYPE_ANY && s->service != NULL) - || (s->type != MDNS_TYPE_ANY && s->type != type && s->type != MDNS_TYPE_PTR && s->type != MDNS_TYPE_SRV)) { - s = s->next; - continue; - } - if (s->type != MDNS_TYPE_PTR && s->type != MDNS_TYPE_SRV) { - if (!strcasecmp(name->host, s->instance)) { - return s; - } - s = s->next; - continue; - } - r = s->result; - while (r) { - if (r->esp_netif == _mdns_get_esp_netif(tcpip_if) && r->ip_protocol == ip_protocol && !_str_null_or_empty(r->hostname) && !strcasecmp(name->host, r->hostname)) { - return s; - } - r = r->next; - } - s = s->next; - continue; - } - - if (type == MDNS_TYPE_SRV || type == MDNS_TYPE_TXT) { - if ((s->type == MDNS_TYPE_ANY && s->service == NULL) - || (s->type != MDNS_TYPE_ANY && s->type != type && s->type != MDNS_TYPE_PTR)) { - s = s->next; - continue; - } - if (strcasecmp(name->service, s->service) - || strcasecmp(name->proto, s->proto)) { - s = s->next; - continue; - } - if (s->type != MDNS_TYPE_PTR) { - if (s->instance && strcasecmp(name->host, s->instance) == 0) { - return s; - } - s = s->next; - continue; - } - return s; - } - - if (type == MDNS_TYPE_PTR && type == s->type && !strcasecmp(name->service, s->service) && !strcasecmp(name->proto, s->proto)) { - return s; - } - - s = s->next; - } - - return NULL; -} - -/** - * @brief Create search packet for particular interface - */ -static mdns_tx_packet_t *_mdns_create_search_packet(mdns_search_once_t *search, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_result_t *r = NULL; - mdns_tx_packet_t *packet = _mdns_alloc_packet_default(tcpip_if, ip_protocol); - if (!packet) { - return NULL; - } - - mdns_out_question_t *q = (mdns_out_question_t *)malloc(sizeof(mdns_out_question_t)); - if (!q) { - HOOK_MALLOC_FAILED; - _mdns_free_tx_packet(packet); - return NULL; - } - q->next = NULL; - q->unicast = search->unicast; - q->type = search->type; - q->host = search->instance; - q->service = search->service; - q->proto = search->proto; - q->domain = MDNS_DEFAULT_DOMAIN; - q->own_dynamic_memory = false; - queueToEnd(mdns_out_question_t, packet->questions, q); - - if (search->type == MDNS_TYPE_PTR) { - r = search->result; - while (r) { - //full record on the same interface is available - if (r->esp_netif != _mdns_get_esp_netif(tcpip_if) || r->ip_protocol != ip_protocol || r->instance_name == NULL || r->hostname == NULL || r->addr == NULL) { - r = r->next; - continue; - } - mdns_out_answer_t *a = (mdns_out_answer_t *)malloc(sizeof(mdns_out_answer_t)); - if (!a) { - HOOK_MALLOC_FAILED; - _mdns_free_tx_packet(packet); - return NULL; - } - a->type = MDNS_TYPE_PTR; - a->service = NULL; - a->custom_instance = r->instance_name; - a->custom_service = search->service; - a->custom_proto = search->proto; - a->bye = false; - a->flush = false; - a->next = NULL; - queueToEnd(mdns_out_answer_t, packet->answers, a); - r = r->next; - } - } - - return packet; -} - -/** - * @brief Send search packet to particular interface - */ -static void _mdns_search_send_pcb(mdns_search_once_t *search, mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_tx_packet_t *packet = NULL; - if (mdns_is_netif_ready(tcpip_if, ip_protocol) && _mdns_server->interfaces[tcpip_if].pcbs[ip_protocol].state > PCB_INIT) { - packet = _mdns_create_search_packet(search, tcpip_if, ip_protocol); - if (!packet) { - return; - } - _mdns_dispatch_tx_packet(packet); - _mdns_free_tx_packet(packet); - } -} - -/** - * @brief Send search packet to all available interfaces - */ -static void _mdns_search_send(mdns_search_once_t *search) -{ - mdns_search_once_t *queue = _mdns_server->search_once; - bool found = false; - // looking for this search in active searches - while (queue) { - if (queue == search) { - found = true; - break; - } - queue = queue->next; - } - - if (!found) { - // no longer active -> skip sending this search - return; - } - - uint8_t i, j; - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - for (j = 0; j < MDNS_IP_PROTOCOL_MAX; j++) { - _mdns_search_send_pcb(search, (mdns_if_t)i, (mdns_ip_protocol_t)j); - } - } -} - -static void _mdns_tx_handle_packet(mdns_tx_packet_t *p) -{ - mdns_tx_packet_t *a = NULL; - mdns_out_question_t *q = NULL; - mdns_pcb_t *pcb = &_mdns_server->interfaces[p->tcpip_if].pcbs[p->ip_protocol]; - uint32_t send_after = 1000; - - if (pcb->state == PCB_OFF) { - _mdns_free_tx_packet(p); - return; - } - _mdns_dispatch_tx_packet(p); - - switch (pcb->state) { - case PCB_PROBE_1: - q = p->questions; - while (q) { - q->unicast = false; - q = q->next; - } - //fallthrough - case PCB_PROBE_2: - _mdns_schedule_tx_packet(p, 250); - pcb->state = (mdns_pcb_state_t)((uint8_t)(pcb->state) + 1); - break; - case PCB_PROBE_3: - a = _mdns_create_announce_from_probe(p); - if (!a) { - _mdns_schedule_tx_packet(p, 250); - break; - } - pcb->probe_running = false; - pcb->probe_ip = false; - pcb->probe_services_len = 0; - pcb->failed_probes = 0; - free(pcb->probe_services); - pcb->probe_services = NULL; - _mdns_free_tx_packet(p); - p = a; - send_after = 250; - //fallthrough - case PCB_ANNOUNCE_1: - //fallthrough - case PCB_ANNOUNCE_2: - _mdns_schedule_tx_packet(p, send_after); - pcb->state = (mdns_pcb_state_t)((uint8_t)(pcb->state) + 1); - break; - case PCB_ANNOUNCE_3: - pcb->state = PCB_RUNNING; - _mdns_free_tx_packet(p); - break; - default: - _mdns_free_tx_packet(p); - break; - } -} - -static void _mdns_remap_self_service_hostname(const char *old_hostname, const char *new_hostname) -{ - mdns_srv_item_t *service = _mdns_server->services; - - while (service) { - if (service->service->hostname && - strcmp(service->service->hostname, old_hostname) == 0) { - free((char *)service->service->hostname); - service->service->hostname = strdup(new_hostname); - } - service = service->next; - } -} - -/** - * @brief Free action data - */ -static void _mdns_free_action(mdns_action_t *action) -{ - switch (action->type) { - case ACTION_HOSTNAME_SET: - free(action->data.hostname_set.hostname); - break; - case ACTION_INSTANCE_SET: - free(action->data.instance); - break; - case ACTION_SERVICE_ADD: - _mdns_free_service(action->data.srv_add.service->service); - free(action->data.srv_add.service); - break; - case ACTION_SERVICE_INSTANCE_SET: - free(action->data.srv_instance.instance); - break; - case ACTION_SERVICE_TXT_REPLACE: - _mdns_free_linked_txt(action->data.srv_txt_replace.txt); - break; - case ACTION_SERVICE_TXT_SET: - free(action->data.srv_txt_set.key); - free(action->data.srv_txt_set.value); - break; - case ACTION_SERVICE_TXT_DEL: - free(action->data.srv_txt_del.key); - break; - case ACTION_SERVICE_SUBTYPE_ADD: - free(action->data.srv_subtype_add.subtype); - break; - case ACTION_SEARCH_ADD: - //fallthrough - case ACTION_SEARCH_SEND: - //fallthrough - case ACTION_SEARCH_END: - _mdns_search_free(action->data.search_add.search); - break; - case ACTION_TX_HANDLE: - _mdns_free_tx_packet(action->data.tx_handle.packet); - break; - case ACTION_RX_HANDLE: - _mdns_packet_free(action->data.rx_handle.packet); - break; - case ACTION_DELEGATE_HOSTNAME_SET_ADDR: - case ACTION_DELEGATE_HOSTNAME_ADD: - free((char *)action->data.delegate_hostname.hostname); - free_address_list(action->data.delegate_hostname.address_list); - break; - case ACTION_DELEGATE_HOSTNAME_REMOVE: - free((char *)action->data.delegate_hostname.hostname); - break; - default: - break; - } - free(action); -} - -/** - * @brief Called from service thread to execute given action - */ -static void _mdns_execute_action(mdns_action_t *action) -{ - mdns_srv_item_t *a = NULL; - mdns_service_t *service; - char *key; - char *value; - char *subtype; - mdns_subtype_t *subtype_item; - mdns_txt_linked_item_t *txt, * t; - - switch (action->type) { - case ACTION_SYSTEM_EVENT: - perform_event_action(action->data.sys_event.interface, action->data.sys_event.event_action); - break; - case ACTION_HOSTNAME_SET: - _mdns_send_bye_all_pcbs_no_instance(true); - _mdns_remap_self_service_hostname(_mdns_server->hostname, action->data.hostname_set.hostname); - free((char *)_mdns_server->hostname); - _mdns_server->hostname = action->data.hostname_set.hostname; - _mdns_self_host.hostname = action->data.hostname_set.hostname; - _mdns_restart_all_pcbs(); - xSemaphoreGive(_mdns_server->action_sema); - break; - case ACTION_INSTANCE_SET: - _mdns_send_bye_all_pcbs_no_instance(false); - free((char *)_mdns_server->instance); - _mdns_server->instance = action->data.instance; - _mdns_restart_all_pcbs_no_instance(); - - break; - case ACTION_SERVICE_ADD: - action->data.srv_add.service->next = _mdns_server->services; - _mdns_server->services = action->data.srv_add.service; - _mdns_probe_all_pcbs(&action->data.srv_add.service, 1, false, false); - break; - case ACTION_SERVICE_INSTANCE_SET: - if (action->data.srv_instance.service->service->instance) { - _mdns_send_bye(&action->data.srv_instance.service, 1, false); - free((char *)action->data.srv_instance.service->service->instance); - } - action->data.srv_instance.service->service->instance = action->data.srv_instance.instance; - _mdns_probe_all_pcbs(&action->data.srv_instance.service, 1, false, false); - - break; - case ACTION_SERVICE_PORT_SET: - action->data.srv_port.service->service->port = action->data.srv_port.port; - _mdns_announce_all_pcbs(&action->data.srv_port.service, 1, true); - - break; - case ACTION_SERVICE_TXT_REPLACE: - service = action->data.srv_txt_replace.service->service; - txt = service->txt; - service->txt = NULL; - _mdns_free_linked_txt(txt); - service->txt = action->data.srv_txt_replace.txt; - _mdns_announce_all_pcbs(&action->data.srv_txt_replace.service, 1, false); - - break; - case ACTION_SERVICE_TXT_SET: - service = action->data.srv_txt_set.service->service; - key = action->data.srv_txt_set.key; - value = action->data.srv_txt_set.value; - txt = service->txt; - while (txt) { - if (strcmp(txt->key, key) == 0) { - free((char *)txt->value); - free(key); - txt->value = value; - txt->value_len = action->data.srv_txt_set.value_len; - break; - } - txt = txt->next; - } - if (!txt) { - txt = (mdns_txt_linked_item_t *)malloc(sizeof(mdns_txt_linked_item_t)); - if (!txt) { - HOOK_MALLOC_FAILED; - _mdns_free_action(action); - return; - } - txt->key = key; - txt->value = value; - txt->value_len = action->data.srv_txt_set.value_len; - txt->next = service->txt; - service->txt = txt; - } - - _mdns_announce_all_pcbs(&action->data.srv_txt_set.service, 1, false); - - break; - case ACTION_SERVICE_TXT_DEL: - service = action->data.srv_txt_del.service->service; - key = action->data.srv_txt_del.key; - txt = service->txt; - if (!txt) { - break; - } - if (strcmp(txt->key, key) == 0) { - service->txt = txt->next; - free((char *)txt->key); - free((char *)txt->value); - free(txt); - } else { - while (txt->next) { - if (strcmp(txt->next->key, key) == 0) { - t = txt->next; - txt->next = t->next; - free((char *)t->key); - free((char *)t->value); - free(t); - break; - } else { - txt = txt->next; - } - } - } - free(key); - - _mdns_announce_all_pcbs(&action->data.srv_txt_set.service, 1, false); - - break; - case ACTION_SERVICE_SUBTYPE_ADD: - service = action->data.srv_subtype_add.service->service; - subtype = action->data.srv_subtype_add.subtype; - subtype_item = (mdns_subtype_t *)malloc(sizeof(mdns_subtype_t)); - if (!subtype_item) { - HOOK_MALLOC_FAILED; - _mdns_free_action(action); - return; - } - subtype_item->subtype = subtype; - subtype_item->next = service->subtype; - service->subtype = subtype_item; - break; - case ACTION_SERVICE_DEL: - a = _mdns_server->services; - if (action->data.srv_del.service) { - if (_mdns_server->services == action->data.srv_del.service) { - _mdns_server->services = a->next; - _mdns_send_bye(&a, 1, false); - _mdns_remove_scheduled_service_packets(a->service); - _mdns_free_service(a->service); - free(a); - } else { - while (a->next && a->next != action->data.srv_del.service) { - a = a->next; - } - if (a->next == action->data.srv_del.service) { - mdns_srv_item_t *b = a->next; - a->next = a->next->next; - _mdns_send_bye(&b, 1, false); - _mdns_remove_scheduled_service_packets(b->service); - _mdns_free_service(b->service); - free(b); - } - } - } - - break; - case ACTION_SERVICES_CLEAR: - _mdns_send_final_bye(false); - a = _mdns_server->services; - _mdns_server->services = NULL; - while (a) { - mdns_srv_item_t *s = a; - a = a->next; - _mdns_remove_scheduled_service_packets(s->service); - _mdns_free_service(s->service); - free(s); - } - - break; - case ACTION_SEARCH_ADD: - _mdns_search_add(action->data.search_add.search); - break; - case ACTION_SEARCH_SEND: - _mdns_search_send(action->data.search_add.search); - break; - case ACTION_SEARCH_END: - _mdns_search_finish(action->data.search_add.search); - break; - case ACTION_TX_HANDLE: { - mdns_tx_packet_t *p = _mdns_server->tx_queue_head; - // packet to be handled should be at tx head, but must be consistent with the one pushed to action queue - if (p && p == action->data.tx_handle.packet && p->queued) { - p->queued = false; // clearing, as the packet might be reused (pushed and transmitted again) - _mdns_server->tx_queue_head = p->next; - _mdns_tx_handle_packet(p); - } else { - ESP_LOGD(TAG, "Skipping transmit of an unexpected packet!"); - } - } - break; - case ACTION_RX_HANDLE: - mdns_parse_packet(action->data.rx_handle.packet); - _mdns_packet_free(action->data.rx_handle.packet); - break; - case ACTION_DELEGATE_HOSTNAME_ADD: - if (!_mdns_delegate_hostname_add(action->data.delegate_hostname.hostname, - action->data.delegate_hostname.address_list)) { - free((char *)action->data.delegate_hostname.hostname); - free_address_list(action->data.delegate_hostname.address_list); - } - break; - case ACTION_DELEGATE_HOSTNAME_SET_ADDR: - if (!_mdns_delegate_hostname_set_address(action->data.delegate_hostname.hostname, - action->data.delegate_hostname.address_list)) { - free_address_list(action->data.delegate_hostname.address_list); - } - free((char *)action->data.delegate_hostname.hostname); - break; - case ACTION_DELEGATE_HOSTNAME_REMOVE: - _mdns_delegate_hostname_remove(action->data.delegate_hostname.hostname); - free((char *)action->data.delegate_hostname.hostname); - break; - default: - break; - } - free(action); -} - -/** - * @brief Queue search action - */ -static esp_err_t _mdns_send_search_action(mdns_action_type_t type, mdns_search_once_t *search) -{ - mdns_action_t *action = NULL; - - action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - - action->type = type; - action->data.search_add.search = search; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -/** - * @brief Called from timer task to run mDNS responder - * - * periodically checks first unqueued packet (from tx head). - * if it is scheduled to be transmitted, then pushes the packet to action queue to be handled. - * - */ -static void _mdns_scheduler_run(void) -{ - MDNS_SERVICE_LOCK(); - mdns_tx_packet_t *p = _mdns_server->tx_queue_head; - mdns_action_t *action = NULL; - - // find first unqueued packet - while (p && p->queued) { - p = p->next; - } - if (!p) { - MDNS_SERVICE_UNLOCK(); - return; - } - if ((int32_t)(p->send_at - (xTaskGetTickCount() * portTICK_PERIOD_MS)) < 0) { - action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (action) { - action->type = ACTION_TX_HANDLE; - action->data.tx_handle.packet = p; - p->queued = true; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - p->queued = false; - } - } else { - HOOK_MALLOC_FAILED; - // continue - } - } - MDNS_SERVICE_UNLOCK(); -} - -/** - * @brief Called from timer task to run active searches - */ -static void _mdns_search_run(void) -{ - MDNS_SERVICE_LOCK(); - mdns_search_once_t *s = _mdns_server->search_once; - uint32_t now = xTaskGetTickCount() * portTICK_PERIOD_MS; - if (!s) { - MDNS_SERVICE_UNLOCK(); - return; - } - while (s) { - if (s->state != SEARCH_OFF) { - if (now > (s->started_at + s->timeout)) { - s->state = SEARCH_OFF; - if (_mdns_send_search_action(ACTION_SEARCH_END, s) != ESP_OK) { - s->state = SEARCH_RUNNING; - } - } else if (s->state == SEARCH_INIT || (now - s->sent_at) > 1000) { - s->state = SEARCH_RUNNING; - s->sent_at = now; - if (_mdns_send_search_action(ACTION_SEARCH_SEND, s) != ESP_OK) { - s->sent_at -= 1000; - } - } - } - s = s->next; - } - MDNS_SERVICE_UNLOCK(); -} - -/** - * @brief the main MDNS service task. Packets are received and parsed here - */ -static void _mdns_service_task(void *pvParameters) -{ - mdns_action_t *a = NULL; - for (;;) { - if (_mdns_server && _mdns_server->action_queue) { - if (xQueueReceive(_mdns_server->action_queue, &a, portMAX_DELAY) == pdTRUE) { - if (a && a->type == ACTION_TASK_STOP) { - break; - } - MDNS_SERVICE_LOCK(); - _mdns_execute_action(a); - MDNS_SERVICE_UNLOCK(); - } - } else { - vTaskDelay(500 * portTICK_PERIOD_MS); - } - } - _mdns_service_task_handle = NULL; - vTaskDelete(NULL); -} - -static void _mdns_timer_cb(void *arg) -{ - _mdns_scheduler_run(); - _mdns_search_run(); -} - -static esp_err_t _mdns_start_timer(void) -{ - esp_timer_create_args_t timer_conf = { - .callback = _mdns_timer_cb, - .arg = NULL, - .dispatch_method = ESP_TIMER_TASK, - .name = "mdns_timer" - }; - esp_err_t err = esp_timer_create(&timer_conf, &(_mdns_server->timer_handle)); - if (err) { - return err; - } - return esp_timer_start_periodic(_mdns_server->timer_handle, MDNS_TIMER_PERIOD_US); -} - -static esp_err_t _mdns_stop_timer(void) -{ - esp_err_t err = ESP_OK; - if (_mdns_server->timer_handle) { - err = esp_timer_stop(_mdns_server->timer_handle); - if (err) { - return err; - } - err = esp_timer_delete(_mdns_server->timer_handle); - } - return err; -} - -/** - * @brief Start the service thread if not running - * - * @return - * - ESP_OK on success - * - ESP_FAIL on error - */ -static esp_err_t _mdns_service_task_start(void) -{ - if (!_mdns_service_semaphore) { - _mdns_service_semaphore = xSemaphoreCreateMutex(); - if (!_mdns_service_semaphore) { - return ESP_FAIL; - } - } - MDNS_SERVICE_LOCK(); - if (_mdns_start_timer()) { - MDNS_SERVICE_UNLOCK(); - return ESP_FAIL; - } - if (!_mdns_service_task_handle) { - xTaskCreatePinnedToCore(_mdns_service_task, "mdns", MDNS_SERVICE_STACK_DEPTH, NULL, MDNS_TASK_PRIORITY, - (TaskHandle_t *const)(&_mdns_service_task_handle), MDNS_TASK_AFFINITY); - if (!_mdns_service_task_handle) { - _mdns_stop_timer(); - MDNS_SERVICE_UNLOCK(); - vSemaphoreDelete(_mdns_service_semaphore); - _mdns_service_semaphore = NULL; - return ESP_FAIL; - } - } - MDNS_SERVICE_UNLOCK(); - return ESP_OK; -} - -/** - * @brief Stop the service thread - * - * @return - * - ESP_OK - */ -static esp_err_t _mdns_service_task_stop(void) -{ - _mdns_stop_timer(); - if (_mdns_service_task_handle) { - mdns_action_t action; - mdns_action_t *a = &action; - action.type = ACTION_TASK_STOP; - if (xQueueSend(_mdns_server->action_queue, &a, (TickType_t)0) != pdPASS) { - vTaskDelete(_mdns_service_task_handle); - _mdns_service_task_handle = NULL; - } - while (_mdns_service_task_handle) { - vTaskDelay(10 / portTICK_PERIOD_MS); - } - } - vSemaphoreDelete(_mdns_service_semaphore); - _mdns_service_semaphore = NULL; - return ESP_OK; -} - -static esp_err_t mdns_post_custom_action_tcpip_if(mdns_if_t mdns_if, mdns_event_actions_t event_action) -{ - if (!_mdns_server || mdns_if >= MDNS_MAX_INTERFACES) { - return ESP_ERR_INVALID_STATE; - } - - mdns_action_t *action = (mdns_action_t *)calloc(1, sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SYSTEM_EVENT; - action->data.sys_event.event_action = event_action; - action->data.sys_event.interface = mdns_if; - - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - } - return ESP_OK; -} - -static inline void set_default_duplicated_interfaces(void) -{ - mdns_if_t wifi_sta_if = MDNS_MAX_INTERFACES; - mdns_if_t eth_if = MDNS_MAX_INTERFACES; - for (mdns_if_t i = 0; i < MDNS_MAX_INTERFACES; i++) { - if (s_esp_netifs[i].predefined && s_esp_netifs[i].predef_if == MDNS_IF_STA) { - wifi_sta_if = i; - } - if (s_esp_netifs[i].predefined && s_esp_netifs[i].predef_if == MDNS_IF_ETH) { - eth_if = i; - } - } - if (wifi_sta_if != MDNS_MAX_INTERFACES && eth_if != MDNS_MAX_INTERFACES) { - s_esp_netifs[wifi_sta_if].duplicate = eth_if; - s_esp_netifs[eth_if].duplicate = wifi_sta_if; - } -} - -static inline void unregister_predefined_handlers(void) -{ -#if defined(MDNS_ESP_WIFI_ENABLED) && (CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP) - esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event); -#endif -#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH - esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event); -#endif -#if defined(CONFIG_ETH_ENABLED) && CONFIG_MDNS_PREDEF_NETIF_ETH - esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event); -#endif -} - -/* - * Public Methods - * */ - -esp_err_t mdns_netif_action(esp_netif_t *esp_netif, mdns_event_actions_t event_action) -{ - return mdns_post_custom_action_tcpip_if(_mdns_get_if_from_esp_netif(esp_netif), event_action); -} - -esp_err_t mdns_register_netif(esp_netif_t *esp_netif) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - - esp_err_t err = ESP_ERR_NO_MEM; - MDNS_SERVICE_LOCK(); - for (mdns_if_t i = 0; i < MDNS_MAX_INTERFACES; ++i) { - if (s_esp_netifs[i].netif == esp_netif) { - MDNS_SERVICE_UNLOCK(); - return ESP_ERR_INVALID_STATE; - } - } - - for (mdns_if_t i = 0; i < MDNS_MAX_INTERFACES; ++i) { - if (!s_esp_netifs[i].predefined && s_esp_netifs[i].netif == NULL) { - s_esp_netifs[i].netif = esp_netif; - err = ESP_OK; - break; - } - } - MDNS_SERVICE_UNLOCK(); - return err; -} - -esp_err_t mdns_unregister_netif(esp_netif_t *esp_netif) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - - esp_err_t err = ESP_ERR_NOT_FOUND; - MDNS_SERVICE_LOCK(); - for (mdns_if_t i = 0; i < MDNS_MAX_INTERFACES; ++i) { - if (!s_esp_netifs[i].predefined && s_esp_netifs[i].netif == esp_netif) { - s_esp_netifs[i].netif = NULL; - err = ESP_OK; - break; - } - } - MDNS_SERVICE_UNLOCK(); - return err; -} - - -esp_err_t mdns_init(void) -{ - esp_err_t err = ESP_OK; - - if (_mdns_server) { - return err; - } - - _mdns_server = (mdns_server_t *)malloc(sizeof(mdns_server_t)); - if (!_mdns_server) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - memset((uint8_t *)_mdns_server, 0, sizeof(mdns_server_t)); - // zero-out local copy of netifs to initiate a fresh search by interface key whenever a netif ptr is needed - for (mdns_if_t i = 0; i < MDNS_MAX_INTERFACES; ++i) { - s_esp_netifs[i].netif = NULL; - } - - _mdns_server->action_queue = xQueueCreate(MDNS_ACTION_QUEUE_LEN, sizeof(mdns_action_t *)); - if (!_mdns_server->action_queue) { - err = ESP_ERR_NO_MEM; - goto free_server; - } - - _mdns_server->action_sema = xSemaphoreCreateBinary(); - if (!_mdns_server->action_sema) { - err = ESP_ERR_NO_MEM; - goto free_queue; - } - -#if defined(MDNS_ESP_WIFI_ENABLED) && (CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP) - if ((err = esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event, NULL)) != ESP_OK) { - goto free_event_handlers; - } -#endif -#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH - if ((err = esp_event_handler_register(IP_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event, NULL)) != ESP_OK) { - goto free_event_handlers; - } -#endif -#if defined(CONFIG_ETH_ENABLED) && CONFIG_MDNS_PREDEF_NETIF_ETH - if ((err = esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event, NULL)) != ESP_OK) { - goto free_event_handlers; - } -#endif - -#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH - set_default_duplicated_interfaces(); -#endif - - uint8_t i; -#ifdef CONFIG_LWIP_IPV6 - esp_ip6_addr_t tmp_addr6; -#endif -#ifdef CONFIG_LWIP_IPV4 - esp_netif_ip_info_t if_ip_info; -#endif - - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { -#ifdef CONFIG_LWIP_IPV6 - if (!esp_netif_get_ip6_linklocal(_mdns_get_esp_netif(i), &tmp_addr6) && !_ipv6_address_is_zero(tmp_addr6)) { - _mdns_enable_pcb(i, MDNS_IP_PROTOCOL_V6); - } -#endif -#ifdef CONFIG_LWIP_IPV4 - if (!esp_netif_get_ip_info(_mdns_get_esp_netif(i), &if_ip_info) && if_ip_info.ip.addr) { - _mdns_enable_pcb(i, MDNS_IP_PROTOCOL_V4); - } -#endif - } - if (_mdns_service_task_start()) { - //service start failed! - err = ESP_FAIL; - goto free_all_and_disable_pcbs; - } - - return ESP_OK; - -free_all_and_disable_pcbs: - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - _mdns_disable_pcb(i, MDNS_IP_PROTOCOL_V6); - _mdns_disable_pcb(i, MDNS_IP_PROTOCOL_V4); - s_esp_netifs[i].duplicate = MDNS_MAX_INTERFACES; - } -#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP || CONFIG_MDNS_PREDEF_NETIF_ETH -free_event_handlers: - unregister_predefined_handlers(); -#endif - vSemaphoreDelete(_mdns_server->action_sema); -free_queue: - vQueueDelete(_mdns_server->action_queue); -free_server: - free(_mdns_server); - _mdns_server = NULL; - return err; -} - -void mdns_free(void) -{ - uint8_t i, j; - if (!_mdns_server) { - return; - } - - // Unregister handlers before destroying the mdns internals to avoid receiving async events while deinit - unregister_predefined_handlers(); - - mdns_service_remove_all(); - free_delegated_hostnames(); - _mdns_service_task_stop(); - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - for (j = 0; j < MDNS_IP_PROTOCOL_MAX; j++) { - mdns_pcb_deinit_local(i, j); - } - } - free((char *)_mdns_server->hostname); - free((char *)_mdns_server->instance); - if (_mdns_server->action_queue) { - mdns_action_t *c; - while (xQueueReceive(_mdns_server->action_queue, &c, 0) == pdTRUE) { - _mdns_free_action(c); - } - vQueueDelete(_mdns_server->action_queue); - } - _mdns_clear_tx_queue_head(); - while (_mdns_server->search_once) { - mdns_search_once_t *h = _mdns_server->search_once; - _mdns_server->search_once = h->next; - free(h->instance); - free(h->service); - free(h->proto); - vSemaphoreDelete(h->done_semaphore); - if (h->result) { - mdns_query_results_free(h->result); - } - free(h); - } - vSemaphoreDelete(_mdns_server->action_sema); - free(_mdns_server); - _mdns_server = NULL; -} - -esp_err_t mdns_hostname_set(const char *hostname) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_ARG; - } - if (_str_null_or_empty(hostname) || strlen(hostname) > (MDNS_NAME_BUF_LEN - 1)) { - return ESP_ERR_INVALID_ARG; - } - char *new_hostname = strndup(hostname, MDNS_NAME_BUF_LEN - 1); - if (!new_hostname) { - return ESP_ERR_NO_MEM; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - free(new_hostname); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_HOSTNAME_SET; - action->data.hostname_set.hostname = new_hostname; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(new_hostname); - free(action); - return ESP_ERR_NO_MEM; - } - xSemaphoreTake(_mdns_server->action_sema, portMAX_DELAY); - return ESP_OK; -} - -esp_err_t mdns_hostname_get(char *hostname) -{ - if (!hostname) { - return ESP_ERR_INVALID_ARG; - } - - if (!_mdns_server || !_mdns_server->hostname) { - return ESP_ERR_INVALID_STATE; - } - - MDNS_SERVICE_LOCK(); - size_t len = strnlen(_mdns_server->hostname, MDNS_NAME_BUF_LEN - 1); - strncpy(hostname, _mdns_server->hostname, len); - hostname[len] = 0; - MDNS_SERVICE_UNLOCK(); - return ESP_OK; -} - -esp_err_t mdns_delegate_hostname_add(const char *hostname, const mdns_ip_addr_t *address_list) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - if (_str_null_or_empty(hostname) || strlen(hostname) > (MDNS_NAME_BUF_LEN - 1)) { - return ESP_ERR_INVALID_ARG; - } - char *new_hostname = strndup(hostname, MDNS_NAME_BUF_LEN - 1); - if (!new_hostname) { - return ESP_ERR_NO_MEM; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - free(new_hostname); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_DELEGATE_HOSTNAME_ADD; - action->data.delegate_hostname.hostname = new_hostname; - action->data.delegate_hostname.address_list = copy_address_list(address_list); - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(new_hostname); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_delegate_hostname_remove(const char *hostname) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - if (_str_null_or_empty(hostname) || strlen(hostname) > (MDNS_NAME_BUF_LEN - 1)) { - return ESP_ERR_INVALID_ARG; - } - char *new_hostname = strndup(hostname, MDNS_NAME_BUF_LEN - 1); - if (!new_hostname) { - return ESP_ERR_NO_MEM; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - free(new_hostname); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_DELEGATE_HOSTNAME_REMOVE; - action->data.delegate_hostname.hostname = new_hostname; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(new_hostname); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_delegate_hostname_set_address(const char *hostname, const mdns_ip_addr_t *address_list) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - if (_str_null_or_empty(hostname) || strlen(hostname) > (MDNS_NAME_BUF_LEN - 1)) { - return ESP_ERR_INVALID_ARG; - } - char *new_hostname = strndup(hostname, MDNS_NAME_BUF_LEN - 1); - if (!new_hostname) { - return ESP_ERR_NO_MEM; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - free(new_hostname); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_DELEGATE_HOSTNAME_SET_ADDR; - action->data.delegate_hostname.hostname = new_hostname; - action->data.delegate_hostname.address_list = copy_address_list(address_list); - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(new_hostname); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -bool mdns_hostname_exists(const char *hostname) -{ - return _hostname_is_ours(hostname); -} - -esp_err_t mdns_instance_name_set(const char *instance) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - if (_str_null_or_empty(instance) || _mdns_server->hostname == NULL || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) { - return ESP_ERR_INVALID_ARG; - } - char *new_instance = strndup(instance, MDNS_NAME_BUF_LEN - 1); - if (!new_instance) { - return ESP_ERR_NO_MEM; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - free(new_instance); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_INSTANCE_SET; - action->data.instance = new_instance; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(new_instance); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -/* - * MDNS SERVICES - * */ - -esp_err_t mdns_service_add_for_host(const char *instance, const char *service, const char *proto, const char *hostname, - uint16_t port, mdns_txt_item_t txt[], size_t num_items) -{ - if (!_mdns_server || _str_null_or_empty(service) || _str_null_or_empty(proto) || !port || !hostname) { - return ESP_ERR_INVALID_ARG; - } - - if (!_mdns_can_add_more_services()) { - return ESP_ERR_NO_MEM; - } - - mdns_srv_item_t *item = _mdns_get_service_item_instance(instance, service, proto, hostname); - if (item) { - return ESP_ERR_INVALID_ARG; - } - - mdns_service_t *s = _mdns_create_service(service, proto, hostname, port, instance, num_items, txt); - if (!s) { - return ESP_ERR_NO_MEM; - } - - item = (mdns_srv_item_t *)malloc(sizeof(mdns_srv_item_t)); - if (!item) { - HOOK_MALLOC_FAILED; - _mdns_free_service(s); - return ESP_ERR_NO_MEM; - } - - item->service = s; - item->next = NULL; - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - _mdns_free_service(s); - free(item); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SERVICE_ADD; - action->data.srv_add.service = item; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - _mdns_free_service(s); - free(item); - free(action); - return ESP_ERR_NO_MEM; - } - - size_t start = xTaskGetTickCount(); - size_t timeout_ticks = pdMS_TO_TICKS(MDNS_SERVICE_ADD_TIMEOUT_MS); - while (_mdns_get_service_item_instance(instance, service, proto, hostname) == NULL) { - uint32_t expired = xTaskGetTickCount() - start; - if (expired >= timeout_ticks) { - return ESP_FAIL; // Timeout - } - vTaskDelay(MIN(10 / portTICK_PERIOD_MS, timeout_ticks - expired)); - } - - return ESP_OK; -} - -esp_err_t mdns_service_add(const char *instance, const char *service, const char *proto, uint16_t port, - mdns_txt_item_t txt[], size_t num_items) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_add_for_host(instance, service, proto, _mdns_server->hostname, port, txt, num_items); -} - -bool mdns_service_exists(const char *service_type, const char *proto, const char *hostname) -{ - return _mdns_get_service_item(service_type, proto, hostname) != NULL; -} - -bool mdns_service_exists_with_instance(const char *instance, const char *service_type, const char *proto, - const char *hostname) -{ - return _mdns_get_service_item_instance(instance, service_type, proto, hostname) != NULL; -} - -static mdns_txt_item_t *_copy_mdns_txt_items(mdns_txt_linked_item_t *items, uint8_t **txt_value_len, size_t *txt_count) -{ - mdns_txt_item_t *ret = NULL; - size_t ret_index = 0; - for (mdns_txt_linked_item_t *tmp = items; tmp != NULL; tmp = tmp->next) { - ret_index++; - } - *txt_count = ret_index; - ret = (mdns_txt_item_t *)calloc(ret_index, sizeof(mdns_txt_item_t)); - *txt_value_len = (uint8_t *)calloc(ret_index, sizeof(uint8_t)); - if (!ret || !(*txt_value_len)) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - ret_index = 0; - for (mdns_txt_linked_item_t *tmp = items; tmp != NULL; tmp = tmp->next) { - size_t key_len = strlen(tmp->key); - char *key = (char *)malloc(key_len + 1); - if (!key) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - memcpy(key, tmp->key, key_len); - key[key_len] = 0; - ret[ret_index].key = key; - char *value = (char *)malloc(tmp->value_len + 1); - if (!value) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - memcpy(value, tmp->value, tmp->value_len); - value[tmp->value_len] = 0; - ret[ret_index].value = value; - (*txt_value_len)[ret_index] = tmp->value_len; - ret_index++; - } - return ret; - -handle_error: - for (size_t y = 0; y < ret_index + 1 && ret != NULL; y++) { - mdns_txt_item_t *t = &ret[y]; - free((char *)t->key); - free((char *)t->value); - } - free(*txt_value_len); - free(ret); - return NULL; -} - -static mdns_ip_addr_t *_copy_delegated_host_address_list(char *hostname) -{ - mdns_host_item_t *host = _mdns_host_list; - while (host) { - if (strcasecmp(host->hostname, hostname) == 0) { - return copy_address_list(host->address_list); - } - host = host->next; - } - return NULL; -} - -static mdns_result_t *_mdns_lookup_service(const char *instance, const char *service, const char *proto, size_t max_results, bool selfhost) -{ - if (_str_null_or_empty(service) || _str_null_or_empty(proto)) { - return NULL; - } - mdns_result_t *results = NULL; - size_t num_results = 0; - mdns_srv_item_t *s = _mdns_server->services; - while (s) { - mdns_service_t *srv = s->service; - if (!srv || !srv->hostname) { - s = s->next; - continue; - } - bool is_service_selfhosted = !_str_null_or_empty(_mdns_server->hostname) && !strcasecmp(_mdns_server->hostname, srv->hostname); - bool is_service_delegated = _str_null_or_empty(_mdns_server->hostname) || strcasecmp(_mdns_server->hostname, srv->hostname); - if ((selfhost && is_service_selfhosted) || (!selfhost && is_service_delegated)) { - if (!strcasecmp(srv->service, service) && !strcasecmp(srv->proto, proto) && - (_str_null_or_empty(instance) || _mdns_instance_name_match(srv->instance, instance))) { - mdns_result_t *item = (mdns_result_t *)malloc(sizeof(mdns_result_t)); - if (!item) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - item->next = results; - results = item; - item->esp_netif = NULL; - item->ttl = _str_null_or_empty(instance) ? MDNS_ANSWER_PTR_TTL : MDNS_ANSWER_SRV_TTL; - item->ip_protocol = MDNS_IP_PROTOCOL_MAX; - if (srv->instance) { - item->instance_name = strndup(srv->instance, MDNS_NAME_BUF_LEN - 1); - if (!item->instance_name) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - } else { - item->instance_name = NULL; - } - item->service_type = strndup(srv->service, MDNS_NAME_BUF_LEN - 1); - if (!item->service_type) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - item->proto = strndup(srv->proto, MDNS_NAME_BUF_LEN - 1); - if (!item->proto) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - item->hostname = strndup(srv->hostname, MDNS_NAME_BUF_LEN - 1); - if (!item->hostname) { - HOOK_MALLOC_FAILED; - goto handle_error; - } - item->port = srv->port; - item->txt = _copy_mdns_txt_items(srv->txt, &(item->txt_value_len), &(item->txt_count)); - // We should not append addresses for selfhost lookup result as we don't know which interface's address to append. - if (selfhost) { - item->addr = NULL; - } else { - item->addr = _copy_delegated_host_address_list(item->hostname); - if (!item->addr) { - goto handle_error; - } - } - if (num_results < max_results) { - num_results++; - } - if (num_results >= max_results) { - break; - } - } - } - s = s->next; - } - return results; -handle_error: - mdns_query_results_free(results); - return NULL; -} - -esp_err_t mdns_service_port_set_for_host(const char *instance, const char *service, const char *proto, const char *hostname, uint16_t port) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || !port) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SERVICE_PORT_SET; - action->data.srv_port.service = s; - action->data.srv_port.port = port; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_port_set(const char *service, const char *proto, uint16_t port) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_port_set_for_host(NULL, service, proto, _mdns_server->hostname, port); -} - -esp_err_t mdns_service_txt_set_for_host(const char *instance, const char *service, const char *proto, const char *hostname, - mdns_txt_item_t txt[], uint8_t num_items) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || (num_items && txt == NULL)) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - - mdns_txt_linked_item_t *new_txt = NULL; - if (num_items) { - new_txt = _mdns_allocate_txt(num_items, txt); - if (!new_txt) { - return ESP_ERR_NO_MEM; - } - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - _mdns_free_linked_txt(new_txt); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SERVICE_TXT_REPLACE; - action->data.srv_txt_replace.service = s; - action->data.srv_txt_replace.txt = new_txt; - - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - _mdns_free_linked_txt(new_txt); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_txt_set(const char *service, const char *proto, mdns_txt_item_t txt[], uint8_t num_items) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_txt_set_for_host(NULL, service, proto, _mdns_server->hostname, txt, num_items); -} - -esp_err_t mdns_service_txt_item_set_for_host_with_explicit_value_len(const char *instance, const char *service, const char *proto, - const char *hostname, const char *key, - const char *value, uint8_t value_len) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || - _str_null_or_empty(key) || (!value && value_len)) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - - action->type = ACTION_SERVICE_TXT_SET; - action->data.srv_txt_set.service = s; - action->data.srv_txt_set.key = strdup(key); - if (!action->data.srv_txt_set.key) { - free(action); - return ESP_ERR_NO_MEM; - } - if (value_len > 0) { - action->data.srv_txt_set.value = (char *)malloc(value_len); - if (!action->data.srv_txt_set.value) { - free(action->data.srv_txt_set.key); - free(action); - return ESP_ERR_NO_MEM; - } - memcpy(action->data.srv_txt_set.value, value, value_len); - action->data.srv_txt_set.value_len = value_len; - } else { - action->data.srv_txt_set.value = NULL; - action->data.srv_txt_set.value_len = 0; - } - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action->data.srv_txt_set.key); - free(action->data.srv_txt_set.value); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_txt_item_set_for_host(const char *instance, const char *service, const char *proto, const char *hostname, - const char *key, const char *value) -{ - return mdns_service_txt_item_set_for_host_with_explicit_value_len(instance, service, proto, hostname, key, value, - strlen(value)); -} - - -esp_err_t mdns_service_txt_item_set(const char *service, const char *proto, const char *key, const char *value) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_txt_item_set_for_host_with_explicit_value_len(NULL, service, proto, _mdns_server->hostname, key, - value, strlen(value)); -} - -esp_err_t mdns_service_txt_item_set_with_explicit_value_len(const char *service, const char *proto, const char *key, - const char *value, uint8_t value_len) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_txt_item_set_for_host_with_explicit_value_len(NULL, service, proto, _mdns_server->hostname, key, - value, value_len); -} - -esp_err_t mdns_service_txt_item_remove_for_host(const char *instance, const char *service, const char *proto, const char *hostname, - const char *key) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || _str_null_or_empty(key)) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - - action->type = ACTION_SERVICE_TXT_DEL; - action->data.srv_txt_del.service = s; - action->data.srv_txt_del.key = strdup(key); - if (!action->data.srv_txt_del.key) { - free(action); - return ESP_ERR_NO_MEM; - } - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action->data.srv_txt_del.key); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_txt_item_remove(const char *service, const char *proto, const char *key) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_txt_item_remove_for_host(NULL, service, proto, _mdns_server->hostname, key); -} - -esp_err_t mdns_service_subtype_add_for_host(const char *instance_name, const char *service, const char *proto, - const char *hostname, const char *subtype) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto) || - _str_null_or_empty(subtype)) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance_name, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - - action->type = ACTION_SERVICE_SUBTYPE_ADD; - action->data.srv_subtype_add.service = s; - action->data.srv_subtype_add.subtype = strdup(subtype); - - if (!action->data.srv_subtype_add.subtype) { - free(action); - return ESP_ERR_NO_MEM; - } - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action->data.srv_subtype_add.subtype); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_instance_name_set_for_host(const char *instance_old, const char *service, const char *proto, const char *hostname, - const char *instance) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - if (_str_null_or_empty(instance) || strlen(instance) > (MDNS_NAME_BUF_LEN - 1)) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance_old, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - char *new_instance = strndup(instance, MDNS_NAME_BUF_LEN - 1); - if (!new_instance) { - return ESP_ERR_NO_MEM; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - free(new_instance); - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SERVICE_INSTANCE_SET; - action->data.srv_instance.service = s; - action->data.srv_instance.instance = new_instance; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(new_instance); - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_instance_name_set(const char *service, const char *proto, const char *instance) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_instance_name_set_for_host(NULL, service, proto, _mdns_server->hostname, instance); -} - -esp_err_t mdns_service_remove_for_host(const char *instance, const char *service, const char *proto, const char *hostname) -{ - if (!_mdns_server || !_mdns_server->services || _str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - mdns_srv_item_t *s = _mdns_get_service_item_instance(instance, service, proto, hostname); - if (!s) { - return ESP_ERR_NOT_FOUND; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SERVICE_DEL; - action->data.srv_del.service = s; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -esp_err_t mdns_service_remove(const char *service_type, const char *proto) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - return mdns_service_remove_for_host(NULL, service_type, proto, _mdns_server->hostname); -} - -esp_err_t mdns_service_remove_all(void) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_ARG; - } - if (!_mdns_server->services) { - return ESP_OK; - } - - mdns_action_t *action = (mdns_action_t *)malloc(sizeof(mdns_action_t)); - if (!action) { - HOOK_MALLOC_FAILED; - return ESP_ERR_NO_MEM; - } - action->type = ACTION_SERVICES_CLEAR; - if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) { - free(action); - return ESP_ERR_NO_MEM; - } - return ESP_OK; -} - -/* - * MDNS QUERY - * */ - -void mdns_query_results_free(mdns_result_t *results) -{ - mdns_result_t *r; - mdns_ip_addr_t *a; - - while (results) { - r = results; - - free((char *)(r->hostname)); - free((char *)(r->instance_name)); - free((char *)(r->service_type)); - free((char *)(r->proto)); - - for (size_t i = 0; i < r->txt_count; i++) { - free((char *)(r->txt[i].key)); - free((char *)(r->txt[i].value)); - } - free(r->txt); - free(r->txt_value_len); - - while (r->addr) { - a = r->addr; - r->addr = r->addr->next; - free(a); - } - - results = results->next; - free(r); - } -} - -esp_err_t mdns_query_async_delete(mdns_search_once_t *search) -{ - if (!search) { - return ESP_ERR_INVALID_ARG; - } - if (search->state != SEARCH_OFF) { - return ESP_ERR_INVALID_STATE; - } - - MDNS_SERVICE_LOCK(); - _mdns_search_free(search); - MDNS_SERVICE_UNLOCK(); - - return ESP_OK; -} - -bool mdns_query_async_get_results(mdns_search_once_t *search, uint32_t timeout, mdns_result_t **results, uint8_t *num_results) -{ - if (xSemaphoreTake(search->done_semaphore, pdMS_TO_TICKS(timeout)) == pdTRUE) { - if (results) { - *results = search->result; - } - if (num_results) { - *num_results = search->num_results; - } - return true; - } - return false; -} - -mdns_search_once_t *mdns_query_async_new(const char *name, const char *service, const char *proto, uint16_t type, - uint32_t timeout, size_t max_results, mdns_query_notify_t notifier) -{ - mdns_search_once_t *search = NULL; - - if (!_mdns_server || !timeout || _str_null_or_empty(service) != _str_null_or_empty(proto)) { - return NULL; - } - - search = _mdns_search_init(name, service, proto, type, type != MDNS_TYPE_PTR, timeout, max_results, notifier); - if (!search) { - return NULL; - } - - if (_mdns_send_search_action(ACTION_SEARCH_ADD, search)) { - _mdns_search_free(search); - return NULL; - } - - return search; -} - -esp_err_t mdns_query_generic(const char *name, const char *service, const char *proto, uint16_t type, mdns_query_transmission_type_t transmission_type, uint32_t timeout, size_t max_results, mdns_result_t **results) -{ - mdns_search_once_t *search = NULL; - - *results = NULL; - - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - - if (!timeout || _str_null_or_empty(service) != _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - - search = _mdns_search_init(name, service, proto, type, transmission_type == MDNS_QUERY_UNICAST, timeout, max_results, NULL); - if (!search) { - return ESP_ERR_NO_MEM; - } - - if (_mdns_send_search_action(ACTION_SEARCH_ADD, search)) { - _mdns_search_free(search); - return ESP_ERR_NO_MEM; - } - xSemaphoreTake(search->done_semaphore, portMAX_DELAY); - - *results = search->result; - _mdns_search_free(search); - - return ESP_OK; -} - -esp_err_t mdns_query(const char *name, const char *service_type, const char *proto, uint16_t type, uint32_t timeout, size_t max_results, mdns_result_t **results) -{ - return mdns_query_generic(name, service_type, proto, type, type != MDNS_TYPE_PTR, timeout, max_results, results); -} - -esp_err_t mdns_query_ptr(const char *service, const char *proto, uint32_t timeout, size_t max_results, mdns_result_t **results) -{ - if (_str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - - return mdns_query(NULL, service, proto, MDNS_TYPE_PTR, timeout, max_results, results); -} - -esp_err_t mdns_query_srv(const char *instance, const char *service, const char *proto, uint32_t timeout, mdns_result_t **result) -{ - if (_str_null_or_empty(instance) || _str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - - return mdns_query(instance, service, proto, MDNS_TYPE_SRV, timeout, 1, result); -} - -esp_err_t mdns_query_txt(const char *instance, const char *service, const char *proto, uint32_t timeout, mdns_result_t **result) -{ - if (_str_null_or_empty(instance) || _str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - - return mdns_query(instance, service, proto, MDNS_TYPE_TXT, timeout, 1, result); -} - -esp_err_t mdns_lookup_delegated_service(const char *instance, const char *service, const char *proto, size_t max_results, - mdns_result_t **result) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - if (!result || _str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - MDNS_SERVICE_LOCK(); - *result = _mdns_lookup_service(instance, service, proto, max_results, false); - MDNS_SERVICE_UNLOCK(); - return ESP_OK; -} - -esp_err_t mdns_lookup_selfhosted_service(const char *instance, const char *service, const char *proto, size_t max_results, - mdns_result_t **result) -{ - if (!_mdns_server) { - return ESP_ERR_INVALID_STATE; - } - if (!result || _str_null_or_empty(service) || _str_null_or_empty(proto)) { - return ESP_ERR_INVALID_ARG; - } - MDNS_SERVICE_LOCK(); - *result = _mdns_lookup_service(instance, service, proto, max_results, true); - MDNS_SERVICE_UNLOCK(); - return ESP_OK; -} - -#ifdef CONFIG_LWIP_IPV4 -esp_err_t mdns_query_a(const char *name, uint32_t timeout, esp_ip4_addr_t *addr) -{ - mdns_result_t *result = NULL; - esp_err_t err; - - if (_str_null_or_empty(name)) { - return ESP_ERR_INVALID_ARG; - } - - if (strstr(name, ".local")) { - ESP_LOGW(TAG, "Please note that hostname must not contain domain name, as mDNS uses '.local' domain"); - } - - err = mdns_query(name, NULL, NULL, MDNS_TYPE_A, timeout, 1, &result); - - if (err) { - return err; - } - - if (!result) { - return ESP_ERR_NOT_FOUND; - } - - mdns_ip_addr_t *a = result->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V4) { - addr->addr = a->addr.u_addr.ip4.addr; - mdns_query_results_free(result); - return ESP_OK; - } - a = a->next; - } - - mdns_query_results_free(result); - return ESP_ERR_NOT_FOUND; -} -#endif /* CONFIG_LWIP_IPV4 */ - -#ifdef CONFIG_LWIP_IPV6 -esp_err_t mdns_query_aaaa(const char *name, uint32_t timeout, esp_ip6_addr_t *addr) -{ - mdns_result_t *result = NULL; - esp_err_t err; - - if (_str_null_or_empty(name)) { - return ESP_ERR_INVALID_ARG; - } - - if (strstr(name, ".local")) { - ESP_LOGW(TAG, "Please note that hostname must not contain domain name, as mDNS uses '.local' domain"); - } - - err = mdns_query(name, NULL, NULL, MDNS_TYPE_AAAA, timeout, 1, &result); - - if (err) { - return err; - } - - if (!result) { - return ESP_ERR_NOT_FOUND; - } - - mdns_ip_addr_t *a = result->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V6) { - memcpy(addr->addr, a->addr.u_addr.ip6.addr, 16); - mdns_query_results_free(result); - return ESP_OK; - } - a = a->next; - } - - mdns_query_results_free(result); - return ESP_ERR_NOT_FOUND; -} -#endif /* CONFIG_LWIP_IPV6 */ - -#ifdef MDNS_ENABLE_DEBUG - -void mdns_debug_packet(const uint8_t *data, size_t len) -{ - static mdns_name_t n; - mdns_header_t header; - const uint8_t *content = data + MDNS_HEAD_LEN; - uint32_t t = xTaskGetTickCount() * portTICK_PERIOD_MS; - mdns_name_t *name = &n; - memset(name, 0, sizeof(mdns_name_t)); - - _mdns_dbg_printf("Packet[%" PRIu32 "]: ", t); - - header.id = _mdns_read_u16(data, MDNS_HEAD_ID_OFFSET); - header.flags = _mdns_read_u16(data, MDNS_HEAD_FLAGS_OFFSET); - header.questions = _mdns_read_u16(data, MDNS_HEAD_QUESTIONS_OFFSET); - header.answers = _mdns_read_u16(data, MDNS_HEAD_ANSWERS_OFFSET); - header.servers = _mdns_read_u16(data, MDNS_HEAD_SERVERS_OFFSET); - header.additional = _mdns_read_u16(data, MDNS_HEAD_ADDITIONAL_OFFSET); - - _mdns_dbg_printf("%s", - (header.flags == MDNS_FLAGS_QR_AUTHORITATIVE) ? "AUTHORITATIVE\n" : - (header.flags == MDNS_FLAGS_DISTRIBUTED) ? "DISTRIBUTED\n" : - (header.flags == 0) ? "\n" : " " - ); - if (header.flags && header.flags != MDNS_FLAGS_QR_AUTHORITATIVE) { - _mdns_dbg_printf("0x%04X\n", header.flags); - } - - if (header.questions) { - uint8_t qs = header.questions; - - while (qs--) { - content = _mdns_parse_fqdn(data, content, name, len); - if (!content || content + MDNS_CLASS_OFFSET + 1 >= data + len) { - header.answers = 0; - header.additional = 0; - header.servers = 0; - _mdns_dbg_printf("ERROR: parse header questions\n"); - break; - } - - uint16_t type = _mdns_read_u16(content, MDNS_TYPE_OFFSET); - uint16_t mdns_class = _mdns_read_u16(content, MDNS_CLASS_OFFSET); - bool unicast = !!(mdns_class & 0x8000); - mdns_class &= 0x7FFF; - content = content + 4; - - _mdns_dbg_printf(" Q: "); - if (unicast) { - _mdns_dbg_printf("*U* "); - } - if (type == MDNS_TYPE_PTR) { - _mdns_dbg_printf("%s.%s%s.%s.%s. PTR ", name->host, name->sub ? "_sub." : "", name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_SRV) { - _mdns_dbg_printf("%s.%s%s.%s.%s. SRV ", name->host, name->sub ? "_sub." : "", name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_TXT) { - _mdns_dbg_printf("%s.%s%s.%s.%s. TXT ", name->host, name->sub ? "_sub." : "", name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_A) { - _mdns_dbg_printf("%s.%s. A ", name->host, name->domain); - } else if (type == MDNS_TYPE_AAAA) { - _mdns_dbg_printf("%s.%s. AAAA ", name->host, name->domain); - } else if (type == MDNS_TYPE_NSEC) { - _mdns_dbg_printf("%s.%s%s.%s.%s. NSEC ", name->host, name->sub ? "_sub." : "", name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_ANY) { - _mdns_dbg_printf("%s.%s%s.%s.%s. ANY ", name->host, name->sub ? "_sub." : "", name->service, name->proto, name->domain); - } else { - _mdns_dbg_printf("%s.%s%s.%s.%s. %04X ", name->host, name->sub ? "_sub." : "", name->service, name->proto, name->domain, type); - } - - if (mdns_class == 0x0001) { - _mdns_dbg_printf("IN"); - } else { - _mdns_dbg_printf("%04X", mdns_class); - } - _mdns_dbg_printf("\n"); - } - } - - if (header.answers || header.servers || header.additional) { - uint16_t recordIndex = 0; - - while (content < (data + len)) { - - content = _mdns_parse_fqdn(data, content, name, len); - if (!content) { - _mdns_dbg_printf("ERROR: parse mdns records\n"); - break; - } - - uint16_t type = _mdns_read_u16(content, MDNS_TYPE_OFFSET); - uint16_t mdns_class = _mdns_read_u16(content, MDNS_CLASS_OFFSET); - uint32_t ttl = _mdns_read_u32(content, MDNS_TTL_OFFSET); - uint16_t data_len = _mdns_read_u16(content, MDNS_LEN_OFFSET); - const uint8_t *data_ptr = content + MDNS_DATA_OFFSET; - bool flush = !!(mdns_class & 0x8000); - mdns_class &= 0x7FFF; - - content = data_ptr + data_len; - if (content > (data + len)) { - _mdns_dbg_printf("ERROR: content length overflow\n"); - break; - } - - mdns_parsed_record_type_t record_type = MDNS_ANSWER; - - if (recordIndex >= (header.answers + header.servers)) { - record_type = MDNS_EXTRA; - } else if (recordIndex >= (header.answers)) { - record_type = MDNS_NS; - } - recordIndex++; - - if (record_type == MDNS_EXTRA) { - _mdns_dbg_printf(" X"); - } else if (record_type == MDNS_NS) { - _mdns_dbg_printf(" S"); - } else { - _mdns_dbg_printf(" A"); - } - - if (type == MDNS_TYPE_PTR) { - _mdns_dbg_printf(": %s%s%s.%s.%s. PTR ", name->host, name->host[0] ? "." : "", name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_SRV) { - _mdns_dbg_printf(": %s.%s.%s.%s. SRV ", name->host, name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_TXT) { - _mdns_dbg_printf(": %s.%s.%s.%s. TXT ", name->host, name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_A) { - _mdns_dbg_printf(": %s.%s. A ", name->host, name->domain); - } else if (type == MDNS_TYPE_AAAA) { - _mdns_dbg_printf(": %s.%s. AAAA ", name->host, name->domain); - } else if (type == MDNS_TYPE_NSEC) { - _mdns_dbg_printf(": %s.%s.%s.%s. NSEC ", name->host, name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_ANY) { - _mdns_dbg_printf(": %s.%s.%s.%s. ANY ", name->host, name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_OPT) { - _mdns_dbg_printf(": . OPT "); - } else { - _mdns_dbg_printf(": %s.%s.%s.%s. %04X ", name->host, name->service, name->proto, name->domain, type); - } - - if (mdns_class == 0x0001) { - _mdns_dbg_printf("IN "); - } else { - _mdns_dbg_printf("%04X ", mdns_class); - } - if (flush) { - _mdns_dbg_printf("FLUSH "); - } - _mdns_dbg_printf("%" PRIu32, ttl); - _mdns_dbg_printf("[%u] ", data_len); - if (type == MDNS_TYPE_PTR) { - if (!_mdns_parse_fqdn(data, data_ptr, name, len)) { - _mdns_dbg_printf("ERROR: parse PTR\n"); - continue; - } - _mdns_dbg_printf("%s.%s.%s.%s.\n", name->host, name->service, name->proto, name->domain); - } else if (type == MDNS_TYPE_SRV) { - if (!_mdns_parse_fqdn(data, data_ptr + MDNS_SRV_FQDN_OFFSET, name, len)) { - _mdns_dbg_printf("ERROR: parse SRV\n"); - continue; - } - uint16_t priority = _mdns_read_u16(data_ptr, MDNS_SRV_PRIORITY_OFFSET); - uint16_t weight = _mdns_read_u16(data_ptr, MDNS_SRV_WEIGHT_OFFSET); - uint16_t port = _mdns_read_u16(data_ptr, MDNS_SRV_PORT_OFFSET); - _mdns_dbg_printf("%u %u %u %s.%s.\n", priority, weight, port, name->host, name->domain); - } else if (type == MDNS_TYPE_TXT) { - uint16_t i = 0, y; - while (i < data_len) { - uint8_t partLen = data_ptr[i++]; - if ((i + partLen) > data_len) { - _mdns_dbg_printf("ERROR: parse TXT\n"); - break; - } - char txt[partLen + 1]; - for (y = 0; y < partLen; y++) { - char d = data_ptr[i++]; - txt[y] = d; - } - txt[partLen] = 0; - _mdns_dbg_printf("%s", txt); - if (i < data_len) { - _mdns_dbg_printf("; "); - } - } - _mdns_dbg_printf("\n"); - } else if (type == MDNS_TYPE_AAAA) { - esp_ip6_addr_t ip6; - memcpy(&ip6, data_ptr, sizeof(esp_ip6_addr_t)); - _mdns_dbg_printf(IPV6STR "\n", IPV62STR(ip6)); - } else if (type == MDNS_TYPE_A) { - esp_ip4_addr_t ip; - memcpy(&ip, data_ptr, sizeof(esp_ip4_addr_t)); - _mdns_dbg_printf(IPSTR "\n", IP2STR(&ip)); - } else if (type == MDNS_TYPE_NSEC) { - const uint8_t *old_ptr = data_ptr; - const uint8_t *new_ptr = _mdns_parse_fqdn(data, data_ptr, name, len); - if (new_ptr) { - _mdns_dbg_printf("%s.%s.%s.%s. ", name->host, name->service, name->proto, name->domain); - size_t diff = new_ptr - old_ptr; - data_len -= diff; - data_ptr = new_ptr; - } - size_t i; - for (i = 0; i < data_len; i++) { - _mdns_dbg_printf(" %02x", data_ptr[i]); - } - _mdns_dbg_printf("\n"); - } else if (type == MDNS_TYPE_OPT) { - uint16_t opCode = _mdns_read_u16(data_ptr, 0); - uint16_t opLen = _mdns_read_u16(data_ptr, 2); - _mdns_dbg_printf(" Code: %04x Data[%u]:", opCode, opLen); - size_t i; - for (i = 4; i < data_len; i++) { - _mdns_dbg_printf(" %02x", data_ptr[i]); - } - _mdns_dbg_printf("\n"); - } else { - size_t i; - for (i = 0; i < data_len; i++) { - _mdns_dbg_printf(" %02x", data_ptr[i]); - } - _mdns_dbg_printf("\n"); - } - } - } -} -#endif diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_console.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_console.c deleted file mode 100644 index 075be06..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_console.c +++ /dev/null @@ -1,1060 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include -#include "esp_console.h" -#include "argtable3/argtable3.h" -#include "mdns.h" -#include "mdns_private.h" - -static const char *ip_protocol_str[] = {"V4", "V6", "MAX"}; - -static void mdns_print_results(mdns_result_t *results) -{ - mdns_result_t *r = results; - mdns_ip_addr_t *a = NULL; - int i = 1; - while (r) { - printf("%d: Interface: %s, Type: %s\n", i++, esp_netif_get_ifkey(r->esp_netif), ip_protocol_str[r->ip_protocol]); - if (r->instance_name) { - printf(" PTR : %s\n", r->instance_name); - } - if (r->hostname) { - printf(" SRV : %s.local:%u\n", r->hostname, r->port); - } - if (r->txt_count) { - printf(" TXT : [%u] ", r->txt_count); - for (size_t t = 0; t < r->txt_count; t++) { - printf("%s=%s; ", r->txt[t].key, r->txt[t].value); - } - printf("\n"); - } - a = r->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V6) { - printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6)); - } else { - printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4))); - } - a = a->next; - } - r = r->next; - } -} - -static struct { - struct arg_str *hostname; - struct arg_int *timeout; - struct arg_end *end; -} mdns_query_a_args; - -#ifdef CONFIG_LWIP_IPV4 -static int cmd_mdns_query_a(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_a_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_a_args.end, argv[0]); - return 1; - } - - const char *hostname = mdns_query_a_args.hostname->sval[0]; - int timeout = mdns_query_a_args.timeout->ival[0]; - - if (!hostname || !hostname[0]) { - printf("ERROR: Hostname not supplied\n"); - return 1; - } - - if (timeout <= 0) { - timeout = 1000; - } - - printf("Query A: %s.local, Timeout: %d\n", hostname, timeout); - - struct esp_ip4_addr addr; - addr.addr = 0; - - esp_err_t err = mdns_query_a(hostname, timeout, &addr); - if (err) { - if (err == ESP_ERR_NOT_FOUND) { - printf("ERROR: Host was not found!\n"); - return 0; - } - printf("ERROR: Query Failed\n"); - return 1; - } - - printf(IPSTR "\n", IP2STR(&addr)); - - return 0; -} - -static void register_mdns_query_a(void) -{ - mdns_query_a_args.hostname = arg_str1(NULL, NULL, "", "Hostname that is searched for"); - mdns_query_a_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_a_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_a", - .help = "Query MDNS for IPv4", - .hint = NULL, - .func = &cmd_mdns_query_a, - .argtable = &mdns_query_a_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} -#endif /* CONFIG_LWIP_IPV4 */ - -#ifdef CONFIG_LWIP_IPV6 -static int cmd_mdns_query_aaaa(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_a_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_a_args.end, argv[0]); - return 1; - } - - const char *hostname = mdns_query_a_args.hostname->sval[0]; - int timeout = mdns_query_a_args.timeout->ival[0]; - - if (!hostname || !hostname[0]) { - printf("ERROR: Hostname not supplied\n"); - return 1; - } - - if (timeout <= 0) { - timeout = 1000; - } - - printf("Query AAAA: %s.local, Timeout: %d\n", hostname, timeout); - - struct esp_ip6_addr addr; - memset(addr.addr, 0, 16); - - esp_err_t err = mdns_query_aaaa(hostname, timeout, &addr); - if (err) { - if (err == ESP_ERR_NOT_FOUND) { - printf("Host was not found!\n"); - return 0; - } - printf("ERROR: Query Failed\n"); - return 1; - } - - printf(IPV6STR "\n", IPV62STR(addr)); - - return 0; -} - -static void register_mdns_query_aaaa(void) -{ - mdns_query_a_args.hostname = arg_str1(NULL, NULL, "", "Hostname that is searched for"); - mdns_query_a_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_a_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_aaaa", - .help = "Query MDNS for IPv6", - .hint = NULL, - .func = &cmd_mdns_query_aaaa, - .argtable = &mdns_query_a_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} -#endif /* CONFIG_LWIP_IPV6 */ - -static struct { - struct arg_str *instance; - struct arg_str *service; - struct arg_str *proto; - struct arg_int *timeout; - struct arg_end *end; -} mdns_query_srv_args; - -static int cmd_mdns_query_srv(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_srv_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_srv_args.end, argv[0]); - return 1; - } - - const char *instance = mdns_query_srv_args.instance->sval[0]; - const char *service = mdns_query_srv_args.service->sval[0]; - const char *proto = mdns_query_srv_args.proto->sval[0]; - int timeout = mdns_query_srv_args.timeout->ival[0]; - - if (timeout <= 0) { - timeout = 1000; - } - - printf("Query SRV: %s.%s.%s.local, Timeout: %d\n", instance, service, proto, timeout); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query_srv(instance, service, proto, timeout, &results); - if (err) { - printf("ERROR: Query Failed\n"); - return 1; - } - if (!results) { - printf("No results found!\n"); - return 0; - } - mdns_print_results(results); - mdns_query_results_free(results); - return 0; -} - -static void register_mdns_query_srv(void) -{ - mdns_query_srv_args.instance = arg_str1(NULL, NULL, "", "Instance to search for"); - mdns_query_srv_args.service = arg_str1(NULL, NULL, "", "Service to search for (ex. _http, _smb, etc.)"); - mdns_query_srv_args.proto = arg_str1(NULL, NULL, "", "Protocol to search for (_tcp, _udp, etc.)"); - mdns_query_srv_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_srv_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_srv", - .help = "Query MDNS for Service SRV", - .hint = NULL, - .func = &cmd_mdns_query_srv, - .argtable = &mdns_query_srv_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} - -static struct { - struct arg_str *instance; - struct arg_str *service; - struct arg_str *proto; - struct arg_int *timeout; - struct arg_end *end; -} mdns_query_txt_args; - -static int cmd_mdns_query_txt(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_txt_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_txt_args.end, argv[0]); - return 1; - } - - const char *instance = mdns_query_txt_args.instance->sval[0]; - const char *service = mdns_query_txt_args.service->sval[0]; - const char *proto = mdns_query_txt_args.proto->sval[0]; - int timeout = mdns_query_txt_args.timeout->ival[0]; - - printf("Query TXT: %s.%s.%s.local, Timeout: %d\n", instance, service, proto, timeout); - - if (timeout <= 0) { - timeout = 5000; - } - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query_txt(instance, service, proto, timeout, &results); - if (err) { - printf("ERROR: Query Failed\n"); - return 1; - } - if (!results) { - printf("No results found!\n"); - return 0; - } - - mdns_print_results(results); - mdns_query_results_free(results); - return 0; -} - -static void register_mdns_query_txt(void) -{ - mdns_query_txt_args.instance = arg_str1(NULL, NULL, "", "Instance to search for"); - mdns_query_txt_args.service = arg_str1(NULL, NULL, "", "Service to search for (ex. _http, _smb, etc.)"); - mdns_query_txt_args.proto = arg_str1(NULL, NULL, "", "Protocol to search for (_tcp, _udp, etc.)"); - mdns_query_txt_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_txt_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_txt", - .help = "Query MDNS for Service TXT", - .hint = NULL, - .func = &cmd_mdns_query_txt, - .argtable = &mdns_query_txt_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_int *timeout; - struct arg_int *max_results; - struct arg_end *end; -} mdns_query_ptr_args; - -static int cmd_mdns_query_ptr(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_ptr_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_ptr_args.end, argv[0]); - return 1; - } - - const char *service = mdns_query_ptr_args.service->sval[0]; - const char *proto = mdns_query_ptr_args.proto->sval[0]; - int timeout = mdns_query_ptr_args.timeout->ival[0]; - int max_results = mdns_query_ptr_args.max_results->ival[0]; - - if (timeout <= 0) { - timeout = 5000; - } - - if (max_results <= 0 || max_results > 255) { - max_results = 255; - } - - printf("Query PTR: %s.%s.local, Timeout: %d, Max Results: %d\n", service, proto, timeout, max_results); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query_ptr(service, proto, timeout, max_results, &results); - if (err) { - printf("ERROR: Query Failed\n"); - return 1; - } - if (!results) { - printf("No results found!\n"); - return 0; - } - - mdns_print_results(results); - mdns_query_results_free(results); - return 0; -} - -static void register_mdns_query_ptr(void) -{ - mdns_query_ptr_args.service = arg_str1(NULL, NULL, "", "Service to search for (ex. _http, _smb, etc.)"); - mdns_query_ptr_args.proto = arg_str1(NULL, NULL, "", "Protocol to search for (_tcp, _udp, etc.)"); - mdns_query_ptr_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_ptr_args.max_results = arg_int0("m", "max_results", "", "Maximum results returned"); - mdns_query_ptr_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_ptr", - .help = "Query MDNS for Service", - .hint = NULL, - .func = &cmd_mdns_query_ptr, - .argtable = &mdns_query_ptr_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} - -static struct { - struct arg_str *hostname; - struct arg_int *timeout; - struct arg_int *max_results; - struct arg_end *end; -} mdns_query_ip_args; - -static int cmd_mdns_query_ip(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_ip_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_ip_args.end, argv[0]); - return 1; - } - - const char *hostname = mdns_query_ip_args.hostname->sval[0]; - int timeout = mdns_query_ip_args.timeout->ival[0]; - int max_results = mdns_query_ip_args.max_results->ival[0]; - - if (!hostname || !hostname[0]) { - printf("ERROR: Hostname not supplied\n"); - return 1; - } - - if (timeout <= 0) { - timeout = 1000; - } - - if (max_results < 0 || max_results > 255) { - max_results = 255; - } - - printf("Query IP: %s.local, Timeout: %d, Max Results: %d\n", hostname, timeout, max_results); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query(hostname, NULL, NULL, MDNS_TYPE_ANY, timeout, max_results, &results); - if (err) { - printf("ERROR: Query Failed\n"); - return 1; - } - if (!results) { - printf("No results found!\n"); - return 0; - } - mdns_print_results(results); - mdns_query_results_free(results); - - return 0; -} - -static void register_mdns_query_ip(void) -{ - mdns_query_ip_args.hostname = arg_str1(NULL, NULL, "", "Hostname that is searched for"); - mdns_query_ip_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_ip_args.max_results = arg_int0("m", "max_results", "", "Maximum results returned"); - mdns_query_ip_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_ip", - .help = "Query MDNS for IP", - .hint = NULL, - .func = &cmd_mdns_query_ip, - .argtable = &mdns_query_ip_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} - -static struct { - struct arg_str *instance; - struct arg_str *service; - struct arg_str *proto; - struct arg_int *timeout; - struct arg_int *max_results; - struct arg_end *end; -} mdns_query_svc_args; - -static int cmd_mdns_query_svc(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_query_svc_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_query_svc_args.end, argv[0]); - return 1; - } - - const char *instance = mdns_query_svc_args.instance->sval[0]; - const char *service = mdns_query_svc_args.service->sval[0]; - const char *proto = mdns_query_svc_args.proto->sval[0]; - int timeout = mdns_query_svc_args.timeout->ival[0]; - int max_results = mdns_query_svc_args.max_results->ival[0]; - - if (timeout <= 0) { - timeout = 5000; - } - - if (max_results < 0 || max_results > 255) { - max_results = 255; - } - - printf("Query SVC: %s.%s.%s.local, Timeout: %d, Max Results: %d\n", instance, service, proto, timeout, max_results); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query(instance, service, proto, MDNS_TYPE_ANY, timeout, max_results, &results); - if (err) { - printf("ERROR: Query Failed\n"); - return 1; - } - if (!results) { - printf("No results found!\n"); - return 0; - } - - mdns_print_results(results); - mdns_query_results_free(results); - return 0; -} - -static void register_mdns_query_svc(void) -{ - mdns_query_svc_args.instance = arg_str1(NULL, NULL, "", "Instance to search for"); - mdns_query_svc_args.service = arg_str1(NULL, NULL, "", "Service to search for (ex. _http, _smb, etc.)"); - mdns_query_svc_args.proto = arg_str1(NULL, NULL, "", "Protocol to search for (_tcp, _udp, etc.)"); - mdns_query_svc_args.timeout = arg_int0("t", "timeout", "", "Timeout for this query"); - mdns_query_svc_args.max_results = arg_int0("m", "max_results", "", "Maximum results returned"); - mdns_query_svc_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_query_svc", - .help = "Query MDNS for Service TXT & SRV", - .hint = NULL, - .func = &cmd_mdns_query_svc, - .argtable = &mdns_query_svc_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} - -static struct { - struct arg_str *hostname; - struct arg_str *instance; - struct arg_end *end; -} mdns_init_args; - -static int cmd_mdns_init(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_init_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_init_args.end, argv[0]); - return 1; - } - - ESP_ERROR_CHECK( mdns_init() ); - - if (mdns_init_args.hostname->sval[0]) { - ESP_ERROR_CHECK( mdns_hostname_set(mdns_init_args.hostname->sval[0]) ); - printf("MDNS: Hostname: %s\n", mdns_init_args.hostname->sval[0]); - } - - if (mdns_init_args.instance->sval[0]) { - ESP_ERROR_CHECK( mdns_instance_name_set(mdns_init_args.instance->sval[0]) ); - printf("MDNS: Instance: %s\n", mdns_init_args.instance->sval[0]); - } - - return 0; -} - -static void register_mdns_init(void) -{ - mdns_init_args.hostname = arg_str0("h", "hostname", "", "Hostname that the server will advertise"); - mdns_init_args.instance = arg_str0("i", "instance", "", "Default instance name for services"); - mdns_init_args.end = arg_end(2); - - const esp_console_cmd_t cmd_init = { - .command = "mdns_init", - .help = "Start MDNS Server", - .hint = NULL, - .func = &cmd_mdns_init, - .argtable = &mdns_init_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_init) ); -} - -static int cmd_mdns_free(int argc, char **argv) -{ - mdns_free(); - return 0; -} - -static void register_mdns_free(void) -{ - const esp_console_cmd_t cmd_free = { - .command = "mdns_free", - .help = "Stop MDNS Server", - .hint = NULL, - .func = &cmd_mdns_free, - .argtable = NULL - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_free) ); -} - -static struct { - struct arg_str *hostname; - struct arg_end *end; -} mdns_set_hostname_args; - -static int cmd_mdns_set_hostname(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_set_hostname_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_set_hostname_args.end, argv[0]); - return 1; - } - - if (mdns_set_hostname_args.hostname->sval[0] == NULL) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_hostname_set(mdns_set_hostname_args.hostname->sval[0]) ); - return 0; -} - -static void register_mdns_set_hostname(void) -{ - mdns_set_hostname_args.hostname = arg_str1(NULL, NULL, "", "Hostname that the server will advertise"); - mdns_set_hostname_args.end = arg_end(2); - - const esp_console_cmd_t cmd_set_hostname = { - .command = "mdns_set_hostname", - .help = "Set MDNS Server hostname", - .hint = NULL, - .func = &cmd_mdns_set_hostname, - .argtable = &mdns_set_hostname_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_set_hostname) ); -} - -static struct { - struct arg_str *instance; - struct arg_end *end; -} mdns_set_instance_args; - -static int cmd_mdns_set_instance(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_set_instance_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_set_instance_args.end, argv[0]); - return 1; - } - - if (mdns_set_instance_args.instance->sval[0] == NULL) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_instance_name_set(mdns_set_instance_args.instance->sval[0]) ); - return 0; -} - -static void register_mdns_set_instance(void) -{ - mdns_set_instance_args.instance = arg_str1(NULL, NULL, "", "Default instance name for services"); - mdns_set_instance_args.end = arg_end(2); - - const esp_console_cmd_t cmd_set_instance = { - .command = "mdns_set_instance", - .help = "Set MDNS Server Istance Name", - .hint = NULL, - .func = &cmd_mdns_set_instance, - .argtable = &mdns_set_instance_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_set_instance) ); -} - -static mdns_txt_item_t *_convert_items(const char **values, int count) -{ - int i = 0, e; - const char *value = NULL; - mdns_txt_item_t *items = (mdns_txt_item_t *) malloc(sizeof(mdns_txt_item_t) * count); - if (!items) { - printf("ERROR: No Memory!\n"); - goto fail; - - } - memset(items, 0, sizeof(mdns_txt_item_t) * count); - - for (i = 0; i < count; i++) { - value = values[i]; - char *esign = strchr(value, '='); - if (!esign) { - printf("ERROR: Equal sign not found in '%s'!\n", value); - goto fail; - } - int var_len = esign - value; - int val_len = strlen(value) - var_len - 1; - char *var = (char *)malloc(var_len + 1); - if (var == NULL) { - printf("ERROR: No Memory!\n"); - goto fail; - } - char *val = (char *)malloc(val_len + 1); - if (val == NULL) { - printf("ERROR: No Memory!\n"); - free(var); - goto fail; - } - memcpy(var, value, var_len); - var[var_len] = 0; - memcpy(val, esign + 1, val_len); - val[val_len] = 0; - - items[i].key = var; - items[i].value = val; - } - - return items; - -fail: - for (e = 0; e < i; e++) { - free((char *)items[e].key); - free((char *)items[e].value); - } - free(items); - return NULL; -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_int *port; - struct arg_str *instance; - struct arg_str *txt; - struct arg_end *end; -} mdns_add_args; - -static int cmd_mdns_service_add(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_add_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_add_args.end, argv[0]); - return 1; - } - - if (!mdns_add_args.service->sval[0] || !mdns_add_args.proto->sval[0] || !mdns_add_args.port->ival[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - const char *instance = NULL; - if (mdns_add_args.instance->sval[0] && mdns_add_args.instance->sval[0][0]) { - instance = mdns_add_args.instance->sval[0]; - printf("MDNS: Service Instance: %s\n", instance); - } - mdns_txt_item_t *items = NULL; - if (mdns_add_args.txt->count) { - items = _convert_items(mdns_add_args.txt->sval, mdns_add_args.txt->count); - if (!items) { - printf("ERROR: No Memory!\n"); - return 1; - - } - } - - ESP_ERROR_CHECK( mdns_service_add(instance, mdns_add_args.service->sval[0], mdns_add_args.proto->sval[0], mdns_add_args.port->ival[0], items, mdns_add_args.txt->count) ); - free(items); - return 0; -} - -static void register_mdns_service_add(void) -{ - mdns_add_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_add_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_add_args.port = arg_int1(NULL, NULL, "", "Service Port"); - mdns_add_args.instance = arg_str0("i", "instance", "", "Instance name"); - mdns_add_args.txt = arg_strn(NULL, NULL, "item", 0, 30, "TXT Items (name=value)"); - mdns_add_args.end = arg_end(2); - - const esp_console_cmd_t cmd_add = { - .command = "mdns_service_add", - .help = "Add service to MDNS", - .hint = NULL, - .func = &cmd_mdns_service_add, - .argtable = &mdns_add_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_add) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_end *end; -} mdns_remove_args; - -static int cmd_mdns_service_remove(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_remove_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_remove_args.end, argv[0]); - return 1; - } - - if (!mdns_remove_args.service->sval[0] || !mdns_remove_args.proto->sval[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_service_remove(mdns_remove_args.service->sval[0], mdns_remove_args.proto->sval[0]) ); - return 0; -} - -static void register_mdns_service_remove(void) -{ - mdns_remove_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_remove_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_remove_args.end = arg_end(2); - - const esp_console_cmd_t cmd_remove = { - .command = "mdns_service_remove", - .help = "Remove service from MDNS", - .hint = NULL, - .func = &cmd_mdns_service_remove, - .argtable = &mdns_remove_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_remove) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_str *instance; - struct arg_end *end; -} mdns_service_instance_set_args; - -static int cmd_mdns_service_instance_set(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_service_instance_set_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_service_instance_set_args.end, argv[0]); - return 1; - } - - if (!mdns_service_instance_set_args.service->sval[0] || !mdns_service_instance_set_args.proto->sval[0] || !mdns_service_instance_set_args.instance->sval[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_service_instance_name_set(mdns_service_instance_set_args.service->sval[0], mdns_service_instance_set_args.proto->sval[0], mdns_service_instance_set_args.instance->sval[0]) ); - return 0; -} - -static void register_mdns_service_instance_set(void) -{ - mdns_service_instance_set_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_service_instance_set_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_service_instance_set_args.instance = arg_str1(NULL, NULL, "", "Instance name"); - mdns_service_instance_set_args.end = arg_end(2); - - const esp_console_cmd_t cmd_add = { - .command = "mdns_service_instance_set", - .help = "Set MDNS Service Instance Name", - .hint = NULL, - .func = &cmd_mdns_service_instance_set, - .argtable = &mdns_service_instance_set_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_add) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_int *port; - struct arg_end *end; -} mdns_service_port_set_args; - -static int cmd_mdns_service_port_set(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_service_port_set_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_service_port_set_args.end, argv[0]); - return 1; - } - - if (!mdns_service_port_set_args.service->sval[0] || !mdns_service_port_set_args.proto->sval[0] || !mdns_service_port_set_args.port->ival[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_service_port_set(mdns_service_port_set_args.service->sval[0], mdns_service_port_set_args.proto->sval[0], mdns_service_port_set_args.port->ival[0]) ); - return 0; -} - -static void register_mdns_service_port_set(void) -{ - mdns_service_port_set_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_service_port_set_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_service_port_set_args.port = arg_int1(NULL, NULL, "", "Service Port"); - mdns_service_port_set_args.end = arg_end(2); - - const esp_console_cmd_t cmd_add = { - .command = "mdns_service_port_set", - .help = "Set MDNS Service port", - .hint = NULL, - .func = &cmd_mdns_service_port_set, - .argtable = &mdns_service_port_set_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_add) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_str *txt; - struct arg_end *end; -} mdns_txt_replace_args; - -static int cmd_mdns_service_txt_replace(int argc, char **argv) -{ - mdns_txt_item_t *items = NULL; - int nerrors = arg_parse(argc, argv, (void **) &mdns_txt_replace_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_txt_replace_args.end, argv[0]); - return 1; - } - - if (!mdns_txt_replace_args.service->sval[0] || !mdns_txt_replace_args.proto->sval[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - if (mdns_txt_replace_args.txt->count) { - items = _convert_items(mdns_txt_replace_args.txt->sval, mdns_txt_replace_args.txt->count); - if (!items) { - printf("ERROR: No Memory!\n"); - return 1; - - } - } - ESP_ERROR_CHECK( mdns_service_txt_set(mdns_txt_replace_args.service->sval[0], mdns_txt_replace_args.proto->sval[0], items, mdns_txt_replace_args.txt->count) ); - free(items); - return 0; -} - -static void register_mdns_service_txt_replace(void) -{ - mdns_txt_replace_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_txt_replace_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_txt_replace_args.txt = arg_strn(NULL, NULL, "item", 0, 30, "TXT Items (name=value)"); - mdns_txt_replace_args.end = arg_end(2); - - const esp_console_cmd_t cmd_txt_set = { - .command = "mdns_service_txt_replace", - .help = "Replace MDNS service TXT items", - .hint = NULL, - .func = &cmd_mdns_service_txt_replace, - .argtable = &mdns_txt_replace_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_txt_set) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_str *var; - struct arg_str *value; - struct arg_end *end; -} mdns_txt_set_args; - -static int cmd_mdns_service_txt_set(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_txt_set_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_txt_set_args.end, argv[0]); - return 1; - } - - if (!mdns_txt_set_args.service->sval[0] || !mdns_txt_set_args.proto->sval[0] || !mdns_txt_set_args.var->sval[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_service_txt_item_set(mdns_txt_set_args.service->sval[0], mdns_txt_set_args.proto->sval[0], mdns_txt_set_args.var->sval[0], mdns_txt_set_args.value->sval[0]) ); - return 0; -} - -static void register_mdns_service_txt_set(void) -{ - mdns_txt_set_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_txt_set_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_txt_set_args.var = arg_str1(NULL, NULL, "", "Item Name"); - mdns_txt_set_args.value = arg_str1(NULL, NULL, "", "Item Value"); - mdns_txt_set_args.end = arg_end(2); - - const esp_console_cmd_t cmd_txt_set = { - .command = "mdns_service_txt_set", - .help = "Add/Set MDNS service TXT item", - .hint = NULL, - .func = &cmd_mdns_service_txt_set, - .argtable = &mdns_txt_set_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_txt_set) ); -} - -static struct { - struct arg_str *service; - struct arg_str *proto; - struct arg_str *var; - struct arg_end *end; -} mdns_txt_remove_args; - -static int cmd_mdns_service_txt_remove(int argc, char **argv) -{ - int nerrors = arg_parse(argc, argv, (void **) &mdns_txt_remove_args); - if (nerrors != 0) { - arg_print_errors(stderr, mdns_txt_remove_args.end, argv[0]); - return 1; - } - - if (!mdns_txt_remove_args.service->sval[0] || !mdns_txt_remove_args.proto->sval[0] || !mdns_txt_remove_args.var->sval[0]) { - printf("ERROR: Bad arguments!\n"); - return 1; - } - - ESP_ERROR_CHECK( mdns_service_txt_item_remove(mdns_txt_remove_args.service->sval[0], mdns_txt_remove_args.proto->sval[0], mdns_txt_remove_args.var->sval[0]) ); - return 0; -} - -static void register_mdns_service_txt_remove(void) -{ - mdns_txt_remove_args.service = arg_str1(NULL, NULL, "", "MDNS Service"); - mdns_txt_remove_args.proto = arg_str1(NULL, NULL, "", "IP Protocol"); - mdns_txt_remove_args.var = arg_str1(NULL, NULL, "", "Item Name"); - mdns_txt_remove_args.end = arg_end(2); - - const esp_console_cmd_t cmd_txt_remove = { - .command = "mdns_service_txt_remove", - .help = "Remove MDNS service TXT item", - .hint = NULL, - .func = &cmd_mdns_service_txt_remove, - .argtable = &mdns_txt_remove_args - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_txt_remove) ); -} - -static int cmd_mdns_service_remove_all(int argc, char **argv) -{ - mdns_service_remove_all(); - return 0; -} - -static void register_mdns_service_remove_all(void) -{ - const esp_console_cmd_t cmd_free = { - .command = "mdns_service_remove_all", - .help = "Remove all MDNS services", - .hint = NULL, - .func = &cmd_mdns_service_remove_all, - .argtable = NULL - }; - - ESP_ERROR_CHECK( esp_console_cmd_register(&cmd_free) ); -} - -void mdns_console_register(void) -{ - register_mdns_init(); - register_mdns_free(); - register_mdns_set_hostname(); - register_mdns_set_instance(); - register_mdns_service_add(); - register_mdns_service_remove(); - register_mdns_service_instance_set(); - register_mdns_service_port_set(); - register_mdns_service_txt_replace(); - register_mdns_service_txt_set(); - register_mdns_service_txt_remove(); - register_mdns_service_remove_all(); - -#ifdef CONFIG_LWIP_IPV4 - register_mdns_query_a(); -#endif -#ifdef CONFIG_LWIP_IPV6 - register_mdns_query_aaaa(); -#endif - register_mdns_query_txt(); - register_mdns_query_srv(); - register_mdns_query_ptr(); - - register_mdns_query_ip(); - register_mdns_query_svc(); -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_networking_lwip.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_networking_lwip.c deleted file mode 100644 index 635f7e3..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_networking_lwip.c +++ /dev/null @@ -1,397 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/* - * MDNS Server Networking - * - */ -#include -#include "esp_log.h" -#include "lwip/ip_addr.h" -#include "lwip/pbuf.h" -#include "lwip/igmp.h" -#include "lwip/udp.h" -#include "lwip/mld6.h" -#include "lwip/priv/tcpip_priv.h" -#include "esp_system.h" -#include "esp_event.h" -#include "mdns_networking.h" -#include "esp_netif_net_stack.h" - -/* - * MDNS Server Networking - * - */ -enum interface_protocol { - PROTO_IPV4 = 1 << MDNS_IP_PROTOCOL_V4, - PROTO_IPV6 = 1 << MDNS_IP_PROTOCOL_V6 -}; - -typedef struct interfaces { - bool ready; - int proto; -} interfaces_t; - -static interfaces_t s_interfaces[MDNS_MAX_INTERFACES]; - -static struct udp_pcb *_pcb_main = NULL; - -static const char *TAG = "mdns_networking"; - -static void _udp_recv(void *arg, struct udp_pcb *upcb, struct pbuf *pb, const ip_addr_t *raddr, uint16_t rport); - -/** - * @brief Low level UDP PCB Initialize - */ -static esp_err_t _udp_pcb_main_init(void) -{ - if (_pcb_main) { - return ESP_OK; - } - _pcb_main = udp_new(); - if (!_pcb_main) { - return ESP_ERR_NO_MEM; - } - if (udp_bind(_pcb_main, IP_ANY_TYPE, MDNS_SERVICE_PORT) != 0) { - udp_remove(_pcb_main); - _pcb_main = NULL; - return ESP_ERR_INVALID_STATE; - } - _pcb_main->mcast_ttl = 255; - _pcb_main->remote_port = MDNS_SERVICE_PORT; - ip_addr_copy(_pcb_main->remote_ip, *(IP_ANY_TYPE)); - udp_recv(_pcb_main, &_udp_recv, NULL); - return ESP_OK; -} - -/** - * @brief Low level UDP PCB Free - */ -static void _udp_pcb_main_deinit(void) -{ - if (_pcb_main) { - udp_recv(_pcb_main, NULL, NULL); - udp_disconnect(_pcb_main); - udp_remove(_pcb_main); - _pcb_main = NULL; - } -} - -/** - * @brief Low level UDP Multicast membership control - */ -static esp_err_t _udp_join_group(mdns_if_t if_inx, mdns_ip_protocol_t ip_protocol, bool join) -{ - struct netif *netif = NULL; - esp_netif_t *tcpip_if = _mdns_get_esp_netif(if_inx); - - if (!esp_netif_is_netif_up(tcpip_if)) { - // Network interface went down before event propagated, skipping IGMP config - return ESP_ERR_INVALID_STATE; - } - - netif = esp_netif_get_netif_impl(tcpip_if); - assert(netif); - -#if LWIP_IPV4 - if (ip_protocol == MDNS_IP_PROTOCOL_V4) { - ip4_addr_t multicast_addr; - IP4_ADDR(&multicast_addr, 224, 0, 0, 251); - - if (join) { - if (igmp_joingroup_netif(netif, &multicast_addr)) { - return ESP_ERR_INVALID_STATE; - } - } else { - if (igmp_leavegroup_netif(netif, &multicast_addr)) { - return ESP_ERR_INVALID_STATE; - } - } - } -#endif // LWIP_IPV4 -#if LWIP_IPV6 - if (ip_protocol == MDNS_IP_PROTOCOL_V6) { - ip_addr_t multicast_addr = IPADDR6_INIT(0x000002ff, 0, 0, 0xfb000000); - - if (join) { - if (mld6_joingroup_netif(netif, ip_2_ip6(&multicast_addr))) { - return ESP_ERR_INVALID_STATE; - } - } else { - if (mld6_leavegroup_netif(netif, ip_2_ip6(&multicast_addr))) { - return ESP_ERR_INVALID_STATE; - } - } - } -#endif // LWIP_IPV6 - return ESP_OK; -} - -/** - * @brief the receive callback of the raw udp api. Packets are received here - * - */ -static void _udp_recv(void *arg, struct udp_pcb *upcb, struct pbuf *pb, const ip_addr_t *raddr, uint16_t rport) -{ - - uint8_t i; - while (pb != NULL) { - struct pbuf *this_pb = pb; - pb = pb->next; - this_pb->next = NULL; - - mdns_rx_packet_t *packet = (mdns_rx_packet_t *)malloc(sizeof(mdns_rx_packet_t)); - if (!packet) { - HOOK_MALLOC_FAILED; - //missed packet - no memory - pbuf_free(this_pb); - continue; - } - - packet->tcpip_if = MDNS_MAX_INTERFACES; - packet->pb = this_pb; - packet->src_port = rport; -#if LWIP_IPV4 && LWIP_IPV6 - packet->src.type = raddr->type; - memcpy(&packet->src.u_addr, &raddr->u_addr, sizeof(raddr->u_addr)); -#elif LWIP_IPV4 - packet->src.type = IPADDR_TYPE_V4; - packet->src.u_addr.ip4.addr = raddr->addr; -#elif LWIP_IPV6 - packet->src.type = IPADDR_TYPE_V6; - memcpy(&packet->src.u_addr.ip6, raddr, sizeof(ip_addr_t)); -#endif - packet->dest.type = packet->src.type; - -#if LWIP_IPV4 - if (packet->src.type == IPADDR_TYPE_V4) { - packet->ip_protocol = MDNS_IP_PROTOCOL_V4; - struct ip_hdr *iphdr = (struct ip_hdr *)(((uint8_t *)(packet->pb->payload)) - UDP_HLEN - IP_HLEN); - packet->dest.u_addr.ip4.addr = iphdr->dest.addr; - packet->multicast = ip4_addr_ismulticast(&(packet->dest.u_addr.ip4)); - } -#endif // LWIP_IPV4 -#if LWIP_IPV6 - if (packet->src.type == IPADDR_TYPE_V6) { - packet->ip_protocol = MDNS_IP_PROTOCOL_V6; - struct ip6_hdr *ip6hdr = (struct ip6_hdr *)(((uint8_t *)(packet->pb->payload)) - UDP_HLEN - IP6_HLEN); - memcpy(&packet->dest.u_addr.ip6.addr, (uint8_t *)ip6hdr->dest.addr, 16); - packet->multicast = ip6_addr_ismulticast(&(packet->dest.u_addr.ip6)); - } -#endif // LWIP_IPV6 - - //lwip does not return the proper pcb if you have more than one for the same multicast address (but different interfaces) - struct netif *netif = NULL; - bool found = false; - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - netif = esp_netif_get_netif_impl(_mdns_get_esp_netif(i)); - if (s_interfaces[i].proto && netif && netif == ip_current_input_netif ()) { -#if LWIP_IPV4 - if (packet->src.type == IPADDR_TYPE_V4) { - if ((packet->src.u_addr.ip4.addr & ip_2_ip4(&netif->netmask)->addr) != (ip_2_ip4(&netif->ip_addr)->addr & ip_2_ip4(&netif->netmask)->addr)) { - //packet source is not in the same subnet - break; - } - } -#endif // LWIP_IPV4 - packet->tcpip_if = i; - found = true; - break; - } - } - - if (!found || _mdns_send_rx_action(packet) != ESP_OK) { - pbuf_free(this_pb); - free(packet); - } - } - -} - -bool mdns_is_netif_ready(mdns_if_t netif, mdns_ip_protocol_t ip_proto) -{ - return s_interfaces[netif].ready && - s_interfaces[netif].proto & (ip_proto == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6); -} - -/** - * @brief Check if any of the interfaces is up - */ -static bool _udp_pcb_is_in_use(void) -{ - int i, p; - for (i = 0; i < MDNS_MAX_INTERFACES; i++) { - for (p = 0; p < MDNS_IP_PROTOCOL_MAX; p++) { - if (mdns_is_netif_ready(i, p)) { - return true; - } - } - } - return false; -} - -/** - * @brief Stop PCB Main code - */ -static void _udp_pcb_deinit(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - s_interfaces[tcpip_if].proto &= ~(ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6); - if (s_interfaces[tcpip_if].proto == 0) { - s_interfaces[tcpip_if].ready = false; - _udp_join_group(tcpip_if, ip_protocol, false); - if (!_udp_pcb_is_in_use()) { - _udp_pcb_main_deinit(); - } - } -} - -/** - * @brief Start PCB Main code - */ -static esp_err_t _udp_pcb_init(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - if (mdns_is_netif_ready(tcpip_if, ip_protocol)) { - return ESP_ERR_INVALID_STATE; - } - - esp_err_t err = _udp_join_group(tcpip_if, ip_protocol, true); - if (err) { - return err; - } - - err = _udp_pcb_main_init(); - if (err) { - return err; - } - s_interfaces[tcpip_if].proto |= (ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6); - s_interfaces[tcpip_if].ready = true; - - return ESP_OK; -} - -typedef struct { - struct tcpip_api_call_data call; - mdns_if_t tcpip_if; - mdns_ip_protocol_t ip_protocol; - struct pbuf *pbt; - const ip_addr_t *ip; - uint16_t port; - esp_err_t err; -} mdns_api_call_t; - -/** - * @brief Start PCB from LwIP thread - */ -static err_t _mdns_pcb_init_api(struct tcpip_api_call_data *api_call_msg) -{ - mdns_api_call_t *msg = (mdns_api_call_t *)api_call_msg; - msg->err = _udp_pcb_init(msg->tcpip_if, msg->ip_protocol); - return msg->err; -} - -/** - * @brief Stop PCB from LwIP thread - */ -static err_t _mdns_pcb_deinit_api(struct tcpip_api_call_data *api_call_msg) -{ - mdns_api_call_t *msg = (mdns_api_call_t *)api_call_msg; - _udp_pcb_deinit(msg->tcpip_if, msg->ip_protocol); - msg->err = ESP_OK; - return ESP_OK; -} - -/* - * Non-static functions below are - * - _mdns prefixed - * - commented in mdns_networking.h header - */ -esp_err_t _mdns_pcb_init(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_api_call_t msg = { - .tcpip_if = tcpip_if, - .ip_protocol = ip_protocol - }; - tcpip_api_call(_mdns_pcb_init_api, &msg.call); - return msg.err; -} - -esp_err_t _mdns_pcb_deinit(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - mdns_api_call_t msg = { - .tcpip_if = tcpip_if, - .ip_protocol = ip_protocol - }; - tcpip_api_call(_mdns_pcb_deinit_api, &msg.call); - return msg.err; -} - -static err_t _mdns_udp_pcb_write_api(struct tcpip_api_call_data *api_call_msg) -{ - void *nif = NULL; - mdns_api_call_t *msg = (mdns_api_call_t *)api_call_msg; - nif = esp_netif_get_netif_impl(_mdns_get_esp_netif(msg->tcpip_if)); - if (!nif || !mdns_is_netif_ready(msg->tcpip_if, msg->ip_protocol) || _pcb_main == NULL) { - pbuf_free(msg->pbt); - msg->err = ERR_IF; - return ERR_IF; - } - esp_err_t err = udp_sendto_if (_pcb_main, msg->pbt, msg->ip, msg->port, (struct netif *)nif); - pbuf_free(msg->pbt); - msg->err = err; - return err; -} - -size_t _mdns_udp_pcb_write(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, const esp_ip_addr_t *ip, uint16_t port, uint8_t *data, size_t len) -{ - struct pbuf *pbt = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM); - if (pbt == NULL) { - return 0; - } - memcpy((uint8_t *)pbt->payload, data, len); - - ip_addr_t ip_add_copy; -#if LWIP_IPV6 && LWIP_IPV4 - ip_add_copy.type = ip->type; - memcpy(&(ip_add_copy.u_addr), &(ip->u_addr), sizeof(ip_add_copy.u_addr)); -#elif LWIP_IPV4 - ip_add_copy.addr = ip->u_addr.ip4.addr; -#elif LWIP_IPV6 -#if LWIP_IPV6_SCOPES - ip_add_copy.zone = ip->u_addr.ip6.zone; -#endif // LWIP_IPV6_SCOPES - memcpy(ip_add_copy.addr, ip->u_addr.ip6.addr, sizeof(ip_add_copy.addr)); -#endif - - mdns_api_call_t msg = { - .tcpip_if = tcpip_if, - .ip_protocol = ip_protocol, - .pbt = pbt, - .ip = &ip_add_copy, - .port = port - }; - tcpip_api_call(_mdns_udp_pcb_write_api, &msg.call); - - if (msg.err) { - return 0; - } - return len; -} - -void *_mdns_get_packet_data(mdns_rx_packet_t *packet) -{ - return packet->pb->payload; -} - -size_t _mdns_get_packet_len(mdns_rx_packet_t *packet) -{ - return packet->pb->len; -} - -void _mdns_packet_free(mdns_rx_packet_t *packet) -{ - pbuf_free(packet->pb); - free(packet); -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_networking_socket.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_networking_socket.c deleted file mode 100644 index a99a9cc..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/mdns_networking_socket.c +++ /dev/null @@ -1,498 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * @brief MDNS Server Networking module implemented using BSD sockets - */ - -#include -#include "esp_event.h" -#include "mdns_networking.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "esp_log.h" - -#if defined(CONFIG_IDF_TARGET_LINUX) -#include -#include -#endif - -enum interface_protocol { - PROTO_IPV4 = 1 << MDNS_IP_PROTOCOL_V4, - PROTO_IPV6 = 1 << MDNS_IP_PROTOCOL_V6 -}; - -typedef struct interfaces { - int sock; - int proto; -} interfaces_t; - -static interfaces_t s_interfaces[MDNS_MAX_INTERFACES]; - -static const char *TAG = "mdns_networking"; -static bool s_run_sock_recv_task = false; -static int create_socket(esp_netif_t *netif); -static int join_mdns_multicast_group(int sock, esp_netif_t *netif, mdns_ip_protocol_t ip_protocol); - -#if defined(CONFIG_IDF_TARGET_LINUX) -// Need to define packet buffer struct on linux -struct pbuf { - struct pbuf *next; - void *payload; - size_t tot_len; - size_t len; -}; -#else -// Compatibility define to access sock-addr struct the same way for lwip and linux -#define s6_addr32 un.u32_addr -#endif // CONFIG_IDF_TARGET_LINUX - -static void __attribute__((constructor)) ctor_networking_socket(void) -{ - for (int i = 0; i < sizeof(s_interfaces) / sizeof(s_interfaces[0]); ++i) { - s_interfaces[i].sock = -1; - s_interfaces[i].proto = 0; - } -} - -static void delete_socket(int sock) -{ - close(sock); -} - -bool mdns_is_netif_ready(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - return s_interfaces[tcpip_if].proto & (ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6); -} - -void *_mdns_get_packet_data(mdns_rx_packet_t *packet) -{ - return packet->pb->payload; -} - -size_t _mdns_get_packet_len(mdns_rx_packet_t *packet) -{ - return packet->pb->len; -} - -void _mdns_packet_free(mdns_rx_packet_t *packet) -{ - free(packet->pb->payload); - free(packet->pb); - free(packet); -} - -esp_err_t _mdns_pcb_deinit(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - s_interfaces[tcpip_if].proto &= ~(ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6); - if (s_interfaces[tcpip_if].proto == 0) { - // if the interface for both protocols uninitialized, close the interface socket - if (s_interfaces[tcpip_if].sock >= 0) { - delete_socket(s_interfaces[tcpip_if].sock); - } - } - - for (int i = 0; i < MDNS_MAX_INTERFACES; i++) { - if (s_interfaces[i].sock >= 0) { - // If any of the interfaces initialized - return ESP_OK; - } - } - - // no interface alive, stop the rx task - s_run_sock_recv_task = false; - vTaskDelay(pdMS_TO_TICKS(500)); - return ESP_OK; -} - -#if defined(CONFIG_IDF_TARGET_LINUX) -#ifdef CONFIG_LWIP_IPV6 -static char *inet6_ntoa_r(struct in6_addr addr, char *ptr, size_t size) -{ - inet_ntop(AF_INET6, &(addr.s6_addr32[0]), ptr, size); - return ptr; -} -#endif // CONFIG_LWIP_IPV6 -static char *inet_ntoa_r(struct in_addr addr, char *ptr, size_t size) -{ - char *res = inet_ntoa(addr); - if (res && strlen(res) < size) { - strcpy(ptr, res); - } - return res; -} -#endif // CONFIG_IDF_TARGET_LINUX - -static inline char *get_string_address(struct sockaddr_storage *source_addr) -{ - static char address_str[40]; // 40=(8*4+7+term) is the max size of ascii IPv6 addr "XXXX:XX...XX:XXXX" - char *res = NULL; - // Convert ip address to string -#ifdef CONFIG_LWIP_IPV4 - if (source_addr->ss_family == PF_INET) { - res = inet_ntoa_r(((struct sockaddr_in *)source_addr)->sin_addr, address_str, sizeof(address_str)); - } -#endif -#ifdef CONFIG_LWIP_IPV6 - if (source_addr->ss_family == PF_INET6) { - res = inet6_ntoa_r(((struct sockaddr_in6 *)source_addr)->sin6_addr, address_str, sizeof(address_str)); - } -#endif - if (!res) { - address_str[0] = '\0'; // Returns empty string if conversion didn't succeed - } - return address_str; -} - - -static inline size_t espaddr_to_inet(const esp_ip_addr_t *addr, const uint16_t port, const mdns_ip_protocol_t ip_protocol, struct sockaddr_storage *in_addr) -{ - size_t ss_addr_len = 0; - memset(in_addr, 0, sizeof(struct sockaddr_storage)); -#ifdef CONFIG_LWIP_IPV4 - if (ip_protocol == MDNS_IP_PROTOCOL_V4 && addr->type == ESP_IPADDR_TYPE_V4) { - in_addr->ss_family = PF_INET; -#if !defined(CONFIG_IDF_TARGET_LINUX) - in_addr->s2_len = sizeof(struct sockaddr_in); -#endif - ss_addr_len = sizeof(struct sockaddr_in); - struct sockaddr_in *in_addr_ip4 = (struct sockaddr_in *) in_addr; - in_addr_ip4->sin_port = port; - in_addr_ip4->sin_addr.s_addr = addr->u_addr.ip4.addr; - } -#endif // CONFIG_LWIP_IPV4 -#ifdef CONFIG_LWIP_IPV6 - if (ip_protocol == MDNS_IP_PROTOCOL_V6 && addr->type == ESP_IPADDR_TYPE_V6) { - memset(in_addr, 0, sizeof(struct sockaddr_storage)); - in_addr->ss_family = PF_INET6; -#if !defined(CONFIG_IDF_TARGET_LINUX) - in_addr->s2_len = sizeof(struct sockaddr_in6); -#endif - ss_addr_len = sizeof(struct sockaddr_in6); - struct sockaddr_in6 *in_addr_ip6 = (struct sockaddr_in6 *)in_addr; - uint32_t *u32_addr = in_addr_ip6->sin6_addr.s6_addr32; - in_addr_ip6->sin6_port = port; - u32_addr[0] = addr->u_addr.ip6.addr[0]; - u32_addr[1] = addr->u_addr.ip6.addr[1]; - u32_addr[2] = addr->u_addr.ip6.addr[2]; - u32_addr[3] = addr->u_addr.ip6.addr[3]; - } -#endif // CONFIG_LWIP_IPV6 - return ss_addr_len; -} - -size_t _mdns_udp_pcb_write(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, const esp_ip_addr_t *ip, uint16_t port, uint8_t *data, size_t len) -{ - if (!(s_interfaces[tcpip_if].proto & (ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6))) { - return 0; - } - int sock = s_interfaces[tcpip_if].sock; - if (sock < 0) { - return 0; - } - struct sockaddr_storage in_addr; - size_t ss_size = espaddr_to_inet(ip, htons(port), ip_protocol, &in_addr); - if (!ss_size) { - ESP_LOGE(TAG, "espaddr_to_inet() failed: Mismatch of IP protocols"); - return 0; - } - ESP_LOGD(TAG, "[sock=%d]: Sending to IP %s port %d", sock, get_string_address(&in_addr), port); - ssize_t actual_len = sendto(sock, data, len, 0, (struct sockaddr *)&in_addr, ss_size); - if (actual_len < 0) { - ESP_LOGE(TAG, "[sock=%d]: _mdns_udp_pcb_write sendto() has failed\n errno=%d: %s", sock, errno, strerror(errno)); - } - return actual_len; -} - -static inline void inet_to_espaddr(const struct sockaddr_storage *in_addr, esp_ip_addr_t *addr, uint16_t *port) -{ -#ifdef CONFIG_LWIP_IPV4 - if (in_addr->ss_family == PF_INET) { - struct sockaddr_in *in_addr_ip4 = (struct sockaddr_in *)in_addr; - memset(addr, 0, sizeof(esp_ip_addr_t)); - *port = in_addr_ip4->sin_port; - addr->u_addr.ip4.addr = in_addr_ip4->sin_addr.s_addr; - addr->type = ESP_IPADDR_TYPE_V4; - } -#endif /* CONFIG_LWIP_IPV4 */ -#ifdef CONFIG_LWIP_IPV6 - if (in_addr->ss_family == PF_INET6) { - struct sockaddr_in6 *in_addr_ip6 = (struct sockaddr_in6 *)in_addr; - memset(addr, 0, sizeof(esp_ip_addr_t)); - *port = in_addr_ip6->sin6_port; - uint32_t *u32_addr = in_addr_ip6->sin6_addr.s6_addr32; - if (u32_addr[0] == 0 && u32_addr[1] == 0 && u32_addr[2] == esp_netif_htonl(0x0000FFFFUL)) { - // Mapped IPv4 address, convert directly to IPv4 - addr->type = ESP_IPADDR_TYPE_V4; - addr->u_addr.ip4.addr = u32_addr[3]; - } else { - addr->type = ESP_IPADDR_TYPE_V6; - addr->u_addr.ip6.addr[0] = u32_addr[0]; - addr->u_addr.ip6.addr[1] = u32_addr[1]; - addr->u_addr.ip6.addr[2] = u32_addr[2]; - addr->u_addr.ip6.addr[3] = u32_addr[3]; - } - } -#endif // CONFIG_LWIP_IPV6 -} - -void sock_recv_task(void *arg) -{ - while (s_run_sock_recv_task) { - struct timeval tv = { - .tv_sec = 1, - .tv_usec = 0, - }; - fd_set rfds; - FD_ZERO(&rfds); - int max_sock = -1; - for (int i = 0; i < MDNS_MAX_INTERFACES; i++) { - int sock = s_interfaces[i].sock; - if (sock >= 0) { - FD_SET(sock, &rfds); - max_sock = MAX(max_sock, sock); - } - } - if (max_sock < 0) { - vTaskDelay(pdMS_TO_TICKS(1000)); - ESP_LOGI(TAG, "No sock!"); - continue; - } - - int s = select(max_sock + 1, &rfds, NULL, NULL, &tv); - if (s < 0) { - ESP_LOGE(TAG, "Select failed. errno=%d: %s", errno, strerror(errno)); - break; - } else if (s > 0) { - for (int tcpip_if = 0; tcpip_if < MDNS_MAX_INTERFACES; tcpip_if++) { - int sock = s_interfaces[tcpip_if].sock; - if (sock < 0) { - continue; - } - if (FD_ISSET(sock, &rfds)) { - static char recvbuf[MDNS_MAX_PACKET_SIZE]; - uint16_t port = 0; - - struct sockaddr_storage raddr; // Large enough for both IPv4 or IPv6 - socklen_t socklen = sizeof(struct sockaddr_storage); - esp_ip_addr_t addr = {0}; - int len = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, - (struct sockaddr *) &raddr, &socklen); - if (len < 0) { - ESP_LOGE(TAG, "multicast recvfrom failed. errno=%d: %s", errno, strerror(errno)); - break; - } - ESP_LOGD(TAG, "[sock=%d]: Received from IP:%s", sock, get_string_address(&raddr)); - ESP_LOG_BUFFER_HEXDUMP(TAG, recvbuf, len, ESP_LOG_VERBOSE); - inet_to_espaddr(&raddr, &addr, &port); - - // Allocate the packet structure and pass it to the mdns main engine - mdns_rx_packet_t *packet = (mdns_rx_packet_t *) calloc(1, sizeof(mdns_rx_packet_t)); - struct pbuf *packet_pbuf = calloc(1, sizeof(struct pbuf)); - uint8_t *buf = malloc(len); - if (packet == NULL || packet_pbuf == NULL || buf == NULL ) { - free(buf); - free(packet_pbuf); - free(packet); - HOOK_MALLOC_FAILED; - ESP_LOGE(TAG, "Failed to allocate the mdns packet"); - continue; - } - memcpy(buf, recvbuf, len); - packet_pbuf->next = NULL; - packet_pbuf->payload = buf; - packet_pbuf->tot_len = len; - packet_pbuf->len = len; - packet->tcpip_if = tcpip_if; - packet->pb = packet_pbuf; - packet->src_port = ntohs(port); - memcpy(&packet->src, &addr, sizeof(esp_ip_addr_t)); - // TODO(IDF-3651): Add the correct dest addr -- for mdns to decide multicast/unicast - // Currently it's enough to assume the packet is multicast and mdns to check the source port of the packet - memset(&packet->dest, 0, sizeof(esp_ip_addr_t)); - packet->multicast = 1; - packet->dest.type = packet->src.type; - packet->ip_protocol = - packet->src.type == ESP_IPADDR_TYPE_V4 ? MDNS_IP_PROTOCOL_V4 : MDNS_IP_PROTOCOL_V6; - if (_mdns_send_rx_action(packet) != ESP_OK) { - ESP_LOGE(TAG, "_mdns_send_rx_action failed!"); - free(packet->pb->payload); - free(packet->pb); - free(packet); - } - } - } - } - } - vTaskDelete(NULL); -} - -static void mdns_networking_init(void) -{ - if (s_run_sock_recv_task == false) { - s_run_sock_recv_task = true; - xTaskCreate( sock_recv_task, "mdns recv task", 3 * 1024, NULL, 5, NULL ); - } -} - -static bool create_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - if (s_interfaces[tcpip_if].proto & (ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6)) { - return true; - } - int sock = s_interfaces[tcpip_if].sock; - esp_netif_t *netif = _mdns_get_esp_netif(tcpip_if); - if (sock < 0) { - sock = create_socket(netif); - } - if (sock < 0) { - ESP_LOGE(TAG, "Failed to create the socket!"); - return false; - } - int err = join_mdns_multicast_group(sock, netif, ip_protocol); - if (err < 0) { - ESP_LOGE(TAG, "Failed to add ipv6 multicast group for protocol %d", ip_protocol); - } - s_interfaces[tcpip_if].proto |= (ip_protocol == MDNS_IP_PROTOCOL_V4 ? PROTO_IPV4 : PROTO_IPV6); - s_interfaces[tcpip_if].sock = sock; - return true; -} - -esp_err_t _mdns_pcb_init(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - ESP_LOGI(TAG, "_mdns_pcb_init(tcpip_if=%lu, ip_protocol=%lu)", (unsigned long)tcpip_if, (unsigned long)ip_protocol); - if (!create_pcb(tcpip_if, ip_protocol)) { - return ESP_FAIL; - } - - mdns_networking_init(); - return ESP_OK; -} - -static int create_socket(esp_netif_t *netif) -{ -#ifdef CONFIG_LWIP_IPV6 - int sock = socket(PF_INET6, SOCK_DGRAM, 0); -#else - int sock = socket(PF_INET, SOCK_DGRAM, 0); -#endif - if (sock < 0) { - ESP_LOGE(TAG, "Failed to create socket. errno=%d: %s", errno, strerror(errno)); - return -1; - } - - int on = 1; - if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) ) < 0) { - ESP_LOGE(TAG, "Failed setsockopt() to set SO_REUSEADDR. errno=%d: %s\n", errno, strerror(errno)); - } - // Bind the socket to any address -#ifdef CONFIG_LWIP_IPV6 - struct sockaddr_in6 saddr = { INADDR_ANY }; - saddr.sin6_family = AF_INET6; - saddr.sin6_port = htons(5353); - bzero(&saddr.sin6_addr.s6_addr, sizeof(saddr.sin6_addr.s6_addr)); - int err = bind(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in6)); - if (err < 0) { - ESP_LOGE(TAG, "Failed to bind socket. errno=%d: %s", errno, strerror(errno)); - goto err; - } -#else - struct sockaddr_in saddr = { 0 }; - saddr.sin_family = AF_INET; - saddr.sin_port = htons(5353); - bzero(&saddr.sin_addr.s_addr, sizeof(saddr.sin_addr.s_addr)); - int err = bind(sock, (struct sockaddr *)&saddr, sizeof(struct sockaddr_in)); - if (err < 0) { - ESP_LOGE(TAG, "Failed to bind socket. errno=%d: %s", errno, strerror(errno)); - goto err; - } -#endif // CONFIG_LWIP_IPV6 - struct ifreq ifr; - esp_netif_get_netif_impl_name(netif, ifr.ifr_name); - int ret = setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(struct ifreq)); - if (ret < 0) { - ESP_LOGE(TAG, "\"%s\" Unable to bind socket to specified interface. errno=%d: %s", esp_netif_get_desc(netif), errno, strerror(errno)); - goto err; - } - - return sock; - -err: - close(sock); - return -1; -} - -#ifdef CONFIG_LWIP_IPV6 -static int socket_add_ipv6_multicast_group(int sock, esp_netif_t *netif) -{ - int ifindex = esp_netif_get_netif_impl_index(netif); - int err = setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifindex, sizeof(ifindex)); - if (err < 0) { - ESP_LOGE(TAG, "Failed to set IPV6_MULTICAST_IF. errno=%d: %s", errno, strerror(errno)); - return err; - } - - struct ipv6_mreq v6imreq = { 0 }; - esp_ip_addr_t multi_addr = ESP_IP6ADDR_INIT(0x000002ff, 0, 0, 0xfb000000); - memcpy(&v6imreq.ipv6mr_multiaddr, &multi_addr.u_addr.ip6.addr, sizeof(v6imreq.ipv6mr_multiaddr)); - v6imreq.ipv6mr_interface = ifindex; - err = setsockopt(sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &v6imreq, sizeof(struct ipv6_mreq)); - if (err < 0) { - ESP_LOGE(TAG, "Failed to set IPV6_ADD_MEMBERSHIP. errno=%d: %s", errno, strerror(errno)); - return err; - } - return err; -} -#endif // CONFIG_LWIP_IPV6 - -#ifdef CONFIG_LWIP_IPV4 -static int socket_add_ipv4_multicast_group(int sock, esp_netif_t *netif) -{ - struct ip_mreq imreq = { 0 }; - int err = 0; - esp_netif_ip_info_t ip_info = { 0 }; - - if (esp_netif_get_ip_info(netif, &ip_info) != ESP_OK) { - ESP_LOGE(TAG, "Failed to esp_netif_get_ip_info()"); - goto err; - } - imreq.imr_interface.s_addr = ip_info.ip.addr; - - esp_ip_addr_t multicast_addr = ESP_IP4ADDR_INIT(224, 0, 0, 251); - imreq.imr_multiaddr.s_addr = multicast_addr.u_addr.ip4.addr; - - err = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &imreq, sizeof(struct ip_mreq)); - if (err < 0) { - ESP_LOGE(TAG, "[sock=%d] Failed to set IP_ADD_MEMBERSHIP. errno=%d: %s", sock, errno, strerror(errno)); - goto err; - } - -err: - return err; -} -#endif // CONFIG_LWIP_IPV4 - -static int join_mdns_multicast_group(int sock, esp_netif_t *netif, mdns_ip_protocol_t ip_protocol) -{ -#ifdef CONFIG_LWIP_IPV4 - if (ip_protocol == MDNS_IP_PROTOCOL_V4) { - return socket_add_ipv4_multicast_group(sock, netif); - } -#endif // CONFIG_LWIP_IPV4 -#ifdef CONFIG_LWIP_IPV6 - if (ip_protocol == MDNS_IP_PROTOCOL_V6) { - return socket_add_ipv6_multicast_group(sock, netif); - } -#endif // CONFIG_LWIP_IPV6 - return -1; -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/private_include/mdns_networking.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/private_include/mdns_networking.h deleted file mode 100644 index 83cbe90..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/private_include/mdns_networking.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef ESP_MDNS_NETWORKING_H_ -#define ESP_MDNS_NETWORKING_H_ - -/* - * MDNS Server Networking -- private include - * - */ -#include "mdns.h" -#include "mdns_private.h" - - -/** - * @brief Queue RX packet action - */ -esp_err_t _mdns_send_rx_action(mdns_rx_packet_t *packet); - -bool mdns_is_netif_ready(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol); - -/** - * @brief Start PCB - */ -esp_err_t _mdns_pcb_init(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol); - -/** - * @brief Stop PCB - */ -esp_err_t _mdns_pcb_deinit(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol); - -/** - * @brief send packet over UDP - * - * @param server The server - * @param data byte array containing the packet data - * @param len length of the packet data - * - * @return length of sent packet or 0 on error - */ -size_t _mdns_udp_pcb_write(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol, const esp_ip_addr_t *ip, uint16_t port, uint8_t *data, size_t len); - -/** - * @brief Gets data pointer to the mDNS packet - */ -void *_mdns_get_packet_data(mdns_rx_packet_t *packet); - -/** - * @brief Gets data length of c - */ -size_t _mdns_get_packet_len(mdns_rx_packet_t *packet); - -/** - * @brief Free the mDNS packet - */ -void _mdns_packet_free(mdns_rx_packet_t *packet); - -#endif /* ESP_MDNS_NETWORKING_H_ */ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/private_include/mdns_private.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/private_include/mdns_private.h deleted file mode 100644 index 56d76b2..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/private_include/mdns_private.h +++ /dev/null @@ -1,477 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef MDNS_PRIVATE_H_ -#define MDNS_PRIVATE_H_ - -#include "sdkconfig.h" -#include "mdns.h" -#include "esp_task.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/queue.h" -#include "freertos/semphr.h" -#include "esp_timer.h" -#include "esp_system.h" - -#ifdef CONFIG_MDNS_ENABLE_DEBUG_PRINTS -#define MDNS_ENABLE_DEBUG -#define _mdns_dbg_printf(...) printf(__VA_ARGS__) -#endif - -/** Number of predefined interfaces */ -#ifndef CONFIG_MDNS_PREDEF_NETIF_STA -#define CONFIG_MDNS_PREDEF_NETIF_STA 0 -#endif -#ifndef CONFIG_MDNS_PREDEF_NETIF_AP -#define CONFIG_MDNS_PREDEF_NETIF_AP 0 -#endif -#ifndef CONFIG_MDNS_PREDEF_NETIF_ETH -#define CONFIG_MDNS_PREDEF_NETIF_ETH 0 -#endif -#define MDNS_MAX_PREDEF_INTERFACES (CONFIG_MDNS_PREDEF_NETIF_STA + CONFIG_MDNS_PREDEF_NETIF_AP + CONFIG_MDNS_PREDEF_NETIF_ETH) - -#ifdef CONFIG_LWIP_IPV6_NUM_ADDRESSES -#define NETIF_IPV6_MAX_NUMS CONFIG_LWIP_IPV6_NUM_ADDRESSES -#else -#define NETIF_IPV6_MAX_NUMS 3 -#endif - -#if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 0) -/* CONFIG_LWIP_IPV4 was introduced in IDF v5.1 */ -/* For IDF v5.0, set CONFIG_LWIP_IPV4 to 1 by default */ -#ifndef CONFIG_LWIP_IPV4 -#define CONFIG_LWIP_IPV4 1 -#endif // CONFIG_LWIP_IPV4 -#endif // ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 1, 0) - -/** Number of configured interfaces */ -#if MDNS_MAX_PREDEF_INTERFACES > CONFIG_MDNS_MAX_INTERFACES -#warning Number of configured interfaces is less then number of predefined interfaces. Please update CONFIG_MDNS_MAX_INTERFACES. -#define MDNS_MAX_INTERFACES (MDNS_MAX_PREDEF_INTERFACES) -#else -#define MDNS_MAX_INTERFACES (CONFIG_MDNS_MAX_INTERFACES) -#endif - -/** The maximum number of services */ -#define MDNS_MAX_SERVICES CONFIG_MDNS_MAX_SERVICES - -#define MDNS_ANSWER_PTR_TTL 4500 -#define MDNS_ANSWER_TXT_TTL 4500 -#define MDNS_ANSWER_SRV_TTL 120 -#define MDNS_ANSWER_A_TTL 120 -#define MDNS_ANSWER_AAAA_TTL 120 - -#define MDNS_FLAGS_QUERY_REPSONSE 0x8000 -#define MDNS_FLAGS_AUTHORITATIVE 0x0400 -#define MDNS_FLAGS_QR_AUTHORITATIVE (MDNS_FLAGS_QUERY_REPSONSE | MDNS_FLAGS_AUTHORITATIVE) -#define MDNS_FLAGS_DISTRIBUTED 0x0200 - -#define MDNS_NAME_REF 0xC000 - -//custom type! only used by this implementation -//to help manage service discovery handling -#define MDNS_TYPE_SDPTR 0x0032 - -#define MDNS_CLASS_IN 0x0001 -#define MDNS_CLASS_ANY 0x00FF -#define MDNS_CLASS_IN_FLUSH_CACHE 0x8001 - -#define MDNS_ANSWER_ALL 0x3F -#define MDNS_ANSWER_PTR 0x08 -#define MDNS_ANSWER_TXT 0x04 -#define MDNS_ANSWER_SRV 0x02 -#define MDNS_ANSWER_A 0x01 -#define MDNS_ANSWER_AAAA 0x10 -#define MDNS_ANSWER_NSEC 0x20 -#define MDNS_ANSWER_SDPTR 0x80 -#define MDNS_ANSWER_AAAA_SIZE 16 - -#define MDNS_SERVICE_PORT 5353 // UDP port that the server runs on -#define MDNS_SERVICE_STACK_DEPTH CONFIG_MDNS_TASK_STACK_SIZE -#define MDNS_TASK_PRIORITY CONFIG_MDNS_TASK_PRIORITY -#if (MDNS_TASK_PRIORITY > ESP_TASK_PRIO_MAX) -#error "mDNS task priority is higher than ESP_TASK_PRIO_MAX" -#elif (MDNS_TASK_PRIORITY > ESP_TASKD_EVENT_PRIO) -#warning "mDNS task priority is higher than ESP_TASKD_EVENT_PRIO, mDNS library might not work correctly" -#endif -#define MDNS_TASK_AFFINITY CONFIG_MDNS_TASK_AFFINITY -#define MDNS_SERVICE_ADD_TIMEOUT_MS CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS - -#define MDNS_PACKET_QUEUE_LEN 16 // Maximum packets that can be queued for parsing -#define MDNS_ACTION_QUEUE_LEN CONFIG_MDNS_ACTION_QUEUE_LEN // Maximum actions pending to the server -#define MDNS_TXT_MAX_LEN 1024 // Maximum string length of text data in TXT record -#if defined(CONFIG_LWIP_IPV6) && defined(CONFIG_MDNS_RESPOND_REVERSE_QUERIES) -#define MDNS_NAME_MAX_LEN (64+4) // Need to account for IPv6 reverse queries (64 char address + ".ip6" ) -#else -#define MDNS_NAME_MAX_LEN 64 // Maximum string length of hostname, instance, service and proto -#endif -#define MDNS_NAME_BUF_LEN (MDNS_NAME_MAX_LEN+1) // Maximum char buffer size to hold hostname, instance, service or proto -#define MDNS_MAX_PACKET_SIZE 1460 // Maximum size of mDNS outgoing packet - -#define MDNS_HEAD_LEN 12 -#define MDNS_HEAD_ID_OFFSET 0 -#define MDNS_HEAD_FLAGS_OFFSET 2 -#define MDNS_HEAD_QUESTIONS_OFFSET 4 -#define MDNS_HEAD_ANSWERS_OFFSET 6 -#define MDNS_HEAD_SERVERS_OFFSET 8 -#define MDNS_HEAD_ADDITIONAL_OFFSET 10 - -#define MDNS_TYPE_OFFSET 0 -#define MDNS_CLASS_OFFSET 2 -#define MDNS_TTL_OFFSET 4 -#define MDNS_LEN_OFFSET 8 -#define MDNS_DATA_OFFSET 10 - -#define MDNS_SRV_PRIORITY_OFFSET 0 -#define MDNS_SRV_WEIGHT_OFFSET 2 -#define MDNS_SRV_PORT_OFFSET 4 -#define MDNS_SRV_FQDN_OFFSET 6 - -#define MDNS_TIMER_PERIOD_US (CONFIG_MDNS_TIMER_PERIOD_MS*1000) - -#define MDNS_SERVICE_LOCK() xSemaphoreTake(_mdns_service_semaphore, portMAX_DELAY) -#define MDNS_SERVICE_UNLOCK() xSemaphoreGive(_mdns_service_semaphore) - -#define queueToEnd(type, queue, item) \ - if (!queue) { \ - queue = item; \ - } else { \ - type * _q = queue; \ - while (_q->next) { _q = _q->next; } \ - _q->next = item; \ - } - -#define queueDetach(type, queue, item) \ - if (queue) { \ - if (queue == item) { \ - queue = queue->next; \ - } else { \ - type * _q = queue; \ - while (_q->next && _q->next != item) { \ - _q = _q->next; \ - } \ - if (_q->next == item) { \ - _q->next = item->next; \ - item->next = NULL; \ - } \ - } \ - } - -#define queueFree(type, queue) while (queue) { type * _q = queue; queue = queue->next; free(_q); } - -#define PCB_STATE_IS_PROBING(s) (s->state > PCB_OFF && s->state < PCB_ANNOUNCE_1) -#define PCB_STATE_IS_ANNOUNCING(s) (s->state > PCB_PROBE_3 && s->state < PCB_RUNNING) -#define PCB_STATE_IS_RUNNING(s) (s->state == PCB_RUNNING) - -#ifndef HOOK_MALLOC_FAILED -#define HOOK_MALLOC_FAILED ESP_LOGE(TAG, "Cannot allocate memory (line: %d, free heap: %" PRIu32 " bytes)", __LINE__, esp_get_free_heap_size()); -#endif - -typedef size_t mdns_if_t; - -typedef enum { - PCB_OFF, PCB_DUP, PCB_INIT, - PCB_PROBE_1, PCB_PROBE_2, PCB_PROBE_3, - PCB_ANNOUNCE_1, PCB_ANNOUNCE_2, PCB_ANNOUNCE_3, - PCB_RUNNING -} mdns_pcb_state_t; - -typedef enum { - MDNS_ANSWER, MDNS_NS, MDNS_EXTRA -} mdns_parsed_record_type_t; - -typedef enum { - ACTION_SYSTEM_EVENT, - ACTION_HOSTNAME_SET, - ACTION_INSTANCE_SET, - ACTION_SERVICE_ADD, - ACTION_SERVICE_DEL, - ACTION_SERVICE_INSTANCE_SET, - ACTION_SERVICE_PORT_SET, - ACTION_SERVICE_TXT_REPLACE, - ACTION_SERVICE_TXT_SET, - ACTION_SERVICE_TXT_DEL, - ACTION_SERVICE_SUBTYPE_ADD, - ACTION_SERVICES_CLEAR, - ACTION_SEARCH_ADD, - ACTION_SEARCH_SEND, - ACTION_SEARCH_END, - ACTION_TX_HANDLE, - ACTION_RX_HANDLE, - ACTION_TASK_STOP, - ACTION_DELEGATE_HOSTNAME_ADD, - ACTION_DELEGATE_HOSTNAME_REMOVE, - ACTION_DELEGATE_HOSTNAME_SET_ADDR, - ACTION_MAX -} mdns_action_type_t; - - -typedef struct { - uint16_t id; - uint16_t flags; - uint16_t questions; //QDCOUNT - uint16_t answers; //ANCOUNT - uint16_t servers; //NSCOUNT - uint16_t additional;//ARCOUNT -} mdns_header_t; - -typedef struct { - char host[MDNS_NAME_BUF_LEN]; // hostname for A/AAAA records, instance name for SRV records - char service[MDNS_NAME_BUF_LEN]; - char proto[MDNS_NAME_BUF_LEN]; - char domain[MDNS_NAME_BUF_LEN]; - uint8_t parts; - uint8_t sub; - bool invalid; -} mdns_name_t; - -typedef struct mdns_parsed_question_s { - struct mdns_parsed_question_s *next; - uint16_t type; - bool sub; - bool unicast; - char *host; - char *service; - char *proto; - char *domain; -} mdns_parsed_question_t; - -typedef struct mdns_parsed_record_s { - struct mdns_parsed_record_s *next; - mdns_parsed_record_type_t record_type; - uint16_t type; - uint16_t clas; - uint8_t flush; - uint32_t ttl; - char *host; - char *service; - char *proto; - char *domain; - uint16_t data_len; - uint8_t *data; -} mdns_parsed_record_t; - -typedef struct { - mdns_if_t tcpip_if; - mdns_ip_protocol_t ip_protocol; - esp_ip_addr_t src; - uint16_t src_port; - uint8_t multicast; - uint8_t authoritative; - uint8_t probe; - uint8_t discovery; - uint8_t distributed; - mdns_parsed_question_t *questions; - mdns_parsed_record_t *records; - uint16_t id; -} mdns_parsed_packet_t; - -typedef struct { - mdns_if_t tcpip_if; - mdns_ip_protocol_t ip_protocol; - struct pbuf *pb; - esp_ip_addr_t src; - esp_ip_addr_t dest; - uint16_t src_port; - uint8_t multicast; -} mdns_rx_packet_t; - -typedef struct mdns_txt_linked_item_s { - const char *key; /*!< item key name */ - char *value; /*!< item value string */ - uint8_t value_len; /*!< item value length */ - struct mdns_txt_linked_item_s *next; /*!< next result, or NULL for the last result in the list */ -} mdns_txt_linked_item_t; - -typedef struct mdns_subtype_s { - const char *subtype; /*!< subtype */ - struct mdns_subtype_s *next; /*!< next result, or NULL for the last result in the list */ -} mdns_subtype_t; - -typedef struct { - const char *instance; - const char *service; - const char *proto; - const char *hostname; - uint16_t priority; - uint16_t weight; - uint16_t port; - mdns_txt_linked_item_t *txt; - mdns_subtype_t *subtype; -} mdns_service_t; - -typedef struct mdns_srv_item_s { - struct mdns_srv_item_s *next; - mdns_service_t *service; -} mdns_srv_item_t; - -typedef struct mdns_out_question_s { - struct mdns_out_question_s *next; - uint16_t type; - bool unicast; - const char *host; - const char *service; - const char *proto; - const char *domain; - bool own_dynamic_memory; -} mdns_out_question_t; - -typedef struct mdns_host_item_t { - const char *hostname; - mdns_ip_addr_t *address_list; - struct mdns_host_item_t *next; -} mdns_host_item_t; - -typedef struct mdns_out_answer_s { - struct mdns_out_answer_s *next; - uint16_t type; - uint8_t bye; - uint8_t flush; - mdns_service_t *service; - mdns_host_item_t *host; - const char *custom_instance; - const char *custom_service; - const char *custom_proto; -} mdns_out_answer_t; - -typedef struct mdns_tx_packet_s { - struct mdns_tx_packet_s *next; - uint32_t send_at; - mdns_if_t tcpip_if; - mdns_ip_protocol_t ip_protocol; - esp_ip_addr_t dst; - uint16_t port; - uint16_t flags; - uint8_t distributed; - mdns_out_question_t *questions; - mdns_out_answer_t *answers; - mdns_out_answer_t *servers; - mdns_out_answer_t *additional; - bool queued; - uint16_t id; -} mdns_tx_packet_t; - -typedef struct { - mdns_pcb_state_t state; - mdns_srv_item_t **probe_services; - uint8_t probe_services_len; - uint8_t probe_ip; - uint8_t probe_running; - uint16_t failed_probes; -} mdns_pcb_t; - -typedef enum { - SEARCH_OFF, - SEARCH_INIT, - SEARCH_RUNNING, - SEARCH_MAX -} mdns_search_once_state_t; - -typedef struct mdns_search_once_s { - struct mdns_search_once_s *next; - - mdns_search_once_state_t state; - uint32_t started_at; - uint32_t sent_at; - uint32_t timeout; - mdns_query_notify_t notifier; - SemaphoreHandle_t done_semaphore; - uint16_t type; - bool unicast; - uint8_t max_results; - uint8_t num_results; - char *instance; - char *service; - char *proto; - mdns_result_t *result; -} mdns_search_once_t; - -typedef struct mdns_server_s { - struct { - mdns_pcb_t pcbs[MDNS_IP_PROTOCOL_MAX]; - } interfaces[MDNS_MAX_INTERFACES]; - const char *hostname; - const char *instance; - mdns_srv_item_t *services; - QueueHandle_t action_queue; - SemaphoreHandle_t action_sema; - mdns_tx_packet_t *tx_queue_head; - mdns_search_once_t *search_once; - esp_timer_handle_t timer_handle; -} mdns_server_t; - -typedef struct { - mdns_action_type_t type; - union { - struct { - char *hostname; - } hostname_set; - char *instance; - struct { - mdns_if_t interface; - mdns_event_actions_t event_action; - } sys_event; - struct { - mdns_srv_item_t *service; - } srv_add; - struct { - mdns_srv_item_t *service; - } srv_del; - struct { - mdns_srv_item_t *service; - char *instance; - } srv_instance; - struct { - mdns_srv_item_t *service; - uint16_t port; - } srv_port; - struct { - mdns_srv_item_t *service; - mdns_txt_linked_item_t *txt; - } srv_txt_replace; - struct { - mdns_srv_item_t *service; - char *key; - char *value; - uint8_t value_len; - } srv_txt_set; - struct { - mdns_srv_item_t *service; - char *key; - } srv_txt_del; - struct { - mdns_srv_item_t *service; - char *subtype; - } srv_subtype_add; - struct { - mdns_search_once_t *search; - } search_add; - struct { - mdns_tx_packet_t *packet; - } tx_handle; - struct { - mdns_rx_packet_t *packet; - } rx_handle; - struct { - const char *hostname; - mdns_ip_addr_t *address_list; - } delegate_hostname; - } data; -} mdns_action_t; - -/* - * @brief Convert mnds if to esp-netif handle - * - * @param tcpip_if mdns supported interface as internal enum - * - * @return - * - ptr to esp-netif on success - * - NULL if no available netif for current interface index - */ -esp_netif_t *_mdns_get_esp_netif(mdns_if_t tcpip_if); - - -#endif /* MDNS_PRIVATE_H_ */ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/CMakeLists.txt deleted file mode 100644 index 79ac7b3..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.5) - -set(EXTRA_COMPONENT_DIRS "../.." "../../../../common_components/linux_compat") - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -set(COMPONENTS main esp_netif_linux) -project(mdns_host) - -# Enable sanitizers for mdns implementation -idf_component_get_property(mdns mdns COMPONENT_LIB) -target_link_options(${mdns} INTERFACE -fsanitize=address -fsanitize=undefined) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/README.md b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/README.md deleted file mode 100644 index 4953f0e..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Setup dummy network interfaces - -Note: Set two addresses so we could use one as source and another as destination -``` -sudo ip link add eth2 type dummy -sudo ip addr add 192.168.1.200/24 dev eth2 -sudo ip addr add 192.168.1.201/24 dev eth2 -sudo ip link set eth2 up -sudo ifconfig eth2 multicast -``` - -# Dig on a specified interface - -``` -dig +short -b 192.168.1.200 -p 5353 @224.0.0.251 myesp.local -``` - -or a reverse query: -``` -dig +short -b 192.168.2.200 -p 5353 @224.0.0.251 -x 192.168.1.200 -``` - -# Run avahi to browse services - -Avahi needs the netif to have the "multicast" flag set - -```bash -david@david-comp:~/esp/idf (feature/mdns_networking_socket)$ avahi-browse -a -r -p -+;eth2;IPv6;myesp-service2;Web Site;local -+;eth2;IPv4;myesp-service2;Web Site;local -=;eth2;IPv6;myesp-service2;Web Site;local;myesp.local;192.168.1.200;80;"board=esp32" "u=user" "p=password" -=;eth2;IPv4;myesp-service2;Web Site;local;myesp.local;192.168.1.200;80;"board=esp32" "u=user" "p=password" -``` diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt deleted file mode 100644 index 44f6b4b..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -idf_component_register(SRCS esp_netif_linux.c - INCLUDE_DIRS include $ENV{IDF_PATH}/components/esp_netif/include) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/Kconfig b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/Kconfig deleted file mode 100644 index 3b3c309..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/Kconfig +++ /dev/null @@ -1,15 +0,0 @@ -menu "LWIP-MOCK-CONFIG" - - config LWIP_IPV6 - bool "Enable IPv6" - default y - help - Enable/disable IPv6 - - config LWIP_IPV4 - bool "Enable IPv4" - default y - help - Enable/disable IPv4 - -endmenu diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c deleted file mode 100644 index 6783723..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/esp_netif_linux.c +++ /dev/null @@ -1,175 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include - -#include "esp_netif.h" -#include "esp_err.h" -#include //strlen -#include -#include //inet_addr -#include -#include -#include -#include "esp_netif_types.h" - -#define MAX_NETIFS 4 - -static esp_netif_t *s_netif_list[MAX_NETIFS] = { 0 }; - -struct esp_netif_obj { - const char *if_key; - const char *if_desc; -}; - -esp_netif_t *esp_netif_get_handle_from_ifkey(const char *if_key) -{ - for (int i = 0; i < MAX_NETIFS; ++i) { - if (s_netif_list[i] && strcmp(s_netif_list[i]->if_key, if_key) == 0) { - return s_netif_list[i]; - } - } - return NULL; -} - -esp_err_t esp_netif_get_ip_info(esp_netif_t *esp_netif, esp_netif_ip_info_t *ip_info) -{ - if (esp_netif == NULL) { - return ESP_ERR_INVALID_STATE; - } - struct ifaddrs *addrs, *tmp; - getifaddrs(&addrs); - tmp = addrs; - - while (tmp) { - if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_INET) { - char addr[20]; - struct sockaddr_in *pAddr = (struct sockaddr_in *) tmp->ifa_addr; - inet_ntop(AF_INET, &pAddr->sin_addr, addr, sizeof(addr) ); - if (strcmp(esp_netif->if_desc, tmp->ifa_name) == 0) { - memcpy(&ip_info->ip.addr, &pAddr->sin_addr, 4); - } - } - tmp = tmp->ifa_next; - } - freeifaddrs(addrs); - return ESP_OK; -} - -esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status) -{ - return ESP_OK; -} - -int esp_netif_get_all_ip6(esp_netif_t *esp_netif, esp_ip6_addr_t if_ip6[]) -{ - if (esp_netif == NULL) { - return 0; - } - struct ifaddrs *addrs, *tmp; - int addr_count = 0; - getifaddrs(&addrs); - tmp = addrs; - - while (tmp) { - if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_INET6) { - struct sockaddr_in6 *pAddr = (struct sockaddr_in6 *)tmp->ifa_addr; - if (strcmp(esp_netif->if_desc, tmp->ifa_name) == 0) { - memcpy(&if_ip6[addr_count++], &pAddr->sin6_addr, 4 * 4); - } - } - tmp = tmp->ifa_next; - } - - freeifaddrs(addrs); - return addr_count; -} - -esp_err_t esp_netif_get_ip6_linklocal(esp_netif_t *esp_netif, esp_ip6_addr_t *if_ip6) -{ - if (esp_netif == NULL) { - return ESP_ERR_INVALID_STATE; - } - struct ifaddrs *addrs, *tmp; - getifaddrs(&addrs); - tmp = addrs; - - while (tmp) { - if (tmp->ifa_addr && tmp->ifa_addr->sa_family == AF_INET6) { - char addr[64]; - struct sockaddr_in6 *pAddr = (struct sockaddr_in6 *)tmp->ifa_addr; - inet_ntop(AF_INET6, &pAddr->sin6_addr, addr, sizeof(addr) ); - if (strcmp(esp_netif->if_desc, tmp->ifa_name) == 0) { - printf("AF_INET6: %s: %s\n", tmp->ifa_name, addr); - memcpy(if_ip6->addr, &pAddr->sin6_addr, 4 * 4); - break; - } - } - tmp = tmp->ifa_next; - } - - freeifaddrs(addrs); - return ESP_OK; -} - - -int esp_netif_get_netif_impl_index(esp_netif_t *esp_netif) -{ - if (esp_netif == NULL) { - return -1; - } - uint32_t interfaceIndex = if_nametoindex(esp_netif->if_desc); - return interfaceIndex; -} - -esp_err_t esp_netif_get_netif_impl_name(esp_netif_t *esp_netif, char *name) -{ - if (esp_netif == NULL) { - return ESP_ERR_INVALID_STATE; - } - strcpy(name, esp_netif->if_desc); - return ESP_OK; -} - -const char *esp_netif_get_desc(esp_netif_t *esp_netif) -{ - if (esp_netif == NULL) { - return NULL; - } - return esp_netif->if_desc; -} - -esp_netif_t *esp_netif_new(const esp_netif_config_t *config) -{ - if (esp_netif_get_handle_from_ifkey(config->base->if_key)) { - return NULL; - } - esp_netif_t *netif = calloc(1, sizeof(struct esp_netif_obj)); - if (netif) { - netif->if_desc = config->base->if_desc; - netif->if_key = config->base->if_key; - } - - for (int i = 0; i < MAX_NETIFS; ++i) { - if (s_netif_list[i] == NULL) { - s_netif_list[i] = netif; - break; - } - } - - return netif; -} - -void esp_netif_destroy(esp_netif_t *esp_netif) -{ - for (int i = 0; i < MAX_NETIFS; ++i) { - if (s_netif_list[i] == esp_netif) { - s_netif_list[i] = NULL; - break; - } - } - free(esp_netif); -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/include/esp_wifi_types.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/include/esp_wifi_types.h deleted file mode 100644 index e878e27..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/include/esp_wifi_types.h +++ /dev/null @@ -1,7 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once -#include "esp_event.h" diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/include/machine/endian.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/include/machine/endian.h deleted file mode 100644 index 488bce0..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/components/esp_netif_linux/include/machine/endian.h +++ /dev/null @@ -1,8 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#pragma once - -#include_next "endian.h" diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/CMakeLists.txt deleted file mode 100644 index 8d5202d..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/CMakeLists.txt +++ /dev/null @@ -1,4 +0,0 @@ -idf_component_register(SRCS "main.c" - INCLUDE_DIRS - "." - REQUIRES mdns) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/Kconfig.projbuild b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/Kconfig.projbuild deleted file mode 100644 index f19001f..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/Kconfig.projbuild +++ /dev/null @@ -1,15 +0,0 @@ -menu "Test Configuration" - - config TEST_HOSTNAME - string "mDNS Hostname" - default "esp32-mdns" - help - mDNS Hostname for example to use - - config TEST_NETIF_NAME - string "Network interface name" - default "eth2" - help - Name/ID if the network interface on which we run the mDNS host test - -endmenu diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/main.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/main.c deleted file mode 100644 index 0a1fa25..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/main/main.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#include -#include "mdns.h" -#include "esp_log.h" -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" - -static const char *TAG = "mdns-test"; - -static void query_mdns_host(const char *host_name) -{ - ESP_LOGI(TAG, "Query A: %s.local", host_name); - - struct esp_ip4_addr addr; - addr.addr = 0; - - esp_err_t err = mdns_query_a(host_name, 2000, &addr); - if (err) { - if (err == ESP_ERR_NOT_FOUND) { - ESP_LOGW(TAG, "%x: Host was not found!", (err)); - return; - } - ESP_LOGE(TAG, "Query Failed: %x", (err)); - return; - } - - ESP_LOGI(TAG, "Query A: %s.local resolved to: " IPSTR, host_name, IP2STR(&addr)); -} - -int main(int argc, char *argv[]) -{ - - setvbuf(stdout, NULL, _IONBF, 0); - const esp_netif_inherent_config_t base_cg = { .if_key = "WIFI_STA_DEF", .if_desc = CONFIG_TEST_NETIF_NAME }; - esp_netif_config_t cfg = { .base = &base_cg }; - esp_netif_t *sta = esp_netif_new(&cfg); - ESP_ERROR_CHECK(mdns_init()); - ESP_ERROR_CHECK(mdns_hostname_set(CONFIG_TEST_HOSTNAME)); - ESP_LOGI(TAG, "mdns hostname set to: [%s]", CONFIG_TEST_HOSTNAME); - ESP_ERROR_CHECK(mdns_register_netif(sta)); - ESP_ERROR_CHECK(mdns_netif_action(sta, MDNS_EVENT_ENABLE_IP4 | MDNS_EVENT_IP4_REVERSE_LOOKUP | MDNS_EVENT_IP6_REVERSE_LOOKUP)); - -#ifdef REGISTER_SERVICE - //set default mDNS instance name - mdns_instance_name_set("myesp-inst"); - //structure with TXT records - mdns_txt_item_t serviceTxtData[3] = { - {"board", "esp32"}, - {"u", "user"}, - {"p", "password"} - }; - vTaskDelay(pdMS_TO_TICKS(10000)); - ESP_ERROR_CHECK(mdns_service_add("myesp-service2", "_http", "_tcp", 80, serviceTxtData, 3)); -#endif - vTaskDelay(pdMS_TO_TICKS(10000)); - query_mdns_host("david-work"); - vTaskDelay(pdMS_TO_TICKS(1000)); - esp_netif_destroy(sta); - mdns_free(); - ESP_LOGI(TAG, "Exit"); - return 0; -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/sdkconfig.defaults b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/sdkconfig.defaults deleted file mode 100644 index 621659f..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/host_test/sdkconfig.defaults +++ /dev/null @@ -1,9 +0,0 @@ -CONFIG_IDF_TARGET="linux" -CONFIG_MDNS_NETWORKING_SOCKET=y -CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES=y -CONFIG_TEST_NETIF_NAME="eth0" -CONFIG_TEST_HOSTNAME="myesp" -CONFIG_MDNS_PREDEF_NETIF_STA=n -CONFIG_MDNS_PREDEF_NETIF_AP=n -CONFIG_MDNS_ENABLE_DEBUG_PRINTS=y -CONFIG_MDNS_RESPOND_REVERSE_QUERIES=y diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/CMakeLists.txt deleted file mode 100644 index d658451..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# The following four lines of boilerplate have to be in your project's CMakeLists -# in this exact order for cmake to work correctly -cmake_minimum_required(VERSION 3.5) - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) - -project(fuzz_test_update) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/Makefile b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/Makefile deleted file mode 100644 index 6f45edb..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -TEST_NAME=test -FUZZ=afl-fuzz -COMPONENTS_DIR=$(IDF_PATH)/components -COMPILER_ICLUDE_DIR=$(shell echo `which xtensa-esp32-elf-gcc | xargs dirname | xargs dirname`/xtensa-esp32-elf) - -CFLAGS=-g -Wno-unused-value -Wno-missing-declarations -Wno-pointer-bool-conversion -Wno-macro-redefined -Wno-int-to-void-pointer-cast -DHOOK_MALLOC_FAILED -DESP_EVENT_H_ -D__ESP_LOG_H__ \ - -I. -I../.. -I../../include -I../../private_include -I ./build/config \ - -I$(COMPONENTS_DIR) \ - -I$(COMPONENTS_DIR)/driver/include \ - -I$(COMPONENTS_DIR)/esp_common/include \ - -I$(COMPONENTS_DIR)/esp_event/include \ - -I$(COMPONENTS_DIR)/esp_eth/include \ - -I$(COMPONENTS_DIR)/esp_hw_support/include \ - -I$(COMPONENTS_DIR)/esp_netif/include \ - -I$(COMPONENTS_DIR)/esp_netif/private_include \ - -I$(COMPONENTS_DIR)/esp_netif/lwip \ - -I$(COMPONENTS_DIR)/esp_rom/include \ - -I$(COMPONENTS_DIR)/esp_system/include \ - -I$(COMPONENTS_DIR)/esp_timer/include \ - -I$(COMPONENTS_DIR)/esp_wifi/include \ - -I$(COMPONENTS_DIR)/freertos/FreeRTOS-Kernel \ - -I$(COMPONENTS_DIR)/freertos/FreeRTOS-Kernel/include \ - -I$(COMPONENTS_DIR)/freertos/esp_additions/include/freertos \ - -I$(COMPONENTS_DIR)/hal/include \ - -I$(COMPONENTS_DIR)/hal/esp32/include \ - -I$(COMPONENTS_DIR)/heap/include \ - -I$(COMPONENTS_DIR)/log/include \ - -I$(COMPONENTS_DIR)/lwip/lwip/src/include \ - -I$(COMPONENTS_DIR)/linux/include \ - -I$(COMPONENTS_DIR)/lwip/port/esp32/include \ - -I$(COMPONENTS_DIR)/lwip/lwip/src/include/lwip/apps \ - -I$(COMPONENTS_DIR)/soc/include \ - -I$(COMPONENTS_DIR)/soc/esp32/include \ - -I$(COMPONENTS_DIR)/soc/src/esp32/include \ - -I$(COMPONENTS_DIR)/xtensa/include \ - -I$(COMPONENTS_DIR)/xtensa/esp32/include \ - -I$(COMPILER_ICLUDE_DIR)/include - - -MDNS_C_DEPENDENCY_INJECTION=-include mdns_di.h -ifeq ($(MDNS_NO_SERVICES),on) - CFLAGS+=-DMDNS_NO_SERVICES -endif - -ifeq ($(INSTR),off) - CC=gcc - CFLAGS+=-DINSTR_IS_OFF - TEST_NAME=test_sim -else - CC=afl-clang-fast -endif -CPP=$(CC) -LD=$(CC) -OBJECTS=esp32_mock.o mdns.o test.o esp_netif_mock.o - -OS := $(shell uname) -ifeq ($(OS),Darwin) - LDLIBS= -else - LDLIBS=-lbsd - CFLAGS+=-DUSE_BSD_STRING -endif - -all: $(TEST_NAME) - -%.o: %.c - @echo "[CC] $<" - @$(CC) $(CFLAGS) -c $< -o $@ - -mdns.o: ../../mdns.c - @echo "[CC] $<" - @$(CC) $(CFLAGS) -include mdns_mock.h $(MDNS_C_DEPENDENCY_INJECTION) -c $< -o $@ - -$(TEST_NAME): $(OBJECTS) - @echo "[LD] $@" - @$(LD) $(OBJECTS) -o $@ $(LDLIBS) - -fuzz: $(TEST_NAME) - @$(FUZZ) -i "in" -o "out" -- ./$(TEST_NAME) - -clean: - @rm -rf *.o *.SYM $(TEST_NAME) out diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/README.md b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/README.md deleted file mode 100644 index e22a896..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/README.md +++ /dev/null @@ -1,80 +0,0 @@ -## Introduction -This test uses [american fuzzy lop](http://lcamtuf.coredump.cx/afl/) to mangle real mdns packets and look for exceptions caused by the parser. - -A few actual packets are collected and exported as bins in the `in` folder, which is then passed as input to AFL when testing. The setup procedure for the test includes all possible services and scenarios that could be used with the given input packets.The output of the parser before fuzzing can be found in [input_packets.txt](input_packets.txt) - -## Building and running the tests using AFL -To build and run the tests using AFL(afl-clang-fast) instrumentation - -```bash -cd $IDF_PATH/components/mdns/test_afl_host -make fuzz -``` - -(Please note you have to install AFL instrumentation first, check `Installing AFL` section) - -## Building the tests using GCC INSTR(off) - -To build the tests without AFL instrumentations and instead of that use GCC compiler(In this case it will only check for compilation issues and will not run AFL tests). - -```bash -cd $IDF_PATH/components/mdns/test_afl_host -make INSTR=off -``` - -Note, that this setup is useful if we want to reproduce issues reported by fuzzer tests executed in the CI, or to simulate how the packet parser treats the input packets on the host machine. - -## Installing AFL -To run the test yourself, you need to download the [latest afl archive](http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz) and extract it to a folder on your computer. - -The rest of the document will refer to that folder as ```PATH_TO_AFL```. - -### Preparation -- On Mac, you will need to install the latest Xcode and llvm support from [Homebrew](https://brew.sh) - - ```bash - /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - brew install --with-clang --with-lld --HEAD llvm - export PATH="/usr/local/opt/llvm/bin:$PATH" - ``` - -- On Ubuntu you need the following packages: - - ```bash - sudo apt-get install make clang-4.0(or <=4.0) llvm-4.0(or <=4.0) libbsd-dev - ``` - -Please note that if specified package version can't be installed(due to system is the latest), you can download, build and install it manually. - -### Compile AFL -Compiling AFL is as easy as running make: - -```bash -cd [PATH_TO_AFL] -make -cd llvm_mode/ -make -``` - -After successful compilation, you can export the following variables to your shell (you can also add them to your profile if you want to use AFL in other projects). - -```bash -export AFL_PATH=[PATH_TO_AFL] -export PATH="$AFL_PATH:$PATH" -``` - -Please note LLVM must be <=4.0.0, otherwise afl does not compile, as there are some limitations with building AFL on MacOS/Linux with the latest LLVM. Also, Windows build on cygwin is not fully supported. - -## Additional info -Apple has a crash reporting service that could interfere with AFLs normal operation. To turn that off, run the following command: - -```bash -launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist -sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist -``` - -Ubuntu has a similar service. To turn that off, run as root: - -```bash -echo core >/proc/sys/kernel/core_pattern -``` diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp32_mock.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp32_mock.c deleted file mode 100644 index 1f74c78..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp32_mock.c +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#include -#include -#include -#include -#include -#include "esp32_mock.h" - -void *g_queue; -int g_queue_send_shall_fail = 0; -int g_size = 0; - -const char *WIFI_EVENT = "wifi_event"; -const char *ETH_EVENT = "eth_event"; - -esp_err_t esp_event_handler_register(const char *event_base, - int32_t event_id, - void *event_handler, - void *event_handler_arg) -{ - return ESP_OK; -} - -esp_err_t esp_event_handler_unregister(const char *event_base, int32_t event_id, void *event_handler) -{ - return ESP_OK; -} - -esp_err_t esp_timer_delete(esp_timer_handle_t timer) -{ - return ESP_OK; -} - -esp_err_t esp_timer_stop(esp_timer_handle_t timer) -{ - return ESP_OK; -} - -esp_err_t esp_timer_start_periodic(esp_timer_handle_t timer, uint64_t period) -{ - return ESP_OK; -} - -esp_err_t esp_timer_create(const esp_timer_create_args_t *create_args, - esp_timer_handle_t *out_handle) -{ - return ESP_OK; -} - -uint32_t xTaskGetTickCount(void) -{ - static uint32_t tick = 0; - return tick++; -} - -/// Queue mock -QueueHandle_t xQueueCreate( uint32_t uxQueueLength, uint32_t uxItemSize ) -{ - g_size = uxItemSize; - g_queue = malloc((uxQueueLength) * (uxItemSize)); - return g_queue; -} - - -void vQueueDelete( QueueHandle_t xQueue ) -{ - free(xQueue); -} - -uint32_t xQueueSend(QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait) -{ - if (g_queue_send_shall_fail) { - return pdFALSE; - } else { - memcpy(xQueue, pvItemToQueue, g_size); - return pdPASS; - } -} - - -uint32_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait) -{ - return pdFALSE; -} - -void GetLastItem(void *pvBuffer) -{ - memcpy(pvBuffer, g_queue, g_size); -} - -void ForceTaskDelete(void) -{ - g_queue_send_shall_fail = 1; -} - -TaskHandle_t xTaskGetCurrentTaskHandle(void) -{ - return NULL; -} - -void xTaskNotifyGive(TaskHandle_t task) -{ - return; -} - -BaseType_t xTaskNotifyWait(uint32_t bits_entry_clear, uint32_t bits_exit_clear, uint32_t *value, TickType_t wait_time) -{ - return pdTRUE; -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp32_mock.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp32_mock.h deleted file mode 100644 index ecd82e0..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp32_mock.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#ifndef _ESP32_COMPAT_H_ -#define _ESP32_COMPAT_H_ - -// Skip these include files -#define ESP_MDNS_NETWORKING_H_ -#define INC_FREERTOS_H -#define QUEUE_H -#define SEMAPHORE_H -#define _ESP_TASK_H_ - -#ifdef USE_BSD_STRING -#include -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include "esp_timer.h" - -#define ESP_FAIL -1 - -#define ESP_ERR_NO_MEM 0x101 -#define ESP_ERR_INVALID_ARG 0x102 -#define ESP_ERR_INVALID_STATE 0x103 -#define ESP_ERR_INVALID_SIZE 0x104 -#define ESP_ERR_NOT_FOUND 0x105 -#define ESP_ERR_NOT_SUPPORTED 0x106 -#define ESP_ERR_TIMEOUT 0x107 -#define ESP_ERR_INVALID_RESPONSE 0x108 -#define ESP_ERR_INVALID_CRC 0x109 - -#define pdTRUE true -#define pdFALSE false -#define pdPASS ( pdTRUE ) -#define pdFAIL ( pdFALSE ) - -#define portMAX_DELAY 0xFFFFFFFF -#define portTICK_PERIOD_MS 1 -#define ESP_LOGW(a,b) -#define ESP_LOGD(a,b) -#define ESP_LOGE(a,b,c) -#define ESP_LOGV(a,b,c,d) - -#define LWIP_HDR_PBUF_H -#define __ESP_RANDOM_H__ -#define INC_TASK_H - -#define pdMS_TO_TICKS(a) a -#define xSemaphoreTake(s,d) true -#define xTaskDelete(a) -#define vTaskDelete(a) free(a) -#define xSemaphoreGive(s) -#define xQueueCreateMutex(s) -#define _mdns_pcb_init(a,b) true -#define _mdns_pcb_deinit(a,b) true -#define xSemaphoreCreateMutex() malloc(1) -#define xSemaphoreCreateBinary() malloc(1) -#define vSemaphoreDelete(s) free(s) -#define queueQUEUE_TYPE_MUTEX ( ( uint8_t ) 1U -#define xTaskCreatePinnedToCore(a,b,c,d,e,f,g) *(f) = malloc(1) -#define vTaskDelay(m) usleep((m)*0) -#define esp_random() (rand()%UINT32_MAX) - - -#define ESP_TASK_PRIO_MAX 25 -#define ESP_TASKD_EVENT_PRIO 5 -#define _mdns_udp_pcb_write(tcpip_if, ip_protocol, ip, port, data, len) len -#define TaskHandle_t TaskHandle_t - - -typedef int32_t esp_err_t; - -typedef void *SemaphoreHandle_t; -typedef void *QueueHandle_t; -typedef void *TaskHandle_t; -typedef int BaseType_t; -typedef uint32_t TickType_t; - - -struct udp_pcb { - uint8_t dummy; -}; - -struct ip4_addr { - uint32_t addr; -}; -typedef struct ip4_addr ip4_addr_t; - -struct ip6_addr { - uint32_t addr[4]; -}; -typedef struct ip6_addr ip6_addr_t; - -typedef void *system_event_t; - -struct pbuf { - struct pbuf *next; - void *payload; - uint16_t tot_len; - uint16_t len; - uint8_t /*pbuf_type*/ type; - uint8_t flags; - uint16_t ref; -}; - -uint32_t xTaskGetTickCount(void); -typedef void (*esp_timer_cb_t)(void *arg); - -// Queue mock -QueueHandle_t xQueueCreate( uint32_t uxQueueLength, - uint32_t uxItemSize ); - -void vQueueDelete( QueueHandle_t xQueue ); - -uint32_t xQueueSend(QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait); - -uint32_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait); - -void GetLastItem(void *pvBuffer); - -void ForceTaskDelete(void); - -esp_err_t esp_event_handler_register(const char *event_base, int32_t event_id, void *event_handler, void *event_handler_arg); - -esp_err_t esp_event_handler_unregister(const char *event_base, int32_t event_id, void *event_handler); - - -TaskHandle_t xTaskGetCurrentTaskHandle(void); -void xTaskNotifyGive(TaskHandle_t task); -BaseType_t xTaskNotifyWait(uint32_t bits_entry_clear, uint32_t bits_exit_clear, uint32_t *value, TickType_t wait_time ); - -#endif //_ESP32_COMPAT_H_ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp_attr.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp_attr.h deleted file mode 100644 index 75b6678..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp_attr.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#pragma once -#define IRAM_ATTR -#define FLAG_ATTR(TYPE) -#define QUEUE_H -#define __ARCH_CC_H__ -#define __XTENSA_API_H__ -#define SSIZE_MAX INT_MAX -#define LWIP_HDR_IP6_ADDR_H -#define LWIP_HDR_IP4_ADDR_H diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp_netif_mock.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp_netif_mock.c deleted file mode 100644 index 80629ad..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/esp_netif_mock.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include -#include -#include "esp32_mock.h" - -typedef struct esp_netif_s esp_netif_t; -typedef struct esp_netif_ip_info esp_netif_ip_info_t; -typedef struct esp_netif_dhcp_status esp_netif_dhcp_status_t; - - -const char *IP_EVENT = "IP_EVENT"; - - -esp_err_t esp_netif_add_to_list(esp_netif_t *netif) -{ - return ESP_OK; -} - -esp_err_t esp_netif_remove_from_list(esp_netif_t *netif) -{ - return ESP_ERR_NOT_FOUND; -} - -esp_netif_t *esp_netif_next(esp_netif_t *netif) -{ - return NULL; -} - -esp_netif_t *esp_netif_next_unsafe(esp_netif_t *netif) -{ - return NULL; -} - -esp_netif_t *esp_netif_get_handle_from_ifkey(const char *if_key) -{ - return NULL; -} - -esp_err_t esp_netif_get_ip_info(esp_netif_t *esp_netif, esp_netif_ip_info_t *ip_info) -{ - return ESP_ERR_NOT_SUPPORTED; -} - -esp_err_t esp_netif_dhcpc_get_status(esp_netif_t *esp_netif, esp_netif_dhcp_status_t *status) -{ - return ESP_ERR_NOT_SUPPORTED; -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/file2.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/file2.bin deleted file mode 100644 index a7ce859..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/file2.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_4a_txt.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_4a_txt.bin deleted file mode 100644 index 37f2803..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_4a_txt.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_aaaa.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_aaaa.bin deleted file mode 100644 index 6ddb7ac..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_aaaa.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_any.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_any.bin deleted file mode 100644 index 99a6d18..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_any.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_disc.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_disc.bin deleted file mode 100644 index 5f3ba62..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_disc.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_ptr.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_ptr.bin deleted file mode 100644 index 67da5ed..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_ptr.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_query.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_query.bin deleted file mode 100644 index d21c0d2..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_query.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_query2.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_query2.bin deleted file mode 100644 index 986118d..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/minif_query2.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/sub_fritz_m.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/sub_fritz_m.bin deleted file mode 100644 index 68e1d75..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/sub_fritz_m.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/telnet_ptr.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/telnet_ptr.bin deleted file mode 100644 index 1cd8e85..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/telnet_ptr.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-14.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-14.bin deleted file mode 100644 index b9d059d..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-14.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-15.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-15.bin deleted file mode 100644 index 3250de5..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-15.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-16.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-16.bin deleted file mode 100644 index 19915d8..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-16.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-28.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-28.bin deleted file mode 100644 index 537352a..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-28.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-29.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-29.bin deleted file mode 100644 index 837737b..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-29.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-31.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-31.bin deleted file mode 100644 index 690b735..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-31.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-53.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-53.bin deleted file mode 100644 index 73181ea..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-53.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-56.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-56.bin deleted file mode 100644 index 980b651..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-56.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-63.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-63.bin deleted file mode 100644 index 883d444..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-63.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-83.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-83.bin deleted file mode 100644 index c6cc159..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-83.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-88.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-88.bin deleted file mode 100644 index fcbb384..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-88.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-89.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-89.bin deleted file mode 100644 index d60a987..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-89.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-95.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-95.bin deleted file mode 100644 index 2655309..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-95.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-96.bin b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-96.bin deleted file mode 100644 index fabf8b7..0000000 Binary files a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/in/test-96.bin and /dev/null differ diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/input_packets.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/input_packets.txt deleted file mode 100644 index 15c5df2..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/input_packets.txt +++ /dev/null @@ -1,166 +0,0 @@ -Input: in/test-14.bin -Packet Length: 568 -Questions: 18 - Q: _airport._tcp.local. PTR IN - Q: _http._tcp.local. PTR IN - Q: _printer._tcp.local. PTR IN - Q: _sub._http._tcp.local. PTR IN - Q: _airplay._tcp.local. PTR IN - Q: _raop._tcp.local. PTR IN - Q: _uscan._tcp.local. PTR IN - Q: _uscans._tcp.local. PTR IN - Q: _ippusb._tcp.local. PTR IN - Q: _scanner._tcp.local. PTR IN - Q: _ipp._tcp.local. PTR IN - Q: _ipps._tcp.local. PTR IN - Q: _pdl-datastream._tcp.local. PTR IN - Q: _ptp._tcp.local. PTR IN - Q: _sleep-proxy._udp.local. PTR IN - Q: 9801A7E58FA1@Hristo's AirPort Express._raop._tcp.local. TXT IN - Q: Hristo's AirPort Express._airport._tcp.local. TXT IN - Q: Hristo's Time Capsule._airport._tcp.local. TXT IN -Answers: 7 + 0 - A: _airport._tcp.local. PTR IN 2272 [2] Hristo's AirPort Express._airport._tcp.local. - A: _airport._tcp.local. PTR IN 2272 [2] Hristo's Time Capsule._airport._tcp.local. - A: _http._tcp.local. PTR IN 2535 [23] HP LaserJet CP1025nw._http._tcp.local. - A: _printer._tcp.local. PTR IN 2535 [23] HP LaserJet CP1025nw._printer._tcp.local. - A: _ipp._tcp.local. PTR IN 2535 [23] HP LaserJet CP1025nw._ipp._tcp.local. - A: _pdl-datastream._tcp.local. PTR IN 2535 [23] HP LaserJet CP1025nw._pdl-datastream._tcp.local. - A: _sleep-proxy._udp.local. PTR IN 2535 [38] 50-34-10-70.1 Hristo's Time Capsule._sleep-proxy._udp.local. - -Input: in/test-15.bin -Packet Length: 524 -Answers: 3 + 3 - A: Hristo's AirPort Express._airport._tcp.local. TXT IN FLUSH 4500 [166] waMA=98-01-A7-E5-8F-A1,raMA=98-01-A7-E8-C2-2E,raM2=98-01-A7-E8-C2-2F,raNm=your-ssid,raCh=1,rCh2=52,raSt=0,raNA=1,syFl=0x8A0C,syAP=115,syVs=7.6.8,srcv=76800.1,bjSd=23 - A: 9801A7E58FA1@Hristo's AirPort Express._raop._tcp.local. TXT IN FLUSH 4500 [134] txtvers=1; ch=2; cn=0,1; et=0,4; sv=false; da=true; sr=44100; ss=16; pw=false; vn=65537; tp=TCP,UDP; vs=105.1; am=AirPort10,115; fv=76800.1; sf=0x1 - A: _raop._tcp.local. PTR IN 4500 [2] 9801A7E58FA1@Hristo's AirPort Express._raop._tcp.local. - A: 9801A7E58FA1@Hristo's AirPort Express._raop._tcp.local. SRV IN FLUSH 120 [32] 5000 Hristos-AirPort-Express.local. - A: Hristo's AirPort Express.local. NSEC IN FLUSH 4500 [9] Hristo's AirPort Express._airport._tcp.local. 00 05 00 00 80 00 40 - A: 9801A7E58FA1@Hristo's AirPort Express.local. NSEC IN FLUSH 4500 [9] 9801A7E58FA1@Hristo's AirPort Express._raop._tcp.local. 00 05 00 00 80 00 40 - -Input: in/test-16.bin -Packet Length: 254 -Answers: 1 + 1 - A: Hristo's Time Capsule._airport._tcp.local. TXT IN FLUSH 4500 [168] waMA=70-73-CB-B4-C9-B3,raMA=70-73-CB-BB-04-E7,raM2=70-73-CB-BB-04-E8,raNm=nbis-test,raCh=11,rCh2=132,raSt=0,raNA=0,syFl=0x820C,syAP=116,syVs=7.6.8,srcv=76800.1,bjSd=30 - A: Hristo's Time Capsule.local. NSEC IN FLUSH 4500 [9] Hristo's Time Capsule._airport._tcp.local. 00 05 00 00 80 00 40 - -Input: in/test-28.bin -Packet Length: 62 -Questions: 1 - Q: Hristo's Time Capsule._afpovertcp._tcp.local. SRV IN FLUSH - -Input: in/test-29.bin -Packet Length: 39 -Questions: 2 - Q: minifritz.local. A IN FLUSH - Q: minifritz.local. AAAA IN FLUSH - -Input: in/test-31.bin -Packet Length: 91 -Answers: 2 + 1 - A: minifritz.local. AAAA IN FLUSH 120 [16] fe80:0000:0000:0000:142e:54ff:b8c4:fd09 - A: minifritz.local. A IN FLUSH 120 [4] 192.168.254.16 - A: minifritz.local. NSEC IN FLUSH 120 [8] minifritz...local. 00 04 40 00 00 08 - -Input: in/test-53.bin -Packet Length: 140 -Questions: 2 - Q: _smb._tcp.local. PTR IN - Q: Sofiya-Ivanovas-MacBook.local. A IN -Answers: 2 + 0 - A: _smb._tcp.local. PTR IN 3061 [29] Sofiya Ivanova’s MacBook._smb._tcp.local. - A: _smb._tcp.local. PTR IN 3062 [24] Hristo's Time Capsule._smb._tcp.local. - -Input: in/test-56.bin -Packet Length: 262 -Answers: 2 + 6 - A: Hristo’s Mac mini._device-info._tcp.local. TXT IN 4500 [28] model=Macmini6,2; osxvers=16 - A: _smb._tcp.local. PTR IN 4500 [22] Hristo’s Mac mini._smb._tcp.local. - A: Hristo’s Mac mini._smb._tcp.local. TXT IN FLUSH 4500 [1] - A: Hristo’s Mac mini._smb._tcp.local. SRV IN FLUSH 120 [18] 445 minifritz.local. - A: minifritz.local. AAAA IN FLUSH 120 [16] fe80:0000:0000:0000:142e:54ff:b8c4:fd09 - A: minifritz.local. A IN FLUSH 120 [4] 192.168.254.16 - A: Hristo’s Mac mini.local. NSEC IN FLUSH 4500 [9] Hristo’s Mac mini._smb._tcp.local. 00 05 00 00 80 00 40 - A: minifritz.local. NSEC IN FLUSH 120 [8] minifritz...local. 00 04 40 00 00 08 - -Input: in/test-63.bin -Packet Length: 147 -Questions: 2 - Q: _afpovertcp._tcp.local. PTR IN - Q: Sofiya-Ivanovas-MacBook.local. A IN -Answers: 2 + 0 - A: _afpovertcp._tcp.local. PTR IN 2881 [29] Sofiya Ivanova’s MacBook._afpovertcp._tcp.local. - A: _afpovertcp._tcp.local. PTR IN 2881 [24] Hristo's Time Capsule._afpovertcp._tcp.local. - -Input: in/test-66.bin -Packet Length: 269 -Answers: 2 + 6 - A: Hristo’s Mac mini._device-info._tcp.local. TXT IN 4500 [28] model=Macmini6,2; osxvers=16 - A: _afpovertcp._tcp.local. PTR IN 4500 [22] Hristo’s Mac mini._afpovertcp._tcp.local. - A: Hristo’s Mac mini._afpovertcp._tcp.local. TXT IN FLUSH 4500 [1] - A: Hristo’s Mac mini._afpovertcp._tcp.local. SRV IN FLUSH 120 [18] 548 minifritz.local. - A: minifritz.local. AAAA IN FLUSH 120 [16] fe80:0000:0000:0000:142e:54ff:b8c4:fd09 - A: minifritz.local. A IN FLUSH 120 [4] 192.168.254.16 - A: Hristo’s Mac mini.local. NSEC IN FLUSH 4500 [9] Hristo’s Mac mini._afpovertcp._tcp.local. 00 05 00 00 80 00 40 - A: minifritz.local. NSEC IN FLUSH 120 [8] minifritz...local. 00 04 40 00 00 08 - -Input: in/test-83.bin -Packet Length: 105 -Answers: 1 + 2 - A: Sofiya-Ivanovas-MacBook.local. A IN FLUSH 120 [4] 192.168.254.20 - A: Sofiya-Ivanovas-MacBook.local. AAAA IN FLUSH 120 [16] fe80:0000:0000:0000:021c:b3ff:feb2:72a3 - A: Sofiya-Ivanovas-MacBook.local. NSEC IN FLUSH 120 [8] Sofiya-Ivanovas-MacBook...local. 00 04 40 00 00 08 - -Input: in/test-88.bin -Packet Length: 48 -Questions: 2 - Q: _rfb._tcp.local. PTR IN - Q: _airport._tcp.local. PTR IN - -Input: in/test-89.bin -Packet Length: 459 -Answers: 2 + 7 - A: _airport._tcp.local. PTR IN 4500 [24] Hristo's Time Capsule._airport._tcp.local. - A: Hristo's Time Capsule._device-info._tcp.local. TXT IN 4500 [23] model=TimeCapsule6,116 - A: Hristos-Time-Capsule.local. A IN FLUSH 120 [4] 192.168.254.49 - A: Hristo's Time Capsule._airport._tcp.local. TXT IN FLUSH 4500 [168] waMA=70-73-CB-B4-C9-B3,raMA=70-73-CB-BB-04-E7,raM2=70-73-CB-BB-04-E8,raNm=nbis-test,raCh=11,rCh2=132,raSt=0,raNA=0,syFl=0x820C,syAP=116,syVs=7.6.8,srcv=76800.1,bjSd=30 - A: Hristos-Time-Capsule.local. AAAA IN FLUSH 120 [16] fe80:0000:0000:0000:7273:cbff:feb4:c9b3 - A: Hristo's Time Capsule._airport._tcp.local. SRV IN FLUSH 120 [8] 5009 Hristos-Time-Capsule.local. - A: Hristos-Time-Capsule.local. A IN FLUSH 120 [4] 169.254.23.40 - A: Hristos-Time-Capsule.local. NSEC IN FLUSH 120 [8] Hristos-Time-Capsule...local. 00 04 40 00 00 08 - A: Hristo's Time Capsule.local. NSEC IN FLUSH 4500 [9] Hristo's Time Capsule._airport._tcp.local. 00 05 00 00 80 00 40 - -Input: in/test-91.bin -Packet Length: 279 -Answers: 2 + 6 - A: Sofiya Ivanova’s MacBook._device-info._tcp.local. TXT IN 4500 [17] model=Macmini2,1 - A: _rfb._tcp.local. PTR IN 4500 [29] Sofiya Ivanova’s MacBook._rfb._tcp.local. - A: Sofiya Ivanova’s MacBook._rfb._tcp.local. TXT IN FLUSH 4500 [1] - A: Sofiya Ivanova’s MacBook._rfb._tcp.local. SRV IN FLUSH 120 [32] 5900 Sofiya-Ivanovas-MacBook.local. - A: Sofiya-Ivanovas-MacBook.local. AAAA IN FLUSH 120 [16] fe80:0000:0000:0000:021c:b3ff:feb2:72a3 - A: Sofiya-Ivanovas-MacBook.local. A IN FLUSH 120 [4] 192.168.254.20 - A: Sofiya Ivanova’s MacBook.local. NSEC IN FLUSH 4500 [9] Sofiya Ivanova’s MacBook._rfb._tcp.local. 00 05 00 00 80 00 40 - A: Sofiya-Ivanovas-MacBook.local. NSEC IN FLUSH 120 [8] Sofiya-Ivanovas-MacBook...local. 00 04 40 00 00 08 - -Input: in/test-95.bin -Packet Length: 286 -Questions: 3 - Q: _afpovertcp._tcp.local. PTR IN - Q: _smb._tcp.local. PTR IN - Q: _adisk._tcp.local. PTR IN -Answers: 6 + 0 - A: _afpovertcp._tcp.local. PTR IN 2353 [29] Sofiya Ivanova’s MacBook._afpovertcp._tcp.local. - A: _afpovertcp._tcp.local. PTR IN 3973 [22] Hristo’s Mac mini._afpovertcp._tcp.local. - A: _afpovertcp._tcp.local. PTR IN 2353 [24] Hristo's Time Capsule._afpovertcp._tcp.local. - A: _smb._tcp.local. PTR IN 2353 [29] Sofiya Ivanova’s MacBook._smb._tcp.local. - A: _smb._tcp.local. PTR IN 3792 [22] Hristo’s Mac mini._smb._tcp.local. - A: _smb._tcp.local. PTR IN 2353 [24] Hristo's Time Capsule._smb._tcp.local. - -Input: in/test-96.bin -Packet Length: 319 -Answers: 2 + 3 - A: Hristo's Time Capsule._device-info._tcp.local. TXT IN 4500 [23] model=TimeCapsule6,116 - A: _adisk._tcp.local. PTR IN 4500 [24] Hristo's Time Capsule._adisk._tcp.local. - A: Hristo's Time Capsule._adisk._tcp.local. TXT IN FLUSH 4500 [110] sys=waMA=70:73:CB:B4:C9:B3,adVF=0x1000; dk2=adVF=0x1083,adVN=Capsule,adVU=55fabb8b-a63b-5441-9874-6edb504eb30a - A: Hristo's Time Capsule._adisk._tcp.local. SRV IN FLUSH 120 [29] 9 Hristos-Time-Capsule.local. - A: Hristo's Time Capsule.local. NSEC IN FLUSH 4500 [9] Hristo's Time Capsule._adisk._tcp.local. 00 05 00 00 80 00 40 diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/mdns_di.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/mdns_di.h deleted file mode 100644 index ed56960..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/mdns_di.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -/* - * MDNS Dependecy injection -- preincluded to inject interface test functions into static variables - * - */ - -#include "mdns.h" -#include "mdns_private.h" - -void (*mdns_test_static_execute_action)(mdns_action_t *) = NULL; -mdns_srv_item_t *(*mdns_test_static_mdns_get_service_item)(const char *service, const char *proto, const char *hostname) = NULL; -mdns_search_once_t *(*mdns_test_static_search_init)(const char *name, const char *service, const char *proto, uint16_t type, bool unicast, - uint32_t timeout, uint8_t max_results, - mdns_query_notify_t notifier) = NULL; -esp_err_t (*mdns_test_static_send_search_action)(mdns_action_type_t type, mdns_search_once_t *search) = NULL; -void (*mdns_test_static_search_free)(mdns_search_once_t *search) = NULL; - -static void _mdns_execute_action(mdns_action_t *action); -static mdns_srv_item_t *_mdns_get_service_item(const char *service, const char *proto, const char *hostname); -static mdns_search_once_t *_mdns_search_init(const char *name, const char *service, const char *proto, uint16_t type, bool unicast, - uint32_t timeout, uint8_t max_results, mdns_query_notify_t notifier); -static esp_err_t _mdns_send_search_action(mdns_action_type_t type, mdns_search_once_t *search); -static void _mdns_search_free(mdns_search_once_t *search); - -void mdns_test_init_di(void) -{ - mdns_test_static_execute_action = _mdns_execute_action; - mdns_test_static_mdns_get_service_item = _mdns_get_service_item; - mdns_test_static_search_init = _mdns_search_init; - mdns_test_static_send_search_action = _mdns_send_search_action; - mdns_test_static_search_free = _mdns_search_free; -} - -void mdns_test_execute_action(void *action) -{ - mdns_test_static_execute_action((mdns_action_t *)action); -} - -void mdns_test_search_free(mdns_search_once_t *search) -{ - return mdns_test_static_search_free(search); -} - -esp_err_t mdns_test_send_search_action(mdns_action_type_t type, mdns_search_once_t *search) -{ - return mdns_test_static_send_search_action(type, search); -} - -mdns_search_once_t *mdns_test_search_init(const char *name, const char *service, const char *proto, uint16_t type, uint32_t timeout, uint8_t max_results) -{ - return mdns_test_static_search_init(name, service, proto, type, timeout, type != MDNS_TYPE_PTR, max_results, NULL); -} - -mdns_srv_item_t *mdns_test_mdns_get_service_item(const char *service, const char *proto) -{ - return mdns_test_static_mdns_get_service_item(service, proto, NULL); -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/mdns_mock.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/mdns_mock.h deleted file mode 100644 index d37da92..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/mdns_mock.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -#pragma once -#include "esp32_mock.h" -#include "mdns.h" -#include "mdns_private.h" - - -static inline void *_mdns_get_packet_data(mdns_rx_packet_t *packet) -{ - return packet->pb->payload; -} - -static inline size_t _mdns_get_packet_len(mdns_rx_packet_t *packet) -{ - return packet->pb->len; -} - -static inline void _mdns_packet_free(mdns_rx_packet_t *packet) -{ - free(packet->pb); - free(packet); -} - -static inline bool mdns_is_netif_ready(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol) -{ - return true; -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/sdkconfig.h b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/sdkconfig.h deleted file mode 100644 index 5906879..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/sdkconfig.h +++ /dev/null @@ -1,423 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ -/* - * This config file commited in order to not run `idf.py reconfigure` each time when running fuzzer test. You can modify it manually or run `idf.py reconfigure` to generate new one if needed. - * Espressif IoT Development Framework (ESP-IDF) Configuration Header - */ -#pragma once -#define CONFIG_IDF_TARGET "esp32" -#define CONFIG_IDF_TARGET_ESP32 1 -#define CONFIG_IDF_FIRMWARE_CHIP_ID 0x0000 -#define CONFIG_SDK_TOOLPREFIX "xtensa-esp32-elf-" -#define CONFIG_APP_BUILD_TYPE_APP_2NDBOOT 1 -#define CONFIG_APP_BUILD_GENERATE_BINARIES 1 -#define CONFIG_APP_BUILD_BOOTLOADER 1 -#define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1 -#define CONFIG_APP_COMPILE_TIME_DATE 1 -#define CONFIG_APP_RETRIEVE_LEN_ELF_SHA 16 -#define CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE 1 -#define CONFIG_BOOTLOADER_LOG_LEVEL_INFO 1 -#define CONFIG_BOOTLOADER_LOG_LEVEL 3 -#define CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V 1 -#define CONFIG_BOOTLOADER_WDT_ENABLE 1 -#define CONFIG_BOOTLOADER_WDT_TIME_MS 9000 -#define CONFIG_BOOTLOADER_RESERVE_RTC_SIZE 0x0 -#define CONFIG_ESPTOOLPY_WITH_STUB 1 -#define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1 -#define CONFIG_ESPTOOLPY_FLASHMODE "dio" -#define CONFIG_ESPTOOLPY_FLASHFREQ_40M 1 -#define CONFIG_ESPTOOLPY_FLASHFREQ "40m" -#define CONFIG_ESPTOOLPY_FLASHSIZE_2MB 1 -#define CONFIG_ESPTOOLPY_FLASHSIZE "2MB" -#define CONFIG_ESPTOOLPY_FLASHSIZE_DETECT 1 -#define CONFIG_ESPTOOLPY_BEFORE_RESET 1 -#define CONFIG_ESPTOOLPY_BEFORE "default_reset" -#define CONFIG_ESPTOOLPY_AFTER_RESET 1 -#define CONFIG_ESPTOOLPY_AFTER "hard_reset" -#define CONFIG_PARTITION_TABLE_SINGLE_APP 1 -#define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv" -#define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv" -#define CONFIG_PARTITION_TABLE_OFFSET 0x8000 -#define CONFIG_PARTITION_TABLE_MD5 1 -#define CONFIG_COMPILER_OPTIMIZATION_DEFAULT 1 -#define CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE 1 -#define CONFIG_COMPILER_STACK_CHECK_MODE_NONE 1 -#define CONFIG_APPTRACE_DEST_NONE 1 -#define CONFIG_APPTRACE_LOCK_ENABLE 1 -#define CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF 0 -#define CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF 0 -#define CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF 0 -#define CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF 0 -#define CONFIG_BTDM_CTRL_PINNED_TO_CORE 0 -#define CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF 1 -#define CONFIG_BTDM_RESERVE_DRAM 0x0 -#define CONFIG_COAP_MBEDTLS_PSK 1 -#define CONFIG_COAP_LOG_DEFAULT_LEVEL 0 -#define CONFIG_ADC_DISABLE_DAC 1 -#define CONFIG_SPI_MASTER_ISR_IN_IRAM 1 -#define CONFIG_SPI_SLAVE_ISR_IN_IRAM 1 -#define CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4 1 -#define CONFIG_EFUSE_MAX_BLK_LEN 192 -#define CONFIG_ESP_TLS_USING_MBEDTLS 1 -#define CONFIG_ESP32_REV_MIN_0 1 -#define CONFIG_ESP32_REV_MIN 0 -#define CONFIG_ESP32_DPORT_WORKAROUND 1 -#define CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 1 -#define CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ 160 -#define CONFIG_ESP32_TRACEMEM_RESERVE_DRAM 0x0 -#define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR 1 -#define CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES 4 -#define CONFIG_ULP_COPROC_RESERVE_MEM 0 -#define CONFIG_ESP_DEBUG_OCDAWARE 1 -#define CONFIG_ESP_BROWNOUT_DET 1 -#define CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0 1 -#define CONFIG_ESP_BROWNOUT_DET_LVL 0 -#define CONFIG_ESP32_REDUCE_PHY_TX_POWER 1 -#define CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT 1 -#define CONFIG_RTC_CLK_SRC_INT_RC 1 -#define CONFIG_RTC_CLK_CAL_CYCLES 1024 -#define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000 -#define CONFIG_ESP32_XTAL_FREQ_40 1 -#define CONFIG_ESP32_XTAL_FREQ 40 -#define CONFIG_ESP32_DPORT_DIS_INTERRUPT_LVL 5 -#define CONFIG_ADC_CAL_EFUSE_TP_ENABLE 1 -#define CONFIG_ADC_CAL_EFUSE_VREF_ENABLE 1 -#define CONFIG_ADC_CAL_LUT_ENABLE 1 -#define CONFIG_ESP_ERR_TO_NAME_LOOKUP 1 -#define CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE 32 -#define CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE 2304 -#define CONFIG_ESP_MAIN_TASK_STACK_SIZE 3584 -#define CONFIG_ESP_IPC_TASK_STACK_SIZE 1024 -#define CONFIG_ESP_IPC_USES_CALLERS_PRIORITY 1 -#define CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE 2048 -#define CONFIG_ESP_CONSOLE_UART_DEFAULT 1 -#define CONFIG_ESP_CONSOLE_UART_NUM 0 -#define CONFIG_ESP_CONSOLE_UART_TX_GPIO 1 -#define CONFIG_ESP_CONSOLE_UART_RX_GPIO 3 -#define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200 -#define CONFIG_ESP_INT_WDT 1 -#define CONFIG_ESP_INT_WDT_TIMEOUT_MS 300 -#define CONFIG_ESP_INT_WDT_CHECK_CPU1 1 -#define CONFIG_ESP_TASK_WDT 1 -#define CONFIG_ESP_TASK_WDT_TIMEOUT_S 5 -#define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 1 -#define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 1 -#define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA 1 -#define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP 1 -#define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT 1 -#define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT_OFFSET 2 -#define CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH 1 -#define CONFIG_ETH_ENABLED 1 -#define CONFIG_ETH_USE_ESP32_EMAC 1 -#define CONFIG_ETH_PHY_INTERFACE_RMII 1 -#define CONFIG_ETH_RMII_CLK_INPUT 1 -#define CONFIG_ETH_RMII_CLK_IN_GPIO 0 -#define CONFIG_ETH_DMA_BUFFER_SIZE 512 -#define CONFIG_ETH_DMA_RX_BUFFER_NUM 10 -#define CONFIG_ETH_DMA_TX_BUFFER_NUM 10 -#define CONFIG_ETH_USE_SPI_ETHERNET 1 -#define CONFIG_ESP_EVENT_POST_FROM_ISR 1 -#define CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR 1 -#define CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS 1 -#define CONFIG_HTTPD_MAX_REQ_HDR_LEN 512 -#define CONFIG_HTTPD_MAX_URI_LEN 512 -#define CONFIG_HTTPD_ERR_RESP_NO_DELAY 1 -#define CONFIG_HTTPD_PURGE_BUF_LEN 32 -#define CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL 120 -#define CONFIG_ESP_NETIF_TCPIP_LWIP 1 -#define CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT 1 -#define CONFIG_ESP_TIMER_TASK_STACK_SIZE 3584 -#define CONFIG_ESP_TIMER_IMPL_TG0_LAC 1 -#define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10 -#define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 32 -#define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1 -#define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE 1 -#define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32 -#define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 1 -#define CONFIG_ESP32_WIFI_TX_BA_WIN 6 -#define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 1 -#define CONFIG_ESP32_WIFI_RX_BA_WIN 6 -#define CONFIG_ESP32_WIFI_NVS_ENABLED 1 -#define CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 1 -#define CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN 752 -#define CONFIG_ESP32_WIFI_MGMT_SBUF_NUM 32 -#define CONFIG_ESP32_WIFI_IRAM_OPT 1 -#define CONFIG_ESP32_WIFI_RX_IRAM_OPT 1 -#define CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE 1 -#define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1 -#define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER 20 -#define CONFIG_ESP32_PHY_MAX_TX_POWER 20 -#define CONFIG_ESP_COREDUMP_ENABLE_TO_NONE 1 -#define CONFIG_FATFS_CODEPAGE_437 1 -#define CONFIG_FATFS_CODEPAGE 437 -#define CONFIG_FATFS_LFN_NONE 1 -#define CONFIG_FATFS_FS_LOCK 0 -#define CONFIG_FATFS_TIMEOUT_MS 10000 -#define CONFIG_FATFS_PER_FILE_CACHE 1 -#define CONFIG_FMB_COMM_MODE_RTU_EN 1 -#define CONFIG_FMB_COMM_MODE_ASCII_EN 1 -#define CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND 150 -#define CONFIG_FMB_MASTER_DELAY_MS_CONVERT 200 -#define CONFIG_FMB_QUEUE_LENGTH 20 -#define CONFIG_FMB_SERIAL_TASK_STACK_SIZE 2048 -#define CONFIG_FMB_SERIAL_BUF_SIZE 256 -#define CONFIG_FMB_SERIAL_ASCII_BITS_PER_SYMB 8 -#define CONFIG_FMB_SERIAL_ASCII_TIMEOUT_RESPOND_MS 1000 -#define CONFIG_FMB_SERIAL_TASK_PRIO 10 -#define CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT 20 -#define CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE 20 -#define CONFIG_FMB_CONTROLLER_STACK_SIZE 4096 -#define CONFIG_FMB_EVENT_QUEUE_TIMEOUT 20 -#define CONFIG_FMB_TIMER_PORT_ENABLED 1 -#define CONFIG_FMB_TIMER_GROUP 0 -#define CONFIG_FMB_TIMER_INDEX 0 -#define CONFIG_FREERTOS_NO_AFFINITY 0x7FFFFFFF -#define CONFIG_FREERTOS_CORETIMER_0 1 -#define CONFIG_FREERTOS_HZ 100 -#define CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION 1 -#define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1 -#define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1 -#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 -#define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1536 -#define CONFIG_FREERTOS_ISR_STACKSIZE 1536 -#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16 -#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 -#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 -#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 -#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 -#define CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER 1 -#define CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER 1 -#define CONFIG_FREERTOS_DEBUG_OCDAWARE 1 -#define CONFIG_HEAP_POISONING_DISABLED 1 -#define CONFIG_HEAP_TRACING_OFF 1 -#define CONFIG_LOG_DEFAULT_LEVEL_INFO 1 -#define CONFIG_LOG_DEFAULT_LEVEL 3 -#define CONFIG_LOG_COLORS 1 -#define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1 -#define CONFIG_LWIP_LOCAL_HOSTNAME "espressif" -#define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES 1 -#define CONFIG_LWIP_TIMERS_ONDEMAND 1 -#define CONFIG_LWIP_MAX_SOCKETS 10 -#define CONFIG_LWIP_SO_REUSE 1 -#define CONFIG_LWIP_SO_REUSE_RXTOALL 1 -#define CONFIG_LWIP_IP_FRAG 1 -#define CONFIG_LWIP_ESP_GRATUITOUS_ARP 1 -#define CONFIG_LWIP_GARP_TMR_INTERVAL 60 -#define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32 -#define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1 -#define CONFIG_LWIP_DHCPS_LEASE_UNIT 60 -#define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8 -#define CONFIG_LWIP_NETIF_LOOPBACK 1 -#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8 -#define CONFIG_LWIP_MAX_ACTIVE_TCP 16 -#define CONFIG_LWIP_MAX_LISTENING_TCP 16 -#define CONFIG_LWIP_TCP_MAXRTX 12 -#define CONFIG_LWIP_TCP_SYNMAXRTX 6 -#define CONFIG_LWIP_TCP_MSS 1440 -#define CONFIG_LWIP_TCP_TMR_INTERVAL 250 -#define CONFIG_LWIP_TCP_MSL 60000 -#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5744 -#define CONFIG_LWIP_TCP_WND_DEFAULT 5744 -#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6 -#define CONFIG_LWIP_TCP_QUEUE_OOSEQ 1 -#define CONFIG_LWIP_TCP_OVERSIZE_MSS 1 -#define CONFIG_LWIP_MAX_UDP_PCBS 16 -#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6 -#define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072 -#define CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY 1 -#define CONFIG_LWIP_TCPIP_TASK_AFFINITY 0x7FFFFFFF -#define CONFIG_LWIP_MAX_RAW_PCBS 16 -#define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1 -#define CONFIG_LWIP_SNTP_UPDATE_DELAY 3600000 -#define CONFIG_LWIP_ESP_LWIP_ASSERT 1 -#define CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC 1 -#define CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN 1 -#define CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN 16384 -#define CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN 4096 -#define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE 1 -#define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL 1 -#define CONFIG_MBEDTLS_HARDWARE_AES 1 -#define CONFIG_MBEDTLS_HARDWARE_MPI 1 -#define CONFIG_MBEDTLS_HARDWARE_SHA 1 -#define CONFIG_MBEDTLS_HAVE_TIME 1 -#define CONFIG_MBEDTLS_ECDSA_DETERMINISTIC 1 -#define CONFIG_MBEDTLS_SHA512_C 1 -#define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1 -#define CONFIG_MBEDTLS_TLS_SERVER 1 -#define CONFIG_MBEDTLS_TLS_CLIENT 1 -#define CONFIG_MBEDTLS_TLS_ENABLED 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1 -#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1 -#define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1 -#define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1 -#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1 -#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1 -#define CONFIG_MBEDTLS_SSL_ALPN 1 -#define CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS 1 -#define CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS 1 -#define CONFIG_MBEDTLS_AES_C 1 -#define CONFIG_MBEDTLS_RC4_DISABLED 1 -#define CONFIG_MBEDTLS_CCM_C 1 -#define CONFIG_MBEDTLS_GCM_C 1 -#define CONFIG_MBEDTLS_PEM_PARSE_C 1 -#define CONFIG_MBEDTLS_PEM_WRITE_C 1 -#define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1 -#define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1 -#define CONFIG_MBEDTLS_ECP_C 1 -#define CONFIG_MBEDTLS_ECDH_C 1 -#define CONFIG_MBEDTLS_ECDSA_C 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1 -#define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1 -#define CONFIG_MDNS_MAX_SERVICES 25 -#define CONFIG_MDNS_MAX_INTERFACES 3 -#define CONFIG_MDNS_TASK_PRIORITY 1 -#define CONFIG_MDNS_ACTION_QUEUE_LEN 16 -#define CONFIG_MDNS_TASK_STACK_SIZE 4096 -#define CONFIG_MDNS_TASK_AFFINITY_CPU0 1 -#define CONFIG_MDNS_TASK_AFFINITY 0x0 -#define CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS 1 -#define CONFIG_MDNS_TIMER_PERIOD_MS 100 -#define CONFIG_MQTT_PROTOCOL_311 1 -#define CONFIG_MQTT_TRANSPORT_SSL 1 -#define CONFIG_MQTT_TRANSPORT_WEBSOCKET 1 -#define CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE 1 -#define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1 -#define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1 -#define CONFIG_OPENSSL_ASSERT_EXIT 1 -#define CONFIG_PTHREAD_TASK_PRIO_DEFAULT 5 -#define CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT 3072 -#define CONFIG_PTHREAD_STACK_MIN 768 -#define CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY 1 -#define CONFIG_PTHREAD_TASK_CORE_DEFAULT -1 -#define CONFIG_PTHREAD_TASK_NAME_DEFAULT "pthread" -#define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1 -#define CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS 1 -#define CONFIG_SPI_FLASH_YIELD_DURING_ERASE 1 -#define CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS 20 -#define CONFIG_SPI_FLASH_ERASE_YIELD_TICKS 1 -#define CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP 1 -#define CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP 1 -#define CONFIG_SPI_FLASH_SUPPORT_GD_CHIP 1 -#define CONFIG_SPIFFS_MAX_PARTITIONS 3 -#define CONFIG_SPIFFS_CACHE 1 -#define CONFIG_SPIFFS_CACHE_WR 1 -#define CONFIG_SPIFFS_PAGE_CHECK 1 -#define CONFIG_SPIFFS_GC_MAX_RUNS 10 -#define CONFIG_SPIFFS_PAGE_SIZE 256 -#define CONFIG_SPIFFS_OBJ_NAME_LEN 32 -#define CONFIG_SPIFFS_USE_MAGIC 1 -#define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1 -#define CONFIG_SPIFFS_META_LENGTH 4 -#define CONFIG_SPIFFS_USE_MTIME 1 -#define CONFIG_USB_DESC_CUSTOM_VID 0x1234 -#define CONFIG_USB_DESC_CUSTOM_PID 0x5678 -#define CONFIG_UNITY_ENABLE_FLOAT 1 -#define CONFIG_UNITY_ENABLE_DOUBLE 1 -#define CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER 1 -#define CONFIG_VFS_SUPPORT_IO 1 -#define CONFIG_VFS_SUPPORT_DIR 1 -#define CONFIG_VFS_SUPPORT_SELECT 1 -#define CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT 1 -#define CONFIG_VFS_SUPPORT_TERMIOS 1 -#define CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS 1 -#define CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN 128 -#define CONFIG_WL_SECTOR_SIZE_4096 1 -#define CONFIG_WL_SECTOR_SIZE 4096 -#define CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES 16 -#define CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT 30 -#define CONFIG_WPA_MBEDTLS_CRYPTO 1 - -/* List of deprecated options */ -#define CONFIG_ADC2_DISABLE_DAC CONFIG_ADC_DISABLE_DAC -#define CONFIG_BROWNOUT_DET CONFIG_ESP_BROWNOUT_DET -#define CONFIG_BROWNOUT_DET_LVL_SEL_0 CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0 -#define CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT -#define CONFIG_CONSOLE_UART_BAUDRATE CONFIG_ESP_CONSOLE_UART_BAUDRATE -#define CONFIG_CONSOLE_UART_DEFAULT CONFIG_ESP_CONSOLE_UART_DEFAULT -#define CONFIG_CONSOLE_UART_RX_GPIO CONFIG_ESP_CONSOLE_UART_RX_GPIO -#define CONFIG_CONSOLE_UART_TX_GPIO CONFIG_ESP_CONSOLE_UART_TX_GPIO -#define CONFIG_ESP32S2_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT -#define CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE -#define CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY -#define CONFIG_ESP32_PANIC_PRINT_REBOOT CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT -#define CONFIG_ESP32_PTHREAD_STACK_MIN CONFIG_PTHREAD_STACK_MIN -#define CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT CONFIG_PTHREAD_TASK_NAME_DEFAULT -#define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT CONFIG_PTHREAD_TASK_PRIO_DEFAULT -#define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT -#define CONFIG_ESP_GRATUITOUS_ARP CONFIG_LWIP_ESP_GRATUITOUS_ARP -#define CONFIG_FLASHMODE_DIO CONFIG_ESPTOOLPY_FLASHMODE_DIO -#define CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR -#define CONFIG_GARP_TMR_INTERVAL CONFIG_LWIP_GARP_TMR_INTERVAL -#define CONFIG_INT_WDT CONFIG_ESP_INT_WDT -#define CONFIG_INT_WDT_CHECK_CPU1 CONFIG_ESP_INT_WDT_CHECK_CPU1 -#define CONFIG_INT_WDT_TIMEOUT_MS CONFIG_ESP_INT_WDT_TIMEOUT_MS -#define CONFIG_IPC_TASK_STACK_SIZE CONFIG_ESP_IPC_TASK_STACK_SIZE -#define CONFIG_LOG_BOOTLOADER_LEVEL_INFO CONFIG_BOOTLOADER_LOG_LEVEL_INFO -#define CONFIG_MAIN_TASK_STACK_SIZE CONFIG_ESP_MAIN_TASK_STACK_SIZE -#define CONFIG_MB_CONTROLLER_NOTIFY_QUEUE_SIZE CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE -#define CONFIG_MB_CONTROLLER_NOTIFY_TIMEOUT CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT -#define CONFIG_MB_CONTROLLER_STACK_SIZE CONFIG_FMB_CONTROLLER_STACK_SIZE -#define CONFIG_MB_EVENT_QUEUE_TIMEOUT CONFIG_FMB_EVENT_QUEUE_TIMEOUT -#define CONFIG_MB_MASTER_DELAY_MS_CONVERT CONFIG_FMB_MASTER_DELAY_MS_CONVERT -#define CONFIG_MB_MASTER_TIMEOUT_MS_RESPOND CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND -#define CONFIG_MB_QUEUE_LENGTH CONFIG_FMB_QUEUE_LENGTH -#define CONFIG_MB_SERIAL_BUF_SIZE CONFIG_FMB_SERIAL_BUF_SIZE -#define CONFIG_MB_SERIAL_TASK_PRIO CONFIG_FMB_SERIAL_TASK_PRIO -#define CONFIG_MB_SERIAL_TASK_STACK_SIZE CONFIG_FMB_SERIAL_TASK_STACK_SIZE -#define CONFIG_MB_TIMER_GROUP CONFIG_FMB_TIMER_GROUP -#define CONFIG_MB_TIMER_INDEX CONFIG_FMB_TIMER_INDEX -#define CONFIG_MB_TIMER_PORT_ENABLED CONFIG_FMB_TIMER_PORT_ENABLED -#define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE -#define CONFIG_OPTIMIZATION_LEVEL_DEBUG CONFIG_COMPILER_OPTIMIZATION_DEFAULT -#define CONFIG_POST_EVENTS_FROM_IRAM_ISR CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR -#define CONFIG_POST_EVENTS_FROM_ISR CONFIG_ESP_EVENT_POST_FROM_ISR -#define CONFIG_REDUCE_PHY_TX_POWER CONFIG_ESP32_REDUCE_PHY_TX_POWER -#define CONFIG_SEMIHOSTFS_HOST_PATH_MAX_LEN CONFIG_VFS_SEMIHOSTFS_HOST_PATH_MAX_LEN -#define CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS -#define CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS -#define CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE -#define CONFIG_SUPPORT_TERMIOS CONFIG_VFS_SUPPORT_TERMIOS -#define CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT -#define CONFIG_SYSTEM_EVENT_QUEUE_SIZE CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE -#define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE -#define CONFIG_TASK_WDT CONFIG_ESP_TASK_WDT -#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 -#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 -#define CONFIG_TASK_WDT_TIMEOUT_S CONFIG_ESP_TASK_WDT_TIMEOUT_S -#define CONFIG_TCPIP_RECVMBOX_SIZE CONFIG_LWIP_TCPIP_RECVMBOX_SIZE -#define CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY -#define CONFIG_TCPIP_TASK_STACK_SIZE CONFIG_LWIP_TCPIP_TASK_STACK_SIZE -#define CONFIG_TCP_MAXRTX CONFIG_LWIP_TCP_MAXRTX -#define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL -#define CONFIG_TCP_MSS CONFIG_LWIP_TCP_MSS -#define CONFIG_TCP_OVERSIZE_MSS CONFIG_LWIP_TCP_OVERSIZE_MSS -#define CONFIG_TCP_QUEUE_OOSEQ CONFIG_LWIP_TCP_QUEUE_OOSEQ -#define CONFIG_TCP_RECVMBOX_SIZE CONFIG_LWIP_TCP_RECVMBOX_SIZE -#define CONFIG_TCP_SND_BUF_DEFAULT CONFIG_LWIP_TCP_SND_BUF_DEFAULT -#define CONFIG_TCP_SYNMAXRTX CONFIG_LWIP_TCP_SYNMAXRTX -#define CONFIG_TCP_WND_DEFAULT CONFIG_LWIP_TCP_WND_DEFAULT -#define CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH -#define CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY -#define CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH -#define CONFIG_TIMER_TASK_STACK_SIZE CONFIG_ESP_TIMER_TASK_STACK_SIZE -#define CONFIG_TOOLPREFIX CONFIG_SDK_TOOLPREFIX -#define CONFIG_UDP_RECVMBOX_SIZE CONFIG_LWIP_UDP_RECVMBOX_SIZE diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/test.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/test.c deleted file mode 100644 index 5556c56..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_afl_fuzz_host/test.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include -#include -#include - -#include "esp32_mock.h" -#include "mdns.h" -#include "mdns_private.h" - -// -// Global stuctures containing packet payload, search -mdns_rx_packet_t g_packet; -struct pbuf mypbuf; -mdns_search_once_t *search = NULL; - -// -// Dependency injected test functions -void mdns_test_execute_action(void *action); -mdns_srv_item_t *mdns_test_mdns_get_service_item(const char *service, const char *proto); -mdns_search_once_t *mdns_test_search_init(const char *name, const char *service, const char *proto, uint16_t type, uint32_t timeout, uint8_t max_results); -esp_err_t mdns_test_send_search_action(mdns_action_type_t type, mdns_search_once_t *search); -void mdns_test_search_free(mdns_search_once_t *search); -void mdns_test_init_di(void); -extern mdns_server_t *_mdns_server; - -// -// mdns function wrappers for mdns setup in test mode -static int mdns_test_hostname_set(const char *mdns_hostname) -{ - for (int i = 0; i < MDNS_MAX_INTERFACES; i++) { - _mdns_server->interfaces[i].pcbs[MDNS_IP_PROTOCOL_V4].state = PCB_RUNNING; // mark the PCB running to exercise mdns in fully operational mode - _mdns_server->interfaces[i].pcbs[MDNS_IP_PROTOCOL_V6].state = PCB_RUNNING; - } - int ret = mdns_hostname_set(mdns_hostname); - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - return ret; -} - -static int mdns_test_add_delegated_host(const char *mdns_hostname) -{ - mdns_ip_addr_t addr = { .addr = { .u_addr = ESP_IPADDR_TYPE_V4 } }; - addr.addr.u_addr.ip4.addr = 0x11111111; - int ret = mdns_delegate_hostname_add(mdns_hostname, &addr); - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - return ret; -} - - -static int mdns_test_service_instance_name_set(const char *service, const char *proto, const char *instance) -{ - int ret = mdns_service_instance_name_set(service, proto, instance); - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - return ret; -} - -static int mdns_test_service_txt_set(const char *service, const char *proto, uint8_t num_items, mdns_txt_item_t txt[]) -{ - int ret = mdns_service_txt_set(service, proto, txt, num_items); - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - return ret; -} - -static int mdns_test_sub_service_add(const char *sub_name, const char *service_name, const char *proto, uint32_t port) -{ - if (mdns_service_add(NULL, service_name, proto, port, NULL, 0)) { - // This is expected failure as the service thread is not running - } - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - - if (mdns_test_mdns_get_service_item(service_name, proto) == NULL) { - return ESP_FAIL; - } - int ret = mdns_service_subtype_add_for_host(NULL, service_name, proto, NULL, sub_name); - a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - return ret; -} - -static int mdns_test_service_add(const char *service_name, const char *proto, uint32_t port) -{ - if (mdns_service_add(NULL, service_name, proto, port, NULL, 0)) { - // This is expected failure as the service thread is not running - } - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - - if (mdns_test_mdns_get_service_item(service_name, proto) == NULL) { - return ESP_FAIL; - } - return ESP_OK; -} - -static mdns_result_t *mdns_test_query(const char *name, const char *service, const char *proto, uint16_t type) -{ - search = mdns_test_search_init(name, service, proto, type, 3000, 20); - if (!search) { - abort(); - } - - if (mdns_test_send_search_action(ACTION_SEARCH_ADD, search)) { - mdns_test_search_free(search); - abort(); - } - - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); - return NULL; -} - -static void mdns_test_query_free(void) -{ - mdns_test_search_free(search); -} - -// -// function "under test" where afl-mangled packets passed -// -void mdns_parse_packet(mdns_rx_packet_t *packet); - -// -// Test starts here -// -int main(int argc, char **argv) -{ - int i; - const char *mdns_hostname = "minifritz"; - const char *mdns_instance = "Hristo's Time Capsule"; - mdns_txt_item_t arduTxtData[4] = { - {"board", "esp32"}, - {"tcp_check", "no"}, - {"ssh_upload", "no"}, - {"auth_upload", "no"} - }; - - const uint8_t mac[6] = {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x32}; - - uint8_t buf[1460]; - char winstance[21 + strlen(mdns_hostname)]; - - sprintf(winstance, "%s [%02x:%02x:%02x:%02x:%02x:%02x]", mdns_hostname, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); - - // Init depencency injected methods - mdns_test_init_di(); - - if (mdns_init()) { - abort(); - } - - if (mdns_test_hostname_set(mdns_hostname)) { - abort(); - } - - if (mdns_test_add_delegated_host(mdns_hostname) || mdns_test_add_delegated_host("megafritz")) { - abort(); - } - -#ifndef MDNS_NO_SERVICES - - if (mdns_test_sub_service_add("_server", "_fritz", "_tcp", 22)) { - abort(); - } - - if (mdns_test_service_add("_telnet", "_tcp", 22)) { - abort(); - } - - if (mdns_test_service_add("_workstation", "_tcp", 9)) { - abort(); - } - if (mdns_test_service_instance_name_set("_workstation", "_tcp", winstance)) { - abort(); - } - - if (mdns_test_service_add("_arduino", "_tcp", 3232)) { - abort(); - } - - if (mdns_test_service_txt_set("_arduino", "_tcp", 4, arduTxtData)) { - abort(); - } - - if (mdns_test_service_add("_http", "_tcp", 80)) { - abort(); - } - - if (mdns_test_service_instance_name_set("_http", "_tcp", "ESP WebServer")) { - abort(); - } - - if ( - mdns_test_service_add("_afpovertcp", "_tcp", 548) - || mdns_test_service_add("_rfb", "_tcp", 885) - || mdns_test_service_add("_smb", "_tcp", 885) - || mdns_test_service_add("_adisk", "_tcp", 885) - || mdns_test_service_add("_airport", "_tcp", 885) - || mdns_test_service_add("_printer", "_tcp", 885) - || mdns_test_service_add("_airplay", "_tcp", 885) - || mdns_test_service_add("_raop", "_tcp", 885) - || mdns_test_service_add("_uscan", "_tcp", 885) - || mdns_test_service_add("_uscans", "_tcp", 885) - || mdns_test_service_add("_ippusb", "_tcp", 885) - || mdns_test_service_add("_scanner", "_tcp", 885) - || mdns_test_service_add("_ipp", "_tcp", 885) - || mdns_test_service_add("_ipps", "_tcp", 885) - || mdns_test_service_add("_pdl-datastream", "_tcp", 885) - || mdns_test_service_add("_ptp", "_tcp", 885) - || mdns_test_service_add("_sleep-proxy", "_udp", 885)) { - abort(); - } -#endif - mdns_result_t *results = NULL; - FILE *file; - size_t nread; - -#ifdef INSTR_IS_OFF - size_t len = 1460; - memset(buf, 0, 1460); - - if (argc != 2) { - printf("Non-instrumentation mode: please supply a file name created by AFL to reproduce crash\n"); - return 1; - } else { - // - // Note: parameter1 is a file (mangled packet) which caused the crash - file = fopen(argv[1], "r"); - assert(file >= 0 ); - len = fread(buf, 1, 1460, file); - fclose(file); - } - - for (i = 0; i < 1; i++) { -#else - while (__AFL_LOOP(1000)) { - memset(buf, 0, 1460); - size_t len = read(0, buf, 1460); -#endif - mypbuf.payload = malloc(len); - memcpy(mypbuf.payload, buf, len); - mypbuf.len = len; - g_packet.pb = &mypbuf; - mdns_test_query("minifritz", "_fritz", "_tcp", MDNS_TYPE_ANY); - mdns_test_query(NULL, "_fritz", "_tcp", MDNS_TYPE_PTR); - mdns_test_query(NULL, "_afpovertcp", "_tcp", MDNS_TYPE_PTR); - mdns_parse_packet(&g_packet); - free(mypbuf.payload); - } -#ifndef MDNS_NO_SERVICES - mdns_service_remove_all(); - mdns_action_t *a = NULL; - GetLastItem(&a); - mdns_test_execute_action(a); -#endif - ForceTaskDelete(); - mdns_free(); - return 0; -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/CMakeLists.txt deleted file mode 100644 index 62d1565..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# The following four lines of boilerplate have to be in your project's CMakeLists -# in this exact order for cmake to work correctly -cmake_minimum_required(VERSION 3.5) - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) - -project(mdns_test_app) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/README.md b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/README.md deleted file mode 100644 index 96b76dc..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/README.md +++ /dev/null @@ -1,49 +0,0 @@ -| Supported Targets | ESP32 | ESP32-S2 | ESP32-C3 | -| ----------------- | ----- | -------- | -------- | - -# mDNS test project - -Main purpose of this application is to test the mDNS library to correctly advertise, lookup services and hosts. -The "app_test.py" logically separated from two sets of test cases 1. "ESP32 board sends queries -> Host sends answers" and 2. "Host sends queries" -> "ESP32 board sends answers". -Two first sets of test cases are starting by 'test_query_' and the second ones by 'start_case'. - -## Runtime settings - -1. For first sets of test cases python creates and sends dns queries using "dpkt" library -2. For the second sets of test cases this app waits for user input to provide test case(e.g. CONFIG_TEST_QUERY_HOST, CONFIG_TEST_QUERY_HOST_ASYNC or CONFIG_TEST_QUERY_SERVICE) -In order to run both of them just needed to set up the project and run by 'python app_test.py' - -## Test app workflow - -- mDNS is initialized with hostname and instance name defined through the project configuration and `_http._tcp` service is added to be advertised -- A delegated host `esp32-delegated._local` is added and another `_http._tcp` service is added for this host. -- WiFi STA is started and tries to connect to the access point defined through the project configuration - -### Configure the project - -* Open the project configuration menu (`idf.py menuconfig`) - -* Configure Wi-Fi or Ethernet under "Example Connection Configuration" menu. - -* Set `mDNS Hostname` as host name prefix for the device and its instance name in `mDNS Instance Name` - -### Build and Flash - -Build the project and flash it to the board, then run the monitor tool to view the serial output: - -``` -idf.py -p PORT flash monitor -``` - -- Wait for WiFi to connect to your access point -- You can now ping the device at `[board-hostname].local`, where `[board-hostname]` is preconfigured hostname, `esp32-mdns` by default. -- You can also browse for `_http._tcp` on the same network to find the advertised service -- Note that for purpose of CI tests, configuration options of `MDNS_RESOLVE_TEST_SERVICES` and `MDNS_ADD_MAC_TO_HOSTNAME` are available, but disabled by default. If enabled, then the hostname suffix of last 3 bytes from device MAC address is added, e.g. `esp32-mdns-80FFFF`, and a query for test service is issued. - - -(To exit the serial monitor, type ``Ctrl-]``.) - -See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. - -## Hardware Required -This test-app can be executed on any ESP32 board, the only required interface is WiFi and connection to a local network and tls server. diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/CMakeLists.txt deleted file mode 100644 index b5902d5..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -idf_component_register(SRCS "main.c" "mdns_test.c" - INCLUDE_DIRS ".") diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/Kconfig.projbuild b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/Kconfig.projbuild deleted file mode 100644 index a1c0d72..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/Kconfig.projbuild +++ /dev/null @@ -1,40 +0,0 @@ -menu "Example Configuration" - - config TEST_MDNS_HOSTNAME - string "mDNS Hostname" - default "esp32-mdns" - help - mDNS Hostname for example to use - - config TEST_MDNS_INSTANCE - string "mDNS Instance Name" - default "ESP32 with mDNS" - help - mDNS Instance Name for example to use - - config TEST_MDNS_PUBLISH_DELEGATE_HOST - bool "Publish a delegated host" - help - Enable publishing a delegated host other than ESP32. - The example will also add a mock service for this host. - - config TEST_MDNS_ADD_MAC_TO_HOSTNAME - bool "Add mac suffix to hostname" - default n - help - If enabled, a portion of MAC address is added to the hostname, this is used - for evaluation of tests in CI - config MDNS_ADD_MAC_TO_HOSTNAME - bool "Add mac suffix to hostname" - default n - help - If enabled, a portion of MAC address is added to the hostname, this is used - for evaluation of tests in CI - config MDNS_PUBLISH_DELEGATE_HOST - bool "Publish a delegated host" - help - Enable publishing a delegated host other than ESP32. - The example will also add a mock service for this host. - - -endmenu diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/idf_component.yml b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/idf_component.yml deleted file mode 100644 index e9277df..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/idf_component.yml +++ /dev/null @@ -1,8 +0,0 @@ -dependencies: - ## Required IDF version - idf: ">=5.0" - espressif/mdns: - version: "^1.0.0" - override_path: "../../../" - protocol_examples_common: - path: ${IDF_PATH}/examples/common_components/protocol_examples_common diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/main.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/main.c deleted file mode 100644 index e67014c..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/main.c +++ /dev/null @@ -1,117 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include -#include "esp_mac.h" -#include "nvs_flash.h" -#include "esp_event.h" -#include "esp_netif.h" -#include "esp_log.h" -#include "protocol_examples_common.h" -#include "mdns.h" - -static const char *TAG = "mdns_test"; -void mdns_test(char *line); - -static void get_string(char *line, size_t size) -{ - int count = 0; - while (count < size) { - int c = fgetc(stdin); - if (c == '\n') { - line[count] = '\0'; - break; - } else if (c > 0 && c < 127) { - line[count] = c; - ++count; - } - vTaskDelay(20 / portTICK_PERIOD_MS); - } -} - -/** Generate host name based on sdkconfig, optionally adding a portion of MAC address to it. - * @return host name string allocated from the heap - */ -static char *generate_hostname(void) -{ -#ifndef CONFIG_TEST_MDNS_ADD_MAC_TO_HOSTNAME - return strdup(CONFIG_TEST_MDNS_HOSTNAME); -#else - uint8_t mac[6]; - char *hostname; - esp_read_mac(mac, ESP_MAC_WIFI_STA); - if (-1 == asprintf(&hostname, "%s-%02X%02X%02X", CONFIG_TEST_MDNS_HOSTNAME, mac[3], mac[4], mac[5])) { - abort(); - } - return hostname; -#endif -} - -static void initialise_mdns(void) -{ - char *hostname = generate_hostname(); - - //initialize mDNS - ESP_ERROR_CHECK( mdns_init() ); - - //set mDNS hostname (required if you want to advertise services) - ESP_ERROR_CHECK( mdns_hostname_set(hostname) ); - - ESP_LOGI(TAG, "mdns hostname set to: [%s]", hostname); - //set default mDNS instance name - ESP_ERROR_CHECK( mdns_instance_name_set(CONFIG_TEST_MDNS_INSTANCE) ); - - //initialize service - ESP_ERROR_CHECK( mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, NULL, 0) ); - -#if CONFIG_TEST_MDNS_PUBLISH_DELEGATE_HOST - char *delegated_hostname; - if (-1 == asprintf(&delegated_hostname, "%s-delegated", hostname)) { - abort(); - } - - mdns_ip_addr_t addr4, addr6; - esp_netif_str_to_ip4("10.0.0.1", &addr4.addr.u_addr.ip4); - addr4.addr.type = ESP_IPADDR_TYPE_V4; - esp_netif_str_to_ip6("fd11:22::1", &addr6.addr.u_addr.ip6); - addr6.addr.type = ESP_IPADDR_TYPE_V6; - addr4.next = &addr6; - addr6.next = NULL; - ESP_ERROR_CHECK( mdns_delegate_hostname_add(delegated_hostname, &addr4) ); - ESP_ERROR_CHECK( mdns_service_add_for_host("test0", "_http", "_tcp", delegated_hostname, 1234, NULL, 0) ); - free(delegated_hostname); -#endif // CONFIG_TEST_MDNS_PUBLISH_DELEGATE_HOST - - ESP_ERROR_CHECK( mdns_service_subtype_add_for_host("ESP32-WebServer", "_http", "_tcp", NULL, "_server") ); - - free(hostname); -} - -void app_main(void) -{ - ESP_LOGI(TAG, "[APP] Free memory: %" PRIu32 " bytes", esp_get_free_heap_size()); - ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version()); - - ESP_ERROR_CHECK(nvs_flash_init()); - ESP_ERROR_CHECK(esp_netif_init()); - ESP_ERROR_CHECK(esp_event_loop_create_default()); - - initialise_mdns(); - - /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. - * Read "Establishing Wi-Fi or Ethernet Connection" section in - * examples/protocols/README.md for more information about this function. - */ - ESP_ERROR_CHECK(example_connect()); - - while (1) { - char line[256]; - - get_string(line, sizeof(line)); - mdns_test(line); - continue; - } -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/mdns_test.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/mdns_test.c deleted file mode 100644 index 06df424..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/main/mdns_test.c +++ /dev/null @@ -1,189 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "mdns.h" -#include "esp_log.h" -#include "esp_netif.h" - -static const char *TAG = "mdns_test_app"; -static const int RETRY_COUNT = 10; - -static void mdns_print_results(mdns_result_t *results) -{ - mdns_result_t *r = results; - mdns_ip_addr_t *a = NULL; - int t; - while (r) { - if (r->instance_name) { - printf("PTR:%s.%s.%s\n", r->instance_name, r->service_type, r->proto); - } - if (r->hostname) { - printf("SRV:%s.local:%u\n", r->hostname, r->port); - } - if (r->txt_count) { - printf("TXT:[%zu] ", r->txt_count); - for (t = 0; t < r->txt_count; t++) { - printf("%s=%s(%d); ", r->txt[t].key, r->txt[t].value ? r->txt[t].value : "NULL", r->txt_value_len[t]); - } - printf("\n"); - } - a = r->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V6) { - printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6)); - } else { - printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4))); - } - a = a->next; - } - r = r->next; - } -} - -static bool check_and_print_result(mdns_search_once_t *search) -{ - // Check if any result is available - mdns_result_t *result = NULL; - if (!mdns_query_async_get_results(search, 0, &result, NULL)) { - return false; - } - - if (!result) { // search timeout, but no result - return false; - } - - // If yes, print the result - mdns_ip_addr_t *a = result->addr; - while (a) { - if (a->addr.type == ESP_IPADDR_TYPE_V6) { - printf("Async query resolved to AAAA:" IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6)); - } else { - printf("Async query resolved to A:" IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4))); - } - a = a->next; - } - // and free the result - mdns_query_results_free(result); - return true; -} - -static bool query_mdns_hosts_async(const char *host_name) -{ - ESP_LOGI(TAG, "Query both A and AAA: %s.local", host_name); - bool res = false; - - mdns_search_once_t *s_a = mdns_query_async_new(host_name, NULL, NULL, MDNS_TYPE_A, 1000, 1, NULL); - mdns_query_async_delete(s_a); - mdns_search_once_t *s_aaaa = mdns_query_async_new(host_name, NULL, NULL, MDNS_TYPE_AAAA, 1000, 1, NULL); - while (s_a || s_aaaa) { - if (s_a && check_and_print_result(s_a)) { - ESP_LOGI(TAG, "Query A %s.local finished", host_name); - mdns_query_async_delete(s_a); - s_a = NULL; - res = true; - } - if (s_aaaa && check_and_print_result(s_aaaa)) { - ESP_LOGI(TAG, "Query AAAA %s.local finished", host_name); - mdns_query_async_delete(s_aaaa); - s_aaaa = NULL; - res = true; - } - } - return res; -} - -static esp_err_t query_mdns_host(const char *host_name) -{ - ESP_LOGI(TAG, "Query A: %s.local", host_name); - - struct esp_ip4_addr addr; - addr.addr = 0; - - esp_err_t err = mdns_query_a(host_name, 2000, &addr); - if (err) { - if (err == ESP_ERR_NOT_FOUND) { - ESP_LOGW(TAG, "%s: Host was not found!", esp_err_to_name(err)); - } - ESP_LOGE(TAG, "Query Failed: %s", esp_err_to_name(err)); - return err; - } - - ESP_LOGI(TAG, "Query A: %s.local resolved to: " IPSTR, host_name, IP2STR(&addr)); - return ESP_OK; -} - -static esp_err_t query_mdns_service(const char *instance, const char *service_name, const char *proto) -{ - ESP_LOGI(TAG, "Query SRV: %s.%s.local", service_name, proto); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query_srv(instance, service_name, proto, 3000, &results); - if (err) { - ESP_LOGE(TAG, "Query Failed: %s", esp_err_to_name(err)); - return err; - } - if (!results) { - ESP_LOGW(TAG, "No results found!"); - } - - mdns_print_results(results); - mdns_query_results_free(results); - return ESP_OK; -} - -void query_mdns_service_sub_type(const char *subtype, const char *service_name, const char *proto) -{ - ESP_LOGI(TAG, "Query PTR: %s.%s.local", service_name, proto); - - mdns_result_t *results = NULL; - esp_err_t err = mdns_query_ptr(service_name, proto, 3000, 20, &results); - if (err) { - ESP_LOGE(TAG, "Query Failed: %s", esp_err_to_name(err)); - } - if (!results) { - ESP_LOGW(TAG, "No results found!"); - } - - mdns_print_results(results); - mdns_query_results_free(results); -} - -void mdns_test(const char *line) -{ - char test_case[32]; - int i = 0; - const TickType_t xDelay = 1000 / portTICK_PERIOD_MS; - - sscanf(line, "%s", test_case); - ESP_LOGI(TAG, "test case = %s", test_case); - - if (strcmp(test_case, "CONFIG_TEST_QUERY_HOST") == 0) { - i = 0; - while (query_mdns_host("tinytester") != ESP_OK && i != RETRY_COUNT) { - query_mdns_host("tinytester"); - i++; - vTaskDelay(xDelay); - } - } else if (strcmp(test_case, "CONFIG_TEST_QUERY_HOST_ASYNC") == 0) { - i = 0; - while (query_mdns_hosts_async("tinytester") == false && i != RETRY_COUNT) { - query_mdns_hosts_async("tinytester"); - i++; - vTaskDelay(xDelay); - } - } else if (strcmp(test_case, "CONFIG_TEST_QUERY_SERVICE") == 0) { - i = 0; - while (query_mdns_service("ESP32", "_http", "_tcp") != ESP_OK && i != RETRY_COUNT) { - query_mdns_service("ESP32", "_http", "_tcp"); - i++; - vTaskDelay(xDelay); - } - } else { - ESP_LOGE(TAG, "%s: No such test case", test_case); - } -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/pytest_mdns_app.py b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/pytest_mdns_app.py deleted file mode 100644 index 2b04cb7..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/pytest_mdns_app.py +++ /dev/null @@ -1,320 +0,0 @@ -# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: Apache-2.0 - -import re -import select -import socket -import struct -import time -from threading import Event, Thread - -import dpkt -import dpkt.dns -import pytest - -UDP_PORT = 5353 -MCAST_GRP = '224.0.0.251' - -# This service is created from esp board startup -SERVICE_NAME = u'ESP32-WebServer._http._tcp.local' -SUB_SERVICE_NAME = u'_server._sub._http._tcp.local' - -# This host name answer sent by host, when there is query from board -HOST_NAME = u'tinytester.local' - -# This servce answer sent by host, when there is query from board -MDNS_HOST_SERVICE = u'ESP32._http._tcp.local' - -# Number of retries to receive mdns answear -RETRY_COUNT = 10 - -stop_mdns_listener = Event() -start_mdns_listener = Event() -esp_service_answered = Event() -esp_sub_service_answered = Event() -esp_host_answered = Event() -esp_delegated_host_answered = Event() - - -@pytest.mark.skip -# Get query of ESP32-WebServer._http._tcp.local service -def get_mdns_service_query(service): # type:(str) -> dpkt.dns.Msg - dns = dpkt.dns.DNS() - dns.op = dpkt.dns.DNS_QR | dpkt.dns.DNS_AA - dns.rcode = dpkt.dns.DNS_RCODE_NOERR - arr = dpkt.dns.DNS.RR() - arr.cls = dpkt.dns.DNS_IN - arr.type = dpkt.dns.DNS_SRV - arr.name = service - arr.target = socket.inet_aton('127.0.0.1') - arr.srvname = service - dns.qd.append(arr) - print('Created mdns service query: {} '.format(dns.__repr__())) - return dns.pack() - - -@pytest.mark.skip -# Get query of _server_.sub._http._tcp.local sub service -def get_mdns_sub_service_query(sub_service): # type:(str) -> dpkt.dns.Msg - dns = dpkt.dns.DNS() - dns.op = dpkt.dns.DNS_QR | dpkt.dns.DNS_AA - dns.rcode = dpkt.dns.DNS_RCODE_NOERR - arr = dpkt.dns.DNS.RR() - arr.cls = dpkt.dns.DNS_IN - arr.type = dpkt.dns.DNS_PTR - arr.name = sub_service - arr.target = socket.inet_aton('127.0.0.1') - arr.ptrname = sub_service - dns.qd.append(arr) - print('Created mdns subtype service query: {} '.format(dns.__repr__())) - return dns.pack() - - -@pytest.mark.skip -# Get query for host resolution -def get_dns_query_for_esp(esp_host): # type:(str) -> dpkt.dns.Msg - dns = dpkt.dns.DNS() - arr = dpkt.dns.DNS.RR() - arr.cls = dpkt.dns.DNS_IN - arr.name = esp_host + u'.local' - dns.qd.append(arr) - print('Created query for esp host: {} '.format(dns.__repr__())) - return dns.pack() - - -@pytest.mark.skip -# Get mdns answer for host resoloution -def get_dns_answer_to_mdns(tester_host): # type:(str) -> dpkt.dns.Msg - dns = dpkt.dns.DNS() - dns.op = dpkt.dns.DNS_QR | dpkt.dns.DNS_AA - dns.rcode = dpkt.dns.DNS_RCODE_NOERR - arr = dpkt.dns.DNS.RR() - arr.cls = dpkt.dns.DNS_IN - arr.type = dpkt.dns.DNS_A - arr.name = tester_host - arr.ip = socket.inet_aton('127.0.0.1') - dns.an.append(arr) - print('Created answer to mdns query: {} '.format(dns.__repr__())) - return dns.pack() - - -@pytest.mark.skip -# Get mdns answer for service query -def get_dns_answer_to_service_query( - mdns_service): # type:(str) -> dpkt.dns.Msg - dns = dpkt.dns.DNS() - dns.op = dpkt.dns.DNS_QR | dpkt.dns.DNS_AA - dns.rcode = dpkt.dns.DNS_RCODE_NOERR - arr = dpkt.dns.DNS.RR() - arr.name = mdns_service - arr.cls = dpkt.dns.DNS_IN - arr.type = dpkt.dns.DNS_SRV - arr.priority = 0 - arr.weight = 0 - arr.port = 100 - arr.srvname = mdns_service - arr.ip = socket.inet_aton('127.0.0.1') - dns.an.append(arr) - print('Created answer to mdns query: {} '.format(dns.__repr__())) - return dns.pack() - - -@pytest.mark.skip -def mdns_listener(esp_host): # type:(str) -> None - print('mdns_listener thread started') - - UDP_IP = '0.0.0.0' - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - sock.setblocking(False) - sock.bind((UDP_IP, UDP_PORT)) - mreq = struct.pack('4sl', socket.inet_aton(MCAST_GRP), socket.INADDR_ANY) - sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - last_query_timepoint = time.time() - QUERY_TIMEOUT = 0.2 - while not stop_mdns_listener.is_set(): - try: - start_mdns_listener.set() - current_time = time.time() - if current_time - last_query_timepoint > QUERY_TIMEOUT: - last_query_timepoint = current_time - timeout = max( - 0, QUERY_TIMEOUT - (current_time - last_query_timepoint)) - read_socks, _, _ = select.select([sock], [], [], timeout) - if not read_socks: - continue - data, _ = sock.recvfrom(1024) - dns = dpkt.dns.DNS(data) - # Receives queries from esp board and sends answers - if len(dns.qd) > 0: - if dns.qd[0].name == HOST_NAME: - print('Received query: {} '.format(dns.__repr__())) - sock.sendto(get_dns_answer_to_mdns(HOST_NAME), - (MCAST_GRP, UDP_PORT)) - if dns.qd[0].name == HOST_NAME: - print('Received query: {} '.format(dns.__repr__())) - sock.sendto(get_dns_answer_to_mdns(HOST_NAME), - (MCAST_GRP, UDP_PORT)) - if dns.qd[0].name == MDNS_HOST_SERVICE: - print('Received query: {} '.format(dns.__repr__())) - sock.sendto( - get_dns_answer_to_service_query(MDNS_HOST_SERVICE), - (MCAST_GRP, UDP_PORT)) - # Receives answers from esp board and sets event flags for python test cases - if len(dns.an) == 1: - if dns.an[0].name.startswith(SERVICE_NAME): - print('Received answer to service query: {}'.format( - dns.__repr__())) - esp_service_answered.set() - if len(dns.an) > 1: - if dns.an[1].name.startswith(SUB_SERVICE_NAME): - print('Received answer for sub service query: {}'.format( - dns.__repr__())) - esp_sub_service_answered.set() - if len(dns.an) > 0 and dns.an[0].type == dpkt.dns.DNS_A: - if dns.an[0].name == esp_host + u'.local': - print('Received answer to esp32-mdns query: {}'.format( - dns.__repr__())) - esp_host_answered.set() - if dns.an[0].name == esp_host + u'-delegated.local': - print('Received answer to esp32-mdns-delegate query: {}'. - format(dns.__repr__())) - esp_delegated_host_answered.set() - except socket.timeout: - break - except dpkt.UnpackError: - continue - - -@pytest.mark.skip -def create_socket(): # type:() -> socket.socket - UDP_IP = '0.0.0.0' - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) - sock.setblocking(False) - sock.bind((UDP_IP, UDP_PORT)) - mreq = struct.pack('4sl', socket.inet_aton(MCAST_GRP), socket.INADDR_ANY) - sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) - return sock - - -@pytest.mark.skip -def test_query_dns_http_service(service): # type: (str) -> None - print('SRV: Query {}'.format(service)) - sock = create_socket() - packet = get_mdns_service_query(service) - for _ in range(RETRY_COUNT): - if esp_service_answered.wait(timeout=25): - break - sock.sendto(packet, (MCAST_GRP, UDP_PORT)) - else: - raise RuntimeError( - 'Test has failed: did not receive mdns answer within timeout') - - -@pytest.mark.skip -def test_query_dns_sub_service(sub_service): # type: (str) -> None - print('PTR: Query {}'.format(sub_service)) - sock = create_socket() - packet = get_mdns_sub_service_query(sub_service) - for _ in range(RETRY_COUNT): - if esp_sub_service_answered.wait(timeout=25): - break - sock.sendto(packet, (MCAST_GRP, UDP_PORT)) - else: - raise RuntimeError( - 'Test has failed: did not receive mdns answer within timeout') - - -@pytest.mark.skip -def test_query_dns_host(esp_host): # type: (str) -> None - print('A: {}'.format(esp_host)) - sock = create_socket() - packet = get_dns_query_for_esp(esp_host) - for _ in range(RETRY_COUNT): - if esp_host_answered.wait(timeout=25): - break - sock.sendto(packet, (MCAST_GRP, UDP_PORT)) - else: - raise RuntimeError( - 'Test has failed: did not receive mdns answer within timeout') - - -@pytest.mark.skip -def test_query_dns_host_delegated(esp_host): # type: (str) -> None - print('A: {}'.format(esp_host)) - sock = create_socket() - packet = get_dns_query_for_esp(esp_host + '-delegated') - for _ in range(RETRY_COUNT): - if esp_delegated_host_answered.wait(timeout=25): - break - sock.sendto(packet, (MCAST_GRP, UDP_PORT)) - else: - raise RuntimeError( - 'Test has failed: did not receive mdns answer within timeout') - - -@pytest.mark.esp32 -@pytest.mark.esp32s2 -@pytest.mark.esp32c3 -@pytest.mark.generic -def test_app_esp_mdns(dut): - - # 1. get the dut host name (and IP address) - specific_host = dut.expect( - re.compile(b'mdns hostname set to: \[([^\]]+)\]'), # noqa: W605 - timeout=30).group(1).decode() - - esp_ip = dut.expect( - re.compile( - b' IPv4 address: ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)'), # noqa: W605 - timeout=30).group(1).decode() - print('Got IP={}'.format(esp_ip)) - - mdns_responder = Thread(target=mdns_listener, args=(str(specific_host), )) - - def start_case(case, desc, result): # type: (str, str, str) -> None - print('Starting {}: {}'.format(case, desc)) - dut.write(case) - res = bytes(result, encoding='utf8') - dut.expect(re.compile(res), timeout=30) - - try: - # start dns listener thread - mdns_responder.start() - - # wait untill mdns listener thred started - if not start_mdns_listener.wait(timeout=5): - raise ValueError( - 'Test has failed: mdns listener thread did not start') - - # query dns service from host, answer should be received from esp board - test_query_dns_http_service(SERVICE_NAME) - - # query dns sub-service from host, answer should be received from esp board - test_query_dns_sub_service(SUB_SERVICE_NAME) - - # query dns host name, answer should be received from esp board - test_query_dns_host(specific_host) - - # query dns host name delegated, answer should be received from esp board - test_query_dns_host_delegated(specific_host) - - # query service from esp board, answer should be received from host - start_case('CONFIG_TEST_QUERY_SERVICE', - 'Query SRV ESP32._http._tcp.local', 'SRV:ESP32') - - # query dns-host from esp board, answer should be received from host - start_case('CONFIG_TEST_QUERY_HOST', 'Query tinytester.local', - 'tinytester.local resolved to: 127.0.0.1') - - # query dns-host aynchrounusely from esp board, answer should be received from host - start_case('CONFIG_TEST_QUERY_HOST_ASYNC', - 'Query tinytester.local async', - 'Async query resolved to A:127.0.0.1') - - finally: - stop_mdns_listener.set() - mdns_responder.join() diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/sdkconfig.ci b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/sdkconfig.ci deleted file mode 100644 index d89171d..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/sdkconfig.ci +++ /dev/null @@ -1,13 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_MDNS_PUBLISH_DELEGATE_HOST=y -CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -CONFIG_EXAMPLE_CONNECT_ETHERNET=y -CONFIG_EXAMPLE_CONNECT_WIFI=n -CONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y -CONFIG_EXAMPLE_ETH_PHY_IP101=y -CONFIG_EXAMPLE_ETH_MDC_GPIO=23 -CONFIG_EXAMPLE_ETH_MDIO_GPIO=18 -CONFIG_EXAMPLE_ETH_PHY_RST_GPIO=5 -CONFIG_EXAMPLE_ETH_PHY_ADDR=1 -CONFIG_EXAMPLE_CONNECT_IPV6=y diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/sdkconfig.defaults b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/sdkconfig.defaults deleted file mode 100644 index 0c4ffe9..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/test_apps/sdkconfig.defaults +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_TEST_MDNS_ADD_MAC_TO_HOSTNAME=y -CONFIG_TEST_MDNS_PUBLISH_DELEGATE_HOST=y diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/CMakeLists.txt deleted file mode 100644 index 450d475..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -# This is the project CMakeLists.txt file for the test subproject -cmake_minimum_required(VERSION 3.16) - -set(EXTRA_COMPONENT_DIRS ../.. "$ENV{IDF_PATH}/tools/unit-test-app/components") - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(mdns_test) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/main/CMakeLists.txt b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/main/CMakeLists.txt deleted file mode 100644 index d04d217..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/main/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ - -idf_component_register(SRCS "test_mdns.c" - REQUIRES test_utils - INCLUDE_DIRS "." - PRIV_REQUIRES unity mdns) diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/main/test_mdns.c b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/main/test_mdns.c deleted file mode 100644 index 3ac613c..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/main/test_mdns.c +++ /dev/null @@ -1,156 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD - * - * SPDX-License-Identifier: Unlicense OR CC0-1.0 - */ - -#include "mdns.h" -#include "esp_event.h" -#include "unity.h" -#include "test_utils.h" - -#include "unity_fixture.h" -#include "memory_checks.h" - -#define MDNS_HOSTNAME "test-hostname" -#define MDNS_DELEGATE_HOSTNAME "delegate-hostname" -#define MDNS_INSTANCE "test-instance" -#define MDNS_SERVICE_NAME "_http" -#define MDNS_SERVICE_PROTO "_tcp" -#define MDNS_SERVICE_PORT 80 - -TEST_GROUP(mdns); - -TEST_SETUP(mdns) -{ - test_utils_record_free_mem(); - TEST_ESP_OK(test_utils_set_leak_level(0, ESP_LEAK_TYPE_CRITICAL, ESP_COMP_LEAK_GENERAL)); -} - -TEST_TEAR_DOWN(mdns) -{ - test_utils_finish_and_evaluate_leaks(32, 64); -} - -static void yield_to_all_priorities(void) -{ - // Lower the test-task priority before testing to ensure other tasks got executed on forced context switch - size_t test_task_prio_before = uxTaskPriorityGet(NULL); - vTaskPrioritySet(NULL, tskIDLE_PRIORITY); - taskYIELD(); // Let the RTOS to switch context - vTaskPrioritySet(NULL, test_task_prio_before); -} - - -TEST(mdns, api_fails_with_invalid_state) -{ - TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_init() ); - TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_hostname_set(MDNS_HOSTNAME) ); - TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_instance_name_set(MDNS_INSTANCE) ); - TEST_ASSERT_NOT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0) ); -} - -TEST(mdns, init_deinit) -{ - test_case_uses_tcpip(); - TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default()); - TEST_ASSERT_EQUAL(ESP_OK, mdns_init() ); - yield_to_all_priorities(); // Make sure that mdns task has executed to complete initialization - mdns_free(); - esp_event_loop_delete_default(); -} - -TEST(mdns, api_fails_with_expected_err) -{ - mdns_txt_item_t serviceTxtData[CONFIG_MDNS_MAX_SERVICES] = { {NULL, NULL}, - }; - mdns_ip_addr_t addr; - addr.addr.type = ESP_IPADDR_TYPE_V4; - addr.addr.u_addr.ip4.addr = esp_ip4addr_aton("127.0.0.1"); - addr.next = NULL; - for (int i = 0; i < CONFIG_MDNS_MAX_SERVICES; ++i) { - serviceTxtData[i].key = "Key"; - serviceTxtData[i].value = "Value"; - } - test_case_uses_tcpip(); - TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default()); - - TEST_ASSERT_EQUAL(ESP_OK, mdns_init() ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_hostname_set(MDNS_HOSTNAME) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_delegate_hostname_add(MDNS_DELEGATE_HOSTNAME, &addr) ); - yield_to_all_priorities(); // Make sure that mdns task has executed to add the hostname - TEST_ASSERT_TRUE(mdns_hostname_exists(MDNS_DELEGATE_HOSTNAME) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_instance_name_set(MDNS_INSTANCE) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, serviceTxtData, CONFIG_MDNS_MAX_SERVICES) ); - TEST_ASSERT_FALSE(mdns_service_exists(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_DELEGATE_HOSTNAME) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add_for_host(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_DELEGATE_HOSTNAME, - MDNS_SERVICE_PORT, serviceTxtData, CONFIG_MDNS_MAX_SERVICES) ); - TEST_ASSERT_TRUE(mdns_service_exists(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_DELEGATE_HOSTNAME) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_txt_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, serviceTxtData, CONFIG_MDNS_MAX_SERVICES) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_txt_item_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, "key1", "value1") ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_txt_item_remove(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, "key1") ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_port_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 8080) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_remove(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO) ); - yield_to_all_priorities(); // Make sure that mdns task has executed to remove the service - - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_delegate_hostname_remove(MDNS_DELEGATE_HOSTNAME) ); - yield_to_all_priorities(); // Make sure that mdns task has executed to remove the hostname - TEST_ASSERT_FALSE(mdns_service_exists(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_DELEGATE_HOSTNAME) ); - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_remove_all() ); - yield_to_all_priorities(); // Make sure that mdns task has executed to remove all services - - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, mdns_service_port_set(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 8080) ); - - mdns_free(); - esp_event_loop_delete_default(); -} - -TEST(mdns, query_api_fails_with_expected_err) -{ - mdns_result_t *results = NULL; - esp_ip6_addr_t addr6; - esp_ip4_addr_t addr4; - test_case_uses_tcpip(); - TEST_ASSERT_EQUAL(ESP_OK, esp_event_loop_create_default()); - - TEST_ASSERT_EQUAL(ESP_OK, mdns_init() ); - // check it is not possible to register a service or set an instance without configuring the hostname - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0)); - TEST_ASSERT_EQUAL(ESP_ERR_INVALID_ARG, mdns_instance_name_set(MDNS_INSTANCE)); - TEST_ASSERT_EQUAL(ESP_OK, mdns_hostname_set(MDNS_HOSTNAME)); - // hostname is set, now adding a service and instance should succeed - TEST_ASSERT_EQUAL(ESP_OK, mdns_service_add(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, MDNS_SERVICE_PORT, NULL, 0)); - TEST_ASSERT_EQUAL(ESP_OK, mdns_instance_name_set(MDNS_INSTANCE)); - - TEST_ASSERT_EQUAL(ESP_OK, mdns_query_ptr(MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, CONFIG_MDNS_MAX_SERVICES, &results) ); - mdns_query_results_free(results); - - TEST_ASSERT_EQUAL(ESP_OK, mdns_query_srv(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, &results) ); - mdns_query_results_free(results); - - TEST_ASSERT_EQUAL(ESP_OK, mdns_query_txt(MDNS_INSTANCE, MDNS_SERVICE_NAME, MDNS_SERVICE_PROTO, 10, &results) ); - mdns_query_results_free(results); - - TEST_ASSERT_EQUAL(ESP_ERR_NOT_FOUND, mdns_query_a(MDNS_HOSTNAME, 10, &addr4) ); - mdns_query_results_free(results); - - TEST_ASSERT_EQUAL(ESP_ERR_NOT_FOUND, mdns_query_aaaa(MDNS_HOSTNAME, 10, &addr6) ); - mdns_query_results_free(results); - - mdns_free(); - esp_event_loop_delete_default(); -} - -TEST_GROUP_RUNNER(mdns) -{ - RUN_TEST_CASE(mdns, api_fails_with_invalid_state) - RUN_TEST_CASE(mdns, api_fails_with_expected_err) - RUN_TEST_CASE(mdns, query_api_fails_with_expected_err) - RUN_TEST_CASE(mdns, init_deinit) -} - -void app_main(void) -{ - UNITY_MAIN(mdns); -} diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/pytest_app_mdns.py b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/pytest_app_mdns.py deleted file mode 100644 index 5106112..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/pytest_app_mdns.py +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD -# SPDX-License-Identifier: Apache-2.0 - -from pytest_embedded import Dut - - -def test_mdns(dut: Dut) -> None: - dut.expect_unity_test_output() diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/sdkconfig.ci b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/sdkconfig.ci deleted file mode 100644 index 9660719..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/sdkconfig.ci +++ /dev/null @@ -1,3 +0,0 @@ -CONFIG_IDF_TARGET="esp32" -CONFIG_UNITY_ENABLE_FIXTURE=y -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=n diff --git a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/sdkconfig.defaults b/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/sdkconfig.defaults deleted file mode 100644 index 168e08d..0000000 --- a/devices/mbits-esp32s2-wrover/managed_components/espressif__mdns/tests/unit_test/sdkconfig.defaults +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_UNITY_ENABLE_FIXTURE=y -CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=n diff --git a/devices/mbits-esp32s2-wrover/sdkconfig b/devices/mbits-esp32s2-wrover/sdkconfig index 9f35c31..7148513 100644 --- a/devices/mbits-esp32s2-wrover/sdkconfig +++ b/devices/mbits-esp32s2-wrover/sdkconfig @@ -1,6 +1,6 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.1.2 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) 5.1.3 Project Configuration # CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" @@ -1541,7 +1541,7 @@ 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_PLATFORM_TIME_ALT=y # CONFIG_MBEDTLS_HAVE_TIME_DATE is not set CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y CONFIG_MBEDTLS_SHA512_C=y @@ -1881,7 +1881,6 @@ CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN=y CONFIG_MDNS_MAX_INTERFACES=3 CONFIG_MDNS_MAX_SERVICES=10 CONFIG_MDNS_TASK_PRIORITY=1 -CONFIG_MDNS_ACTION_QUEUE_LEN=16 CONFIG_MDNS_TASK_STACK_SIZE=4096 # CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_MDNS_TASK_AFFINITY_CPU0=y diff --git a/devices/mbits-esp32s2-wrover/sdkconfig.combined b/devices/mbits-esp32s2-wrover/sdkconfig.combined new file mode 100644 index 0000000..8fbaa90 --- /dev/null +++ b/devices/mbits-esp32s2-wrover/sdkconfig.combined @@ -0,0 +1,2330 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) 5.1.3 Project Configuration +# +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED="Not determined" +CONFIG_SOC_TWAI_BRP_DIV_SUPPORTED="Not determined" +CONFIG_SOC_DPORT_WORKAROUND="Not determined" +CONFIG_SOC_CAPS_ECO_VER_MAX=301 +CONFIG_SOC_ADC_SUPPORTED=y +CONFIG_SOC_DAC_SUPPORTED=y +CONFIG_SOC_UART_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_GPTIMER_SUPPORTED=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_WIFI_SUPPORTED=y +CONFIG_SOC_SDIO_SLAVE_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_EMAC_SUPPORTED=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y +CONFIG_SOC_RTC_MEM_SUPPORTED=y +CONFIG_SOC_I2S_SUPPORTED=y +CONFIG_SOC_RMT_SUPPORTED=y +CONFIG_SOC_SDM_SUPPORTED=y +CONFIG_SOC_GPSPI_SUPPORTED=y +CONFIG_SOC_LEDC_SUPPORTED=y +CONFIG_SOC_I2C_SUPPORTED=y +CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_AES_SUPPORTED=y +CONFIG_SOC_MPI_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_FLASH_ENC_SUPPORTED=y +CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y +CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y +CONFIG_SOC_DPORT_WORKAROUND_DIS_INTERRUPT_LVL=5 +CONFIG_SOC_XTAL_SUPPORT_26M=y +CONFIG_SOC_XTAL_SUPPORT_40M=y +CONFIG_SOC_XTAL_SUPPORT_AUTO_DETECT=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DMA_SUPPORTED=y +CONFIG_SOC_ADC_PERIPH_NUM=2 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 +CONFIG_SOC_ADC_ATTEN_NUM=4 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=16 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=2 +CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=2 +CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=20 +CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=9 +CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 +CONFIG_SOC_SHARED_IDCACHE_SUPPORTED=y +CONFIG_SOC_IDCACHE_PER_CORE=y +CONFIG_SOC_CPU_CORES_NUM=2 +CONFIG_SOC_CPU_INTR_NUM=32 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 +CONFIG_SOC_DAC_CHAN_NUM=2 +CONFIG_SOC_DAC_RESOLUTION=8 +CONFIG_SOC_DAC_DMA_16BIT_ALIGN=y +CONFIG_SOC_GPIO_PORT=1 +CONFIG_SOC_GPIO_PIN_COUNT=40 +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0xFFFFFFFFFF +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0xEF0FEA +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_I2C_FIFO_LEN=32 +CONFIG_SOC_I2C_CMD_REG_NUM=16 +CONFIG_SOC_I2C_SUPPORT_SLAVE=y +CONFIG_SOC_I2C_SUPPORT_APB=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_1=y +CONFIG_SOC_I2S_SUPPORTS_APLL=y +CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y +CONFIG_SOC_I2S_SUPPORTS_PDM=y +CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=1 +CONFIG_SOC_I2S_SUPPORTS_ADC_DAC=y +CONFIG_SOC_I2S_SUPPORTS_ADC=y +CONFIG_SOC_I2S_SUPPORTS_DAC=y +CONFIG_SOC_I2S_SUPPORTS_LCD_CAMERA=y +CONFIG_SOC_I2S_TRANS_SIZE_ALIGN_WORD=y +CONFIG_SOC_I2S_LCD_I80_VARIANT=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=2 +CONFIG_SOC_LCD_I80_BUS_WIDTH=24 +CONFIG_SOC_LEDC_HAS_TIMER_SPECIFIC_MUX=y +CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_REF_TICK=y +CONFIG_SOC_LEDC_SUPPORT_HS_MODE=y +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=20 +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MMU_PERIPH_NUM=2 +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=3 +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=8 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 +CONFIG_SOC_RMT_GROUPS=1 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=8 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=64 +CONFIG_SOC_RMT_SUPPORT_REF_TICK=y +CONFIG_SOC_RMT_SUPPORT_APB=y +CONFIG_SOC_RMT_CHANNEL_CLK_INDEPENDENT=y +CONFIG_SOC_RTCIO_PIN_COUNT=18 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_SDM_GROUPS=1 +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 +CONFIG_SOC_SDM_CLK_SUPPORT_APB=y +CONFIG_SOC_SPI_HD_BOTH_INOUT_SUPPORTED=y +CONFIG_SOC_SPI_AS_CS_SUPPORTED=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_DMA_CHAN_NUM=2 +CONFIG_SOC_SPI_MAX_CS_NUM=3 +CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=8192 +CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_26M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_TIMER_GROUPS=2 +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=64 +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y +CONFIG_SOC_TOUCH_VERSION_1=y +CONFIG_SOC_TOUCH_SENSOR_NUM=10 +CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TWAI_CONTROLLER_NUM=1 +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_SUPPORT_MULTI_ADDRESS_LAYOUT=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_REF_TICK=y +CONFIG_SOC_UART_FIFO_LEN=128 +CONFIG_SOC_UART_BITRATE_MAX=5000000 +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SHA_SUPPORT_PARALLEL_ENG=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_192=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_SECURE_BOOT_V1=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=32 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_FAST_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_SLOW_MEM_PD=y +CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y +CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y +CONFIG_SOC_CLK_APLL_SUPPORTED=y +CONFIG_SOC_APLL_MULTIPLIER_OUT_MIN_HZ=350000000 +CONFIG_SOC_APLL_MULTIPLIER_OUT_MAX_HZ=500000000 +CONFIG_SOC_APLL_MIN_HZ=5303031 +CONFIG_SOC_APLL_MAX_HZ=125000000 +CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y +CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y +CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y +CONFIG_SOC_SDMMC_USE_IOMUX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_WIFI_WAPI_SUPPORT=y +CONFIG_SOC_WIFI_CSI_SUPPORT=y +CONFIG_SOC_WIFI_MESH_SUPPORT=y +CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y +CONFIG_SOC_WIFI_NAN_SUPPORT=y +CONFIG_SOC_BLE_SUPPORTED=y +CONFIG_SOC_BLE_MESH_SUPPORTED=y +CONFIG_SOC_BT_CLASSIC_SUPPORTED=y +CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y +CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32" +CONFIG_IDF_TARGET_ESP32=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# +# 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 +# CONFIG_APP_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_APP_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set +# end of Build type + +# +# Bootloader config +# +CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x1000 +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 +# 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 +# CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_8V is not set +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set +CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 +# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set +CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y +# end of Bootloader config + +# +# Security features +# +CONFIG_SECURE_BOOT_V1_SUPPORTED=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 +# end of Security features + +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y +CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +CONFIG_ESP_ROM_HAS_CRC_LE=y +CONFIG_ESP_ROM_HAS_CRC_BE=y +CONFIG_ESP_ROM_HAS_MZ_CRC32=y +CONFIG_ESP_ROM_HAS_JPEG_DECODE=y +CONFIG_ESP_ROM_HAS_UART_BUF_SWITCH=y +CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y +CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y + +# +# 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_80M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_40M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_26M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ="40m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y +# 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="8MB" +# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 +# end of Serial flasher config + +# +# Partition Table +# +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set +# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set +# CONFIG_PARTITION_TABLE_TWO_OTA is not set +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions-8MiB.csv" +CONFIG_PARTITION_TABLE_OFFSET=0x8000 +CONFIG_PARTITION_TABLE_MD5=y +# end of Partition Table + +# +# micro-ROS Settings +# +CONFIG_MICRO_ROS_ESP_XRCE_DDS_MIDDLEWARE=y +# CONFIG_MICRO_ROS_ESP_EMBEDDEDRTPS_MIDDLEWARE is not set +CONFIG_MICRO_ROS_ESP_NETIF_WLAN=y +# CONFIG_MICRO_ROS_ESP_NETIF_ENET is not set +# CONFIG_MICRO_ROS_ESP_UART_TRANSPORT is not set + +# +# WiFi Configuration +# +CONFIG_ESP_WIFI_SSID="myssid" +CONFIG_ESP_WIFI_PASSWORD="mypassword" +CONFIG_ESP_MAXIMUM_RETRY=5 +# end of WiFi Configuration + +CONFIG_MICRO_ROS_AGENT_IP="192.168.1.100" +CONFIG_MICRO_ROS_AGENT_PORT="8888" +# end of micro-ROS Settings + +# +# ROSMicroPy +# +CONFIG_MICRO_ROS_APP_STACK=10000 +CONFIG_MICRO_ROS_APP_TASK_PRIO=5 +# end of ROSMicroPy + +# +# Compiler options +# +# CONFIG_COMPILER_OPTIMIZATION_DEFAULT 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 is not set +# CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y +CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=0 +# 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 is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NORM=y +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +CONFIG_COMPILER_STACK_CHECK=y +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES 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_UART2 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 is not set +CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL=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=3 +CONFIG_BT_NIMBLE_MAX_BONDS=3 +CONFIG_BT_NIMBLE_MAX_CCCDS=8 +CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM=0 +CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=y +# CONFIG_BT_NIMBLE_PINNED_TO_CORE_1 is not set +CONFIG_BT_NIMBLE_PINNED_TO_CORE=0 +CONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=4096 +CONFIG_BT_NIMBLE_ROLE_CENTRAL=y +CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y +CONFIG_BT_NIMBLE_ROLE_OBSERVER=y +CONFIG_BT_NIMBLE_NVS_PERSIST=y +CONFIG_BT_NIMBLE_SECURITY_ENABLE=y +CONFIG_BT_NIMBLE_SM_LEGACY=y +CONFIG_BT_NIMBLE_SM_SC=y +# CONFIG_BT_NIMBLE_SM_SC_DEBUG_KEYS is not set +CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_ENCRYPTION=y +# CONFIG_BT_NIMBLE_DEBUG is not set +# CONFIG_BT_NIMBLE_DYNAMIC_SERVICE is not set +CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" +CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 +CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256 +CONFIG_BT_NIMBLE_SVC_GAP_APPEARANCE=0 + +# +# Memory Settings +# +CONFIG_BT_NIMBLE_MSYS_1_BLOCK_COUNT=12 +CONFIG_BT_NIMBLE_MSYS_1_BLOCK_SIZE=256 +CONFIG_BT_NIMBLE_MSYS_2_BLOCK_COUNT=24 +CONFIG_BT_NIMBLE_MSYS_2_BLOCK_SIZE=320 +CONFIG_BT_NIMBLE_TRANSPORT_ACL_FROM_LL_COUNT=20 +CONFIG_BT_NIMBLE_TRANSPORT_ACL_SIZE=255 +CONFIG_BT_NIMBLE_TRANSPORT_EVT_SIZE=70 +CONFIG_BT_NIMBLE_TRANSPORT_EVT_COUNT=30 +CONFIG_BT_NIMBLE_TRANSPORT_EVT_DISCARD_COUNT=8 +# end of Memory Settings + +CONFIG_BT_NIMBLE_GATT_MAX_PROCS=4 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL=y +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_ITVL=1000 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_THRESH=2 +CONFIG_BT_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y +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_HOST_BASED_PRIVACY is not set +# CONFIG_BT_NIMBLE_ENABLE_CONN_REATTEMPT is not set +CONFIG_BT_NIMBLE_WHITELIST_SIZE=12 +# 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_LEGACY_VHCI_ENABLE=y +# CONFIG_BT_NIMBLE_BLE_GATT_BLOB_TRANSFER is not set + +# +# BLE Services +# +# CONFIG_BT_NIMBLE_HID_SERVICE is not set +# end of BLE Services + +# CONFIG_BT_NIMBLE_VS_SUPPORT is not set +# CONFIG_BT_NIMBLE_HIGH_DUTY_ADV_ITVL is not set +# CONFIG_BT_NIMBLE_HOST_QUEUE_CONG_CHECK is not set +# end of NimBLE Options + +# +# Controller Options +# +CONFIG_BTDM_CTRL_MODE_BLE_ONLY=y +# CONFIG_BTDM_CTRL_MODE_BR_EDR_ONLY is not set +# CONFIG_BTDM_CTRL_MODE_BTDM is not set +CONFIG_BTDM_CTRL_BLE_MAX_CONN=3 +CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF=0 +CONFIG_BTDM_CTRL_PCM_ROLE_EFF=0 +CONFIG_BTDM_CTRL_PCM_POLAR_EFF=0 +CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CTRL_PINNED_TO_CORE_0=y +# CONFIG_BTDM_CTRL_PINNED_TO_CORE_1 is not set +CONFIG_BTDM_CTRL_PINNED_TO_CORE=0 +CONFIG_BTDM_CTRL_HCI_MODE_VHCI=y +# CONFIG_BTDM_CTRL_HCI_MODE_UART_H4 is not set + +# +# MODEM SLEEP Options +# +CONFIG_BTDM_CTRL_MODEM_SLEEP=y +CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG=y +# CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_EVED is not set +CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL=y +# end of MODEM SLEEP Options + +CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM=y +CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 +CONFIG_BTDM_BLE_SCAN_DUPL=y +CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE=y +# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA is not set +# CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE is not set +CONFIG_BTDM_SCAN_DUPL_TYPE=0 +CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE=100 +CONFIG_BTDM_SCAN_DUPL_CACHE_REFRESH_PERIOD=0 +# CONFIG_BTDM_BLE_MESH_SCAN_DUPL_EN is not set +CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED=y +CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP=y +CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM=100 +CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 +CONFIG_BTDM_RESERVE_DRAM=0xdb5c +CONFIG_BTDM_CTRL_HLI=y +# end of Controller Options +# end of Bluetooth + +# CONFIG_BLE_MESH is not set + +# +# Driver Configurations +# + +# +# Legacy ADC Configuration +# +CONFIG_ADC_DISABLE_DAC=y +# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set + +# +# Legacy ADC Calibration Configuration +# +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y +# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy ADC Calibration Configuration +# end of Legacy ADC Configuration + +# +# SPI Configuration +# +# 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 SPI Configuration + +# +# TWAI Configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +# CONFIG_TWAI_ERRATA_FIX_BUS_OFF_REC is not set +# CONFIG_TWAI_ERRATA_FIX_TX_INTR_LOST is not set +# CONFIG_TWAI_ERRATA_FIX_RX_FRAME_INVALID is not set +# CONFIG_TWAI_ERRATA_FIX_RX_FIFO_CORRUPT is not set +# CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM is not set +# end of TWAI Configuration + +# +# UART Configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART Configuration + +# +# GPIO Configuration +# +# CONFIG_GPIO_ESP32_SUPPORT_SWITCH_SLP_PULL is not set +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of GPIO Configuration + +# +# Sigma Delta Modulator Configuration +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of Sigma Delta Modulator Configuration + +# +# GPTimer Configuration +# +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of GPTimer Configuration + +# +# PCNT Configuration +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of PCNT Configuration + +# +# RMT Configuration +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of RMT Configuration + +# +# MCPWM Configuration +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of MCPWM Configuration + +# +# I2S Configuration +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of I2S Configuration + +# +# DAC Configuration +# +# CONFIG_DAC_CTRL_FUNC_IN_IRAM is not set +# CONFIG_DAC_ISR_IRAM_SAFE is not set +# CONFIG_DAC_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_DAC_ENABLE_DEBUG_LOG is not set +CONFIG_DAC_DMA_AUTO_16BIT_ALIGN=y +# end of DAC Configuration +# end of Driver Configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE is not set +CONFIG_EFUSE_CODE_SCHEME_COMPAT_3_4=y +# CONFIG_EFUSE_CODE_SCHEME_COMPAT_REPEAT is not set +CONFIG_EFUSE_MAX_BLK_LEN=192 +# 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 is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# CONFIG_ESP_TLS_INSECURE is not set +# end of ESP-TLS + +# +# ADC and ADC Calibration +# +# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set + +# +# ADC Calibration Configurations +# +CONFIG_ADC_CALI_EFUSE_TP_ENABLE=y +CONFIG_ADC_CALI_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CALI_LUT_ENABLE=y +# end of ADC Calibration Configurations + +CONFIG_ADC_DISABLE_DAC_OUTPUT=y +# end of ADC and ADC Calibration + +# +# Wireless Coexistence +# +CONFIG_ESP_COEX_SW_COEXIST_ENABLE=y +# end of Wireless Coexistence + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +CONFIG_ESP_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y +# end of Common ESP-related + +# +# Ethernet +# +CONFIG_ETH_ENABLED=y +CONFIG_ETH_USE_ESP32_EMAC=y +CONFIG_ETH_PHY_INTERFACE_RMII=y +CONFIG_ETH_RMII_CLK_INPUT=y +# CONFIG_ETH_RMII_CLK_OUTPUT is not set +CONFIG_ETH_RMII_CLK_IN_GPIO=0 +CONFIG_ETH_DMA_BUFFER_SIZE=512 +CONFIG_ETH_DMA_RX_BUFFER_NUM=10 +CONFIG_ETH_DMA_TX_BUFFER_NUM=10 +# CONFIG_ETH_IRAM_OPTIMIZATION is not set +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 +# +# 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=y +# end of ESP HTTP client + +# +# HTTP Server +# +CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +# CONFIG_HTTPD_WS_SUPPORT is not set +# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set +# 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 +# end of ESP HTTPS OTA + +# +# ESP HTTPS server +# +# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set +# end of ESP HTTPS server + +# +# Hardware Settings +# + +# +# Chip revision +# +# CONFIG_ESP32_REV_MIN_0 is not set +CONFIG_ESP32_REV_MIN_1=y +# CONFIG_ESP32_REV_MIN_1_1 is not set +# CONFIG_ESP32_REV_MIN_2 is not set +# CONFIG_ESP32_REV_MIN_3 is not set +# CONFIG_ESP32_REV_MIN_3_1 is not set +CONFIG_ESP32_REV_MIN=1 +CONFIG_ESP32_REV_MIN_FULL=100 +CONFIG_ESP_REV_MIN_FULL=100 + +# +# Maximum Supported ESP32 Revision (Rev v3.99) +# +CONFIG_ESP32_REV_MAX_FULL=399 +CONFIG_ESP_REV_MAX_FULL=399 +# 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_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES=4 +# CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR is not set +# CONFIG_ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC is not set +# end of MAC Config + +# +# Sleep Config +# +CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND=y +CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y +# CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU is not set +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +# CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND is not set +CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 +CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_INT_RC=y +# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_RTC_CLK_CAL_CYCLES=1024 +# end of RTC Clock Config + +# +# Peripheral Control +# +CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# end of Peripheral Control + +# +# Main XTAL Config +# +# CONFIG_XTAL_FREQ_26 is not set +# CONFIG_XTAL_FREQ_40 is not set +CONFIG_XTAL_FREQ_AUTO=y +CONFIG_XTAL_FREQ=0 +# end of Main XTAL Config +# end of Hardware Settings + +# +# LCD and Touch Panel +# + +# +# LCD Touch Drivers are maintained in the IDF Component Registry +# + +# +# LCD Peripheral Configuration +# +CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_ENABLE_DEBUG_LOG is not set +# end of LCD Peripheral Configuration +# end of LCD and Touch Panel + +# +# ESP NETIF Adapter +# +CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 +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_RECEIVE_REPORT_ERRORS is not set +# CONFIG_ESP_NETIF_L2_TAP is not set +# CONFIG_ESP_NETIF_BRIDGE_EN is not set +# end of ESP NETIF Adapter + +# +# Partition API Configuration +# +# end of Partition API Configuration + +# +# PHY +# +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=y +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 +# end of PHY + +# +# Power Management +# +CONFIG_PM_ENABLE=y +# CONFIG_PM_DFS_INIT_AUTO is not set +# CONFIG_PM_PROFILING is not set +# CONFIG_PM_TRACE is not set +CONFIG_PM_UPDATE_CCOMPARE_HLI_WORKAROUND=y +# end of Power Management + +# +# ESP PSRAM +# +CONFIG_SPIRAM=y + +# +# SPI RAM config +# +CONFIG_SPIRAM_MODE_QUAD=y +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_SPEED_40M=y +CONFIG_SPIRAM_SPEED=40 +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_USE_MEMMAP is not set +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +CONFIG_SPIRAM_USE_MALLOC=y +CONFIG_SPIRAM_MEMTEST=y +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 +# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 +CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY=y +CONFIG_SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY=y +CONFIG_SPIRAM_CACHE_WORKAROUND=y + +# +# SPIRAM cache workaround debugging +# +CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_MEMW=y +# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_DUPLDST is not set +# CONFIG_SPIRAM_CACHE_WORKAROUND_STRATEGY_NOPS is not set +# end of SPIRAM cache workaround debugging + +# +# SPIRAM workaround libraries placement +# +# CONFIG_SPIRAM_CACHE_LIBJMP_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBMATH_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBNUMPARSER_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBIO_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBTIME_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBCHAR_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBMEM_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBSTR_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBRAND_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBENV_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBFILE_IN_IRAM is not set +# CONFIG_SPIRAM_CACHE_LIBMISC_IN_IRAM is not set +# end of SPIRAM workaround libraries placement + +CONFIG_SPIRAM_BANKSWITCH_ENABLE=y +CONFIG_SPIRAM_BANKSWITCH_RESERVE=8 +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y + +# +# PSRAM clock and cs IO for ESP32-DOWD +# +CONFIG_D0WD_PSRAM_CLK_IO=17 +CONFIG_D0WD_PSRAM_CS_IO=16 +# end of PSRAM clock and cs IO for ESP32-DOWD + +# +# PSRAM clock and cs IO for ESP32-D2WD +# +CONFIG_D2WD_PSRAM_CLK_IO=9 +CONFIG_D2WD_PSRAM_CS_IO=10 +# end of PSRAM clock and cs IO for ESP32-D2WD + +# +# PSRAM clock and cs IO for ESP32-PICO-D4 +# +CONFIG_PICO_PSRAM_CS_IO=10 +# end of PSRAM clock and cs IO for ESP32-PICO-D4 + +# CONFIG_SPIRAM_CUSTOM_SPIWP_SD3_PIN is not set +CONFIG_SPIRAM_SPIWP_SD3_PIN=7 +# CONFIG_SPIRAM_2T_MODE is not set +# end of SPI RAM config +# end of ESP PSRAM + +# +# ESP Ringbuf +# +# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set +# end of ESP Ringbuf + +# +# ESP System Settings +# +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 + +# +# Memory +# +# CONFIG_ESP32_USE_FIXED_STATIC_RAM_SIZE is not set + +# +# Non-backward compatible options +# +# CONFIG_ESP_SYSTEM_ESP32_SRAM1_REGION_AS_IRAM is not set +# end of Non-backward compatible options +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32_TRAX is not set +CONFIG_ESP32_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + +# 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_GDBSTUB_RUNTIME is not set +CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 + +# +# Memory protection +# +# 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_CPU1 is not set +# 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_MULTIPLE_UART=y +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ESP_INT_WDT=y +CONFIG_ESP_INT_WDT_TIMEOUT_MS=800 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y +CONFIG_ESP_TASK_WDT_EN=y +CONFIG_ESP_TASK_WDT_INIT=y +# CONFIG_ESP_TASK_WDT_PANIC is not set +CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 +# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 is not set +# CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set +# 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_5=y + +# +# Brownout Detector +# +CONFIG_ESP_BROWNOUT_DET=y +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=0 +# end of Brownout Detector + +# CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE is not set +CONFIG_ESP32_ECO3_CACHE_LOCK_FIX=y +CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y +# end of ESP System Settings + +# +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1024 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# High resolution timer (esp_timer) +# +# CONFIG_ESP_TIMER_PROFILING is not set +CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y +CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y +CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 +# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set +CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 +CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y +CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 +CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y +# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set +CONFIG_ESP_TIMER_IMPL_TG0_LAC=y +# end of High resolution timer (esp_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=y +CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP_WIFI_CACHE_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_CSI_ENABLED is not set +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_AMSDU_TX_ENABLED is not set +CONFIG_ESP_WIFI_NVS_ENABLED=y +CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set +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_SOFTAP_SAE_SUPPORT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y +# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set +CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set +CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 +# CONFIG_ESP_WIFI_NAN_ENABLE is not set +CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y +CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y +# CONFIG_ESP_WIFI_WAPI_PSK is not set +# CONFIG_ESP_WIFI_11KV_SUPPORT is not set +# CONFIG_ESP_WIFI_MBO_SUPPORT is not set +# CONFIG_ESP_WIFI_DPP_SUPPORT is not set +# CONFIG_ESP_WIFI_11R_SUPPORT is not set +# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set + +# +# WPS Configuration Options +# +# CONFIG_ESP_WIFI_WPS_STRICT is not set +# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set +# end of WPS Configuration Options + +# CONFIG_ESP_WIFI_DEBUG_PRINT is not set +# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set +CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y +# 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_ALLOC_PREFER_EXTRAM=y +# CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# end of FAT Filesystem support + +# +# FreeRTOS +# + +# +# Kernel +# +# CONFIG_FREERTOS_SMP is not set +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_HZ=100 +# 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=2 +CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=2304 +# 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_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_GENERATE_RUN_TIME_STATS is not set +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +# end of Kernel + +# +# Port +# +# CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set +CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y +CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y +CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y +CONFIG_FREERTOS_ISR_STACKSIZE=1536 +CONFIG_FREERTOS_INTERRUPT_BACKTRACE=y +# CONFIG_FREERTOS_FPU_IN_ISR is not set +CONFIG_FREERTOS_TICK_SUPPORT_CORETIMER=y +CONFIG_FREERTOS_CORETIMER_0=y +# CONFIG_FREERTOS_CORETIMER_1 is not set +CONFIG_FREERTOS_SYSTICK_USES_CCOUNT=y +# CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set +# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +# end of Port + +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_DEBUG_OCDAWARE=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_DEFAULT_ASSERTION_LEVEL=0 +CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y +CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y +# end of Hardware Abstraction Layer (HAL) and Low Level (LL) + +# +# Heap memory debugging +# +# CONFIG_HEAP_POISONING_DISABLED is not set +CONFIG_HEAP_POISONING_LIGHT=y +# CONFIG_HEAP_POISONING_COMPREHENSIVE is not set +# CONFIG_HEAP_TRACING_OFF is not set +CONFIG_HEAP_TRACING_STANDALONE=y +# CONFIG_HEAP_TRACING_TOHOST is not set +CONFIG_HEAP_TRACING=y +CONFIG_HEAP_TRACING_STACK_DEPTH=2 +# CONFIG_HEAP_USE_HOOKS is not set +# CONFIG_HEAP_TASK_TRACKING is not set +# CONFIG_HEAP_TRACE_HASH_MAP is not set +# CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set +# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set +# end of Heap memory debugging + +# +# Log output +# +# 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 is not set +CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y +# CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set +CONFIG_LOG_DEFAULT_LEVEL=4 +CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y +# CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set +CONFIG_LOG_MAXIMUM_LEVEL=4 +CONFIG_LOG_COLORS=y +CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y +# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# end of Log output + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +# CONFIG_LWIP_NETIF_API is not set +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_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 +# 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=5744 +CONFIG_LWIP_TCP_WND_DEFAULT=5744 +CONFIG_LWIP_TCP_RECVMBOX_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_CPU1 is not set +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +CONFIG_LWIP_PPP_SUPPORT=y +CONFIG_LWIP_PPP_ENABLE_IPV6=y +CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 +CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 +# CONFIG_LWIP_PPP_NOTIFY_PHASE_SUPPORT is not set +CONFIG_LWIP_PPP_PAP_SUPPORT=y +CONFIG_LWIP_PPP_CHAP_SUPPORT=y +# CONFIG_LWIP_PPP_MSCHAP_SUPPORT is not set +# CONFIG_LWIP_PPP_MPPE_SUPPORT is not set +# CONFIG_LWIP_ENABLE_LCP_ECHO is not set +# CONFIG_LWIP_PPP_DEBUG_ON 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 +# end of SNTP + +CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 + +# +# Hooks +# +# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set +CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y +# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y +# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set +CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y +# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set +# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set +CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y +# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set +# 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 is not set +CONFIG_MBEDTLS_EXTERNAL_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_ECDH_LEGACY_CONTEXT=y +# 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_MAX_CERTS=200 +# end of Certificate Bundle + +CONFIG_MBEDTLS_ECP_RESTARTABLE=y +CONFIG_MBEDTLS_CMAC_C=y +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_HARDWARE_SHA=y +CONFIG_MBEDTLS_ROM_MD5=y +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set +CONFIG_MBEDTLS_HAVE_TIME=y +CONFIG_MBEDTLS_PLATFORM_TIME_ALT=y +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA512_C=y +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_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=y +# 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_LARGE_KEY_SOFTWARE_MPI 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 + +# +# Newlib +# +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y +# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set +# end of Newlib + +# +# NVS +# +# CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# end of NVS + +# +# OpenThread +# +# CONFIG_OPENTHREAD_ENABLED is not set + +# +# Thread Operational Dataset +# +CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" +CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" +CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 +CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 +CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" +CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" +CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" +# end of Thread Operational Dataset + +CONFIG_OPENTHREAD_XTAL_ACCURACY=130 +# CONFIG_OPENTHREAD_SPINEL_ONLY is not set +# CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE is not set + +# +# Thread Address Query Config +# +# end of Thread Address Query Config +# end of OpenThread + +# +# Protocomm +# +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y +# end of Protocomm + +# +# PThreads +# +CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set +CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" +# end of PThreads + +# +# MMU Config +# +CONFIG_MMU_PAGE_SIZE_64KB=y +CONFIG_MMU_PAGE_MODE="64KB" +CONFIG_MMU_PAGE_SIZE=0x10000 +# end of MMU Config + +# +# 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_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_SHARE_SPI1_BUS 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 + +# +# 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 + +# +# 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_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 is not set +# CONFIG_SPI_FLASH_SUPPORT_TH_CHIP is not set +# end of Auto-detect flash chips + +CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y +# end of SPI Flash driver + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=3 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +# end of SPIFFS Cache Configuration + +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y + +# +# Debug Configuration +# +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +# end of Debug Configuration +# end of SPIFFS Configuration + +# +# TCP Transport +# + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y +CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set +# end of Websocket +# end of TCP Transport + +# +# Ultra Low Power (ULP) Co-processor +# +CONFIG_ULP_COPROC_ENABLED=y +CONFIG_ULP_COPROC_TYPE_FSM=y +CONFIG_ULP_COPROC_RESERVE_MEM=2040 +# end of Ultra Low Power (ULP) Co-processor + +# +# Unity unit testing library +# +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_64BIT is not set +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set +# end of Unity unit testing library + +# +# Root Hub configuration +# +# end of Root Hub configuration + +# +# 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) +# 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_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 + +# +# mDNS +# +CONFIG_MDNS_MAX_INTERFACES=3 +CONFIG_MDNS_MAX_SERVICES=10 +CONFIG_MDNS_TASK_PRIORITY=1 +CONFIG_MDNS_TASK_STACK_SIZE=4096 +# CONFIG_MDNS_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_MDNS_TASK_AFFINITY_CPU0=y +# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set +CONFIG_MDNS_TASK_AFFINITY=0x0 +CONFIG_MDNS_SERVICE_ADD_TIMEOUT_MS=2000 +CONFIG_MDNS_TIMER_PERIOD_MS=100 +# CONFIG_MDNS_NETWORKING_SOCKET is not set +# CONFIG_MDNS_SKIP_SUPPRESSING_OWN_QUERIES is not set +# CONFIG_MDNS_ENABLE_DEBUG_PRINTS is not set +# CONFIG_MDNS_RESPOND_REVERSE_QUERIES is not set +CONFIG_MDNS_MULTIPLE_INSTANCE=y + +# +# MDNS Predefined interfaces +# +CONFIG_MDNS_PREDEF_NETIF_STA=y +CONFIG_MDNS_PREDEF_NETIF_AP=y +CONFIG_MDNS_PREDEF_NETIF_ETH=y +# end of MDNS Predefined interfaces +# end of mDNS +# 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_ESP32_NO_BLOBS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V2_1_BOOTLOADERS is not set +# CONFIG_ESP32_COMPATIBLE_PRE_V3_1_BOOTLOADERS is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_MONITOR_BAUD=115200 +# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set +CONFIG_OPTIMIZATION_LEVEL_RELEASE=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y +# CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED=y +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=0 +# CONFIG_CXX_EXCEPTIONS is not set +# CONFIG_STACK_CHECK_NONE is not set +CONFIG_STACK_CHECK_NORM=y +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +CONFIG_STACK_CHECK=y +# 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 is not set +CONFIG_NIMBLE_MEM_ALLOC_MODE_EXTERNAL=y +# CONFIG_NIMBLE_MEM_ALLOC_MODE_DEFAULT is not set +CONFIG_NIMBLE_MAX_CONNECTIONS=3 +CONFIG_NIMBLE_MAX_BONDS=3 +CONFIG_NIMBLE_MAX_CCCDS=8 +CONFIG_NIMBLE_L2CAP_COC_MAX_NUM=0 +CONFIG_NIMBLE_PINNED_TO_CORE_0=y +# CONFIG_NIMBLE_PINNED_TO_CORE_1 is not set +CONFIG_NIMBLE_PINNED_TO_CORE=0 +CONFIG_NIMBLE_TASK_STACK_SIZE=4096 +CONFIG_BT_NIMBLE_TASK_STACK_SIZE=4096 +CONFIG_NIMBLE_ROLE_CENTRAL=y +CONFIG_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_NIMBLE_ROLE_BROADCASTER=y +CONFIG_NIMBLE_ROLE_OBSERVER=y +CONFIG_NIMBLE_NVS_PERSIST=y +CONFIG_NIMBLE_SM_LEGACY=y +CONFIG_NIMBLE_SM_SC=y +# CONFIG_NIMBLE_SM_SC_DEBUG_KEYS is not set +# CONFIG_NIMBLE_DEBUG is not set +CONFIG_NIMBLE_SVC_GAP_DEVICE_NAME="nimble" +CONFIG_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=31 +CONFIG_NIMBLE_ATT_PREFERRED_MTU=256 +CONFIG_NIMBLE_SVC_GAP_APPEARANCE=0 +CONFIG_BT_NIMBLE_MSYS1_BLOCK_COUNT=12 +CONFIG_BT_NIMBLE_ACL_BUF_COUNT=20 +CONFIG_BT_NIMBLE_ACL_BUF_SIZE=255 +CONFIG_BT_NIMBLE_HCI_EVT_BUF_SIZE=70 +CONFIG_BT_NIMBLE_HCI_EVT_HI_BUF_COUNT=30 +CONFIG_BT_NIMBLE_HCI_EVT_LO_BUF_COUNT=8 +CONFIG_NIMBLE_HS_FLOW_CTRL=y +CONFIG_NIMBLE_HS_FLOW_CTRL_ITVL=1000 +CONFIG_NIMBLE_HS_FLOW_CTRL_THRESH=2 +CONFIG_NIMBLE_HS_FLOW_CTRL_TX_ON_DISCONNECT=y +CONFIG_NIMBLE_RPA_TIMEOUT=900 +# CONFIG_NIMBLE_MESH is not set +CONFIG_NIMBLE_CRYPTO_STACK_MBEDTLS=y +CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY=y +# CONFIG_BTDM_CONTROLLER_MODE_BR_EDR_ONLY is not set +# CONFIG_BTDM_CONTROLLER_MODE_BTDM is not set +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN=3 +CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN_EFF=3 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_ACL_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_BR_EDR_MAX_SYNC_CONN_EFF=0 +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 +CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI=y +# CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4 is not set +CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y +CONFIG_BLE_SCAN_DUPLICATE=y +CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR=y +# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA is not set +# CONFIG_SCAN_DUPLICATE_BY_ADV_DATA_AND_DEVICE_ADDR is not set +CONFIG_SCAN_DUPLICATE_TYPE=0 +CONFIG_DUPLICATE_SCAN_CACHE_SIZE=100 +# CONFIG_BLE_MESH_SCAN_DUPLICATE_EN is not set +CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED=y +CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED=y +CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM=100 +CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD=20 +CONFIG_ADC2_DISABLE_DAC=y +# CONFIG_MCPWM_ISR_IN_IRAM is not set +CONFIG_SW_COEXIST_ENABLE=y +CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE=y +CONFIG_ESP_WIFI_SW_COEXIST_ENABLE=y +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +# CONFIG_OTA_ALLOW_HTTP is not set +# CONFIG_TWO_UNIVERSAL_MAC_ADDRESS is not set +CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS=y +CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS=4 +CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32_RTC_CLK_SRC_INT_RC=y +CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC=y +# CONFIG_ESP32_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL is not set +# CONFIG_ESP32_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_OSC is not set +# CONFIG_ESP32_RTC_CLK_SRC_INT_8MD256 is not set +# CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_8MD256 is not set +CONFIG_ESP32_RTC_CLK_CAL_CYCLES=1024 +# CONFIG_ESP32_XTAL_FREQ_26 is not set +# CONFIG_ESP32_XTAL_FREQ_40 is not set +CONFIG_ESP32_XTAL_FREQ_AUTO=y +CONFIG_ESP32_XTAL_FREQ=0 +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=y +CONFIG_ESP32_REDUCE_PHY_TX_POWER=y +CONFIG_SPIRAM_SUPPORT=y +CONFIG_ESP32_SPIRAM_SUPPORT=y +# CONFIG_WIFI_LWIP_ALLOCATION_FROM_SPIRAM_FIRST is not set +# CONFIG_ESP32_DEFAULT_CPU_FREQ_80 is not set +# CONFIG_ESP32_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_TRACEMEM_RESERVE_DRAM=0x0 +# CONFIG_ESP32_PANIC_PRINT_HALT is not set +CONFIG_ESP32_PANIC_PRINT_REBOOT=y +# CONFIG_ESP32_PANIC_SILENT_REBOOT is not set +# CONFIG_ESP32_PANIC_GDBSTUB 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=115200 +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=800 +CONFIG_INT_WDT_CHECK_CPU1=y +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 is not set +# CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 is not set +# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP32_DEBUG_OCDAWARE=y +CONFIG_BROWNOUT_DET=y +CONFIG_ESP32_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_0=y +CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_0=y +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_7 is not set +# CONFIG_ESP32_BROWNOUT_DET_LVL_SEL_7 is not set +CONFIG_BROWNOUT_DET_LVL=0 +CONFIG_ESP32_BROWNOUT_DET_LVL=0 +# CONFIG_DISABLE_BASIC_ROM_CONSOLE 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=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +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_WAPI_PSK is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# CONFIG_WPA_11R_SUPPORT is not set +# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y +# 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=5744 +CONFIG_TCP_WND_DEFAULT=5744 +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_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +CONFIG_PPP_SUPPORT=y +# CONFIG_PPP_NOTIFY_PHASE_SUPPORT is not set +CONFIG_PPP_PAP_SUPPORT=y +CONFIG_PPP_CHAP_SUPPORT=y +# CONFIG_PPP_MSCHAP_SUPPORT is not set +# CONFIG_PPP_MPPE_SUPPORT is not set +# CONFIG_PPP_DEBUG_ON is not set +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_HRT=y +CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_HRT is not set +# CONFIG_ESP32_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32_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_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +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_ESP32_ULP_COPROC_ENABLED=y +CONFIG_ESP32_ULP_COPROC_RESERVE_MEM=2040 +CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT=y +CONFIG_SUPPORT_TERMIOS=y +CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS=1 +# End of deprecated options +# MicroPython on ESP32, ESP IDF configuration +# The following options override the defaults + +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# Compiler options: use -O2 and disable assertions to improve performance +CONFIG_COMPILER_OPTIMIZATION_PERF=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y + +# Application manager +CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y +CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y + +# Bootloader config +CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y +CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP=y +CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y + +# Change default log level to "ERROR" (instead of "INFO") +CONFIG_LOG_DEFAULT_LEVEL_ERROR=y + +# Set the maximum included log level higher than the default, +# so esp.osdebug() can enable more logging at runtime. +# +# To increase the max log verbosity to Debug or Verbose instead, comment +# CONFIG_LOG_MAXIMUM_LEVEL_INFO=y and uncomment one of the other settings. +# +# If not needed, the next line can be commented entirely to save binary size. +CONFIG_LOG_MAXIMUM_LEVEL_INFO=y +#CONFIG_LOG_MAXIMUM_LEVEL_DEBUG=y +#CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE=y + +# Main XTAL Config +# Only on: ESP32 +CONFIG_XTAL_FREQ_AUTO=y + +# ESP System Settings +# Only on: ESP32, ESP32S3 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=n + +# Power Management +CONFIG_PM_ENABLE=y + +# Memory protection +# This is required to allow allocating IRAM +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=n + +# FreeRTOS +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2 +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y + +# UDP +CONFIG_LWIP_PPP_SUPPORT=y +CONFIG_LWIP_PPP_PAP_SUPPORT=y +CONFIG_LWIP_PPP_CHAP_SUPPORT=y + +# SSL +# Use 4kiB output buffer instead of default 16kiB +CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y +CONFIG_MBEDTLS_HAVE_TIME_DATE=y +CONFIG_MBEDTLS_PLATFORM_TIME_ALT=y +CONFIG_MBEDTLS_HAVE_TIME=y + +# Disable ALPN support as it's not implemented in MicroPython +CONFIG_MBEDTLS_SSL_ALPN=n + +# Disable slow or unused EC curves +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=n +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=n +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=n +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=n + +# Disable certificate bundle as it's not implemented in MicroPython +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n + +# Allow mbedTLS to allocate from PSRAM or internal memory +# +# (The ESP-IDF default is internal-only, partly for physical security to prevent +# possible information leakage from unencrypted PSRAM contents on the original +# ESP32 - no PSRAM encryption on that chip. MicroPython doesn't support flash +# encryption and is already storing the Python heap in PSRAM so this isn't a +# significant factor in overall physical security.) +CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC=y + +# ULP coprocessor support +# Only on: ESP32, ESP32S2, ESP32S3 +CONFIG_ULP_COPROC_ENABLED=y +CONFIG_ULP_COPROC_TYPE_FSM=y +CONFIG_ULP_COPROC_RESERVE_MEM=2040 + +# For cmake build +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-4MiB.csv" + +# To reduce iRAM usage +CONFIG_ESP32_WIFI_IRAM_OPT=n +CONFIG_ESP32_WIFI_RX_IRAM_OPT=n + +# Legacy ADC Calibration Configuration +# Only on: ESP32 +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y + +# UART Configuration +CONFIG_UART_ISR_IN_IRAM=y + +# IDF 5 deprecated +CONFIG_ADC_SUPPRESS_DEPRECATE_WARN=y +CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y +CONFIG_I2S_SUPPRESS_DEPRECATE_WARN=y + +CONFIG_ETH_USE_SPI_ETHERNET=y +CONFIG_ETH_SPI_ETHERNET_W5500=y +CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL=y +CONFIG_ETH_SPI_ETHERNET_DM9051=y +CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR=y +CONFIG_BT_ENABLED=y +CONFIG_BT_NIMBLE_ENABLED=y +CONFIG_BT_CONTROLLER_ENABLED=y + +CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="MPY ESP32" + +CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4 + +# Put NimBLE on core 1, and for synchronisation +# with the ringbuffer and scheduler MP needs to be on the same core. +# MP on core 1 prevents interference with WiFi for time sensitive operations. +# Only on: ESP32, ESP32S2, ESP32S3 +CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=n +CONFIG_BT_NIMBLE_PINNED_TO_CORE_1=y +CONFIG_BT_NIMBLE_PINNED_TO_CORE=1 + +# Increase NimBLE task stack size from the default, because Python code +# (BLE IRQ handlers) will most likely run on this task. +CONFIG_BT_NIMBLE_TASK_STACK_SIZE=6144 diff --git a/devices/rmp-lcd-controller/.gitignore b/devices/rmp-lcd-controller/.gitignore new file mode 100644 index 0000000..1ba9508 --- /dev/null +++ b/devices/rmp-lcd-controller/.gitignore @@ -0,0 +1,3 @@ +build +sdkconfig.old +managed-components diff --git a/devices/rmp-lcd-controller/CMakeLists.txt b/devices/rmp-lcd-controller/CMakeLists.txt new file mode 100644 index 0000000..bf99443 --- /dev/null +++ b/devices/rmp-lcd-controller/CMakeLists.txt @@ -0,0 +1,98 @@ +cmake_minimum_required(VERSION 3.16) +message ("In Main CMake File") + +get_filename_component(PROJECT_DIR "./" ABSOLUTE) +message("Project Dir is ${PROJECT_DIR}") + +get_filename_component(COMPONENT_DIR ${PROJECT_DIR}/../../extra_packages ABSOLUTE) +message("Component Dir is ${COMPONENT_DIR}") + +get_filename_component(MICROPY_DIR ${PROJECT_DIR}/../../libs/micropython ABSOLUTE) +message("MicroPy Dir: ${MICROPY_DIR}") + +set(MICROPY_ARCH esp32S3) +get_filename_component(MICROPY_ARCH_DIR ${MICROPY_DIR}/ports/${MICROPY_ARCH} ABSOLUTE) +message("MicroPy Arch Dir: ${MICROPY_ARCH_DIR}") + +# Set the board if it's not already set. +if(NOT MICROPY_BOARD) + set(MICROPY_BOARD ESP32_GENERIC_S3) +endif() + +# Set the board directory and check that it exists. +if(NOT MICROPY_BOARD_DIR) + set(MICROPY_BOARD_DIR ${MICROPY_ARCH_DIR}/boards/${MICROPY_BOARD}) +endif() + +list(APPEND EXTRA_COMPONENT_DIRS + ${COMPONENT_DIR}/libmicroros + ${COMPONENT_DIR}/ROSMicroPy +) + +set(IDF_TARGET esp32S3) +set(IDF_ARCH esp32) +# Set the board if it's not already set. +if(NOT MICROPY_BOARD) + set(MICROPY_BOARD ESP32_GENERIC_S3) +endif() +get_filename_component(MICROPY_DIR ${PROJECT_DIR}/../../libs/micropython ABSOLUTE) +set (MICROPY_ARCH_DIR ${MICROPY_DIR}/ports/${IDF_ARCH} ) +set (MICROPY_BOARD_DIR ${MICROPY_ARCH_DIR}/boards/${MICROPY_BOARD}) + + + +message ("\r\nMicropython CMake #1") +message ("Project Dir: ${PROJECT_DIR}") +message ("CMake Source Dir: ${CMAKE_SOURCE_DIR}") +message ("Micropython Dir: ${MICROPY_DIR}") +message( "MicroPy Arch Dir: ${MICROPY_ARCH_DIR}") +message( "MicroPy Board Dir: ${MICROPY_BOARD_DIR}") + +# Include board config; this is expected to set (among other options): +# - SDKCONFIG_DEFAULTS +# - IDF_TARGET +include(${MICROPY_BOARD_DIR}/mpconfigboard.cmake) + +message("\r\nWrite Config File Starting..") + +message("\r\n\nSDK Defaults ${SDKCONFIG_DEFAULTS}") +message("MICROPY Archdir: ${MICROPY_ARCH_DIR}") + +set(SDK_CONFIG_FILE_IN ${PROJECT_DIR}/sdkconfig) +set(SDK_CONFIG_FILE ${PROJECT_DIR}/sdkconfig.combined) +set(SDK_CONFIG_FILE_BUILD ${CMAKE_BINARY_DIR}/sdkconfig) + +# Concatenate all sdkconfig files into a combined one for the IDF to use. +file(WRITE ${SDK_CONFIG_FILE} "") + +# +# Main Project config +# +file(READ ${SDK_CONFIG_FILE_IN} CONTENTS) +file(APPEND ${SDK_CONFIG_FILE} "${CONTENTS}") + +# +# Micropython Support +# +foreach(SDKCONFIG_DEFAULT ${SDKCONFIG_DEFAULTS}) + set(SDKCONFIG_DEFAULT_FULLPATH ${MICROPY_ARCH_DIR}/${SDKCONFIG_DEFAULT}) + message("SDK DEFAULT FULL: ${SDKCONFIG_DEFAULT_FULLPATH}") + file(READ ${SDKCONFIG_DEFAULT_FULLPATH} CONTENTS) + file(APPEND ${SDK_CONFIG_FILE} "${CONTENTS}") +endforeach() + +message("\r\nSDK_CONFIG_FILE ${SDK_CONFIG_FILE}") +message("\r\nSDK_CONFIG_FILE_BUILD ${SDK_CONFIG_FILE_BUILD}") +# +# Write Output +# +configure_file(${SDK_CONFIG_FILE} ${SDK_CONFIG_FILE_BUILD} ) +set(SDKCONFIG_DEFAULTS ${SDK_CONFIG_FILE_BUILD}) + +message("\r\nWrite Config File Complete") + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(rmp-lcd-controller) + + + diff --git a/devices/rmp-lcd-controller/README.md b/devices/rmp-lcd-controller/README.md new file mode 100644 index 0000000..9f62019 --- /dev/null +++ b/devices/rmp-lcd-controller/README.md @@ -0,0 +1,47 @@ +# ROSMicroPy LCD Controller. + + + +## Problem Statement +Using the ROSMicroPy firmware on an MBits ESP32 controller, for both the JoystickBit and the Maqueen Turtlebot work well to produce a cost effective ROS based robotic learning system. Although the JoystickBit has sufficient but limited functionality for expansion. + + + + + +
+ + + +
+ +A remote control unit that incorperatres an LCD along with the Joystick functionality where the LCD screen can provide a far greater range than the JoystickBit. i.e. Attach a streaming video feed to a ROS video widget and allow the user to see what the robot sees. + +![Front](../../docs/images/SwitchFrontv2.png) + +## Proposed solution +There is a growing popularity of LCD screens with build in ESP32 controllers that cost around $30 now. Just the screen by itself could be a decent controller with soft buttons. Adding on JoyCons further expand the functionality and start to present a form factor that is much more familiar to the end user. + +### Reference +* [LCD Display](https://www.aliexpress.us/item/3256804913729039.htm) + +* [Joycons](https://www.amazon.com/eXtremeRate-Handheld-Controller-Housing-Replacement/dp/B07MKV3FK8/) + +* [Mounting Rails](https://www.amazon.com/Deal4GO-Bracket-Replacement-Nintendo-Console/dp/B07NXXPKHB) + +* [Charging Cables](https://www.amazon.com/D-Gruoiza-Portable-Charger-Controller-Charging/dp/B0CB84ZMM5) + +## How it would work + +Add support for LVGL and the touch controller to the ROSMicroPy codebase and provide the correct Python functions to drive the display + +Develop a data driven layout manager that could allow form design to happen locally on a PC/Laptop, that can be transfered easilly to the device so that the screen can be rendered and button actions / ROS events can automatically be mapped by name reference. + +Currently evaluating [JSON Forms](https://jsonforms.io/) as a platform to work with. Most Screen development IDE's write code as you create the layout. JSON forms describes the screen, all the buttons, actions and other widgets, whcih is later rendered by a screen renderer. This allows the Screen layout to be rendered depending how it was implemented. A Web based IDE would use the React renderer or a Thonny plugin could use the TKinter renderer, any once the screen definition is produced an LVGL renderer will bring the screen to life on the device. + + +### Screen Builder IDE's +* [JSON Forms Editor](https://jsonforms-editor.netlify.app) +* [Form.io's Aurelia editor](https://github.com/formio/aurelia-formio) see [Demo](https://formio.github.io/aurelia-formio/) + + diff --git a/devices/rmp-lcd-controller/clean b/devices/rmp-lcd-controller/clean new file mode 100755 index 0000000..ce1af69 --- /dev/null +++ b/devices/rmp-lcd-controller/clean @@ -0,0 +1,8 @@ +#!/bin/bash +clear +idf.py clean +idf.py fullclean +rm -rf ./build +idf.py build + + diff --git a/devices/rmp-lcd-controller/compile b/devices/rmp-lcd-controller/compile new file mode 100755 index 0000000..faba11e --- /dev/null +++ b/devices/rmp-lcd-controller/compile @@ -0,0 +1,3 @@ +#!/bin/bash +idf.py build + diff --git a/devices/rmp-lcd-controller/dependencies.lock b/devices/rmp-lcd-controller/dependencies.lock new file mode 100644 index 0000000..c96be2b --- /dev/null +++ b/devices/rmp-lcd-controller/dependencies.lock @@ -0,0 +1,51 @@ +dependencies: + ROSMicroPy: + component_hash: null + source: + path: /opt/rosmicropy/extra_packages/ROSMicroPy/main_esp32s3 + type: local + version: '*' + espressif/esp_lcd_touch: + component_hash: d4d8f2dc33205797169a97a02e0d89a8982f59fe0509129b54422052b8522f59 + source: + service_url: https://api.components.espressif.com/ + type: service + version: 1.1.1 + espressif/esp_lcd_touch_gt911: + component_hash: 20ac25d1439dbe177764dbed9cd868388fecb052380b5349f2e9e370013ca76a + source: + service_url: https://api.components.espressif.com/ + type: service + version: 1.1.0 + espressif/esp_tinyusb: + component_hash: 5e37c53a10518f40b288a48afec4ab549784be9e6eb74add699a30395543418a + source: + service_url: https://api.components.espressif.com/ + type: service + version: 1.0.3 + espressif/mdns: + component_hash: 46ee81d32fbf850462d8af1e83303389602f6a6a9eddd2a55104cb4c063858ed + source: + service_url: https://api.components.espressif.com/ + type: service + version: 1.1.0 + espressif/tinyusb: + component_hash: a01cfb210e3bca8f046ca55b3aeb6b4329c22345ca2479e29d1ce7dc267abe65 + source: + service_url: https://api.components.espressif.com/ + type: service + version: 0.15.0~5 + idf: + component_hash: null + source: + type: idf + version: 5.1.3 + lvgl/lvgl: + component_hash: 948bff879a345149b83065535bbc4a026ce9f47498a22881e432a264b9098015 + source: + service_url: https://api.components.espressif.com/ + type: service + version: 8.3.11 +manifest_hash: a17c31391016793740e576ab115c8d7336e41b5e846a6e27bbb34d869b2c1c54 +target: esp32s3 +version: 1.0.0 diff --git a/devices/rmp-lcd-controller/flash b/devices/rmp-lcd-controller/flash new file mode 100755 index 0000000..6398683 --- /dev/null +++ b/devices/rmp-lcd-controller/flash @@ -0,0 +1,3 @@ +#!/bin/bash +idf.py flash + diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/CMakeLists.txt b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/CMakeLists.txt new file mode 100644 index 0000000..1fbb9b2 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/CMakeLists.txt @@ -0,0 +1,6 @@ +# Component directive +idf_component_register( + SRCS "bsp.c" + INCLUDE_DIRS . + REQUIRES esp3d_log lvgl esp_lcd i2c_bus gt911 disp_backlight +) \ No newline at end of file diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/bsp.c b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/bsp.c new file mode 100644 index 0000000..0db73d2 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/bsp.c @@ -0,0 +1,242 @@ +/* + esp3d_tft project + + Copyright (c) 2022 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/********************* + * INCLUDES + *********************/ +#include "bsp.h" +#include "esp3d_log.h" + +#if ESP3D_DISPLAY_FEATURE +#include "lvgl.h" +#include "i2c_def.h" +#include "disp_def.h" +#include "touch_def.h" +#endif // ESP3D_DISPLAY_FEATURE + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + +/********************** + * STATIC PROTOTYPES + **********************/ +#if ESP3D_DISPLAY_FEATURE +static bool disp_on_vsync_event(esp_lcd_panel_handle_t panel, const esp_lcd_rgb_panel_event_data_t *event_data, void *user_data); +static void lv_disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p); +static void lv_touch_read(lv_indev_drv_t * drv, lv_indev_data_t * data); +#endif + +/********************** + * STATIC VARIABLES + **********************/ +#if ESP3D_DISPLAY_FEATURE +static i2c_bus_handle_t i2c_bus_handle = NULL; +static lv_disp_drv_t disp_drv; +static esp_lcd_panel_handle_t disp_panel; + +#if DISP_AVOID_TEAR_EFFECT_WITH_SEM +// We use two semaphores to sync the VSYNC event and the LVGL task, to avoid potential tearing effect +static SemaphoreHandle_t _sem_vsync_end; +static SemaphoreHandle_t _sem_gui_ready; +#endif // DISP_AVOID_TEAR_EFFECT_WITH_SEM +#endif + +/********************** + * MACROS + **********************/ + +/********************** + * GLOBAL FUNCTIONS + **********************/ + +esp_err_t bsp_init(void) { +#if ESP3D_DISPLAY_FEATURE + /* Display backlight initialization */ + disp_backlight_h bcklt_handle = disp_backlight_new(&disp_bcklt_cfg); + disp_backlight_set(bcklt_handle, 0); + + /* Display panel initialization */ + esp3d_log("Initializing display..."); + ESP_ERROR_CHECK(esp_lcd_new_rgb_panel(&disp_panel_cfg, &disp_panel)); + ESP_ERROR_CHECK(esp_lcd_panel_reset(disp_panel)); + ESP_ERROR_CHECK(esp_lcd_panel_init(disp_panel)); + //ESP_ERROR_CHECK(esp_lcd_panel_invert_color(disp_panel, true)); +#if DISP_ORIENTATION == 0 || DISP_ORIENTATION == 1 // portrait mode + ESP_ERROR_CHECK(esp_lcd_panel_swap_xy(disp_panel, true)); +#endif //DISP_ORIENTATION +#if DISP_ORIENTATION == 1 || DISP_ORIENTATION == 3 // mirrored + ESP_ERROR_CHECK(esp_lcd_panel_mirror(disp_panel, true, true)); +#endif //DISP_ORIENTATION + +#if DISP_AVOID_TEAR_EFFECT_WITH_SEM + esp3d_log("Create semaphores"); + _sem_vsync_end = xSemaphoreCreateBinary(); + if (!_sem_vsync_end) { + esp3d_log_e("Failed to create st7262_sem_vsync_end"); + return ESP_FAIL; + } + _sem_gui_ready = xSemaphoreCreateBinary(); + if (!_sem_gui_ready) { + esp3d_log_e("Failed to create st7262_sem_gui_ready"); + return ESP_FAIL; + } +#endif // DISP_AVOID_TEAR_EFFECT_WITH_SEM + + esp3d_log("Register VSync event callback"); + esp_lcd_rgb_panel_event_callbacks_t cbs = { + .on_vsync = disp_on_vsync_event, + }; + ESP_ERROR_CHECK(esp_lcd_rgb_panel_register_event_callbacks(disp_panel, &cbs, &disp_drv)); + + /* i2c controller initialization */ + esp3d_log("Initializing i2C controller..."); + i2c_bus_handle = i2c_bus_create(I2C_PORT_NUMBER, &i2c_cfg); + if (i2c_bus_handle == NULL) { + esp3d_log_e("I2C bus initialization failed!"); + return ESP_FAIL; + } + + /* Touch controller initialization */ + esp3d_log("Initializing touch controller..."); + bool has_touch_init = true; + if (gt911_init(i2c_bus_handle, >911_cfg) != ESP_OK) { + esp3d_log_e("Touch controller initialization failed!"); + has_touch_init = false; + } + + disp_backlight_set(bcklt_handle, DISP_BCKL_DEFAULT_DUTY); + + // Lvgl initialization + esp3d_log("Initializing LVGL..."); + lv_init(); + + /* Initialize the working buffer(s) depending on the selected display. */ + static lv_disp_draw_buf_t draw_buf; + esp3d_log("Display buffer size: %1.2f KB", DISP_BUF_SIZE_BYTES / 1024.0); + void* buf1 = NULL; + void* buf2 = NULL; +#if DISP_NUM_FB == 2 + esp3d_log("Use panel frame buffers as LVGL draw buffers"); + ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(disp_panel, 2, &buf1, &buf2)); +#else + esp3d_log("Allocate LVGL draw buffer"); + buf1 = heap_caps_malloc(DISP_BUF_SIZE_BYTES, MALLOC_CAP_SPIRAM); + if (buf1 == NULL) { + esp3d_log_e("Failed to allocate LVGL draw buffer 1"); + return ESP_FAIL; + } +#if DISP_USE_DOUBLE_BUFFER + esp3d_log("Allocate 2nd LVGL draw buffer"); + buf2 = heap_caps_malloc(DISP_BUF_SIZE_BYTES, MALLOC_CAP_SPIRAM); + if (buf2 == NULL) { + esp3d_log_e("Failed to allocate LVGL draw buffer 2"); + return ESP_FAIL; + } +#endif // DISP_USE_DOUBLE_BUFFER +#endif // DISP_NUM_FB == 2 + lv_disp_draw_buf_init(&draw_buf, buf1, buf2, DISP_BUF_SIZE); + + /* Register the display device */ + lv_disp_drv_init(&disp_drv); + disp_drv.flush_cb = lv_disp_flush; + disp_drv.draw_buf = &draw_buf; + disp_drv.hor_res = DISP_HOR_RES_MAX; + disp_drv.ver_res = DISP_VER_RES_MAX; +#if DISP_NUM_FB == 2 + // The full_refresh mode can maintain the synchronization between the two frame buffers + disp_drv.full_refresh = true; +#else + disp_drv.full_refresh = false; +#endif + lv_disp_drv_register(&disp_drv); + + if (has_touch_init) { + /* Register the touch input device */ + static lv_indev_drv_t indev_drv; + lv_indev_drv_init(&indev_drv); + indev_drv.type = LV_INDEV_TYPE_POINTER; + indev_drv.read_cb = lv_touch_read; + lv_indev_drv_register(&indev_drv); + } +#endif // ESP3D_DISPLAY_FEATURE + return ESP_OK; +} + +esp_err_t bsp_accessFs(void) { +#if ESP3D_DISPLAY_FEATURE + esp_err_t ret = esp_lcd_rgb_panel_set_pclk(disp_panel, 6 * 1000 * 1000); + vTaskDelay(pdMS_TO_TICKS(40)); + return ret; +#endif // ESP3D_DISPLAY_FEATURE + return ESP_OK; +} + +esp_err_t bsp_releaseFs(void) { +#if ESP3D_DISPLAY_FEATURE + esp_err_t ret = esp_lcd_rgb_panel_set_pclk(disp_panel, DISP_CLK_FREQ); + vTaskDelay(pdMS_TO_TICKS(40)); + return ret; +#endif // ESP3D_DISPLAY_FEATURE + return ESP_OK; +} + +/********************** + * STATIC FUNCTIONS + **********************/ +#if ESP3D_DISPLAY_FEATURE + +static bool disp_on_vsync_event(esp_lcd_panel_handle_t panel, const esp_lcd_rgb_panel_event_data_t *event_data, void *user_data) { + BaseType_t high_task_awoken = pdFALSE; +#if DISP_AVOID_TEAR_EFFECT_WITH_SEM + if (xSemaphoreTakeFromISR(_sem_gui_ready, &high_task_awoken) == pdTRUE) { + xSemaphoreGiveFromISR(_sem_vsync_end, &high_task_awoken); + } +#endif // DISP_AVOID_TEAR_EFFECT_WITH_SEM + return high_task_awoken == pdTRUE; +} + +static void lv_disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { +#if DISP_AVOID_TEAR_EFFECT_WITH_SEM + xSemaphoreGive(_sem_gui_ready); + xSemaphoreTake(_sem_vsync_end, portMAX_DELAY); +#endif // DISP_AVOID_TEAR_EFFECT_WITH_SEM + esp_lcd_panel_draw_bitmap(disp_panel, area->x1, area->y1, area->x2 + 1, area->y2 + 1, color_p); + lv_disp_flush_ready(disp_drv); +} + +static void lv_touch_read(lv_indev_drv_t *drv, lv_indev_data_t *data) { + static uint16_t last_x, last_y; + gt911_data_t touch_data = gt911_read(); + if (touch_data.is_pressed) { + last_x = touch_data.x; + last_y = touch_data.y; + esp3d_log("Touch x=%d, y=%d", last_x, last_y); + } + data->point.x = last_x; + data->point.y = last_y; + data->state = touch_data.is_pressed ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; +} + +#endif diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/bsp.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/bsp.h new file mode 100644 index 0000000..9a345a4 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/bsp.h @@ -0,0 +1,49 @@ +/* + esp3d_tft project + + Copyright (c) 2022 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#include "esp_err.h" + +/********************* + * DEFINES + *********************/ +#if ESP3D_DISPLAY_FEATURE +#define ESP3D_PATCH_FS_ACCESS_RELEASE 1 +#define ESP3D_PATCH_DELAY_REFRESH 1 +#endif // ESP3D_DISPLAY_FEATURE + +/********************** + * GLOBAL PROTOTYPES + **********************/ +esp_err_t bsp_init(void); +esp_err_t bsp_accessFs(void); +esp_err_t bsp_releaseFs(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/disp_def.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/disp_def.h new file mode 100644 index 0000000..0071dac --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/disp_def.h @@ -0,0 +1,123 @@ +// Display definitions for ESP32_8048S050C +// Display driver ST7262 (16-bit RGB565 parallel interface) +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +#define TFT_DISPLAY_CONTROLLER "ST7262" + +#include "esp_lcd_panel_commands.h" +#include "esp_lcd_panel_ops.h" +#include "esp_lcd_panel_interface.h" +#include "esp_lcd_panel_rgb.h" +#include "disp_backlight.h" + +/* +PORTRAIT 0 +PORTRAIT_INVERTED 1 +LANDSCAPE 2 +LANDSCAPE_INVERTED 3 +*/ + +#define DISP_ORIENTATION 2 // landscape + +#if DISP_ORIENTATION == 2 || DISP_ORIENTATION == 3 // landscape mode +#define DISP_HOR_RES_MAX 800 +#define DISP_VER_RES_MAX 480 +#else // portrait mode +#define DISP_HOR_RES_MAX 480 +#define DISP_VER_RES_MAX 800 +#endif + +#define DISP_CLK_FREQ (14 * 1000 * 1000) +#define DISP_AVOID_TEAR_EFFECT_WITH_SEM (true) +#define DISP_USE_BOUNCE_BUFFER (false) +#define DISP_USE_DOUBLE_BUFFER (true) +#define DISP_NUM_FB (1) + +#if DISP_NUM_FB == 2 + // Full frame buffer (255KB) in external PSRAM + #define DISP_BUF_SIZE (DISP_HOR_RES_MAX * DISP_VER_RES_MAX) +#else + // 1/4 (68-line) buffer (63.75KB) in external PSRAM + #define DISP_BUF_SIZE (DISP_HOR_RES_MAX * DISP_VER_RES_MAX / 4) +#endif // WITH_PSRAM +#define DISP_BUF_SIZE_BYTES (DISP_BUF_SIZE * 2) + +const esp_lcd_rgb_panel_config_t disp_panel_cfg = { + .clk_src = LCD_CLK_SRC_DEFAULT, + .timings = { + .pclk_hz = DISP_CLK_FREQ, + .h_res = DISP_HOR_RES_MAX, + .v_res = DISP_VER_RES_MAX, + .hsync_pulse_width = 4, + .hsync_back_porch = 8, + .hsync_front_porch = 8, + .vsync_pulse_width = 4, + .vsync_back_porch = 8, + .vsync_front_porch = 8, + .flags = { + .hsync_idle_low = 0, + .vsync_idle_low = 0, + .de_idle_high = 0, + .pclk_active_neg = true, + .pclk_idle_high = 0, + }, + }, + .data_width = 16, // RGB565 in parallel mode + .bits_per_pixel = 0, + .num_fbs = DISP_NUM_FB, +#if DISP_USE_BOUNCE_BUFFER + .bounce_buffer_size_px = DISP_BUF_SIZE, +#else + .bounce_buffer_size_px = 0, +#endif + .sram_trans_align = 0, + .psram_trans_align = 64, + .hsync_gpio_num = 39, // GPIO 39 + .vsync_gpio_num = 41, // GPIO 41 + .de_gpio_num = 40, // GPIO 40 + .pclk_gpio_num = 42, // GPIO 42 + .disp_gpio_num = -1, // EN pin not connected + .data_gpio_nums = { + 8, // D0 (B0) - GPIO 8 + 3, // D1 (B1) - GPIO 3 + 46, // D2 (B2) - GPIO 46 + 9, // D3 (B3) - GPIO 9 + 1, // D4 (B4) - GPIO 1 + 5, // D5 (G0) - GPIO 5 + 6, // D6 (G1) - GPIO 6 + 7, // D7 (G2) - GPIO 7 + 15, // D8 (G3) - GPIO 15 + 16, // D9 (G4) - GPIO 16 + 4, // D10 (G5) - GPIO 4 + 45, // D11 (R0) - GPIO 45 + 48, // D12 (R1) - GPIO 48 + 47, // D13 (R2) - GPIO 47 + 21, // D14 (R3) - GPIO 21 + 14, // D15 (R4) - GPIO 14 + }, + .flags = { + .disp_active_low = (uint32_t)NULL, + .refresh_on_demand = (uint32_t)NULL, + .fb_in_psram = true, // Do not change this, as it is mandatory for RGB parallel interface and octal PSRAM + .double_fb = (uint32_t)NULL, + .no_fb = (uint32_t)NULL, + .bb_invalidate_cache = (uint32_t)NULL, + } +}; + +#define DISP_BCKL_DEFAULT_DUTY 20 //% + +const disp_backlight_config_t disp_bcklt_cfg = { + .pwm_control = true, + .output_invert = false, + .gpio_num = 2, + .timer_idx = 0, + .channel_idx = 0 +}; + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/i2c_def.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/i2c_def.h new file mode 100644 index 0000000..eb26d86 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/i2c_def.h @@ -0,0 +1,22 @@ +// I2C definitions for ESP32_8048S050C +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +#include "i2c_bus.h" + +#define I2C_PORT_NUMBER 0 + +const i2c_config_t i2c_cfg = { + .mode = I2C_MODE_MASTER, + .scl_io_num = 20, // GPIO 20 + .sda_io_num = 19, // GPIO 19 + .scl_pullup_en = GPIO_PULLUP_ENABLE, + .sda_pullup_en = GPIO_PULLUP_ENABLE, + .master.clk_speed = 400*1000 +}; + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/lv_conf.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/lv_conf.h new file mode 100644 index 0000000..2a26e48 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/lv_conf.h @@ -0,0 +1,759 @@ +/** + * @file lv_conf.h + * Configuration file for v8.3.1 + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to the `lvgl` folder + * 2. or any other places and + * - define `LV_CONF_INCLUDE_SIMPLE` + * - add the path as include path + */ + +/* clang-format off */ +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H + +#include + +/*==================== + COLOR SETTINGS + *====================*/ + +/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ +#define LV_COLOR_DEPTH 16 + +/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/ +#define LV_COLOR_16_SWAP 0 + +/*Enable features to draw on transparent background. + *It's required if opa, and transform_* style properties are used. + *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/ +#define LV_COLOR_SCREEN_TRANSP 1 + +/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS (LV_COLOR_DEPTH == 32 ? 0: 128) + +/*Images pixels with this color will not be drawn if they are chroma keyed)*/ +#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*pure green*/ + +/*========================= + MEMORY SETTINGS + *=========================*/ + +/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/ +#define LV_MEM_CUSTOM 1 +#if LV_MEM_CUSTOM == 0 +/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/ +#define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/ + +/*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ +#define LV_MEM_ADR 0 /*0: unused*/ +/*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ +#if LV_MEM_ADR == 0 +#undef LV_MEM_POOL_INCLUDE +#undef LV_MEM_POOL_ALLOC +#endif + +#else /*LV_MEM_CUSTOM*/ +#define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ +#define LV_MEM_CUSTOM_ALLOC malloc +#define LV_MEM_CUSTOM_FREE free +#define LV_MEM_CUSTOM_REALLOC realloc +#endif /*LV_MEM_CUSTOM*/ + +/*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms. + *You will see an error log message if there wasn't enough buffers. */ +#define LV_MEM_BUF_MAX_NUM 16 + +/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/ +#define LV_MEMCPY_MEMSET_STD 0 + +/*==================== + HAL SETTINGS + *====================*/ + +/*Default display refresh period. LVG will redraw changed areas with this period time*/ +#define LV_DISP_DEF_REFR_PERIOD 30 /*[ms]*/ + +/*Input device read period in milliseconds*/ +#define LV_INDEV_DEF_READ_PERIOD 30 /*[ms]*/ + +/*Use a custom tick source that tells the elapsed time in milliseconds. + *It removes the need to manually update the tick with `lv_tick_inc()`)*/ +#define LV_TICK_CUSTOM 0 +#if LV_TICK_CUSTOM + #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h" /*Header for the system time function*/ + #define LV_TICK_CUSTOM_SYS_TIME_EXPR (esp_timer_get_time() / 1000LL) /*Expression evaluating to current system time in ms*/ +#endif /*LV_TICK_CUSTOM*/ + +/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + *(Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI_DEF 130 /*[px/inch]*/ + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Drawing + *-----------*/ + +/*Enable complex draw engine. + *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ +#define LV_DRAW_COMPLEX 1 +#if LV_DRAW_COMPLEX != 0 + +/*Allow buffering some shadow calculation. +*LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` +*Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ +#define LV_SHADOW_CACHE_SIZE 0 + +/* Set number of maximally cached circle data. +* The circumference of 1/4 circle are saved for anti-aliasing +* radius * 4 bytes are used per circle (the most often used radiuses are saved) +* 0: to disable caching */ +#define LV_CIRCLE_CACHE_SIZE 4 +#endif /*LV_DRAW_COMPLEX*/ + +/** + * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer + * and blend it as an image with the given opacity. + * Note that `bg_opa`, `text_opa` etc don't require buffering into layer) + * The widget can be buffered in smaller chunks to avoid using large buffers. + * + * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it + * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated. + * + * Both buffer sizes are in bytes. + * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers + * and can't be drawn in chunks. So these settings affects only widgets with opacity. + */ +#define LV_LAYER_SIMPLE_BUF_SIZE (24 * 1024) +#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) + +/*Default image cache size. Image caching keeps the images opened. + *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added) + *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. + *However the opened images might consume additional RAM. + *0: to disable caching*/ +#define LV_IMG_CACHE_DEF_SIZE 0 + +/*Number of stops allowed per gradient. Increase this to allow more stops. + *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ +#define LV_GRADIENT_MAX_STOPS 2 + +/*Default gradient buffer size. + *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. + *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. + *If the cache is too small the map will be allocated only while it's required for the drawing. + *0 mean no caching.*/ +#define LV_GRAD_CACHE_DEF_SIZE 0 + +/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) + *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface + *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ +#define LV_DITHER_GRADIENT 0 +#if LV_DITHER_GRADIENT +/*Add support for error diffusion dithering. + *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. + *The increase in memory consumption is (24 bits * object's width)*/ +#define LV_DITHER_ERROR_DIFFUSION 0 +#endif + +/*Maximum buffer size to allocate for rotation. + *Only used if software rotation is enabled in the display driver.*/ +#define LV_DISP_ROT_MAX_BUF (10*1024) + +/*------------- + * GPU + *-----------*/ + +/*Use Arm's 2D acceleration library Arm-2D */ +#define LV_USE_GPU_ARM2D 0 + +/*Use STM32's DMA2D (aka Chrom Art) GPU*/ +#define LV_USE_GPU_STM32_DMA2D 0 +#if LV_USE_GPU_STM32_DMA2D +/*Must be defined to include path of CMSIS header of target processor +e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ +#define LV_GPU_DMA2D_CMSIS_INCLUDE +#endif + +/*Use SWM341's DMA2D GPU*/ +#define LV_USE_GPU_SWM341_DMA2D 0 +#if LV_USE_GPU_SWM341_DMA2D +#define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" +#endif + +/*Use NXP's PXP GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_PXP 0 +#if LV_USE_GPU_NXP_PXP +/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) +* and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS +* has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. +*0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() +*/ +#define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +#endif + +/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_VG_LITE 0 + +/*Use SDL renderer API*/ +#define LV_USE_GPU_SDL 0 +#if LV_USE_GPU_SDL +#define LV_GPU_SDL_INCLUDE_PATH +/*Texture cache size, 8MB by default*/ +#define LV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8) +/*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ +#define LV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) +#endif + +/*------------- + * Logging + *-----------*/ + +/*Enable the log module*/ +#define LV_USE_LOG 0 +#if LV_USE_LOG + +/*How important log should be added: +*LV_LOG_LEVEL_TRACE A lot of logs to give detailed information +*LV_LOG_LEVEL_INFO Log important events +*LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem +*LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail +*LV_LOG_LEVEL_USER Only logs added by the user +*LV_LOG_LEVEL_NONE Do not log anything*/ +#define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + +/*1: Print the log with 'printf'; +*0: User need to register a callback with `lv_log_register_print_cb()`*/ +#define LV_LOG_PRINTF 0 + +/*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ +#define LV_LOG_TRACE_MEM 1 +#define LV_LOG_TRACE_TIMER 1 +#define LV_LOG_TRACE_INDEV 1 +#define LV_LOG_TRACE_DISP_REFR 1 +#define LV_LOG_TRACE_EVENT 1 +#define LV_LOG_TRACE_OBJ_CREATE 1 +#define LV_LOG_TRACE_LAYOUT 1 +#define LV_LOG_TRACE_ANIM 1 + +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/*Enable asserts if an operation is failed or an invalid data is found. + *If LV_USE_LOG is enabled an error message will be printed on failure*/ +#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ +#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ + +/*Add a custom handler when assert happens e.g. to restart the MCU*/ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ + +/*------------- + * Others + *-----------*/ + +/*1: Show CPU usage and FPS count*/ +#define LV_USE_PERF_MONITOR 0 +#if LV_USE_PERF_MONITOR +#define LV_USE_PERF_MONITOR_POS LV_ALIGN_TOP_RIGHT +#endif + +/*1: Show the used memory and the memory fragmentation + * Requires LV_MEM_CUSTOM = 0*/ +#define LV_USE_MEM_MONITOR 0 +#if LV_USE_MEM_MONITOR +#define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT +#endif + +/*1: Draw random colored rectangles over the redrawn areas*/ +#define LV_USE_REFR_DEBUG 0 + +/*Change the built in (v)snprintf functions*/ +#define LV_SPRINTF_CUSTOM 0 +#if LV_SPRINTF_CUSTOM +#define LV_SPRINTF_INCLUDE +#define lv_snprintf snprintf +#define lv_vsnprintf vsnprintf +#else /*LV_SPRINTF_CUSTOM*/ +#define LV_SPRINTF_USE_FLOAT 0 +#endif /*LV_SPRINTF_CUSTOM*/ + +#define LV_USE_USER_DATA 1 + +/*Garbage Collector settings + *Used if lvgl is bound to higher level language and the memory is managed by that language*/ +#define LV_ENABLE_GC 0 +#if LV_ENABLE_GC != 0 +#define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ +#endif /*LV_ENABLE_GC*/ + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/*For big endian systems set to 1*/ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/*Define a custom attribute to `lv_tick_inc` function*/ +#define LV_ATTRIBUTE_TICK_INC + +/*Define a custom attribute to `lv_timer_handler` function*/ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/*Define a custom attribute to `lv_disp_flush_ready` function*/ +#define LV_ATTRIBUTE_FLUSH_READY + +/*Required alignment size for buffers*/ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/*Attribute to mark large constant arrays for example font's bitmaps*/ +#define LV_ATTRIBUTE_LARGE_CONST + +/*Compiler prefix for a big array declaration in RAM*/ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/*Place performance critical functions into a faster memory (e.g RAM)*/ +#define LV_ATTRIBUTE_FAST_MEM + +/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/ +#define LV_ATTRIBUTE_DMA + +/*Export integer constant to binding. This macro is used with constants in the form of LV_ that + *should also appear on LVGL binding API such as Micropython.*/ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ + +/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ +#define LV_USE_LARGE_COORD 0 + +/*================== + * FONT USAGE + *===================*/ + +/*Montserrat fonts with ASCII range and some symbols using bpp = 4 + *https://fonts.google.com/specimen/Montserrat*/ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 0 +#define LV_FONT_MONTSERRAT_14 0 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 1 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/*Demonstrate special features*/ +#define LV_FONT_MONTSERRAT_12_SUBPX 0 +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ +#define LV_FONT_SIMSUN_16_CJK 1 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace fonts*/ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/*Optionally declare custom fonts here. + *You can use these fonts as default font too and they will be available globally. + *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font*/ +#define LV_FONT_DEFAULT &lv_font_montserrat_30 + +/*Enable handling large font and/or fonts with a lot of characters. + *The limit depends on the font size, font face and bpp. + *Compiler error will be triggered if a font needs it.*/ +#define LV_FONT_FMT_TXT_LARGE 1 + +/*Enables/disables support for compressed fonts.*/ +#define LV_USE_FONT_COMPRESSED 0 + +/*Enable subpixel rendering*/ +#define LV_USE_FONT_SUBPX 0 +#if LV_USE_FONT_SUBPX +/*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ +#define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ +#endif + +/*Enable drawing placeholders when glyph dsc is not found*/ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_" + +/*If a word is at least this long, will break wherever "prettiest" + *To disable, set to a value <= 0*/ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/*Minimum number of characters in a long word to put on a line before a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/*Minimum number of characters in a long word to put on a line after a break. + *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/*The control character to use for signalling text recoloring.*/ +#define LV_TXT_COLOR_CMD "#" + +/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. + *The direction will be processed according to the Unicode Bidirectional Algorithm: + *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI +/*Set the default direction. Supported values: +*`LV_BASE_DIR_LTR` Left-to-Right +*`LV_BASE_DIR_RTL` Right-to-Left +*`LV_BASE_DIR_AUTO` detect texts base direction*/ +#define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/*Enable Arabic/Persian processing + *In these languages characters should be replaced with an other form based on their position in the text*/ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*================== + * WIDGET USAGE + *================*/ + +/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 0 + +#define LV_USE_BTN 1 + +#define LV_USE_BTNMATRIX 1 + +#define LV_USE_CANVAS 0 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 0 /*Requires: lv_label*/ + +#define LV_USE_IMG 1 /*Requires: lv_label*/ + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL +#define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ +#define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ +#endif + +#define LV_USE_LINE 0 + +#define LV_USE_ROLLER 0 /*Requires: lv_label*/ +#if LV_USE_ROLLER +#define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/ +#endif + +#define LV_USE_SLIDER 0 /*Requires: lv_bar*/ + +#define LV_USE_SWITCH 1 + +#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ +#if LV_USE_TEXTAREA != 0 +#define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +#define LV_USE_TABLE 1 + +/*================== + * EXTRA COMPONENTS + *==================*/ + +/*----------- + * Widgets + *----------*/ +#define LV_USE_ANIMIMG 0 + +#define LV_USE_CALENDAR 0 +#if LV_USE_CALENDAR +#define LV_CALENDAR_WEEK_STARTS_MONDAY 0 +#if LV_CALENDAR_WEEK_STARTS_MONDAY +#define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} +#else +#define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} +#endif + +#define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} +#define LV_USE_CALENDAR_HEADER_ARROW 1 +#define LV_USE_CALENDAR_HEADER_DROPDOWN 1 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CHART 0 + +#define LV_USE_COLORWHEEL 0 + +#define LV_USE_IMGBTN 0 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LED 1 + +#define LV_USE_LIST 1 + +#define LV_USE_MENU 0 + +#define LV_USE_METER 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_SPAN 0 +#if LV_USE_SPAN +/*A line text can contain maximum num of span descriptor */ +#define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 0 + +#define LV_USE_SPINNER 1 + +#define LV_USE_TABVIEW 0 + +#define LV_USE_TILEVIEW 0 + +#define LV_USE_WIN 0 + +/*----------- + * Themes + *----------*/ + +/*A simple, impressive and very complete theme*/ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + +/*0: Light mode; 1: Dark mode*/ +#define LV_THEME_DEFAULT_DARK 0 + +/*1: Enable grow on press*/ +#define LV_THEME_DEFAULT_GROW 1 + +/*Default transition time in [ms]*/ +#define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/*A very simple theme that is a good starting point for a custom theme*/ +#define LV_USE_THEME_BASIC 1 + +/*A theme designed for monochrome displays*/ +#define LV_USE_THEME_MONO 0 + +/*----------- + * Layouts + *----------*/ + +/*A layout similar to Flexbox in CSS.*/ +#define LV_USE_FLEX 1 + +/*A layout similar to Grid in CSS.*/ +#define LV_USE_GRID 0 + +/*--------------------- + * 3rd party libraries + *--------------------*/ + +/*File system interfaces for common APIs */ + +/*API for fopen, fread, etc*/ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO +#define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ +#define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for open, read, etc*/ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX +#define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ +#define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for CreateFile, ReadFile, etc*/ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 +#define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ +#define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS +#define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ +#define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*PNG decoder library*/ +#define LV_USE_PNG 0 + +/*BMP decoder library*/ +#define LV_USE_BMP 0 + +/* JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_SJPG 0 + +/*GIF decoder library*/ +#define LV_USE_GIF 0 + +/*QR code library*/ +#define LV_USE_QRCODE 0 + +/*FreeType library*/ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE +/*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/ +#define LV_FREETYPE_CACHE_SIZE (16 * 1024) +#if LV_FREETYPE_CACHE_SIZE >= 0 +/* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ +/* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ +/* if font size >= 256, must be configured as image cache */ +#define LV_FREETYPE_SBIT_CACHE 0 +/* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ +/* (0:use system defaults) */ +#define LV_FREETYPE_CACHE_FT_FACES 0 +#define LV_FREETYPE_CACHE_FT_SIZES 0 +#endif +#endif + +/*Rlottie library*/ +#define LV_USE_RLOTTIE 0 + +/*FFmpeg library for image decoding and playing videos + *Supports all major image formats so do not enable other image decoder with it*/ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG +/*Dump input information to stderr*/ +#define LV_FFMPEG_DUMP_FORMAT 0 +#endif + +/*----------- + * Others + *----------*/ + +/*1: Enable API to take snapshot for object*/ +//#define LV_USE_SNAPSHOT 0 + +/*1: Enable Monkey test*/ +#define LV_USE_MONKEY 0 + +/*1: Enable grid navigation*/ +#define LV_USE_GRIDNAV 0 + +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/*1: Enable a published subscriber based messaging system */ +#define LV_USE_MSG 0 + +/*1: Enable Pinyin input method*/ +/*Requires: lv_keyboard*/ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN +/*1: Use default thesaurus*/ +/*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ +#define LV_IME_PINYIN_USE_DEFAULT_DICT 1 +/*Set the maximum number of candidate panels that can be displayed*/ +/*This needs to be adjusted according to the size of the screen*/ +#define LV_IME_PINYIN_CAND_TEXT_NUM 6 + +/*Use 9 key input(k9)*/ +#define LV_IME_PINYIN_USE_K9_MODE 1 +#if LV_IME_PINYIN_USE_K9_MODE == 1 +#define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 +#endif // LV_IME_PINYIN_USE_K9_MODE +#endif + +/*================== +* EXAMPLES +*==================*/ + +/*Enable the examples to be built with the library*/ +#define LV_BUILD_EXAMPLES 0 + +/*=================== + * DEMO USAGE + ====================*/ + +/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ +#define LV_USE_DEMO_WIDGETS 0 +#if LV_USE_DEMO_WIDGETS +#define LV_DEMO_WIDGETS_SLIDESHOW 0 +#endif + +/*Demonstrate the usage of encoder and keyboard*/ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/*Benchmark your system*/ +#define LV_USE_DEMO_BENCHMARK 0 +#if LV_USE_DEMO_BENCHMARK +/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ +#define LV_DEMO_BENCHMARK_RGB565A8 0 +#endif + +/*Stress test for LVGL*/ +#define LV_USE_DEMO_STRESS 0 + +/*Music player demo*/ +#define LV_USE_DEMO_MUSIC 0 +#if LV_USE_DEMO_MUSIC +#define LV_DEMO_MUSIC_SQUARE 0 +#define LV_DEMO_MUSIC_LANDSCAPE 0 +#define LV_DEMO_MUSIC_ROUND 0 +#define LV_DEMO_MUSIC_LARGE 0 +#define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/sd_def.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/sd_def.h new file mode 100644 index 0000000..6f4950f --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/sd_def.h @@ -0,0 +1,33 @@ +// Pins definition for ESP32_8048S050C +// SD SPI +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief ESP32_4827S043C SD SPI GPIO definition + * + */ +#define ESP3D_SD_IS_SPI 1 +#define ESP3D_SD_MOSI_PIN (11) // GPIO 11 +#define ESP3D_SD_MISO_PIN (13) // GPIO 13 +#define ESP3D_SD_CLK_PIN (12) // GPIO 12 +#define ESP3D_SD_CS_PIN (10) // GPIO 10 + +// #define ESP3D_SD_DETECT_PIN (-1) //GPIO -1 +// #define ESP3D_SD_DETECT_VALUE (0) //LOW +#define MAX_TRANSFER_SZ (4096) + +#define SPI_ALLOCATION_SIZE (16 * 1024) +//(range 400kHz - 20MHz for SDSPI, less for other devices) +// default is 20MHz +#define ESP3D_SD_FREQ (20000) + +#define SD_SPI_HOST SPI2_HOST //1 +// #define SD_SPI_HOST SPI3_HOST // 2 + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/serial_def.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/serial_def.h new file mode 100644 index 0000000..27021a3 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/serial_def.h @@ -0,0 +1,25 @@ +// Pins definition for ESP32_8048S050C +// Serial +#pragma once + +#include "driver/gpio.h" +#include "driver/uart.h" +#include "tasks_def.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ESP3D_SERIAL_PORT UART_NUM_0 +#define ESP3D_SERIAL_BAUDRATE "115200" +#define ESP3D_SERIAL_RX_PIN 44 +#define ESP3D_SERIAL_TX_PIN 43 +#define ESP3D_SERIAL_DATA_BITS UART_DATA_8_BITS +#define ESP3D_SERIAL_PARITY UART_PARITY_DISABLE +#define ESP3D_SERIAL_STOP_BITS UART_STOP_BITS_1 +#define ESP3D_SERIAL_FLOW_CTRL UART_HW_FLOWCTRL_DISABLE +#define ESP3D_SERIAL_SOURCE_CLK UART_SCLK_APB + +#ifdef __cplusplus +} /* extern "C" */ +#endif \ No newline at end of file diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/tasks_def.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/tasks_def.h new file mode 100644 index 0000000..725e8e9 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/tasks_def.h @@ -0,0 +1,55 @@ +// Task definition for ESP32_8048S050C + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#define NETWORK_TASK_CORE 0 +#define NETWORK_TASK_PRIORITY 0 +#define NETWORK_STACK_DEPTH 4096 + +#define STREAM_TASK_CORE 1 +#define STREAM_TASK_PRIORITY 0 +#define STREAM_STACK_DEPTH 4096 + +#define UI_TASK_CORE 1 +#define UI_TASK_PRIORITY 5 +#define UI_STACK_DEPTH 4096 + +#define ESP3D_GCODE_HOST_TASK_SIZE 4096 +#define ESP3D_GCODE_HOST_TASK_PRIORITY 2 +#define ESP3D_GCODE_HOST_TASK_CORE 1 + +#define STREAM_CHUNK_SIZE 1024 + +#define ESP3D_SOCKET_RX_BUFFER_SIZE 512 +#define ESP3D_SOCKET_TASK_SIZE 4096 +#define ESP3D_SOCKET_TASK_PRIORITY 5 +#define ESP3D_SOCKET_TASK_CORE 0 + +#define ESP3D_WS_RX_BUFFER_SIZE 512 +#define ESP3D_WS_TASK_SIZE 4096 +#define ESP3D_WS_TASK_PRIORITY 5 +#define ESP3D_WS_TASK_CORE 0 + +#define ESP3D_SERIAL_RX_BUFFER_SIZE 512 +#define ESP3D_SERIAL_TX_BUFFER_SIZE 0 +#define ESP3D_SERIAL_RX_TASK_SIZE 4096 +#define ESP3D_SERIAL_TASK_CORE 1 +#define ESP3D_SERIAL_TASK_PRIORITY 10 + +#define ESP3D_RENDERING_RX_TASK_SIZE 4096 +#define ESP3D_RENDERING_TASK_PRIORITY 5 +#define ESP3D_RENDERING_TASK_CORE 1 + +#define ESP3D_GCODE_HOST_TASK_SIZE 4096 +#define ESP3D_GCODE_HOST_TASK_PRIORITY 2 +#define ESP3D_GCODE_HOST_TASK_CORE 1 + +#define LV_TICK_PERIOD_MS 2 + +#ifdef __cplusplus +} /* extern "C" */ +#endif \ No newline at end of file diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/touch_def.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/touch_def.h new file mode 100644 index 0000000..e23fdd0 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S050C/components/bsp/touch_def.h @@ -0,0 +1,27 @@ +// Touch definitions for ESP32_8048S050C +// Touch driver GT911 (I2C) +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +#define TOUCH_CONTROLLER "GT911" + +#include "gt911.h" + +const gt911_config_t gt911_cfg = { + .i2c_clk_speed = 400*1000, + .rst_pin = 38, // GPIO 38 +#if WITH_GT911_INT + .int_pin = 18, // GPIO 18 +#else + .int_pin = -1, // INT pin not connected (by default) +#endif + .swap_xy = false, + .invert_x = false, + .invert_y = false, +}; + +#ifdef __cplusplus +} /* extern "C" */ +#endif diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S070C/Display.cpp b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S070C/Display.cpp new file mode 100644 index 0000000..d5d736a --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S070C/Display.cpp @@ -0,0 +1,317 @@ +#include "Display.h" + +extern "C" +{ + // we use two semaphores to sync the VSYNC event and the LVGL task, to avoid + // potential tearing effect + SemaphoreHandle_t sem_vsync_end; + SemaphoreHandle_t sem_gui_ready; + + static lv_disp_draw_buf_t disp_buf; // contains internal graphic buffer(s) called draw buffer(s) + static lv_disp_drv_t disp_drv; + static esp_lcd_touch_handle_t tp = NULL; + + const char *TAG = "ESP32-8048S070c"; + + // ESP_LOGI(TAG, "Install RGB LCD panel driver"); + esp_lcd_panel_handle_t panel_handle = NULL; + + esp_lcd_rgb_panel_config_t panel_config = + {.clk_src = LCD_CLK_SRC_DEFAULT, + .timings = + { + .pclk_hz = LCD_PIXEL_CLOCK_HZ, + .h_res = LCD_H_RES, + .v_res = LCD_V_RES, + .hsync_pulse_width = 30, + .hsync_back_porch = 16, + .hsync_front_porch = 210, + .vsync_pulse_width = 13, + .vsync_back_porch = 10, + .vsync_front_porch = 22, + .flags = + { + .hsync_idle_low = (uint32_t)NULL, + .vsync_idle_low = (uint32_t)NULL, + .de_idle_high = (uint32_t)NULL, + .pclk_active_neg = true, + .pclk_idle_high = (uint32_t)NULL, + }, + }, + .data_width = 16, // RGB565 in parallel mode, thus 16bit in width + .bits_per_pixel = (uint8_t)NULL, + .num_fbs = LCD_NUM_FB, + +#if CONFIG_EXAMPLE_USE_BOUNCE_BUFFER + .bounce_buffer_size_px = 10 * h_resolution, +#else + .bounce_buffer_size_px = (size_t)NULL, +#endif + + .sram_trans_align = (size_t)NULL, + .psram_trans_align = 64, + .hsync_gpio_num = PIN_NUM_HSYNC, + .vsync_gpio_num = PIN_NUM_VSYNC, + .de_gpio_num = PIN_NUM_DE, + .pclk_gpio_num = PIN_NUM_PCLK, + .disp_gpio_num = PIN_NUM_DISP_EN, + + .data_gpio_nums = + { + PIN_NUM_DATA0, + PIN_NUM_DATA1, + PIN_NUM_DATA2, + PIN_NUM_DATA3, + PIN_NUM_DATA4, + PIN_NUM_DATA5, + PIN_NUM_DATA6, + PIN_NUM_DATA7, + PIN_NUM_DATA8, + PIN_NUM_DATA9, + PIN_NUM_DATA10, + PIN_NUM_DATA11, + PIN_NUM_DATA12, + PIN_NUM_DATA13, + PIN_NUM_DATA14, + PIN_NUM_DATA15, + }, + .flags = { + .disp_active_low = (uint32_t)NULL, + .refresh_on_demand = (uint32_t)NULL, + .fb_in_psram = true, + .double_fb = (uint32_t)NULL, + .no_fb = (uint32_t)NULL, + .bb_invalidate_cache = (uint32_t)NULL, + }}; + + i2c_config_t conf = { + .mode = I2C_MODE_MASTER, + .sda_io_num = TOUCH_GT911_SDA, // select GPIO specific to your + // project + .scl_io_num = TOUCH_GT911_SCL, // select GPIO specific to your + // project + .sda_pullup_en = GPIO_PULLUP_ENABLE, + + .scl_pullup_en = GPIO_PULLUP_ENABLE, + .master = + { + .clk_speed = 100000, + }, // select frequency specific to your + // project + .clk_flags = 0, /*!< Optional, you can use + I2C_SCLK_SRC_FLAG_* + flags to choose i2c source clock here. */ + }; + + esp_lcd_touch_config_t tp_cfg = { + .x_max = LCD_H_RES, + .y_max = LCD_V_RES, + .rst_gpio_num = TOUCH_GT911_RST, + .int_gpio_num = TOUCH_GT911_INT, + .levels = + { + .reset = NULL, + .interrupt = NULL, + }, + .flags = + { + .swap_xy = 0, + .mirror_x = 0, + .mirror_y = 0, + }, + .process_coordinates = NULL, + .interrupt_callback = NULL, + }; + + bool on_vsync_event(esp_lcd_panel_handle_t panel, + const esp_lcd_rgb_panel_event_data_t *event_data, + void *user_data) + { + + BaseType_t high_task_awoken = pdFALSE; + +#if CONFIG_EXAMPLE_AVOID_TEAR_EFFECT_WITH_SEM + if (xSemaphoreTakeFromISR(sem_gui_ready, &high_task_awoken) == pdTRUE) + { + xSemaphoreGiveFromISR(sem_vsync_end, &high_task_awoken); + } +#endif + + return high_task_awoken == pdTRUE; + } + + void lvgl_flush_cb(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map) + { + esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t)drv->user_data; + + int offsetx1 = area->x1; + int offsetx2 = area->x2; + int offsety1 = area->y1; + int offsety2 = area->y2; + +#if CONFIG_EXAMPLE_AVOID_TEAR_EFFECT_WITH_SEM + xSemaphoreGive(sem_gui_ready); + xSemaphoreTake(sem_vsync_end, portMAX_DELAY); +#endif + + // pass the draw buffer to the driver + esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, color_map); + lv_disp_flush_ready(drv); + } + +#if CONFIG_EXAMPLE_LCD_TOUCH_ENABLED + void lvgl_touch_cb(lv_indev_drv_t *drv, lv_indev_data_t *data) + { + const char *TAG = "ESP32-8048S070c"; + + uint16_t touchpad_x[1] = {0}; + uint16_t touchpad_y[1] = {0}; + uint8_t touchpad_cnt = 0; + + /* Read touch controller data */ + esp_lcd_touch_read_data((esp_lcd_touch_handle_t)(drv->user_data)); + + /* Get coordinates */ + bool touchpad_pressed = esp_lcd_touch_get_coordinates( + (esp_lcd_touch_handle_t)(drv->user_data), touchpad_x, touchpad_y, NULL, &touchpad_cnt, 1); + + if (touchpad_pressed && touchpad_cnt > 0) + { + data->point.x = touchpad_x[0]; + data->point.y = touchpad_y[0]; + data->state = LV_INDEV_STATE_PRESSED; + } + else + { + data->state = LV_INDEV_STATE_RELEASED; + } + } +#endif + + void increase_lvgl_tick(void *arg) + { + /* Tell LVGL how many milliseconds has elapsed */ + lv_tick_inc(LVGL_TICK_PERIOD_MS); + } + + /** + * + * + */ + lv_disp_t *initDisplay() + { + lv_disp_t *disp = NULL; + + // #if CONFIG_EXAMPLE_AVOID_TEAR_EFFECT_WITH_SEM + ESP_LOGI(TAG, "Create semaphores"); + sem_vsync_end = xSemaphoreCreateBinary(); + assert(sem_vsync_end); + sem_gui_ready = xSemaphoreCreateBinary(); + assert(sem_gui_ready); + +#if PIN_NUM_BK_LIGHT >= 0 + ESP_LOGI(TAG, "Turn off LCD backlight"); + gpio_config_t bk_gpio_config = { + .pin_bit_mask = 1ULL << PIN_NUM_BK_LIGHT, + .mode = GPIO_MODE_OUTPUT, + }; + ESP_ERROR_CHECK(gpio_config(&bk_gpio_config)); +#endif + + ESP_ERROR_CHECK(esp_lcd_new_rgb_panel(&panel_config, &panel_handle)); + + ESP_LOGI(TAG, "Register event callbacks"); + esp_lcd_rgb_panel_event_callbacks_t cbs = { + .on_vsync = on_vsync_event, + }; + ESP_ERROR_CHECK(esp_lcd_rgb_panel_register_event_callbacks(panel_handle, &cbs, + &disp_drv)); + + ESP_LOGI(TAG, "Initialize RGB LCD panel"); + ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle)); + ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle)); + +#if EXAMPLE_PIN_NUM_BK_LIGHT >= 0 + ESP_LOGI(TAG, "Turn on LCD backlight"); + gpio_set_level(PIN_NUM_BK_LIGHT, LCD_BK_LIGHT_ON_LEVEL); +#endif + + ESP_ERROR_CHECK(i2c_param_config(I2C_NUM_0, &conf)); + ESP_ERROR_CHECK(i2c_driver_install(I2C_NUM_0, I2C_MODE_MASTER, 0, 0, 0)); + + esp_lcd_panel_io_handle_t tp_io_handle = NULL; + esp_lcd_panel_io_i2c_config_t tp_io_config = + ESP_LCD_TOUCH_IO_I2C_GT911_CONFIG(); + + // Attach the TOUCH to the I2C bus + ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c((esp_lcd_i2c_bus_handle_t)I2C_NUM_0, + &tp_io_config, &tp_io_handle)); + + ESP_LOGI(TAG, "Initialize touch controller GT911"); + ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_gt911(tp_io_handle, &tp_cfg, &tp)); + + ESP_LOGI(TAG, "Initialize LVGL library"); + lv_init(); + + // #endif + + void *buf1 = NULL; + void *buf2 = NULL; + +#if CONFIG_EXAMPLE_DOUBLE_FB + ESP_LOGI(TAG, "Use frame buffers as LVGL draw buffers"); + ESP_ERROR_CHECK( + esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &buf1, &buf2)); + // initialize LVGL draw buffers + lv_disp_draw_buf_init(&disp_buf, buf1, buf2, LCD_H_RES * LCD_V_RES); +#else + ESP_LOGI(TAG, "Allocate separate LVGL draw buffers from PSRAM"); + buf1 = + heap_caps_malloc(LCD_H_RES * 100 * sizeof(lv_color_t), MALLOC_CAP_SPIRAM); + assert(buf1); + buf2 = + heap_caps_malloc(LCD_H_RES * 100 * sizeof(lv_color_t), MALLOC_CAP_SPIRAM); + assert(buf2); + // initialize LVGL draw buffers + lv_disp_draw_buf_init(&disp_buf, buf1, buf2, LCD_H_RES * 100); +#endif // CONFIG_EXAMPLE_DOUBLE_FB + + ESP_LOGI(TAG, "Register display driver to LVGL"); + lv_disp_drv_init(&disp_drv); + disp_drv.hor_res = LCD_H_RES; + disp_drv.ver_res = LCD_V_RES; + disp_drv.flush_cb = lvgl_flush_cb; + disp_drv.draw_buf = &disp_buf; + disp_drv.user_data = panel_handle; + +#if CONFIG_EXAMPLE_DOUBLE_FB + disp_drv.full_refresh = true; // the full_refresh mode can maintain the + // synchronization between the two frame buffers +#endif + disp = lv_disp_drv_register(&disp_drv); + + ESP_LOGI(TAG, "Install LVGL tick timer"); + // Tick interface for LVGL (using esp_timer to generate 2ms periodic event) + const esp_timer_create_args_t lvgl_tick_timer_args = { + .callback = &increase_lvgl_tick, .name = "lvgl_tick"}; + esp_timer_handle_t lvgl_tick_timer = NULL; + ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_timer_args, &lvgl_tick_timer)); + ESP_ERROR_CHECK( + esp_timer_start_periodic(lvgl_tick_timer, LVGL_TICK_PERIOD_MS * 1000)); + +#if CONFIG_EXAMPLE_LCD_TOUCH_ENABLED + static lv_indev_drv_t indev_drv; // Input device driver (Touch) + lv_indev_drv_init(&indev_drv); + indev_drv.type = LV_INDEV_TYPE_POINTER; + indev_drv.disp = disp; + indev_drv.read_cb = lvgl_touch_cb; + indev_drv.user_data = tp; + + lv_indev_drv_register(&indev_drv); +#endif + + ESP_LOGI(TAG, "Display simple buttons example"); + + return disp; + } +} \ No newline at end of file diff --git a/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S070C/Display.h b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S070C/Display.h new file mode 100644 index 0000000..10a94a8 --- /dev/null +++ b/devices/rmp-lcd-controller/lcd-display-drivers/ESP32S3_8048S070C/Display.h @@ -0,0 +1,76 @@ +#ifndef __DISPLAY_8048S070C_H__ +#define __DISPLAY_8048S070C_H__ + +#include "driver/gpio.h" +#include "driver/i2c.h" + +#include "esp_err.h" +#include "esp_lcd_panel_ops.h" +#include "esp_lcd_panel_rgb.h" +#include "esp_log.h" +#include "esp_timer.h" +#include "esp_lcd_touch_gt911.h" + +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" +#include "freertos/task.h" +#include "lvgl.h" +#include "sdkconfig.h" +#include + +extern "C" +{ + + extern void ui_init(lv_disp_t *disp); + lv_disp_t *initDisplay(); + + +// Proper settings for the Sunton devboard LCD +#define LCD_PIXEL_CLOCK_HZ (16 * 1000 * 1000) +#define LCD_BK_LIGHT_ON_LEVEL 1 +#define LCD_BK_LIGHT_OFF_LEVEL !LCD_BK_LIGHT_ON_LEVEL + const gpio_num_t PIN_NUM_BK_LIGHT = GPIO_NUM_2; + const gpio_num_t PIN_NUM_HSYNC = GPIO_NUM_39; + const gpio_num_t PIN_NUM_VSYNC = GPIO_NUM_40; + const gpio_num_t PIN_NUM_DE = GPIO_NUM_41; + const gpio_num_t PIN_NUM_PCLK = GPIO_NUM_42; + const gpio_num_t PIN_NUM_DATA0 = GPIO_NUM_15; // B0 + const gpio_num_t PIN_NUM_DATA1 = GPIO_NUM_7; // B1 + const gpio_num_t PIN_NUM_DATA2 = GPIO_NUM_6; // B2 + const gpio_num_t PIN_NUM_DATA3 = GPIO_NUM_5; // B3 + const gpio_num_t PIN_NUM_DATA4 = GPIO_NUM_4; // B4 + const gpio_num_t PIN_NUM_DATA5 = GPIO_NUM_9; // G0 + const gpio_num_t PIN_NUM_DATA6 = GPIO_NUM_46; // G1 + const gpio_num_t PIN_NUM_DATA7 = GPIO_NUM_3; // G2 + const gpio_num_t PIN_NUM_DATA8 = GPIO_NUM_8; // G3 + const gpio_num_t PIN_NUM_DATA9 = GPIO_NUM_16; // G4 + const gpio_num_t PIN_NUM_DATA10 = GPIO_NUM_1; // G5 + const gpio_num_t PIN_NUM_DATA11 = GPIO_NUM_14; // R0 + const gpio_num_t PIN_NUM_DATA12 = GPIO_NUM_21; // R1 + const gpio_num_t PIN_NUM_DATA13 = GPIO_NUM_47; // R2 + const gpio_num_t PIN_NUM_DATA14 = GPIO_NUM_48; // R3 + const gpio_num_t PIN_NUM_DATA15 = GPIO_NUM_45; // R4 + const gpio_num_t PIN_NUM_DISP_EN = GPIO_NUM_NC; + +// The pixel number in horizontal and vertical +#define LCD_H_RES 800 +#define LCD_V_RES 480 + +#if CONFIG_EXAMPLE_DOUBLE_FB +#define LCD_NUM_FB 2 +#else +#define LCD_NUM_FB 1 +#endif // CONFIG_EXAMPLE_DOUBLE_FB + +#define LVGL_TICK_PERIOD_MS 2 + +// Proper settings for the Sunton devboard touch driver +#if CONFIG_EXAMPLE_LCD_TOUCH_ENABLED + const gpio_num_t TOUCH_GT911_SCL = GPIO_NUM_20; + const gpio_num_t TOUCH_GT911_SDA = GPIO_NUM_19; + const gpio_num_t TOUCH_GT911_INT = GPIO_NUM_NC; + const gpio_num_t TOUCH_GT911_RST = GPIO_NUM_38; +#endif + +#endif +} \ No newline at end of file diff --git a/devices/rmp-lcd-controller/main/CMakeLists.txt b/devices/rmp-lcd-controller/main/CMakeLists.txt new file mode 100644 index 0000000..568e004 --- /dev/null +++ b/devices/rmp-lcd-controller/main/CMakeLists.txt @@ -0,0 +1,17 @@ +message ("\r\nIn main component cmake file") + +message ("\r\n Project Dir: ${PROJECT_DIR}") +message ("\r\n CMake Source Dir: ${CMAKE_SOURCE_DIR}") +message ("\r\n Component Dir is ${COMPONENT_DIR}") + +idf_component_register( + SRCS + "main.cpp" + "ui/ui.c" + "ui/ui_helpers.c" + "ui/screens/ui_Screen1.c" + "display-config/ESP32S3_8048S070C/Display.cpp" + + INCLUDE_DIRS + "." + "display-config/ESP32S3_8048S070C") diff --git a/devices/rmp-lcd-controller/main/Kconfig.projbuild b/devices/rmp-lcd-controller/main/Kconfig.projbuild new file mode 100644 index 0000000..48f5bdc --- /dev/null +++ b/devices/rmp-lcd-controller/main/Kconfig.projbuild @@ -0,0 +1,61 @@ +menu "LCD Configuration" + config EXAMPLE_DOUBLE_FB + bool "Use double Frame Buffer" + default "n" + help + Enable this option, driver will allocate two frame buffers. + + config EXAMPLE_USE_BOUNCE_BUFFER + depends on !EXAMPLE_DOUBLE_FB + bool "Use bounce buffer" + help + Enable bounce buffer mode can achieve higher PCLK frequency at the cost of higher CPU consumption. + + config EXAMPLE_AVOID_TEAR_EFFECT_WITH_SEM + depends on !EXAMPLE_DOUBLE_FB + bool "Avoid tearing effect" + default "y" + help + Enable this option, the example will use a pair of semaphores to avoid the tearing effect. + Note, if the Double Frame Buffer is used, then we can also avoid the tearing effect without the lock. + + config EXAMPLE_LCD_TOUCH_ENABLED + bool "Use touchscreen" + default "y" + help + Enable this option, the example will use touchscreen with GT911 driver. +endmenu + + +menu "Mbits" + + menu "I2C Host" + config I2C_HOST_SCL + int "SCL GPIO Num" + default 6 if IDF_TARGET_ESP32C3 + default 19 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + help + GPIO number for I2C Master clock line. + + config I2C_HOST_SDA + int "SDA GPIO Num" + default 5 if IDF_TARGET_ESP32C3 + default 18 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + help + GPIO number for I2C Master data line. + + config I2C_HOST_PORT_NUM + int "Port Number" + default 1 if IDF_TARGET_ESP32 || IDF_TARGET_ESP32S2 || IDF_TARGET_ESP32S3 + default 0 if IDF_TARGET_ESP32C3 + help + Port number for I2C Master device. + + config I2C_HOST_FREQUENCY + int "Host Frequency" + default 100000 + help + I2C Speed of Host device. + endmenu +endmenu + diff --git a/devices/rmp-lcd-controller/main/idf_component.yml b/devices/rmp-lcd-controller/main/idf_component.yml new file mode 100644 index 0000000..4da8ca7 --- /dev/null +++ b/devices/rmp-lcd-controller/main/idf_component.yml @@ -0,0 +1,21 @@ +## IDF Component Manager Manifest File +dependencies: + espressif/esp_lcd_touch_gt911: "^1.0.7~1" + lvgl/lvgl: "^8.3.8" + + ROSMicroPy: + path: '../../../extra_packages/ROSMicroPy/main_esp32s3' + ## Required IDF version + idf: + version: ">=4.1.0" + # # Put list of dependencies here + # # For components maintained by Espressif: + # component: "~1.0.0" + # # For 3rd party components: + # username/component: ">=1.0.0,<2.0.0" + # username2/component2: + # version: "~1.0.0" + # # For transient dependencies `public` flag can be set. + # # `public` flag doesn't have an effect dependencies of the `main` component. + # # All dependencies of `main` are public by default. + # public: true diff --git a/devices/rmp-lcd-controller/main/main.cpp b/devices/rmp-lcd-controller/main/main.cpp new file mode 100755 index 0000000..0e99944 --- /dev/null +++ b/devices/rmp-lcd-controller/main/main.cpp @@ -0,0 +1,36 @@ + +#include "driver/gpio.h" +#include "esp_err.h" +#include "esp_lcd_panel_ops.h" +#include "esp_lcd_panel_rgb.h" +#include "esp_log.h" +#include "esp_timer.h" +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" +#include "freertos/task.h" +#include "lvgl.h" +#include "sdkconfig.h" +#include +#include "display-config/ESP32S3_8048S070C/Display.h" + + +extern "C" +{ + + void app_main(void) + { + + lv_disp_t *disp = initDisplay(); + ui_init(disp); + + while (1) + { + // raise the task priority of LVGL and/or reduce the handler period can + // improve the performance + vTaskDelay(pdMS_TO_TICKS(10)); + // The task running lv_timer_handler should have lower priority than that + // running `lv_tick_inc` + lv_timer_handler(); + } + } +} diff --git a/devices/rmp-lcd-controller/main/ui/screens/ui_Screen1.c b/devices/rmp-lcd-controller/main/ui/screens/ui_Screen1.c new file mode 100644 index 0000000..4133595 --- /dev/null +++ b/devices/rmp-lcd-controller/main/ui/screens/ui_Screen1.c @@ -0,0 +1,58 @@ +// This file was generated by SquareLine Studio +// SquareLine Studio version: SquareLine Studio 1.3.0 +// LVGL version: 8.3.6 +// Project name: SuntonESP32_example + +#include "../ui.h" + +void ui_Screen1_screen_init(void) +{ + ui_Screen1 = lv_obj_create(NULL); + lv_obj_clear_flag(ui_Screen1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + + ui_Button2 = lv_btn_create(ui_Screen1); + lv_obj_set_width(ui_Button2, 100); + lv_obj_set_height(ui_Button2, 50); + lv_obj_set_x(ui_Button2, -340); + lv_obj_set_y(ui_Button2, 207); + lv_obj_set_align(ui_Button2, LV_ALIGN_CENTER); + lv_obj_add_flag(ui_Button2, LV_OBJ_FLAG_CHECKABLE | LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags + lv_obj_clear_flag(ui_Button2, LV_OBJ_FLAG_SCROLLABLE); /// Flags + + ui_Button1 = lv_btn_create(ui_Screen1); + lv_obj_set_width(ui_Button1, 100); + lv_obj_set_height(ui_Button1, 50); + lv_obj_set_x(ui_Button1, 340); + lv_obj_set_y(ui_Button1, -206); + lv_obj_set_align(ui_Button1, LV_ALIGN_CENTER); + lv_obj_add_flag(ui_Button1, LV_OBJ_FLAG_CHECKABLE | LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags + lv_obj_clear_flag(ui_Button1, LV_OBJ_FLAG_SCROLLABLE); /// Flags + + ui_Button4 = lv_btn_create(ui_Screen1); + lv_obj_set_width(ui_Button4, 100); + lv_obj_set_height(ui_Button4, 50); + lv_obj_set_x(ui_Button4, -346); + lv_obj_set_y(ui_Button4, -208); + lv_obj_set_align(ui_Button4, LV_ALIGN_CENTER); + lv_obj_add_flag(ui_Button4, LV_OBJ_FLAG_CHECKABLE | LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags + lv_obj_clear_flag(ui_Button4, LV_OBJ_FLAG_SCROLLABLE); /// Flags + + ui_Button3 = lv_btn_create(ui_Screen1); + lv_obj_set_width(ui_Button3, 100); + lv_obj_set_height(ui_Button3, 50); + lv_obj_set_x(ui_Button3, 338); + lv_obj_set_y(ui_Button3, 199); + lv_obj_set_align(ui_Button3, LV_ALIGN_CENTER); + lv_obj_add_flag(ui_Button3, LV_OBJ_FLAG_CHECKABLE | LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags + lv_obj_clear_flag(ui_Button3, LV_OBJ_FLAG_SCROLLABLE); /// Flags + + ui_Button6 = lv_btn_create(ui_Screen1); + lv_obj_set_width(ui_Button6, 100); + lv_obj_set_height(ui_Button6, 50); + lv_obj_set_x(ui_Button6, -18); + lv_obj_set_y(ui_Button6, -9); + lv_obj_set_align(ui_Button6, LV_ALIGN_CENTER); + lv_obj_add_flag(ui_Button6, LV_OBJ_FLAG_CHECKABLE | LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags + lv_obj_clear_flag(ui_Button6, LV_OBJ_FLAG_SCROLLABLE); /// Flags + +} diff --git a/devices/rmp-lcd-controller/main/ui/ui.c b/devices/rmp-lcd-controller/main/ui/ui.c new file mode 100644 index 0000000..45aa350 --- /dev/null +++ b/devices/rmp-lcd-controller/main/ui/ui.c @@ -0,0 +1,43 @@ +// This file was generated by SquareLine Studio +// SquareLine Studio version: SquareLine Studio 1.3.0 +// LVGL version: 8.3.6 +// Project name: SuntonESP32_example + +#include "ui.h" +#include "ui_helpers.h" + +///////////////////// VARIABLES //////////////////// + +// SCREEN: ui_Screen1 +void ui_Screen1_screen_init(void); +lv_obj_t *ui_Screen1; +lv_obj_t *ui_Button2; +lv_obj_t *ui_Button1; +lv_obj_t *ui_Button4; +lv_obj_t *ui_Button3; +lv_obj_t *ui_Button6; +lv_obj_t *ui____initial_actions0; + +///////////////////// TEST LVGL SETTINGS //////////////////// +#if LV_COLOR_DEPTH != 16 +#error "LV_COLOR_DEPTH should be 16bit to match SquareLine Studio's settings" +#endif +#if LV_COLOR_16_SWAP != 0 +#error "LV_COLOR_16_SWAP should be 0 to match SquareLine Studio's settings" +#endif + +///////////////////// ANIMATIONS //////////////////// + +///////////////////// FUNCTIONS //////////////////// + +///////////////////// SCREENS //////////////////// + +void ui_init(lv_disp_t *disp) { + lv_theme_t *theme = lv_theme_default_init( + disp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), + false, LV_FONT_DEFAULT); + lv_disp_set_theme(disp, theme); + ui_Screen1_screen_init(); + ui____initial_actions0 = lv_obj_create(NULL); + lv_disp_load_scr(ui_Screen1); +} diff --git a/devices/rmp-lcd-controller/main/ui/ui.h b/devices/rmp-lcd-controller/main/ui/ui.h new file mode 100644 index 0000000..16e8121 --- /dev/null +++ b/devices/rmp-lcd-controller/main/ui/ui.h @@ -0,0 +1,33 @@ +// This file was generated by SquareLine Studio +// SquareLine Studio version: SquareLine Studio 1.3.0 +// LVGL version: 8.3.6 +// Project name: SuntonESP32_example + +#ifndef _SUNTONESP32_EXAMPLE_UI_H +#define _SUNTONESP32_EXAMPLE_UI_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lvgl.h" + +#include "ui_events.h" +#include "ui_helpers.h" +// SCREEN: ui_Screen1 +void ui_Screen1_screen_init(void); +extern lv_obj_t *ui_Screen1; +extern lv_obj_t *ui_Button2; +extern lv_obj_t *ui_Button1; +extern lv_obj_t *ui_Button4; +extern lv_obj_t *ui_Button3; +extern lv_obj_t *ui_Button6; +extern lv_obj_t *ui____initial_actions0; + +void ui_init(lv_disp_t *); + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif diff --git a/devices/rmp-lcd-controller/main/ui/ui_events.h b/devices/rmp-lcd-controller/main/ui/ui_events.h new file mode 100644 index 0000000..9abd66f --- /dev/null +++ b/devices/rmp-lcd-controller/main/ui/ui_events.h @@ -0,0 +1,17 @@ +// This file was generated by SquareLine Studio +// SquareLine Studio version: SquareLine Studio 1.3.0 +// LVGL version: 8.3.6 +// Project name: SuntonESP32_example + +#ifndef _UI_EVENTS_H +#define _UI_EVENTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif diff --git a/devices/rmp-lcd-controller/main/ui/ui_helpers.c b/devices/rmp-lcd-controller/main/ui/ui_helpers.c new file mode 100644 index 0000000..1ca5a06 --- /dev/null +++ b/devices/rmp-lcd-controller/main/ui/ui_helpers.c @@ -0,0 +1,223 @@ + + +#include "ui_helpers.h" + +void _ui_bar_set_property(lv_obj_t * target, int id, int val) +{ + if(id == _UI_BAR_PROPERTY_VALUE_WITH_ANIM) lv_bar_set_value(target, val, LV_ANIM_ON); + if(id == _UI_BAR_PROPERTY_VALUE) lv_bar_set_value(target, val, LV_ANIM_OFF); +} + +void _ui_basic_set_property(lv_obj_t * target, int id, int val) +{ + if(id == _UI_BASIC_PROPERTY_POSITION_X) lv_obj_set_x(target, val); + if(id == _UI_BASIC_PROPERTY_POSITION_Y) lv_obj_set_y(target, val); + if(id == _UI_BASIC_PROPERTY_WIDTH) lv_obj_set_width(target, val); + if(id == _UI_BASIC_PROPERTY_HEIGHT) lv_obj_set_height(target, val); +} + +void _ui_dropdown_set_property(lv_obj_t * target, int id, int val) +{ + if(id == _UI_DROPDOWN_PROPERTY_SELECTED) lv_dropdown_set_selected(target, val); +} + +void _ui_image_set_property(lv_obj_t * target, int id, uint8_t * val) +{ + if(id == _UI_IMAGE_PROPERTY_IMAGE) lv_img_set_src(target, val); +} + +void _ui_label_set_property(lv_obj_t * target, int id, const char * val) +{ + if(id == _UI_LABEL_PROPERTY_TEXT) lv_label_set_text(target, val); +} + +void _ui_roller_set_property(lv_obj_t * target, int id, int val) +{ + if(id == _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM) lv_roller_set_selected(target, val, LV_ANIM_ON); + if(id == _UI_ROLLER_PROPERTY_SELECTED) lv_roller_set_selected(target, val, LV_ANIM_OFF); +} + +void _ui_slider_set_property(lv_obj_t * target, int id, int val) +{ + if(id == _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM) lv_slider_set_value(target, val, LV_ANIM_ON); + if(id == _UI_SLIDER_PROPERTY_VALUE) lv_slider_set_value(target, val, LV_ANIM_OFF); +} + +void _ui_screen_change(lv_obj_t * target, lv_scr_load_anim_t fademode, int spd, int delay) +{ + lv_scr_load_anim(target, fademode, spd, delay, false); +} + +void _ui_arc_increment(lv_obj_t * target, int val) +{ + int old = lv_arc_get_value(target); + lv_arc_set_value(target, old + val); + lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); +} + +void _ui_bar_increment(lv_obj_t * target, int val, int anm) +{ + int old = lv_bar_get_value(target); + lv_bar_set_value(target, old + val, anm); +} + +void _ui_slider_increment(lv_obj_t * target, int val, int anm) +{ + int old = lv_slider_get_value(target); + lv_slider_set_value(target, old + val, anm); + lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0); +} + +void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea) +{ + lv_keyboard_set_textarea(keyboard, textarea); +} + +void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value) +{ + if(value == _UI_MODIFY_FLAG_TOGGLE) { + if(lv_obj_has_flag(target, flag)) lv_obj_clear_flag(target, flag); + else lv_obj_add_flag(target, flag); + } + else if(value == _UI_MODIFY_FLAG_ADD) lv_obj_add_flag(target, flag); + else lv_obj_clear_flag(target, flag); +} +void _ui_state_modify(lv_obj_t * target, int32_t state, int value) +{ + if(value == _UI_MODIFY_STATE_TOGGLE) { + if(lv_obj_has_state(target, state)) lv_obj_clear_state(target, state); + else lv_obj_add_state(target, state); + } + else if(value == _UI_MODIFY_STATE_ADD) lv_obj_add_state(target, state); + else lv_obj_clear_state(target, state); +} + +void _ui_opacity_set(lv_obj_t * target, int val) +{ + lv_obj_set_style_opa(target, val, 0); +} + +void _ui_anim_callback_free_user_data(lv_anim_t * a) +{ + lv_mem_free(a->user_data); + a->user_data = NULL; +} + +void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_x(usr->target, v); +} + +void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_y(usr->target, v); +} + +void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_width(usr->target, v); +} + +void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_height(usr->target, v); +} + +void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_obj_set_style_opa(usr->target, v, 0); +} + +void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_img_set_zoom(usr->target, v); +} + +void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + lv_img_set_angle(usr->target, v); +} + +void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + usr->val = v; + if(v < 0) v = 0; + if(v >= usr->imgset_size) v = usr->imgset_size - 1; + lv_img_set_src(usr->target, usr->imgset[v]); +} + +int32_t _ui_anim_callback_get_x(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_x_aligned(usr->target); +} + +int32_t _ui_anim_callback_get_y(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_y_aligned(usr->target); +} + +int32_t _ui_anim_callback_get_width(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_width(usr->target); +} + +int32_t _ui_anim_callback_get_height(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_height(usr->target); +} + +int32_t _ui_anim_callback_get_opacity(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_obj_get_style_opa(usr->target, 0); +} + +int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_img_get_zoom(usr->target); +} + +int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return lv_img_get_angle(usr->target); +} + +int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a) +{ + ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data; + return usr->val; +} + +void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix) +{ + char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; + lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix); + lv_label_set_text(trg, buf); +} + +void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix) +{ + char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE]; + lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix); + lv_label_set_text(trg, buf); +} +void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off) +{ + if(lv_obj_has_state(src, LV_STATE_CHECKED)) lv_label_set_text(trg, txt_on); + else lv_label_set_text(trg, txt_off); +} + diff --git a/devices/rmp-lcd-controller/main/ui/ui_helpers.h b/devices/rmp-lcd-controller/main/ui/ui_helpers.h new file mode 100644 index 0000000..02d750b --- /dev/null +++ b/devices/rmp-lcd-controller/main/ui/ui_helpers.h @@ -0,0 +1,116 @@ +// This file was generated by SquareLine Studio +// SquareLine Studio version: SquareLine Studio 1.3.0 +// LVGL version: 8.3.6 +// Project name: SuntonESP32_example + +#ifndef _SUNTONESP32_EXAMPLE_UI_HELPERS_H +#define _SUNTONESP32_EXAMPLE_UI_HELPERS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "ui.h" + +#define _UI_TEMPORARY_STRING_BUFFER_SIZE 32 +#define _UI_BAR_PROPERTY_VALUE 0 +#define _UI_BAR_PROPERTY_VALUE_WITH_ANIM 1 +void _ui_bar_set_property(lv_obj_t * target, int id, int val); + +#define _UI_BASIC_PROPERTY_POSITION_X 0 +#define _UI_BASIC_PROPERTY_POSITION_Y 1 +#define _UI_BASIC_PROPERTY_WIDTH 2 +#define _UI_BASIC_PROPERTY_HEIGHT 3 +void _ui_basic_set_property(lv_obj_t * target, int id, int val); + +#define _UI_DROPDOWN_PROPERTY_SELECTED 0 +void _ui_dropdown_set_property(lv_obj_t * target, int id, int val); + +#define _UI_IMAGE_PROPERTY_IMAGE 0 +void _ui_image_set_property(lv_obj_t * target, int id, uint8_t * val); + +#define _UI_LABEL_PROPERTY_TEXT 0 +void _ui_label_set_property(lv_obj_t * target, int id, const char * val); + +#define _UI_ROLLER_PROPERTY_SELECTED 0 +#define _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM 1 +void _ui_roller_set_property(lv_obj_t * target, int id, int val); + +#define _UI_SLIDER_PROPERTY_VALUE 0 +#define _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM 1 +void _ui_slider_set_property(lv_obj_t * target, int id, int val); + +void _ui_screen_change(lv_obj_t * target, lv_scr_load_anim_t fademode, int spd, int delay); + +void _ui_arc_increment(lv_obj_t * target, int val); + +void _ui_bar_increment(lv_obj_t * target, int val, int anm); + +void _ui_slider_increment(lv_obj_t * target, int val, int anm); + +void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea); + +#define _UI_MODIFY_FLAG_ADD 0 +#define _UI_MODIFY_FLAG_REMOVE 1 +#define _UI_MODIFY_FLAG_TOGGLE 2 +void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value); + +#define _UI_MODIFY_STATE_ADD 0 +#define _UI_MODIFY_STATE_REMOVE 1 +#define _UI_MODIFY_STATE_TOGGLE 2 +void _ui_state_modify(lv_obj_t * target, int32_t state, int value); + +void _ui_opacity_set(lv_obj_t * target, int val); + +/** Describes an animation*/ +typedef struct _ui_anim_user_data_t { + lv_obj_t * target; + lv_img_dsc_t ** imgset; + int32_t imgset_size; + int32_t val; +} ui_anim_user_data_t; +void _ui_anim_callback_free_user_data(lv_anim_t * a); + +void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v); + +void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v); + +int32_t _ui_anim_callback_get_x(lv_anim_t * a); + +int32_t _ui_anim_callback_get_y(lv_anim_t * a); + +int32_t _ui_anim_callback_get_width(lv_anim_t * a); + +int32_t _ui_anim_callback_get_height(lv_anim_t * a); + +int32_t _ui_anim_callback_get_opacity(lv_anim_t * a); + +int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a); + +int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a); + +int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a); + +void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix); + +void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix); + +void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off); + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif diff --git a/devices/rmp-lcd-controller/partitions-16MiB-ota.csv b/devices/rmp-lcd-controller/partitions-16MiB-ota.csv new file mode 100644 index 0000000..a6f83bc --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-16MiB-ota.csv @@ -0,0 +1,10 @@ +# Partition table for MicroPython with OTA support using 16MB flash +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x4000, +otadata, data, ota, 0xd000, 0x2000, +phy_init, data, phy, 0xf000, 0x1000, +ota_0, app, ota_0, 0x10000, 0x270000, +ota_1, app, ota_1, 0x280000, 0x270000, +vfs, data, fat, 0x4f0000, 0xb10000, diff --git a/devices/rmp-lcd-controller/partitions-16MiB.csv b/devices/rmp-lcd-controller/partitions-16MiB.csv new file mode 100644 index 0000000..ae926c7 --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-16MiB.csv @@ -0,0 +1,7 @@ +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 0x1F0000, +vfs, data, fat, 0x200000, 0xE00000, diff --git a/devices/rmp-lcd-controller/partitions-2MiB.csv b/devices/rmp-lcd-controller/partitions-2MiB.csv new file mode 100644 index 0000000..ea66268 --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-2MiB.csv @@ -0,0 +1,7 @@ +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 0x160000, +vfs, data, fat, 0x170000, 0x50000, diff --git a/devices/rmp-lcd-controller/partitions-32MiB-ota.csv b/devices/rmp-lcd-controller/partitions-32MiB-ota.csv new file mode 100644 index 0000000..7366a2a --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-32MiB-ota.csv @@ -0,0 +1,10 @@ +# Partition table for MicroPython with OTA support using 32MB flash +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x4000, +otadata, data, ota, 0xd000, 0x2000, +phy_init, data, phy, 0xf000, 0x1000, +ota_0, app, ota_0, 0x10000, 0x270000, +ota_1, app, ota_1, 0x280000, 0x270000, +vfs, data, fat, 0x4f0000, 0x1B10000, diff --git a/devices/rmp-lcd-controller/partitions-32MiB.csv b/devices/rmp-lcd-controller/partitions-32MiB.csv new file mode 100644 index 0000000..31591c9 --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-32MiB.csv @@ -0,0 +1,7 @@ +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 0x1F0000, +vfs, data, fat, 0x200000, 0x1E00000, diff --git a/devices/rmp-lcd-controller/partitions-8MiB.csv b/devices/rmp-lcd-controller/partitions-8MiB.csv new file mode 100644 index 0000000..582d3b5 --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-8MiB.csv @@ -0,0 +1,7 @@ +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 0x1F0000, +vfs, data, fat, 0x200000, 0x600000, diff --git a/devices/rmp-lcd-controller/partitions-ota.csv b/devices/rmp-lcd-controller/partitions-ota.csv new file mode 100644 index 0000000..094ad76 --- /dev/null +++ b/devices/rmp-lcd-controller/partitions-ota.csv @@ -0,0 +1,10 @@ +# Partition table for MicroPython with OTA support using 4MB flash +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x4000, +otadata, data, ota, 0xd000, 0x2000, +phy_init, data, phy, 0xf000, 0x1000, +ota_0, app, ota_0, 0x10000, 0x180000, +ota_1, app, ota_1, 0x190000, 0x180000, +vfs, data, fat, 0x310000, 0x0f0000, diff --git a/devices/rmp-lcd-controller/partitions.csv b/devices/rmp-lcd-controller/partitions.csv new file mode 100644 index 0000000..53f0f16 --- /dev/null +++ b/devices/rmp-lcd-controller/partitions.csv @@ -0,0 +1,7 @@ +# Notes: the offset of the partition table itself is set in +# $IDF_PATH/components/partition_table/Kconfig.projbuild. +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 0x1F0000, +vfs, data, fat, 0x200000, 0x200000, diff --git a/devices/rmp-lcd-controller/release b/devices/rmp-lcd-controller/release new file mode 100755 index 0000000..f3a2de2 --- /dev/null +++ b/devices/rmp-lcd-controller/release @@ -0,0 +1,10 @@ +#!/bin/sh + +./clean +cp build/mbits-esp32s2-wrover.* ../../release +cd ../.. +git add * +git tag "rel-"`date +%m%d%Y%H%M%S` +git commit -m "release: "`date +%m%d%Y%H%M%S` +git push --tags + diff --git a/devices/rmp-lcd-controller/run b/devices/rmp-lcd-controller/run new file mode 100755 index 0000000..659bf54 --- /dev/null +++ b/devices/rmp-lcd-controller/run @@ -0,0 +1,3 @@ +#!/bin/bash +idf.py flash && idf.py monitor + diff --git a/devices/rmp-lcd-controller/sdkconfig b/devices/rmp-lcd-controller/sdkconfig new file mode 100644 index 0000000..bc00bb7 --- /dev/null +++ b/devices/rmp-lcd-controller/sdkconfig @@ -0,0 +1,2340 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) 5.1.3 Project Configuration +# +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_ADC_SUPPORTED=y +CONFIG_SOC_UART_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_WIFI_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_GDMA_SUPPORTED=y +CONFIG_SOC_GPTIMER_SUPPORTED=y +CONFIG_SOC_LCDCAM_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y +CONFIG_SOC_CACHE_SUPPORT_WRAP=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y +CONFIG_SOC_RISCV_COPROC_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_USB_OTG_SUPPORTED=y +CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y +CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y +CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y +CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y +CONFIG_SOC_RTC_MEM_SUPPORTED=y +CONFIG_SOC_PSRAM_DMA_CAPABLE=y +CONFIG_SOC_XT_WDT_SUPPORTED=y +CONFIG_SOC_I2S_SUPPORTED=y +CONFIG_SOC_RMT_SUPPORTED=y +CONFIG_SOC_SDM_SUPPORTED=y +CONFIG_SOC_GPSPI_SUPPORTED=y +CONFIG_SOC_LEDC_SUPPORTED=y +CONFIG_SOC_I2C_SUPPORTED=y +CONFIG_SOC_SYSTIMER_SUPPORTED=y +CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y +CONFIG_SOC_AES_SUPPORTED=y +CONFIG_SOC_MPI_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_HMAC_SUPPORTED=y +CONFIG_SOC_DIG_SIGN_SUPPORTED=y +CONFIG_SOC_FLASH_ENC_SUPPORTED=y +CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_MEMPROT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y +CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_XTAL_SUPPORT_40M=y +CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_ARBITER_SUPPORTED=y +CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y +CONFIG_SOC_ADC_MONITOR_SUPPORTED=y +CONFIG_SOC_ADC_DMA_SUPPORTED=y +CONFIG_SOC_ADC_PERIPH_NUM=2 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 +CONFIG_SOC_ADC_ATTEN_NUM=4 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=24 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 +CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 +CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 +CONFIG_SOC_ADC_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_APB_BACKUP_DMA=y +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y +CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y +CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y +CONFIG_SOC_CPU_CORES_NUM=2 +CONFIG_SOC_CPU_INTR_NUM=32 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 +CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 +CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 +CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 +CONFIG_SOC_GDMA_GROUPS=y +CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 +CONFIG_SOC_GDMA_SUPPORT_PSRAM=y +CONFIG_SOC_GPIO_PORT=1 +CONFIG_SOC_GPIO_PIN_COUNT=49 +CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y +CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y +CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y +CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 +CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 +CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 +CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_I2C_FIFO_LEN=32 +CONFIG_SOC_I2C_CMD_REG_NUM=8 +CONFIG_SOC_I2C_SUPPORT_SLAVE=y +CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y +CONFIG_SOC_I2C_SUPPORT_XTAL=y +CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_2=y +CONFIG_SOC_I2S_SUPPORTS_XTAL=y +CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y +CONFIG_SOC_I2S_SUPPORTS_PCM=y +CONFIG_SOC_I2S_SUPPORTS_PDM=y +CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=4 +CONFIG_SOC_I2S_SUPPORTS_TDM=y +CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 +CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 +CONFIG_SOC_MMU_PERIPH_NUM=1 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=4 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 +CONFIG_SOC_RMT_GROUPS=1 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=4 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=4 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 +CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y +CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y +CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y +CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y +CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y +CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y +CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y +CONFIG_SOC_RMT_SUPPORT_XTAL=y +CONFIG_SOC_RMT_SUPPORT_RC_FAST=y +CONFIG_SOC_RMT_SUPPORT_APB=y +CONFIG_SOC_RMT_SUPPORT_DMA=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_RGB_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=1 +CONFIG_SOC_LCD_RGB_PANELS=1 +CONFIG_SOC_LCD_I80_BUS_WIDTH=16 +CONFIG_SOC_LCD_RGB_DATA_WIDTH=16 +CONFIG_SOC_LCD_SUPPORT_RGB_YUV_CONV=y +CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 +CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=549 +CONFIG_SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH=128 +CONFIG_SOC_RTCIO_PIN_COUNT=22 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_SDM_GROUPS=y +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 +CONFIG_SOC_SDM_CLK_SUPPORT_APB=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_MAX_CS_NUM=6 +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_SUPPORT_DDRCLK=y +CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y +CONFIG_SOC_SPI_SUPPORT_CD_SIG=y +CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y +CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y +CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y +CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y +CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 +CONFIG_SOC_SPI_SUPPORT_OCT=y +CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y +CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPIRAM_XIP_SUPPORTED=y +CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 +CONFIG_SOC_SYSTIMER_ALARM_NUM=3 +CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 +CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 +CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y +CONFIG_SOC_SYSTIMER_INT_LEVEL=y +CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y +CONFIG_SOC_TIMER_GROUPS=2 +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 +CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y +CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TOUCH_VERSION_2=y +CONFIG_SOC_TOUCH_SENSOR_NUM=15 +CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 +CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y +CONFIG_SOC_TOUCH_PAD_THRESHOLD_MAX=0x1FFFFF +CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TWAI_CONTROLLER_NUM=1 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_BRP_MAX=16384 +CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_FIFO_LEN=128 +CONFIG_SOC_UART_BITRATE_MAX=5000000 +CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y +CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_RTC_CLK=y +CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y +CONFIG_SOC_UART_REQUIRE_CORE_RESET=y +CONFIG_SOC_USB_OTG_PERIPH_NUM=1 +CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 +CONFIG_SOC_SHA_SUPPORT_DMA=y +CONFIG_SOC_SHA_SUPPORT_RESUME=y +CONFIG_SOC_SHA_GDMA=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA224=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_SHA_SUPPORT_SHA512_224=y +CONFIG_SOC_SHA_SUPPORT_SHA512_256=y +CONFIG_SOC_SHA_SUPPORT_SHA512_T=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_DMA=y +CONFIG_SOC_AES_GDMA=y +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_CPU_PD=y +CONFIG_SOC_PM_SUPPORT_TAGMEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y +CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y +CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y +CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y +CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y +CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y +CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y +CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y +CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y +CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y +CONFIG_SOC_EFUSE_DIS_DOWNLOAD_DCACHE=y +CONFIG_SOC_EFUSE_HARD_DIS_JTAG=y +CONFIG_SOC_EFUSE_DIS_USB_JTAG=y +CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y +CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y +CONFIG_SOC_EFUSE_DIS_ICACHE=y +CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y +CONFIG_SOC_SECURE_BOOT_V2_RSA=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 +CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64 +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_256=y +CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 +CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=256 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 +CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 +CONFIG_SOC_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_SW_SUSPEND=y +CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y +CONFIG_SOC_SPI_MEM_SUPPORT_TIME_TUNING=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_COEX_HW_PTI=y +CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y +CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y +CONFIG_SOC_WIFI_HW_TSF=y +CONFIG_SOC_WIFI_FTM_SUPPORT=y +CONFIG_SOC_WIFI_GCMP_SUPPORT=y +CONFIG_SOC_WIFI_WAPI_SUPPORT=y +CONFIG_SOC_WIFI_CSI_SUPPORT=y +CONFIG_SOC_WIFI_MESH_SUPPORT=y +CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y +CONFIG_SOC_BLE_SUPPORTED=y +CONFIG_SOC_BLE_MESH_SUPPORTED=y +CONFIG_SOC_BLE_50_SUPPORTED=y +CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y +CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y +CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32s3" +CONFIG_IDF_TARGET_ESP32S3=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 + +# +# 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 +# +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 +# 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 +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set +CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 +# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set +CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y +# end of Bootloader config + +# +# Security features +# +CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y +CONFIG_SECURE_BOOT_V2_PREFERRED=y +# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set +# CONFIG_SECURE_BOOT is not set +# CONFIG_SECURE_FLASH_ENC_ENABLED is not set +CONFIG_SECURE_ROM_DL_MODE_ENABLED=y +# end of Security features + +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +CONFIG_ESP_ROM_HAS_CRC_LE=y +CONFIG_ESP_ROM_HAS_CRC_BE=y +CONFIG_ESP_ROM_HAS_MZ_CRC32=y +CONFIG_ESP_ROM_HAS_JPEG_DECODE=y +CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y +CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y +CONFIG_ESP_ROM_USB_OTG_NUM=3 +CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4 +CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y +CONFIG_ESP_ROM_GET_CLK_FREQ=y +CONFIG_ESP_ROM_HAS_HAL_WDT=y +CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y +CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y +CONFIG_ESP_ROM_HAS_SPI_FLASH=y +CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y +CONFIG_ESP_ROM_HAS_NEWLIB_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_FLASH_COUNT_PAGES_BUG=y +CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y +CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=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_OCT_FLASH is not set +CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=y +# 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_120M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y +CONFIG_ESPTOOLPY_FLASHFREQ="80m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="16MB" +# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 +# end of Serial flasher config + +# +# Partition Table +# +CONFIG_PARTITION_TABLE_SINGLE_APP=y +# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set +# CONFIG_PARTITION_TABLE_TWO_OTA 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 + +# +# LCD Configuration +# +# CONFIG_EXAMPLE_DOUBLE_FB is not set +# CONFIG_EXAMPLE_USE_BOUNCE_BUFFER is not set +CONFIG_EXAMPLE_AVOID_TEAR_EFFECT_WITH_SEM=y +CONFIG_EXAMPLE_LCD_TOUCH_ENABLED=y +# end of LCD Configuration + +# +# Mbits +# + +# +# I2C Host +# +CONFIG_I2C_HOST_SCL=19 +CONFIG_I2C_HOST_SDA=18 +CONFIG_I2C_HOST_PORT_NUM=1 +CONFIG_I2C_HOST_FREQUENCY=100000 +# end of I2C Host +# end of Mbits + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=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_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set +CONFIG_COMPILER_HIDE_PATHS_MACROS=y +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y +# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES 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_UART2 is not set +# CONFIG_APPTRACE_DEST_USB_CDC is not set +CONFIG_APPTRACE_DEST_UART_NONE=y +CONFIG_APPTRACE_UART_TASK_PRIO=1 +CONFIG_APPTRACE_LOCK_ENABLE=y +# end of Application Level Tracing + +# +# Bluetooth +# +# CONFIG_BT_ENABLED is not set +# end of Bluetooth + +# +# Driver Configurations +# + +# +# Legacy ADC Configuration +# +# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set + +# +# Legacy ADC Calibration Configuration +# +# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy ADC Calibration Configuration +# end of Legacy ADC Configuration + +# +# SPI Configuration +# +# 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 SPI Configuration + +# +# TWAI Configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y +# end of TWAI Configuration + +# +# Temperature sensor Configuration +# +# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set +# end of Temperature sensor Configuration + +# +# UART Configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART Configuration + +# +# GPIO Configuration +# +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of GPIO Configuration + +# +# Sigma Delta Modulator Configuration +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of Sigma Delta Modulator Configuration + +# +# GPTimer Configuration +# +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of GPTimer Configuration + +# +# PCNT Configuration +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of PCNT Configuration + +# +# RMT Configuration +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of RMT Configuration + +# +# MCPWM Configuration +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of MCPWM Configuration + +# +# I2S Configuration +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of I2S Configuration + +# +# USB Serial/JTAG Configuration +# +# end of USB Serial/JTAG Configuration +# end of Driver Configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +CONFIG_EFUSE_MAX_BLK_LEN=256 +# end of eFuse Bit Manager + +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y +# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# CONFIG_ESP_TLS_INSECURE is not set +# end of ESP-TLS + +# +# ADC and ADC Calibration +# +# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set +# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set +# end of ADC and ADC Calibration + +# +# Wireless Coexistence +# +# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set +# end of Wireless Coexistence + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# end of Common ESP-related + +# +# 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 +# +# 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 +# end of ESP HTTP client + +# +# HTTP Server +# +CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +# CONFIG_HTTPD_WS_SUPPORT is not set +# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set +# 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 +# end of ESP HTTPS OTA + +# +# ESP HTTPS server +# +# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set +# end of ESP HTTPS server + +# +# Hardware Settings +# + +# +# Chip revision +# +CONFIG_ESP32S3_REV_MIN_0=y +# CONFIG_ESP32S3_REV_MIN_1 is not set +# CONFIG_ESP32S3_REV_MIN_2 is not set +CONFIG_ESP32S3_REV_MIN_FULL=0 +CONFIG_ESP_REV_MIN_FULL=0 + +# +# Maximum Supported ESP32-S3 Revision (Rev v0.99) +# +CONFIG_ESP32S3_REV_MAX_FULL=99 +CONFIG_ESP_REV_MAX_FULL=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_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32S3_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_FLASH_LEAKAGE_WORKAROUND=y +CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y +CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y +CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 +CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_INT_RC=y +# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_RTC_CLK_CAL_CYCLES=1024 +# end of RTC Clock Config + +# +# Peripheral Control +# +CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# end of Peripheral Control + +# +# GDMA Configuration +# +# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GDMA_ISR_IRAM_SAFE is not set +# end of GDMA Configuration + +# +# Main XTAL Config +# +CONFIG_XTAL_FREQ_40=y +CONFIG_XTAL_FREQ=40 +# end of Main XTAL Config +# end of Hardware Settings + +# +# LCD and Touch Panel +# + +# +# LCD Touch Drivers are maintained in the IDF Component Registry +# + +# +# LCD Peripheral Configuration +# +CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_ENABLE_DEBUG_LOG is not set +# CONFIG_LCD_RGB_ISR_IRAM_SAFE is not set +# CONFIG_LCD_RGB_RESTART_IN_VSYNC is not set +# end of LCD Peripheral Configuration +# end of LCD and Touch Panel + +# +# ESP NETIF Adapter +# +CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 +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_RECEIVE_REPORT_ERRORS is not set +# CONFIG_ESP_NETIF_L2_TAP is not set +# CONFIG_ESP_NETIF_BRIDGE_EN is not set +# end of ESP NETIF Adapter + +# +# Partition API Configuration +# +# end of Partition API Configuration + +# +# PHY +# +CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP_PHY_MAX_TX_POWER=20 +# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set +CONFIG_ESP_PHY_ENABLE_USB=y +# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set +CONFIG_ESP_PHY_RF_CAL_PARTIAL=y +# CONFIG_ESP_PHY_RF_CAL_NONE is not set +# CONFIG_ESP_PHY_RF_CAL_FULL is not set +CONFIG_ESP_PHY_CALIBRATION_MODE=0 +# end of PHY + +# +# Power Management +# +# CONFIG_PM_ENABLE is not set +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y +# end of Power Management + +# +# ESP PSRAM +# +CONFIG_SPIRAM=y + +# +# SPI RAM config +# +# CONFIG_SPIRAM_MODE_QUAD is not set +CONFIG_SPIRAM_MODE_OCT=y +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_SPIRAM_CLK_IO=30 +CONFIG_SPIRAM_CS_IO=26 +CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y +CONFIG_SPIRAM_RODATA=y +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +CONFIG_SPIRAM_SPEED=80 +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +# CONFIG_SPIRAM_USE_MEMMAP is not set +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +CONFIG_SPIRAM_USE_MALLOC=y +CONFIG_SPIRAM_MEMTEST=y +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 +# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 +# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set +# CONFIG_SPIRAM_ECC_ENABLE is not set +# end of SPI RAM config +# end of ESP PSRAM + +# +# ESP Ringbuf +# +# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set +# end of ESP Ringbuf + +# +# ESP System Settings +# +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 + +# +# Cache config +# +CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB=y +# CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE=0x4000 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_4WAYS is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS=y +CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_16B is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 +# CONFIG_ESP32S3_DATA_CACHE_16KB is not set +CONFIG_ESP32S3_DATA_CACHE_32KB=y +# CONFIG_ESP32S3_DATA_CACHE_64KB is not set +CONFIG_ESP32S3_DATA_CACHE_SIZE=0x8000 +# CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set +CONFIG_ESP32S3_DATA_CACHE_8WAYS=y +CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_DATA_CACHE_LINE_16B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_32B=y +# CONFIG_ESP32S3_DATA_CACHE_LINE_64B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=32 +# end of Cache config + +# +# Memory +# +# CONFIG_ESP32S3_RTCDATA_IN_FAST_MEM is not set +# CONFIG_ESP32S3_USE_FIXED_STATIC_RAM_SIZE is not set +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32S3_TRAX is not set +CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + +# 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_GDBSTUB_RUNTIME is not set +CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 +CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y +CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y + +# +# Memory protection +# +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y +# end of Memory protection + +CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y +# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set +# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 +CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_USB_CDC is not set +# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set +CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y +CONFIG_ESP_CONSOLE_UART=y +CONFIG_ESP_CONSOLE_MULTIPLE_UART=y +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ESP_INT_WDT=y +CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y +CONFIG_ESP_TASK_WDT_EN=y +CONFIG_ESP_TASK_WDT_INIT=y +# CONFIG_ESP_TASK_WDT_PANIC is not set +CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP_PANIC_HANDLER_IRAM is not set +# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP_DEBUG_OCDAWARE=y +CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y + +# +# Brownout Detector +# +CONFIG_ESP_BROWNOUT_DET=y +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=7 +# end of Brownout Detector + +CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y +CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y +# end of ESP System Settings + +# +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1280 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# High resolution timer (esp_timer) +# +# CONFIG_ESP_TIMER_PROFILING is not set +CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y +CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y +CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 +# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set +CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 +CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y +CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 +CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y +# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set +CONFIG_ESP_TIMER_IMPL_SYSTIMER=y +# end of High resolution timer (esp_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=y +CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP_WIFI_CACHE_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_CSI_ENABLED is not set +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_AMSDU_TX_ENABLED is not set +CONFIG_ESP_WIFI_NVS_ENABLED=y +CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP_WIFI_IRAM_OPT=y +# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set +CONFIG_ESP_WIFI_RX_IRAM_OPT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP_WIFI_ENABLE_SAE_PK=y +CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y +# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +# CONFIG_ESP_WIFI_FTM_ENABLE is not set +CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set +# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set +CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set +CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 +CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y +CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y +# CONFIG_ESP_WIFI_WAPI_PSK is not set +# CONFIG_ESP_WIFI_SUITE_B_192 is not set +# CONFIG_ESP_WIFI_11KV_SUPPORT is not set +# CONFIG_ESP_WIFI_MBO_SUPPORT is not set +# CONFIG_ESP_WIFI_DPP_SUPPORT is not set +# CONFIG_ESP_WIFI_11R_SUPPORT is not set +# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set + +# +# WPS Configuration Options +# +# CONFIG_ESP_WIFI_WPS_STRICT is not set +# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set +# end of WPS Configuration Options + +# CONFIG_ESP_WIFI_DEBUG_PRINT is not set +# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set +CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y +# 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_ALLOC_PREFER_EXTRAM=y +# CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# end of FAT Filesystem support + +# +# FreeRTOS +# + +# +# Kernel +# +# CONFIG_FREERTOS_SMP is not set +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_HZ=100 +# 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_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_GENERATE_RUN_TIME_STATS 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_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_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +# end of Port + +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_DEBUG_OCDAWARE=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_WDT_USE_ROM_IMPL=y +CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y +CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=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_ABORT_WHEN_ALLOCATION_FAILS is not set +# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set +# end of Heap memory debugging + +# +# Log output +# +# 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 +CONFIG_LOG_COLORS=y +CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y +# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# end of Log output + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +# CONFIG_LWIP_NETIF_API is not set +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_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 +# 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=5744 +CONFIG_LWIP_TCP_WND_DEFAULT=5744 +CONFIG_LWIP_TCP_RECVMBOX_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_CPU1 is not set +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_LWIP_PPP_SUPPORT is not set +CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 +CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 +# 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 +# end of SNTP + +CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 +CONFIG_LWIP_ESP_LWIP_ASSERT=y + +# +# Hooks +# +# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set +CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y +# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y +# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set +CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y +# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set +# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set +CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y +# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set +# 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_EXTERNAL_MEM_ALLOC is not set +# 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_MAX_CERTS=200 +# end of Certificate Bundle + +# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set +CONFIG_MBEDTLS_CMAC_C=y +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_AES_USE_INTERRUPT=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y +CONFIG_MBEDTLS_HARDWARE_SHA=y +CONFIG_MBEDTLS_ROM_MD5=y +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA512_C=y +CONFIG_MBEDTLS_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_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=y +# 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_LARGE_KEY_SOFTWARE_MPI 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 + +# +# Newlib +# +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y +# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set +# end of Newlib + +# +# NVS +# +# CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# end of NVS + +# +# OpenThread +# +# CONFIG_OPENTHREAD_ENABLED is not set + +# +# Thread Operational Dataset +# +CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" +CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" +CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 +CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 +CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" +CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" +CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" +# end of Thread Operational Dataset + +CONFIG_OPENTHREAD_XTAL_ACCURACY=130 +# CONFIG_OPENTHREAD_SPINEL_ONLY is not set +CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y + +# +# Thread Address Query Config +# +# end of Thread Address Query Config +# end of OpenThread + +# +# Protocomm +# +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y +# end of Protocomm + +# +# PThreads +# +CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set +CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" +# end of PThreads + +# +# MMU Config +# +CONFIG_MMU_PAGE_SIZE_64KB=y +CONFIG_MMU_PAGE_MODE="64KB" +CONFIG_MMU_PAGE_SIZE=0x10000 +# end of MMU Config + +# +# 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 + +# +# 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 + +# +# 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 +CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y +# end of Auto-detect flash chips + +CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y +# end of SPI Flash driver + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=3 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +# end of SPIFFS Cache Configuration + +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y + +# +# Debug Configuration +# +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +# end of Debug Configuration +# end of SPIFFS Configuration + +# +# TCP Transport +# + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y +CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set +# end of Websocket +# end of TCP Transport + +# +# Ultra Low Power (ULP) Co-processor +# +# CONFIG_ULP_COPROC_ENABLED is not set +# end of Ultra Low Power (ULP) Co-processor + +# +# Unity unit testing library +# +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_64BIT is not set +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set +# end of Unity unit testing library + +# +# USB-OTG +# +CONFIG_USB_OTG_SUPPORTED=y +CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256 +CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y +# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set +# CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set + +# +# Root Hub configuration +# +CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=250 +CONFIG_USB_HOST_RESET_HOLD_MS=30 +CONFIG_USB_HOST_RESET_RECOVERY_MS=30 +CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10 +# end of Root Hub configuration +# end of USB-OTG + +# +# 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) +# 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_FORCE_ENCRYPTION 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 + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +# CONFIG_LV_COLOR_DEPTH_32 is not set +CONFIG_LV_COLOR_DEPTH_16=y +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=16 +# CONFIG_LV_COLOR_16_SWAP is not set +# CONFIG_LV_COLOR_SCREEN_TRANSP is not set +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +CONFIG_LV_MEM_CUSTOM=y +CONFIG_LV_MEM_CUSTOM_INCLUDE="stdlib.h" +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +CONFIG_LV_DISP_DEF_REFR_PERIOD=30 +CONFIG_LV_INDEV_DEF_READ_PERIOD=30 +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_RA6M3_G2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +CONFIG_LV_USE_PERF_MONITOR=y +# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_LEFT is not set +CONFIG_LV_PERF_MONITOR_ALIGN_TOP_MID=y +# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_RIGHT is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_MID is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_LEFT_MID is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_RIGHT_MID is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_CENTER is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# CONFIG_LV_FONT_CUSTOM is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_FS_LITTLEFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_TINY_TTF is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration + +# +# ESP LCD TOUCH +# +CONFIG_ESP_LCD_TOUCH_MAX_POINTS=5 +CONFIG_ESP_LCD_TOUCH_MAX_BUTTONS=1 +# end of ESP LCD TOUCH +# end of Component config + +# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set + +# Deprecated options for backward compatibility +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +# CONFIG_NO_BLOBS is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_MONITOR_BAUD=115200 +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_CXX_EXCEPTIONS is not set +CONFIG_STACK_CHECK_NONE=y +# CONFIG_STACK_CHECK_NORM is not set +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +# CONFIG_WARN_WRITE_STRINGS is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +# CONFIG_MCPWM_ISR_IN_IRAM is not set +# CONFIG_EXTERNAL_COEX_ENABLE is not set +# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +# CONFIG_OTA_ALLOW_HTTP is not set +CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 +# CONFIG_REDUCE_PHY_TX_POWER is not set +# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set +CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80 is not set +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +# CONFIG_ESP_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART=y +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +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_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP32S3_DEBUG_OCDAWARE=y +CONFIG_BROWNOUT_DET=y +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_7=y +CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_BROWNOUT_DET_LVL=7 +CONFIG_ESP32S3_BROWNOUT_DET_LVL=7 +CONFIG_IPC_TASK_STACK_SIZE=1280 +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=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y +CONFIG_WPA_MBEDTLS_CRYPTO=y +CONFIG_WPA_MBEDTLS_TLS_CLIENT=y +# CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_SUITE_B_192 is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# CONFIG_WPA_11R_SUPPORT is not set +# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set +# CONFIG_HAL_ASSERTION_SILIENT is not set +# CONFIG_L2_TO_L3_COPY is not set +CONFIG_ESP_GRATUITOUS_ARP=y +CONFIG_GARP_TMR_INTERVAL=60 +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=12 +CONFIG_TCP_MSS=1440 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +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_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_PPP_SUPPORT is not set +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_SYSTIMER=y +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_SYSTIMER is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32S3_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_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +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/devices/rmp-lcd-controller/sdkconfig.combined b/devices/rmp-lcd-controller/sdkconfig.combined new file mode 100644 index 0000000..e17d153 --- /dev/null +++ b/devices/rmp-lcd-controller/sdkconfig.combined @@ -0,0 +1,2507 @@ +# +# Automatically generated file. DO NOT EDIT. +# Espressif IoT Development Framework (ESP-IDF) 5.1.3 Project Configuration +# +CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 +CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 +CONFIG_SOC_ADC_SUPPORTED=y +CONFIG_SOC_UART_SUPPORTED=y +CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_WIFI_SUPPORTED=y +CONFIG_SOC_TWAI_SUPPORTED=y +CONFIG_SOC_GDMA_SUPPORTED=y +CONFIG_SOC_GPTIMER_SUPPORTED=y +CONFIG_SOC_LCDCAM_SUPPORTED=y +CONFIG_SOC_MCPWM_SUPPORTED=y +CONFIG_SOC_DEDICATED_GPIO_SUPPORTED=y +CONFIG_SOC_CACHE_SUPPORT_WRAP=y +CONFIG_SOC_ULP_SUPPORTED=y +CONFIG_SOC_ULP_FSM_SUPPORTED=y +CONFIG_SOC_RISCV_COPROC_SUPPORTED=y +CONFIG_SOC_BT_SUPPORTED=y +CONFIG_SOC_USB_OTG_SUPPORTED=y +CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED=y +CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y +CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y +CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y +CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y +CONFIG_SOC_SDMMC_HOST_SUPPORTED=y +CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y +CONFIG_SOC_RTC_MEM_SUPPORTED=y +CONFIG_SOC_PSRAM_DMA_CAPABLE=y +CONFIG_SOC_XT_WDT_SUPPORTED=y +CONFIG_SOC_I2S_SUPPORTED=y +CONFIG_SOC_RMT_SUPPORTED=y +CONFIG_SOC_SDM_SUPPORTED=y +CONFIG_SOC_GPSPI_SUPPORTED=y +CONFIG_SOC_LEDC_SUPPORTED=y +CONFIG_SOC_I2C_SUPPORTED=y +CONFIG_SOC_SYSTIMER_SUPPORTED=y +CONFIG_SOC_SUPPORT_COEXISTENCE=y +CONFIG_SOC_TEMP_SENSOR_SUPPORTED=y +CONFIG_SOC_AES_SUPPORTED=y +CONFIG_SOC_MPI_SUPPORTED=y +CONFIG_SOC_SHA_SUPPORTED=y +CONFIG_SOC_HMAC_SUPPORTED=y +CONFIG_SOC_DIG_SIGN_SUPPORTED=y +CONFIG_SOC_FLASH_ENC_SUPPORTED=y +CONFIG_SOC_SECURE_BOOT_SUPPORTED=y +CONFIG_SOC_MEMPROT_SUPPORTED=y +CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y +CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_XTAL_SUPPORT_40M=y +CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y +CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED=y +CONFIG_SOC_ADC_ARBITER_SUPPORTED=y +CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED=y +CONFIG_SOC_ADC_MONITOR_SUPPORTED=y +CONFIG_SOC_ADC_DMA_SUPPORTED=y +CONFIG_SOC_ADC_PERIPH_NUM=2 +CONFIG_SOC_ADC_MAX_CHANNEL_NUM=10 +CONFIG_SOC_ADC_ATTEN_NUM=4 +CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM=2 +CONFIG_SOC_ADC_PATT_LEN_MAX=24 +CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 +CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 +CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 +CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 +CONFIG_SOC_ADC_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_APB_BACKUP_DMA=y +CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y +CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y +CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y +CONFIG_SOC_CPU_CORES_NUM=2 +CONFIG_SOC_CPU_INTR_NUM=32 +CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 +CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 +CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 +CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 +CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 +CONFIG_SOC_GDMA_GROUPS=y +CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 +CONFIG_SOC_GDMA_SUPPORT_PSRAM=y +CONFIG_SOC_GPIO_PORT=1 +CONFIG_SOC_GPIO_PIN_COUNT=49 +CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y +CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y +CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y +CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y +CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF +CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 +CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 +CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 +CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y +CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_I2C_FIFO_LEN=32 +CONFIG_SOC_I2C_CMD_REG_NUM=8 +CONFIG_SOC_I2C_SUPPORT_SLAVE=y +CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y +CONFIG_SOC_I2C_SUPPORT_XTAL=y +CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2S_NUM=2 +CONFIG_SOC_I2S_HW_VERSION_2=y +CONFIG_SOC_I2S_SUPPORTS_XTAL=y +CONFIG_SOC_I2S_SUPPORTS_PLL_F160M=y +CONFIG_SOC_I2S_SUPPORTS_PCM=y +CONFIG_SOC_I2S_SUPPORTS_PDM=y +CONFIG_SOC_I2S_SUPPORTS_PDM_TX=y +CONFIG_SOC_I2S_PDM_MAX_TX_LINES=2 +CONFIG_SOC_I2S_SUPPORTS_PDM_RX=y +CONFIG_SOC_I2S_PDM_MAX_RX_LINES=4 +CONFIG_SOC_I2S_SUPPORTS_TDM=y +CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK=y +CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_LEDC_CHANNEL_NUM=8 +CONFIG_SOC_LEDC_TIMER_BIT_WIDTH=14 +CONFIG_SOC_LEDC_SUPPORT_FADE_STOP=y +CONFIG_SOC_MCPWM_GROUPS=2 +CONFIG_SOC_MCPWM_TIMERS_PER_GROUP=3 +CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP=3 +CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR=2 +CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP=3 +CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP=y +CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER=3 +CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP=3 +CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE=y +CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM=1 +CONFIG_SOC_MMU_PERIPH_NUM=1 +CONFIG_SOC_PCNT_GROUPS=1 +CONFIG_SOC_PCNT_UNITS_PER_GROUP=4 +CONFIG_SOC_PCNT_CHANNELS_PER_UNIT=2 +CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT=2 +CONFIG_SOC_RMT_GROUPS=1 +CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP=4 +CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP=4 +CONFIG_SOC_RMT_CHANNELS_PER_GROUP=8 +CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL=48 +CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG=y +CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION=y +CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP=y +CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT=y +CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP=y +CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO=y +CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY=y +CONFIG_SOC_RMT_SUPPORT_XTAL=y +CONFIG_SOC_RMT_SUPPORT_RC_FAST=y +CONFIG_SOC_RMT_SUPPORT_APB=y +CONFIG_SOC_RMT_SUPPORT_DMA=y +CONFIG_SOC_LCD_I80_SUPPORTED=y +CONFIG_SOC_LCD_RGB_SUPPORTED=y +CONFIG_SOC_LCD_I80_BUSES=1 +CONFIG_SOC_LCD_RGB_PANELS=1 +CONFIG_SOC_LCD_I80_BUS_WIDTH=16 +CONFIG_SOC_LCD_RGB_DATA_WIDTH=16 +CONFIG_SOC_LCD_SUPPORT_RGB_YUV_CONV=y +CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH=128 +CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM=549 +CONFIG_SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH=128 +CONFIG_SOC_RTCIO_PIN_COUNT=22 +CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED=y +CONFIG_SOC_RTCIO_HOLD_SUPPORTED=y +CONFIG_SOC_RTCIO_WAKE_SUPPORTED=y +CONFIG_SOC_SDM_GROUPS=y +CONFIG_SOC_SDM_CHANNELS_PER_GROUP=8 +CONFIG_SOC_SDM_CLK_SUPPORT_APB=y +CONFIG_SOC_SPI_PERIPH_NUM=3 +CONFIG_SOC_SPI_MAX_CS_NUM=6 +CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE=64 +CONFIG_SOC_SPI_SUPPORT_DDRCLK=y +CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS=y +CONFIG_SOC_SPI_SUPPORT_CD_SIG=y +CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS=y +CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2=y +CONFIG_SOC_SPI_SUPPORT_CLK_APB=y +CONFIG_SOC_SPI_SUPPORT_CLK_XTAL=y +CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y +CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y +CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 +CONFIG_SOC_SPI_SUPPORT_OCT=y +CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y +CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y +CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED=y +CONFIG_SOC_SPIRAM_SUPPORTED=y +CONFIG_SOC_SPIRAM_XIP_SUPPORTED=y +CONFIG_SOC_SYSTIMER_COUNTER_NUM=2 +CONFIG_SOC_SYSTIMER_ALARM_NUM=3 +CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO=32 +CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI=20 +CONFIG_SOC_SYSTIMER_FIXED_DIVIDER=y +CONFIG_SOC_SYSTIMER_INT_LEVEL=y +CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE=y +CONFIG_SOC_TIMER_GROUPS=2 +CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP=2 +CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 +CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y +CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y +CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 +CONFIG_SOC_TOUCH_VERSION_2=y +CONFIG_SOC_TOUCH_SENSOR_NUM=15 +CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 +CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y +CONFIG_SOC_TOUCH_PAD_THRESHOLD_MAX=0x1FFFFF +CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TWAI_CONTROLLER_NUM=1 +CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y +CONFIG_SOC_TWAI_BRP_MIN=2 +CONFIG_SOC_TWAI_BRP_MAX=16384 +CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y +CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_FIFO_LEN=128 +CONFIG_SOC_UART_BITRATE_MAX=5000000 +CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y +CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y +CONFIG_SOC_UART_SUPPORT_APB_CLK=y +CONFIG_SOC_UART_SUPPORT_RTC_CLK=y +CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y +CONFIG_SOC_UART_REQUIRE_CORE_RESET=y +CONFIG_SOC_USB_OTG_PERIPH_NUM=1 +CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 +CONFIG_SOC_SHA_SUPPORT_DMA=y +CONFIG_SOC_SHA_SUPPORT_RESUME=y +CONFIG_SOC_SHA_GDMA=y +CONFIG_SOC_SHA_SUPPORT_SHA1=y +CONFIG_SOC_SHA_SUPPORT_SHA224=y +CONFIG_SOC_SHA_SUPPORT_SHA256=y +CONFIG_SOC_SHA_SUPPORT_SHA384=y +CONFIG_SOC_SHA_SUPPORT_SHA512=y +CONFIG_SOC_SHA_SUPPORT_SHA512_224=y +CONFIG_SOC_SHA_SUPPORT_SHA512_256=y +CONFIG_SOC_SHA_SUPPORT_SHA512_T=y +CONFIG_SOC_RSA_MAX_BIT_LEN=4096 +CONFIG_SOC_AES_SUPPORT_DMA=y +CONFIG_SOC_AES_GDMA=y +CONFIG_SOC_AES_SUPPORT_AES_128=y +CONFIG_SOC_AES_SUPPORT_AES_256=y +CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_BT_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP=y +CONFIG_SOC_PM_SUPPORT_CPU_PD=y +CONFIG_SOC_PM_SUPPORT_TAGMEM_PD=y +CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD=y +CONFIG_SOC_PM_SUPPORT_RC_FAST_PD=y +CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD=y +CONFIG_SOC_PM_SUPPORT_MAC_BB_PD=y +CONFIG_SOC_PM_SUPPORT_MODEM_PD=y +CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED=y +CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY=y +CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL=y +CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA=y +CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED=y +CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256=y +CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION=y +CONFIG_SOC_CLK_XTAL32K_SUPPORTED=y +CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE=y +CONFIG_SOC_EFUSE_DIS_DOWNLOAD_DCACHE=y +CONFIG_SOC_EFUSE_HARD_DIS_JTAG=y +CONFIG_SOC_EFUSE_DIS_USB_JTAG=y +CONFIG_SOC_EFUSE_SOFT_DIS_JTAG=y +CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT=y +CONFIG_SOC_EFUSE_DIS_ICACHE=y +CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK=y +CONFIG_SOC_SECURE_BOOT_V2_RSA=y +CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS=3 +CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS=y +CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY=y +CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX=64 +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_256=y +CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE=16 +CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE=256 +CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE=21 +CONFIG_SOC_MAC_BB_PD_MEM_SIZE=192 +CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH=12 +CONFIG_SOC_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_SW_SUSPEND=y +CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y +CONFIG_SOC_SPI_MEM_SUPPORT_TIME_TUNING=y +CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y +CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_COEX_HW_PTI=y +CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y +CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y +CONFIG_SOC_SDMMC_NUM_SLOTS=2 +CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y +CONFIG_SOC_WIFI_HW_TSF=y +CONFIG_SOC_WIFI_FTM_SUPPORT=y +CONFIG_SOC_WIFI_GCMP_SUPPORT=y +CONFIG_SOC_WIFI_WAPI_SUPPORT=y +CONFIG_SOC_WIFI_CSI_SUPPORT=y +CONFIG_SOC_WIFI_MESH_SUPPORT=y +CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y +CONFIG_SOC_BLE_SUPPORTED=y +CONFIG_SOC_BLE_MESH_SUPPORTED=y +CONFIG_SOC_BLE_50_SUPPORTED=y +CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED=y +CONFIG_SOC_BLUFI_SUPPORTED=y +CONFIG_SOC_ULP_HAS_ADC=y +CONFIG_SOC_PHY_COMBO_MODULE=y +CONFIG_IDF_CMAKE=y +CONFIG_IDF_TARGET_ARCH_XTENSA=y +CONFIG_IDF_TARGET_ARCH="xtensa" +CONFIG_IDF_TARGET="esp32s3" +CONFIG_IDF_TARGET_ESP32S3=y +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 + +# +# 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 +# +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 +# 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 +CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V=y +# CONFIG_BOOTLOADER_FACTORY_RESET is not set +# CONFIG_BOOTLOADER_APP_TEST is not set +CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE=y +CONFIG_BOOTLOADER_WDT_ENABLE=y +# CONFIG_BOOTLOADER_WDT_DISABLE_IN_USER_CODE is not set +CONFIG_BOOTLOADER_WDT_TIME_MS=9000 +# CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON is not set +# CONFIG_BOOTLOADER_SKIP_VALIDATE_ALWAYS is not set +CONFIG_BOOTLOADER_RESERVE_RTC_SIZE=0 +# CONFIG_BOOTLOADER_CUSTOM_RESERVE_RTC is not set +CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT=y +# end of Bootloader config + +# +# Security features +# +CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED=y +CONFIG_SECURE_BOOT_V2_PREFERRED=y +# CONFIG_SECURE_SIGNED_APPS_NO_SECURE_BOOT is not set +# CONFIG_SECURE_BOOT is not set +# CONFIG_SECURE_FLASH_ENC_ENABLED is not set +CONFIG_SECURE_ROM_DL_MODE_ENABLED=y +# end of Security features + +# +# Application manager +# +CONFIG_APP_COMPILE_TIME_DATE=y +# CONFIG_APP_EXCLUDE_PROJECT_VER_VAR is not set +# CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR is not set +# CONFIG_APP_PROJECT_VER_FROM_CONFIG is not set +CONFIG_APP_RETRIEVE_LEN_ELF_SHA=16 +# end of Application manager + +CONFIG_ESP_ROM_HAS_CRC_LE=y +CONFIG_ESP_ROM_HAS_CRC_BE=y +CONFIG_ESP_ROM_HAS_MZ_CRC32=y +CONFIG_ESP_ROM_HAS_JPEG_DECODE=y +CONFIG_ESP_ROM_UART_CLK_IS_XTAL=y +CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y +CONFIG_ESP_ROM_USB_OTG_NUM=3 +CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4 +CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y +CONFIG_ESP_ROM_GET_CLK_FREQ=y +CONFIG_ESP_ROM_HAS_HAL_WDT=y +CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y +CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y +CONFIG_ESP_ROM_HAS_SPI_FLASH=y +CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y +CONFIG_ESP_ROM_HAS_NEWLIB_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_FLASH_COUNT_PAGES_BUG=y +CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y +CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=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_OCT_FLASH is not set +CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT=y +# 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_120M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y +# CONFIG_ESPTOOLPY_FLASHFREQ_40M is not set +# CONFIG_ESPTOOLPY_FLASHFREQ_20M is not set +CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y +CONFIG_ESPTOOLPY_FLASHFREQ="80m" +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="16MB" +# CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set +CONFIG_ESPTOOLPY_BEFORE_RESET=y +# CONFIG_ESPTOOLPY_BEFORE_NORESET is not set +CONFIG_ESPTOOLPY_BEFORE="default_reset" +CONFIG_ESPTOOLPY_AFTER_RESET=y +# CONFIG_ESPTOOLPY_AFTER_NORESET is not set +CONFIG_ESPTOOLPY_AFTER="hard_reset" +CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 +# end of Serial flasher config + +# +# Partition Table +# +CONFIG_PARTITION_TABLE_SINGLE_APP=y +# CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set +# CONFIG_PARTITION_TABLE_TWO_OTA 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 + +# +# LCD Configuration +# +# CONFIG_EXAMPLE_DOUBLE_FB is not set +# CONFIG_EXAMPLE_USE_BOUNCE_BUFFER is not set +CONFIG_EXAMPLE_AVOID_TEAR_EFFECT_WITH_SEM=y +CONFIG_EXAMPLE_LCD_TOUCH_ENABLED=y +# end of LCD Configuration + +# +# Mbits +# + +# +# I2C Host +# +CONFIG_I2C_HOST_SCL=19 +CONFIG_I2C_HOST_SDA=18 +CONFIG_I2C_HOST_PORT_NUM=1 +CONFIG_I2C_HOST_FREQUENCY=100000 +# end of I2C Host +# end of Mbits + +# +# Compiler options +# +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=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_FLOAT_LIB_FROM_GCCLIB=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT is not set +CONFIG_COMPILER_HIDE_PATHS_MACROS=y +# CONFIG_COMPILER_CXX_EXCEPTIONS is not set +# CONFIG_COMPILER_CXX_RTTI is not set +CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y +# CONFIG_COMPILER_STACK_CHECK_MODE_NORM is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_STRONG is not set +# CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set +# CONFIG_COMPILER_WARN_WRITE_STRINGS is not set +# CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DUMP_RTL_FILES 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_UART2 is not set +# CONFIG_APPTRACE_DEST_USB_CDC is not set +CONFIG_APPTRACE_DEST_UART_NONE=y +CONFIG_APPTRACE_UART_TASK_PRIO=1 +CONFIG_APPTRACE_LOCK_ENABLE=y +# end of Application Level Tracing + +# +# Bluetooth +# +# CONFIG_BT_ENABLED is not set +# end of Bluetooth + +# +# Driver Configurations +# + +# +# Legacy ADC Configuration +# +# CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set + +# +# Legacy ADC Calibration Configuration +# +# CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy ADC Calibration Configuration +# end of Legacy ADC Configuration + +# +# SPI Configuration +# +# 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 SPI Configuration + +# +# TWAI Configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y +# end of TWAI Configuration + +# +# Temperature sensor Configuration +# +# CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set +# end of Temperature sensor Configuration + +# +# UART Configuration +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of UART Configuration + +# +# GPIO Configuration +# +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of GPIO Configuration + +# +# Sigma Delta Modulator Configuration +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of Sigma Delta Modulator Configuration + +# +# GPTimer Configuration +# +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of GPTimer Configuration + +# +# PCNT Configuration +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of PCNT Configuration + +# +# RMT Configuration +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of RMT Configuration + +# +# MCPWM Configuration +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of MCPWM Configuration + +# +# I2S Configuration +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of I2S Configuration + +# +# USB Serial/JTAG Configuration +# +# end of USB Serial/JTAG Configuration +# end of Driver Configurations + +# +# eFuse Bit Manager +# +# CONFIG_EFUSE_CUSTOM_TABLE is not set +# CONFIG_EFUSE_VIRTUAL is not set +CONFIG_EFUSE_MAX_BLK_LEN=256 +# end of eFuse Bit Manager + +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y +# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# CONFIG_ESP_TLS_INSECURE is not set +# end of ESP-TLS + +# +# ADC and ADC Calibration +# +# CONFIG_ADC_ONESHOT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE is not set +# CONFIG_ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3 is not set +# end of ADC and ADC Calibration + +# +# Wireless Coexistence +# +# CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set +# end of Wireless Coexistence + +# +# Common ESP-related +# +CONFIG_ESP_ERR_TO_NAME_LOOKUP=y +# end of Common ESP-related + +# +# 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 +# +# 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 +# end of ESP HTTP client + +# +# HTTP Server +# +CONFIG_HTTPD_MAX_REQ_HDR_LEN=512 +CONFIG_HTTPD_MAX_URI_LEN=512 +CONFIG_HTTPD_ERR_RESP_NO_DELAY=y +CONFIG_HTTPD_PURGE_BUF_LEN=32 +# CONFIG_HTTPD_LOG_PURGE_DATA is not set +# CONFIG_HTTPD_WS_SUPPORT is not set +# CONFIG_HTTPD_QUEUE_WORK_BLOCKING is not set +# 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 +# end of ESP HTTPS OTA + +# +# ESP HTTPS server +# +# CONFIG_ESP_HTTPS_SERVER_ENABLE is not set +# end of ESP HTTPS server + +# +# Hardware Settings +# + +# +# Chip revision +# +CONFIG_ESP32S3_REV_MIN_0=y +# CONFIG_ESP32S3_REV_MIN_1 is not set +# CONFIG_ESP32S3_REV_MIN_2 is not set +CONFIG_ESP32S3_REV_MIN_FULL=0 +CONFIG_ESP_REV_MIN_FULL=0 + +# +# Maximum Supported ESP32-S3 Revision (Rev v0.99) +# +CONFIG_ESP32S3_REV_MAX_FULL=99 +CONFIG_ESP_REV_MAX_FULL=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_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set +CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP32S3_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_FLASH_LEAKAGE_WORKAROUND=y +CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND=y +CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y +CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y +CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y +CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 +CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y +# end of Sleep Config + +# +# RTC Clock Config +# +CONFIG_RTC_CLK_SRC_INT_RC=y +# CONFIG_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_RTC_CLK_CAL_CYCLES=1024 +# end of RTC Clock Config + +# +# Peripheral Control +# +CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y +# end of Peripheral Control + +# +# GDMA Configuration +# +# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GDMA_ISR_IRAM_SAFE is not set +# end of GDMA Configuration + +# +# Main XTAL Config +# +CONFIG_XTAL_FREQ_40=y +CONFIG_XTAL_FREQ=40 +# end of Main XTAL Config +# end of Hardware Settings + +# +# LCD and Touch Panel +# + +# +# LCD Touch Drivers are maintained in the IDF Component Registry +# + +# +# LCD Peripheral Configuration +# +CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE=32 +# CONFIG_LCD_ENABLE_DEBUG_LOG is not set +# CONFIG_LCD_RGB_ISR_IRAM_SAFE is not set +# CONFIG_LCD_RGB_RESTART_IN_VSYNC is not set +# end of LCD Peripheral Configuration +# end of LCD and Touch Panel + +# +# ESP NETIF Adapter +# +CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL=120 +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_RECEIVE_REPORT_ERRORS is not set +# CONFIG_ESP_NETIF_L2_TAP is not set +# CONFIG_ESP_NETIF_BRIDGE_EN is not set +# end of ESP NETIF Adapter + +# +# Partition API Configuration +# +# end of Partition API Configuration + +# +# PHY +# +CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP_PHY_MAX_TX_POWER=20 +# CONFIG_ESP_PHY_REDUCE_TX_POWER is not set +CONFIG_ESP_PHY_ENABLE_USB=y +# CONFIG_ESP_PHY_ENABLE_CERT_TEST is not set +CONFIG_ESP_PHY_RF_CAL_PARTIAL=y +# CONFIG_ESP_PHY_RF_CAL_NONE is not set +# CONFIG_ESP_PHY_RF_CAL_FULL is not set +CONFIG_ESP_PHY_CALIBRATION_MODE=0 +# end of PHY + +# +# Power Management +# +# CONFIG_PM_ENABLE is not set +CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y +CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y +# end of Power Management + +# +# ESP PSRAM +# +CONFIG_SPIRAM=y + +# +# SPI RAM config +# +# CONFIG_SPIRAM_MODE_QUAD is not set +CONFIG_SPIRAM_MODE_OCT=y +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y +CONFIG_SPIRAM_CLK_IO=30 +CONFIG_SPIRAM_CS_IO=26 +CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y +CONFIG_SPIRAM_RODATA=y +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +CONFIG_SPIRAM_SPEED=80 +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +# CONFIG_SPIRAM_USE_MEMMAP is not set +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +CONFIG_SPIRAM_USE_MALLOC=y +CONFIG_SPIRAM_MEMTEST=y +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 +# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 +# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set +# CONFIG_SPIRAM_ECC_ENABLE is not set +# end of SPI RAM config +# end of ESP PSRAM + +# +# ESP Ringbuf +# +# CONFIG_RINGBUF_PLACE_FUNCTIONS_INTO_FLASH is not set +# end of ESP Ringbuf + +# +# ESP System Settings +# +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_80 is not set +# CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_160 is not set +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ=240 + +# +# Cache config +# +CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB=y +# CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE=0x4000 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_4WAYS is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS=y +CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_16B is not set +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B=y +CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE=32 +# CONFIG_ESP32S3_DATA_CACHE_16KB is not set +CONFIG_ESP32S3_DATA_CACHE_32KB=y +# CONFIG_ESP32S3_DATA_CACHE_64KB is not set +CONFIG_ESP32S3_DATA_CACHE_SIZE=0x8000 +# CONFIG_ESP32S3_DATA_CACHE_4WAYS is not set +CONFIG_ESP32S3_DATA_CACHE_8WAYS=y +CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS=8 +# CONFIG_ESP32S3_DATA_CACHE_LINE_16B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_32B=y +# CONFIG_ESP32S3_DATA_CACHE_LINE_64B is not set +CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE=32 +# end of Cache config + +# +# Memory +# +# CONFIG_ESP32S3_RTCDATA_IN_FAST_MEM is not set +# CONFIG_ESP32S3_USE_FIXED_STATIC_RAM_SIZE is not set +# end of Memory + +# +# Trace memory +# +# CONFIG_ESP32S3_TRAX is not set +CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 +# end of Trace memory + +# 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_GDBSTUB_RUNTIME is not set +CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 +CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y +CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y + +# +# Memory protection +# +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=y +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y +# end of Memory protection + +CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y +# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set +# CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set +CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 +CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 +CONFIG_ESP_CONSOLE_UART_DEFAULT=y +# CONFIG_ESP_CONSOLE_USB_CDC is not set +# CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG is not set +# CONFIG_ESP_CONSOLE_UART_CUSTOM is not set +# CONFIG_ESP_CONSOLE_NONE is not set +# CONFIG_ESP_CONSOLE_SECONDARY_NONE is not set +CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y +CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y +CONFIG_ESP_CONSOLE_UART=y +CONFIG_ESP_CONSOLE_MULTIPLE_UART=y +CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +CONFIG_ESP_INT_WDT=y +CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 +CONFIG_ESP_INT_WDT_CHECK_CPU1=y +CONFIG_ESP_TASK_WDT_EN=y +CONFIG_ESP_TASK_WDT_INIT=y +# CONFIG_ESP_TASK_WDT_PANIC is not set +CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP_PANIC_HANDLER_IRAM is not set +# CONFIG_ESP_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP_DEBUG_OCDAWARE=y +CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4=y + +# +# Brownout Detector +# +CONFIG_ESP_BROWNOUT_DET=y +CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7=y +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_ESP_BROWNOUT_DET_LVL=7 +# end of Brownout Detector + +CONFIG_ESP_SYSTEM_BROWNOUT_INTR=y +CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y +# end of ESP System Settings + +# +# IPC (Inter-Processor Call) +# +CONFIG_ESP_IPC_TASK_STACK_SIZE=1280 +CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y +CONFIG_ESP_IPC_ISR_ENABLE=y +# end of IPC (Inter-Processor Call) + +# +# High resolution timer (esp_timer) +# +# CONFIG_ESP_TIMER_PROFILING is not set +CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y +CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER=y +CONFIG_ESP_TIMER_TASK_STACK_SIZE=3584 +CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 +# CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set +CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 +CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y +CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 +CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y +# CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set +CONFIG_ESP_TIMER_IMPL_SYSTIMER=y +# end of High resolution timer (esp_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=y +CONFIG_ESP_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP_WIFI_CACHE_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_CSI_ENABLED is not set +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_AMSDU_TX_ENABLED is not set +CONFIG_ESP_WIFI_NVS_ENABLED=y +CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP_WIFI_IRAM_OPT=y +# CONFIG_ESP_WIFI_EXTRA_IRAM_OPT is not set +CONFIG_ESP_WIFI_RX_IRAM_OPT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP_WIFI_ENABLE_SAE_PK=y +CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y +CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y +# CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +# CONFIG_ESP_WIFI_FTM_ENABLE is not set +CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y +# CONFIG_ESP_WIFI_GCMP_SUPPORT is not set +# CONFIG_ESP_WIFI_GMAC_SUPPORT is not set +CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set +CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 +CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y +CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y +# CONFIG_ESP_WIFI_WAPI_PSK is not set +# CONFIG_ESP_WIFI_SUITE_B_192 is not set +# CONFIG_ESP_WIFI_11KV_SUPPORT is not set +# CONFIG_ESP_WIFI_MBO_SUPPORT is not set +# CONFIG_ESP_WIFI_DPP_SUPPORT is not set +# CONFIG_ESP_WIFI_11R_SUPPORT is not set +# CONFIG_ESP_WIFI_WPS_SOFTAP_REGISTRAR is not set + +# +# WPS Configuration Options +# +# CONFIG_ESP_WIFI_WPS_STRICT is not set +# CONFIG_ESP_WIFI_WPS_PASSPHRASE is not set +# end of WPS Configuration Options + +# CONFIG_ESP_WIFI_DEBUG_PRINT is not set +# CONFIG_ESP_WIFI_TESTING_OPTIONS is not set +CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y +# 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_ALLOC_PREFER_EXTRAM=y +# CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# end of FAT Filesystem support + +# +# FreeRTOS +# + +# +# Kernel +# +# CONFIG_FREERTOS_SMP is not set +# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_HZ=100 +# 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_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_GENERATE_RUN_TIME_STATS 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_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_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set +# CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +# end of Port + +CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_DEBUG_OCDAWARE=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_WDT_USE_ROM_IMPL=y +CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM=y +CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=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_ABORT_WHEN_ALLOCATION_FAILS is not set +# CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set +# end of Heap memory debugging + +# +# Log output +# +# 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 +CONFIG_LOG_COLORS=y +CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y +# CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set +# end of Log output + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif" +# CONFIG_LWIP_NETIF_API is not set +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_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 +# 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=5744 +CONFIG_LWIP_TCP_WND_DEFAULT=5744 +CONFIG_LWIP_TCP_RECVMBOX_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_CPU1 is not set +CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_LWIP_PPP_SUPPORT is not set +CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 +CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 +# 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 +# end of SNTP + +CONFIG_LWIP_BRIDGEIF_MAX_PORTS=7 +CONFIG_LWIP_ESP_LWIP_ASSERT=y + +# +# Hooks +# +# CONFIG_LWIP_HOOK_TCP_ISN_NONE is not set +CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT=y +# CONFIG_LWIP_HOOK_TCP_ISN_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_ROUTE_NONE=y +# CONFIG_LWIP_HOOK_IP6_ROUTE_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_ROUTE_CUSTOM is not set +CONFIG_LWIP_HOOK_ND6_GET_GW_NONE=y +# CONFIG_LWIP_HOOK_ND6_GET_GW_DEFAULT is not set +# CONFIG_LWIP_HOOK_ND6_GET_GW_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE=y +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT is not set +# CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM is not set +CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE=y +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT is not set +# CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM is not set +CONFIG_LWIP_HOOK_IP6_INPUT_NONE=y +# CONFIG_LWIP_HOOK_IP6_INPUT_DEFAULT is not set +# 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_EXTERNAL_MEM_ALLOC is not set +# 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_MAX_CERTS=200 +# end of Certificate Bundle + +# CONFIG_MBEDTLS_ECP_RESTARTABLE is not set +CONFIG_MBEDTLS_CMAC_C=y +CONFIG_MBEDTLS_HARDWARE_AES=y +CONFIG_MBEDTLS_AES_USE_INTERRUPT=y +CONFIG_MBEDTLS_HARDWARE_MPI=y +CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y +CONFIG_MBEDTLS_HARDWARE_SHA=y +CONFIG_MBEDTLS_ROM_MD5=y +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set +# CONFIG_MBEDTLS_ATCA_HW_ECDSA_VERIFY is not set +CONFIG_MBEDTLS_HAVE_TIME=y +# CONFIG_MBEDTLS_PLATFORM_TIME_ALT is not set +# CONFIG_MBEDTLS_HAVE_TIME_DATE is not set +CONFIG_MBEDTLS_ECDSA_DETERMINISTIC=y +CONFIG_MBEDTLS_SHA512_C=y +CONFIG_MBEDTLS_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_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=y +# 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_LARGE_KEY_SOFTWARE_MPI 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 + +# +# Newlib +# +CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_LF is not set +# CONFIG_NEWLIB_STDOUT_LINE_ENDING_CR is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_CRLF is not set +# CONFIG_NEWLIB_STDIN_LINE_ENDING_LF is not set +CONFIG_NEWLIB_STDIN_LINE_ENDING_CR=y +# CONFIG_NEWLIB_NANO_FORMAT is not set +CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y +# CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_HRT is not set +# CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set +# end of Newlib + +# +# NVS +# +# CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# end of NVS + +# +# OpenThread +# +# CONFIG_OPENTHREAD_ENABLED is not set + +# +# Thread Operational Dataset +# +CONFIG_OPENTHREAD_NETWORK_NAME="OpenThread-ESP" +CONFIG_OPENTHREAD_MESH_LOCAL_PREFIX="fd00:db8:a0:0::/64" +CONFIG_OPENTHREAD_NETWORK_CHANNEL=15 +CONFIG_OPENTHREAD_NETWORK_PANID=0x1234 +CONFIG_OPENTHREAD_NETWORK_EXTPANID="dead00beef00cafe" +CONFIG_OPENTHREAD_NETWORK_MASTERKEY="00112233445566778899aabbccddeeff" +CONFIG_OPENTHREAD_NETWORK_PSKC="104810e2315100afd6bc9215a6bfac53" +# end of Thread Operational Dataset + +CONFIG_OPENTHREAD_XTAL_ACCURACY=130 +# CONFIG_OPENTHREAD_SPINEL_ONLY is not set +CONFIG_OPENTHREAD_RX_ON_WHEN_IDLE=y + +# +# Thread Address Query Config +# +# end of Thread Address Query Config +# end of OpenThread + +# +# Protocomm +# +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1=y +CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2=y +# end of Protocomm + +# +# PThreads +# +CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 +CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 +CONFIG_PTHREAD_STACK_MIN=768 +CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y +# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set +# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set +CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 +CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" +# end of PThreads + +# +# MMU Config +# +CONFIG_MMU_PAGE_SIZE_64KB=y +CONFIG_MMU_PAGE_MODE="64KB" +CONFIG_MMU_PAGE_SIZE=0x10000 +# end of MMU Config + +# +# 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 + +# +# 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 + +# +# 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 +CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y +# end of Auto-detect flash chips + +CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y +# end of SPI Flash driver + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_MAX_PARTITIONS=3 + +# +# SPIFFS Cache Configuration +# +CONFIG_SPIFFS_CACHE=y +CONFIG_SPIFFS_CACHE_WR=y +# CONFIG_SPIFFS_CACHE_STATS is not set +# end of SPIFFS Cache Configuration + +CONFIG_SPIFFS_PAGE_CHECK=y +CONFIG_SPIFFS_GC_MAX_RUNS=10 +# CONFIG_SPIFFS_GC_STATS is not set +CONFIG_SPIFFS_PAGE_SIZE=256 +CONFIG_SPIFFS_OBJ_NAME_LEN=32 +# CONFIG_SPIFFS_FOLLOW_SYMLINKS is not set +CONFIG_SPIFFS_USE_MAGIC=y +CONFIG_SPIFFS_USE_MAGIC_LENGTH=y +CONFIG_SPIFFS_META_LENGTH=4 +CONFIG_SPIFFS_USE_MTIME=y + +# +# Debug Configuration +# +# CONFIG_SPIFFS_DBG is not set +# CONFIG_SPIFFS_API_DBG is not set +# CONFIG_SPIFFS_GC_DBG is not set +# CONFIG_SPIFFS_CACHE_DBG is not set +# CONFIG_SPIFFS_CHECK_DBG is not set +# CONFIG_SPIFFS_TEST_VISUALISATION is not set +# end of Debug Configuration +# end of SPIFFS Configuration + +# +# TCP Transport +# + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y +CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set +# end of Websocket +# end of TCP Transport + +# +# Ultra Low Power (ULP) Co-processor +# +# CONFIG_ULP_COPROC_ENABLED is not set +# end of Ultra Low Power (ULP) Co-processor + +# +# Unity unit testing library +# +CONFIG_UNITY_ENABLE_FLOAT=y +CONFIG_UNITY_ENABLE_DOUBLE=y +# CONFIG_UNITY_ENABLE_64BIT is not set +# CONFIG_UNITY_ENABLE_COLOR is not set +CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER=y +# CONFIG_UNITY_ENABLE_FIXTURE is not set +# CONFIG_UNITY_ENABLE_BACKTRACE_ON_FAIL is not set +# end of Unity unit testing library + +# +# USB-OTG +# +CONFIG_USB_OTG_SUPPORTED=y +CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE=256 +CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED=y +# CONFIG_USB_HOST_HW_BUFFER_BIAS_IN is not set +# CONFIG_USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT is not set + +# +# Root Hub configuration +# +CONFIG_USB_HOST_DEBOUNCE_DELAY_MS=250 +CONFIG_USB_HOST_RESET_HOLD_MS=30 +CONFIG_USB_HOST_RESET_RECOVERY_MS=30 +CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS=10 +# end of Root Hub configuration +# end of USB-OTG + +# +# 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) +# 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_FORCE_ENCRYPTION 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 + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +# CONFIG_LV_COLOR_DEPTH_32 is not set +CONFIG_LV_COLOR_DEPTH_16=y +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=16 +# CONFIG_LV_COLOR_16_SWAP is not set +# CONFIG_LV_COLOR_SCREEN_TRANSP is not set +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +CONFIG_LV_MEM_CUSTOM=y +CONFIG_LV_MEM_CUSTOM_INCLUDE="stdlib.h" +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +CONFIG_LV_DISP_DEF_REFR_PERIOD=30 +CONFIG_LV_INDEV_DEF_READ_PERIOD=30 +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_RA6M3_G2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +CONFIG_LV_USE_PERF_MONITOR=y +# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_LEFT is not set +CONFIG_LV_PERF_MONITOR_ALIGN_TOP_MID=y +# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_RIGHT is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_MID is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_LEFT_MID is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_RIGHT_MID is not set +# CONFIG_LV_PERF_MONITOR_ALIGN_CENTER is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# CONFIG_LV_FONT_CUSTOM is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_FS_LITTLEFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_TINY_TTF is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration + +# +# ESP LCD TOUCH +# +CONFIG_ESP_LCD_TOUCH_MAX_POINTS=5 +CONFIG_ESP_LCD_TOUCH_MAX_BUTTONS=1 +# end of ESP LCD TOUCH +# end of Component config + +# CONFIG_IDF_EXPERIMENTAL_FEATURES is not set + +# Deprecated options for backward compatibility +# CONFIG_APP_BUILD_TYPE_ELF_RAM is not set +# CONFIG_NO_BLOBS is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_NONE is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_ERROR is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_WARN is not set +CONFIG_LOG_BOOTLOADER_LEVEL_INFO=y +# CONFIG_LOG_BOOTLOADER_LEVEL_DEBUG is not set +# CONFIG_LOG_BOOTLOADER_LEVEL_VERBOSE is not set +CONFIG_LOG_BOOTLOADER_LEVEL=3 +# CONFIG_APP_ROLLBACK_ENABLE is not set +# CONFIG_FLASH_ENCRYPTION_ENABLED is not set +# CONFIG_FLASHMODE_QIO is not set +# CONFIG_FLASHMODE_QOUT is not set +CONFIG_FLASHMODE_DIO=y +# CONFIG_FLASHMODE_DOUT is not set +CONFIG_MONITOR_BAUD=115200 +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set +# CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set +CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y +# CONFIG_OPTIMIZATION_ASSERTIONS_SILENT is not set +# CONFIG_OPTIMIZATION_ASSERTIONS_DISABLED is not set +CONFIG_OPTIMIZATION_ASSERTION_LEVEL=2 +# CONFIG_CXX_EXCEPTIONS is not set +CONFIG_STACK_CHECK_NONE=y +# CONFIG_STACK_CHECK_NORM is not set +# CONFIG_STACK_CHECK_STRONG is not set +# CONFIG_STACK_CHECK_ALL is not set +# CONFIG_WARN_WRITE_STRINGS is not set +# CONFIG_ESP32_APPTRACE_DEST_TRAX is not set +CONFIG_ESP32_APPTRACE_DEST_NONE=y +CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y +# CONFIG_MCPWM_ISR_IN_IRAM is not set +# CONFIG_EXTERNAL_COEX_ENABLE is not set +# CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set +# CONFIG_EVENT_LOOP_PROFILING is not set +CONFIG_POST_EVENTS_FROM_ISR=y +CONFIG_POST_EVENTS_FROM_IRAM_ISR=y +# CONFIG_OTA_ALLOW_HTTP is not set +CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY=2000 +CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC=y +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_CRYS is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_EXT_OSC is not set +# CONFIG_ESP32S3_RTC_CLK_SRC_INT_8MD256 is not set +CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES=1024 +CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE=y +# CONFIG_ESP32_PHY_INIT_DATA_IN_PARTITION is not set +CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER=20 +CONFIG_ESP32_PHY_MAX_TX_POWER=20 +# CONFIG_REDUCE_PHY_TX_POWER is not set +# CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set +CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_80 is not set +# CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160 is not set +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y +CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 +CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 +CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_CONSOLE_UART_DEFAULT=y +# CONFIG_CONSOLE_UART_CUSTOM is not set +# CONFIG_CONSOLE_UART_NONE is not set +# CONFIG_ESP_CONSOLE_UART_NONE is not set +CONFIG_CONSOLE_UART=y +CONFIG_CONSOLE_UART_NUM=0 +CONFIG_CONSOLE_UART_BAUDRATE=115200 +CONFIG_INT_WDT=y +CONFIG_INT_WDT_TIMEOUT_MS=300 +CONFIG_INT_WDT_CHECK_CPU1=y +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_TASK_WDT_CHECK_IDLE_TASK_CPU1=y +# CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set +CONFIG_ESP32S3_DEBUG_OCDAWARE=y +CONFIG_BROWNOUT_DET=y +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_ESP32S3_BROWNOUT_DET=y +CONFIG_BROWNOUT_DET_LVL_SEL_7=y +CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7=y +# CONFIG_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_6 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_5 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_4 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_3 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_2 is not set +# CONFIG_BROWNOUT_DET_LVL_SEL_1 is not set +# CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_1 is not set +CONFIG_BROWNOUT_DET_LVL=7 +CONFIG_ESP32S3_BROWNOUT_DET_LVL=7 +CONFIG_IPC_TASK_STACK_SIZE=1280 +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=y +CONFIG_ESP32_WIFI_TX_BUFFER_TYPE=0 +CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=16 +CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM=32 +# CONFIG_ESP32_WIFI_CSI_ENABLED is not set +CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y +CONFIG_ESP32_WIFI_TX_BA_WIN=6 +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +CONFIG_ESP32_WIFI_RX_BA_WIN=6 +# CONFIG_ESP32_WIFI_AMSDU_TX_ENABLED is not set +CONFIG_ESP32_WIFI_NVS_ENABLED=y +CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y +# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set +CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 +CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 +CONFIG_ESP32_WIFI_IRAM_OPT=y +CONFIG_ESP32_WIFI_RX_IRAM_OPT=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE=y +CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA=y +CONFIG_WPA_MBEDTLS_CRYPTO=y +CONFIG_WPA_MBEDTLS_TLS_CLIENT=y +# CONFIG_WPA_WAPI_PSK is not set +# CONFIG_WPA_SUITE_B_192 is not set +# CONFIG_WPA_11KV_SUPPORT is not set +# CONFIG_WPA_MBO_SUPPORT is not set +# CONFIG_WPA_DPP_SUPPORT is not set +# CONFIG_WPA_11R_SUPPORT is not set +# CONFIG_WPA_WPS_SOFTAP_REGISTRAR is not set +# CONFIG_WPA_WPS_STRICT is not set +# CONFIG_WPA_DEBUG_PRINT is not set +# CONFIG_WPA_TESTING_OPTIONS is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_FLASH is not set +# CONFIG_ESP32_ENABLE_COREDUMP_TO_UART is not set +CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE=y +CONFIG_TIMER_TASK_PRIORITY=1 +CONFIG_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_TIMER_QUEUE_LENGTH=10 +# CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK is not set +# CONFIG_HAL_ASSERTION_SILIENT is not set +# CONFIG_L2_TO_L3_COPY is not set +CONFIG_ESP_GRATUITOUS_ARP=y +CONFIG_GARP_TMR_INTERVAL=60 +CONFIG_TCPIP_RECVMBOX_SIZE=32 +CONFIG_TCP_MAXRTX=12 +CONFIG_TCP_SYNMAXRTX=12 +CONFIG_TCP_MSS=1440 +CONFIG_TCP_MSL=60000 +CONFIG_TCP_SND_BUF_DEFAULT=5744 +CONFIG_TCP_WND_DEFAULT=5744 +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_CPU1 is not set +CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF +# CONFIG_PPP_SUPPORT is not set +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_SYSTIMER=y +CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y +# CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_SYSTIMER is not set +# CONFIG_ESP32S3_TIME_SYSCALL_USE_FRC1 is not set +# CONFIG_ESP32S3_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_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set +# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set +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 +# MicroPython on ESP32, ESP IDF configuration +# The following options override the defaults + +CONFIG_IDF_FIRMWARE_CHIP_ID=0x0000 + +# Compiler options: use -O2 and disable assertions to improve performance +CONFIG_COMPILER_OPTIMIZATION_PERF=y +CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE=y + +# Application manager +CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y +CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y + +# Bootloader config +CONFIG_BOOTLOADER_LOG_LEVEL_WARN=y +CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP=y +CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y + +# Change default log level to "ERROR" (instead of "INFO") +CONFIG_LOG_DEFAULT_LEVEL_ERROR=y + +# Set the maximum included log level higher than the default, +# so esp.osdebug() can enable more logging at runtime. +# +# To increase the max log verbosity to Debug or Verbose instead, comment +# CONFIG_LOG_MAXIMUM_LEVEL_INFO=y and uncomment one of the other settings. +# +# If not needed, the next line can be commented entirely to save binary size. +CONFIG_LOG_MAXIMUM_LEVEL_INFO=y +#CONFIG_LOG_MAXIMUM_LEVEL_DEBUG=y +#CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE=y + +# Main XTAL Config +# Only on: ESP32 +CONFIG_XTAL_FREQ_AUTO=y + +# ESP System Settings +# Only on: ESP32, ESP32S3 +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n +CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=n + +# Power Management +CONFIG_PM_ENABLE=y + +# Memory protection +# This is required to allow allocating IRAM +CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=n + +# FreeRTOS +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2 +CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y +CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP=y + +# UDP +CONFIG_LWIP_PPP_SUPPORT=y +CONFIG_LWIP_PPP_PAP_SUPPORT=y +CONFIG_LWIP_PPP_CHAP_SUPPORT=y + +# SSL +# Use 4kiB output buffer instead of default 16kiB +CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=y +CONFIG_MBEDTLS_HAVE_TIME_DATE=y +CONFIG_MBEDTLS_PLATFORM_TIME_ALT=y +CONFIG_MBEDTLS_HAVE_TIME=y + +# Disable ALPN support as it's not implemented in MicroPython +CONFIG_MBEDTLS_SSL_ALPN=n + +# Disable slow or unused EC curves +CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED=n +CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED=n +CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED=n +CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=n + +# Disable certificate bundle as it's not implemented in MicroPython +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE=n +CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=n + +# Allow mbedTLS to allocate from PSRAM or internal memory +# +# (The ESP-IDF default is internal-only, partly for physical security to prevent +# possible information leakage from unencrypted PSRAM contents on the original +# ESP32 - no PSRAM encryption on that chip. MicroPython doesn't support flash +# encryption and is already storing the Python heap in PSRAM so this isn't a +# significant factor in overall physical security.) +CONFIG_MBEDTLS_DEFAULT_MEM_ALLOC=y + +# ULP coprocessor support +# Only on: ESP32, ESP32S2, ESP32S3 +CONFIG_ULP_COPROC_ENABLED=y +CONFIG_ULP_COPROC_TYPE_FSM=y +CONFIG_ULP_COPROC_RESERVE_MEM=2040 + +# For cmake build +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-4MiB.csv" + +# To reduce iRAM usage +CONFIG_ESP32_WIFI_IRAM_OPT=n +CONFIG_ESP32_WIFI_RX_IRAM_OPT=n + +# Legacy ADC Calibration Configuration +# Only on: ESP32 +CONFIG_ADC_CAL_EFUSE_TP_ENABLE=y +CONFIG_ADC_CAL_EFUSE_VREF_ENABLE=y +CONFIG_ADC_CAL_LUT_ENABLE=y + +# UART Configuration +CONFIG_UART_ISR_IN_IRAM=y + +# IDF 5 deprecated +CONFIG_ADC_SUPPRESS_DEPRECATE_WARN=y +CONFIG_RMT_SUPPRESS_DEPRECATE_WARN=y +CONFIG_I2S_SUPPRESS_DEPRECATE_WARN=y + +CONFIG_ETH_USE_SPI_ETHERNET=y +CONFIG_ETH_SPI_ETHERNET_W5500=y +CONFIG_ETH_SPI_ETHERNET_KSZ8851SNL=y +CONFIG_ETH_SPI_ETHERNET_DM9051=y +CONFIG_USB_OTG_SUPPORTED=y +CONFIG_TINYUSB_CDC_ENABLED=y +CONFIG_TINYUSB_CDC_RX_BUFSIZE=256 +CONFIG_TINYUSB_CDC_TX_BUFSIZE=256 +CONFIG_BT_NIMBLE_LOG_LEVEL_ERROR=y +CONFIG_BT_ENABLED=y +CONFIG_BT_NIMBLE_ENABLED=y +CONFIG_BT_CONTROLLER_ENABLED=y + +CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="MPY ESP32" + +CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4 + +# Put NimBLE on core 1, and for synchronisation +# with the ringbuffer and scheduler MP needs to be on the same core. +# MP on core 1 prevents interference with WiFi for time sensitive operations. +# Only on: ESP32, ESP32S2, ESP32S3 +CONFIG_BT_NIMBLE_PINNED_TO_CORE_0=n +CONFIG_BT_NIMBLE_PINNED_TO_CORE_1=y +CONFIG_BT_NIMBLE_PINNED_TO_CORE=1 + +# Increase NimBLE task stack size from the default, because Python code +# (BLE IRQ handlers) will most likely run on this task. +CONFIG_BT_NIMBLE_TASK_STACK_SIZE=6144 +# MicroPython on ESP32-S2 and ESP32-PAD1_subscript_3, ESP IDF configuration with SPIRAM support +CONFIG_SPIRAM_MODE_QUAD=y +CONFIG_SPIRAM_TYPE_AUTO=y +CONFIG_SPIRAM_CLK_IO=30 +CONFIG_SPIRAM_CS_IO=26 +CONFIG_SPIRAM_SPEED_80M=y +CONFIG_SPIRAM=y +CONFIG_SPIRAM_BOOT_INIT=y +CONFIG_SPIRAM_IGNORE_NOTFOUND=y +CONFIG_SPIRAM_USE_MALLOC=y + +# This is the threshold for preferring small allocations from internal memory +# first, before failing over to PSRAM. +CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=8192 +CONFIG_ESPTOOLPY_FLASHMODE_QIO=y +CONFIG_ESPTOOLPY_FLASHFREQ_80M=y +CONFIG_ESPTOOLPY_AFTER_NORESET=y + +CONFIG_ESPTOOLPY_FLASHSIZE_4MB= +CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y +CONFIG_ESPTOOLPY_FLASHSIZE_16MB= +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv" diff --git a/docker/Dockerfile-IDF51.DevEnvironment b/docker/Dockerfile-IDF51.DevEnvironment new file mode 100644 index 0000000..5f75e5c --- /dev/null +++ b/docker/Dockerfile-IDF51.DevEnvironment @@ -0,0 +1,68 @@ +#FROM ubuntu:22.04 +#FROM ubuntu:focal +FROM espressif/idf:v5.1.3 + +ENV DEBIAN_FRONTEND=noninteractive + +#ENV LC_ALL en_US.UTF-8 +#ENV LANG en_US.UTF-8 +#ENV LANGUAGE en_US.UTF-8 + +ARG TZ_ARG=UTC +ENV TZ=$TZ_ARG +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt -yq update +RUN apt -yq upgrade +RUN apt -yq clean + +RUN apt -y update && \ + apt -y upgrade && \ + apt -y install \ + build-essential \ + python3 pip \ + emacs nano curl gnupg \ + cmake git zip \ + python3-libusb1 \ + gdb gdbserver \ + locales lsb-release \ + sudo gosu + +RUN pip3 install mpremote + +RUN locale-gen en_US en_US.UTF-8 +RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 + +RUN pip3 install -U \ + argcomplete \ + flake8 \ + flake8-blind-except \ + flake8-builtins \ + flake8-class-newline \ + flake8-comprehensions \ + flake8-deprecated \ + flake8-docstrings \ + flake8-import-order \ + flake8-quotes \ + pytest-repeat \ + pytest-rerunfailures \ + catkin_pkg \ + lark-parser empy \ + colcon-common-extensions \ + importlib-resources + +COPY ./install_micro_ros_deps_script.sh /install_micro_ros_deps_script.sh + +RUN mkdir -p /tmp/install_micro_ros_deps_script && mv /install_micro_ros_deps_script.sh /tmp/install_micro_ros_deps_script/ && \ + IDF_EXPORT_QUIET=1 /tmp/install_micro_ros_deps_script/install_micro_ros_deps_script.sh && \ + rm -rf /var/lib/apt/lists/* + +COPY ./pip-requirments.txt /pip-requirments.txt +RUN pip3 install -r pip-requirments.txt + +RUN echo ". /opt/esp/idf/export.sh " >> ~/.bashrc +COPY ./.gitconfig /root/.gitconfig + +WORKDIR /opt/rosmicropy +#RUN git submodule init +#RUN git submodule update --recursive diff --git a/docker/Dockerfile-IDF52.DevEnvironment b/docker/Dockerfile-IDF52.DevEnvironment new file mode 100644 index 0000000..4985ea8 --- /dev/null +++ b/docker/Dockerfile-IDF52.DevEnvironment @@ -0,0 +1,68 @@ +#FROM ubuntu:22.04 +#FROM ubuntu:focal +FROM espressif/idf:release-v5.2 + +ENV DEBIAN_FRONTEND=noninteractive + +#ENV LC_ALL en_US.UTF-8 +#ENV LANG en_US.UTF-8 +#ENV LANGUAGE en_US.UTF-8 + +ARG TZ_ARG=UTC +ENV TZ=$TZ_ARG +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt -yq update +RUN apt -yq upgrade +RUN apt -yq clean + +RUN apt -y update && \ + apt -y upgrade && \ + apt -y install \ + build-essential \ + python3 pip \ + emacs nano curl gnupg \ + cmake git zip \ + python3-libusb1 \ + gdb gdbserver \ + locales lsb-release \ + sudo gosu + +RUN pip3 install mpremote + +RUN locale-gen en_US en_US.UTF-8 +RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 + +RUN pip3 install -U \ + argcomplete \ + flake8 \ + flake8-blind-except \ + flake8-builtins \ + flake8-class-newline \ + flake8-comprehensions \ + flake8-deprecated \ + flake8-docstrings \ + flake8-import-order \ + flake8-quotes \ + pytest-repeat \ + pytest-rerunfailures \ + catkin_pkg \ + lark-parser empy \ + colcon-common-extensions \ + importlib-resources + +COPY ./install_micro_ros_deps_script.sh /install_micro_ros_deps_script.sh + +RUN mkdir -p /tmp/install_micro_ros_deps_script && mv /install_micro_ros_deps_script.sh /tmp/install_micro_ros_deps_script/ && \ + IDF_EXPORT_QUIET=1 /tmp/install_micro_ros_deps_script/install_micro_ros_deps_script.sh && \ + rm -rf /var/lib/apt/lists/* + +COPY ./pip-requirments.txt /pip-requirments.txt +RUN pip3 install -r pip-requirments.txt + +RUN echo ". /opt/esp/idf/export.sh " >> ~/.bashrc +COPY ./.gitconfig /root/.gitconfig + +WORKDIR /opt/rosmicropy +#RUN git submodule init +#RUN git submodule update --recursive diff --git a/docs/images/SwitchBackv2.png b/docs/images/SwitchBackv2.png new file mode 100644 index 0000000..a41919a Binary files /dev/null and b/docs/images/SwitchBackv2.png differ diff --git a/docs/images/SwitchFrontv2.png b/docs/images/SwitchFrontv2.png new file mode 100644 index 0000000..bf6d8cd Binary files /dev/null and b/docs/images/SwitchFrontv2.png differ diff --git a/extra_packages/ROSMicroPy/CMakeLists.txt b/extra_packages/ROSMicroPy/CMakeLists.txt index 20c24bf..fc16989 100644 --- a/extra_packages/ROSMicroPy/CMakeLists.txt +++ b/extra_packages/ROSMicroPy/CMakeLists.txt @@ -1,19 +1,24 @@ -message(DEBUG "Begining of ROSMicroPy CMake") - -set(MICROPY_ARCH esp32) - -get_filename_component(ROS_MICROPY_DIR ${PROJECT_DIR}/../../extra_packages/ROSMicroPy ABSOLUTE) -get_filename_component(MICROROS_INC_DIR ${PROJECT_DIR}/../../extra_packages/libmicroros/include ABSOLUTE) +message("Begining of ROSMicroPy CMake") +message ("CMake Source Dir: ${CMAKE_SOURCE_DIR}") +message ("Micropython Dir: ${MICROPY_DIR}") +message ("ROS MicroPy Dir: ${ROS_MICROPY_DIR}") +message ("MicroPy Board Dir: ${MICROPY_BOARD_DIR}") +message ("MicroPy Arch Dir: ${MICROPY_ARCH_DIR}") +#set(IDF_ARCH esp32) +#get_filename_component(MICROPY_DIR ${PROJECT_DIR}/../../libs/micropython ABSOLUTE) +#get_filename_component(MICROPY_ARCH_DIR ${MICROPY_DIR}/ports/${IDF_ARCH} ABSOLUTE) +get_filename_component(_ROS_MICROPY_DIR ${PROJECT_DIR}/../../extra_packages/ROSMicroPy ABSOLUTE) +set (ROS_MICROPY_DIR ${_ROS_MICROPY_DIR} ) -get_filename_component(MICROPY_UROS_MODULE_DIR ${ROS_MICROPY_DIR}/mp_uros_modules ABSOLUTE) -get_filename_component(MICROPY_UROS_TYPE_SUPPORT_DIR ${ROS_MICROPY_DIR}/mp_uros_type_support ABSOLUTE) +get_filename_component(_MICROROS_INC_DIR ${PROJECT_DIR}/../../extra_packages/libmicroros/include ABSOLUTE) +set (MICROROS_INC_DIR ${_MICROROS_INC_DIR} ) -get_filename_component(MICROPY_DIR ${PROJECT_DIR}/../../libs/micropython ABSOLUTE) -message("MicroPy Dir: ${MICROPY_DIR}") +get_filename_component(_MICROPY_UROS_MODULE_DIR ${ROS_MICROPY_DIR}/mp_uros_modules ABSOLUTE) +set (MICROPY_UROS_MODULE_DIR ${_MICROPY_UROS_MODULE_DIR} ) -get_filename_component(MICROPY_ARCH_DIR ${MICROPY_DIR}/ports/${MICROPY_ARCH} ABSOLUTE) -message("MicroPy Arch Dir: ${MICROPY_ARCH_DIR}") +get_filename_component(_MICROPY_UROS_TYPE_SUPPORT_DIR ${ROS_MICROPY_DIR}/mp_uros_type_support ABSOLUTE) +set (MICROPY_UROS_TYPE_SUPPORT_DIR ${_MICROPY_UROS_TYPE_SUPPORT_DIR} ) # Set the board if it's not already set. if(NOT MICROPY_BOARD) @@ -25,71 +30,40 @@ if(NOT MICROPY_BOARD_DIR) set(MICROPY_BOARD_DIR ${MICROPY_ARCH_DIR}/boards/${MICROPY_BOARD}) endif() +message ("\r\nProject Dir: ${PROJECT_DIR}") +message ("CMake Source Dir: ${CMAKE_SOURCE_DIR}") +message ("Micropython Dir: ${MICROPY_DIR}") +message ("ROS MicroPy Dir: ${ROS_MICROPY_DIR}") +message ("MicroPy Board Dir: ${MICROPY_BOARD_DIR}") +message ("MicroPy Arch Dir: ${MICROPY_ARCH_DIR}") -#get_filename_component(MICROPY_BOARD_DIR $(MICROPY_DIR)/ports/esp32 - -# Set the board if it's not already set. -if(NOT MICROPY_BOARD) - set(MICROPY_BOARD ESP32_GENERIC) -endif() -message("Board: ${MICROPY_DIR}/ports/$IDF_TARGET/boards/${MICROPY_BOARD} ") -# Set the board directory and check that it exists. -if(NOT MICROPY_BOARD_DIR) - set(MICROPY_BOARD_DIR ${MICROPY_DIR}/ports/$IDF_TARGET/boards/${MICROPY_BOARD}) +if(NOT EXISTS ${MICROPY_BOARD_DIR}/mpconfigboard.cmake) + message(FATAL_ERROR "Invalid MICROPY_BOARD specified: ${MICROPY_BOARD}") endif() -set(ROS_MICROPY_MODULES - # - # Bind Python to ROS - ${MICROPY_UROS_MODULE_DIR}/uros_mesg_func.c - ${MICROPY_UROS_MODULE_DIR}/uros_base_func.c +# Define the output sdkconfig so it goes in the build directory. +#set(SDKCONFIG ${CMAKE_BINARY_DIR}/sdkconfig) - ${MICROPY_UROS_MODULE_DIR}/mp_uros_thread.c - ${MICROPY_UROS_MODULE_DIR}/uros_mp_reg.c - - ${MICROPY_UROS_TYPE_SUPPORT_DIR}/mp_uros_type_support.c - ${MICROPY_UROS_TYPE_SUPPORT_DIR}/mp_uros_dataTypeParser.c - ${MICROPY_UROS_TYPE_SUPPORT_DIR}/mp_uros_type_support.c - -) - -list(APPEND MICROPY_SOURCE_QSTR - ${ROS_MICROPY_MODULES} - -) - -list(APPEND MICROPY_SOURCE_EXTMOD - ${MICROPY_UROS_MODULES} -) - - - -list(APPEND ROS_MICROPY_INC_DIR - ${MICROROS_INC_DIR}/rcl_action - ${MICROROS_INC_DIR}/action_msgs - ${MICROROS_INC_DIR}/unique_identifier_msgs - ${MICROROS_INC_DIR}/builtin_interfaces - ${MICROROS_INC_DIR} - ${MICROROS_INC_DIR}/rcl - ${MICROROS_INC_DIR}/rcutils - ${MICROROS_INC_DIR}/rmw - ${MICROROS_INC_DIR}/rosidl_runtime_c - ${MICROROS_INC_DIR}/rosidl_typesupport_interface - ${ROS_MICROPY_DIR}/mp_uros_modules - ${ROS_MICROPY_DIR}/mp_uros_type_support - - -) - -list(APPEND IDF_COMPONENTS libmicroros ROSMicroPy) +# Save the manifest file set from the cmake command line. +set(MICROPY_USER_FROZEN_MANIFEST ${MICROPY_FROZEN_MANIFEST}) +# Include board config; this is expected to set (among other options): +# - SDKCONFIG_DEFAULTS +# - IDF_TARGET +include(${MICROPY_BOARD_DIR}/mpconfigboard.cmake) +# Set the frozen manifest file. Note if MICROPY_FROZEN_MANIFEST is set from the cmake +# command line, then it will override the default and any manifest set by the board. +if (MICROPY_USER_FROZEN_MANIFEST) + set(MICROPY_FROZEN_MANIFEST ${MICROPY_USER_FROZEN_MANIFEST}) +elseif (NOT MICROPY_FROZEN_MANIFEST) + set(MICROPY_FROZEN_MANIFEST ${MICROPY_ARCH_DIR}/boards/manifest.py) +endif() -message ("Project Dir: ${PROJECT_DIR}") -message ("CMake Source Dir: ${CMAKE_SOURCE_DIR}") -message ("Micropython Dir: ${MICROPY_DIR}") -message ("ROS MicroPy Dir: ${ROS_MICROPY_DIR}") +include(${ROS_MICROPY_DIR}/main_${IDF_TARGET}/CMakeLists.txt) +include(${ROS_MICROPY_DIR}/esp32_common.cmake) -include( ${ROS_MICROPY_DIR}/micropython.cmake.txt ) +# Define the project. +#project(micropython) diff --git a/extra_packages/ROSMicroPy/cmake/esp32_common.cmake b/extra_packages/ROSMicroPy/esp32_common.cmake similarity index 79% rename from extra_packages/ROSMicroPy/cmake/esp32_common.cmake rename to extra_packages/ROSMicroPy/esp32_common.cmake index 1346aca..e19a8e6 100644 --- a/extra_packages/ROSMicroPy/cmake/esp32_common.cmake +++ b/extra_packages/ROSMicroPy/esp32_common.cmake @@ -1,6 +1,14 @@ # Set location of base MicroPython directory. +message ("Micropython Common CMake") +message ("Project Dir: ${PROJECT_DIR}") +message ("CMake Source Dir: ${CMAKE_SOURCE_DIR}") +message ("Micropython Dir: ${MICROPY_DIR}") +message ("ROS MicroPy Dir: ${ROS_MICROPY_DIR}") +message ("MicroPy Board Dir: ${MICROPY_BOARD_DIR}") + if(NOT MICROPY_DIR) - get_filename_component(MICROPY_DIR ${CMAKE_CURRENT_LIST_DIR}/../.. ABSOLUTE) + get_filename_component(_MICROPY_DIR ${CMAKE_CURRENT_LIST_DIR}/../.. ABSOLUTE) + set (MICROPY_DIR ${_MICROPY_DIR} PARENT_SCOPE) endif() # Set location of the ESP32 port directory. @@ -8,6 +16,43 @@ if(NOT MICROPY_PORT_DIR) get_filename_component(MICROPY_PORT_DIR ${MICROPY_DIR}/ports/esp32 ABSOLUTE) endif() + +set(ROS_MICROPY_MODULES + # + # Bind Python to ROS + ${MICROPY_UROS_MODULE_DIR}/uros_mesg_func.c + ${MICROPY_UROS_MODULE_DIR}/uros_base_func.c + + ${MICROPY_UROS_MODULE_DIR}/mp_uros_thread.c + ${MICROPY_UROS_MODULE_DIR}/uros_mp_reg.c + + ${MICROPY_UROS_TYPE_SUPPORT_DIR}/mp_uros_type_support.c + ${MICROPY_UROS_TYPE_SUPPORT_DIR}/mp_uros_dataTypeParser.c + ${MICROPY_UROS_TYPE_SUPPORT_DIR}/mp_uros_type_support.c + +) + + +set(ROS_MICROPY_INC_DIR + ${MICROROS_INC_DIR}/rcl_action + ${MICROROS_INC_DIR}/action_msgs + ${MICROROS_INC_DIR}/unique_identifier_msgs + ${MICROROS_INC_DIR}/builtin_interfaces + ${MICROROS_INC_DIR} + ${MICROROS_INC_DIR}/rcl + ${MICROROS_INC_DIR}/rcutils + ${MICROROS_INC_DIR}/rmw + ${MICROROS_INC_DIR}/rosidl_runtime_c + ${MICROROS_INC_DIR}/rosidl_typesupport_interface + ${ROS_MICROPY_DIR}/mp_uros_modules + ${ROS_MICROPY_DIR}/mp_uros_type_support +) + +message("\r\nROS_MICROPY_INC_DIR: [${ROS_MICROPY_INC_DIR}]") +message("\r\nROS_MICROPY_MODULES: [${ROS_MICROPY_MODULES}]") + +list(APPEND IDF_COMPONENTS ) + # Include core source components. include(${MICROPY_DIR}/py/py.cmake) @@ -135,9 +180,12 @@ list(APPEND IDF_COMPONENTS spi_flash ulp vfs + libmicroros mdns ) -message ("MICROPY_SOURCE_EXTMOD ${ROS_MICROPY_MODULES}") +message ("\r\nROS_MICROPY_MODULES ${ROS_MICROPY_MODULES}") +message ("\r\nROS_MICROPY_INC_DIR ${ROS_MICROPY_INC_DIR}") + # Register the main IDF component. idf_component_register( SRCS diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32s3/CMakeLists.txt b/extra_packages/ROSMicroPy/main_esp32/CMakeLists.txt similarity index 86% rename from extra_packages/ROSMicroPy/cmake/main_esp32s3/CMakeLists.txt rename to extra_packages/ROSMicroPy/main_esp32/CMakeLists.txt index 40188ab..ff16e39 100644 --- a/extra_packages/ROSMicroPy/cmake/main_esp32s3/CMakeLists.txt +++ b/extra_packages/ROSMicroPy/main_esp32/CMakeLists.txt @@ -8,4 +8,5 @@ if(NOT MICROPY_PORT_DIR) get_filename_component(MICROPY_PORT_DIR ${MICROPY_DIR}/ports/esp32 ABSOLUTE) endif() -include(${MICROPY_PORT_DIR}/esp32_common.cmake) + + diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32/idf_component.yml b/extra_packages/ROSMicroPy/main_esp32/idf_component.yml similarity index 100% rename from extra_packages/ROSMicroPy/cmake/main_esp32/idf_component.yml rename to extra_packages/ROSMicroPy/main_esp32/idf_component.yml diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32c3/CMakeLists.txt b/extra_packages/ROSMicroPy/main_esp32c3/CMakeLists.txt similarity index 89% rename from extra_packages/ROSMicroPy/cmake/main_esp32c3/CMakeLists.txt rename to extra_packages/ROSMicroPy/main_esp32c3/CMakeLists.txt index c9f1e5b..f08f2aa 100644 --- a/extra_packages/ROSMicroPy/cmake/main_esp32c3/CMakeLists.txt +++ b/extra_packages/ROSMicroPy/main_esp32c3/CMakeLists.txt @@ -10,4 +10,4 @@ endif() list(APPEND MICROPY_SOURCE_LIB ${MICROPY_DIR}/shared/runtime/gchelper_generic.c) -include(${MICROPY_PORT_DIR}/esp32_common.cmake) +include( ${ROS_MICROPY_DIR}/esp32_common.cmake) diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32c3/idf_component.yml b/extra_packages/ROSMicroPy/main_esp32c3/idf_component.yml similarity index 100% rename from extra_packages/ROSMicroPy/cmake/main_esp32c3/idf_component.yml rename to extra_packages/ROSMicroPy/main_esp32c3/idf_component.yml diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32s2/CMakeLists.txt b/extra_packages/ROSMicroPy/main_esp32s2/CMakeLists.txt similarity index 100% rename from extra_packages/ROSMicroPy/cmake/main_esp32s2/CMakeLists.txt rename to extra_packages/ROSMicroPy/main_esp32s2/CMakeLists.txt diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32s2/idf_component.yml b/extra_packages/ROSMicroPy/main_esp32s2/idf_component.yml similarity index 100% rename from extra_packages/ROSMicroPy/cmake/main_esp32s2/idf_component.yml rename to extra_packages/ROSMicroPy/main_esp32s2/idf_component.yml diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32/CMakeLists.txt b/extra_packages/ROSMicroPy/main_esp32s3/CMakeLists.txt similarity index 78% rename from extra_packages/ROSMicroPy/cmake/main_esp32/CMakeLists.txt rename to extra_packages/ROSMicroPy/main_esp32s3/CMakeLists.txt index 0b463c7..ec9ff16 100644 --- a/extra_packages/ROSMicroPy/cmake/main_esp32/CMakeLists.txt +++ b/extra_packages/ROSMicroPy/main_esp32s3/CMakeLists.txt @@ -7,5 +7,4 @@ endif() if(NOT MICROPY_PORT_DIR) get_filename_component(MICROPY_PORT_DIR ${MICROPY_DIR}/ports/esp32 ABSOLUTE) endif() -message("Including common dir") -include(${ROS_MICROPY_DIR}/cmake/esp32_common.cmake) + diff --git a/extra_packages/ROSMicroPy/cmake/main_esp32s3/idf_component.yml b/extra_packages/ROSMicroPy/main_esp32s3/idf_component.yml similarity index 100% rename from extra_packages/ROSMicroPy/cmake/main_esp32s3/idf_component.yml rename to extra_packages/ROSMicroPy/main_esp32s3/idf_component.yml diff --git a/startDevEnv b/startDevEnv index 6828834..7236113 100755 --- a/startDevEnv +++ b/startDevEnv @@ -1,9 +1,9 @@ clear -NODENAME=rosmicropy.devenv +NODENAME=rosmicropy.devenv.idf5.1.3 -DOCKER_DEF=Dockerfile.DevEnvironment -IMAGE_NAME=rosmicropy.devenv.img +DOCKER_DEF=Dockerfile-IDF51.DevEnvironment +IMAGE_NAME=rosmicropy.devenv-idf5.1.3.img echo $1 if [ "$1" == "clean" ]; then diff --git a/startDevEnv.old b/startDevEnv.old new file mode 100755 index 0000000..6828834 --- /dev/null +++ b/startDevEnv.old @@ -0,0 +1,49 @@ +clear + +NODENAME=rosmicropy.devenv + +DOCKER_DEF=Dockerfile.DevEnvironment +IMAGE_NAME=rosmicropy.devenv.img + +echo $1 +if [ "$1" == "clean" ]; then + echo "Making a clean build" + echo "Stopping Node " $NODENAME + docker stop $NODENAME + echo "Removing Node " $NODENAME + docker rm $NODENAME + echo "Removing Image " $IMAGE_NAME + docker image rm $IMAGE_NAME +fi + +IMAGE_EXISTS=$(docker image list | grep $IMAGE_NAME ) +echo "Exists " $IMAGE_EXISTS +pwd +if [ -z "$IMAGE_EXISTS" ]; then + cd docker + pwd + echo "Building " $IMAGE_NAME " image" + echo docker build -t $IMAGE_NAME -f $DOCKER_DEF . + docker build -t $IMAGE_NAME -f $DOCKER_DEF . + cd - +fi + +NODE_EXISTS=$( docker ps -a | grep $NODENAME ) +echo "Node Exists " $NODE_EXISTS +if [ -n "$NODE_EXISTS" ]; then + + docker stop $NODENAME + docker rm $NODENAME +fi + +docker run -it \ + --name $NODENAME \ + -h $NODENAME \ + --privileged \ + --net=host \ + -v `pwd`:/opt/rosmicropy \ + -v /dev:/dev \ + $IMAGE_NAME bash + + +