From d951642b5b73d5dc1120e3a479611c7120e2cf9e Mon Sep 17 00:00:00 2001 From: chendejin Date: Tue, 6 Feb 2024 16:14:02 +0800 Subject: [PATCH] add esp_matter component based on esp-matter sdk and connectedhomeip --- .github/workflows/upload_component.yml | 18 + .gitlab-ci.yml | 28 + CMakeLists.txt | 454 ++++++++++++ Kconfig | 5 + .../ESP32_custom/external_platform.cmake | 80 ++ generate-include-files.cmake | 693 ++++++++++++++++++ idf_component.yml | 94 +++ 7 files changed, 1372 insertions(+) create mode 100644 .github/workflows/upload_component.yml create mode 100644 CMakeLists.txt create mode 100644 Kconfig create mode 100644 examples/common/blemesh_platform/platform/ESP32_custom/external_platform.cmake create mode 100644 generate-include-files.cmake create mode 100644 idf_component.yml diff --git a/.github/workflows/upload_component.yml b/.github/workflows/upload_component.yml new file mode 100644 index 000000000..83f7c481c --- /dev/null +++ b/.github/workflows/upload_component.yml @@ -0,0 +1,18 @@ +name: Push components to Espressif Component Service + +on: + push: + branches: + - main + +jobs: + upload_components: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Upload components to component service + uses: espressif/upload-components-ci-action@v1 + with: + name: "esp_matter" + namespace: "espressif" + api_token: ${{ secrets.IDF_COMPONENT_API_TOKEN }} \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 78efe9c59..d5b574fe9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -154,6 +154,25 @@ variables: REPOS_PATH: "$CI_PROJECT_DIR/repos" IDF_CCACHE_ENABLE: 1 +.build_managed_component_light_example: + stage: build + image: gitlab.espressif.cn:5050/app-frameworks/esp-matter/build-env:latest + tags: + - build + - matter_cache + before_script: + - *add_gitlab_ssh_key + - *get_build_caches + - *chip_submodule_update + - *setup_idf + - cd ${ESP_MATTER_PATH} + - mkdir -p ${REPOS_PATH} + - *update_build_caches + variables: + IDF_VERSION: "v5.1.2" + REPOS_PATH: "$CI_PROJECT_DIR/repos" + IDF_CCACHE_ENABLE: 1 + build_esp_matter_examples_pytest_C6_idf_v5_1: extends: - .build_examples_template @@ -305,6 +324,15 @@ build_upstream_examples: script: - *build_matter_examples +build_managed_component_light: + extends: + - .build_managed_component_light_example + when: manual + script: + - cd ${ESP_MATTER_PATH}/examples/managed_component_light + - idf.py set-target esp32c3 + - idf.py build + build_docs: stage: build image: $CI_DOCKER_REGISTRY/esp-idf-doc-env-v5.1:1-1 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..c3315f962 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,454 @@ +if(NOT MATTER_SDK_PATH) + get_filename_component(MATTER_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/connectedhomeip/connectedhomeip/ REALPATH) +endif() + +get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_LIST_DIR}/connectedhomeip/connectedhomeip/ REALPATH) +include(${CMAKE_CURRENT_LIST_DIR}/connectedhomeip/connectedhomeip/config/esp32/components/chip/ota-image.cmake) + +set(ESP_COMPONENTS_PATH ${CMAKE_CURRENT_SOURCE_DIR}/components) + +set(REQUIRE_COMPONENTS esp_eth freertos lwip bt mbedtls fatfs app_update console openthread nvs_flash spi_flash + esp_secure_cert_mgr esp_system esp_timer json_parser spiffs esp_http_client json_generator esp_netif vfs json) + +if(NOT "${IDF_TARGET}" STREQUAL "esp32h2") + list(APPEND REQUIRE_COMPONENTS mdns) +endif() + +function(collect_exclude_files PATH INCLUDE_FILES EXCLUDE_LIST) + file(GLOB ALL_FILES ${PATH}/*.cpp ${PATH}/*.c) + set(EXCLUDE_FILES "") + foreach(FILE ${ALL_FILES}) + list(FIND INCLUDE_FILES ${FILE} EXCLUDE_INDEX) + if(EXCLUDE_INDEX LESS 0) + list(APPEND EXCLUDE_FILES ${FILE}) + endif() + endforeach() + set(${EXCLUDE_LIST} ${EXCLUDE_FILES} PARENT_SCOPE) +endfunction() + +set(SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/access" + "${MATTER_SDK_PATH}/src/access/examples" + "${MATTER_SDK_PATH}/src/app" + "${MATTER_SDK_PATH}/src/app/icd/" + "${MATTER_SDK_PATH}/src/app/MessageDef" + "${MATTER_SDK_PATH}/src/app/reporting" + "${MATTER_SDK_PATH}/src/app/server" + "${MATTER_SDK_PATH}/src/ble" + "${MATTER_SDK_PATH}/src/credentials" + "${MATTER_SDK_PATH}/src/credentials/attestation_verifier" + "${MATTER_SDK_PATH}/src/credentials/examples" + "${MATTER_SDK_PATH}/src/credentials/tests" + "${MATTER_SDK_PATH}/src/crypto" + "${MATTER_SDK_PATH}/src/inet" + "${MATTER_SDK_PATH}/src/lib/address_resolve" + "${MATTER_SDK_PATH}/src/lib/asn1" + "${MATTER_SDK_PATH}/src/lib/core" + "${MATTER_SDK_PATH}/src/lib/dnssd" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/core" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/records" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/responders" + "${MATTER_SDK_PATH}/src/lib/support" + "${MATTER_SDK_PATH}/src/lib/support/logging" + "${MATTER_SDK_PATH}/src/lib/support/verhoeff" + "${MATTER_SDK_PATH}/src/messaging" + "${MATTER_SDK_PATH}/src/platform" + "${MATTER_SDK_PATH}/src/platform/OpenThread" + "${MATTER_SDK_PATH}/src/protocols" + "${MATTER_SDK_PATH}/src/protocols/bdx" + "${MATTER_SDK_PATH}/src/protocols/echo" + "${MATTER_SDK_PATH}/src/protocols/secure_channel" + "${MATTER_SDK_PATH}/src/protocols/user_directed_commissioning" + "${MATTER_SDK_PATH}/src/setup_payload" + "${MATTER_SDK_PATH}/src/system" + "${MATTER_SDK_PATH}/src/tracing" + "${MATTER_SDK_PATH}/src/transport" + "${MATTER_SDK_PATH}/src/transport/raw" + "${MATTER_SDK_PATH}/third_party/nlfaultinjection/src" + "${MATTER_SDK_PATH}/zzz_generated/app-common/app-common/zap-generated") + +set(INCLUDE_DIRS_LIST "${MATTER_SDK_PATH}/src" + "${MATTER_SDK_PATH}/src/include" + "${MATTER_SDK_PATH}/src/lib" + "${MATTER_SDK_PATH}/src/platform/OpenThread" + "${MATTER_SDK_PATH}/third_party/nlfaultinjection/include" + "${MATTER_SDK_PATH}/third_party/nlassert/repo/include" + "${MATTER_SDK_PATH}/third_party/nlio/repo/include" + "${MATTER_SDK_PATH}/zzz_generated/app-common") + +set(EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/controller/ExamplePersistentStorage.cpp" + "${MATTER_SDK_PATH}/src/credentials/attestation_verifier/FileAttestationTrustStore.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/CHIPCert_error_test_vectors.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/CHIPCert_test_vectors.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/CHIPCert_unit_test_vectors.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/FuzzChipCert.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestCertificationDeclaration.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestChipCert.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestCommissionerDUTVectors.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestDeviceAttestationConstruction.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestDeviceAttestationCredentials.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestFabricTable.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestGroupDataProvider.cpp" + "${MATTER_SDK_PATH}/src/credentials/tests/TestPersistentStorageOpCertStore.cpp" + "${MATTER_SDK_PATH}/src/crypto/CHIPCryptoPALOpenSSL.cpp" + "${MATTER_SDK_PATH}/src/crypto/CHIPCryptoPALPSA.cpp" + "${MATTER_SDK_PATH}/src/crypto/PSAOperationalKeystore.cpp" + "${MATTER_SDK_PATH}/src/crypto/PSASessionKeystore.cpp" + "${MATTER_SDK_PATH}/src/inet/TCPEndPointImplOpenThread.cpp" + "${MATTER_SDK_PATH}/src/inet/TCPEndPointImplSockets.cpp" + "${MATTER_SDK_PATH}/src/inet/UDPEndPointImplNetworkFramework.cpp" + "${MATTER_SDK_PATH}/src/inet/UDPEndPointImplOpenThread.cpp" + "${MATTER_SDK_PATH}/src/inet/UDPEndPointImplSockets.cpp" + "${MATTER_SDK_PATH}/src/lib/address_resolve/tool.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/Advertiser_ImplNone.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/Resolver_ImplNone.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/AddressPolicy_LibNlImpl.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/Logging.cpp" + "${MATTER_SDK_PATH}/src/lib/support/UnitTestRegistration.cpp" + "${MATTER_SDK_PATH}/src/lib/support/UnitTestUtils.cpp" + "${MATTER_SDK_PATH}/src/lib/support/JniReferences.cpp" + "${MATTER_SDK_PATH}/src/lib/support/CHIPMem-Simple.cpp" + "${MATTER_SDK_PATH}/src/lib/shell/commands/NFC.cpp" + "${MATTER_SDK_PATH}/src/platform/DeviceSafeQueue.cpp" + "${MATTER_SDK_PATH}/src/platform/SyscallStubs.cpp" + "${MATTER_SDK_PATH}/src/platform/OpenThread/GenericThreadStackManagerImpl_OpenThread_LwIP.cpp" + "${MATTER_SDK_PATH}/src/system/SystemLayerImplSelect.cpp" + "${MATTER_SDK_PATH}/src/transport/TraceMessage.cpp") + +list(APPEND INCLUDE_DIRS_LIST "${CMAKE_CURRENT_BINARY_DIR}") + +file(GLOB CLUSTER_DIR_LIST true ${MATTER_SDK_PATH}/src/app/clusters/*) +foreach(CLUSTER_DIR ${CLUSTER_DIR_LIST}) + file(GLOB_RECURSE C_CPP_FILES "${CLUSTER_DIR}/*.c" "${CLUSTER_DIR}/*.cpp") + if (C_CPP_FILES) + list(APPEND SRC_DIRS_LIST "${CLUSTER_DIR}") + endif() +endforeach() + +list(APPEND SRC_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter" + "${ESP_COMPONENTS_PATH}/esp_matter/private" + "${ESP_COMPONENTS_PATH}/esp_matter/utils" + "${MATTER_SDK_PATH}/zzz_generated/app-common/app-common/zap-generated/attributes" + "${MATTER_SDK_PATH}/src/app/util" + "${ESP_COMPONENTS_PATH}/esp_matter_bridge" + "${ESP_COMPONENTS_PATH}/esp_matter_console") + +list(APPEND INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter" + "${ESP_COMPONENTS_PATH}/esp_matter/utils" + "${ESP_COMPONENTS_PATH}/esp_matter_bridge" + "${ESP_COMPONENTS_PATH}/esp_matter_console") + +if (CONFIG_ESP_MATTER_ENABLE_DATA_MODEL) + list(APPEND SRC_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter/zap_common/app") + list(APPEND INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter/zap_common") +endif() + +set(PRIV_INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter/private") + +if (CONFIG_ESP_MATTER_CONTROLLER_ENABLE) + list(APPEND SRC_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_controller" + "${ESP_COMPONENTS_PATH}/esp_matter_controller/logger/zap-generated") + list(APPEND INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_controller" + "${ESP_COMPONENTS_PATH}/esp_matter_controller/logger") + + if (CONFIG_ESP_MATTER_CONTROLLER_CUSTOM_CLUSTER_ENABLE) + list(APPEND SRC_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_controller/controller_custom_cluster") + list(APPEND INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_controller/controller_custom_cluster") + endif() + if (NOT CONFIG_ESP_MATTER_COMMISSIONER_ENABLE) + list(APPEND EXCLUDE_SRCS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_controller/esp_matter_commissioner.cpp" + "${ESP_COMPONENTS_PATH}/esp_matter_controller/esp_matter_controller_pairing_command.cpp" + "${ESP_COMPONENTS_PATH}/esp_matter_controller/esp_matter_attestation_trust_store.cpp" + "${ESP_COMPONENTS_PATH}/esp_matter_controller/esp_matter_controller_group_settings.cpp") + endif() +endif() + +idf_build_get_property(rainmaker_enabled RAINMAKER_ENABLED) +if (${rainmaker_enabled}) + list(APPEND SRC_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_rainmaker") + list(APPEND INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_rainmaker") + list(APPEND REQUIRE_COMPONENTS esp_rainmaker) +endif() + +if (CONFIG_OPENTHREAD_BORDER_ROUTER) + list(APPEND INCLUDE_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_thread_br") + list(APPEND SRC_DIRS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_thread_br") + if ((NOT CONFIG_ENABLE_CHIP_SHELL) OR (NOT CONFIG_OPENTHREAD_CLI)) + list(APPEND EXCLUDE_SRCS_LIST "${ESP_COMPONENTS_PATH}/esp_matter_thread_br/esp_matter_thread_br_console.cpp") + endif() +endif() + +# ESP-IDF lets user set software version string by two ways: +# 1. Project's CMakeLists.txt file and 2. Config option +# It depends on CONFIG_APP_PROJECT_VER_FROM_CONFIG option +# So, below makes the same provision for software version number +if (CONFIG_APP_PROJECT_VER_FROM_CONFIG) + set(chip_config_software_version_number ${CONFIG_DEVICE_SOFTWARE_VERSION_NUMBER}) +elseif (DEFINED PROJECT_VER_NUMBER) + set(chip_config_software_version_number ${PROJECT_VER_NUMBER}) +else() + set(chip_config_software_version_number 0) +endif() + +if(CONFIG_DISABLE_READ_CLIENT) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/app/BufferedReadCallback.cpp" + "${MATTER_SDK_PATH}/src/app/ClusterStateCache.cpp" + "${MATTER_SDK_PATH}/src/app/ReadClient.cpp") +endif() + +if (NOT CONFIG_BUILD_CHIP_TESTS) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/inet/InetFaultInjection.cpp" + "${MATTER_SDK_PATH}/src/lib/support/CHIPFaultInjection.cpp" + "${MATTER_SDK_PATH}/src/system/SystemFaultInjection.cpp" + "${MATTER_SDK_PATH}/third_party/nlfaultinjection/src/nlfaultinjection.cpp") +endif() + +if (NOT CONFIG_USE_MINIMAL_MDNS) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/lib/dnssd/ActiveResolveAttempts.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/IncrementalResolve.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/MinimalMdnsServer.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/Resolver_ImplMinimalMdns.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/Parser.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/RecordData.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/ResponseSender.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/Server.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/AddressPolicy.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/core/QName.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/core/QNameString.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/core/RecordWriter.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/responders/IP.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/responders/QueryResponder.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/records/IP.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/records/ResourceRecord.cpp" + "${MATTER_SDK_PATH}/src/lib/dnssd/minimal_mdns/AddressPolicy_DefaultImpl.cpp") +else() + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/lib/dnssd/Discovery_ImplPlatform.cpp") +endif() + +if (CONFIG_ENABLE_CHIP_SHELL) + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/lib/shell") + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/lib/shell/commands") + set(ESP_SHELL_FILES "${MATTER_SDK_PATH}/src/lib/shell/MainLoopESP32.cpp" + "${MATTER_SDK_PATH}/src/lib/shell/streamer_esp32.cpp" + "${MATTER_SDK_PATH}/src/lib/shell/Engine.cpp" + "${MATTER_SDK_PATH}/src/lib/shell/streamer.cpp") + collect_exclude_files("${MATTER_SDK_PATH}/src/lib/shell" "${ESP_SHELL_FILES}" SHELL_EXCLUDE_FILES) + list(APPEND EXCLUDE_SRCS_LIST "${SHELL_EXCLUDE_FILES}") +endif() + +if (CONFIG_ENABLE_CHIP_CONTROLLER_BUILD) + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/controller") + if (CONFIG_DISABLE_READ_CLIENT) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/controller/CHIPDeviceController.cpp" + "${MATTER_SDK_PATH}/src/controller/CommissioningWindowOpener.cpp" + "${MATTER_SDK_PATH}/src/controller/CurrentFabricRemover.cpp") + endif() +endif() + +if((NOT CONFIG_ENABLE_WIFI_STATION) AND (NOT CONFIG_ENABLE_WIFI_AP)) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/lib/shell/commands/WiFi.cpp") +endif() + +if (NOT CONFIG_ENABLE_MATTER_OVER_THREAD) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/OpenThread/DnssdImpl.cpp" + "${MATTER_SDK_PATH}/src/platform/OpenThread/GenericNetworkCommissioningThreadDriver.cpp" + "${MATTER_SDK_PATH}/src/platform/OpenThread/OpenThreadUtils.cpp" + "${MATTER_SDK_PATH}/src/platform/OpenThread/OpenThreadDnssdImpl.cpp") +endif() + +# Set up CHIP project configuration file +if (CONFIG_CHIP_PROJECT_CONFIG) + get_filename_component(CHIP_PROJECT_CONFIG + ${CONFIG_CHIP_PROJECT_CONFIG} + REALPATH + BASE_DIR ${CMAKE_SOURCE_DIR} + ) + set(CHIP_PROJECT_CONFIG "<${CHIP_PROJECT_CONFIG}>") +else() + set(CHIP_PROJECT_CONFIG "") +endif() + +if (CONFIG_ENABLE_ESP_INSIGHTS_TRACE) + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/tracing/esp32_trace") + list(APPEND INCLUDE_DIRS_LIST "${MATTER_SDK_PATH}/src/tracing/esp32_trace/include") +endif() + +if (CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM) + # check the source file dir if external platform is enable + if ((EXISTS ${CONFIG_CHIP_EXTERNAL_PLATFORM_DIR}/external_platform.cmake)) + include(${CONFIG_CHIP_EXTERNAL_PLATFORM_DIR}/external_platform.cmake) + list(APPEND SRC_DIRS_LIST ${EXPLANT_SRC_DIRS_LIST}) + list(APPEND INCLUDE_DIRS_LIST ${EXPLANT_INCLUDE_DIRS_LIST}) + list(APPEND EXCLUDE_SRCS_LIST ${EXPLANT_EXCLUDE_SRCS_LIST}) + else() + message(FATAL_ERROR "CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM is set, but CONFIG_CHIP_EXTERNAL_PLATFORM_DIR is not set correctly!") + endif() +else() + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32" + "${MATTER_SDK_PATH}/src/platform/ESP32/route_hook") + + list(APPEND INCLUDE_DIRS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32" + "${MATTER_SDK_PATH}/src/platform/ESP32/bluedroid" + "${MATTER_SDK_PATH}/src/platform/ESP32/nimble" + "${MATTER_SDK_PATH}/src/platform/ESP32/route_hook") + + if (CONFIG_USE_MINIMAL_MDNS) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/DnssdImpl.cpp") + endif() + + if ((CONFIG_USE_MINIMAL_MDNS) OR ((NOT CONFIG_ENABLE_WIFI_STATION) AND (NOT CONFIG_ENABLE_WIFI_AP))) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/WiFiDnssdImpl.cpp") + endif() + + if((NOT CONFIG_ENABLE_WIFI_STATION) AND (NOT CONFIG_ENABLE_WIFI_AP)) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/ConnectivityManagerImpl_WiFi.cpp" + "${MATTER_SDK_PATH}/src/platform/ESP32/NetworkCommissioningDriver.cpp" + "${MATTER_SDK_PATH}/src/platform/ESP32/route_hook/ESP32RouteHook.c" + "${MATTER_SDK_PATH}/src/platform/ESP32/route_hook/ESP32RouteTable.c") + endif() + + if(NOT CONFIG_ENABLE_ROUTE_HOOK) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/route_hook/ESP32RouteHook.c" + "${MATTER_SDK_PATH}/src/platform/ESP32/route_hook/ESP32RouteTable.c") + endif() + + if ((CONFIG_BT_ENABLED) AND (CONFIG_ENABLE_CHIPOBLE)) + if (CONFIG_BT_NIMBLE_ENABLED) + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/nimble") + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/bluedroid/BLEManagerImpl.cpp") + if(NOT CONFIG_ENABLE_ESP32_BLE_CONTROLLER) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/bluedroid/ChipDeviceScanner.cpp") + endif() + else() + list(APPEND SRC_DIRS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/bluedroid") + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/nimble/BLEManagerImpl.cpp") + if(NOT CONFIG_ENABLE_ESP32_BLE_CONTROLLER) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/nimble/ChipDeviceScanner.cpp" + "${MATTER_SDK_PATH}/src/platform/ESP32/nimble/misc.c" + "${MATTER_SDK_PATH}/src/platform/ESP32/nimble/peer.c") + endif() + endif() + endif() + + if (NOT CONFIG_ENABLE_ETHERNET_TELEMETRY) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp" + "${MATTER_SDK_PATH}/src/platform/ESP32/NetworkCommissioningDriver_Ethernet.cpp") + endif() + + if ((NOT CONFIG_OPENTHREAD_ENABLED) OR (NOT CONFIG_ENABLE_MATTER_OVER_THREAD)) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/OpenthreadLauncher.cpp" + "${MATTER_SDK_PATH}/src/platform/ESP32/ThreadStackManagerImpl.cpp") + endif() + + if (NOT CONFIG_ENABLE_OTA_REQUESTOR) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/OTAImageProcessorImpl.cpp") + endif() + + if (NOT CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/ESP32FactoryDataProvider.cpp") + endif() + + if (NOT CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/ESP32DeviceInfoProvider.cpp") + endif() + + if (NOT CONFIG_SEC_CERT_DAC_PROVIDER) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/ESP32SecureCertDACProvider.cpp") + endif() + + if (NOT CONFIG_USE_ESP32_ECDSA_PERIPHERAL) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/platform/ESP32/ESP32CHIPCryptoPAL.cpp") + endif() +endif() + +if (NOT CONFIG_ENABLE_CHIPOBLE) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/ble/BLEEndPoint.cpp" + "${MATTER_SDK_PATH}/src/ble/BleError.cpp" + "${MATTER_SDK_PATH}/src/ble/BleLayer.cpp" + "${MATTER_SDK_PATH}/src/ble/BleUUID.cpp" + "${MATTER_SDK_PATH}/src/ble/BtpEngine.cpp") +endif() + +if(NOT CONFIG_ENABLE_ICD_SERVER) + list(APPEND EXCLUDE_SRCS_LIST "${MATTER_SDK_PATH}/src/app/icd/ICDManager.cpp" + "${MATTER_SDK_PATH}/src/app/icd/ICDNotifier.cpp") +endif() + +idf_component_register(SRC_DIRS ${SRC_DIRS_LIST} + EXCLUDE_SRCS ${EXCLUDE_SRCS_LIST} + INCLUDE_DIRS ${INCLUDE_DIRS_LIST} + PRIV_INCLUDE_DIRS ${PRIV_INCLUDE_DIRS_LIST} + REQUIRES ${REQUIRE_COMPONENTS}) + +target_compile_options(${COMPONENT_LIB} PUBLIC + "-DCHIP_ADDRESS_RESOLVE_IMPL_INCLUDE_HEADER=" + "-DCHIP_CONFIG_SOFTWARE_VERSION_NUMBER=${chip_config_software_version_number}") + +if (CHIP_PROJECT_CONFIG) + target_compile_options(${COMPONENT_LIB} PUBLIC + "-DCHIP_PROJECT_CONFIG_INCLUDE=${CHIP_PROJECT_CONFIG}" + "-DSYSTEM_PROJECT_CONFIG_INCLUDE=${CHIP_PROJECT_CONFIG}") +endif() + +idf_build_set_property(COMPILE_OPTIONS "-Wno-error=uninitialized;-Wno-error=maybe-uninitialized;-Wno-format-nonliteral;-Wno-missing-field-initializers;" APPEND) +idf_build_set_property(COMPILE_OPTIONS "-Wno-error=array-bounds" APPEND) +idf_build_set_property(COMPILE_OPTIONS "-Wno-write-strings" APPEND) + +# For Xtensa chips, uint32_t was defined as 'unsigned' before v5.0, and after IDF v5.0 it is defined +# as 'unsigned long', same as RISC-V. add this compile option to avoid format errors. +# https://github.com/espressif/esp-idf/issues/6906#issuecomment-1207373706 +if (CONFIG_IDF_TARGET_ARCH_XTENSA AND (${IDF_VERSION_MAJOR} LESS 5)) + idf_build_set_property(COMPILE_OPTIONS "-Wno-format" APPEND) +endif() + +# Time sync client feature depends on read client, disable it when read client is disabled. +if (CONFIG_DISABLE_READ_CLIENT) + target_compile_options(${COMPONENT_LIB} PUBLIC "-DTIME_SYNC_ENABLE_TSC_FEATURE=0") +endif() + +if (CONFIG_USE_MINIMAL_MDNS) + target_compile_options(${COMPONENT_LIB} PUBLIC "-DCHIP_MINMDNS_DEFAULT_POLICY=1" + "-DCHIP_MINMDNS_USE_EPHEMERAL_UNICAST_PORT=0" + "-DCHIP_MINMDNS_HIGH_VERBOSITY=0") +endif() + +if (NOT CMAKE_BUILD_EARLY_EXPANSION) + if (CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE) + target_compile_options(${COMPONENT_LIB} PUBLIC "-DLWIP_DEBUG=1") + endif() +endif() + +if (NOT CONFIG_ESP_MATTER_ENABLE_DATA_MODEL) + target_include_directories(${COMPONENT_LIB} PUBLIC "${CMAKE_BINARY_DIR}/gen/app-codegen/cpp-app" + "${CMAKE_BINARY_DIR}/gen/app-zapgen/zapgen/app-templates") +endif() + +idf_component_get_property(freertos_dir freertos COMPONENT_DIR) +target_include_directories(${COMPONENT_LIB} PRIVATE + "${freertos_dir}/include/freertos" + "${freertos_dir}/FreeRTOS-Kernel/include/freertos") + +target_include_directories(${COMPONENT_LIB} INTERFACE + "${MATTER_SDK_PATH}/examples/platform/esp32") + +#Generate some include files +include(${CMAKE_CURRENT_LIST_DIR}/generate-include-files.cmake) + +idf_component_get_property(main_lib main COMPONENT_LIB) +set(chip_libraries $) +target_link_libraries(${COMPONENT_LIB} INTERFACE -Wl,--start-group + ${chip_libraries} + -Wl,--end-group) + +# Build OTA image need a python package, leading a file change and distorying the hash of managed_components. +# In next idf_component_manager release, this may be resolved by adding include/exclude for calculating component_hash. +# Build Matter OTA image +if (CONFIG_CHIP_OTA_IMAGE_BUILD) + chip_ota_image(chip-ota-image + INPUT_FILES ${BUILD_DIR}/${CMAKE_PROJECT_NAME}.bin + OUTPUT_FILE ${BUILD_DIR}/${CMAKE_PROJECT_NAME}-ota.bin + ) + # Adding dependecy as app target so that this runs after images are ready + add_dependencies(chip-ota-image app) +endif() diff --git a/Kconfig b/Kconfig new file mode 100644 index 000000000..ff5947028 --- /dev/null +++ b/Kconfig @@ -0,0 +1,5 @@ +rsource "connectedhomeip/connectedhomeip/config/esp32/components/chip/Kconfig" +rsource "components/esp_matter/Kconfig" +rsource "components/esp_matter_bridge/Kconfig" +rsource "components/esp_matter_console/Kconfig" +rsource "components/esp_matter_controller/Kconfig" \ No newline at end of file diff --git a/examples/common/blemesh_platform/platform/ESP32_custom/external_platform.cmake b/examples/common/blemesh_platform/platform/ESP32_custom/external_platform.cmake new file mode 100644 index 000000000..65300d13a --- /dev/null +++ b/examples/common/blemesh_platform/platform/ESP32_custom/external_platform.cmake @@ -0,0 +1,80 @@ +# check the source file dirs +set(EXPLANT_SRC_DIRS_LIST "${CMAKE_CURRENT_LIST_DIR}/" + "${CMAKE_CURRENT_LIST_DIR}/route_hook") + +set(EXPLANT_INCLUDE_DIRS_LIST "${CMAKE_CURRENT_LIST_DIR}/../../" + "${CMAKE_CURRENT_LIST_DIR}" + "${CMAKE_CURRENT_LIST_DIR}/bluedroid" + "${CMAKE_CURRENT_LIST_DIR}/nimble" + "${CMAKE_CURRENT_LIST_DIR}/route_hook") + +set(EXPLANT_EXCLUDE_SRCS_LIST) + +if (CONFIG_USE_MINIMAL_MDNS) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/DnssdImpl.cpp") +endif() + +if ((CONFIG_USE_MINIMAL_MDNS) OR ((NOT CONFIG_ENABLE_WIFI_STATION) AND (NOT CONFIG_ENABLE_WIFI_AP))) + list(APPEND EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/WiFiDnssdImpl.cpp") +endif() + +if((NOT CONFIG_ENABLE_WIFI_STATION) AND (NOT CONFIG_ENABLE_WIFI_AP)) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/ConnectivityManagerImpl_WiFi.cpp" + "${CMAKE_CURRENT_LIST_DIR}/NetworkCommissioningDriver.cpp" + "${CMAKE_CURRENT_LIST_DIR}/route_hook/ESP32RouteHook.c" + "${CMAKE_CURRENT_LIST_DIR}/route_hook/ESP32RouteTable.c") +endif() + +if(NOT CONFIG_ENABLE_ROUTE_HOOK) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/route_hook/ESP32RouteHook.c" + "${CMAKE_CURRENT_LIST_DIR}/route_hook/ESP32RouteTable.c") +endif() + +if ((CONFIG_BT_ENABLED) AND (CONFIG_ENABLE_CHIPOBLE)) + if (CONFIG_BT_NIMBLE_ENABLED) + list(APPEND EXPLANT_SRC_DIRS_LIST "${CMAKE_CURRENT_LIST_DIR}/nimble") + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/bluedroid/BLEManagerImpl.cpp") + if(NOT CONFIG_ENABLE_ESP32_BLE_CONTROLLER) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/bluedroid/ChipDeviceScanner.cpp") + endif() + else() + list(APPEND EXPLANT_SRC_DIRS_LIST "${CMAKE_CURRENT_LIST_DIR}/bluedroid") + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/nimble/BLEManagerImpl.cpp") + if(NOT CONFIG_ENABLE_ESP32_BLE_CONTROLLER) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/nimble/ChipDeviceScanner.cpp" + "${CMAKE_CURRENT_LIST_DIR}/nimble/misc.c" + "${CMAKE_CURRENT_LIST_DIR}/nimble/peer.c") + endif() + endif() +endif() + +if (NOT CONFIG_ENABLE_ETHERNET_TELEMETRY) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/ConnectivityManagerImpl_Ethernet.cpp" + "${CMAKE_CURRENT_LIST_DIR}/NetworkCommissioningDriver_Ethernet.cpp") +endif() + +if (NOT CONFIG_ENABLE_MATTER_OVER_THREAD) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/OpenthreadLauncher.c" + "${CMAKE_CURRENT_LIST_DIR}/ThreadStackManagerImpl.cpp") +endif() + +if (NOT CONFIG_ENABLE_OTA_REQUESTOR) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/OTAImageProcessorImpl.cpp") +endif() + + +if (NOT CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/ESP32FactoryDataProvider.cpp") +endif() + +if (NOT CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/ESP32DeviceInfoProvider.cpp") +endif() + +if (NOT CONFIG_SEC_CERT_DAC_PROVIDER) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/ESP32SecureCertDACProvider.cpp") +endif() + +if (NOT CONFIG_USE_ESP32_ECDSA_PERIPHERAL) + list(APPEND EXPLANT_EXCLUDE_SRCS_LIST "${CMAKE_CURRENT_LIST_DIR}/ESP32CHIPCryptoPAL.cpp") +endif() diff --git a/generate-include-files.cmake b/generate-include-files.cmake new file mode 100644 index 000000000..64d4a8fe0 --- /dev/null +++ b/generate-include-files.cmake @@ -0,0 +1,693 @@ +# Generating FirmwareBuildTime.h +execute_process( + COMMAND date "+%s" + OUTPUT_VARIABLE BUILD_SECONDS + OUTPUT_STRIP_TRAILING_WHITESPACE +) +math(EXPR BUILD_SECONDS "${BUILD_SECONDS} - (946684800)") +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/FirmwareBuildTime.h +"#pragma once\n +#define CHIP_DEVICE_CONFIG_FIRMWARE_BUILD_TIME_MATTER_EPOCH_S ${BUILD_SECONDS} +") + +# Generating app/AppBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/app/AppBuildConfig.h +"#pragma once\n +#include \n + +#ifdef CONFIG_CHIP_CONFIG_IM_PRETTY_PRINT +#define CHIP_CONFIG_IM_PRETTY_PRINT 1 +#else +#define CHIP_CONFIG_IM_PRETTY_PRINT 0 +#endif + +#define CHIP_CONFIG_IM_FORCE_FABRIC_QUOTA_CHECK 0 +#define CHIP_CONFIG_ENABLE_SESSION_RESUMPTION 1 +#define CHIP_CONFIG_ACCESS_CONTROL_POLICY_LOGGING_VERBOSITY 0 + +#ifdef CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM +#define CHIP_CONFIG_PERSIST_SUBSCRIPTIONS 0 +#define CHIP_CONFIG_SUBSCRIPTION_TIMEOUT_RESUMPTION 0 +#else +#define CHIP_CONFIG_PERSIST_SUBSCRIPTIONS 1 +#define CHIP_CONFIG_SUBSCRIPTION_TIMEOUT_RESUMPTION 1 +#endif + +#ifdef CONFIG_ENABLE_MATTER_EVENT_LIST +#define CHIP_CONFIG_ENABLE_EVENTLIST_ATTRIBUTE 1 +#else +#define CHIP_CONFIG_ENABLE_EVENTLIST_ATTRIBUTE 0 +#endif + +#ifdef CONFIG_DISABLE_READ_CLIENT +#define CHIP_CONFIG_ENABLE_READ_CLIENT 0 +#else +#define CHIP_CONFIG_ENABLE_READ_CLIENT 1 +#endif +") + +# Generating app/icd/ICDBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/app/icd/ICDBuildConfig.h +"#pragma once\n +#ifdef CONFIG_ENABLE_ICD_SERVER +#define CHIP_CONFIG_ENABLE_ICD_SERVER 1 +#else +#define CHIP_CONFIG_ENABLE_ICD_SERVER 0 +#endif + +#define ICD_REPORT_ON_ENTER_ACTIVE_MODE 0 +#define ICD_MAX_NOTIFICATION_SUBSCRIBERS 1 +#define ICD_ENFORCE_SIT_SLOW_POLL_LIMIT 0 +") + +# Generating asn1/ASN1OID.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/asn1/ASN1OID.h +"#pragma once\n +#include +#include +#include \n +namespace chip { + namespace ASN1 { + + enum OIDCategory + { + kOIDCategory_PubKeyAlgo = 0x0100, + kOIDCategory_SigAlgo = 0x0200, + kOIDCategory_AttributeType = 0x0300, + kOIDCategory_EllipticCurve = 0x0400, + kOIDCategory_Extension = 0x0500, + kOIDCategory_KeyPurpose = 0x0600, + + kOIDCategory_NotSpecified = 0, + kOIDCategory_Unknown = 0x0F00, + kOIDCategory_Mask = 0x0F00 + }; + + typedef uint16_t OID; + + enum + { + kOID_PubKeyAlgo_ECPublicKey = 0x0101, + + kOID_SigAlgo_ECDSAWithSHA256 = 0x0201, + + kOID_AttributeType_CommonName = 0x0301, + kOID_AttributeType_Surname = 0x0302, + kOID_AttributeType_SerialNumber = 0x0303, + kOID_AttributeType_CountryName = 0x0304, + kOID_AttributeType_LocalityName = 0x0305, + kOID_AttributeType_StateOrProvinceName = 0x0306, + kOID_AttributeType_OrganizationName = 0x0307, + kOID_AttributeType_OrganizationalUnitName = 0x0308, + kOID_AttributeType_Title = 0x0309, + kOID_AttributeType_Name = 0x030A, + kOID_AttributeType_GivenName = 0x030B, + kOID_AttributeType_Initials = 0x030C, + kOID_AttributeType_GenerationQualifier = 0x030D, + kOID_AttributeType_DNQualifier = 0x030E, + kOID_AttributeType_Pseudonym = 0x030F, + kOID_AttributeType_DomainComponent = 0x0310, + kOID_AttributeType_MatterNodeId = 0x0311, + kOID_AttributeType_MatterFirmwareSigningId = 0x0312, + kOID_AttributeType_MatterICACId = 0x0313, + kOID_AttributeType_MatterRCACId = 0x0314, + kOID_AttributeType_MatterFabricId = 0x0315, + kOID_AttributeType_MatterCASEAuthTag = 0x0316, + + kOID_EllipticCurve_prime256v1 = 0x0401, + + kOID_Extension_BasicConstraints = 0x0501, + kOID_Extension_KeyUsage = 0x0502, + kOID_Extension_ExtendedKeyUsage = 0x0503, + kOID_Extension_SubjectKeyIdentifier = 0x0504, + kOID_Extension_AuthorityKeyIdentifier = 0x0505, + kOID_Extension_CSRRequest = 0x0506, + + kOID_KeyPurpose_ServerAuth = 0x0601, + kOID_KeyPurpose_ClientAuth = 0x0602, + kOID_KeyPurpose_CodeSigning = 0x0603, + kOID_KeyPurpose_EmailProtection = 0x0604, + kOID_KeyPurpose_TimeStamping = 0x0605, + kOID_KeyPurpose_OCSPSigning = 0x0606, + + kOID_NotSpecified = 0, + kOID_Unknown = 0xFFFF, + kOID_EnumMask = 0x00FF + }; + + struct OIDTableEntry + { + OID EnumVal; + const uint8_t *EncodedOID; + uint16_t EncodedOIDLen; + }; + + struct OIDNameTableEntry + { + OID EnumVal; + const char *Name; + }; + + extern const OIDTableEntry sOIDTable[]; + extern const OIDNameTableEntry sOIDNameTable[]; + extern const size_t sOIDTableSize; + + #ifdef ASN1_DEFINE_OID_TABLE + + static const uint8_t sOID_PubKeyAlgo_ECPublicKey[] = { 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01 }; + static const uint8_t sOID_SigAlgo_ECDSAWithSHA256[] = { 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, 0x02 }; + static const uint8_t sOID_AttributeType_CommonName[] = { 0x55, 0x04, 0x03 }; + static const uint8_t sOID_AttributeType_Surname[] = { 0x55, 0x04, 0x04 }; + static const uint8_t sOID_AttributeType_SerialNumber[] = { 0x55, 0x04, 0x05 }; + static const uint8_t sOID_AttributeType_CountryName[] = { 0x55, 0x04, 0x06 }; + static const uint8_t sOID_AttributeType_LocalityName[] = { 0x55, 0x04, 0x07 }; + static const uint8_t sOID_AttributeType_StateOrProvinceName[] = { 0x55, 0x04, 0x08 }; + static const uint8_t sOID_AttributeType_OrganizationName[] = { 0x55, 0x04, 0x0A }; + static const uint8_t sOID_AttributeType_OrganizationalUnitName[] = { 0x55, 0x04, 0x0B }; + static const uint8_t sOID_AttributeType_Title[] = { 0x55, 0x04, 0x0C }; + static const uint8_t sOID_AttributeType_Name[] = { 0x55, 0x04, 0x29 }; + static const uint8_t sOID_AttributeType_GivenName[] = { 0x55, 0x04, 0x2A }; + static const uint8_t sOID_AttributeType_Initials[] = { 0x55, 0x04, 0x2B }; + static const uint8_t sOID_AttributeType_GenerationQualifier[] = { 0x55, 0x04, 0x2C }; + static const uint8_t sOID_AttributeType_DNQualifier[] = { 0x55, 0x04, 0x2E }; + static const uint8_t sOID_AttributeType_Pseudonym[] = { 0x55, 0x04, 0x41 }; + static const uint8_t sOID_AttributeType_DomainComponent[] = { 0x09, 0x92, 0x26, 0x89, 0x93, 0xF2, 0x2C, 0x64, 0x01, 0x19 }; + static const uint8_t sOID_AttributeType_MatterNodeId[] = { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0xA2, 0x7C, 0x01, 0x01 }; + static const uint8_t sOID_AttributeType_MatterFirmwareSigningId[] = { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0xA2, 0x7C, 0x01, 0x02 }; + static const uint8_t sOID_AttributeType_MatterICACId[] = { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0xA2, 0x7C, 0x01, 0x03 }; + static const uint8_t sOID_AttributeType_MatterRCACId[] = { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0xA2, 0x7C, 0x01, 0x04 }; + static const uint8_t sOID_AttributeType_MatterFabricId[] = { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0xA2, 0x7C, 0x01, 0x05 }; + static const uint8_t sOID_AttributeType_MatterCASEAuthTag[] = { 0x2B, 0x06, 0x01, 0x04, 0x01, 0x82, 0xA2, 0x7C, 0x01, 0x06 }; + static const uint8_t sOID_EllipticCurve_prime256v1[] = { 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07 }; + static const uint8_t sOID_Extension_BasicConstraints[] = { 0x55, 0x1D, 0x13 }; + static const uint8_t sOID_Extension_KeyUsage[] = { 0x55, 0x1D, 0x0F }; + static const uint8_t sOID_Extension_ExtendedKeyUsage[] = { 0x55, 0x1D, 0x25 }; + static const uint8_t sOID_Extension_SubjectKeyIdentifier[] = { 0x55, 0x1D, 0x0E }; + static const uint8_t sOID_Extension_AuthorityKeyIdentifier[] = { 0x55, 0x1D, 0x23 }; + static const uint8_t sOID_Extension_CSRRequest[] = { 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x09, 0x0E }; + static const uint8_t sOID_KeyPurpose_ServerAuth[] = { 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x01 }; + static const uint8_t sOID_KeyPurpose_ClientAuth[] = { 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x02 }; + static const uint8_t sOID_KeyPurpose_CodeSigning[] = { 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x03 }; + static const uint8_t sOID_KeyPurpose_EmailProtection[] = { 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x04 }; + static const uint8_t sOID_KeyPurpose_TimeStamping[] = { 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x08 }; + static const uint8_t sOID_KeyPurpose_OCSPSigning[] = { 0x2B, 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x09 }; + + + const OIDTableEntry sOIDTable[] = + { + { kOID_PubKeyAlgo_ECPublicKey, sOID_PubKeyAlgo_ECPublicKey, sizeof(sOID_PubKeyAlgo_ECPublicKey) }, + { kOID_SigAlgo_ECDSAWithSHA256, sOID_SigAlgo_ECDSAWithSHA256, sizeof(sOID_SigAlgo_ECDSAWithSHA256) }, + { kOID_AttributeType_CommonName, sOID_AttributeType_CommonName, sizeof(sOID_AttributeType_CommonName) }, + { kOID_AttributeType_Surname, sOID_AttributeType_Surname, sizeof(sOID_AttributeType_Surname) }, + { kOID_AttributeType_SerialNumber, sOID_AttributeType_SerialNumber, sizeof(sOID_AttributeType_SerialNumber) }, + { kOID_AttributeType_CountryName, sOID_AttributeType_CountryName, sizeof(sOID_AttributeType_CountryName) }, + { kOID_AttributeType_LocalityName, sOID_AttributeType_LocalityName, sizeof(sOID_AttributeType_LocalityName) }, + { kOID_AttributeType_StateOrProvinceName, sOID_AttributeType_StateOrProvinceName, sizeof(sOID_AttributeType_StateOrProvinceName) }, + { kOID_AttributeType_OrganizationName, sOID_AttributeType_OrganizationName, sizeof(sOID_AttributeType_OrganizationName) }, + { kOID_AttributeType_OrganizationalUnitName, sOID_AttributeType_OrganizationalUnitName, sizeof(sOID_AttributeType_OrganizationalUnitName) }, + { kOID_AttributeType_Title, sOID_AttributeType_Title, sizeof(sOID_AttributeType_Title) }, + { kOID_AttributeType_Name, sOID_AttributeType_Name, sizeof(sOID_AttributeType_Name) }, + { kOID_AttributeType_GivenName, sOID_AttributeType_GivenName, sizeof(sOID_AttributeType_GivenName) }, + { kOID_AttributeType_Initials, sOID_AttributeType_Initials, sizeof(sOID_AttributeType_Initials) }, + { kOID_AttributeType_GenerationQualifier, sOID_AttributeType_GenerationQualifier, sizeof(sOID_AttributeType_GenerationQualifier) }, + { kOID_AttributeType_DNQualifier, sOID_AttributeType_DNQualifier, sizeof(sOID_AttributeType_DNQualifier) }, + { kOID_AttributeType_Pseudonym, sOID_AttributeType_Pseudonym, sizeof(sOID_AttributeType_Pseudonym) }, + { kOID_AttributeType_DomainComponent, sOID_AttributeType_DomainComponent, sizeof(sOID_AttributeType_DomainComponent) }, + { kOID_AttributeType_MatterNodeId, sOID_AttributeType_MatterNodeId, sizeof(sOID_AttributeType_MatterNodeId) }, + { kOID_AttributeType_MatterFirmwareSigningId, sOID_AttributeType_MatterFirmwareSigningId, sizeof(sOID_AttributeType_MatterFirmwareSigningId) }, + { kOID_AttributeType_MatterICACId, sOID_AttributeType_MatterICACId, sizeof(sOID_AttributeType_MatterICACId) }, + { kOID_AttributeType_MatterRCACId, sOID_AttributeType_MatterRCACId, sizeof(sOID_AttributeType_MatterRCACId) }, + { kOID_AttributeType_MatterFabricId, sOID_AttributeType_MatterFabricId, sizeof(sOID_AttributeType_MatterFabricId) }, + { kOID_AttributeType_MatterCASEAuthTag, sOID_AttributeType_MatterCASEAuthTag, sizeof(sOID_AttributeType_MatterCASEAuthTag) }, + { kOID_EllipticCurve_prime256v1, sOID_EllipticCurve_prime256v1, sizeof(sOID_EllipticCurve_prime256v1) }, + { kOID_Extension_BasicConstraints, sOID_Extension_BasicConstraints, sizeof(sOID_Extension_BasicConstraints) }, + { kOID_Extension_KeyUsage, sOID_Extension_KeyUsage, sizeof(sOID_Extension_KeyUsage) }, + { kOID_Extension_ExtendedKeyUsage, sOID_Extension_ExtendedKeyUsage, sizeof(sOID_Extension_ExtendedKeyUsage) }, + { kOID_Extension_SubjectKeyIdentifier, sOID_Extension_SubjectKeyIdentifier, sizeof(sOID_Extension_SubjectKeyIdentifier) }, + { kOID_Extension_AuthorityKeyIdentifier, sOID_Extension_AuthorityKeyIdentifier, sizeof(sOID_Extension_AuthorityKeyIdentifier) }, + { kOID_Extension_CSRRequest, sOID_Extension_CSRRequest, sizeof(sOID_Extension_CSRRequest) }, + { kOID_KeyPurpose_ServerAuth, sOID_KeyPurpose_ServerAuth, sizeof(sOID_KeyPurpose_ServerAuth) }, + { kOID_KeyPurpose_ClientAuth, sOID_KeyPurpose_ClientAuth, sizeof(sOID_KeyPurpose_ClientAuth) }, + { kOID_KeyPurpose_CodeSigning, sOID_KeyPurpose_CodeSigning, sizeof(sOID_KeyPurpose_CodeSigning) }, + { kOID_KeyPurpose_EmailProtection, sOID_KeyPurpose_EmailProtection, sizeof(sOID_KeyPurpose_EmailProtection) }, + { kOID_KeyPurpose_TimeStamping, sOID_KeyPurpose_TimeStamping, sizeof(sOID_KeyPurpose_TimeStamping) }, + { kOID_KeyPurpose_OCSPSigning, sOID_KeyPurpose_OCSPSigning, sizeof(sOID_KeyPurpose_OCSPSigning) }, + { kOID_NotSpecified, NULL, 0 } + }; + + const size_t sOIDTableSize = sizeof(sOIDTable) / sizeof(OIDTableEntry); + + #endif // ASN1_DEFINE_OID_TABLE + + #ifdef ASN1_DEFINE_OID_NAME_TABLE + + const OIDNameTableEntry sOIDNameTable[] = + { + { kOID_PubKeyAlgo_ECPublicKey, \"ECPublicKey\" }, + { kOID_SigAlgo_ECDSAWithSHA256, \"ECDSAWithSHA256\" }, + { kOID_AttributeType_CommonName, \"CommonName\" }, + { kOID_AttributeType_Surname, \"Surname\" }, + { kOID_AttributeType_SerialNumber, \"SerialNumber\" }, + { kOID_AttributeType_CountryName, \"CountryName\" }, + { kOID_AttributeType_LocalityName, \"LocalityName\" }, + { kOID_AttributeType_StateOrProvinceName, \"StateOrProvinceName\" }, + { kOID_AttributeType_OrganizationName, \"OrganizationName\" }, + { kOID_AttributeType_OrganizationalUnitName, \"OrganizationalUnitName\" }, + { kOID_AttributeType_Title, \"Title\" }, + { kOID_AttributeType_Name, \"Name\" }, + { kOID_AttributeType_GivenName, \"GivenName\" }, + { kOID_AttributeType_Initials, \"Initials\" }, + { kOID_AttributeType_GenerationQualifier, \"GenerationQualifier\" }, + { kOID_AttributeType_DNQualifier, \"DNQualifier\" }, + { kOID_AttributeType_Pseudonym, \"Pseudonym\" }, + { kOID_AttributeType_DomainComponent, \"DomainComponent\" }, + { kOID_AttributeType_MatterNodeId, \"MatterNodeId\" }, + { kOID_AttributeType_MatterFirmwareSigningId, \"MatterFirmwareSigningId\" }, + { kOID_AttributeType_MatterICACId, \"MatterICACId\" }, + { kOID_AttributeType_MatterRCACId, \"MatterRCACId\" }, + { kOID_AttributeType_MatterFabricId, \"MatterFabricId\" }, + { kOID_AttributeType_MatterCASEAuthTag, \"MatterCASEAuthTag\" }, + { kOID_EllipticCurve_prime256v1, \"prime256v1\" }, + { kOID_Extension_BasicConstraints, \"BasicConstraints\" }, + { kOID_Extension_KeyUsage, \"KeyUsage\" }, + { kOID_Extension_ExtendedKeyUsage, \"ExtendedKeyUsage\" }, + { kOID_Extension_SubjectKeyIdentifier, \"SubjectKeyIdentifier\" }, + { kOID_Extension_AuthorityKeyIdentifier, \"AuthorityKeyIdentifier\" }, + { kOID_Extension_CSRRequest, \"CSRRequest\" }, + { kOID_KeyPurpose_ServerAuth, \"ServerAuth\" }, + { kOID_KeyPurpose_ClientAuth, \"ClientAuth\" }, + { kOID_KeyPurpose_CodeSigning, \"CodeSigning\" }, + { kOID_KeyPurpose_EmailProtection, \"EmailProtection\" }, + { kOID_KeyPurpose_TimeStamping, \"TimeStamping\" }, + { kOID_KeyPurpose_OCSPSigning, \"OCSPSigning\" }, + { kOID_NotSpecified, NULL } + }; + + #endif // ASN1_DEFINE_OID_NAME_TABLE + + } // namespace ASN1 + } // namespace chip +") + +# Generating ble/BleBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/ble/BleBuildConfig.h +"#pragma once\n +#include \n +#ifdef CONFIG_ENABLE_CHIPOBLE +#define CONFIG_NETWORK_LAYER_BLE 1 +#else +#define CONFIG_NETWORK_LAYER_BLE 0 +#endif + +#define CHIP_ENABLE_CHIPOBLE_TEST 0 + +#ifndef CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM +#define BLE_PLATFORM_CONFIG_INCLUDE +#endif +") + +# Generating core/CHIPBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/core/CHIPBuildConfig.h +"#pragma once\n +#include \n +#define CHIP_FUZZING_ENABLED 0 + +#ifdef CONFIG_BUILD_CHIP_TESTS +#define CHIP_CONFIG_TEST 1 +#else +#define CHIP_CONFIG_TEST 0 +#endif + +#define CHIP_ERROR_LOGGING (CONFIG_LOG_DEFAULT_LEVEL >= 1) +#define CHIP_PROGRESS_LOGGING (CONFIG_LOG_DEFAULT_LEVEL >= 3) +#define CHIP_DETAIL_LOGGING (CONFIG_LOG_DEFAULT_LEVEL >= 4) +#define CHIP_CONFIG_LOG_MESSAGE_MAX_SIZE 256 +#define CHIP_AUTOMATION_LOGGING (CONFIG_LOG_DEFAULT_LEVEL >= 5) +#define CHIP_PW_TOKENIZER_LOGGING 0 +#define CHIP_USE_PW_LOGGING 0 +#define CHIP_CONFIG_SHORT_ERROR_STR 1 +#define CHIP_CONFIG_ENABLE_ARG_PARSER 1 +#define CHIP_TARGET_STYLE_UNIX 0 +#define CHIP_TARGET_STYLE_EMBEDDED 1 +#define CHIP_CONFIG_MEMORY_MGMT_MALLOC 1 +#define HAVE_MALLOC 1 +#define HAVE_FREE 1 +#define HAVE_NEW 0 +#define CHIP_CONFIG_MEMORY_MGMT_PLATFORM 0 +#define CHIP_CONFIG_MEMORY_DEBUG_CHECKS 0 +#define CHIP_CONFIG_MEMORY_DEBUG_DMALLOC 0 +#define CHIP_CONFIG_PROVIDE_OBSOLESCENT_INTERFACES 0 +#define CHIP_CONFIG_TRANSPORT_TRACE_ENABLED 0 +#define CHIP_CONFIG_TRANSPORT_PW_TRACE_ENABLED 0 +#define CHIP_CONFIG_MINMDNS_DYNAMIC_OPERATIONAL_RESPONDER_LIST 0 +#define CHIP_CONFIG_MINMDNS_MAX_PARALLEL_RESOLVES 2 +#define CHIP_CONFIG_CANCELABLE_HAS_INFO_STRING_FIELD 0 +#define CHIP_CONFIG_BIG_ENDIAN_TARGET 0 +") + +# Generating crypto/CryptoBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/crypto/CryptoBuildConfig.h +"#pragma once\n +#include \n +#define CHIP_CRYPTO_MBEDTLS 1 +#define CHIP_CRYPTO_PSA 0 +#define CHIP_CRYPTO_OPENSSL 0 +#define CHIP_CRYPTO_BORINGSSL 0 +#define CHIP_CRYPTO_PLATFORM 0 +") + +# Generating inet/InetBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/inet/InetBuildConfig.h +"#pragma once\n +#include \n +#define INET_CONFIG_TEST 0 + +#ifdef CONFIG_DISABLE_IPV4 +#define INET_CONFIG_ENABLE_IPV4 0 +#else +#define INET_CONFIG_ENABLE_IPV4 1 +#endif + +#define INET_CONFIG_ENABLE_TCP_ENDPOINT 1 +#define INET_CONFIG_ENABLE_UDP_ENDPOINT 1 +#define HAVE_LWIP_RAW_BIND_NETIF 1 + +#ifndef CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM +#define INET_PLATFORM_CONFIG_INCLUDE +#endif + +#define INET_TCP_END_POINT_IMPL_CONFIG_FILE +#define INET_UDP_END_POINT_IMPL_CONFIG_FILE +") + +# Generating lwip/lwip_buildconfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/lwip/lwip_buildconfig.h +"#pragma once\n +#include \n +#define HAVE_LWIP_UDP_BIND_NETIF 1 +") + +# Generating matter/tracing/build_config.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/matter/tracing/build_config.h +"#pragma once\n +#include \n +#ifdef CONFIG_ENABLE_ESP_INSIGHTS_TRACE +#define MATTER_TRACING_ENABLED 1 +#else +#define MATTER_TRACING_ENABLED 0 +#endif +") + +# Generating platform/CHIPDeviceBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/platform/CHIPDeviceBuildConfig.h +"#pragma once\n +#include \n + +#if defined(CONFIG_ENABLE_WIFI_STATION) || defined(CONFIG_ENABLE_WIFI_AP) +#define CHIP_DEVICE_CONFIG_ENABLE_WPA 1 +#else +#define CHIP_DEVICE_CONFIG_ENABLE_WPA 0 +#endif + +#ifdef CONFIG_ENABLE_MATTER_OVER_THREAD +#define CHIP_ENABLE_OPENTHREAD 1 +#else +#define CHIP_ENABLE_OPENTHREAD 0 +#endif + +#ifdef CONFIG_OPENTHREAD_FTD +#define CHIP_DEVICE_CONFIG_THREAD_FTD 1 +#else +#define CHIP_DEVICE_CONFIG_THREAD_FTD 0 +#endif + +#define CHIP_STACK_LOCK_TRACKING_ENABLED 1 +#define CHIP_STACK_LOCK_TRACKING_ERROR_FATAL 1 + +#ifdef CONFIG_ENABLE_ROTATING_DEVICE_ID +#define CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING 1 +#else +#define CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING 0 +#endif + +#define CHIP_DEVICE_CONFIG_RUN_AS_ROOT 1 +#define CHIP_DISABLE_PLATFORM_KVS 0 + +#ifdef CONFIG_ENABLE_OTA_REQUESTOR +#define CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR 1 +#else +#define CHIP_DEVICE_CONFIG_ENABLE_OTA_REQUESTOR 0 +#endif + +#ifdef CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER +#define CHIP_USE_TRANSITIONAL_COMMISSIONABLE_DATA_PROVIDER 0 +#else +#define CHIP_USE_TRANSITIONAL_COMMISSIONABLE_DATA_PROVIDER 1 +#endif + +#define CHIP_USE_TRANSITIONAL_DEVICE_INSTANCE_INFO_PROVIDER 1 +#define CHIP_DEVICE_LAYER_TARGET_ESP32 1 + +#ifdef CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM +#define CHIP_DEVICE_PLATFORM_CONFIG_INCLUDE +#define BLE_PLATFORM_CONFIG_INCLUDE +#define CHIP_PLATFORM_CONFIG_INCLUDE +#define SYSTEM_PLATFORM_CONFIG_INCLUDE +#define CHIP_DEVICE_LAYER_TARGET ESP32_custom +#else +#define CHIP_DEVICE_PLATFORM_CONFIG_INCLUDE +#define CHIP_DEVICE_LAYER_TARGET ESP32 +#endif + +#define CHIP_DEVICE_CONFIG_MAX_DISCOVERED_IP_ADDRESSES 5 +") + +# Generating setup_payload/CHIPAdditionalDataPayloadBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/setup_payload/CHIPAdditionalDataPayloadBuildConfig.h +"#pragma once\n +#include \n +#ifdef CONFIG_ENABLE_ROTATING_DEVICE_ID +#define CHIP_ENABLE_ROTATING_DEVICE_ID 1 +#else +#define CHIP_ENABLE_ROTATING_DEVICE_ID 0 +#endif +") + +# Generating system/SystemBuildConfig.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/system/SystemBuildConfig.h +"#pragma once\n +#include \n +#define CONFIG_DEVICE_LAYER 1 + +#ifdef CONFIG_BUILD_CHIP_TESTS +#define CHIP_SYSTEM_CONFIG_TEST 1 +#define CHIP_WITH_NLFAULTINJECTION 1 +#else +#define CHIP_SYSTEM_CONFIG_TEST 0 +#define CHIP_WITH_NLFAULTINJECTION 0 +#endif + +#define CHIP_SYSTEM_CONFIG_USE_DISPATCH 0 +#define CHIP_SYSTEM_CONFIG_USE_LIBEV 0 +#define CHIP_SYSTEM_CONFIG_USE_LWIP 1 +#define CHIP_SYSTEM_CONFIG_USE_OPEN_THREAD_ENDPOINT 0 +#define CHIP_SYSTEM_CONFIG_USE_SOCKETS 0 +#define CHIP_SYSTEM_CONFIG_USE_NETWORK_FRAMEWORK 0 +#define CHIP_SYSTEM_CONFIG_POSIX_LOCKING 0 +#define CHIP_SYSTEM_CONFIG_FREERTOS_LOCKING 1 +#define CHIP_SYSTEM_CONFIG_MBED_LOCKING 0 +#define CHIP_SYSTEM_CONFIG_CMSIS_RTOS_LOCKING 0 +#define CHIP_SYSTEM_CONFIG_ZEPHYR_LOCKING 0 +#define CHIP_SYSTEM_CONFIG_NO_LOCKING 0 +#define CHIP_SYSTEM_CONFIG_PROVIDE_STATISTICS 1 +#define HAVE_CLOCK_GETTIME 1 +#define HAVE_CLOCK_SETTIME 1 +#define HAVE_GETTIMEOFDAY 0 +#define HAVE_SYS_TIME_H 1 +#define HAVE_NETINET_ICMP6_H 1 +#define HAVE_ICMP6_FILTER 1 +#define CONFIG_HAVE_VCBPRINTF 0 +#define CONFIG_HAVE_VSNPRINTF_EX 0 +#define HAVE_SYS_SOCKET_H 0 + +#ifndef CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM +#define CHIP_PLATFORM_CONFIG_INCLUDE +#define SYSTEM_PLATFORM_CONFIG_INCLUDE +#endif + +#define CHIP_SYSTEM_LAYER_IMPL_CONFIG_FILE +#define CHIP_SYSTEM_CONFIG_MULTICAST_HOMING 0 +") + +# Generating CHIPVersion.h +file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CHIPVersion.h +"/* + * + * Copyright (c) 2020 Project CHIP Authors + * All rights reserved. + * + * 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. + */ + +/** + * \@file + * This file defines constants and macros for introspecting and + * manipulating CHIP versions. + * + * The constants and macros defined here may be used to, for , + * example, conditionally-compile older, newer, or changed CHIP + * APIs based on the CHIP version. For example: + * + * \@code + * #if CHIP_VERSION_CODE >= CHIP_VERSION_CODE_ENCODE(1, 5, 0) + * ... + * #else + * ... + * #endif + * \@endcode + * + */ + +#pragma once + +#define _CHIP_VERSION_CODE_MAJOR_WIDTH 8 +#define _CHIP_VERSION_CODE_MINOR_WIDTH 8 +#define _CHIP_VERSION_CODE_PATCH_WIDTH 8 + +#define _CHIP_VERSION_CODE_MAJOR_MASK ((1 << _CHIP_VERSION_CODE_MAJOR_WIDTH) - 1) +#define _CHIP_VERSION_CODE_MINOR_MASK ((1 << _CHIP_VERSION_CODE_MINOR_WIDTH) - 1) +#define _CHIP_VERSION_CODE_PATCH_MASK ((1 << _CHIP_VERSION_CODE_PATCH_WIDTH) - 1) + +#define _CHIP_VERSION_CODE_MAJOR_SHIFT 24 +#define _CHIP_VERSION_CODE_MINOR_SHIFT 16 +#define _CHIP_VERSION_CODE_PATCH_SHIFT 8 + +/** + * \@def CHIP_VERSION_CODE_ENCODE(major, minor, patch) + * + * \@brief + * Encode a CHIP version code from its constituent \@a major, \@a minor, and \@a patch + * components. + * + * This macro may be used in conjunction with CHIP_VERSION_CODE to, for + * example, conditionally-compile older, newer, or changed CHIP APIs based + * on the CHIP version. For example: + * + * \@code + * #if CHIP_VERSION_CODE >= CHIP_VERSION_CODE_ENCODE(1, 5, 0) + * ... + * #else + * ... + * #endif + * \@endcode + * + */ +#define CHIP_VERSION_CODE_ENCODE(major, minor, patch) \ + ((((major) & _CHIP_VERSION_CODE_MAJOR_MASK) << _CHIP_VERSION_CODE_MAJOR_SHIFT) | \ + (((minor) & _CHIP_VERSION_CODE_MINOR_MASK) << _CHIP_VERSION_CODE_MINOR_SHIFT) | \ + (((patch) & _CHIP_VERSION_CODE_PATCH_MASK) << _CHIP_VERSION_CODE_PATCH_SHIFT)) + +/** + * \@def CHIP_VERSION_CODE_DECODE_MAJOR(code) + * + * \@brief + * Decode a CHIP major version component from a CHIP version \@a code. + * + */ +#define CHIP_VERSION_CODE_DECODE_MAJOR(code) (((code) >> _CHIP_VERSION_CODE_MAJOR_SHIFT) & _CHIP_VERSION_CODE_MAJOR_MASK) + +/** + * \@def CHIP_VERSION_CODE_DECODE_MINOR(code) + * + * \@brief + * Decode a CHIP minor version component from a CHIP version \@a code. + * + */ +#define CHIP_VERSION_CODE_DECODE_MINOR(code) (((code) >> _CHIP_VERSION_CODE_MINOR_SHIFT) & _CHIP_VERSION_CODE_MINOR_MASK) + +/** + * \@def CHIP_VERSION_CODE_DECODE_PATCH(code) + * + * \@brief + * Decode a CHIP patch version component from a CHIP version \@a code. + * + */ +#define CHIP_VERSION_CODE_DECODE_PATCH(code) (((code) >> _CHIP_VERSION_CODE_PATCH_SHIFT) & _CHIP_VERSION_CODE_PATCH_MASK) + +/** + * \@def CHIP_VERSION_MAJOR + * + * \@brief + * The CHIP version major component, as an unsigned integer. + * + */ +#define CHIP_VERSION_MAJOR 0 + +/** + * \@def CHIP_VERSION_MINOR + * + * \@brief + * The CHIP version minor component, as an unsigned integer. + * + */ +#define CHIP_VERSION_MINOR 0 + +/** + * \@def CHIP_VERSION_PATCH + * + * \@brief + * The CHIP version patch component, as an unsigned integer. + * + */ +#define CHIP_VERSION_PATCH 0 + +/** + * \@def CHIP_VERSION_EXTRA + * + * \@brief + * The CHIP version extra component, as a quoted C string. + * + */ +#define CHIP_VERSION_EXTRA \"\" + +/** + * \@def CHIP_VERSION_STRING + * + * \@brief + * The CHIP version, as a quoted C string. + * + */ +#define CHIP_VERSION_STRING \"0.0.0\" + +/** + * \@def CHIP_VERSION_CODE + * + * \@brief + * The CHIP version, including the major, minor, and patch components, + * encoded as an unsigned integer. + * + * This macro may be used in conjunction with CHIP_VERSION_CODE_ENCODE + * to, for example, conditionally-compile older, newer, or changed CHIP + * APIs based on the CHIP version. For example: + * + * \@code + * #if CHIP_VERSION_CODE >= CHIP_VERSION_CODE_ENCODE(1, 5, 0) + * ... + * #else + * ... + * #endif + * \@endcode + * + */ +#define CHIP_VERSION_CODE CHIP_VERSION_CODE_ENCODE(CHIP_VERSION_MAJOR, CHIP_VERSION_MINOR, CHIP_VERSION_PATCH) +") diff --git a/idf_component.yml b/idf_component.yml new file mode 100644 index 000000000..ebad2a2b7 --- /dev/null +++ b/idf_component.yml @@ -0,0 +1,94 @@ +## IDF Component Manager Manifest File +version: 0.0.1 +description: Espressif's Matter SDK Component +url: https://github.com/espressif/esp-matter +files: + exclude: + - "**/*" + include: + - "./CMakeLists.txt" + - "./Kconfig" + - "./LICENSE" + - "./generate-include-files.cmake" + - "./ota-image.cmake" + - "./README.md" + - "./components/**/*" + - "./connectedhomeip/connectedhomeip/config/esp32/components/chip/Kconfig" + - "./connectedhomeip/connectedhomeip/config/esp32/components/chip/ota-image.cmake" + - "./connectedhomeip/connectedhomeip/src/access/*.*" + - "./connectedhomeip/connectedhomeip/src/access/examples/*.*" + - "./connectedhomeip/connectedhomeip/src/app/*.*" + - "./connectedhomeip/connectedhomeip/src/app/app-platform/**/*" + - "./connectedhomeip/connectedhomeip/src/app/clusters/**/*" + - "./connectedhomeip/connectedhomeip/src/app/data-model/**/*" + - "./connectedhomeip/connectedhomeip/src/app/dynamic_server/**/*" + - "./connectedhomeip/connectedhomeip/src/app/icd/**/*" + - "./connectedhomeip/connectedhomeip/src/app/MessageDef/**/*" + - "./connectedhomeip/connectedhomeip/src/app/reporting/**/*" + - "./connectedhomeip/connectedhomeip/src/app/server/**/*" + - "./connectedhomeip/connectedhomeip/src/app/util/**/*" + - "./connectedhomeip/connectedhomeip/src/ble/*.*" + - "./connectedhomeip/connectedhomeip/src/controller/*.*" + - "./connectedhomeip/connectedhomeip/src/controller/python/chip/tlv/*.*" + - "./connectedhomeip/connectedhomeip/src/credentials/*.*" + - "./connectedhomeip/connectedhomeip/src/credentials/attestation_verifier/**/*" + - "./connectedhomeip/connectedhomeip/src/credentials/examples/**/*" + - "./connectedhomeip/connectedhomeip/src/credentials/tests/CHIPAttCert_test_vectors.*" + - "./connectedhomeip/connectedhomeip/src/crypto/*.*" + - "./connectedhomeip/connectedhomeip/src/include/**/*" + - "./connectedhomeip/connectedhomeip/src/inet/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/address_resolve/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/asn1/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/core/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/dnssd/**/*" + - "./connectedhomeip/connectedhomeip/src/lib/shell/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/shell/commands/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/support/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/support/logging/*.*" + - "./connectedhomeip/connectedhomeip/src/lib/support/verhoeff/*.*" + - "./connectedhomeip/connectedhomeip/src/messaging/*.*" + - "./connectedhomeip/connectedhomeip/src/platform/*.*" + - "./connectedhomeip/connectedhomeip/src/platform/ESP32/**/*" + - "./connectedhomeip/connectedhomeip/src/platform/logging/*.*" + - "./connectedhomeip/connectedhomeip/src/platform/OpenThread/**/*" + - "./connectedhomeip/connectedhomeip/src/protocols/**/*" + - "./connectedhomeip/connectedhomeip/src/setup_payload/*.*" + - "./connectedhomeip/connectedhomeip/src/system/*.*" + - "./connectedhomeip/connectedhomeip/src/tracing/*.*" + - "./connectedhomeip/connectedhomeip/src/tracing/esp32_trace/**/*" + - "./connectedhomeip/connectedhomeip/src/transport/*.*" + - "./connectedhomeip/connectedhomeip/src/transport/raw/**/*" + - "./connectedhomeip/connectedhomeip/third_party/nlassert/repo/include/**/*" + - "./connectedhomeip/connectedhomeip/third_party/nlfaultinjection/include/**/*" + - "./connectedhomeip/connectedhomeip/third_party/nlfaultinjection/src/**/*" + - "./connectedhomeip/connectedhomeip/third_party/nlio/repo/include/**/*" + - "./connectedhomeip/connectedhomeip/zzz_generated/app-common/**/*" +dependencies: + espressif/mdns: + version: "^1.1.0" + rules: + - if: "idf_version >=5.0" + - if: "target != esp32h2" + + espressif/esp_secure_cert_mgr: + version: "^2.3.0" + rules: + - if: "idf_version >=4.3" + + espressif/esp_encrypted_img: + version: "2.1.0" + require: public + rules: + - if: "idf_version >=4.4" + + espressif/esp_insights: + version: "1.0.1" + require: public + # There is an issue with IDF-Component-Manager when ESP Insights is included. + # Issue: https://github.com/project-chip/connectedhomeip/issues/29125 + rules: + - if: "idf_version >=5.0" + - if: "target != esp32h2" + + espressif/json_parser: "~1.0.0" + espressif/json_generator: "~1.1.0"