diff --git a/components/esp_matter/esp_matter_attribute.cpp b/components/esp_matter/esp_matter_attribute.cpp index 579a88435..a71a7d4f0 100644 --- a/components/esp_matter/esp_matter_attribute.cpp +++ b/components/esp_matter/esp_matter_attribute.cpp @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include static const char *TAG = "esp_matter_attribute"; diff --git a/device_hal/button_driver/CMakeLists.txt b/device_hal/button_driver/CMakeLists.txt index 893355304..1c0ce544f 100644 --- a/device_hal/button_driver/CMakeLists.txt +++ b/device_hal/button_driver/CMakeLists.txt @@ -1,5 +1,12 @@ include($ENV{ESP_MATTER_DEVICE_PATH}/esp_matter_device.cmake) -set(button_requires ) -idf_component_register(SRCS ${button_type}/button_driver.c - INCLUDE_DIRS include - REQUIRES ${button_requires}) + +set(requires driver) +if ("${button_type}" STREQUAL "gpio") + list(APPEND requires button) +elseif ("${button_type}" STREQUAL "adc") + list(APPEND requires button) +endif() + +idf_component_register(SRC_DIRS + INCLUDE_DIRS + REQUIRES ${requires}) diff --git a/device_hal/button_driver/README.md b/device_hal/button_driver/README.md new file mode 100644 index 000000000..da310a55c --- /dev/null +++ b/device_hal/button_driver/README.md @@ -0,0 +1,3 @@ +# Source + +The `button` component which is used for gpio and adc buttons is taken from https://github.com/espressif/esp-iot-solution/tree/master/components/button via idf_component.yml diff --git a/device_hal/button_driver/hollow/button_driver.c b/device_hal/button_driver/hollow/button_driver.c deleted file mode 100644 index f4f7e38ec..000000000 --- a/device_hal/button_driver/hollow/button_driver.c +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2021 Espressif Systems (Shanghai) CO 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 - -#include -#include - -static const char *TAG = "button_driver_hollow"; - -esp_err_t button_driver_init(button_driver_config_t *config) -{ - ESP_LOGI(TAG, "Initializing button driver"); - /* Initialize the button driver here*/ - - return ESP_OK; -} diff --git a/device_hal/button_driver/idf_component.yml b/device_hal/button_driver/idf_component.yml new file mode 100644 index 000000000..7c2323d8f --- /dev/null +++ b/device_hal/button_driver/idf_component.yml @@ -0,0 +1,5 @@ +## IDF Component Manager Manifest File +dependencies: + button: + path: components/button + git: https://github.com/espressif/esp-iot-solution.git diff --git a/device_hal/button_driver/include/button_driver.h b/device_hal/button_driver/include/button_driver.h deleted file mode 100644 index 08cc09559..000000000 --- a/device_hal/button_driver/include/button_driver.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2021 Espressif Systems (Shanghai) CO 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 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct { - int gpio; -} button_driver_config_t; - -esp_err_t button_driver_init(button_driver_config_t *config); - -#ifdef __cplusplus -} -#endif diff --git a/device_hal/device/CMakeLists.txt b/device_hal/device/CMakeLists.txt index 933921831..73fa61b90 100644 --- a/device_hal/device/CMakeLists.txt +++ b/device_hal/device/CMakeLists.txt @@ -1,4 +1,4 @@ include($ENV{ESP_MATTER_DEVICE_PATH}/esp_matter_device.cmake) -idf_component_register(SRC_DIRS "${device_name}" +idf_component_register(SRC_DIRS "${device_type}" INCLUDE_DIRS include - REQUIRES ${used_driver}) + REQUIRES button_driver led_driver) diff --git a/device_hal/device/esp32_devkit_c/device.c b/device_hal/device/esp32_devkit_c/device.c index 3d0a6b387..00aba7879 100644 --- a/device_hal/device/esp32_devkit_c/device.c +++ b/device_hal/device/esp32_devkit_c/device.c @@ -12,37 +12,32 @@ // limitations under the License #include +#include +#include -#include -#include - -#define DEVICE_VERSION_1_0 - -#ifdef DEVICE_VERSION_1_0 -#define LED_GPIO_PIN 12 /* GPIO_NUM_12 */ +#define LED_GPIO_PIN GPIO_NUM_12 #define LED_CHANNEL 0 /* LEDC_CHANNEL_0 */ -#endif +#define BUTTON_GPIO_PIN GPIO_NUM_0 static const char *TAG = "device"; -static esp_err_t device_light_init() +led_driver_config_t led_driver_get_config() { - light_driver_config_t config = { + led_driver_config_t config = { .gpio = LED_GPIO_PIN, .channel = LED_CHANNEL, }; - return light_driver_init(&config); + return config; } -static esp_err_t device_button_init() +button_config_t button_driver_get_config() { - return button_driver_init(NULL); -} - -esp_err_t device_init() -{ - ESP_LOGI(TAG, "Initializing device"); - device_light_init(); - device_button_init(); - return ESP_OK; + button_config_t config = { + .type = BUTTON_TYPE_GPIO, + .gpio_button_config = { + .gpio_num = BUTTON_GPIO_PIN, + .active_level = 0, + } + }; + return config; } diff --git a/device_hal/device/esp32_devkit_c/esp_matter_device.cmake b/device_hal/device/esp32_devkit_c/esp_matter_device.cmake index 4f00f8630..965caec49 100644 --- a/device_hal/device/esp32_devkit_c/esp_matter_device.cmake +++ b/device_hal/device/esp32_devkit_c/esp_matter_device.cmake @@ -1,14 +1,11 @@ cmake_minimum_required(VERSION 3.5) -if(NOT ("${IDF_TARGET}" STREQUAL "esp32" )) +if (NOT ("${IDF_TARGET}" STREQUAL "esp32" )) message(FATAL_ERROR "please set esp32 as the IDF_TARGET using 'idf.py set-target esp32'") endif() -SET(device_hal_path $ENV{ESP_MATTER_DEVICE_PATH}/../../) -SET(device_name esp32_devkit_c) -SET(light_type gpio) -SET(button_type hollow) -SET(used_driver light_driver button_driver) -SET(extra_components_dirs_append "${device_hal_path}/light_driver" - "${device_hal_path}/button_driver") - +SET(device_type esp32_devkit_c) +SET(led_type gpio) +SET(button_type gpio) +SET(extra_components_dirs_append "$ENV{ESP_MATTER_DEVICE_PATH}/../../led_driver" + "$ENV{ESP_MATTER_DEVICE_PATH}/../../button_driver") diff --git a/device_hal/device/esp32c3_devkit_m/device.c b/device_hal/device/esp32c3_devkit_m/device.c index 0a2728566..fa8e7d1b3 100644 --- a/device_hal/device/esp32c3_devkit_m/device.c +++ b/device_hal/device/esp32c3_devkit_m/device.c @@ -12,37 +12,32 @@ // limitations under the License #include +#include +#include -#include -#include - -#define DEVICE_VERSION_1_0 - -#ifdef DEVICE_VERSION_1_0 -#define LED_GPIO_PIN 8 /* GPIO_NUM_8 */ +#define LED_GPIO_PIN GPIO_NUM_8 #define LED_CHANNEL 0 /* RMT_CHANNEL_0 */ -#endif +#define BUTTON_GPIO_PIN GPIO_NUM_9 static const char *TAG = "device"; -static esp_err_t device_light_init() +led_driver_config_t led_driver_get_config() { - light_driver_config_t config = { + led_driver_config_t config = { .gpio = LED_GPIO_PIN, .channel = LED_CHANNEL, }; - return light_driver_init(&config); + return config; } -static esp_err_t device_button_init() +button_config_t button_driver_get_config() { - return button_driver_init(NULL); -} - -esp_err_t device_init() -{ - ESP_LOGI(TAG, "Initializing device"); - device_light_init(); - device_button_init(); - return ESP_OK; + button_config_t config = { + .type = BUTTON_TYPE_GPIO, + .gpio_button_config = { + .gpio_num = BUTTON_GPIO_PIN, + .active_level = 0, + } + }; + return config; } diff --git a/device_hal/device/esp32c3_devkit_m/esp_matter_device.cmake b/device_hal/device/esp32c3_devkit_m/esp_matter_device.cmake index 0088c1c4f..6daf4dc01 100644 --- a/device_hal/device/esp32c3_devkit_m/esp_matter_device.cmake +++ b/device_hal/device/esp32c3_devkit_m/esp_matter_device.cmake @@ -3,11 +3,10 @@ if (NOT ("${IDF_TARGET}" STREQUAL "esp32c3" )) message(FATAL_ERROR "please set esp32c3 as the IDF_TARGET using 'idf.py set-target esp32c3'") endif() -SET(device_hal_path $ENV{ESP_MATTER_DEVICE_PATH}/../../) -SET(device_name esp32c3_devkit_m) -SET(light_type ws2812) -SET(button_type hollow) -SET(used_driver light_driver button_driver) -SET(extra_components_dirs_append "${device_hal_path}/light_driver" - "${device_hal_path}/button_driver" +SET(device_type esp32c3_devkit_m) +SET(led_type ws2812) +SET(button_type gpio) + +SET(extra_components_dirs_append "$ENV{ESP_MATTER_DEVICE_PATH}/../../led_driver" + "$ENV{ESP_MATTER_DEVICE_PATH}/../../button_driver" "$ENV{IDF_PATH}/examples/common_components/led_strip") diff --git a/device_hal/device/esp32h2_devkit_c/device.c b/device_hal/device/esp32h2_devkit_c/device.c index fa52a296a..55c3f2748 100644 --- a/device_hal/device/esp32h2_devkit_c/device.c +++ b/device_hal/device/esp32h2_devkit_c/device.c @@ -12,33 +12,32 @@ // limitations under the License #include +#include +#include -#include -#include - -#define LED_GPIO_PIN 8 /* GPIO_NUM_8 */ +#define LED_GPIO_PIN GPIO_NUM_8 #define LED_CHANNEL 0 /* RMT_CHANNEL_0 */ +#define BUTTON_GPIO_PIN GPIO_NUM_0 static const char *TAG = "device"; -static esp_err_t device_light_init() +led_driver_config_t led_driver_get_config() { - light_driver_config_t config = { + led_driver_config_t config = { .gpio = LED_GPIO_PIN, .channel = LED_CHANNEL, }; - return light_driver_init(&config); + return config; } -static esp_err_t device_button_init() +button_config_t button_driver_get_config() { - return button_driver_init(NULL); -} - -esp_err_t device_init() -{ - ESP_LOGI(TAG, "Initializing device"); - device_light_init(); - device_button_init(); - return ESP_OK; + button_config_t config = { + .type = BUTTON_TYPE_GPIO, + .gpio_button_config = { + .gpio_num = BUTTON_GPIO_PIN, + .active_level = 0, + } + }; + return config; } diff --git a/device_hal/device/esp32h2_devkit_c/esp_matter_device.cmake b/device_hal/device/esp32h2_devkit_c/esp_matter_device.cmake index 8238dd37a..bad15f157 100644 --- a/device_hal/device/esp32h2_devkit_c/esp_matter_device.cmake +++ b/device_hal/device/esp32h2_devkit_c/esp_matter_device.cmake @@ -1,13 +1,12 @@ cmake_minimum_required(VERSION 3.5) if (NOT ("${IDF_TARGET}" STREQUAL "esp32h2")) - message(FATAL_ERROR "please set esp32h2 as the IDF_TARGET using 'idf.py -- preview set-target esp32h2'") + message(FATAL_ERROR "please set esp32h2 as the IDF_TARGET using 'idf.py --preview set-target esp32h2'") endif() -SET(device_hal_path $ENV{ESP_MATTER_DEVICE_PATH}/../../) -SET(device_name esp32h2_devkit_c) -SET(light_type ws2812) -SET(button_type hollow) -SET(used_driver light_driver button_driver) -SET(extra_components_dirs_append "${device_hal_path}/light_driver" - "${device_hal_path}/button_driver" +SET(device_type esp32h2_devkit_c) +SET(led_type ws2812) +SET(button_type gpio) + +SET(extra_components_dirs_append "$ENV{ESP_MATTER_DEVICE_PATH}/../../led_driver" + "$ENV{ESP_MATTER_DEVICE_PATH}/../../button_driver" "$ENV{IDF_PATH}/examples/common_components/led_strip") diff --git a/device_hal/device/esp32s2_devkit_c/device.c b/device_hal/device/esp32s2_devkit_c/device.c index 43fea710d..55c3f2748 100644 --- a/device_hal/device/esp32s2_devkit_c/device.c +++ b/device_hal/device/esp32s2_devkit_c/device.c @@ -12,30 +12,32 @@ // limitations under the License #include +#include +#include -#include -#include +#define LED_GPIO_PIN GPIO_NUM_8 +#define LED_CHANNEL 0 /* RMT_CHANNEL_0 */ +#define BUTTON_GPIO_PIN GPIO_NUM_0 static const char *TAG = "device"; -static esp_err_t device_light_init() +led_driver_config_t led_driver_get_config() { - light_driver_config_t config = { - .gpio = -1, - .channel = -1, + led_driver_config_t config = { + .gpio = LED_GPIO_PIN, + .channel = LED_CHANNEL, }; - return light_driver_init(&config); + return config; } -static esp_err_t device_button_init() +button_config_t button_driver_get_config() { - return button_driver_init(NULL); -} - -esp_err_t device_init() -{ - ESP_LOGI(TAG, "Initializing device"); - device_light_init(); - device_button_init(); - return ESP_OK; + button_config_t config = { + .type = BUTTON_TYPE_GPIO, + .gpio_button_config = { + .gpio_num = BUTTON_GPIO_PIN, + .active_level = 0, + } + }; + return config; } diff --git a/device_hal/device/esp32s2_devkit_c/esp_matter_device.cmake b/device_hal/device/esp32s2_devkit_c/esp_matter_device.cmake index 460133ae7..63ecd5692 100644 --- a/device_hal/device/esp32s2_devkit_c/esp_matter_device.cmake +++ b/device_hal/device/esp32s2_devkit_c/esp_matter_device.cmake @@ -1,14 +1,11 @@ cmake_minimum_required(VERSION 3.5) -if(NOT ("${IDF_TARGET}" STREQUAL "esp32s2" )) +if (NOT ("${IDF_TARGET}" STREQUAL "esp32s2" )) message(FATAL_ERROR "please set esp32s2 as the IDF_TARGET using 'idf.py set-target esp32s2'") endif() -SET(device_hal_path $ENV{ESP_MATTER_DEVICE_PATH}/../../) -SET(device_name esp32s2_devkit_c) -SET(light_type hollow) -SET(button_type hollow) -SET(used_driver light_driver button_driver) -SET(extra_components_dirs_append "${device_hal_path}/light_driver" - "${device_hal_path}/button_driver") - +SET(device_type esp32s2_devkit_c) +SET(led_type hollow) +SET(button_type gpio) +SET(extra_components_dirs_append "$ENV{ESP_MATTER_DEVICE_PATH}/../../led_driver" + "$ENV{ESP_MATTER_DEVICE_PATH}/../../button_driver") diff --git a/device_hal/device/esp32s3_devkit_c/device.c b/device_hal/device/esp32s3_devkit_c/device.c index 6f404d0e0..ea9fb775c 100644 --- a/device_hal/device/esp32s3_devkit_c/device.c +++ b/device_hal/device/esp32s3_devkit_c/device.c @@ -12,37 +12,32 @@ // limitations under the License #include +#include +#include -#include -#include - -#define DEVICE_VERSION_1_0 - -#ifdef DEVICE_VERSION_1_0 -#define LED_GPIO_PIN 48 /* GPIO_NUM_48 */ +#define LED_GPIO_PIN GPIO_NUM_48 #define LED_CHANNEL 0 /* RMT_CHANNEL_0 */ -#endif +#define BUTTON_GPIO_PIN GPIO_NUM_0 static const char *TAG = "device"; -static esp_err_t device_light_init() +led_driver_config_t led_driver_get_config() { - light_driver_config_t config = { + led_driver_config_t config = { .gpio = LED_GPIO_PIN, .channel = LED_CHANNEL, }; - return light_driver_init(&config); + return config; } -static esp_err_t device_button_init() +button_config_t button_driver_get_config() { - return button_driver_init(NULL); -} - -esp_err_t device_init() -{ - ESP_LOGI(TAG, "Initializing device"); - device_light_init(); - device_button_init(); - return ESP_OK; + button_config_t config = { + .type = BUTTON_TYPE_GPIO, + .gpio_button_config = { + .gpio_num = BUTTON_GPIO_PIN, + .active_level = 0, + } + }; + return config; } diff --git a/device_hal/device/esp32s3_devkit_c/esp_matter_device.cmake b/device_hal/device/esp32s3_devkit_c/esp_matter_device.cmake index 3df56055e..bc446e068 100644 --- a/device_hal/device/esp32s3_devkit_c/esp_matter_device.cmake +++ b/device_hal/device/esp32s3_devkit_c/esp_matter_device.cmake @@ -1,15 +1,12 @@ cmake_minimum_required(VERSION 3.5) -if(NOT ("${IDF_TARGET}" STREQUAL "esp32s3" )) +if (NOT ("${IDF_TARGET}" STREQUAL "esp32s3" )) message(FATAL_ERROR "please set esp32s3 as the IDF_TARGET using 'idf.py set-target esp32s3'") endif() -SET(device_hal_path $ENV{ESP_MATTER_DEVICE_PATH}/../../) -SET(device_name esp32s3_devkit_c) -SET(light_type ws2812) -SET(button_type hollow) -SET(used_driver light_driver button_driver) -SET(extra_components_dirs_append "${device_hal_path}/light_driver" - "${device_hal_path}/button_driver" +SET(device_type esp32s3_devkit_c) +SET(led_type ws2812) +SET(button_type gpio) + +SET(extra_components_dirs_append "$ENV{ESP_MATTER_DEVICE_PATH}/../../led_driver" + "$ENV{ESP_MATTER_DEVICE_PATH}/../../button_driver" "$ENV{IDF_PATH}/examples/common_components/led_strip") - - diff --git a/device_hal/device/include/device.h b/device_hal/device/include/device.h index 7fffa9d72..b419aaa48 100644 --- a/device_hal/device/include/device.h +++ b/device_hal/device/include/device.h @@ -12,13 +12,16 @@ // limitations under the License #pragma once -#include + +#include +#include #ifdef __cplusplus extern "C" { #endif -esp_err_t device_init(); +led_driver_config_t led_driver_get_config(); +button_config_t button_driver_get_config(); #ifdef __cplusplus } diff --git a/device_hal/device/m5stack/device.c b/device_hal/device/m5stack/device.c index 5de9bdd2e..defea4ed1 100644 --- a/device_hal/device/m5stack/device.c +++ b/device_hal/device/m5stack/device.c @@ -12,36 +12,32 @@ // limitations under the License #include +#include +#include -#include -#include - -#define DEVICE_VERSION_1_0 - -#ifdef DEVICE_VERSION_1_0 #define LED_GPIO_PIN 32 /* PIN_NUM_BCKL for M5Stack TFT */ #define LED_CHANNEL 7 /* LEDC_CHANNEL_7 */ -#endif +#define BUTTON_GPIO_PIN 39 /* Left button on M5Stack */ + static const char *TAG = "device"; -static esp_err_t device_light_init() +led_driver_config_t led_driver_get_config() { - light_driver_config_t config = { - .gpio = 32, - .channel = 7, + led_driver_config_t config = { + .gpio = LED_GPIO_PIN, + .channel = LED_CHANNEL, }; - return light_driver_init(&config); + return config; } -static esp_err_t device_button_init() +button_config_t button_driver_get_config() { - return button_driver_init(NULL); -} - -esp_err_t device_init() -{ - ESP_LOGI(TAG, "Initializing board"); - device_light_init(); - device_button_init(); - return ESP_OK; + button_config_t config = { + .type = BUTTON_TYPE_GPIO, + .gpio_button_config = { + .gpio_num = BUTTON_GPIO_PIN, + .active_level = 0, + } + }; + return config; } diff --git a/device_hal/device/m5stack/esp_matter_device.cmake b/device_hal/device/m5stack/esp_matter_device.cmake index 209f8a5b3..1f9023b6c 100644 --- a/device_hal/device/m5stack/esp_matter_device.cmake +++ b/device_hal/device/m5stack/esp_matter_device.cmake @@ -1,15 +1,13 @@ cmake_minimum_required(VERSION 3.5) -if(NOT ("${IDF_TARGET}" STREQUAL "esp32" )) +if (NOT ("${IDF_TARGET}" STREQUAL "esp32" )) message(FATAL_ERROR "please set esp32 as the IDF_TARGET using 'idf.py set-target esp32'") endif() -SET(device_hal_path $ENV{ESP_MATTER_DEVICE_PATH}/../../) -SET(device_name m5stack) -SET(light_type vled) -SET(button_type hollow) -SET(used_driver light_driver button_driver) -SET(extra_components_dirs_append "${device_hal_path}/light_driver" - "${device_hal_path}/button_driver" +SET(device_type m5stack) +SET(led_type vled) +SET(button_type gpio) + +SET(extra_components_dirs_append "$ENV{ESP_MATTER_DEVICE_PATH}/../../led_driver" + "$ENV{ESP_MATTER_DEVICE_PATH}/../../button_driver" "$ENV{ESP_MATTER_PATH}/connectedhomeip/connectedhomeip/examples/common/m5stack-tft/repo/components/tft/" "$ENV{ESP_MATTER_PATH}/connectedhomeip/connectedhomeip/examples/common/m5stack-tft/repo/components/spidriver/") - diff --git a/device_hal/led_driver/CMakeLists.txt b/device_hal/led_driver/CMakeLists.txt new file mode 100644 index 000000000..863c09ee3 --- /dev/null +++ b/device_hal/led_driver/CMakeLists.txt @@ -0,0 +1,12 @@ +include($ENV{ESP_MATTER_DEVICE_PATH}/esp_matter_device.cmake) + +set(led_requires driver) +if ("${led_type}" STREQUAL "ws2812") + list(APPEND led_requires led_strip) +elseif ("${led_type}" STREQUAL "vled") + list(APPEND led_requires tft spidriver) +endif() + +idf_component_register(SRC_DIRS ${led_type} utils + INCLUDE_DIRS include + PRIV_REQUIRES ${led_requires}) diff --git a/device_hal/light_driver/gpio/light_driver.c b/device_hal/led_driver/gpio/led_driver.c similarity index 79% rename from device_hal/light_driver/gpio/light_driver.c rename to device_hal/led_driver/gpio/led_driver.c index 71f745f19..db075be93 100644 --- a/device_hal/light_driver/gpio/light_driver.c +++ b/device_hal/led_driver/gpio/led_driver.c @@ -15,13 +15,13 @@ #include #include -#include +#include -static const char *TAG = "light_driver_gpio"; +static const char *TAG = "led_driver_gpio"; static bool current_power = false; static uint8_t current_brightness = 0; -esp_err_t light_driver_init(light_driver_config_t *config) +esp_err_t led_driver_init(led_driver_config_t *config) { ESP_LOGI(TAG, "Initializing light driver"); esp_err_t err = ESP_OK; @@ -56,13 +56,13 @@ esp_err_t light_driver_init(light_driver_config_t *config) return err; } -esp_err_t light_driver_set_power(bool power) +esp_err_t led_driver_set_power(bool power) { current_power = power; - return light_driver_set_brightness(current_brightness); + return led_driver_set_brightness(current_brightness); } -esp_err_t light_driver_set_brightness(uint8_t brightness) +esp_err_t led_driver_set_brightness(uint8_t brightness) { esp_err_t err; @@ -85,42 +85,42 @@ esp_err_t light_driver_set_brightness(uint8_t brightness) return err; } -esp_err_t light_driver_set_hue(uint16_t hue) +esp_err_t led_driver_set_hue(uint16_t hue) { return ESP_ERR_NOT_SUPPORTED; } -esp_err_t light_driver_set_saturation(uint8_t saturation) +esp_err_t led_driver_set_saturation(uint8_t saturation) { return ESP_ERR_NOT_SUPPORTED; } -esp_err_t light_driver_set_temperature(uint32_t temperature) +esp_err_t led_driver_set_temperature(uint32_t temperature) { return ESP_ERR_NOT_SUPPORTED; } -bool light_driver_get_power() +bool led_driver_get_power() { return current_power; } -uint8_t light_driver_get_brightness() +uint8_t led_driver_get_brightness() { return current_brightness; } -uint16_t light_driver_get_hue() +uint16_t led_driver_get_hue() { return 0; } -uint8_t light_driver_get_saturation() +uint8_t led_driver_get_saturation() { return 0; } -uint32_t light_driver_get_temperature() +uint32_t led_driver_get_temperature() { return 0; } diff --git a/device_hal/light_driver/hollow/light_driver.c b/device_hal/led_driver/hollow/led_driver.c similarity index 74% rename from device_hal/light_driver/hollow/light_driver.c rename to device_hal/led_driver/hollow/led_driver.c index c67ee0f12..780d281bd 100644 --- a/device_hal/light_driver/hollow/light_driver.c +++ b/device_hal/led_driver/hollow/led_driver.c @@ -13,15 +13,15 @@ #include #include -#include +#include -static const char *TAG = "light_driver_hollow"; +static const char *TAG = "led_driver_hollow"; static bool current_power = false; static uint8_t current_brightness = 0; static HS_color_t current_HS = {0, 0}; static uint32_t current_temperature = 6600; -esp_err_t light_driver_init(light_driver_config_t *config) +esp_err_t led_driver_init(led_driver_config_t *config) { ESP_LOGI(TAG, "Initializing light driver"); /* Initialize the driver here */ @@ -29,7 +29,7 @@ esp_err_t light_driver_init(light_driver_config_t *config) return ESP_OK; } -esp_err_t light_driver_set_power(bool power) +esp_err_t led_driver_set_power(bool power) { ESP_LOGI(TAG, "Setting power to: %d", power); /* Set the power state here */ @@ -37,7 +37,7 @@ esp_err_t light_driver_set_power(bool power) return ESP_OK; } -esp_err_t light_driver_set_brightness(uint8_t brightness) +esp_err_t led_driver_set_brightness(uint8_t brightness) { ESP_LOGI(TAG, "Setting brightness to: %d", brightness); /* Set the brightness level here */ @@ -45,7 +45,7 @@ esp_err_t light_driver_set_brightness(uint8_t brightness) return ESP_OK; } -esp_err_t light_driver_set_hue(uint16_t hue) +esp_err_t led_driver_set_hue(uint16_t hue) { ESP_LOGI(TAG, "Setting hue to: %d", hue); /* Set the color hue here */ @@ -53,7 +53,7 @@ esp_err_t light_driver_set_hue(uint16_t hue) return ESP_OK; } -esp_err_t light_driver_set_saturation(uint8_t saturation) +esp_err_t led_driver_set_saturation(uint8_t saturation) { ESP_LOGI(TAG, "Setting saturation to: %d", saturation); /* Set the color saturation here */ @@ -61,7 +61,7 @@ esp_err_t light_driver_set_saturation(uint8_t saturation) return ESP_OK; } -esp_err_t light_driver_set_temperature(uint32_t temperature) +esp_err_t led_driver_set_temperature(uint32_t temperature) { ESP_LOGI(TAG, "Setting temperature to: %d", temperature); /* Set the color temp here*/ @@ -69,27 +69,27 @@ esp_err_t light_driver_set_temperature(uint32_t temperature) return ESP_OK; } -bool light_driver_get_power() +bool led_driver_get_power() { return current_power; } -uint8_t light_driver_get_brightness() +uint8_t led_driver_get_brightness() { return current_brightness; } -uint16_t light_driver_get_hue() +uint16_t led_driver_get_hue() { return current_HS.hue; } -uint8_t light_driver_get_saturation() +uint8_t led_driver_get_saturation() { return current_HS.saturation; } -uint32_t light_driver_get_temperature() +uint32_t led_driver_get_temperature() { return current_temperature; } diff --git a/device_hal/light_driver/include/color_format.h b/device_hal/led_driver/include/color_format.h similarity index 100% rename from device_hal/light_driver/include/color_format.h rename to device_hal/led_driver/include/color_format.h diff --git a/device_hal/light_driver/include/light_driver.h b/device_hal/led_driver/include/led_driver.h similarity index 58% rename from device_hal/light_driver/include/light_driver.h rename to device_hal/led_driver/include/led_driver.h index 62234a65f..ba7564b5c 100644 --- a/device_hal/light_driver/include/light_driver.h +++ b/device_hal/led_driver/include/led_driver.h @@ -23,20 +23,20 @@ extern "C" { typedef struct { int gpio; int channel; -} light_driver_config_t; +} led_driver_config_t; -esp_err_t light_driver_init(light_driver_config_t *config); -esp_err_t light_driver_set_power(bool power); -esp_err_t light_driver_set_brightness(uint8_t brightness); -esp_err_t light_driver_set_hue(uint16_t hue); -esp_err_t light_driver_set_saturation(uint8_t saturation); -esp_err_t light_driver_set_temperature(uint32_t temperature); +esp_err_t led_driver_init(led_driver_config_t *config); +esp_err_t led_driver_set_power(bool power); +esp_err_t led_driver_set_brightness(uint8_t brightness); +esp_err_t led_driver_set_hue(uint16_t hue); +esp_err_t led_driver_set_saturation(uint8_t saturation); +esp_err_t led_driver_set_temperature(uint32_t temperature); -bool light_driver_get_power(void); -uint8_t light_driver_get_brightness(void); -uint16_t light_driver_get_hue(void); -uint8_t light_driver_get_saturation(void); -uint32_t light_driver_get_temperature(void); +bool led_driver_get_power(void); +uint8_t led_driver_get_brightness(void); +uint16_t led_driver_get_hue(void); +uint8_t led_driver_get_saturation(void); +uint32_t led_driver_get_temperature(void); #ifdef __cplusplus } diff --git a/device_hal/light_driver/utils/color_format.c b/device_hal/led_driver/utils/color_format.c similarity index 100% rename from device_hal/light_driver/utils/color_format.c rename to device_hal/led_driver/utils/color_format.c diff --git a/device_hal/light_driver/vled/light_driver.c b/device_hal/led_driver/vled/led_driver.c similarity index 86% rename from device_hal/light_driver/vled/light_driver.c rename to device_hal/led_driver/vled/led_driver.c index 16b2b135d..20440365f 100644 --- a/device_hal/light_driver/vled/light_driver.c +++ b/device_hal/led_driver/vled/led_driver.c @@ -19,13 +19,13 @@ #include #include -#include +#include #define TFT_SPI_CLOCK_INIT_HZ 8000000 #define LEDC_PWM_HZ 1000 #define BRIGHTNESS_MAX 255 -static const char *TAG = "light_driver_vled"; +static const char *TAG = "led_driver_vled"; static bool current_power = false; static uint8_t current_brightness = 0; static HS_color_t current_HS = {0, 0}; @@ -35,7 +35,7 @@ static uint16_t DisplayHeight; static uint16_t DisplayWidth; static int led_driver_channel = -1; -static void SetupBrightnessControl(light_driver_config_t *config) +static void SetupBrightnessControl(led_driver_config_t *config) { ledc_timer_config_t ledc_timer; memset(&ledc_timer, 0, sizeof(ledc_timer)); @@ -124,7 +124,7 @@ static esp_err_t InitDisplay() return ESP_OK; } -esp_err_t light_driver_init(light_driver_config_t *config) +esp_err_t led_driver_init(led_driver_config_t *config) { ESP_LOGI(TAG, "Initializing led driver"); esp_err_t err = ESP_OK; @@ -137,19 +137,19 @@ esp_err_t light_driver_init(light_driver_config_t *config) return err; } -esp_err_t light_driver_set_power(bool power) +esp_err_t led_driver_set_power(bool power) { current_power = power; - return light_driver_set_brightness(current_brightness); + return led_driver_set_brightness(current_brightness); } -esp_err_t light_driver_set_RGB() +esp_err_t led_driver_set_RGB() { TFT_fillWindow(TFT_BLACK); TFT_fillCircle(DisplayWidth / 2, DisplayHeight / 2, DisplayWidth / 4, (color_t){mRGB.red, mRGB.green, mRGB.blue}); TFT_drawCircle(DisplayWidth / 2, DisplayHeight / 2, DisplayWidth / 4, (color_t){255, 255, 255}); return ESP_OK; } -esp_err_t light_driver_set_brightness(uint8_t brightness) +esp_err_t led_driver_set_brightness(uint8_t brightness) { if (brightness != 0) { current_brightness = brightness; @@ -158,55 +158,55 @@ esp_err_t light_driver_set_brightness(uint8_t brightness) brightness = 0; } hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -esp_err_t light_driver_set_hue(uint16_t hue) +esp_err_t led_driver_set_hue(uint16_t hue) { uint8_t brightness = current_power ? current_brightness : 0; current_HS.hue = hue; hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -esp_err_t light_driver_set_saturation(uint8_t saturation) +esp_err_t led_driver_set_saturation(uint8_t saturation) { uint8_t brightness = current_power ? current_brightness : 0; current_HS.saturation = saturation; hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -esp_err_t light_driver_set_temperature(uint32_t temperature) +esp_err_t led_driver_set_temperature(uint32_t temperature) { uint8_t brightness = current_power ? current_brightness : 0; current_temperature = temperature; temp_to_hs(current_temperature, ¤t_HS); hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -bool light_driver_get_power() +bool led_driver_get_power() { return current_power; } -uint8_t light_driver_get_brightness() +uint8_t led_driver_get_brightness() { return current_brightness; } -uint16_t light_driver_get_hue() +uint16_t led_driver_get_hue() { return current_HS.hue; } -uint8_t light_driver_get_saturation() +uint8_t led_driver_get_saturation() { return current_HS.saturation; } -uint32_t light_driver_get_temperature() +uint32_t led_driver_get_temperature() { return current_temperature; } diff --git a/device_hal/light_driver/ws2812/light_driver.c b/device_hal/led_driver/ws2812/led_driver.c similarity index 79% rename from device_hal/light_driver/ws2812/light_driver.c rename to device_hal/led_driver/ws2812/led_driver.c index c8966d03c..af76a8816 100644 --- a/device_hal/light_driver/ws2812/light_driver.c +++ b/device_hal/led_driver/ws2812/led_driver.c @@ -15,9 +15,9 @@ #include #include #include -#include +#include -static const char *TAG = "light_driver_ws2812"; +static const char *TAG = "led_driver_ws2812"; static bool current_power = false; static uint8_t current_brightness = 0; static uint32_t current_temp = 6600; @@ -25,7 +25,7 @@ static HS_color_t current_HS = {0, 0}; static RGB_color_t mRGB; static led_strip_t *strip = NULL; -esp_err_t light_driver_init(light_driver_config_t *config) +esp_err_t led_driver_init(led_driver_config_t *config) { ESP_LOGI(TAG, "Initializing light driver"); esp_err_t err = ESP_OK; @@ -50,13 +50,13 @@ esp_err_t light_driver_init(light_driver_config_t *config) return err; } -esp_err_t light_driver_set_power(bool power) +esp_err_t led_driver_set_power(bool power) { current_power = power; - return light_driver_set_brightness(current_brightness); + return led_driver_set_brightness(current_brightness); } -esp_err_t light_driver_set_RGB() +esp_err_t led_driver_set_RGB() { esp_err_t err = ESP_OK; if (!strip) { @@ -77,7 +77,7 @@ esp_err_t light_driver_set_RGB() return err; } -esp_err_t light_driver_set_brightness(uint8_t brightness) +esp_err_t led_driver_set_brightness(uint8_t brightness) { if (brightness != 0) { current_brightness = brightness; @@ -86,55 +86,55 @@ esp_err_t light_driver_set_brightness(uint8_t brightness) brightness = 0; } hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -esp_err_t light_driver_set_hue(uint16_t hue) +esp_err_t led_driver_set_hue(uint16_t hue) { uint8_t brightness = current_power ? current_brightness : 0; current_HS.hue = hue; hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -esp_err_t light_driver_set_saturation(uint8_t saturation) +esp_err_t led_driver_set_saturation(uint8_t saturation) { uint8_t brightness = current_power ? current_brightness : 0; current_HS.saturation = saturation; hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -esp_err_t light_driver_set_temperature(uint32_t temperature) +esp_err_t led_driver_set_temperature(uint32_t temperature) { uint8_t brightness = current_power ? current_brightness : 0; current_temp = temperature; temp_to_hs(current_temp, ¤t_HS); hsv_to_rgb(current_HS, brightness, &mRGB); - return light_driver_set_RGB(); + return led_driver_set_RGB(); } -bool light_driver_get_power() +bool led_driver_get_power() { return current_power; } -uint8_t light_driver_get_brightness() +uint8_t led_driver_get_brightness() { return current_brightness; } -uint16_t light_driver_get_hue() +uint16_t led_driver_get_hue() { return current_HS.hue; } -uint8_t light_driver_get_saturation() +uint8_t led_driver_get_saturation() { return current_HS.saturation; } -uint32_t light_driver_get_temperature() +uint32_t led_driver_get_temperature() { return current_temp; } diff --git a/device_hal/light_driver/CMakeLists.txt b/device_hal/light_driver/CMakeLists.txt deleted file mode 100644 index 7b5dd12de..000000000 --- a/device_hal/light_driver/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -include($ENV{ESP_MATTER_DEVICE_PATH}/esp_matter_device.cmake) -set(light_requires driver) -if ("${light_type}" STREQUAL "ws2812") - list(APPEND light_requires led_strip) -elseif ("${light_type}" STREQUAL "vled") - list(APPEND light_requires tft spidriver) -endif() -idf_component_register(SRC_DIRS ${light_type} utils - INCLUDE_DIRS include - PRIV_REQUIRES ${light_requires}) diff --git a/examples/light/main/app_driver.cpp b/examples/light/main/app_driver.cpp index 34c17310d..21726e0d7 100644 --- a/examples/light/main/app_driver.cpp +++ b/examples/light/main/app_driver.cpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include @@ -24,25 +24,43 @@ extern int light_endpoint_id; /* Do any conversions/remapping for the actual value here */ static esp_err_t app_driver_light_set_power(esp_matter_attr_val_t *val) { - return light_driver_set_power(val->val.b); + return led_driver_set_power(val->val.b); } static esp_err_t app_driver_light_set_brightness(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_BRIGHTNESS, STANDARD_BRIGHTNESS); - return light_driver_set_brightness(value); + return led_driver_set_brightness(value); } static esp_err_t app_driver_light_set_hue(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_HUE, STANDARD_HUE); - return light_driver_set_hue(value); + return led_driver_set_hue(value); } static esp_err_t app_driver_light_set_saturation(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_SATURATION, STANDARD_SATURATION); - return light_driver_set_saturation(value); + return led_driver_set_saturation(value); +} + +static void app_driver_button_toggle_cb(void *arg) +{ + ESP_LOGI(TAG, "Toggle button pressed"); + int endpoint_id = light_endpoint_id; + int cluster_id = OnOff::Id; + int attribute_id = OnOff::Attributes::OnOff::Id; + + node_t *node = node::get(); + endpoint_t *endpoint = endpoint::get(node, endpoint_id); + cluster_t *cluster = cluster::get(endpoint, cluster_id); + attribute_t *attribute = attribute::get(cluster, attribute_id); + + esp_matter_attr_val_t val = esp_matter_invalid(NULL); + attribute::get_val(attribute, &val); + val.val.b = !val.val.b; + attribute::update(endpoint_id, cluster_id, attribute_id, &val); } esp_err_t app_driver_attribute_update(int endpoint_id, int cluster_id, int attribute_id, esp_matter_attr_val_t *val) @@ -97,7 +115,16 @@ static esp_err_t app_driver_attribute_set_defaults() esp_err_t app_driver_init() { ESP_LOGI(TAG, "Initialising driver"); - device_init(); + + /* Initialize button */ + button_config_t button_config = button_driver_get_config(); + button_handle_t handle = iot_button_create(&button_config); + iot_button_register_cb(handle, BUTTON_PRESS_DOWN, app_driver_button_toggle_cb); + + /* Initialize led */ + led_driver_config_t led_config = led_driver_get_config(); + led_driver_init(&led_config); + app_driver_attribute_set_defaults(); return ESP_OK; } diff --git a/examples/rainmaker_light/main/app_driver.cpp b/examples/rainmaker_light/main/app_driver.cpp index 34c17310d..21726e0d7 100644 --- a/examples/rainmaker_light/main/app_driver.cpp +++ b/examples/rainmaker_light/main/app_driver.cpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include @@ -24,25 +24,43 @@ extern int light_endpoint_id; /* Do any conversions/remapping for the actual value here */ static esp_err_t app_driver_light_set_power(esp_matter_attr_val_t *val) { - return light_driver_set_power(val->val.b); + return led_driver_set_power(val->val.b); } static esp_err_t app_driver_light_set_brightness(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_BRIGHTNESS, STANDARD_BRIGHTNESS); - return light_driver_set_brightness(value); + return led_driver_set_brightness(value); } static esp_err_t app_driver_light_set_hue(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_HUE, STANDARD_HUE); - return light_driver_set_hue(value); + return led_driver_set_hue(value); } static esp_err_t app_driver_light_set_saturation(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_SATURATION, STANDARD_SATURATION); - return light_driver_set_saturation(value); + return led_driver_set_saturation(value); +} + +static void app_driver_button_toggle_cb(void *arg) +{ + ESP_LOGI(TAG, "Toggle button pressed"); + int endpoint_id = light_endpoint_id; + int cluster_id = OnOff::Id; + int attribute_id = OnOff::Attributes::OnOff::Id; + + node_t *node = node::get(); + endpoint_t *endpoint = endpoint::get(node, endpoint_id); + cluster_t *cluster = cluster::get(endpoint, cluster_id); + attribute_t *attribute = attribute::get(cluster, attribute_id); + + esp_matter_attr_val_t val = esp_matter_invalid(NULL); + attribute::get_val(attribute, &val); + val.val.b = !val.val.b; + attribute::update(endpoint_id, cluster_id, attribute_id, &val); } esp_err_t app_driver_attribute_update(int endpoint_id, int cluster_id, int attribute_id, esp_matter_attr_val_t *val) @@ -97,7 +115,16 @@ static esp_err_t app_driver_attribute_set_defaults() esp_err_t app_driver_init() { ESP_LOGI(TAG, "Initialising driver"); - device_init(); + + /* Initialize button */ + button_config_t button_config = button_driver_get_config(); + button_handle_t handle = iot_button_create(&button_config); + iot_button_register_cb(handle, BUTTON_PRESS_DOWN, app_driver_button_toggle_cb); + + /* Initialize led */ + led_driver_config_t led_config = led_driver_get_config(); + led_driver_init(&led_config); + app_driver_attribute_set_defaults(); return ESP_OK; } diff --git a/examples/switch/main/app_driver.cpp b/examples/switch/main/app_driver.cpp index 52b28b806..762616d24 100644 --- a/examples/switch/main/app_driver.cpp +++ b/examples/switch/main/app_driver.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include @@ -88,6 +88,18 @@ void app_driver_client_command_callback(client::peer_device_t *peer_device, int } } +static void app_driver_button_toggle_cb(void *arg) +{ + ESP_LOGI(TAG, "Toggle button pressed"); + int endpoint_id = switch_endpoint_id; + int cluster_id = OnOff::Id; + int command_id = OnOff::Commands::Off::Id; + + g_cluster_id = cluster_id; + g_command_id = command_id; + client::cluster_update(endpoint_id, cluster_id); +} + esp_err_t app_driver_attribute_update(int endpoint_id, int cluster_id, int attribute_id, esp_matter_attr_val_t *val) { /* Nothing to do here */ @@ -123,7 +135,12 @@ static esp_err_t app_driver_attribute_set_defaults() esp_err_t app_driver_init() { ESP_LOGI(TAG, "Initialising driver"); - // device_init(); + + /* Initialize button */ + button_config_t button_config = button_driver_get_config(); + button_handle_t handle = iot_button_create(&button_config); + iot_button_register_cb(handle, BUTTON_PRESS_DOWN, app_driver_button_toggle_cb); + app_driver_attribute_set_defaults(); app_driver_register_commands(); client::set_command_callback(app_driver_client_command_callback, NULL); diff --git a/examples/zap_light/main/app_driver.cpp b/examples/zap_light/main/app_driver.cpp index ad68e6f58..25af18d61 100644 --- a/examples/zap_light/main/app_driver.cpp +++ b/examples/zap_light/main/app_driver.cpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include @@ -24,25 +24,39 @@ extern int light_endpoint_id; /* Do any conversions/remapping for the actual value here */ static esp_err_t app_driver_light_set_power(esp_matter_attr_val_t *val) { - return light_driver_set_power(val->val.b); + return led_driver_set_power(val->val.b); } static esp_err_t app_driver_light_set_brightness(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_BRIGHTNESS, STANDARD_BRIGHTNESS); - return light_driver_set_brightness(value); + return led_driver_set_brightness(value); } static esp_err_t app_driver_light_set_hue(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_HUE, STANDARD_HUE); - return light_driver_set_hue(value); + return led_driver_set_hue(value); } static esp_err_t app_driver_light_set_saturation(esp_matter_attr_val_t *val) { int value = REMAP_TO_RANGE(val->val.u8, MATTER_SATURATION, STANDARD_SATURATION); - return light_driver_set_saturation(value); + return led_driver_set_saturation(value); +} + +static void app_driver_button_toggle_cb(void *arg) +{ + ESP_LOGI(TAG, "Toggle button pressed"); + int endpoint_id = light_endpoint_id; + int cluster_id = OnOff::Id; + int attribute_id = OnOff::Attributes::OnOff::Id; + + uint8_t value; + attribute::get_val_raw(endpoint_id, cluster_id, attribute_id, &value, sizeof(uint8_t)); + esp_matter_attr_val_t val = esp_matter_bool(value); + val.val.b = !val.val.b; + attribute::update(endpoint_id, cluster_id, attribute_id, &val); } esp_err_t app_driver_attribute_update(int endpoint_id, int cluster_id, int attribute_id, esp_matter_attr_val_t *val) @@ -114,7 +128,16 @@ esp_err_t app_driver_attribute_set_defaults() esp_err_t app_driver_init() { ESP_LOGI(TAG, "Initialising driver"); - device_init(); + + /* Initialize button */ + button_config_t button_config = button_driver_get_config(); + button_handle_t handle = iot_button_create(&button_config); + iot_button_register_cb(handle, BUTTON_PRESS_DOWN, app_driver_button_toggle_cb); + + /* Initialize led */ + led_driver_config_t led_config = led_driver_get_config(); + led_driver_init(&led_config); + /* Attribute defaults are set after esp_matter::start() from app_main() */ return ESP_OK; }