diff --git a/README.md b/README.md index 24f7bb0..bf586fe 100644 --- a/README.md +++ b/README.md @@ -134,18 +134,29 @@ descriptor, access-control, diagnostics, and the ESP-Matter internal Binding manager are retained because the server requires them; unrelated device-type clusters, Thread, OTA, and the Matter shell are excluded. -Matter and the legacy `gateway_ble` transport both own the NimBLE host. While -Matter is enabled, the app does not start the legacy BLE GATT bridge; USB, -Ethernet, Wi-Fi, KNX, Modbus, BACnet, and the portable DALI behavior remain in -their existing components. ESP-Matter's Ethernet platform path is compiled so +CHIP owns the single NimBLE controller and host while Matter is enabled. The +legacy `gateway_ble` transport registers its distinct FFF7 service in CHIP's +GATT database through ESP-Matter's extra-service hook, and adds the FFF7 UUID plus +gateway name to the Matter scan response. A passive GAP listener tracks gateway +subscriptions without replacing CHIP's callbacks. Matter commissioning +advertising and gateway BLE therefore coexist; after Matter advertising stops, +the gateway continues advertising from the same host. CHIP's BLE endpoint pool +matches NimBLE's four-connection capacity so a gateway client does not make +Matter commissioning advertising non-connectable. NimBLE also publishes the +standard GATT Database Hash so clients can invalidate the former standalone +gateway attribute table after firmware updates. USB, Ethernet, Wi-Fi, +KNX, Modbus, BACnet, and the portable DALI behavior remain in their existing +components. ESP-Matter's Ethernet platform path is compiled so CHIP receives Ethernet address events, while its Ethernet Network Commissioning -driver stays disabled because wired Ethernet needs no credentials. Standard -Matter Wi-Fi Network Commissioning remains compiled. Separately, the gateway's -ESP-Touch SmartConfig path starts only through the configured long-press button; -it is disabled at startup. When both interfaces have addresses, -`gateway_network` selects Ethernet as the default route. The project -build omits ESP-Matter's unused internal-EMAC commissioning source because the -ESP32-S3 gateway's W5500 lifecycle remains owned by `gateway_network`. +driver stays disabled because wired Ethernet needs no credentials. +`CONFIG_CUSTOM_NETWORK_CONFIG` removes the root-node Network Commissioning +cluster and CHIP's Wi-Fi station platform. The gateway's station-only ESP-Touch +SmartConfig path starts only through the configured long-press button; it is +disabled at startup, and SoftAP support is compiled out. When both interfaces +have addresses, `gateway_network` selects Ethernet as the default route. The +project build also omits ESP-Matter's unused network-commissioning integration +source because the ESP32-S3 gateway's W5500 and Wi-Fi lifecycles remain owned by +`gateway_network`. This configuration is development-only. The ESP-Matter factory, device instance, DAC, and commissionable-data providers read the normal `nvs` diff --git a/apps/gateway/CMakeLists.txt b/apps/gateway/CMakeLists.txt index 5a621d7..100a812 100644 --- a/apps/gateway/CMakeLists.txt +++ b/apps/gateway/CMakeLists.txt @@ -13,6 +13,23 @@ set(EXTRA_COMPONENT_DIRS include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(gateway_app) +# CHIP defaults its BLE endpoint pool to one even when NimBLE accepts more +# connections. The gateway service consumes a GAP connection without creating +# a CHIPoBLE endpoint, but CHIP still counts that connection when deciding +# whether commissioning advertising can remain connectable. Keep both targets +# on the same four-connection capacity so Matter and one gateway client can be +# active together. +if(CONFIG_GATEWAY_MATTER_SUPPORTED AND CONFIG_ENABLE_CHIPOBLE) + idf_component_get_property(esp_matter_lib espressif__esp_matter COMPONENT_LIB) + idf_component_get_property(gateway_ble_lib gateway_ble COMPONENT_LIB) + target_compile_definitions( + ${esp_matter_lib} PRIVATE + BLE_LAYER_NUM_BLE_ENDPOINTS=${CONFIG_BT_NIMBLE_MAX_CONNECTIONS}) + target_compile_definitions( + ${gateway_ble_lib} PRIVATE + BLE_LAYER_NUM_BLE_ENDPOINTS=${CONFIG_BT_NIMBLE_MAX_CONNECTIONS}) +endif() + # CONFIG_ENABLE_ETHERNET_TELEMETRY is ESP-Matter's switch for the CHIP # Ethernet connectivity implementation. Its component also compiles the # internal-EMAC commissioning driver unconditionally, even when that driver is @@ -26,3 +43,16 @@ if(CONFIG_ENABLE_ETHERNET_TELEMETRY AND "/NetworkCommissioningDriver_Ethernet\\.cpp$") set_property(TARGET ${esp_matter_lib} PROPERTY SOURCES ${esp_matter_sources}) endif() + +# ESP-Matter 1.5.1 still compiles this integration unit when +# CONFIG_CUSTOM_NETWORK_CONFIG has removed the Network Commissioning cluster. +# The unused unit then rejects a configuration with no CHIP commissioning +# driver. The gateway commissions Wi-Fi out-of-band via its long-press +# SmartConfig path, so omit the integration together with the cluster. +if(CONFIG_CUSTOM_NETWORK_CONFIG) + idf_component_get_property(esp_matter_lib espressif__esp_matter COMPONENT_LIB) + get_target_property(esp_matter_sources ${esp_matter_lib} SOURCES) + list(FILTER esp_matter_sources EXCLUDE REGEX + "/network_commissioning_integration\\.cpp$") + set_property(TARGET ${esp_matter_lib} PROPERTY SOURCES ${esp_matter_sources}) +endif() diff --git a/apps/gateway/dependencies.lock b/apps/gateway/dependencies.lock index a5144a0..6e9af75 100644 --- a/apps/gateway/dependencies.lock +++ b/apps/gateway/dependencies.lock @@ -1,6 +1,6 @@ dependencies: espressif/cbor: - component_hash: + component_hash: dad9ca860963e930366510a10b422b3125a4fb27b979712ed65efcbcd742de50 dependencies: - name: idf @@ -11,7 +11,7 @@ dependencies: type: service version: 0.6.1~4 espressif/cjson: - component_hash: + component_hash: e788323270d90738662d66fffa910bfe1fba019bba087f01557e70c40485b469 dependencies: - name: idf @@ -22,7 +22,7 @@ dependencies: type: service version: 1.7.19~2 espressif/esp-serial-flasher: - component_hash: + component_hash: dcc42a16712a1a636509cf0bf90e14032d7f2141784b533613b267b6aa318d52 dependencies: [] source: @@ -30,7 +30,7 @@ dependencies: type: service version: 0.0.11 espressif/esp_delta_ota: - component_hash: + component_hash: 147161b602ef51e9f6649eb6d90c4d4ac3c94228cb264fa0e68be7877180462d dependencies: - name: idf @@ -41,7 +41,7 @@ dependencies: type: service version: 1.1.4 espressif/esp_diag_data_store: - component_hash: + component_hash: 1967397300fbea608f688f71365b298a613eed48b694ee236cc60e6d06fda086 dependencies: - name: idf @@ -52,7 +52,7 @@ dependencies: type: service version: 1.1.1 espressif/esp_diagnostics: - component_hash: + component_hash: f91cd5bd3d6a9be134d7196bdecd5336825ab3fa37eab482647b07a6dabaa842 dependencies: - name: espressif/rmaker_common @@ -67,7 +67,7 @@ dependencies: type: service version: 1.3.4 espressif/esp_encrypted_img: - component_hash: + component_hash: e5a065c140fbc6a69a1de4fa1731b7596cc34a4a50b57913b2dc34c9ad3a0a70 dependencies: - name: idf @@ -78,7 +78,7 @@ dependencies: type: service version: 2.3.0 espressif/esp_insights: - component_hash: + component_hash: 102d0a141d5123a5ebb827832f73fcc4135aefed6c38fca98e7b655bd18735c5 dependencies: - name: espressif/cbor @@ -105,7 +105,7 @@ dependencies: type: service version: 1.3.4 espressif/esp_matter: - component_hash: + component_hash: d7db95c3fdd162a3a378f48c11257ded9fcdc59d18caa58d936a2cac327d1796 dependencies: - name: espressif/esp_delta_ota @@ -170,7 +170,7 @@ dependencies: type: service version: 1.5.1 espressif/esp_rcp_update: - component_hash: + component_hash: 37f535edd527a45faeaad649c0c56af36e5399074e52d83f0990fce466844dde dependencies: - name: espressif/esp-serial-flasher @@ -185,7 +185,7 @@ dependencies: type: service version: 1.3.1 espressif/esp_secure_cert_mgr: - component_hash: + component_hash: 0b83e150f48d6839f0a0a8753850be55a51cc298cfca7658f21d355d5f41dd67 dependencies: - name: idf @@ -196,7 +196,7 @@ dependencies: type: service version: 2.9.3 espressif/esp_tinyusb: - component_hash: + component_hash: 9a73a76a6bc17907f6e523342ff6b1e440023e8aac2c11f4691212106ec24e66 dependencies: - name: idf @@ -217,7 +217,7 @@ dependencies: - esp32s31 version: 2.2.1 espressif/jsmn: - component_hash: + component_hash: d80350c41bbaa827c98a25b6072df00884e72f54885996fab4a4f0aebce6b6c3 dependencies: - name: idf @@ -228,7 +228,7 @@ dependencies: type: service version: 1.1.0 espressif/json_generator: - component_hash: + component_hash: 45033e1c199b13f1c8c1b544fb7d4e2df6a8e3071ebdcb1b22582b61a7974ff2 dependencies: [] source: @@ -236,7 +236,7 @@ dependencies: type: service version: 1.1.2 espressif/json_parser: - component_hash: + component_hash: d74b81729ad06ec11ff5eb5b1b0d7df1d00e6027fc11471f4b139c70dcf1b1e4 dependencies: - name: espressif/jsmn @@ -250,7 +250,7 @@ dependencies: type: service version: 1.0.3 espressif/mdns: - component_hash: + component_hash: e81ca7a7f53ea34e78274df054da692c272e1315572876b237b1748e267c013b dependencies: - name: idf @@ -261,7 +261,7 @@ dependencies: type: service version: 1.11.3 espressif/mqtt: - component_hash: + component_hash: ffdad5659706b4dc14bc63f8eb73ef765efa015bf7e9adf71c813d52a2dc9342 dependencies: - name: idf @@ -272,7 +272,7 @@ dependencies: type: service version: 1.0.0 espressif/rmaker_cmd_resp: - component_hash: + component_hash: 343ccd5d3a2789ecb241f9de5ac7f67fc39db126c1af139116a20c9a6e3669f3 dependencies: - name: idf @@ -283,7 +283,7 @@ dependencies: type: service version: 1.0.0 espressif/rmaker_common: - component_hash: + component_hash: 276ee0baf9552805bf66a3e34a19cf38df6f5a7b167c47bf215b7196e03ef1fc dependencies: - name: espressif/mqtt @@ -324,7 +324,7 @@ dependencies: type: service version: 1.8.5 espressif/rmaker_common_events: - component_hash: + component_hash: ced95feff88c368e6306ff67ff3696ac76a5273de9fe1f907a7c115d4370fe6e dependencies: - name: idf @@ -335,7 +335,7 @@ dependencies: type: service version: 1.0.0 espressif/rmaker_console: - component_hash: + component_hash: 24af13dad8da5ca7219203f7d6f37e888246d5adc8910ea3e018fac84492ab9b dependencies: - name: espressif/rmaker_system_ctrl @@ -354,7 +354,7 @@ dependencies: type: service version: 1.0.0 espressif/rmaker_system_ctrl: - component_hash: + component_hash: b4208fbc7e99b30fb1d272cbd30e578327079a6495499d12fb466b6c2fc0d899 dependencies: - name: espressif/rmaker_common_events @@ -369,7 +369,7 @@ dependencies: type: service version: 1.0.0 espressif/rmaker_time_sync: - component_hash: + component_hash: 5797d2fcd903cad6e9142981e1d0602d7b5efa2c9197a72da8d2e05be7ef568b dependencies: - name: espressif/rmaker_common_events @@ -384,7 +384,7 @@ dependencies: type: service version: 1.0.2 espressif/rmaker_work_queue: - component_hash: + component_hash: 7d2a9ee4e0343eb36e1816e987dde7babe892b99873c8dc5bae15e647a0e4028 dependencies: - name: idf diff --git a/apps/gateway/main/app_main.cpp b/apps/gateway/main/app_main.cpp index d65ba3b..eb4a138 100644 --- a/apps/gateway/main/app_main.cpp +++ b/apps/gateway/main/app_main.cpp @@ -380,7 +380,7 @@ constexpr bool kEthernetStartupEnabled = true; constexpr bool kEthernetStartupEnabled = false; #endif -#if defined(CONFIG_GATEWAY_BLE_SUPPORTED) && !defined(CONFIG_GATEWAY_MATTER_SUPPORTED) +#ifdef CONFIG_GATEWAY_BLE_SUPPORTED constexpr bool kBleSupported = true; #else constexpr bool kBleSupported = false; @@ -1493,8 +1493,9 @@ extern "C" void app_main(void) { ESP_ERROR_CHECK(s_network->start()); } - if (s_bridge != nullptr) { - ESP_ERROR_CHECK(s_bridge->start()); + if (profile.enable_ble) { + s_ble_bridge = std::make_unique( + *s_controller, *s_runtime, *s_dali_domain); } if (kMatterSupported) { @@ -1518,14 +1519,30 @@ extern "C" void app_main(void) { return s_network != nullptr ? s_network->startWifiProvisioning() : ESP_ERR_NOT_SUPPORTED; }; + if (s_ble_bridge != nullptr) { + matter_config.ble_prepare_callback = []() { + return s_ble_bridge->prepareSharedNimble(); + }; + matter_config.ble_attach_callback = []() { + return s_ble_bridge->attachSharedNimble(); + }; + matter_config.ble_advertising_changed_callback = [](bool advertising) { + s_ble_bridge->handleMatterAdvertisingChange(advertising); + }; + } s_matter_bridge = std::make_unique(*s_dali_domain, matter_config); ESP_ERROR_CHECK(s_matter_bridge->start()); } - if (profile.enable_ble) { - s_ble_bridge = std::make_unique(*s_controller, *s_runtime, - *s_dali_domain); + // ESP-Matter needs several contiguous internal allocations for the CHIP + // event queue and event-loop task. Start it before the allocation-heavy KNX + // bridge to avoid fragmenting that reserved heap. + if (s_bridge != nullptr) { + ESP_ERROR_CHECK(s_bridge->start()); + } + + if (s_ble_bridge != nullptr && !kMatterSupported) { ESP_ERROR_CHECK(s_ble_bridge->start()); } diff --git a/apps/gateway/sdkconfig b/apps/gateway/sdkconfig index f3827b3..74d753a 100644 --- a/apps/gateway/sdkconfig +++ b/apps/gateway/sdkconfig @@ -1022,8 +1022,15 @@ CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=256 CONFIG_BT_NIMBLE_ATT_MAX_PREP_ENTRIES=64 CONFIG_BT_NIMBLE_GATT_MAX_PROCS=4 # CONFIG_BT_NIMBLE_BLE_GATT_BLOB_TRANSFER is not set -# CONFIG_BT_NIMBLE_GATT_CACHING is not set -# CONFIG_BT_NIMBLE_INCL_SVC_DISCOVERY is not set +CONFIG_BT_NIMBLE_GATT_CACHING=y +# CONFIG_BT_NIMBLE_GATT_CACHING_INCLUDE_SERVICES is not set +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CONNS=4 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_SVCS=8 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_INCL_SVCS=4 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CHRS=16 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_DSCS=16 +# CONFIG_BT_NIMBLE_GATT_CACHING_DISABLE_AUTO is not set +# CONFIG_BT_NIMBLE_GATT_CACHING_ASSOC_ENABLE is not set # end of GATT / ATT # @@ -1130,7 +1137,7 @@ CONFIG_BT_NIMBLE_SVC_GAP_PPCP_SUPERVISION_TMO=0 # # Extra Features # -# CONFIG_BT_NIMBLE_DYNAMIC_SERVICE is not set +CONFIG_BT_NIMBLE_DYNAMIC_SERVICE=y # CONFIG_BT_NIMBLE_BLUFI_ENABLE is not set # CONFIG_BT_NIMBLE_ENC_ADV_DATA is not set # CONFIG_BT_NIMBLE_ADV_UUID_CONCAT is not set @@ -2048,7 +2055,7 @@ CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=y CONFIG_ESP_WIFI_TX_BA_WIN=6 CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP_WIFI_RX_BA_WIN=6 -CONFIG_ESP_WIFI_NVS_ENABLED=y +# CONFIG_ESP_WIFI_NVS_ENABLED is not set # CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0 is not set CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1=y CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 @@ -2059,7 +2066,6 @@ CONFIG_ESP_WIFI_RX_IRAM_OPT=y CONFIG_ESP_WIFI_ENABLE_WPA3_SAE=y CONFIG_ESP_WIFI_ENABLE_SAE_PK=y CONFIG_ESP_WIFI_ENABLE_SAE_H2E=y -CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 @@ -2070,7 +2076,7 @@ CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y # CONFIG_ESP_WIFI_GCMP_SUPPORT is not set CONFIG_ESP_WIFI_GMAC_SUPPORT=y -CONFIG_ESP_WIFI_SOFTAP_SUPPORT=y +# CONFIG_ESP_WIFI_SOFTAP_SUPPORT is not set # CONFIG_ESP_WIFI_SLP_BEACON_LOST_OPT is not set CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM=7 CONFIG_ESP_WIFI_MBEDTLS_CRYPTO=y @@ -2081,7 +2087,6 @@ CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT=y # 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 @@ -3066,8 +3071,8 @@ CONFIG_MAX_GROUPS_PER_FABRIC_PER_ENDPOINT=4 CONFIG_MAX_GROUP_KEYS_PER_FABRIC=3 # CONFIG_CHIP_DEVICE_ENABLE_DYNAMIC_SERVER is not set # CONFIG_CHIP_MEM_ALLOC_MODE_INTERNAL is not set -# CONFIG_CHIP_MEM_ALLOC_MODE_EXTERNAL is not set -CONFIG_CHIP_MEM_ALLOC_MODE_DEFAULT=y +CONFIG_CHIP_MEM_ALLOC_MODE_EXTERNAL=y +# CONFIG_CHIP_MEM_ALLOC_MODE_DEFAULT is not set # end of General Options # @@ -3130,13 +3135,7 @@ CONFIG_DEVICE_TYPE=0 # # WiFi Station Options # -CONFIG_ENABLE_WIFI_STATION=y -CONFIG_DEFAULT_WIFI_SSID="" -CONFIG_DEFAULT_WIFI_PASSWORD="" -CONFIG_WIFI_STATION_RECONNECT_INTERVAL=100 -CONFIG_MAX_SCAN_NETWORKS_RESULTS=10 -CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT=10000 -CONFIG_WIFI_CONNECTIVITY_TIMEOUT=30000 +# CONFIG_ENABLE_WIFI_STATION is not set # end of WiFi Station Options # @@ -3148,9 +3147,9 @@ CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN=40 CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX=40 CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN=800 CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX=800 -CONFIG_CHIPOBLE_SINGLE_CONNECTION=y +# CONFIG_CHIPOBLE_SINGLE_CONNECTION is not set CONFIG_CHIPOBLE_ENABLE_ADVERTISING_AUTOSTART=0 -CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING=y +# CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING is not set # end of BLE Options # @@ -3275,8 +3274,6 @@ CONFIG_MRP_MAX_RETRANS=4 # # Network Commissioning Driver Endpoint Id # -CONFIG_WIFI_NETWORK_COMMISSIONING_DRIVER=y -CONFIG_WIFI_NETWORK_ENDPOINT_ID=0 # CONFIG_ETHERNET_NETWORK_COMMISSIONING_DRIVER is not set # end of Network Commissioning Driver Endpoint Id @@ -3311,8 +3308,8 @@ CONFIG_ESP_MATTER_MODE_SELECT_CLUSTER_ENDPOINT_COUNT=0 CONFIG_ESP_MATTER_TEMPERATURE_CONTROL_CLUSTER_ENDPOINT_COUNT=0 CONFIG_ESP_MATTER_SCENES_TABLE_SIZE=16 CONFIG_ESP_MATTER_BINDING_TABLE_SIZE=10 -CONFIG_ESP_MATTER_MEM_ALLOC_MODE_INTERNAL=y -# CONFIG_ESP_MATTER_MEM_ALLOC_MODE_EXTERNAL is not set +# CONFIG_ESP_MATTER_MEM_ALLOC_MODE_INTERNAL is not set +CONFIG_ESP_MATTER_MEM_ALLOC_MODE_EXTERNAL=y # CONFIG_ESP_MATTER_MEM_ALLOC_MODE_DEFAULT is not set CONFIG_ESP_MATTER_ENABLE_DATA_MODEL=y CONFIG_ESP_MATTER_ENABLE_MATTER_SERVER=y @@ -3865,7 +3862,7 @@ CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED=y CONFIG_ESP32_WIFI_TX_BA_WIN=6 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=6 -CONFIG_ESP32_WIFI_NVS_ENABLED=y +# CONFIG_ESP32_WIFI_NVS_ENABLED is not set # CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 is not set CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1=y CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 @@ -3882,7 +3879,6 @@ CONFIG_WPA_MBEDTLS_TLS_CLIENT=y # 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_ESP32_ENABLE_COREDUMP_TO_FLASH is not set diff --git a/apps/gateway/sdkconfig.defaults b/apps/gateway/sdkconfig.defaults index bff6eb2..6214e58 100644 --- a/apps/gateway/sdkconfig.defaults +++ b/apps/gateway/sdkconfig.defaults @@ -21,8 +21,9 @@ CONFIG_GATEWAY_ETHERNET_IGNORE_INIT_FAILURE=y CONFIG_GATEWAY_KNX_DATA_SECURE_SUPPORTED=y CONFIG_TINYUSB_HID_COUNT=1 -# Matter-to-DALI development bridge. Matter owns NimBLE in this build; wired -# Ethernet remains the default route and Wi-Fi starts only when provisioned. +# Matter-to-DALI development bridge. CHIP owns the single NimBLE host while the +# Matter commissioning and legacy gateway GATT services share its database. +# Wired Ethernet remains the default route and Wi-Fi starts only when provisioned. CONFIG_GATEWAY_MATTER_SUPPORTED=y CONFIG_GATEWAY_MATTER_MAX_BRIDGED_DEVICES=16 CONFIG_GATEWAY_MATTER_SCAN_START_DELAY_MS=2000 @@ -32,13 +33,38 @@ CONFIG_GATEWAY_MATTER_WIFI_PROVISION_BUTTON_GPIO=-1 CONFIG_ESP_MATTER_ENABLE_MATTER_SERVER=y CONFIG_ESP_MATTER_ENABLE_DATA_MODEL=y CONFIG_ESP_MATTER_ENABLE_OPENTHREAD=n +# Keep the large CHIP core and ESP-Matter data model in PSRAM so the internal +# heap retains a contiguous block for the FreeRTOS event queue and radio/DMA +# allocations. The queue itself keeps Espressif's Wi-Fi-safe default length. +CONFIG_CHIP_MEM_ALLOC_MODE_EXTERNAL=y +CONFIG_ESP_MATTER_MEM_ALLOC_MODE_EXTERNAL=y +# Preserve enough internal/DMA-capable RAM for gateway Wi-Fi RX buffers when +# ESP-Touch is requested; app_main starts Matter before the allocation-heavy +# KNX bridge so CHIP can obtain its queue and event-loop stack first. +CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65535 CONFIG_ESP_MATTER_MAX_DYNAMIC_ENDPOINT_COUNT=18 CONFIG_ESP_MATTER_AGGREGATOR_ENDPOINT_COUNT=1 CONFIG_ESP_MATTER_NVS_PART_NAME="nvs" CONFIG_ESP_MATTER_BRIDGE_INFO_PART_NAME="nvs" CONFIG_CUSTOM_NETWORK_CONFIG=y -CONFIG_ENABLE_WIFI_STATION=y +# Matter uses the already-configured W5500 interface under CustomNetworkConfig. +# gateway_network owns Wi-Fi station credentials and starts ESP-Touch +# SmartConfig only after the button is held; CHIP must not initialize Wi-Fi. +CONFIG_ENABLE_WIFI_STATION=n +CONFIG_ESP_WIFI_NVS_ENABLED=n +CONFIG_ESP_WIFI_SOFTAP_SUPPORT=n CONFIG_ENABLE_CHIPOBLE=y +CONFIG_CHIPOBLE_SINGLE_CONNECTION=n +CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING=n +CONFIG_BT_NIMBLE_MAX_CONNECTIONS=4 +# Publish the standard GATT Database Hash so CoreBluetooth can invalidate a +# cached pre-Matter gateway attribute table after firmware updates. +CONFIG_BT_NIMBLE_GATT_CACHING=y +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CONNS=4 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_SVCS=8 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_INCL_SVCS=4 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_CHRS=16 +CONFIG_BT_NIMBLE_GATT_CACHING_MAX_DSCS=16 CONFIG_ENABLE_CHIP_SHELL=n CONFIG_MBEDTLS_HKDF_C=y CONFIG_DEVICE_VENDOR_ID=0xFFF2 @@ -46,7 +72,8 @@ CONFIG_DEVICE_PRODUCT_ID=0x8001 CONFIG_TEST_EVENT_TRIGGER_ENABLED=n CONFIG_ENABLE_WIFI_TELEMETRY=n # Despite its legacy name, this option enables CHIP's ESP32 Ethernet platform -# path and event handling. Ethernet itself is initialized by gateway_network. +# event handling. Ethernet itself is initialized by gateway_network; the CHIP +# Ethernet commissioning driver only supports the internal EMAC, not W5500. CONFIG_ENABLE_ETHERNET_TELEMETRY=y CONFIG_ETHERNET_NETWORK_COMMISSIONING_DRIVER=n diff --git a/apps/gateway/sdkconfig.old b/apps/gateway/sdkconfig.old index 68484da..aa9e8b1 100644 --- a/apps/gateway/sdkconfig.old +++ b/apps/gateway/sdkconfig.old @@ -691,6 +691,12 @@ CONFIG_GATEWAY_CHANNEL1_NATIVE_BAUDRATE=1200 # # end of Gateway Channel 16 +# +# DALI Part 103 Application Controller +# +# CONFIG_GATEWAY_DALI_103_APPLICATION_CONTROLLER_ENABLED is not set +# end of DALI Part 103 Application Controller + # # Gateway Cache # @@ -719,6 +725,18 @@ CONFIG_GATEWAY_ESPNOW_SETUP_SUPPORTED=y CONFIG_GATEWAY_SMARTCONFIG_SUPPORTED=y # CONFIG_GATEWAY_START_ESPNOW_SETUP_ENABLED is not set # CONFIG_GATEWAY_START_SMARTCONFIG_ENABLED is not set + +# +# Matter-to-DALI Bridge +# +CONFIG_GATEWAY_MATTER_SUPPORTED=y +CONFIG_GATEWAY_MATTER_MAX_BRIDGED_DEVICES=16 +CONFIG_GATEWAY_MATTER_SCAN_START_DELAY_MS=2000 +CONFIG_GATEWAY_MATTER_SCAN_ADDRESS_DELAY_MS=20 +CONFIG_GATEWAY_MATTER_SCAN_TASK_STACK_SIZE=8192 +CONFIG_GATEWAY_MATTER_WIFI_PROVISION_BUTTON_GPIO=-1 +# end of Matter-to-DALI Bridge + CONFIG_GATEWAY_SMARTCONFIG_TIMEOUT_SEC=60 CONFIG_GATEWAY_ETHERNET_SUPPORTED=y CONFIG_GATEWAY_START_ETHERNET_ENABLED=y @@ -843,6 +861,7 @@ CONFIG_GATEWAY_BRIDGE_BACNET_TASK_PRIORITY=5 # CONFIG_GATEWAY_USB_STARTUP_DEBUG_JTAG=y # CONFIG_GATEWAY_USB_STARTUP_SETUP_SERIAL is not set +# CONFIG_GATEWAY_USB_STARTUP_TRIDONIC_HID is not set # end of USB Setup # @@ -858,6 +877,10 @@ CONFIG_GATEWAY_NETWORK_HTTP_ENABLED=y CONFIG_GATEWAY_NETWORK_HTTP_PORT=80 CONFIG_GATEWAY_NETWORK_UDP_ROUTER_ENABLED=y CONFIG_GATEWAY_NETWORK_UDP_PORT=2020 +CONFIG_GATEWAY_NETWORK_TCP_CONTROL_ENABLED=y +CONFIG_GATEWAY_NETWORK_TCP_CONTROL_PORT=2020 +CONFIG_GATEWAY_NETWORK_TCP_CONTROL_TASK_STACK_SIZE=4096 +CONFIG_GATEWAY_NETWORK_TCP_CONTROL_TASK_PRIORITY=4 CONFIG_GATEWAY_STATUS_LED_GPIO=-1 CONFIG_GATEWAY_BOOT_BUTTON_GPIO=0 CONFIG_GATEWAY_BOOT_BUTTON_ACTIVE_LOW=y @@ -2293,8 +2316,9 @@ CONFIG_LOG_IN_IRAM=y CONFIG_LWIP_ENABLE=y CONFIG_LWIP_LOCAL_HOSTNAME="espressif" CONFIG_LWIP_TCPIP_TASK_PRIO=18 -# CONFIG_LWIP_TCPIP_CORE_LOCKING is not set -# CONFIG_LWIP_CHECK_THREAD_SAFETY is not set +CONFIG_LWIP_TCPIP_CORE_LOCKING=y +# CONFIG_LWIP_TCPIP_CORE_LOCKING_INPUT is not set +CONFIG_LWIP_CHECK_THREAD_SAFETY=y CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y # CONFIG_LWIP_L2_TO_L3_COPY is not set # CONFIG_LWIP_IRAM_OPTIMIZATION is not set @@ -2610,7 +2634,7 @@ CONFIG_MBEDTLS_ECP_NIST_OPTIM=y # CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM is not set # CONFIG_MBEDTLS_POLY1305_C is not set # CONFIG_MBEDTLS_CHACHA20_C is not set -# CONFIG_MBEDTLS_HKDF_C is not set +CONFIG_MBEDTLS_HKDF_C=y # CONFIG_MBEDTLS_THREADING_C is not set CONFIG_MBEDTLS_ERROR_STRINGS=y CONFIG_MBEDTLS_FS_IO=y @@ -2919,13 +2943,15 @@ CONFIG_DALI_CUSTOM_HALF_BIT_TIME_X100_US=0 CONFIG_DALI_TX_STOP_CONDITION_US=0 CONFIG_DALI_RX_STOP_CONDITION_US=0 CONFIG_DALI_QUERY_RESPONSE_TIMEOUT_MS=30 -CONFIG_DALI_DOUBLE_SEND_DELAY_MS=20 +CONFIG_DALI_DOUBLE_SEND_DELAY_MS=30 CONFIG_DALI_FORWARD_ACTIVITY_WAIT_MS=20 CONFIG_DALI_FORWARD_AFTER_BACKWARD_WAIT_MS=10 CONFIG_DALI_FORWARD_MAX_WAIT_MS=50 CONFIG_DALI_BACKWARD_IDLE_TIMEOUT_MS=10 CONFIG_DALI_BUS_POWER_CHECK_INTERVAL_MS=500 +CONFIG_DALI_BUS_FAIL_EVENT_DELAY_MS=45 CONFIG_DALI_BUS_ABNORMAL_REPORT_INTERVAL_MS=3000 +CONFIG_DALI_BUS_RESET_PULSE_MS=10 # CONFIG_DALI_LOG_LEVEL_NONE is not set # CONFIG_DALI_LOG_LEVEL_ERROR is not set # CONFIG_DALI_LOG_LEVEL_WARN is not set @@ -2956,6 +2982,657 @@ CONFIG_CJSON_NESTING_LIMIT=1000 CONFIG_CJSON_CIRCULAR_LIMIT=10000 # end of cJSON +# +# ESP serial flasher +# +CONFIG_SERIAL_FLASHER_MD5_ENABLED=y +CONFIG_SERIAL_FLASHER_RESET_HOLD_TIME_MS=100 +CONFIG_SERIAL_FLASHER_BOOT_HOLD_TIME_MS=50 +# end of ESP serial flasher + +# +# Diagnostics data store +# +CONFIG_DIAG_DATA_STORE_RTC=y +# CONFIG_DIAG_DATA_STORE_RAM is not set +# CONFIG_DIAG_DATA_STORE_FLASH is not set +# CONFIG_DIAG_DATA_STORE_DBG_PRINTS is not set +CONFIG_DIAG_DATA_STORE_REPORTING_WATERMARK_PERCENT=80 + +# +# RTC Store +# +CONFIG_RTC_STORE_DATA_SIZE=6144 +CONFIG_RTC_STORE_CRITICAL_DATA_SIZE=4096 +# end of RTC Store +# end of Diagnostics data store + +# +# Diagnostics +# +CONFIG_DIAG_LOG_MSG_ARG_FORMAT_TLV=y +# CONFIG_DIAG_LOG_MSG_ARG_FORMAT_STRING is not set +CONFIG_DIAG_LOG_MSG_ARG_MAX_SIZE=64 +CONFIG_DIAG_LOG_DROP_WIFI_LOGS=y +# CONFIG_DIAG_ENABLE_WRAP_LOG_FUNCTIONS is not set +CONFIG_DIAG_ENABLE_METRICS=y +CONFIG_DIAG_METRICS_MAX_COUNT=20 +CONFIG_DIAG_ENABLE_HEAP_METRICS=y +CONFIG_DIAG_HEAP_POLLING_INTERVAL=30 +CONFIG_DIAG_ENABLE_WIFI_METRICS=y +CONFIG_DIAG_WIFI_POLLING_INTERVAL=30 +CONFIG_DIAG_ENABLE_VARIABLES=y +CONFIG_DIAG_VARIABLES_MAX_COUNT=20 +CONFIG_DIAG_ENABLE_NETWORK_VARIABLES=y +# CONFIG_DIAG_MORE_NETWORK_VARS is not set +# CONFIG_DIAG_USE_EXTERNAL_LOG_WRAP is not set +# end of Diagnostics + +# +# ESP Insights +# +# CONFIG_ESP_INSIGHTS_ENABLED is not set +# CONFIG_ESP_INSIGHTS_TRANSPORT_MQTT is not set +CONFIG_ESP_INSIGHTS_TRANSPORT_HTTPS=y +CONFIG_ESP_INSIGHTS_TRANSPORT_HTTPS_HOST="https://client.insights.espressif.com" +CONFIG_ESP_INSIGHTS_CLOUD_POST_MIN_INTERVAL_SEC=60 +CONFIG_ESP_INSIGHTS_CLOUD_POST_MAX_INTERVAL_SEC=240 +CONFIG_ESP_INSIGHTS_META_VERSION_10=y +# end of ESP Insights + +# +# CHIP Core +# + +# +# General Options +# +CONFIG_MAX_EXCHANGE_CONTEXTS=8 +CONFIG_MAX_FABRICS=5 +CONFIG_MAX_UNSOLICITED_MESSAGE_HANDLERS=8 +# CONFIG_ENABLE_PW_RPC is not set +CONFIG_USE_MINIMAL_MDNS=y +# CONFIG_ENABLE_CHIP_SHELL is not set +# CONFIG_ENABLE_CHIP_CONTROLLER_BUILD is not set +# CONFIG_DISABLE_IPV4 is not set +# CONFIG_DISABLE_READ_CLIENT is not set +CONFIG_ENABLE_PERSIST_SUBSCRIPTIONS=y +# CONFIG_BUILD_CHIP_TESTS is not set +CONFIG_DISPATCH_EVENT_LONG_DISPATCH_TIME_WARNING_THRESHOLD_MS=700 +# CONFIG_CHIP_LOG_FILTERING is not set +# CONFIG_CHIP_SYSTEM_CONFIG_POOL_USE_HEAP is not set +CONFIG_MAX_GROUP_ENDPOINTS_PER_FABRIC=1 +CONFIG_MAX_GROUPS_PER_FABRIC_PER_ENDPOINT=4 +CONFIG_MAX_GROUP_KEYS_PER_FABRIC=3 +# CONFIG_CHIP_DEVICE_ENABLE_DYNAMIC_SERVER is not set +# CONFIG_CHIP_MEM_ALLOC_MODE_INTERNAL is not set +# CONFIG_CHIP_MEM_ALLOC_MODE_EXTERNAL is not set +CONFIG_CHIP_MEM_ALLOC_MODE_DEFAULT=y +# end of General Options + +# +# Networking Options +# +CONFIG_NUM_TCP_ENDPOINTS=8 +CONFIG_NUM_UDP_ENDPOINTS=8 +CONFIG_ENABLE_ENDPOINT_QUEUE_FILTER=y +CONFIG_USE_TCPIP_CORE_LOCK_FOR_THREAD_SAFETY=y +# CONFIG_USE_LWIP_PBUF_RAM_PACKETBUFFER is not set +# end of Networking Options + +# +# System Options +# +CONFIG_NUM_TIMERS=32 +# CONFIG_ENABLE_OTA_REQUESTOR is not set +CONFIG_CHIP_ENABLE_PAIRING_AUTOSTART=y +# CONFIG_ENABLE_SNTP_TIME_SYNC is not set +# end of System Options + +# +# Security Options +# + +# +# Debugging +# +# CONFIG_SECURITY_TEST_MODE is not set +# end of Debugging +# end of Security Options +# end of CHIP Core + +# +# CHIP Device Layer +# + +# +# General Options +# +CONFIG_CHIP_PROJECT_CONFIG="" +CONFIG_CHIP_TASK_STACK_SIZE=8192 +CONFIG_CHIP_TASK_PRIORITY=1 +CONFIG_MAX_EVENT_QUEUE_SIZE=40 +# CONFIG_ENABLE_EXTENDED_DISCOVERY is not set +# CONFIG_ENABLE_COMMISSIONABLE_DEVICE_TYPE is not set +# CONFIG_ENABLE_BG_EVENT_PROCESSING is not set +# end of General Options + +# +# Device Identification Options +# +CONFIG_DEVICE_VENDOR_ID=0xFFF2 +CONFIG_DEVICE_PRODUCT_ID=0x8001 +CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION=0 +CONFIG_DEVICE_SOFTWARE_VERSION_NUMBER=0 +CONFIG_DEVICE_TYPE=0 +# end of Device Identification Options + +# +# WiFi Station Options +# +CONFIG_ENABLE_WIFI_STATION=y +CONFIG_DEFAULT_WIFI_SSID="" +CONFIG_DEFAULT_WIFI_PASSWORD="" +CONFIG_WIFI_STATION_RECONNECT_INTERVAL=100 +CONFIG_MAX_SCAN_NETWORKS_RESULTS=10 +CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT=10000 +CONFIG_WIFI_CONNECTIVITY_TIMEOUT=30000 +# end of WiFi Station Options + +# +# BLE Options +# +CONFIG_ENABLE_CHIPOBLE=y +CONFIG_BLE_DEVICE_NAME_PREFIX="MATTER-" +CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN=40 +CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX=40 +CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN=800 +CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX=800 +CONFIG_CHIPOBLE_SINGLE_CONNECTION=y +CONFIG_CHIPOBLE_ENABLE_ADVERTISING_AUTOSTART=0 +CONFIG_USE_BLE_ONLY_FOR_COMMISSIONING=y +# end of BLE Options + +# +# Ethernet Options +# +CONFIG_GPIO_RANGE_MIN=0 +CONFIG_GPIO_RANGE_MAX=48 +CONFIG_ETH_MDC_GPIO=23 +CONFIG_ETH_MDIO_GPIO=18 +CONFIG_ETH_PHY_RST_GPIO=5 +CONFIG_ETH_PHY_ADDR=1 +# end of Ethernet Options + +# +# Commissioning options +# +# CONFIG_ENABLE_ROTATING_DEVICE_ID is not set +CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER=y +CONFIG_ENABLE_ESP32_DEVICE_INSTANCE_INFO_PROVIDER=y +# CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER is not set +# CONFIG_ENABLE_ESP32_LOCATIONCAPABILITY is not set +# CONFIG_SEC_CERT_DAC_PROVIDER is not set +# CONFIG_ENABLE_SET_CERT_DECLARATION_API is not set +# end of Commissioning options + +# +# Diagnostics Options +# +# CONFIG_ENABLE_ESP_DIAGNOSTICS is not set +# end of Diagnostics Options + +# +# Testing Options +# +CONFIG_USE_TEST_SERIAL_NUMBER="TEST_SN" +# CONFIG_ENABLE_TEST_SETUP_PARAMS is not set +# CONFIG_TEST_EVENT_TRIGGER_ENABLED is not set +# end of Testing Options + +# +# Network Telemetry Options +# +# CONFIG_ENABLE_WIFI_TELEMETRY is not set +# CONFIG_ENABLE_THREAD_TELEMETRY is not set +# CONFIG_ENABLE_THREAD_TELEMETRY_FULL is not set +# CONFIG_ENABLE_TUNNEL_TELEMETRY is not set +CONFIG_ENABLE_ETHERNET_TELEMETRY=y +# end of Network Telemetry Options + +# +# Event Logging Options +# +CONFIG_EVENT_LOGGING_CRIT_BUFFER_SIZE=4096 +CONFIG_EVENT_LOGGING_INFO_BUFFER_SIZE=1024 +CONFIG_EVENT_LOGGING_DEBUG_BUFFER_SIZE=1024 +CONFIG_CHIP_CONFIG_IM_PRETTY_PRINT=y +CONFIG_CHIP_LOG_DEFAULT_LEVEL_EQUALS_LOG_DEFAULT_LEVEL=y +# CONFIG_CHIP_LOG_DEFAULT_LEVEL_NONE is not set +# CONFIG_CHIP_LOG_DEFAULT_LEVEL_ERROR is not set +# CONFIG_CHIP_LOG_DEFAULT_LEVEL_PROGRESS is not set +# CONFIG_CHIP_LOG_DEFAULT_LEVEL_DETAIL is not set +# CONFIG_CHIP_LOG_DEFAULT_LEVEL_AUTOMATION is not set +CONFIG_CHIP_LOG_DEFAULT_LEVEL=3 +# end of Event Logging Options + +# CONFIG_CHIP_ENABLE_BDX_LOG_TRANSFER is not set + +# +# Matter OTA Image +# +# CONFIG_CHIP_OTA_IMAGE_BUILD is not set +# end of Matter OTA Image + +# +# External Platform +# +# CONFIG_CHIP_ENABLE_EXTERNAL_PLATFORM is not set +# end of External Platform + +# +# Matter Manufacturing Options +# +CONFIG_CHIP_FACTORY_NAMESPACE_PARTITION_LABEL="nvs" +CONFIG_CHIP_CONFIG_NAMESPACE_PARTITION_LABEL="nvs" +CONFIG_CHIP_COUNTERS_NAMESPACE_PARTITION_LABEL="nvs" +CONFIG_CHIP_KVS_NAMESPACE_PARTITION_LABEL="nvs" +# end of Matter Manufacturing Options + +# +# Commissioning Window Options +# +CONFIG_CHIP_DISCOVERY_TIMEOUT_SECS=900 +# end of Commissioning Window Options + +# +# Enable ESP32 as a BLE Commissioner +# +# CONFIG_ENABLE_ESP32_BLE_CONTROLLER is not set +# end of Enable ESP32 as a BLE Commissioner + +# +# Enable BLE Extended Announcement +# +# CONFIG_ENABLE_BLE_EXT_ANNOUNCEMENT is not set +# end of Enable BLE Extended Announcement + +# +# Message Reliable Protocol Options +# +CONFIG_MRP_LOCAL_ACTIVE_RETRY_INTERVAL_FOR_WIFI_ETHERNET=300 +CONFIG_MRP_LOCAL_IDLE_RETRY_INTERVAL_FOR_WIFI_ETHERNET=500 +CONFIG_MRP_RETRY_INTERVAL_SENDER_BOOST_FOR_WIFI_ETHERNET=0 +CONFIG_MRP_MAX_RETRANS=4 +# end of Message Reliable Protocol Options + +# +# Matter TCP transport options +# +# CONFIG_ENABLE_TCP_TRANSPORT is not set +# end of Matter TCP transport options + +# +# Network Commissioning Driver Endpoint Id +# +CONFIG_WIFI_NETWORK_COMMISSIONING_DRIVER=y +CONFIG_WIFI_NETWORK_ENDPOINT_ID=0 +# CONFIG_ETHERNET_NETWORK_COMMISSIONING_DRIVER is not set +# end of Network Commissioning Driver Endpoint Id + +# +# Cluster Configuration Options +# +# CONFIG_ENABLE_ACCESS_RESTRICTIONS is not set +# end of Cluster Configuration Options +# end of CHIP Device Layer + +# +# ESP Matter +# +CONFIG_ESP_MATTER_MAX_DEVICE_TYPE_COUNT=16 +CONFIG_ESP_MATTER_ATTRIBUTE_BUFFER_LARGEST=259 +CONFIG_ESP_MATTER_NVS_PART_NAME="nvs" +CONFIG_ESP_MATTER_DEFERRED_ATTR_PERSISTENCE_TIME_MS=3000 +# CONFIG_EXAMPLE_DAC_PROVIDER is not set +CONFIG_FACTORY_PARTITION_DAC_PROVIDER=y +# CONFIG_CUSTOM_DAC_PROVIDER is not set +CONFIG_FACTORY_COMMISSIONABLE_DATA_PROVIDER=y +# CONFIG_SEC_CERT_COMMISSIONABLE_DATA_PROVIDER is not set +# CONFIG_CUSTOM_COMMISSIONABLE_DATA_PROVIDER is not set +# CONFIG_EXAMPLE_DEVICE_INSTANCE_INFO_PROVIDER is not set +CONFIG_FACTORY_DEVICE_INSTANCE_INFO_PROVIDER=y +# CONFIG_SEC_CERT_DEVICE_INSTANCE_INFO_PROVIDER is not set +# CONFIG_CUSTOM_DEVICE_INSTANCE_INFO_PROVIDER is not set +CONFIG_NONE_DEVICE_INFO_PROVIDER=y +# CONFIG_CUSTOM_DEVICE_INFO_PROVIDER is not set +CONFIG_ESP_MATTER_MAX_DYNAMIC_ENDPOINT_COUNT=18 +CONFIG_ESP_MATTER_MODE_SELECT_CLUSTER_ENDPOINT_COUNT=0 +CONFIG_ESP_MATTER_TEMPERATURE_CONTROL_CLUSTER_ENDPOINT_COUNT=0 +CONFIG_ESP_MATTER_SCENES_TABLE_SIZE=16 +CONFIG_ESP_MATTER_BINDING_TABLE_SIZE=10 +CONFIG_ESP_MATTER_MEM_ALLOC_MODE_INTERNAL=y +# CONFIG_ESP_MATTER_MEM_ALLOC_MODE_EXTERNAL is not set +# CONFIG_ESP_MATTER_MEM_ALLOC_MODE_DEFAULT is not set +CONFIG_ESP_MATTER_ENABLE_DATA_MODEL=y +CONFIG_ESP_MATTER_ENABLE_MATTER_SERVER=y +# CONFIG_ESP_MATTER_ENABLE_OPENTHREAD is not set +CONFIG_CUSTOM_NETWORK_CONFIG=y + +# +# Select Supported Matter Clusters +# +CONFIG_SUPPORT_ACCESS_CONTROL_CLUSTER=y +# CONFIG_SUPPORT_ACCOUNT_LOGIN_CLUSTER is not set +# CONFIG_SUPPORT_ACTIONS_CLUSTER is not set +# CONFIG_SUPPORT_ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER is not set +CONFIG_SUPPORT_ADMINISTRATOR_COMMISSIONING_CLUSTER=y +# CONFIG_SUPPORT_AIR_QUALITY_CLUSTER is not set +# CONFIG_SUPPORT_APPLICATION_BASIC_CLUSTER is not set +# CONFIG_SUPPORT_APPLICATION_LAUNCHER_CLUSTER is not set +# CONFIG_SUPPORT_AUDIO_OUTPUT_CLUSTER is not set +CONFIG_SUPPORT_BASIC_INFORMATION_CLUSTER=y +CONFIG_SUPPORT_BINDING_CLUSTER=y +# CONFIG_SUPPORT_BOOLEAN_STATE_CLUSTER is not set +# CONFIG_SUPPORT_BOOLEAN_STATE_CONFIGURATION_CLUSTER is not set +CONFIG_SUPPORT_BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER=y +# CONFIG_SUPPORT_CAMERA_AV_SETTINGS_USER_LEVEL_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_CAMERA_AV_STREAM_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_CHANNEL_CLUSTER is not set +# CONFIG_SUPPORT_CHIME_CLUSTER is not set +# CONFIG_SUPPORT_CLOSURE_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_CLOSURE_DIMENSION_CLUSTER is not set +CONFIG_SUPPORT_COLOR_CONTROL_CLUSTER=y +# CONFIG_SUPPORT_COMMISSIONER_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_COMMODITY_METERING_CLUSTER is not set +# CONFIG_SUPPORT_COMMODITY_PRICE_CLUSTER is not set +# CONFIG_SUPPORT_COMMODITY_TARIFF_CLUSTER is not set +# CONFIG_SUPPORT_CONTENT_LAUNCHER_CLUSTER is not set +# CONFIG_SUPPORT_CONTENT_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_CONTENT_APP_OBSERVER_CLUSTER is not set +CONFIG_SUPPORT_DESCRIPTOR_CLUSTER=y +# CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER is not set +# CONFIG_SUPPORT_DIAGNOSTIC_LOGS_CLUSTER is not set +# CONFIG_SUPPORT_DISHWASHER_ALARM_CLUSTER is not set +# CONFIG_SUPPORT_DISHWASHER_MODE_CLUSTER is not set +# CONFIG_SUPPORT_ELECTRICAL_GRID_CONDITIONS_CLUSTER is not set +# CONFIG_SUPPORT_GROUPCAST_CLUSTER is not set +# CONFIG_SUPPORT_METER_IDENTIFICATION_CLUSTER is not set +# CONFIG_SUPPORT_MICROWAVE_OVEN_MODE_CLUSTER is not set +# CONFIG_SUPPORT_DOOR_LOCK_CLUSTER is not set +# CONFIG_SUPPORT_ECOSYSTEM_INFORMATION_CLUSTER is not set +# CONFIG_SUPPORT_ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_ELECTRICAL_POWER_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_ENERGY_EVSE_CLUSTER is not set +# CONFIG_SUPPORT_ENERGY_EVSE_MODE_CLUSTER is not set +# CONFIG_SUPPORT_ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER is not set +# CONFIG_SUPPORT_ENERGY_PREFERENCE_CLUSTER is not set +# CONFIG_SUPPORT_FAN_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_FAULT_INJECTION_CLUSTER is not set +# CONFIG_SUPPORT_FIXED_LABEL_CLUSTER is not set +# CONFIG_SUPPORT_FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER is not set +CONFIG_SUPPORT_GENERAL_COMMISSIONING_CLUSTER=y +CONFIG_SUPPORT_GENERAL_DIAGNOSTICS_CLUSTER=y +CONFIG_SUPPORT_GROUPS_CLUSTER=y +# CONFIG_SUPPORT_HEPA_FILTER_MONITORING_CLUSTER is not set +CONFIG_SUPPORT_GROUP_KEY_MANAGEMENT_CLUSTER=y +# CONFIG_SUPPORT_ICD_MANAGEMENT_CLUSTER is not set +CONFIG_SUPPORT_IDENTIFY_CLUSTER=y +# CONFIG_SUPPORT_JOINT_FABRIC_DATASTORE_CLUSTER is not set +# CONFIG_SUPPORT_JOINT_FABRIC_ADMINISTRATOR_CLUSTER is not set +# CONFIG_SUPPORT_KEYPAD_INPUT_CLUSTER is not set +# CONFIG_SUPPORT_LAUNDRY_WASHER_MODE_CLUSTER is not set +CONFIG_SUPPORT_LEVEL_CONTROL_CLUSTER=y +# CONFIG_SUPPORT_LOCALIZATION_CONFIGURATION_CLUSTER is not set +# CONFIG_SUPPORT_LOW_POWER_CLUSTER is not set +# CONFIG_SUPPORT_MEDIA_INPUT_CLUSTER is not set +# CONFIG_SUPPORT_MEDIA_PLAYBACK_CLUSTER is not set +# CONFIG_SUPPORT_MICROWAVE_OVEN_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_MESSAGES_CLUSTER is not set +# CONFIG_SUPPORT_MODE_SELECT_CLUSTER is not set +# CONFIG_SUPPORT_NETWORK_COMMISSIONING_CLUSTER is not set +# CONFIG_SUPPORT_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_PUSH_AV_STREAM_TRANSPORT_CLUSTER is not set +# CONFIG_SUPPORT_SAMPLE_MEI_CLUSTER is not set +# CONFIG_SUPPORT_OCCUPANCY_SENSING_CLUSTER is not set +CONFIG_SUPPORT_ON_OFF_CLUSTER=y +# CONFIG_SUPPORT_POWER_TOPOLOGY_CLUSTER is not set +CONFIG_SUPPORT_OPERATIONAL_CREDENTIALS_CLUSTER=y +# CONFIG_SUPPORT_OPERATIONAL_STATE_CLUSTER is not set +# CONFIG_SUPPORT_OPERATIONAL_STATE_OVEN_CLUSTER is not set +# CONFIG_SUPPORT_OPERATIONAL_STATE_RVC_CLUSTER is not set +# CONFIG_SUPPORT_OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER is not set +# CONFIG_SUPPORT_OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER is not set +# CONFIG_SUPPORT_OVEN_MODE_CLUSTER is not set +# CONFIG_SUPPORT_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_PM10_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_PM1_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_POWER_SOURCE_CLUSTER is not set +# CONFIG_SUPPORT_POWER_SOURCE_CONFIGURATION_CLUSTER is not set +# CONFIG_SUPPORT_PUMP_CONFIGURATION_AND_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_RADON_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_REFRIGERATOR_ALARM_CLUSTER is not set +# CONFIG_SUPPORT_REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER is not set +# CONFIG_SUPPORT_RVC_CLEAN_MODE_CLUSTER is not set +# CONFIG_SUPPORT_RVC_RUN_MODE_CLUSTER is not set +CONFIG_SUPPORT_SCENES_CLUSTER=y +# CONFIG_SUPPORT_SERVICE_AREA_CLUSTER is not set +# CONFIG_SUPPORT_SMOKE_CO_ALARM_CLUSTER is not set +# CONFIG_SUPPORT_SOFTWARE_DIAGNOSTICS_CLUSTER is not set +# CONFIG_SUPPORT_SOIL_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_SWITCH_CLUSTER is not set +# CONFIG_SUPPORT_TARGET_NAVIGATOR_CLUSTER is not set +# CONFIG_SUPPORT_TEMPERATURE_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_THERMOSTAT_CLUSTER is not set +# CONFIG_SUPPORT_THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER is not set +# CONFIG_SUPPORT_THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_THREAD_NETWORK_DIAGNOSTICS_CLUSTER is not set +# CONFIG_SUPPORT_THREAD_NETWORK_DIRECTORY_CLUSTER is not set +# CONFIG_SUPPORT_TIME_FORMAT_LOCALIZATION_CLUSTER is not set +# CONFIG_SUPPORT_TIME_SYNCHRONIZATION_CLUSTER is not set +# CONFIG_SUPPORT_TIMER_CLUSTER is not set +# CONFIG_SUPPORT_TLS_CERTIFICATE_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_TLS_CLIENT_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_TVOC_CONCENTRATION_MEASUREMENT_CLUSTER is not set +# CONFIG_SUPPORT_UNIT_LOCALIZATION_CLUSTER is not set +# CONFIG_SUPPORT_UNIT_TESTING_CLUSTER is not set +# CONFIG_SUPPORT_USER_LABEL_CLUSTER is not set +# CONFIG_SUPPORT_VALVE_CONFIGURATION_AND_CONTROL_CLUSTER is not set +# CONFIG_SUPPORT_WAKE_ON_LAN_CLUSTER is not set +# CONFIG_SUPPORT_LAUNDRY_WASHER_CONTROLS_CLUSTER is not set +# CONFIG_SUPPORT_LAUNDRY_DRYER_CONTROLS_CLUSTER is not set +# CONFIG_SUPPORT_WEB_RTC_TRANSPORT_PROVIDER_CLUSTER is not set +# CONFIG_SUPPORT_WEB_RTC_TRANSPORT_REQUESTOR_CLUSTER is not set +# CONFIG_SUPPORT_WIFI_NETWORK_DIAGNOSTICS_CLUSTER is not set +# CONFIG_SUPPORT_WIFI_NETWORK_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_WINDOW_COVERING_CLUSTER is not set +# CONFIG_SUPPORT_WATER_HEATER_MANAGEMENT_CLUSTER is not set +# CONFIG_SUPPORT_WATER_HEATER_MODE_CLUSTER is not set +# CONFIG_SUPPORT_ZONE_MANAGEMENT_CLUSTER is not set +# end of Select Supported Matter Clusters +# end of ESP Matter + +# +# ESP Matter Bridge +# +CONFIG_ESP_MATTER_AGGREGATOR_ENDPOINT_COUNT=1 +CONFIG_ESP_MATTER_BRIDGE_INFO_PART_NAME="nvs" +# end of ESP Matter Bridge + +# +# ESP Matter Console +# +CONFIG_ESP_MATTER_CONSOLE_TASK_STACK=2048 +CONFIG_ESP_MATTER_CONSOLE_MAX_COMMANDS=10 +# end of ESP Matter Console + +# +# ESP Matter Controller +# +# CONFIG_ESP_MATTER_CONTROLLER_ENABLE is not set +# end of ESP Matter Controller + +# +# ESP Matter OTA Provider +# +# CONFIG_ESP_MATTER_OTA_PROVIDER_ENABLED is not set +# end of ESP Matter OTA Provider + +# +# OpenThread RCP Update +# +# CONFIG_AUTO_UPDATE_RCP is not set +# CONFIG_CREATE_OTA_IMAGE_WITH_RCP_FW is not set +# end of OpenThread RCP Update + +# +# ESP Secure Cert Manager +# +CONFIG_ESP_SECURE_CERT_DS_PERIPHERAL=y +# CONFIG_ESP_SECURE_CERT_SUPPORT_LEGACY_FORMATS is not set +# CONFIG_ESP_SECURE_CERT_WRITE_ENABLE_LOGGING is not set +# end of ESP Secure Cert Manager + +# +# TinyUSB Stack +# +CONFIG_TINYUSB_DEBUG_LEVEL=1 + +# +# TinyUSB DCD +# +# CONFIG_TINYUSB_MODE_SLAVE is not set +CONFIG_TINYUSB_MODE_DMA=y +# end of TinyUSB DCD + +# +# TinyUSB callbacks +# +# CONFIG_TINYUSB_SUSPEND_CALLBACK is not set +# CONFIG_TINYUSB_RESUME_CALLBACK is not set +# end of TinyUSB callbacks + +# +# Descriptor configuration +# + +# +# You can provide your custom descriptors via tinyusb_driver_install() +# +CONFIG_TINYUSB_DESC_USE_ESPRESSIF_VID=y +CONFIG_TINYUSB_DESC_USE_DEFAULT_PID=y +CONFIG_TINYUSB_DESC_BCD_DEVICE=0x0100 +CONFIG_TINYUSB_DESC_MANUFACTURER_STRING="Espressif Systems" +CONFIG_TINYUSB_DESC_PRODUCT_STRING="Espressif Device" +CONFIG_TINYUSB_DESC_SERIAL_STRING="123456" +# end of Descriptor configuration + +# +# Mass Storage Class (MSC) +# +# CONFIG_TINYUSB_MSC_ENABLED is not set +# end of Mass Storage Class (MSC) + +# +# Communication Device Class (CDC) +# +# CONFIG_TINYUSB_CDC_ENABLED is not set +# end of Communication Device Class (CDC) + +# +# Musical Instrument Digital Interface (MIDI) +# +CONFIG_TINYUSB_MIDI_COUNT=0 +# end of Musical Instrument Digital Interface (MIDI) + +# +# Human Interface Device Class (HID) +# +CONFIG_TINYUSB_HID_COUNT=1 +# end of Human Interface Device Class (HID) + +# +# Device Firmware Upgrade (DFU) +# +# CONFIG_TINYUSB_DFU_MODE_DFU is not set +# CONFIG_TINYUSB_DFU_MODE_DFU_RUNTIME is not set +CONFIG_TINYUSB_DFU_MODE_NONE=y +# end of Device Firmware Upgrade (DFU) + +# +# Bluetooth Host Class (BTH) +# +# CONFIG_TINYUSB_BTH_ENABLED is not set +# end of Bluetooth Host Class (BTH) + +# +# Network driver (ECM/NCM/RNDIS) +# +# CONFIG_TINYUSB_NET_MODE_ECM_RNDIS is not set +# CONFIG_TINYUSB_NET_MODE_NCM is not set +CONFIG_TINYUSB_NET_MODE_NONE=y +# end of Network driver (ECM/NCM/RNDIS) + +# +# Vendor Specific Interface +# +CONFIG_TINYUSB_VENDOR_COUNT=0 +# end of Vendor Specific Interface +# end of TinyUSB Stack + +# +# jsmn +# +# CONFIG_JSMN_PARENT_LINKS is not set +# CONFIG_JSMN_STRICT is not set +# CONFIG_JSMN_STATIC is not set +# end of jsmn + +# +# mDNS +# +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 +# CONFIG_MDNS_TASK_AFFINITY_CPU1 is not set +CONFIG_MDNS_TASK_AFFINITY=0x0 + +# +# MDNS Memory Configuration +# +# CONFIG_MDNS_TASK_CREATE_FROM_SPIRAM is not set +CONFIG_MDNS_TASK_CREATE_FROM_INTERNAL=y +# CONFIG_MDNS_MEMORY_ALLOC_SPIRAM is not set +CONFIG_MDNS_MEMORY_ALLOC_INTERNAL=y +# CONFIG_MDNS_MEMORY_CUSTOM_IMPL is not set +# end of MDNS Memory Configuration + +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_ENABLE_CONSOLE_CLI=y +# 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 + # # ESP-MQTT Configurations # @@ -2973,6 +3650,55 @@ CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED=y CONFIG_MQTT_USE_CORE_1=y # CONFIG_MQTT_CUSTOM_OUTBOX is not set # end of ESP-MQTT Configurations + +# +# ESP RainMaker Command-Response +# +CONFIG_ESP_RMAKER_MAX_COMMANDS=10 +# end of ESP RainMaker Command-Response + +# +# ESP RainMaker Common +# +CONFIG_ESP_RMAKER_LIB_ESP_MQTT=y +# CONFIG_ESP_RMAKER_LIB_AWS_IOT is not set +CONFIG_ESP_RMAKER_MQTT_GLUE_LIB=1 +CONFIG_ESP_RMAKER_MQTT_PORT_443=y +# CONFIG_ESP_RMAKER_MQTT_PORT_8883 is not set +CONFIG_ESP_RMAKER_MQTT_PORT=1 +# CONFIG_ESP_RMAKER_MQTT_PERSISTENT_SESSION is not set +CONFIG_ESP_RMAKER_MQTT_SEND_USERNAME=y +CONFIG_ESP_RMAKER_MQTT_PRODUCT_NAME="RMDev" +CONFIG_ESP_RMAKER_MQTT_PRODUCT_VERSION="1x0" +CONFIG_ESP_RMAKER_MQTT_PRODUCT_SKU="EX00" +CONFIG_ESP_RMAKER_MQTT_USE_CERT_BUNDLE=y +CONFIG_ESP_RMAKER_MAX_MQTT_SUBSCRIPTIONS=10 +CONFIG_ESP_RMAKER_MQTT_KEEP_ALIVE_INTERVAL=120 +CONFIG_ESP_RMAKER_FACTORY_PARTITION_NAME="fctry" +CONFIG_ESP_RMAKER_FACTORY_NAMESPACE="rmaker_creds" +# end of ESP RainMaker Common + +# +# ESP RainMaker Console +# +CONFIG_ESP_RMAKER_CONSOLE_ENABLED=y +CONFIG_ESP_RMAKER_CONSOLE_TASK_STACK=4096 +CONFIG_ESP_RMAKER_CONSOLE_TASK_PRIORITY=5 +# end of ESP RainMaker Console + +# +# ESP RainMaker Time Sync +# +CONFIG_ESP_RMAKER_DEF_TIMEZONE="Asia/Shanghai" +CONFIG_ESP_RMAKER_SNTP_SERVER_NAME="pool.ntp.org" +# end of ESP RainMaker Time Sync + +# +# ESP RainMaker Work Queue +# +CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_STACK=5120 +CONFIG_ESP_RMAKER_WORK_QUEUE_TASK_PRIORITY=5 +# end of ESP RainMaker Work Queue # end of Component config # CONFIG_IDF_EXPERIMENTAL_FEATURES is not set diff --git a/components/gateway_ble/CMakeLists.txt b/components/gateway_ble/CMakeLists.txt index eafee22..1a1d4f0 100644 --- a/components/gateway_ble/CMakeLists.txt +++ b/components/gateway_ble/CMakeLists.txt @@ -2,6 +2,7 @@ idf_component_register( SRCS "src/gateway_ble.cpp" INCLUDE_DIRS "include" REQUIRES gateway_controller gateway_runtime dali_domain bt esp_timer freertos log nvs_flash + PRIV_REQUIRES esp_matter ) -set_property(TARGET ${COMPONENT_LIB} PROPERTY CXX_STANDARD 17) \ No newline at end of file +set_property(TARGET ${COMPONENT_LIB} PROPERTY CXX_STANDARD 17) diff --git a/components/gateway_ble/include/gateway_ble.hpp b/components/gateway_ble/include/gateway_ble.hpp index 3084932..312808b 100644 --- a/components/gateway_ble/include/gateway_ble.hpp +++ b/components/gateway_ble/include/gateway_ble.hpp @@ -24,6 +24,9 @@ class GatewayBleBridge { DaliDomainService& dali_domain); esp_err_t start(); + esp_err_t prepareSharedNimble(); + esp_err_t attachSharedNimble(); + void handleMatterAdvertisingChange(bool advertising); void handleSync(); int handleGapEvent(struct ble_gap_event* event); int handleAccess(uint16_t conn_handle, uint16_t attr_handle, @@ -32,7 +35,9 @@ class GatewayBleBridge { private: static constexpr uint16_t kInvalidConnectionHandle = 0xffff; + esp_err_t prepare(); esp_err_t initNimble(); + esp_err_t configureSharedScanResponse(); void refreshDeviceName(); void setEnabled(bool enabled); void startAdvertising(); @@ -48,9 +53,14 @@ class GatewayBleBridge { GatewayController& controller_; GatewayRuntime& runtime_; DaliDomainService& dali_domain_; + bool prepared_{false}; bool started_{false}; bool synced_{false}; bool enabled_{false}; + bool shared_nimble_{false}; + bool gap_listener_registered_{false}; + bool matter_advertising_{false}; + bool gateway_advertising_{false}; uint8_t own_addr_type_{0}; uint16_t conn_handle_{kInvalidConnectionHandle}; std::string device_name_; @@ -60,4 +70,4 @@ class GatewayBleBridge { int64_t last_notify_at_us_{0}; }; -} // namespace gateway \ No newline at end of file +} // namespace gateway diff --git a/components/gateway_ble/src/gateway_ble.cpp b/components/gateway_ble/src/gateway_ble.cpp index 7117b6f..d390619 100644 --- a/components/gateway_ble/src/gateway_ble.cpp +++ b/components/gateway_ble/src/gateway_ble.cpp @@ -7,11 +7,13 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" +#include "esp_check.h" #include "esp_log.h" #include "esp_timer.h" #include "host/ble_gap.h" #include "host/ble_gatt.h" #include "host/ble_hs.h" +#include "host/ble_hs_adv.h" #include "host/ble_store.h" #include "host/util/util.h" #include "nimble/ble.h" @@ -21,12 +23,28 @@ #include "services/gatt/ble_svc_gatt.h" #include "store/config/ble_store_config.h" +#ifdef CONFIG_GATEWAY_MATTER_SUPPORTED +#include "lib/support/Span.h" +#include "platform/CHIPDeviceLayer.h" +#include "platform/ESP32/BLEManagerImpl.h" +#endif + #include +#include namespace { constexpr const char* kTag = "gateway_ble"; +#ifdef CONFIG_GATEWAY_MATTER_SUPPORTED +// Matter owns the standard CHIPoBLE 0xFFF6 service. Keep the gateway on a +// distinct primary service so mobile GATT clients never resolve the wrong +// duplicate service while both protocols share CHIP's NimBLE host. +constexpr uint16_t kServiceUuid = 0xFFF7; +#else +// Preserve the established standalone gateway BLE profile when CHIP is not +// present in the firmware. constexpr uint16_t kServiceUuid = 0xFFF6; +#endif constexpr uint16_t kChannel1Uuid = 0xFFF1; constexpr uint16_t kChannel2Uuid = 0xFFF2; constexpr uint16_t kGatewayUuid = 0xFFF3; @@ -34,9 +52,11 @@ constexpr int64_t kGenericDedupeWindowUs = 120000; constexpr size_t kGatewayCharacteristicIndex = 2; constexpr int kGatewayNotifyAllocationAttempts = 6; constexpr TickType_t kGatewayNotifyRetryDelayTicks = pdMS_TO_TICKS(20); +constexpr size_t kLegacyAdvertisingDataMaxLength = 31; gateway::GatewayBleBridge* s_active_bridge = nullptr; uint16_t s_value_handles[3] = {0, 0, 0}; +struct ble_gap_event_listener s_gap_listener; int GapEvent(struct ble_gap_event* event, void* arg); int AccessCharacteristic(uint16_t conn_handle, uint16_t attr_handle, @@ -181,6 +201,25 @@ esp_err_t GatewayBleBridge::start() { return ESP_OK; } + shared_nimble_ = false; + const esp_err_t prepare_err = prepare(); + if (prepare_err != ESP_OK) return prepare_err; + + const esp_err_t err = initNimble(); + if (err != ESP_OK) { + s_active_bridge = nullptr; + return err; + } + + started_ = true; + ESP_LOGI(kTag, "BLE bridge started host=standalone enabled=%d name=%s", enabled_, + device_name_.c_str()); + return ESP_OK; +} + +esp_err_t GatewayBleBridge::prepare() { + if (prepared_) return ESP_OK; + s_active_bridge = this; enabled_ = runtime_.bleEnabled(); refreshDeviceName(); @@ -191,15 +230,126 @@ esp_err_t GatewayBleBridge::start() { controller_.addGatewayNameSink([this](uint8_t) { refreshDeviceName(); }); dali_domain_.addRawFrameSink([this](const DaliRawFrame& frame) { handleDaliRawFrame(frame); }); - const esp_err_t err = initNimble(); - if (err != ESP_OK) { - s_active_bridge = nullptr; - return err; + prepared_ = true; + return ESP_OK; +} + +esp_err_t GatewayBleBridge::prepareSharedNimble() { +#ifndef CONFIG_GATEWAY_MATTER_SUPPORTED + return ESP_ERR_NOT_SUPPORTED; +#else + if (started_) return shared_nimble_ ? ESP_OK : ESP_ERR_INVALID_STATE; + ESP_RETURN_ON_ERROR(prepare(), kTag, "failed to prepare shared BLE bridge"); + shared_nimble_ = true; + + std::vector services{kGattServices[0]}; + const CHIP_ERROR service_err = + chip::DeviceLayer::Internal::BLEMgrImpl().ConfigureExtraServices(services, false); + if (service_err != CHIP_NO_ERROR) { + ESP_LOGE(kTag, "failed to add gateway GATT service to CHIP: %s", + service_err.AsString()); + return ESP_FAIL; + } + ESP_RETURN_ON_ERROR(configureSharedScanResponse(), kTag, + "failed to configure shared BLE scan response"); + return ESP_OK; +#endif +} + +esp_err_t GatewayBleBridge::attachSharedNimble() { +#ifndef CONFIG_GATEWAY_MATTER_SUPPORTED + return ESP_ERR_NOT_SUPPORTED; +#else + if (started_) return shared_nimble_ ? ESP_OK : ESP_ERR_INVALID_STATE; + if (!prepared_ || !shared_nimble_ || !ble_hs_synced()) return ESP_ERR_INVALID_STATE; + + const int listener_err = + ble_gap_event_listener_register(&s_gap_listener, GapEvent, this); + if (listener_err != 0 && listener_err != BLE_HS_EALREADY) { + ESP_LOGE(kTag, "failed to register shared GAP listener rc=%d", listener_err); + return ESP_FAIL; + } + gap_listener_registered_ = true; + started_ = true; + // The CHIP advertising-change event is posted asynchronously. ESP-Matter + // can therefore already be advertising before MatterEvent has delivered + // the notification to us. Seed the shared state from CHIP before handleSync + // decides whether the gateway needs its fallback advertisement. + matter_advertising_ = + chip::DeviceLayer::ConnectivityMgr().IsBLEAdvertisingEnabled() || + chip::DeviceLayer::ConnectivityMgr().IsBLEAdvertising(); + handleSync(); + + uint16_t service_handle = 0; + const int service_err = ble_gatts_find_svc(&kServiceUuidDef.u, &service_handle); + if (service_err != 0 || service_handle == 0) { + ESP_LOGE(kTag, "shared gateway GATT service is unavailable rc=%d handle=%u", + service_err, service_handle); + return ESP_FAIL; + } + const ble_uuid_t* characteristic_uuids[] = { + &kChannel1UuidDef.u, + &kChannel2UuidDef.u, + &kGatewayUuidDef.u, + }; + for (size_t index = 0; index < std::size(characteristic_uuids); ++index) { + uint16_t definition_handle = 0; + uint16_t value_handle = 0; + const int characteristic_err = + ble_gatts_find_chr(&kServiceUuidDef.u, characteristic_uuids[index], + &definition_handle, &value_handle); + if (characteristic_err != 0 || definition_handle == 0 || value_handle == 0) { + ESP_LOGE(kTag, + "shared gateway GATT characteristic missing index=%u rc=%d def=%u val=%u", + static_cast(index), characteristic_err, + definition_handle, value_handle); + return ESP_FAIL; + } + s_value_handles[index] = value_handle; + ESP_LOGI(kTag, "shared gateway characteristic index=%u def=%u val=%u", + static_cast(index), definition_handle, value_handle); + } + ESP_LOGI(kTag, + "BLE bridge started host=CHIP shared=1 enabled=%d name=%s service=0x%04x handle=%u", + enabled_, device_name_.c_str(), kServiceUuid, service_handle); + return ESP_OK; +#endif +} + +esp_err_t GatewayBleBridge::configureSharedScanResponse() { +#ifndef CONFIG_GATEWAY_MATTER_SUPPORTED + return ESP_ERR_NOT_SUPPORTED; +#else + if (!enabled_) { + chip::DeviceLayer::Internal::BLEMgrImpl().ClearScanResponseData(); + return ESP_OK; } - started_ = true; - ESP_LOGI(kTag, "BLE bridge started enabled=%d name=%s", enabled_, device_name_.c_str()); + std::vector scan_response{ + 3, + BLE_HS_ADV_TYPE_COMP_UUIDS16, + static_cast(kServiceUuid & 0xff), + static_cast((kServiceUuid >> 8) & 0xff), + }; + const size_t max_name_length = + kLegacyAdvertisingDataMaxLength - scan_response.size() - 2; + const size_t name_length = std::min(device_name_.size(), max_name_length); + scan_response.push_back(static_cast(name_length + 1)); + scan_response.push_back(name_length == device_name_.size() + ? BLE_HS_ADV_TYPE_COMP_NAME + : BLE_HS_ADV_TYPE_INCOMP_NAME); + scan_response.insert(scan_response.end(), device_name_.begin(), + device_name_.begin() + name_length); + + const CHIP_ERROR err = + chip::DeviceLayer::Internal::BLEMgrImpl().ConfigureScanResponseData( + chip::ByteSpan(scan_response.data(), scan_response.size())); + if (err != CHIP_NO_ERROR) { + ESP_LOGE(kTag, "failed to configure CHIP scan response: %s", err.AsString()); + return ESP_FAIL; + } return ESP_OK; +#endif } esp_err_t GatewayBleBridge::initNimble() { @@ -268,6 +418,25 @@ void GatewayBleBridge::refreshDeviceName() { return; } + if (shared_nimble_) { + if (configureSharedScanResponse() != ESP_OK) { + ESP_LOGW(kTag, "failed to refresh shared BLE scan response"); + } + if (matter_advertising_) { +#ifdef CONFIG_GATEWAY_MATTER_SUPPORTED + const CHIP_ERROR err = + chip::DeviceLayer::ConnectivityMgr().SetBLEAdvertisingEnabled(true); + if (err != CHIP_NO_ERROR) { + ESP_LOGW(kTag, "failed to refresh Matter BLE advertising: %s", err.AsString()); + } +#endif + } else if (enabled_ && conn_handle_ == kInvalidConnectionHandle) { + stopAdvertising(); + startAdvertising(); + } + return; + } + #if CONFIG_BT_NIMBLE_GAP_SERVICE const int rc = ble_svc_gap_device_name_set(device_name_.c_str()); if (rc != 0) { @@ -283,13 +452,28 @@ void GatewayBleBridge::refreshDeviceName() { void GatewayBleBridge::setEnabled(bool enabled) { enabled_ = enabled; + if (shared_nimble_ && !enabled_) { + if (configureSharedScanResponse() != ESP_OK) { + ESP_LOGW(kTag, "failed to remove gateway BLE scan response"); + } +#ifdef CONFIG_GATEWAY_MATTER_SUPPORTED + if (matter_advertising_) { + const CHIP_ERROR err = + chip::DeviceLayer::ConnectivityMgr().SetBLEAdvertisingEnabled(true); + if (err != CHIP_NO_ERROR) { + ESP_LOGW(kTag, "failed to refresh Matter BLE advertising: %s", err.AsString()); + } + } +#endif + } if (!synced_) { return; } if (enabled_) { refreshDeviceName(); - if (conn_handle_ == kInvalidConnectionHandle) { + if (conn_handle_ == kInvalidConnectionHandle && + (!shared_nimble_ || !matter_advertising_)) { startAdvertising(); } return; @@ -305,7 +489,15 @@ void GatewayBleBridge::setEnabled(bool enabled) { } void GatewayBleBridge::startAdvertising() { - if (!enabled_ || ble_gap_adv_active()) { +#ifdef CONFIG_GATEWAY_MATTER_SUPPORTED + if (shared_nimble_ && + (matter_advertising_ || + chip::DeviceLayer::ConnectivityMgr().IsBLEAdvertising())) { + matter_advertising_ = true; + return; + } +#endif + if (!enabled_ || gateway_advertising_ || ble_gap_adv_active()) { return; } @@ -333,16 +525,33 @@ void GatewayBleBridge::startAdvertising() { rc = ble_gap_adv_start(own_addr_type_, nullptr, BLE_HS_FOREVER, ¶ms, GapEvent, this); if (rc != 0) { ESP_LOGE(kTag, "failed to start BLE advertising rc=%d", rc); + return; } + gateway_advertising_ = true; + ESP_LOGI(kTag, "gateway BLE advertising started service=0x%04x", kServiceUuid); } void GatewayBleBridge::stopAdvertising() { - if (!ble_gap_adv_active()) { + if ((shared_nimble_ && !gateway_advertising_) || !ble_gap_adv_active()) { return; } const int rc = ble_gap_adv_stop(); if (rc != 0) { ESP_LOGW(kTag, "failed to stop BLE advertising rc=%d", rc); + return; + } + gateway_advertising_ = false; +} + +void GatewayBleBridge::handleMatterAdvertisingChange(bool advertising) { + if (!shared_nimble_) return; + matter_advertising_ = advertising; + if (advertising) { + gateway_advertising_ = false; + return; + } + if (started_ && enabled_ && conn_handle_ == kInvalidConnectionHandle) { + startAdvertising(); } } @@ -479,6 +688,7 @@ int GatewayBleBridge::handleGapEvent(struct ble_gap_event* event) { switch (event->type) { case BLE_GAP_EVENT_CONNECT: if (event->connect.status == 0) { + if (shared_nimble_) return 0; conn_handle_ = event->connect.conn_handle; notify_enabled_.fill(false); last_notify_payload_.clear(); @@ -496,28 +706,37 @@ int GatewayBleBridge::handleGapEvent(struct ble_gap_event* event) { ESP_LOGW(kTag, "ble_gap_update_params rc=%d", rc); } ESP_LOGI(kTag, "BLE client connected handle=%u", conn_handle_); - } else if (enabled_) { + } else if (enabled_ && (!shared_nimble_ || !matter_advertising_)) { startAdvertising(); } return 0; - case BLE_GAP_EVENT_DISCONNECT: - conn_handle_ = kInvalidConnectionHandle; - notify_enabled_.fill(false); - last_notify_payload_.clear(); - last_notify_at_us_ = 0; - if (enabled_) { + case BLE_GAP_EVENT_DISCONNECT: { + const bool gateway_connection = + event->disconnect.conn.conn_handle == conn_handle_; + if (gateway_connection) { + conn_handle_ = kInvalidConnectionHandle; + notify_enabled_.fill(false); + last_notify_payload_.clear(); + last_notify_at_us_ = 0; + } + if (enabled_ && (!shared_nimble_ || !matter_advertising_)) { startAdvertising(); } - ESP_LOGI(kTag, "BLE client disconnected reason=%d", event->disconnect.reason); + if (gateway_connection || !shared_nimble_) { + ESP_LOGI(kTag, "BLE client disconnected reason=%d", event->disconnect.reason); + } return 0; + } case BLE_GAP_EVENT_ADV_COMPLETE: - if (enabled_ && conn_handle_ == kInvalidConnectionHandle) { + gateway_advertising_ = false; + if (!shared_nimble_ && enabled_ && conn_handle_ == kInvalidConnectionHandle) { startAdvertising(); } return 0; case BLE_GAP_EVENT_SUBSCRIBE: { const int index = characteristicIndex(event->subscribe.attr_handle); - if (index >= 0 && event->subscribe.conn_handle == conn_handle_) { + if (index >= 0) { + conn_handle_ = event->subscribe.conn_handle; notify_enabled_[index] = event->subscribe.cur_notify != 0; } return 0; @@ -527,12 +746,13 @@ int GatewayBleBridge::handleGapEvent(struct ble_gap_event* event) { } } -int GatewayBleBridge::handleAccess(uint16_t, uint16_t attr_handle, +int GatewayBleBridge::handleAccess(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) { const int index = characteristicIndex(attr_handle); if (index < 0) { return BLE_ATT_ERR_UNLIKELY; } + conn_handle_ = conn_handle; switch (ctxt->op) { case BLE_GATT_ACCESS_OP_READ_CHR: diff --git a/components/gateway_matter/include/gateway_matter.hpp b/components/gateway_matter/include/gateway_matter.hpp index 5127175..0be432c 100644 --- a/components/gateway_matter/include/gateway_matter.hpp +++ b/components/gateway_matter/include/gateway_matter.hpp @@ -29,6 +29,9 @@ struct GatewayMatterBridgeConfig { uint32_t button_task_stack_size{4096}; UBaseType_t button_task_priority{2}; std::function wifi_provisioning_callback; + std::function ble_prepare_callback; + std::function ble_attach_callback; + std::function ble_advertising_changed_callback; }; // ESP-Matter adapter for the platform-neutral DALI domain. Each discovered diff --git a/components/gateway_matter/src/gateway_matter.cpp b/components/gateway_matter/src/gateway_matter.cpp index 7c220b7..ebec910 100644 --- a/components/gateway_matter/src/gateway_matter.cpp +++ b/components/gateway_matter/src/gateway_matter.cpp @@ -26,6 +26,7 @@ constexpr char kBindingNamespace[] = "dali_matter"; constexpr uint8_t kBindingVersion = 1; constexpr uint16_t kAllDaliDeviceTypesMask = 0x01FF; constexpr uint32_t kCommissioningWindowSeconds = 300; +GatewayMatterBridge* s_active_matter_bridge = nullptr; struct PersistedBinding { uint8_t version; @@ -135,8 +136,17 @@ esp_err_t GatewayMatterBridge::start() { "failed to create Matter aggregator"); aggregator_endpoint_id_ = esp_matter::endpoint::get_id(aggregator); + if (config_.ble_prepare_callback) { + ESP_RETURN_ON_ERROR(config_.ble_prepare_callback(), kTag, + "failed to prepare shared Matter/gateway BLE"); + } + s_active_matter_bridge = this; ESP_RETURN_ON_ERROR(esp_matter::start(MatterEvent), kTag, "failed to start ESP-Matter"); + if (config_.ble_attach_callback) { + ESP_RETURN_ON_ERROR(config_.ble_attach_callback(), kTag, + "failed to attach gateway service to CHIP BLE host"); + } ESP_RETURN_ON_ERROR(initializeBridgeStorage(), kTag, "failed to initialize Matter binding storage"); ESP_RETURN_ON_ERROR(resumeBindings(), kTag, "failed to resume DALI bindings"); @@ -548,6 +558,7 @@ void GatewayMatterBridge::OpenCommissioningWindowWork(intptr_t argument) { void GatewayMatterBridge::MatterEvent( const chip::DeviceLayer::ChipDeviceEvent* event, intptr_t argument) { (void)argument; + auto* bridge = s_active_matter_bridge; switch (event->Type) { case chip::DeviceLayer::DeviceEventType::kCommissioningComplete: ESP_LOGI(kTag, "Matter commissioning complete"); @@ -558,6 +569,13 @@ void GatewayMatterBridge::MatterEvent( case chip::DeviceLayer::DeviceEventType::kCommissioningWindowClosed: ESP_LOGI(kTag, "Matter commissioning window closed"); break; + case chip::DeviceLayer::DeviceEventType::kCHIPoBLEAdvertisingChange: + if (bridge != nullptr && bridge->config_.ble_advertising_changed_callback) { + bridge->config_.ble_advertising_changed_callback( + event->CHIPoBLEAdvertisingChange.Result == + chip::DeviceLayer::kActivity_Started); + } + break; default: break; } diff --git a/components/gateway_network/src/gateway_network.cpp b/components/gateway_network/src/gateway_network.cpp index 0938b6a..8ec4d95 100644 --- a/components/gateway_network/src/gateway_network.cpp +++ b/components/gateway_network/src/gateway_network.cpp @@ -848,6 +848,10 @@ esp_err_t GatewayNetworkService::startWifi() { } esp_err_t GatewayNetworkService::startSetupAp() { +#if !defined(CONFIG_ESP_WIFI_SOFTAP_SUPPORT) + ESP_LOGW(kTag, "setup AP requested but SoftAP support is compiled out"); + return ESP_ERR_NOT_SUPPORTED; +#else stopSmartconfig(); if (wifi_ap_netif_ == nullptr) { wifi_ap_netif_ = esp_netif_create_default_wifi_ap(); @@ -914,6 +918,7 @@ esp_err_t GatewayNetworkService::startSetupAp() { controller_.setWirelessSetupMode(true); ESP_LOGI(kTag, "setup AP started ssid=%s ip=192.168.3.1", kSetupApSsid); return ESP_OK; +#endif } esp_err_t GatewayNetworkService::startSmartconfig() {