Merge branch 'priv_cluster_revision' into 'main'

components/esp-matter: Make the cluster revision private to SDK

See merge request app-frameworks/esp-matter!825
This commit is contained in:
Hrishikesh Dhayagude
2024-07-25 23:32:24 +08:00
3 changed files with 553 additions and 510 deletions
+88 -278
View File
@@ -18,6 +18,7 @@
#include <esp_matter_cluster.h>
#include <esp_matter_core.h>
#include <esp_matter_delegate_callbacks.h>
#include <esp_matter_cluster_revisions.h>
#include <app-common/zap-generated/callback.h>
#include <app/PluginApplicationCallbacks.h>
@@ -128,11 +129,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -158,19 +155,13 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
if (flags & CLUSTER_FLAG_SERVER) {
/* Attributes managed internally */
global::attribute::create_cluster_revision(cluster, 1);
global::attribute::create_feature_map(cluster, 0);
attribute::create_action_list(cluster, NULL, 0, 0);
attribute::create_endpoint_lists(cluster, NULL, 0, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
event::create_action_failed(cluster);
@@ -209,12 +200,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
event::create_access_control_entry_changed(cluster);
@@ -260,8 +246,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_max_paths_per_invoke(cluster, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_node_label(cluster, config->node_label, strlen(config->node_label));
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -302,11 +288,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_binding(cluster, NULL, 0, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -337,11 +319,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -380,8 +358,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_default_ota_providers(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_update_possible(cluster, config->update_possible);
attribute::create_update_state(cluster, config->update_state);
attribute::create_update_state_progress(cluster, config->update_state_progress);
@@ -429,8 +407,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_supports_concurrent_connection(cluster, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_breadcrumb(cluster, config->breadcrumb);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -488,11 +466,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -538,11 +512,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
event::create_boot_reason(cluster);
@@ -582,11 +552,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_admin_vendor_id(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -632,11 +598,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_current_fabric_index(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -727,11 +689,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_rssi(cluster, nullable<int8_t>());
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -779,11 +737,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_active_network_faults(cluster, NULL, 0, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -811,11 +765,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -853,11 +803,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
event::create_time_failure(cluster);
@@ -888,11 +834,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -927,8 +869,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_reachable(cluster, config->reachable);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -961,8 +903,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
global::attribute::create_feature_map(cluster, 0);
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_status(cluster, config->status);
attribute::create_order(cluster, config->order, 0x00, 0xFF);
attribute::create_description(cluster, config->description, strlen(config->description));
@@ -1018,11 +960,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_active_mode_threshold(cluster, CONFIG_ICD_ACTIVE_MODE_THRESHOLD_MS);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
#if defined(CHIP_CONFIG_ENABLE_ICD_CIP) && CHIP_CONFIG_ENABLE_ICD_CIP
@@ -1067,11 +1005,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_label_list(cluster, NULL, 0, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1103,11 +1037,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_label_list(cluster, NULL, 0, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1145,8 +1075,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_identify_time(cluster, config->identify_time, 0x0, 0xFFFE);
attribute::create_identify_type(cluster, config->identify_type);
} else {
@@ -1187,8 +1117,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_group_name_support(cluster, config->group_name_support);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -1238,8 +1168,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_scene_table_size(cluster, config->scene_table_size);
attribute::create_fabric_scene_info(cluster, NULL, 0, 0);
} else {
@@ -1293,8 +1223,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_on_off(cluster, config->on_off);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -1352,8 +1282,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_current_level(cluster, config->current_level);
attribute::create_on_level(cluster, config->on_level);
attribute::create_options(cluster, config->options, 0x0, 0x3);
@@ -1411,8 +1341,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_color_mode(cluster, config->color_mode);
attribute::create_color_control_options(cluster, config->color_control_options);
attribute::create_enhanced_color_mode(cluster, config->enhanced_color_mode, 0, 3);
@@ -1491,8 +1421,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_fan_mode(cluster, config->fan_mode, 0, 6);
attribute::create_fan_mode_sequence(cluster, config->fan_mode_sequence, 0, 5);
attribute::create_percent_setting(cluster, config->percent_setting, 0, 100);
@@ -1536,8 +1466,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_local_temperature(cluster, config->local_temperature);
attribute::create_control_sequence_of_operation(cluster, config->control_sequence_of_operation, 0x0, 0x5);
attribute::create_system_mode(cluster, config->system_mode, 0x0, 0x7);
@@ -1604,8 +1534,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_temperature_display_mode(cluster, config->temperature_display_mode);
attribute::create_keypad_lockout(cluster, config->keypad_lockout);
} else {
@@ -1643,11 +1573,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_air_quality(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1684,11 +1610,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_change_indication(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1725,11 +1647,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_change_indication(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1762,11 +1680,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1800,11 +1714,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1838,11 +1748,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1876,11 +1782,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1914,11 +1816,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1952,11 +1850,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -1990,11 +1884,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -2028,11 +1918,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -2066,11 +1952,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -2104,11 +1986,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_measurement_medium(cluster, config->measurement_medium);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -2150,11 +2028,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_operational_error(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
event::create_operational_error(cluster);
@@ -2192,8 +2066,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -2235,11 +2109,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
global::attribute::create_feature_map(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -2278,8 +2148,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_supported_dryness_levels(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_selected_dryness_level(cluster, config->selected_dryness_level);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -2319,8 +2189,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -2359,11 +2229,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
global::attribute::create_feature_map(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -2400,11 +2266,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
attribute::create_end_of_service_alert(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
event::create_low_battery(cluster);
@@ -2457,8 +2319,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_lock_state(cluster, config->lock_state);
attribute::create_lock_type(cluster, config->lock_type);
attribute::create_actuator_enabled(cluster, config->actuator_enabled);
@@ -2514,8 +2376,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_type(cluster, config->type);
attribute::create_config_status(cluster, config->config_status);
attribute::create_operational_status(cluster, config->operational_status);
@@ -2567,8 +2429,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_number_of_positions(cluster, config->number_of_positions);
attribute::create_current_position(cluster, config->current_position);
} else {
@@ -2607,8 +2469,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_temperature_measured_value(cluster, config->measured_value);
attribute::create_temperature_min_measured_value(cluster, config->min_measured_value);
attribute::create_temperature_max_measured_value(cluster, config->max_measured_value);
@@ -2648,8 +2510,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_relative_humidity_measured_value(cluster, config->measured_value);
attribute::create_relative_humidity_min_measured_value(cluster, config->min_measured_value);
attribute::create_relative_humidity_max_measured_value(cluster, config->max_measured_value);
@@ -2691,8 +2553,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_occupancy(cluster, config->occupancy);
attribute::create_occupancy_sensor_type(cluster, config->occupancy_sensor_type);
attribute::create_occupancy_sensor_type_bitmap(cluster, config->occupancy_sensor_type_bitmap);
@@ -2732,8 +2594,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_state_value(cluster, config->state_value);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -2775,11 +2637,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
@@ -2825,9 +2683,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
global::attribute::create_feature_map(cluster, 0);
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_active_locale(cluster, config->active_locale, strlen(config->active_locale));
/* Attributes managed internally */
@@ -2869,7 +2727,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
if (config) {
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
global::attribute::create_cluster_revision(cluster, cluster_revision);
/* Attributes managed internally */
attribute::create_hour_format(cluster, config->hour_format);
@@ -2912,8 +2770,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
global::attribute::create_feature_map(cluster, 0);
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_illuminance_measured_value(cluster, config->illuminance_measured_value, 0x0000, 0xFFFF);
attribute::create_illuminance_min_measured_value(cluster, config->illuminance_min_measured_value, 0x0001,
0xFFFD);
@@ -2953,8 +2811,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
global::attribute::create_feature_map(cluster, 0);
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_pressure_measured_value(cluster, config->pressure_measured_value);
attribute::create_pressure_min_measured_value(cluster, config->pressure_min_measured_value);
attribute::create_pressure_max_measured_value(cluster, config->pressure_max_measured_value);
@@ -2992,8 +2850,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
global::attribute::create_feature_map(cluster, 0);
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_flow_measured_value(cluster, config->flow_measured_value);
attribute::create_flow_min_measured_value(cluster, config->flow_min_measured_value);
attribute::create_flow_max_measured_value(cluster, config->flow_max_measured_value);
@@ -3037,8 +2895,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_max_pressure(cluster, config->max_pressure);
attribute::create_max_speed(cluster, config->max_speed);
attribute::create_max_flow(cluster, config->max_flow);
@@ -3078,8 +2936,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_supported_modes(cluster, NULL, 0, 0);
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_mode_select_description(cluster, config->mode_select_description, strlen(config->mode_select_description));
attribute::create_standard_namespace(cluster, config->standard_namespace);
attribute::create_current_mode(cluster, config->current_mode);
@@ -3125,11 +2983,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* commands */
@@ -3163,11 +3017,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
if (features & feature::watermarks::get_id()) {
@@ -3200,11 +3050,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -3247,8 +3093,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_mask(cluster, config->mask);
attribute::create_state(cluster, config->state);
attribute::create_supported(cluster, config->supported);
@@ -3286,8 +3132,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
mode_base::attribute::create_supported_modes(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -3326,8 +3172,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
mode_base::attribute::create_supported_modes(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -3365,8 +3211,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
mode_base::attribute::create_supported_modes(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -3404,8 +3250,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
mode_base::attribute::create_supported_modes(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -3441,11 +3287,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
microwave_oven_control::attribute::create_max_cook_time(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -3490,11 +3332,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
@@ -3529,11 +3367,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Commands */
@@ -3570,11 +3404,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -3624,11 +3454,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_accuracy(cluster, NULL, 0, 0);
attribute::create_active_power(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -3682,11 +3508,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_accuracy(cluster, NULL, 0, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -3742,8 +3564,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
mode_base::attribute::create_supported_modes(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -3790,11 +3612,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_session_energy_charged(cluster, 0);
/* Attributes not managed internally */
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -3853,8 +3671,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
/** Attributes not managed internally **/
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
attribute::create_open_duration(cluster, config->open_duration);
attribute::create_default_open_duration(cluster, config->default_open_duration);
attribute::create_current_state(cluster, config->current_state);
@@ -3916,11 +3734,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_abs_min_power(cluster, 0);
attribute::create_abs_max_power(cluster, 0);
/** Attributes not managed internally **/
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
/* Features */
@@ -3978,8 +3792,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags)
mode_base::attribute::create_supported_modes(cluster, NULL, 0, 0);
/* Attributes not managed internally */
global::attribute::create_cluster_revision(cluster, cluster_revision);
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
mode_base::attribute::create_current_mode(cluster, config->current_mode);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
@@ -4029,11 +3843,7 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
attribute::create_application_version(cluster, NULL, 0);
attribute::create_allowed_vendor_list(cluster, NULL, 0 , 0);
/** Attributes not managed internally **/
if (config) {
global::attribute::create_cluster_revision(cluster, config->cluster_revision);
} else {
ESP_LOGE(TAG, "Config is NULL. Cannot add some attributes.");
}
global::attribute::create_cluster_revision(cluster, cluster_revision);
}
return cluster;
}
+93 -232
View File
@@ -47,68 +47,54 @@ void delegate_init_callback_common();
* If a custom cluster needs to be created, the low level esp_matter::cluster::create() API can be used.
*/
namespace descriptor {
namespace common {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
// Empty config for API consistency
} config_t;
} /* common */
namespace descriptor {
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* descriptor */
namespace actions {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* actions */
namespace access_control {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* access_control */
namespace basic_information {
typedef struct config {
uint16_t cluster_revision;
char node_label[k_max_node_label_length + 1];
config() : cluster_revision(3), node_label{0} {}
config() : node_label{0} {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* basic_information */
namespace binding {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* binding */
namespace ota_provider {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* ota_provider */
namespace ota_requestor {
typedef struct config {
uint16_t cluster_revision;
bool update_possible;
uint8_t update_state;
nullable<uint8_t> update_state_progress;
config() : cluster_revision(1), update_possible(true), update_state(0), update_state_progress() {}
config() : update_possible(true), update_state(0), update_state_progress() {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -116,109 +102,67 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace general_commissioning {
typedef struct config {
uint16_t cluster_revision;
uint64_t breadcrumb;
config() : cluster_revision(1), breadcrumb(0) {}
config() : breadcrumb(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* general_commissioning */
namespace network_commissioning {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(2) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* network_commissioning */
namespace diagnostic_logs {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* diagnostic_logs */
namespace general_diagnostics {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(2) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* general_diagnostics */
namespace software_diagnostics {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
} /* software_diagnostics */
namespace administrator_commissioning {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
} /* administrator_commissioning */
namespace operational_credentials {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* operational_credentials */
namespace group_key_management {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(2) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, uint8_t flags);
} /* group_key_management */
namespace wifi_network_diagnotics {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* wifi_network_diagnotics */
namespace thread_network_diagnostics {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(2) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* thread_network_diagnostics */
namespace ethernet_network_diagnostics {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* ethernet_network_diagnostics */
namespace time_synchronization {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(2), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -226,9 +170,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace unit_localization {
typedef struct config {
uint16_t cluster_revision;
feature::temperature_unit::config_t temperature_unit;
config() : cluster_revision(1) {}
// Empty config for API consistency
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -236,9 +179,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace bridged_device_basic_information {
typedef struct config {
uint16_t cluster_revision;
bool reachable;
config() : cluster_revision(2), reachable(true) {}
config() : reachable(true) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -246,7 +188,6 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace power_source {
typedef struct config {
uint16_t cluster_revision;
uint8_t status;
uint8_t order;
char description[k_max_description_length + 1];
@@ -254,7 +195,7 @@ typedef struct config {
feature::battery::config_t battery;
feature::rechargeable::config_t rechargeable;
feature::replaceable::config_t replaceable;
config() : cluster_revision(2), status(0), order(0), description{0} {}
config() : status(0), order(0), description{0} {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -262,38 +203,28 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace icd_management {
typedef struct config {
uint16_t cluster_revision;
feature::user_active_mode_trigger::config_t user_active_mode_trigger;
config() : cluster_revision(2) {}
// Empty config for API consistency
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
} /* icd_management */
namespace user_label {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* user_label */
namespace fixed_label {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* fixed_label */
namespace identify {
typedef struct config {
uint16_t cluster_revision;
uint16_t identify_time;
uint8_t identify_type;
config() : cluster_revision(4), identify_time(0), identify_type(0) {}
config() : identify_time(0), identify_type(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -301,9 +232,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace groups {
typedef struct config {
uint16_t cluster_revision;
uint8_t group_name_support;
config() : cluster_revision(4), group_name_support(0) {}
config() : group_name_support(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -311,9 +241,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace scenes_management {
typedef struct config {
uint16_t cluster_revision;
uint16_t scene_table_size;
config() : cluster_revision(1), scene_table_size(16) {}
config() : scene_table_size(16) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -321,10 +250,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace on_off {
typedef struct config {
uint16_t cluster_revision;
bool on_off;
feature::lighting::config_t lighting;
config() : cluster_revision(6), on_off(false) {}
config() : on_off(false) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -332,12 +260,11 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace level_control {
typedef struct config {
uint16_t cluster_revision;
nullable<uint8_t> current_level;
nullable<uint8_t> on_level;
uint8_t options;
feature::lighting::config_t lighting;
config() : cluster_revision(5), current_level(), on_level(), options(0) {}
config() : current_level(), on_level(), options(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -345,7 +272,6 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace color_control {
typedef struct config {
uint16_t cluster_revision;
uint8_t color_mode;
uint8_t color_control_options;
uint8_t enhanced_color_mode;
@@ -356,7 +282,7 @@ typedef struct config {
feature::xy::config_t xy;
feature::enhanced_hue::config_t enhanced_hue;
feature::color_loop::config_t color_loop;
config() : cluster_revision(6), color_mode(1), color_control_options(0), enhanced_color_mode(1),
config() : color_mode(1), color_control_options(0), enhanced_color_mode(1),
color_capabilities(0), number_of_primaries(0) {}
} config_t;
@@ -365,13 +291,12 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace fan_control {
typedef struct config {
uint16_t cluster_revision;
uint8_t fan_mode;
uint8_t fan_mode_sequence;
nullable<uint8_t> percent_setting;
uint8_t percent_current;
void *delegate;
config() : cluster_revision(4), fan_mode(0), fan_mode_sequence(2), percent_setting(0), percent_current(0), delegate(nullptr) {}
config() : fan_mode(0), fan_mode_sequence(2), percent_setting(0), percent_current(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -379,7 +304,6 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace thermostat {
typedef struct config {
uint16_t cluster_revision;
nullable<int16_t> local_temperature;
uint8_t control_sequence_of_operation;
uint8_t system_mode;
@@ -390,7 +314,7 @@ typedef struct config {
feature::schedule_configuration::config_t schedule_configuration;
feature::auto_mode::config_t auto_mode;
feature::local_temperature_not_exposed::config_t local_temperature_not_exposed;
config() : cluster_revision(6), local_temperature(), control_sequence_of_operation(4), system_mode(1) {}
config() : local_temperature(), control_sequence_of_operation(4), system_mode(1) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -398,29 +322,23 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace thermostat_user_interface_configuration {
typedef struct config {
uint16_t cluster_revision;
uint8_t temperature_display_mode;
uint8_t keypad_lockout;
config() : cluster_revision(2), temperature_display_mode(0), keypad_lockout(0) {}
config() : temperature_display_mode(0), keypad_lockout(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* thermostat_user_interface_configuration */
namespace air_quality {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* air_quality */
namespace hepa_filter_monitoring {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -428,9 +346,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace activated_carbon_filter_monitoring {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -438,9 +355,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace carbon_monoxide_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -448,9 +364,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace carbon_dioxide_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -458,9 +373,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace nitrogen_dioxide_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -468,9 +382,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace ozone_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -478,9 +391,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace formaldehyde_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -488,9 +400,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace pm1_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -498,9 +409,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace pm25_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -508,9 +418,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace pm10_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -518,9 +427,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace radon_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -528,9 +436,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace total_volatile_organic_compounds_concentration_measurement {
typedef struct config {
uint16_t cluster_revision;
uint8_t measurement_medium;
config() : cluster_revision(3), measurement_medium(0) {}
config() : measurement_medium(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -538,9 +445,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace operational_state {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(2), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -548,10 +454,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace laundry_washer_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -559,9 +464,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace laundry_washer_controls {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -569,10 +473,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace laundry_dryer_controls {
typedef struct config {
uint16_t cluster_revision;
nullable<uint8_t> selected_dryness_level;
void *delegate;
config() : cluster_revision(1), selected_dryness_level(0), delegate(nullptr) {}
config() : selected_dryness_level(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -580,10 +483,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace dish_washer_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -591,33 +493,27 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace dish_washer_alarm {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* dish_washer_alarm */
namespace smoke_co_alarm {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* smoke_co_alarm */
namespace door_lock {
typedef struct config {
uint16_t cluster_revision;
nullable<uint8_t> lock_state;
uint8_t lock_type;
bool actuator_enabled;
uint8_t operating_mode;
uint16_t supported_operating_modes;
void *delegate;
config() : cluster_revision(7), lock_state(0), lock_type(0), actuator_enabled(0), operating_mode(0), supported_operating_modes(0xFFF6), delegate(nullptr) {}
config() : lock_state(0), lock_type(0), actuator_enabled(0), operating_mode(0), supported_operating_modes(0xFFF6), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -625,7 +521,6 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace window_covering {
typedef struct config {
uint16_t cluster_revision;
uint8_t type;
uint8_t config_status;
uint8_t operational_status;
@@ -633,7 +528,7 @@ typedef struct config {
uint8_t mode;
feature::lift::config_t lift;
void *delegate;
config(uint8_t end_product_type = 0) : cluster_revision(5), type(0), config_status(0), operational_status(0), end_product_type(end_product_type), mode(0), delegate(nullptr) {}
config(uint8_t end_product_type = 0) : type(0), config_status(0), operational_status(0), end_product_type(end_product_type), mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -641,10 +536,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace switch_cluster {
typedef struct config {
uint16_t cluster_revision;
uint8_t number_of_positions;
uint8_t current_position;
config() : cluster_revision(1), number_of_positions(2), current_position(0) {}
config() : number_of_positions(2), current_position(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -652,11 +546,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace temperature_measurement {
typedef struct config {
uint16_t cluster_revision;
nullable<int16_t> measured_value;
nullable<int16_t> min_measured_value;
nullable<int16_t> max_measured_value;
config() : cluster_revision(4), measured_value(), min_measured_value(), max_measured_value() {}
config() : measured_value(), min_measured_value(), max_measured_value() {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -664,11 +557,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace relative_humidity_measurement {
typedef struct config {
uint16_t cluster_revision;
nullable<uint16_t> measured_value;
nullable<uint16_t> min_measured_value;
nullable<uint16_t> max_measured_value;
config() : cluster_revision(3), measured_value(), min_measured_value(), max_measured_value() {}
config() : measured_value(), min_measured_value(), max_measured_value() {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -676,11 +568,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace occupancy_sensing {
typedef struct config {
uint16_t cluster_revision;
uint8_t occupancy;
uint8_t occupancy_sensor_type;
uint8_t occupancy_sensor_type_bitmap;
config() : cluster_revision(4), occupancy(0), occupancy_sensor_type(0),
config() : occupancy(0), occupancy_sensor_type(0),
occupancy_sensor_type_bitmap(0) {}
} config_t;
@@ -689,9 +580,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace boolean_state {
typedef struct config {
uint16_t cluster_revision;
bool state_value;
config() : cluster_revision(1), state_value(0) {}
config() : state_value(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -699,13 +589,12 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace boolean_state_configuration {
typedef struct config {
uint16_t cluster_revision;
feature::visual::config_t visual;
feature::audible::config_t audible;
feature::alarm_suppress::config_t alarm_suppress;
feature::sensitivity_level::config_t sensitivity_level;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -713,9 +602,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace localization_configuration {
typedef struct config {
uint16_t cluster_revision;
char active_locale[k_max_active_locale_length + 1];
config() : cluster_revision(4), active_locale{0} {}
config() : active_locale{0} {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -723,10 +611,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace time_format_localization {
typedef struct config {
uint16_t cluster_revision;
uint8_t hour_format;
feature::calendar_format::config_t calendar_format;
config() : cluster_revision(4), hour_format(0) {}
config() : hour_format(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -734,11 +621,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace illuminance_measurement {
typedef struct config {
uint16_t cluster_revision;
nullable<uint16_t> illuminance_measured_value;
nullable<uint16_t> illuminance_min_measured_value;
nullable<uint16_t> illuminance_max_measured_value;
config() : cluster_revision(3), illuminance_measured_value(0), illuminance_min_measured_value(), illuminance_max_measured_value() {}
config() : illuminance_measured_value(0), illuminance_min_measured_value(), illuminance_max_measured_value() {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -746,11 +632,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace pressure_measurement {
typedef struct config {
uint16_t cluster_revision;
nullable<int16_t> pressure_measured_value;
nullable<int16_t> pressure_min_measured_value;
nullable<int16_t> pressure_max_measured_value;
config() : cluster_revision(3), pressure_measured_value(), pressure_min_measured_value(), pressure_max_measured_value() {}
config() : pressure_measured_value(), pressure_min_measured_value(), pressure_max_measured_value() {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -758,11 +643,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace flow_measurement {
typedef struct config {
uint16_t cluster_revision;
nullable<uint16_t> flow_measured_value;
nullable<uint16_t> flow_min_measured_value;
nullable<uint16_t> flow_max_measured_value;
config() : cluster_revision(3), flow_measured_value(), flow_min_measured_value(), flow_max_measured_value() {}
config() : flow_measured_value(), flow_min_measured_value(), flow_max_measured_value() {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -770,7 +654,6 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace pump_configuration_and_control {
typedef struct config {
uint16_t cluster_revision;
// Pump Information Attributes
const nullable<int16_t> max_pressure;
const nullable<uint16_t> max_speed;
@@ -785,7 +668,7 @@ typedef struct config {
nullable<int16_t> max_pressure = nullable<int16_t>(),
nullable<uint16_t> max_speed = nullable<uint16_t>(),
nullable<uint16_t> max_flow = nullable<uint16_t>()
) : cluster_revision(3), max_pressure(max_pressure), max_speed(max_speed), max_flow(max_flow),
) : max_pressure(max_pressure), max_speed(max_speed), max_flow(max_flow),
effective_operation_mode(0), effective_control_mode(0), capacity(), operation_mode(0) {}
} config_t;
@@ -794,12 +677,11 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace mode_select {
typedef struct config {
uint16_t cluster_revision;
char mode_select_description[k_max_mode_select_description_length + 1];
const nullable<uint16_t> standard_namespace;
uint8_t current_mode;
feature::on_off::config_t on_off;
config() : cluster_revision(2), mode_select_description{0}, standard_namespace(), current_mode(0) {}
config() : mode_select_description{0}, standard_namespace(), current_mode(0) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -807,11 +689,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace temperature_control {
typedef struct config {
uint16_t cluster_revision;
feature::temperature_number::config_t temperature_number;
feature::temperature_level::config_t temperature_level;
feature::temperature_step::config_t temperature_step;
config() : cluster_revision(1) {}
// Empty config for API consistency
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -819,11 +700,10 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace refrigerator_alarm {
typedef struct config {
uint16_t cluster_revision;
uint32_t mask;
uint32_t state;
uint32_t supported;
config() : cluster_revision(1), mask(1), state(0), supported(1) {}
config() : mask(1), state(0), supported(1) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -831,10 +711,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace refrigerator_and_tcc_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -842,10 +721,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace rvc_run_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -853,10 +731,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace rvc_clean_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -864,10 +741,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace microwave_oven_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -875,28 +751,22 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace microwave_oven_control {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
} /* microwave_oven_control */
namespace rvc_operational_state {
typedef struct config {
uint16_t cluster_revision;
config() : cluster_revision(1) {}
} config_t;
using config_t = common::config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
} /* rvc_operational_state */
namespace keypad_input {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -904,9 +774,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace power_topology {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -914,9 +783,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace electrical_power_measurement {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -924,9 +792,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace electrical_energy_measurement {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -934,10 +801,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace energy_evse_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -945,9 +811,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace energy_evse {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -955,7 +820,6 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace valve_configuration_and_control {
typedef struct config {
uint16_t cluster_revision;
nullable<uint32_t> open_duration;
nullable<uint32_t> default_open_duration;
nullable<uint8_t> current_state;
@@ -963,7 +827,7 @@ typedef struct config {
feature::time_sync::config_t time_sync;
feature::level::config_t level;
void *delegate;
config() : cluster_revision(1), open_duration(), default_open_duration(), current_state(), target_state(), delegate(nullptr) {}
config() : open_duration(), default_open_duration(), current_state(), target_state(), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -971,9 +835,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace device_energy_management {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(4), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_t features);
@@ -981,10 +844,9 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags, uint32_
namespace device_energy_management_mode {
typedef struct config {
uint16_t cluster_revision;
uint8_t current_mode;
void *delegate;
config() : cluster_revision(1), current_mode(0), delegate(nullptr) {}
config() : current_mode(0), delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -992,9 +854,8 @@ cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
namespace application_basic {
typedef struct config {
uint16_t cluster_revision;
void *delegate;
config() : cluster_revision(1), delegate(nullptr) {}
config() : delegate(nullptr) {}
} config_t;
cluster_t *create(endpoint_t *endpoint, config_t *config, uint8_t flags);
@@ -0,0 +1,372 @@
// Copyright 2024 Espressif Systems (Shanghai) PTE LTD
//
// 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.
#pragma once
#include <stdint.h>
namespace esp_matter {
namespace cluster {
namespace descriptor {
constexpr uint16_t cluster_revision = 2;
} // namespace descriptor
namespace actions {
constexpr uint16_t cluster_revision = 1;
} // namespace actions
namespace access_control {
constexpr uint16_t cluster_revision = 1;
} // namespace access_control
namespace basic_information {
constexpr uint16_t cluster_revision = 3;
} // namespace basic_information
namespace binding {
constexpr uint16_t cluster_revision = 1;
} // namespace binding
namespace ota_provider {
constexpr uint16_t cluster_revision = 1;
} // namespace ota_provider
namespace ota_requestor {
constexpr uint16_t cluster_revision = 1;
} // namespace ota_requestor
namespace general_commissioning {
constexpr uint16_t cluster_revision = 1;
} // namespace general_commissioning
namespace network_commissioning {
constexpr uint16_t cluster_revision = 2;
} // namespace network_commissioning
namespace diagnostic_logs {
constexpr uint16_t cluster_revision = 1;
} // namespace diagnostic_logs
namespace general_diagnostics {
constexpr uint16_t cluster_revision = 2;
} // namespace general_diagnostics
namespace software_diagnostics {
constexpr uint16_t cluster_revision = 1;
} // namespace software_diagnostics
namespace administrator_commissioning {
constexpr uint16_t cluster_revision = 1;
} // namespace administrator_commissioning
namespace operational_credentials {
constexpr uint16_t cluster_revision = 1;
} // namespace operational_credentials
namespace group_key_management {
constexpr uint16_t cluster_revision = 2;
} // namespace group_key_management
namespace wifi_network_diagnotics {
constexpr uint16_t cluster_revision = 1;
} // namespace wifi_network_diagnotics
namespace thread_network_diagnostics {
constexpr uint16_t cluster_revision = 2;
} // namespace thread_network_diagnostics
namespace ethernet_network_diagnostics {
constexpr uint16_t cluster_revision = 1;
} // namespace ethernet_network_diagnostics
namespace time_synchronization {
constexpr uint16_t cluster_revision = 2;
} // namespace time_synchronization
namespace unit_localization {
constexpr uint16_t cluster_revision = 1;
} // namespace unit_localization
namespace bridged_device_basic_information {
constexpr uint16_t cluster_revision = 2;
} // namespace bridged_device_basic_information
namespace power_source {
constexpr uint16_t cluster_revision = 2;
} // namespace power_source
namespace icd_management {
constexpr uint16_t cluster_revision = 2;
} // namespace icd_management
namespace user_label {
constexpr uint16_t cluster_revision = 1;
} // namespace user_label
namespace fixed_label {
constexpr uint16_t cluster_revision = 1;
} // namespace fixed_label
namespace identify {
constexpr uint16_t cluster_revision = 4;
} // namespace identify
namespace groups {
constexpr uint16_t cluster_revision = 4;
} // namespace groups
namespace scenes_management {
constexpr uint16_t cluster_revision = 1;
} // namespace scenes_management
namespace on_off {
constexpr uint16_t cluster_revision = 6;
} // namespace on_off
namespace level_control {
constexpr uint16_t cluster_revision = 5;
} // namespace level_control
namespace color_control {
constexpr uint16_t cluster_revision = 6;
} // namespace color_control
namespace fan_control {
constexpr uint16_t cluster_revision = 4;
} // namespace fan_control
namespace thermostat {
constexpr uint16_t cluster_revision = 6;
} // namespace thermostat
namespace thermostat_user_interface_configuration {
constexpr uint16_t cluster_revision = 2;
} // namespace thermostat_user_interface_configuration
namespace air_quality {
constexpr uint16_t cluster_revision = 1;
} // namespace air_quality
namespace hepa_filter_monitoring {
constexpr uint16_t cluster_revision = 1;
} // namespace hepa_filter_monitoring
namespace activated_carbon_filter_monitoring {
constexpr uint16_t cluster_revision = 1;
} // namespace activated_carbon_filter_monitoring
namespace carbon_monoxide_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace carbon_monoxide_concentration_measurement
namespace carbon_dioxide_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace carbon_dioxide_concentration_measurement
namespace nitrogen_dioxide_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace nitrogen_dioxide_concentration_measurement
namespace ozone_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace ozone_concentration_measurement
namespace formaldehyde_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace formaldehyde_concentration_measurement
namespace pm1_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace pm1_concentration_measurement
namespace pm25_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace pm25_concentration_measurement
namespace pm10_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace pm10_concentration_measurement
namespace radon_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace radon_concentration_measurement
namespace total_volatile_organic_compounds_concentration_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace total_volatile_organic_compounds_concentration_measurement
namespace operational_state {
constexpr uint16_t cluster_revision = 2;
} // namespace operational_state
namespace laundry_washer_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace laundry_washer_mode
namespace laundry_washer_controls {
constexpr uint16_t cluster_revision = 1;
} // namespace laundry_washer_controls
namespace laundry_dryer_controls {
constexpr uint16_t cluster_revision = 1;
} // namespace laundry_dryer_controls
namespace dish_washer_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace dish_washer_mode
namespace dish_washer_alarm {
constexpr uint16_t cluster_revision = 1;
} // namespace dish_washer_alarm
namespace smoke_co_alarm {
constexpr uint16_t cluster_revision = 1;
} // namespace smoke_co_alarm
namespace door_lock {
constexpr uint16_t cluster_revision = 7;
} // namespace door_lock
namespace window_covering {
constexpr uint16_t cluster_revision = 5;
} // namespace window_covering
namespace switch_cluster {
constexpr uint16_t cluster_revision = 1;
} // namespace switch_cluster
namespace temperature_measurement {
constexpr uint16_t cluster_revision = 4;
} // namespace temperature_measurement
namespace relative_humidity_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace relative_humidity_measurement
namespace occupancy_sensing {
constexpr uint16_t cluster_revision = 4;
} // namespace occupancy_sensing
namespace boolean_state {
constexpr uint16_t cluster_revision = 1;
} // namespace boolean_state
namespace boolean_state_configuration {
constexpr uint16_t cluster_revision = 1;
} // namespace boolean_state_configuration
namespace localization_configuration {
constexpr uint16_t cluster_revision = 4;
} // namespace localization_configuration
namespace time_format_localization {
constexpr uint16_t cluster_revision = 4;
} // namespace time_format_localization
namespace illuminance_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace illuminance_measurement
namespace pressure_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace pressure_measurement
namespace flow_measurement {
constexpr uint16_t cluster_revision = 3;
} // namespace flow_measurement
namespace pump_configuration_and_control {
constexpr uint16_t cluster_revision = 3;
} // namespace pump_configuration_and_control
namespace mode_select {
constexpr uint16_t cluster_revision = 2;
} // namespace mode_select
namespace temperature_control {
constexpr uint16_t cluster_revision = 1;
} // namespace temperature_control
namespace refrigerator_alarm {
constexpr uint16_t cluster_revision = 1;
} // namespace refrigerator_alarm
namespace refrigerator_and_tcc_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace refrigerator_and_tcc_mode
namespace rvc_run_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace rvc_run_mode
namespace rvc_clean_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace rvc_clean_mode
namespace microwave_oven_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace microwave_oven_mode
namespace microwave_oven_control {
constexpr uint16_t cluster_revision = 1;
} // namespace microwave_oven_control
namespace rvc_operational_state {
constexpr uint16_t cluster_revision = 1;
} // namespace rvc_operational_state
namespace keypad_input {
constexpr uint16_t cluster_revision = 1;
} // namespace keypad_input
namespace power_topology {
constexpr uint16_t cluster_revision = 1;
} // namespace power_topology
namespace electrical_power_measurement {
constexpr uint16_t cluster_revision = 1;
} // namespace electrical_power_measurement
namespace electrical_energy_measurement {
constexpr uint16_t cluster_revision = 1;
} // namespace electrical_energy_measurement
namespace energy_evse_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace energy_evse_mode
namespace energy_evse {
constexpr uint16_t cluster_revision = 1;
} // namespace energy_evse
namespace valve_configuration_and_control {
constexpr uint16_t cluster_revision = 1;
} // namespace valve_configuration_and_control
namespace device_energy_management {
constexpr uint16_t cluster_revision = 4;
} // namespace device_energy_management
namespace device_energy_management_mode {
constexpr uint16_t cluster_revision = 1;
} // namespace device_energy_management_mode
namespace application_basic {
constexpr uint16_t cluster_revision = 1;
} // namespace application_basic
} // namespace cluster
} // namespace esp_matter