mirror of
https://github.com/espressif/esp-matter.git
synced 2026-04-27 19:13:13 +00:00
components/esp_matter: add CustomNetworkConfig support
Skip the Network Commissioning cluster on the root node when CONFIG_CUSTOM_NETWORK_CONFIG is enabled, per Matter spec condition (!CustomNetworkConfig). This allows devices with out-of-band network configuration (rich UI, manufacturer-specific means) to omit the cluster as the spec permits. - Add CONFIG_CUSTOM_NETWORK_CONFIG Kconfig option - Conditionally skip network_commissioning in root_node config/add - Exclude integration.cpp from build when custom config enabled - Add weak stubs for Plugin callbacks as fallback - Also guarded secondary network device type and all the attributes and commands that are part of network commissioning cluster
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
[codespell]
|
||||||
|
ignore-regex = _
|
||||||
|
ignore-words-list = ot, bootup, requestor, pase, lits, kNo, currenty, rsource, CurrentY
|
||||||
@@ -18,7 +18,7 @@ menu "ESP Matter"
|
|||||||
string "ESP Matter NVS partition name"
|
string "ESP Matter NVS partition name"
|
||||||
default "nvs"
|
default "nvs"
|
||||||
help
|
help
|
||||||
The NVS Partition name for ESP Matter to store the NONVOLATILE attribues
|
The NVS Partition name for ESP Matter to store the NONVOLATILE attributes
|
||||||
|
|
||||||
config ESP_MATTER_DEFERRED_ATTR_PERSISTENCE_TIME_MS
|
config ESP_MATTER_DEFERRED_ATTR_PERSISTENCE_TIME_MS
|
||||||
int "ESP Matter deferred attribute persistence time (ms)"
|
int "ESP Matter deferred attribute persistence time (ms)"
|
||||||
@@ -238,6 +238,16 @@ menu "ESP Matter"
|
|||||||
Disable this option to initialize Thread stack and start Thread task with more
|
Disable this option to initialize Thread stack and start Thread task with more
|
||||||
flexibility.
|
flexibility.
|
||||||
|
|
||||||
|
config CUSTOM_NETWORK_CONFIG
|
||||||
|
bool "Use custom network commissioning (skip Network Commissioning cluster)"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enable this if the device uses out-of-band-configured networking
|
||||||
|
(e.g. rich user interface, manufacturer-specific means, custom
|
||||||
|
commissioning flows). When enabled, the Network Commissioning
|
||||||
|
cluster will NOT be added to the root node endpoint, per the
|
||||||
|
Matter spec CustomNetworkConfig condition.
|
||||||
|
|
||||||
menu "Select Supported Matter Clusters"
|
menu "Select Supported Matter Clusters"
|
||||||
visible if ESP_MATTER_ENABLE_DATA_MODEL
|
visible if ESP_MATTER_ENABLE_DATA_MODEL
|
||||||
|
|
||||||
|
|||||||
@@ -412,6 +412,7 @@ attribute_t *create_tc_update_deadline(cluster_t *cluster, nullable<uint32_t> va
|
|||||||
} /* attribute */
|
} /* attribute */
|
||||||
} /* general_commissioning */
|
} /* general_commissioning */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace network_commissioning {
|
namespace network_commissioning {
|
||||||
namespace attribute {
|
namespace attribute {
|
||||||
|
|
||||||
@@ -483,6 +484,7 @@ attribute_t *create_thread_version(cluster_t *cluster, uint16_t value)
|
|||||||
|
|
||||||
} /* attribute */
|
} /* attribute */
|
||||||
} /* network_commissioning */
|
} /* network_commissioning */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace general_diagnostics {
|
namespace general_diagnostics {
|
||||||
namespace attribute {
|
namespace attribute {
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ attribute_t *create_tc_update_deadline(cluster_t *cluster, nullable<uint32_t> va
|
|||||||
} /* attribute */
|
} /* attribute */
|
||||||
} /* general_commissioning */
|
} /* general_commissioning */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace network_commissioning {
|
namespace network_commissioning {
|
||||||
namespace attribute {
|
namespace attribute {
|
||||||
attribute_t *create_max_networks(cluster_t *cluster, uint8_t value);
|
attribute_t *create_max_networks(cluster_t *cluster, uint8_t value);
|
||||||
@@ -146,6 +147,7 @@ attribute_t *create_supported_thread_features(cluster_t *cluster, uint16_t value
|
|||||||
attribute_t *create_thread_version(cluster_t *cluster, uint16_t value);
|
attribute_t *create_thread_version(cluster_t *cluster, uint16_t value);
|
||||||
} /* attribute */
|
} /* attribute */
|
||||||
} /* network_commissioning */
|
} /* network_commissioning */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace general_diagnostics {
|
namespace general_diagnostics {
|
||||||
namespace attribute {
|
namespace attribute {
|
||||||
|
|||||||
@@ -396,6 +396,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
|
|||||||
}
|
}
|
||||||
} /* general_commissioning */
|
} /* general_commissioning */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace network_commissioning {
|
namespace network_commissioning {
|
||||||
const function_generic_t *function_list = NULL;
|
const function_generic_t *function_list = NULL;
|
||||||
const int function_flags = CLUSTER_FLAG_NONE;
|
const int function_flags = CLUSTER_FLAG_NONE;
|
||||||
@@ -447,6 +448,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
|
|||||||
return cluster;
|
return cluster;
|
||||||
}
|
}
|
||||||
} /* network_commissioning */
|
} /* network_commissioning */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace general_diagnostics {
|
namespace general_diagnostics {
|
||||||
const function_generic_t *function_list = NULL;
|
const function_generic_t *function_list = NULL;
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ typedef struct config {
|
|||||||
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
|
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
|
||||||
} /* general_commissioning */
|
} /* general_commissioning */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace network_commissioning {
|
namespace network_commissioning {
|
||||||
typedef struct config {
|
typedef struct config {
|
||||||
uint32_t feature_map;
|
uint32_t feature_map;
|
||||||
@@ -135,6 +136,7 @@ typedef struct config {
|
|||||||
} config_t;
|
} config_t;
|
||||||
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
|
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
|
||||||
} /* network_commissioning */
|
} /* network_commissioning */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace diagnostic_logs {
|
namespace diagnostic_logs {
|
||||||
using config_t = common::config_t;
|
using config_t = common::config_t;
|
||||||
|
|||||||
@@ -1892,6 +1892,7 @@ command_t *create_set_tc_acknowledgements_response(cluster_t *cluster)
|
|||||||
} /* command */
|
} /* command */
|
||||||
} /* general_commissioning */
|
} /* general_commissioning */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace network_commissioning {
|
namespace network_commissioning {
|
||||||
namespace command {
|
namespace command {
|
||||||
|
|
||||||
@@ -1964,6 +1965,7 @@ command_t *create_connect_network_response(cluster_t *cluster)
|
|||||||
|
|
||||||
} /* command */
|
} /* command */
|
||||||
} /* network_commissioning */
|
} /* network_commissioning */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace administrator_commissioning {
|
namespace administrator_commissioning {
|
||||||
namespace command {
|
namespace command {
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ command_t *create_set_tc_acknowledgements_response(cluster_t *cluster);
|
|||||||
} /* command */
|
} /* command */
|
||||||
} /* general_commissioning */
|
} /* general_commissioning */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace network_commissioning {
|
namespace network_commissioning {
|
||||||
namespace command {
|
namespace command {
|
||||||
command_t *create_scan_networks(cluster_t *cluster);
|
command_t *create_scan_networks(cluster_t *cluster);
|
||||||
@@ -145,6 +146,7 @@ command_t *create_network_config_response(cluster_t *cluster);
|
|||||||
command_t *create_connect_network_response(cluster_t *cluster);
|
command_t *create_connect_network_response(cluster_t *cluster);
|
||||||
} /* command */
|
} /* command */
|
||||||
} /* network_commissioning */
|
} /* network_commissioning */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace administrator_commissioning {
|
namespace administrator_commissioning {
|
||||||
namespace command {
|
namespace command {
|
||||||
|
|||||||
@@ -73,7 +73,9 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
|
|||||||
access_control::create(endpoint, &(config->access_control), CLUSTER_FLAG_SERVER);
|
access_control::create(endpoint, &(config->access_control), CLUSTER_FLAG_SERVER);
|
||||||
basic_information::create(endpoint, &(config->basic_information), CLUSTER_FLAG_SERVER);
|
basic_information::create(endpoint, &(config->basic_information), CLUSTER_FLAG_SERVER);
|
||||||
general_commissioning::create(endpoint, &(config->general_commissioning), CLUSTER_FLAG_SERVER);
|
general_commissioning::create(endpoint, &(config->general_commissioning), CLUSTER_FLAG_SERVER);
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
network_commissioning::create(endpoint, &(config->network_commissioning), CLUSTER_FLAG_SERVER);
|
network_commissioning::create(endpoint, &(config->network_commissioning), CLUSTER_FLAG_SERVER);
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
general_diagnostics::create(endpoint, &(config->general_diagnostics), CLUSTER_FLAG_SERVER);
|
general_diagnostics::create(endpoint, &(config->general_diagnostics), CLUSTER_FLAG_SERVER);
|
||||||
administrator_commissioning::create(endpoint, &(config->administrator_commissioning), CLUSTER_FLAG_SERVER,
|
administrator_commissioning::create(endpoint, &(config->administrator_commissioning), CLUSTER_FLAG_SERVER,
|
||||||
ESP_MATTER_NONE_FEATURE_ID);
|
ESP_MATTER_NONE_FEATURE_ID);
|
||||||
@@ -1916,6 +1918,7 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
|
|||||||
|
|
||||||
} /* thread_border_router */
|
} /* thread_border_router */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace secondary_network_interface {
|
namespace secondary_network_interface {
|
||||||
uint32_t get_device_type_id()
|
uint32_t get_device_type_id()
|
||||||
{
|
{
|
||||||
@@ -1946,6 +1949,7 @@ esp_err_t add(endpoint_t *endpoint, config_t *config)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
} /* secondary_network_interface */
|
} /* secondary_network_interface */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace mounted_on_off_control {
|
namespace mounted_on_off_control {
|
||||||
uint32_t get_device_type_id()
|
uint32_t get_device_type_id()
|
||||||
|
|||||||
@@ -197,7 +197,9 @@ typedef struct config {
|
|||||||
cluster::access_control::config_t access_control;
|
cluster::access_control::config_t access_control;
|
||||||
cluster::basic_information::config_t basic_information;
|
cluster::basic_information::config_t basic_information;
|
||||||
cluster::general_commissioning::config_t general_commissioning;
|
cluster::general_commissioning::config_t general_commissioning;
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
cluster::network_commissioning::config_t network_commissioning;
|
cluster::network_commissioning::config_t network_commissioning;
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
cluster::general_diagnostics::config_t general_diagnostics;
|
cluster::general_diagnostics::config_t general_diagnostics;
|
||||||
cluster::administrator_commissioning::config_t administrator_commissioning;
|
cluster::administrator_commissioning::config_t administrator_commissioning;
|
||||||
cluster::operational_credentials::config_t operational_credentials;
|
cluster::operational_credentials::config_t operational_credentials;
|
||||||
@@ -900,6 +902,7 @@ endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_dat
|
|||||||
esp_err_t add(endpoint_t *endpoint, config_t *config);
|
esp_err_t add(endpoint_t *endpoint, config_t *config);
|
||||||
} /* thread_border_router */
|
} /* thread_border_router */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
namespace secondary_network_interface {
|
namespace secondary_network_interface {
|
||||||
typedef struct config {
|
typedef struct config {
|
||||||
cluster::descriptor::config_t descriptor;
|
cluster::descriptor::config_t descriptor;
|
||||||
@@ -911,6 +914,7 @@ uint8_t get_device_type_version();
|
|||||||
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data);
|
endpoint_t *create(node_t *node, config_t *config, uint8_t flags, void *priv_data);
|
||||||
esp_err_t add(endpoint_t *endpoint, config_t *config);
|
esp_err_t add(endpoint_t *endpoint, config_t *config);
|
||||||
} /* secondary_network_interface */
|
} /* secondary_network_interface */
|
||||||
|
#endif // CONFIG_CUSTOM_NETWORK_CONFIG
|
||||||
|
|
||||||
namespace mounted_on_off_control {
|
namespace mounted_on_off_control {
|
||||||
|
|
||||||
|
|||||||
@@ -435,6 +435,31 @@ Please refer to the `advance setup`_ section in the programming guide.
|
|||||||
This has been demonstrated in the `blemesh_bridge`_ and `light_wifi_prov`_ examples.
|
This has been demonstrated in the `blemesh_bridge`_ and `light_wifi_prov`_ examples.
|
||||||
|
|
||||||
|
|
||||||
|
A1.17 Using custom network commissioning (CustomNetworkConfig)
|
||||||
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
If your device uses out-of-band-configured networking (for example a rich user interface,
|
||||||
|
manufacturer-specific means, or a custom commissioning flow), the Matter specification's
|
||||||
|
``CustomNetworkConfig`` condition allows you to omit the Network Commissioning cluster from
|
||||||
|
the root node endpoint.
|
||||||
|
|
||||||
|
To enable this in ESP-Matter, set the following Kconfig option:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
CONFIG_CUSTOM_NETWORK_CONFIG=y
|
||||||
|
|
||||||
|
When this option is enabled:
|
||||||
|
|
||||||
|
- The Network Commissioning cluster will **not** be created on the root node endpoint.
|
||||||
|
- The ``secondary_network_interface`` endpoint type is also excluded from compilation.
|
||||||
|
- All Network Commissioning cluster code (attributes, commands, cluster creation) is
|
||||||
|
compiled out, reducing firmware size.
|
||||||
|
|
||||||
|
This is useful for devices that manage their own network configuration and do not need
|
||||||
|
the standard Matter Network Commissioning flow.
|
||||||
|
|
||||||
|
|
||||||
.. _bleprph: https://github.com/espressif/esp-idf/tree/b5ac4fbdf9e9fb320bb0a98ee4fbaa18f8566f37/examples/bluetooth/nimble/bleprph
|
.. _bleprph: https://github.com/espressif/esp-idf/tree/b5ac4fbdf9e9fb320bb0a98ee4fbaa18f8566f37/examples/bluetooth/nimble/bleprph
|
||||||
.. _blecent: https://github.com/espressif/esp-idf/tree/b5ac4fbdf9e9fb320bb0a98ee4fbaa18f8566f37/examples/bluetooth/nimble/blecent
|
.. _blecent: https://github.com/espressif/esp-idf/tree/b5ac4fbdf9e9fb320bb0a98ee4fbaa18f8566f37/examples/bluetooth/nimble/blecent
|
||||||
.. _bleprph_advertise(): https://github.com/espressif/esp-idf/blob/b5ac4fbdf9e9fb320bb0a98ee4fbaa18f8566f37/examples/bluetooth/nimble/bleprph/main/main.c#L146
|
.. _bleprph_advertise(): https://github.com/espressif/esp-idf/blob/b5ac4fbdf9e9fb320bb0a98ee4fbaa18f8566f37/examples/bluetooth/nimble/bleprph/main/main.c#L146
|
||||||
|
|||||||
Reference in New Issue
Block a user