From 6cdb7a3c02f9772b889733beea19f6e53ffde32d Mon Sep 17 00:00:00 2001 From: WanqQixiang Date: Thu, 13 Feb 2025 11:58:11 +0800 Subject: [PATCH] esp-matter: Add menuconfig options to exclude unused clusters for flash optimization --- .gitlab-ci.yml | 11 +- components/esp_matter/CMakeLists.txt | 7 +- components/esp_matter/Kconfig | 13 + .../utils/cluster_select/Kconfig.in | 439 ++++++++++++++++++ .../utils/cluster_select/cluster_dir.cmake | 334 +++++++++++++ .../generate_cluster_select_files.py | 96 ++++ docs/en/optimizations.rst | 106 ++++- examples/light/sdkconfig.defaults | 90 ++++ 8 files changed, 1091 insertions(+), 5 deletions(-) create mode 100644 components/esp_matter/utils/cluster_select/Kconfig.in create mode 100644 components/esp_matter/utils/cluster_select/cluster_dir.cmake create mode 100755 components/esp_matter/utils/cluster_select/generate_cluster_select_files.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 134256cc6..29712653c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -183,12 +183,13 @@ build_image: validation_error=1 fi - # Validate if we have the latest ZAP common files + # Validate if we have the latest ZAP common and cluster select files # python3 is not installed in dind image, so we need to install it - apk add --no-cache python3 # update the submodule to so that script runs based on that submodule - git submodule update --init --depth 1 connectedhomeip/connectedhomeip - python3 components/esp_matter/zap_common/generate_zap_common_files.py + - python3 components/esp_matter/utils/cluster_select/generate_cluster_select_files.py - | if git diff --quiet components/esp_matter/zap_common; then echo "ZAP common files are up to date." @@ -197,6 +198,14 @@ build_image: echo " Please run ./components/esp_matter/zap_common/generate_zap_common_files.py and commit the changes." validation_error=1 fi + - | + if git diff --quiet components/esp_matter/utils/cluster_select; then + echo "Cluster select files are up to date." + else + echo "ERROR: Cluster select files are not up to date." + echo " Please run ./components/esp_matter/utils/cluster_select/generate_cluster_select_files.py and commit the changes." + validation_error=1 + fi # Exit with collected error status - if [ $validation_error -ne 0 ]; then exit 1; fi diff --git a/components/esp_matter/CMakeLists.txt b/components/esp_matter/CMakeLists.txt index 916e5e800..b0d20f2d0 100644 --- a/components/esp_matter/CMakeLists.txt +++ b/components/esp_matter/CMakeLists.txt @@ -19,9 +19,10 @@ set(INCLUDE_DIRS_LIST "." set(EXCLUDE_SRCS_LIST ) if (CONFIG_ESP_MATTER_ENABLE_DATA_MODEL) - # Get the list of cluster directories present in ${MATTER_SDK_PATH}/src/app/clusters - file(GLOB CLUSTER_DIR_LIST true ${MATTER_SDK_PATH}/src/app/clusters/*) - foreach(CLUSTER_DIR ${CLUSTER_DIR_LIST}) + include("utils/cluster_select/cluster_dir.cmake") + get_supported_cluster_dirs(SUPPORTED_CLUSTER_DIRS) + foreach(CLUSTER_DIR ${SUPPORTED_CLUSTER_DIRS}) + # If the cluster directory has .c/.cpp file, add it to SRC_DIRS_LIST file(GLOB_RECURSE C_CPP_FILES "${CLUSTER_DIR}/*.c" "${CLUSTER_DIR}/*.cpp") if (C_CPP_FILES) list(APPEND SRC_DIRS_LIST "${CLUSTER_DIR}") diff --git a/components/esp_matter/Kconfig b/components/esp_matter/Kconfig index e2c03190c..dff39518a 100644 --- a/components/esp_matter/Kconfig +++ b/components/esp_matter/Kconfig @@ -238,4 +238,17 @@ menu "ESP Matter" Disable this option to initialize Thread stack and start Thread task with more flexibility. + menu "Select Supported Matter Clusters" + visible if ESP_MATTER_ENABLE_DATA_MODEL + + # If the cluster implementation source files use a class derived from another class with virtual functions + # and instantiate an object of that class, the linker may include this cluster in the final binary even if + # it is unused. To mitigate this and reduce firmware size, we offer a method to exclude those source files + # from compilation. If your product's data model does not require a specific cluster, you can deselect it + # under this menu to optimize flash usage. + + rsource "utils/cluster_select/Kconfig.in" + + endmenu + endmenu diff --git a/components/esp_matter/utils/cluster_select/Kconfig.in b/components/esp_matter/utils/cluster_select/Kconfig.in new file mode 100644 index 000000000..323b02a55 --- /dev/null +++ b/components/esp_matter/utils/cluster_select/Kconfig.in @@ -0,0 +1,439 @@ +# This file is generated by generate_cluster_select_files.py +# Please don't edit this file + +config SUPPORT_ACCESS_CONTROL_CLUSTER + bool "Support ACCESS_CONTROL_CLUSTER" + default y + +config SUPPORT_ACCOUNT_LOGIN_CLUSTER + bool "Support ACCOUNT_LOGIN_CLUSTER" + default y + +config SUPPORT_ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER + bool "Support ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER" + default y + +config SUPPORT_ADMINISTRATOR_COMMISSIONING_CLUSTER + bool "Support ADMINISTRATOR_COMMISSIONING_CLUSTER" + default y + +config SUPPORT_AIR_QUALITY_CLUSTER + bool "Support AIR_QUALITY_CLUSTER" + default y + +config SUPPORT_APPLICATION_BASIC_CLUSTER + bool "Support APPLICATION_BASIC_CLUSTER" + default y + +config SUPPORT_APPLICATION_LAUNCHER_CLUSTER + bool "Support APPLICATION_LAUNCHER_CLUSTER" + default y + +config SUPPORT_AUDIO_OUTPUT_CLUSTER + bool "Support AUDIO_OUTPUT_CLUSTER" + default y + +config SUPPORT_BASIC_INFORMATION_CLUSTER + bool "Support BASIC_INFORMATION_CLUSTER" + default y + +config SUPPORT_BINDING_CLUSTER + bool "Support BINDING_CLUSTER" + default y + +config SUPPORT_BOOLEAN_STATE_CONFIGURATION_CLUSTER + bool "Support BOOLEAN_STATE_CONFIGURATION_CLUSTER" + default y + +config SUPPORT_BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER + bool "Support BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER" + default y + +config SUPPORT_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_CHANNEL_CLUSTER + bool "Support CHANNEL_CLUSTER" + default y + +config SUPPORT_CHIME_CLUSTER + bool "Support CHIME_CLUSTER" + default y + +config SUPPORT_COLOR_CONTROL_CLUSTER + bool "Support COLOR_CONTROL_CLUSTER" + default y + +config SUPPORT_COMMISSIONER_CONTROL_CLUSTER + bool "Support COMMISSIONER_CONTROL_CLUSTER" + default y + +config SUPPORT_CONTENT_LAUNCHER_CLUSTER + bool "Support CONTENT_LAUNCHER_CLUSTER" + default y + +config SUPPORT_CONTENT_CONTROL_CLUSTER + bool "Support CONTENT_CONTROL_CLUSTER" + default y + +config SUPPORT_CONTENT_APP_OBSERVER_CLUSTER + bool "Support CONTENT_APP_OBSERVER_CLUSTER" + default y + +config SUPPORT_DESCRIPTOR_CLUSTER + bool "Support DESCRIPTOR_CLUSTER" + default y + +config SUPPORT_DEVICE_ENERGY_MANAGEMENT_CLUSTER + bool "Support DEVICE_ENERGY_MANAGEMENT_CLUSTER" + default y + +config SUPPORT_DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER + bool "Support DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER" + default y + +config SUPPORT_DIAGNOSTIC_LOGS_CLUSTER + bool "Support DIAGNOSTIC_LOGS_CLUSTER" + default y + +config SUPPORT_DISHWASHER_ALARM_CLUSTER + bool "Support DISHWASHER_ALARM_CLUSTER" + default y + +config SUPPORT_DISHWASHER_MODE_CLUSTER + bool "Support DISHWASHER_MODE_CLUSTER" + default y + +config SUPPORT_MICROWAVE_OVEN_MODE_CLUSTER + bool "Support MICROWAVE_OVEN_MODE_CLUSTER" + default y + +config SUPPORT_DOOR_LOCK_CLUSTER + bool "Support DOOR_LOCK_CLUSTER" + default y + +config SUPPORT_ECOSYSTEM_INFORMATION_CLUSTER + bool "Support ECOSYSTEM_INFORMATION_CLUSTER" + default y + +config SUPPORT_ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER + bool "Support ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_ELECTRICAL_POWER_MEASUREMENT_CLUSTER + bool "Support ELECTRICAL_POWER_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_ENERGY_EVSE_CLUSTER + bool "Support ENERGY_EVSE_CLUSTER" + default y + +config SUPPORT_ENERGY_EVSE_MODE_CLUSTER + bool "Support ENERGY_EVSE_MODE_CLUSTER" + default y + +config SUPPORT_ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER + bool "Support ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER" + default y + +config SUPPORT_ENERGY_PREFERENCE_CLUSTER + bool "Support ENERGY_PREFERENCE_CLUSTER" + default y + +config SUPPORT_FAN_CONTROL_CLUSTER + bool "Support FAN_CONTROL_CLUSTER" + default y + +config SUPPORT_FAULT_INJECTION_CLUSTER + bool "Support FAULT_INJECTION_CLUSTER" + default y + +config SUPPORT_FIXED_LABEL_CLUSTER + bool "Support FIXED_LABEL_CLUSTER" + default y + +config SUPPORT_FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_GENERAL_COMMISSIONING_CLUSTER + bool "Support GENERAL_COMMISSIONING_CLUSTER" + default y + +config SUPPORT_GENERAL_DIAGNOSTICS_CLUSTER + bool "Support GENERAL_DIAGNOSTICS_CLUSTER" + default y + +config SUPPORT_GROUPS_CLUSTER + bool "Support GROUPS_CLUSTER" + default y + +config SUPPORT_HEPA_FILTER_MONITORING_CLUSTER + bool "Support HEPA_FILTER_MONITORING_CLUSTER" + default y + +config SUPPORT_GROUP_KEY_MANAGEMENT_CLUSTER + bool "Support GROUP_KEY_MANAGEMENT_CLUSTER" + default y + +config SUPPORT_ICD_MANAGEMENT_CLUSTER + bool "Support ICD_MANAGEMENT_CLUSTER" + default y + +config SUPPORT_IDENTIFY_CLUSTER + bool "Support IDENTIFY_CLUSTER" + default y + +config SUPPORT_KEYPAD_INPUT_CLUSTER + bool "Support KEYPAD_INPUT_CLUSTER" + default y + +config SUPPORT_LAUNDRY_WASHER_MODE_CLUSTER + bool "Support LAUNDRY_WASHER_MODE_CLUSTER" + default y + +config SUPPORT_LEVEL_CONTROL_CLUSTER + bool "Support LEVEL_CONTROL_CLUSTER" + default y + +config SUPPORT_LOCALIZATION_CONFIGURATION_CLUSTER + bool "Support LOCALIZATION_CONFIGURATION_CLUSTER" + default y + +config SUPPORT_LOW_POWER_CLUSTER + bool "Support LOW_POWER_CLUSTER" + default y + +config SUPPORT_MEDIA_INPUT_CLUSTER + bool "Support MEDIA_INPUT_CLUSTER" + default y + +config SUPPORT_MEDIA_PLAYBACK_CLUSTER + bool "Support MEDIA_PLAYBACK_CLUSTER" + default y + +config SUPPORT_MICROWAVE_OVEN_CONTROL_CLUSTER + bool "Support MICROWAVE_OVEN_CONTROL_CLUSTER" + default y + +config SUPPORT_MESSAGES_CLUSTER + bool "Support MESSAGES_CLUSTER" + default y + +config SUPPORT_MODE_SELECT_CLUSTER + bool "Support MODE_SELECT_CLUSTER" + default y + +config SUPPORT_NETWORK_COMMISSIONING_CLUSTER + bool "Support NETWORK_COMMISSIONING_CLUSTER" + default y + +config SUPPORT_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_SAMPLE_MEI_CLUSTER + bool "Support SAMPLE_MEI_CLUSTER" + default y + +config SUPPORT_OCCUPANCY_SENSING_CLUSTER + bool "Support OCCUPANCY_SENSING_CLUSTER" + default y + +config SUPPORT_ON_OFF_CLUSTER + bool "Support ON_OFF_CLUSTER" + default y + +config SUPPORT_POWER_TOPOLOGY_CLUSTER + bool "Support POWER_TOPOLOGY_CLUSTER" + default y + +config SUPPORT_OPERATIONAL_CREDENTIALS_CLUSTER + bool "Support OPERATIONAL_CREDENTIALS_CLUSTER" + default y + +config SUPPORT_OPERATIONAL_STATE_CLUSTER + bool "Support OPERATIONAL_STATE_CLUSTER" + default y + +config SUPPORT_OPERATIONAL_STATE_OVEN_CLUSTER + bool "Support OPERATIONAL_STATE_OVEN_CLUSTER" + default y + +config SUPPORT_OPERATIONAL_STATE_RVC_CLUSTER + bool "Support OPERATIONAL_STATE_RVC_CLUSTER" + default y + +config SUPPORT_OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER + bool "Support OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER" + default y + +config SUPPORT_OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER + bool "Support OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER" + default y + +config SUPPORT_OVEN_MODE_CLUSTER + bool "Support OVEN_MODE_CLUSTER" + default y + +config SUPPORT_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support OZONE_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_PM10_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support PM10_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_PM1_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support PM1_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_POWER_SOURCE_CLUSTER + bool "Support POWER_SOURCE_CLUSTER" + default y + +config SUPPORT_POWER_SOURCE_CONFIGURATION_CLUSTER + bool "Support POWER_SOURCE_CONFIGURATION_CLUSTER" + default y + +config SUPPORT_PUMP_CONFIGURATION_AND_CONTROL_CLUSTER + bool "Support PUMP_CONFIGURATION_AND_CONTROL_CLUSTER" + default y + +config SUPPORT_RADON_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support RADON_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_REFRIGERATOR_ALARM_CLUSTER + bool "Support REFRIGERATOR_ALARM_CLUSTER" + default y + +config SUPPORT_REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER + bool "Support REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER" + default y + +config SUPPORT_RVC_CLEAN_MODE_CLUSTER + bool "Support RVC_CLEAN_MODE_CLUSTER" + default y + +config SUPPORT_RVC_RUN_MODE_CLUSTER + bool "Support RVC_RUN_MODE_CLUSTER" + default y + +config SUPPORT_SCENES_CLUSTER + bool "Support SCENES_CLUSTER" + default y + +config SUPPORT_SERVICE_AREA_CLUSTER + bool "Support SERVICE_AREA_CLUSTER" + default y + +config SUPPORT_SMOKE_CO_ALARM_CLUSTER + bool "Support SMOKE_CO_ALARM_CLUSTER" + default y + +config SUPPORT_SOFTWARE_DIAGNOSTICS_CLUSTER + bool "Support SOFTWARE_DIAGNOSTICS_CLUSTER" + default y + +config SUPPORT_SWITCH_CLUSTER + bool "Support SWITCH_CLUSTER" + default y + +config SUPPORT_TARGET_NAVIGATOR_CLUSTER + bool "Support TARGET_NAVIGATOR_CLUSTER" + default y + +config SUPPORT_TEMPERATURE_CONTROL_CLUSTER + bool "Support TEMPERATURE_CONTROL_CLUSTER" + default y + +config SUPPORT_THERMOSTAT_CLUSTER + bool "Support THERMOSTAT_CLUSTER" + default y + +config SUPPORT_THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER + bool "Support THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER" + default y + +config SUPPORT_THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER + bool "Support THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER" + default y + +config SUPPORT_THREAD_NETWORK_DIAGNOSTICS_CLUSTER + bool "Support THREAD_NETWORK_DIAGNOSTICS_CLUSTER" + default y + +config SUPPORT_THREAD_NETWORK_DIRECTORY_CLUSTER + bool "Support THREAD_NETWORK_DIRECTORY_CLUSTER" + default y + +config SUPPORT_TIME_FORMAT_LOCALIZATION_CLUSTER + bool "Support TIME_FORMAT_LOCALIZATION_CLUSTER" + default y + +config SUPPORT_TIME_SYNCHRONIZATION_CLUSTER + bool "Support TIME_SYNCHRONIZATION_CLUSTER" + default y + +config SUPPORT_TIMER_CLUSTER + bool "Support TIMER_CLUSTER" + default y + +config SUPPORT_TVOC_CONCENTRATION_MEASUREMENT_CLUSTER + bool "Support TVOC_CONCENTRATION_MEASUREMENT_CLUSTER" + default y + +config SUPPORT_UNIT_TESTING_CLUSTER + bool "Support UNIT_TESTING_CLUSTER" + default y + +config SUPPORT_USER_LABEL_CLUSTER + bool "Support USER_LABEL_CLUSTER" + default y + +config SUPPORT_VALVE_CONFIGURATION_AND_CONTROL_CLUSTER + bool "Support VALVE_CONFIGURATION_AND_CONTROL_CLUSTER" + default y + +config SUPPORT_WAKE_ON_LAN_CLUSTER + bool "Support WAKE_ON_LAN_CLUSTER" + default y + +config SUPPORT_LAUNDRY_WASHER_CONTROLS_CLUSTER + bool "Support LAUNDRY_WASHER_CONTROLS_CLUSTER" + default y + +config SUPPORT_LAUNDRY_DRYER_CONTROLS_CLUSTER + bool "Support LAUNDRY_DRYER_CONTROLS_CLUSTER" + default y + +config SUPPORT_WIFI_NETWORK_DIAGNOSTICS_CLUSTER + bool "Support WIFI_NETWORK_DIAGNOSTICS_CLUSTER" + default y + +config SUPPORT_WIFI_NETWORK_MANAGEMENT_CLUSTER + bool "Support WIFI_NETWORK_MANAGEMENT_CLUSTER" + default y + +config SUPPORT_WINDOW_COVERING_CLUSTER + bool "Support WINDOW_COVERING_CLUSTER" + default y + +config SUPPORT_WATER_HEATER_MANAGEMENT_CLUSTER + bool "Support WATER_HEATER_MANAGEMENT_CLUSTER" + default y + +config SUPPORT_WATER_HEATER_MODE_CLUSTER + bool "Support WATER_HEATER_MODE_CLUSTER" + default y + diff --git a/components/esp_matter/utils/cluster_select/cluster_dir.cmake b/components/esp_matter/utils/cluster_select/cluster_dir.cmake new file mode 100644 index 000000000..cd85c4109 --- /dev/null +++ b/components/esp_matter/utils/cluster_select/cluster_dir.cmake @@ -0,0 +1,334 @@ +# This file is generated by generate_cluster_select_files.py +# Please don't edit this file + +function(get_supported_cluster_dirs source_dirs) + set(temp_list ) + if(CONFIG_SUPPORT_ACCESS_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/access-control-server") + endif() + if(CONFIG_SUPPORT_ACCOUNT_LOGIN_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/account-login-server") + endif() + if(CONFIG_SUPPORT_ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/resource-monitoring-server") + endif() + if(CONFIG_SUPPORT_ADMINISTRATOR_COMMISSIONING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/administrator-commissioning-server") + endif() + if(CONFIG_SUPPORT_AIR_QUALITY_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/air-quality-server") + endif() + if(CONFIG_SUPPORT_APPLICATION_BASIC_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/application-basic-server") + endif() + if(CONFIG_SUPPORT_APPLICATION_LAUNCHER_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/application-launcher-server") + endif() + if(CONFIG_SUPPORT_AUDIO_OUTPUT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/audio-output-server") + endif() + if(CONFIG_SUPPORT_BASIC_INFORMATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/basic-information") + endif() + if(CONFIG_SUPPORT_BINDING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/bindings") + endif() + if(CONFIG_SUPPORT_BOOLEAN_STATE_CONFIGURATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/boolean-state-configuration-server") + endif() + if(CONFIG_SUPPORT_BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/bridged-device-basic-information-server") + endif() + if(CONFIG_SUPPORT_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_CHANNEL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/channel-server") + endif() + if(CONFIG_SUPPORT_CHIME_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/chime-server") + endif() + if(CONFIG_SUPPORT_COLOR_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/color-control-server") + endif() + if(CONFIG_SUPPORT_COMMISSIONER_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/commissioner-control-server") + endif() + if(CONFIG_SUPPORT_CONTENT_LAUNCHER_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/content-launch-server") + endif() + if(CONFIG_SUPPORT_CONTENT_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/content-control-server") + endif() + if(CONFIG_SUPPORT_CONTENT_APP_OBSERVER_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/content-app-observer") + endif() + if(CONFIG_SUPPORT_DESCRIPTOR_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/descriptor") + endif() + if(CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/device-energy-management-server") + endif() + if(CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_DIAGNOSTIC_LOGS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/diagnostic-logs-server") + endif() + if(CONFIG_SUPPORT_DISHWASHER_ALARM_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/dishwasher-alarm-server") + endif() + if(CONFIG_SUPPORT_DISHWASHER_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_MICROWAVE_OVEN_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_DOOR_LOCK_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/door-lock-server") + endif() + if(CONFIG_SUPPORT_ECOSYSTEM_INFORMATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/ecosystem-information-server") + endif() + if(CONFIG_SUPPORT_ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/electrical-energy-measurement-server") + endif() + if(CONFIG_SUPPORT_ELECTRICAL_POWER_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/electrical-power-measurement-server") + endif() + if(CONFIG_SUPPORT_ENERGY_EVSE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/energy-evse-server") + endif() + if(CONFIG_SUPPORT_ENERGY_EVSE_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_ETHERNET_NETWORK_DIAGNOSTICS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/ethernet-network-diagnostics-server") + endif() + if(CONFIG_SUPPORT_ENERGY_PREFERENCE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/energy-preference-server") + endif() + if(CONFIG_SUPPORT_FAN_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/fan-control-server") + endif() + if(CONFIG_SUPPORT_FAULT_INJECTION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/fault-injection-server") + endif() + if(CONFIG_SUPPORT_FIXED_LABEL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/fixed-label-server") + endif() + if(CONFIG_SUPPORT_FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_GENERAL_COMMISSIONING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/general-commissioning-server") + endif() + if(CONFIG_SUPPORT_GENERAL_DIAGNOSTICS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/general-diagnostics-server") + endif() + if(CONFIG_SUPPORT_GROUPS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/groups-server") + endif() + if(CONFIG_SUPPORT_HEPA_FILTER_MONITORING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/resource-monitoring-server") + endif() + if(CONFIG_SUPPORT_GROUP_KEY_MANAGEMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/group-key-mgmt-server") + endif() + if(CONFIG_SUPPORT_ICD_MANAGEMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/icd-management-server") + endif() + if(CONFIG_SUPPORT_IDENTIFY_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/identify-server") + endif() + if(CONFIG_SUPPORT_KEYPAD_INPUT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/keypad-input-server") + endif() + if(CONFIG_SUPPORT_LAUNDRY_WASHER_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_LEVEL_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/level-control") + endif() + if(CONFIG_SUPPORT_LOCALIZATION_CONFIGURATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/localization-configuration-server") + endif() + if(CONFIG_SUPPORT_LOW_POWER_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/low-power-server") + endif() + if(CONFIG_SUPPORT_MEDIA_INPUT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/media-input-server") + endif() + if(CONFIG_SUPPORT_MEDIA_PLAYBACK_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/media-playback-server") + endif() + if(CONFIG_SUPPORT_MICROWAVE_OVEN_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/microwave-oven-control-server") + endif() + if(CONFIG_SUPPORT_MESSAGES_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/messages-server") + endif() + if(CONFIG_SUPPORT_MODE_SELECT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-select-server") + endif() + if(CONFIG_SUPPORT_NETWORK_COMMISSIONING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/network-commissioning") + endif() + if(CONFIG_SUPPORT_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_SAMPLE_MEI_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/sample-mei-server") + endif() + if(CONFIG_SUPPORT_OCCUPANCY_SENSING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/occupancy-sensor-server") + endif() + if(CONFIG_SUPPORT_ON_OFF_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/on-off-server") + endif() + if(CONFIG_SUPPORT_POWER_TOPOLOGY_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/power-topology-server") + endif() + if(CONFIG_SUPPORT_OPERATIONAL_CREDENTIALS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/operational-credentials-server") + endif() + if(CONFIG_SUPPORT_OPERATIONAL_STATE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/operational-state-server") + endif() + if(CONFIG_SUPPORT_OPERATIONAL_STATE_OVEN_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/operational-state-server") + endif() + if(CONFIG_SUPPORT_OPERATIONAL_STATE_RVC_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/operational-state-server") + endif() + if(CONFIG_SUPPORT_OTA_SOFTWARE_UPDATE_PROVIDER_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/ota-provider") + endif() + if(CONFIG_SUPPORT_OTA_SOFTWARE_UPDATE_REQUESTOR_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/ota-requestor") + endif() + if(CONFIG_SUPPORT_OVEN_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_PM10_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_PM1_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_POWER_SOURCE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/power-source-server") + endif() + if(CONFIG_SUPPORT_POWER_SOURCE_CONFIGURATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/power-source-configuration-server") + endif() + if(CONFIG_SUPPORT_PUMP_CONFIGURATION_AND_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/pump-configuration-and-control-server") + endif() + if(CONFIG_SUPPORT_RADON_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_REFRIGERATOR_ALARM_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/refrigerator-alarm-server") + endif() + if(CONFIG_SUPPORT_REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_RVC_CLEAN_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_RVC_RUN_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + if(CONFIG_SUPPORT_SCENES_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/scenes-server") + endif() + if(CONFIG_SUPPORT_SERVICE_AREA_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/service-area-server") + endif() + if(CONFIG_SUPPORT_SMOKE_CO_ALARM_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/smoke-co-alarm-server") + endif() + if(CONFIG_SUPPORT_SOFTWARE_DIAGNOSTICS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/software-diagnostics-server") + endif() + if(CONFIG_SUPPORT_SWITCH_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/switch-server") + endif() + if(CONFIG_SUPPORT_TARGET_NAVIGATOR_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/target-navigator-server") + endif() + if(CONFIG_SUPPORT_TEMPERATURE_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/temperature-control-server") + endif() + if(CONFIG_SUPPORT_THERMOSTAT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/thermostat-server") + endif() + if(CONFIG_SUPPORT_THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/thermostat-user-interface-configuration-server") + endif() + if(CONFIG_SUPPORT_THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/thread-border-router-management-server") + endif() + if(CONFIG_SUPPORT_THREAD_NETWORK_DIAGNOSTICS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/thread-network-diagnostics-server") + endif() + if(CONFIG_SUPPORT_THREAD_NETWORK_DIRECTORY_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/thread-network-directory-server") + endif() + if(CONFIG_SUPPORT_TIME_FORMAT_LOCALIZATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/time-format-localization-server") + endif() + if(CONFIG_SUPPORT_TIME_SYNCHRONIZATION_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/time-synchronization-server") + endif() + if(CONFIG_SUPPORT_TIMER_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/timer-server") + endif() + if(CONFIG_SUPPORT_TVOC_CONCENTRATION_MEASUREMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/concentration-measurement-server") + endif() + if(CONFIG_SUPPORT_UNIT_TESTING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/test-cluster-server") + endif() + if(CONFIG_SUPPORT_USER_LABEL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/user-label-server") + endif() + if(CONFIG_SUPPORT_VALVE_CONFIGURATION_AND_CONTROL_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/valve-configuration-and-control-server") + endif() + if(CONFIG_SUPPORT_WAKE_ON_LAN_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/wake-on-lan-server") + endif() + if(CONFIG_SUPPORT_LAUNDRY_WASHER_CONTROLS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/laundry-washer-controls-server") + endif() + if(CONFIG_SUPPORT_LAUNDRY_DRYER_CONTROLS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/laundry-dryer-controls-server") + endif() + if(CONFIG_SUPPORT_WIFI_NETWORK_DIAGNOSTICS_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/wifi-network-diagnostics-server") + endif() + if(CONFIG_SUPPORT_WIFI_NETWORK_MANAGEMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/wifi-network-management-server") + endif() + if(CONFIG_SUPPORT_WINDOW_COVERING_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/window-covering-server") + endif() + if(CONFIG_SUPPORT_WATER_HEATER_MANAGEMENT_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/water-heater-management-server") + endif() + if(CONFIG_SUPPORT_WATER_HEATER_MODE_CLUSTER) + list(APPEND temp_list "${MATTER_SDK_PATH}/src/app/clusters/mode-base-server") + endif() + set(${source_dirs} ${temp_list} PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/components/esp_matter/utils/cluster_select/generate_cluster_select_files.py b/components/esp_matter/utils/cluster_select/generate_cluster_select_files.py new file mode 100755 index 000000000..237f1ece4 --- /dev/null +++ b/components/esp_matter/utils/cluster_select/generate_cluster_select_files.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +# Copyright 2025 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. + +""" +Script to generate files under cluster_select directory, please run this script +after updating connectedhomeip submodule +""" + +import argparse +import json +import os +import pathlib +import logging +import sys + +if not os.getenv('ESP_MATTER_PATH'): + logging.error("ESP_MATTER_PATH environment variable is not set") + sys.exit(1) + +BASE_PATH = os.getenv('ESP_MATTER_PATH') + + +def write_file_header(file): + file.writelines( + ['# This file is generated by {}\n'.format(os.path.basename(__file__)), + '# Please don\'t edit this file\n' + '\n']) + + +def load_json(json_file): + with open(json_file, 'r', encoding='utf-8') as file: + data = json.load(file) + server_dirs = data.get("ServerDirectories", {}) + return {key: value for key, value in server_dirs.items() if value} + + +def generate_cluster_select_kconfig(cluster_list, output_dir): + with open(os.path.join(output_dir, 'Kconfig.in'), 'w') as kconfig_file: + write_file_header(kconfig_file) + for cluster in cluster_list.keys(): + kconfig_file.writelines( + [f'config SUPPORT_{cluster}\n', + f'\tbool "Support {cluster}"\n', + '\tdefault y\n' + '\n']) + + +def generate_cluster_select_cmake(cluster_list, output_dir): + with open(os.path.join(output_dir, 'cluster_dir.cmake'), 'w') as cmake_file: + write_file_header(cmake_file) + cmake_file.write('function(get_supported_cluster_dirs source_dirs)\n') + cmake_file.write('\tset(temp_list )\n') + for cluster, dirs in cluster_list.items(): + cmake_file.write(f'\tif(CONFIG_SUPPORT_{cluster})\n') + for dir in dirs: + cmake_file.write(f'\t\tlist(APPEND temp_list "${{MATTER_SDK_PATH}}/src/app/clusters/{dir}")\n') + + cmake_file.write('\tendif()\n') + + cmake_file.write('\tset(${source_dirs} ${temp_list} PARENT_SCOPE)\n') + cmake_file.write('endfunction()') + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--cluster-implementation-data', + help='Path to .json file which lists the directories cluster implementations live in', + required=False, + type=pathlib.Path, + default=os.path.join( + BASE_PATH, 'connectedhomeip/connectedhomeip/src/app/zap_cluster_list.json')) + parser.add_argument('-o', '--output-dir', + default=os.path.join( + BASE_PATH, 'components/esp_matter/utils/cluster_select'), + help='The output directory') + args = parser.parse_args() + + cluster_list = load_json(args.cluster_implementation_data) + generate_cluster_select_kconfig(cluster_list, args.output_dir) + generate_cluster_select_cmake(cluster_list, args.output_dir) + + +if __name__ == "__main__": + main() diff --git a/docs/en/optimizations.rst b/docs/en/optimizations.rst index d46bb256a..fd197008f 100644 --- a/docs/en/optimizations.rst +++ b/docs/en/optimizations.rst @@ -155,7 +155,6 @@ Below are the configuration options that can be set to achieve these optimizatio On Bootup, 83220, 472 Post Commissioning, 143804, -152 - 6.2.7 Configuring logging event buffer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -176,6 +175,111 @@ potentially missing critical events. Used D/IRAM,158610,3072 Used Flash,1275860,0 +6.2.8 Excluding Unused Matter Clusters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If the cluster implementation source files use a class derived from another class with virtual functions and instantiate +a global object of this class, the linker may keep all the related symbols that may be used for this class in the vtable. +To eliminate these symbols, you can deselect the unused Matter clusters under ``→ Component config`` → ``ESP Matter`` → +``Select Supported Matter Clusters``. Excluding unused clusters will help reduce flash and memory usage. + +:: + + CONFIG_SUPPORT_ACCOUNT_LOGIN_CLUSTER=n + CONFIG_SUPPORT_ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER=n + CONFIG_SUPPORT_AIR_QUALITY_CLUSTER=n + CONFIG_SUPPORT_APPLICATION_BASIC_CLUSTER=n + CONFIG_SUPPORT_APPLICATION_LAUNCHER_CLUSTER=n + CONFIG_SUPPORT_AUDIO_OUTPUT_CLUSTER=n + CONFIG_SUPPORT_BOOLEAN_STATE_CONFIGURATION_CLUSTER=n + CONFIG_SUPPORT_BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER=n + CONFIG_SUPPORT_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_CHANNEL_CLUSTER=n + CONFIG_SUPPORT_CHIME_CLUSTER=n + CONFIG_SUPPORT_COMMISSIONER_CONTROL_CLUSTER=n + CONFIG_SUPPORT_CONTENT_LAUNCHER_CLUSTER=n + CONFIG_SUPPORT_CONTENT_CONTROL_CLUSTER=n + CONFIG_SUPPORT_CONTENT_APP_OBSERVER_CLUSTER=n + CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_CLUSTER=n + CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER=n + CONFIG_SUPPORT_DIAGNOSTIC_LOGS_CLUSTER=n + CONFIG_SUPPORT_DISHWASHER_ALARM_CLUSTER=n + CONFIG_SUPPORT_DISHWASHER_MODE_CLUSTER=n + CONFIG_SUPPORT_MICROWAVE_OVEN_MODE_CLUSTER=n + CONFIG_SUPPORT_DOOR_LOCK_CLUSTER=n + CONFIG_SUPPORT_ECOSYSTEM_INFORMATION_CLUSTER=n + CONFIG_SUPPORT_ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_ELECTRICAL_POWER_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_ENERGY_EVSE_CLUSTER=n + CONFIG_SUPPORT_ENERGY_EVSE_MODE_CLUSTER=n + CONFIG_SUPPORT_ENERGY_PREFERENCE_CLUSTER=n + CONFIG_SUPPORT_FAN_CONTROL_CLUSTER=n + CONFIG_SUPPORT_FAULT_INJECTION_CLUSTER=n + CONFIG_SUPPORT_FIXED_LABEL_CLUSTER=n + CONFIG_SUPPORT_FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_HEPA_FILTER_MONITORING_CLUSTER=n + CONFIG_SUPPORT_ICD_MANAGEMENT_CLUSTER=n + CONFIG_SUPPORT_KEYPAD_INPUT_CLUSTER=n + CONFIG_SUPPORT_LAUNDRY_WASHER_MODE_CLUSTER=n + CONFIG_SUPPORT_LOCALIZATION_CONFIGURATION_CLUSTER=n + CONFIG_SUPPORT_LOW_POWER_CLUSTER=n + CONFIG_SUPPORT_MEDIA_INPUT_CLUSTER=n + CONFIG_SUPPORT_MEDIA_PLAYBACK_CLUSTER=n + CONFIG_SUPPORT_MICROWAVE_OVEN_CONTROL_CLUSTER=n + CONFIG_SUPPORT_MESSAGES_CLUSTER=n + CONFIG_SUPPORT_MODE_SELECT_CLUSTER=n + CONFIG_SUPPORT_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_SAMPLE_MEI_CLUSTER=n + CONFIG_SUPPORT_OCCUPANCY_SENSING_CLUSTER=n + CONFIG_SUPPORT_POWER_TOPOLOGY_CLUSTER=n + CONFIG_SUPPORT_OPERATIONAL_STATE_CLUSTER=n + CONFIG_SUPPORT_OPERATIONAL_STATE_OVEN_CLUSTER=n + CONFIG_SUPPORT_OPERATIONAL_STATE_RVC_CLUSTER=n + CONFIG_SUPPORT_OVEN_MODE_CLUSTER=n + CONFIG_SUPPORT_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_PM10_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_PM1_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_POWER_SOURCE_CLUSTER=n + CONFIG_SUPPORT_POWER_SOURCE_CONFIGURATION_CLUSTER=n + CONFIG_SUPPORT_PUMP_CONFIGURATION_AND_CONTROL_CLUSTER=n + CONFIG_SUPPORT_RADON_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_REFRIGERATOR_ALARM_CLUSTER=n + CONFIG_SUPPORT_REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER=n + CONFIG_SUPPORT_RVC_CLEAN_MODE_CLUSTER=n + CONFIG_SUPPORT_RVC_RUN_MODE_CLUSTER=n + CONFIG_SUPPORT_SERVICE_AREA_CLUSTER=n + CONFIG_SUPPORT_SMOKE_CO_ALARM_CLUSTER=n + CONFIG_SUPPORT_SOFTWARE_DIAGNOSTICS_CLUSTER=n + CONFIG_SUPPORT_SWITCH_CLUSTER=n + CONFIG_SUPPORT_TARGET_NAVIGATOR_CLUSTER=n + CONFIG_SUPPORT_TEMPERATURE_CONTROL_CLUSTER=n + CONFIG_SUPPORT_THERMOSTAT_CLUSTER=n + CONFIG_SUPPORT_THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER=n + CONFIG_SUPPORT_THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER=n + CONFIG_SUPPORT_THREAD_NETWORK_DIRECTORY_CLUSTER=n + CONFIG_SUPPORT_TIME_FORMAT_LOCALIZATION_CLUSTER=n + CONFIG_SUPPORT_TIME_SYNCHRONIZATION_CLUSTER=n + CONFIG_SUPPORT_TIMER_CLUSTER=n + CONFIG_SUPPORT_TVOC_CONCENTRATION_MEASUREMENT_CLUSTER=n + CONFIG_SUPPORT_UNIT_TESTING_CLUSTER=n + CONFIG_SUPPORT_USER_LABEL_CLUSTER=n + CONFIG_SUPPORT_VALVE_CONFIGURATION_AND_CONTROL_CLUSTER=n + CONFIG_SUPPORT_WAKE_ON_LAN_CLUSTER=n + CONFIG_SUPPORT_LAUNDRY_WASHER_CONTROLS_CLUSTER=n + CONFIG_SUPPORT_LAUNDRY_DRYER_CONTROLS_CLUSTER=n + CONFIG_SUPPORT_WIFI_NETWORK_MANAGEMENT_CLUSTER=n + CONFIG_SUPPORT_WINDOW_COVERING_CLUSTER=n + CONFIG_SUPPORT_WATER_HEATER_MANAGEMENT_CLUSTER=n + CONFIG_SUPPORT_WATER_HEATER_MODE_CLUSTER=n + +.. csv-table:: Static memory stats + :header: "", "Size", "Decreased by" + + Used D/IRAM,167706,1336 + Used Flash,1348790,21996 + 6.3 References for futher optimizations --------------------------------------- diff --git a/examples/light/sdkconfig.defaults b/examples/light/sdkconfig.defaults index cb41938f1..288b3dbcc 100644 --- a/examples/light/sdkconfig.defaults +++ b/examples/light/sdkconfig.defaults @@ -40,3 +40,93 @@ CONFIG_MBEDTLS_HKDF_C=y # Increase LwIP IPv6 address number to 6 (MAX_FABRIC + 1) # unique local addresses for fabrics(MAX_FABRIC), a link local address(1) CONFIG_LWIP_IPV6_NUM_ADDRESSES=6 + +# Exclude unused clusters to optimize flash and memory usage +CONFIG_SUPPORT_ACCOUNT_LOGIN_CLUSTER=n +CONFIG_SUPPORT_ACTIVATED_CARBON_FILTER_MONITORING_CLUSTER=n +CONFIG_SUPPORT_AIR_QUALITY_CLUSTER=n +CONFIG_SUPPORT_APPLICATION_BASIC_CLUSTER=n +CONFIG_SUPPORT_APPLICATION_LAUNCHER_CLUSTER=n +CONFIG_SUPPORT_AUDIO_OUTPUT_CLUSTER=n +CONFIG_SUPPORT_BOOLEAN_STATE_CONFIGURATION_CLUSTER=n +CONFIG_SUPPORT_BRIDGED_DEVICE_BASIC_INFORMATION_CLUSTER=n +CONFIG_SUPPORT_CARBON_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_CARBON_MONOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_CHANNEL_CLUSTER=n +CONFIG_SUPPORT_CHIME_CLUSTER=n +CONFIG_SUPPORT_COMMISSIONER_CONTROL_CLUSTER=n +CONFIG_SUPPORT_CONTENT_LAUNCHER_CLUSTER=n +CONFIG_SUPPORT_CONTENT_CONTROL_CLUSTER=n +CONFIG_SUPPORT_CONTENT_APP_OBSERVER_CLUSTER=n +CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_CLUSTER=n +CONFIG_SUPPORT_DEVICE_ENERGY_MANAGEMENT_MODE_CLUSTER=n +CONFIG_SUPPORT_DIAGNOSTIC_LOGS_CLUSTER=n +CONFIG_SUPPORT_DISHWASHER_ALARM_CLUSTER=n +CONFIG_SUPPORT_DISHWASHER_MODE_CLUSTER=n +CONFIG_SUPPORT_MICROWAVE_OVEN_MODE_CLUSTER=n +CONFIG_SUPPORT_DOOR_LOCK_CLUSTER=n +CONFIG_SUPPORT_ECOSYSTEM_INFORMATION_CLUSTER=n +CONFIG_SUPPORT_ELECTRICAL_ENERGY_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_ELECTRICAL_POWER_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_ENERGY_EVSE_CLUSTER=n +CONFIG_SUPPORT_ENERGY_EVSE_MODE_CLUSTER=n +CONFIG_SUPPORT_ENERGY_PREFERENCE_CLUSTER=n +CONFIG_SUPPORT_FAN_CONTROL_CLUSTER=n +CONFIG_SUPPORT_FAULT_INJECTION_CLUSTER=n +CONFIG_SUPPORT_FIXED_LABEL_CLUSTER=n +CONFIG_SUPPORT_FORMALDEHYDE_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_HEPA_FILTER_MONITORING_CLUSTER=n +CONFIG_SUPPORT_ICD_MANAGEMENT_CLUSTER=n +CONFIG_SUPPORT_KEYPAD_INPUT_CLUSTER=n +CONFIG_SUPPORT_LAUNDRY_WASHER_MODE_CLUSTER=n +CONFIG_SUPPORT_LOCALIZATION_CONFIGURATION_CLUSTER=n +CONFIG_SUPPORT_LOW_POWER_CLUSTER=n +CONFIG_SUPPORT_MEDIA_INPUT_CLUSTER=n +CONFIG_SUPPORT_MEDIA_PLAYBACK_CLUSTER=n +CONFIG_SUPPORT_MICROWAVE_OVEN_CONTROL_CLUSTER=n +CONFIG_SUPPORT_MESSAGES_CLUSTER=n +CONFIG_SUPPORT_MODE_SELECT_CLUSTER=n +CONFIG_SUPPORT_NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_SAMPLE_MEI_CLUSTER=n +CONFIG_SUPPORT_OCCUPANCY_SENSING_CLUSTER=n +CONFIG_SUPPORT_POWER_TOPOLOGY_CLUSTER=n +CONFIG_SUPPORT_OPERATIONAL_STATE_CLUSTER=n +CONFIG_SUPPORT_OPERATIONAL_STATE_OVEN_CLUSTER=n +CONFIG_SUPPORT_OPERATIONAL_STATE_RVC_CLUSTER=n +CONFIG_SUPPORT_OVEN_MODE_CLUSTER=n +CONFIG_SUPPORT_OZONE_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_PM10_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_PM1_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_PM2_5_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_POWER_SOURCE_CLUSTER=n +CONFIG_SUPPORT_POWER_SOURCE_CONFIGURATION_CLUSTER=n +CONFIG_SUPPORT_PUMP_CONFIGURATION_AND_CONTROL_CLUSTER=n +CONFIG_SUPPORT_RADON_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_REFRIGERATOR_ALARM_CLUSTER=n +CONFIG_SUPPORT_REFRIGERATOR_AND_TEMPERATURE_CONTROLLED_CABINET_MODE_CLUSTER=n +CONFIG_SUPPORT_RVC_CLEAN_MODE_CLUSTER=n +CONFIG_SUPPORT_RVC_RUN_MODE_CLUSTER=n +CONFIG_SUPPORT_SERVICE_AREA_CLUSTER=n +CONFIG_SUPPORT_SMOKE_CO_ALARM_CLUSTER=n +CONFIG_SUPPORT_SOFTWARE_DIAGNOSTICS_CLUSTER=n +CONFIG_SUPPORT_SWITCH_CLUSTER=n +CONFIG_SUPPORT_TARGET_NAVIGATOR_CLUSTER=n +CONFIG_SUPPORT_TEMPERATURE_CONTROL_CLUSTER=n +CONFIG_SUPPORT_THERMOSTAT_CLUSTER=n +CONFIG_SUPPORT_THERMOSTAT_USER_INTERFACE_CONFIGURATION_CLUSTER=n +CONFIG_SUPPORT_THREAD_BORDER_ROUTER_MANAGEMENT_CLUSTER=n +CONFIG_SUPPORT_THREAD_NETWORK_DIRECTORY_CLUSTER=n +CONFIG_SUPPORT_TIME_FORMAT_LOCALIZATION_CLUSTER=n +CONFIG_SUPPORT_TIME_SYNCHRONIZATION_CLUSTER=n +CONFIG_SUPPORT_TIMER_CLUSTER=n +CONFIG_SUPPORT_TVOC_CONCENTRATION_MEASUREMENT_CLUSTER=n +CONFIG_SUPPORT_UNIT_TESTING_CLUSTER=n +CONFIG_SUPPORT_USER_LABEL_CLUSTER=n +CONFIG_SUPPORT_VALVE_CONFIGURATION_AND_CONTROL_CLUSTER=n +CONFIG_SUPPORT_WAKE_ON_LAN_CLUSTER=n +CONFIG_SUPPORT_LAUNDRY_WASHER_CONTROLS_CLUSTER=n +CONFIG_SUPPORT_LAUNDRY_DRYER_CONTROLS_CLUSTER=n +CONFIG_SUPPORT_WIFI_NETWORK_MANAGEMENT_CLUSTER=n +CONFIG_SUPPORT_WINDOW_COVERING_CLUSTER=n +CONFIG_SUPPORT_WATER_HEATER_MANAGEMENT_CLUSTER=n +CONFIG_SUPPORT_WATER_HEATER_MODE_CLUSTER=n