Merge branch 'pr_330' into 'main'

[GH_PR] Provision to add buttons to generic_switch example and typo fix for issue #326. (CON-422)

See merge request app-frameworks/esp-matter!382
This commit is contained in:
Hrishikesh Dhayagude
2023-05-25 01:26:19 +08:00
8 changed files with 151 additions and 59 deletions
@@ -1070,7 +1070,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<int>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.i)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.i)) {
Traits::SetNull(*(int *)value);
} else {
Traits::WorkingToStorage(val->val.i, *(int *)value);
@@ -1088,7 +1088,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<float>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.f)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.f)) {
Traits::SetNull(*(float *)value);
} else {
Traits::WorkingToStorage(val->val.f, *(float *)value);
@@ -1148,7 +1148,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<int8_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.i8)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.i8)) {
Traits::SetNull(*(int8_t *)value);
} else {
Traits::WorkingToStorage(val->val.i8, *(int8_t *)value);
@@ -1166,7 +1166,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint8_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u8)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u8)) {
Traits::SetNull(*(uint8_t *)value);
} else {
Traits::WorkingToStorage(val->val.u8, *(uint8_t *)value);
@@ -1184,7 +1184,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<int16_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.i16)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.i16)) {
Traits::SetNull(*(int16_t *)value);
} else {
Traits::WorkingToStorage(val->val.i16, *(int16_t *)value);
@@ -1202,7 +1202,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint16_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u16)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u16)) {
Traits::SetNull(*(uint16_t *)value);
} else {
Traits::WorkingToStorage(val->val.u16, *(uint16_t *)value);
@@ -1220,7 +1220,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<int32_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.i32)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.i32)) {
Traits::SetNull(*(int32_t *)value);
} else {
Traits::WorkingToStorage(val->val.i32, *(int32_t *)value);
@@ -1238,7 +1238,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint32_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u32)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u32)) {
Traits::SetNull(*(uint32_t *)value);
} else {
Traits::WorkingToStorage(val->val.u32, *(uint32_t *)value);
@@ -1256,7 +1256,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<int64_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.i64)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.i64)) {
Traits::SetNull(*(int64_t *)value);
} else {
Traits::WorkingToStorage(val->val.i64, *(int64_t *)value);
@@ -1274,7 +1274,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint64_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u64)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u64)) {
Traits::SetNull(*(uint64_t *)value);
} else {
Traits::WorkingToStorage(val->val.u64, *(uint64_t *)value);
@@ -1292,7 +1292,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint8_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u8)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u8)) {
Traits::SetNull(*(uint8_t *)value);
} else {
Traits::WorkingToStorage(val->val.u8, *(uint8_t *)value);
@@ -1310,7 +1310,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint8_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u8)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u8)) {
Traits::SetNull(*(uint8_t *)value);
} else {
Traits::WorkingToStorage(val->val.u8, *(uint8_t *)value);
@@ -1328,7 +1328,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint16_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u16)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u16)) {
Traits::SetNull(*(uint16_t *)value);
} else {
Traits::WorkingToStorage(val->val.u16, *(uint16_t *)value);
@@ -1346,7 +1346,7 @@ esp_err_t get_data_from_attr_val(esp_matter_attr_val_t *val, EmberAfAttributeTyp
}
if (value) {
using Traits = chip::app::NumericAttributeTraits<uint32_t>;
if ((val->type & ESP_MATTER_VAL_NULLANLE_BASE) && Traits::IsNullValue(val->val.u32)) {
if ((val->type & ESP_MATTER_VAL_NULLABLE_BASE) && Traits::IsNullValue(val->val.u32)) {
Traits::SetNull(*(uint32_t *)value);
} else {
Traits::WorkingToStorage(val->val.u32, *(uint32_t *)value);
@@ -36,7 +36,7 @@
#define REMAP_TO_RANGE_INVERSE(value, factor) (factor / (value ? value : 1))
/* Nullable base for nullable attribute */
#define ESP_MATTER_VAL_NULLANLE_BASE 0x80
#define ESP_MATTER_VAL_NULLABLE_BASE 0x80
/** ESP Matter Attribute Value type */
typedef enum {
@@ -79,20 +79,20 @@ typedef enum {
/** 32 bit bitmap */
ESP_MATTER_VAL_TYPE_BITMAP32 = 18,
/** nullable types **/
ESP_MATTER_VAL_TYPE_NULLABLE_INTEGER = ESP_MATTER_VAL_TYPE_INTEGER + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_FLOAT = ESP_MATTER_VAL_TYPE_FLOAT + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT8 = ESP_MATTER_VAL_TYPE_INT8 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT8 = ESP_MATTER_VAL_TYPE_UINT8 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT16 = ESP_MATTER_VAL_TYPE_INT16 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT16 = ESP_MATTER_VAL_TYPE_UINT16 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT32 = ESP_MATTER_VAL_TYPE_INT32 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT32 = ESP_MATTER_VAL_TYPE_UINT32 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT64 = ESP_MATTER_VAL_TYPE_INT64 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT64 = ESP_MATTER_VAL_TYPE_UINT64 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_ENUM8 = ESP_MATTER_VAL_TYPE_ENUM8 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_BITMAP8 = ESP_MATTER_VAL_TYPE_BITMAP8 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_BITMAP16 = ESP_MATTER_VAL_TYPE_BITMAP16 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_BITMAP32= ESP_MATTER_VAL_TYPE_BITMAP32 + ESP_MATTER_VAL_NULLANLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INTEGER = ESP_MATTER_VAL_TYPE_INTEGER + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_FLOAT = ESP_MATTER_VAL_TYPE_FLOAT + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT8 = ESP_MATTER_VAL_TYPE_INT8 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT8 = ESP_MATTER_VAL_TYPE_UINT8 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT16 = ESP_MATTER_VAL_TYPE_INT16 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT16 = ESP_MATTER_VAL_TYPE_UINT16 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT32 = ESP_MATTER_VAL_TYPE_INT32 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT32 = ESP_MATTER_VAL_TYPE_UINT32 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_INT64 = ESP_MATTER_VAL_TYPE_INT64 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_UINT64 = ESP_MATTER_VAL_TYPE_UINT64 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_ENUM8 = ESP_MATTER_VAL_TYPE_ENUM8 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_BITMAP8 = ESP_MATTER_VAL_TYPE_BITMAP8 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_BITMAP16 = ESP_MATTER_VAL_TYPE_BITMAP16 + ESP_MATTER_VAL_NULLABLE_BASE,
ESP_MATTER_VAL_TYPE_NULLABLE_BITMAP32= ESP_MATTER_VAL_TYPE_BITMAP32 + ESP_MATTER_VAL_NULLABLE_BASE,
} esp_matter_val_type_t;
/** ESP Matter Value */
+1
View File
@@ -28,6 +28,7 @@ The Prerequisites for ESP-IDF and Matter:
2.1.1.1 Windows 10
~~~~~~~~~~~~~~~~~~
@@ -11,4 +11,8 @@
config GENERIC_SWITCH_TYPE_MOMENTARY
bool "Generic Switch Type Momentary"
endchoice
config MAX_CONFIGURABLE_BUTTONS
int "Maximum physical configurable buttons"
default 5
range 1 5
endmenu
+27 -16
View File
@@ -21,7 +21,6 @@ using namespace esp_matter;
using namespace esp_matter::cluster;
static const char *TAG = "app_driver";
extern uint16_t switch_endpoint_id;
esp_err_t app_driver_attribute_update(app_driver_handle_t driver_handle, uint16_t endpoint_id, uint32_t cluster_id,
uint32_t attribute_id, esp_matter_attr_val_t *val)
@@ -34,7 +33,8 @@ esp_err_t app_driver_attribute_update(app_driver_handle_t driver_handle, uint16_
static void app_driver_button_switch_latched(void *arg, void *data)
{
ESP_LOGI(TAG, "Switch lached pressed");
gpio_button * button = (gpio_button*)data;
int switch_endpoint_id = (button != NULL) ? get_endpoint(button) : 1;
// Press moves Position from 0 (idle) to 1 (press)
uint8_t newPosition = 1;
lock::chip_stack_lock(portMAX_DELAY);
@@ -48,7 +48,8 @@ static void app_driver_button_switch_latched(void *arg, void *data)
static void app_driver_button_initial_pressed(void *arg, void *data)
{
ESP_LOGI(TAG, "Initial button pressed");
gpio_button * button = (gpio_button*)data;
int switch_endpoint_id = (button != NULL) ? get_endpoint(button) : 1;
// Press moves Position from 0 (idle) to 1 (press)
uint8_t newPosition = 1;
lock::chip_stack_lock(portMAX_DELAY);
@@ -60,9 +61,10 @@ static void app_driver_button_initial_pressed(void *arg, void *data)
static void app_driver_button_release(void *arg, void *data)
{
gpio_button *button = (gpio_button *)data;
int switch_endpoint_id = (button != NULL) ? get_endpoint(button) : 1;
if(iot_button_get_ticks_time((button_handle_t)arg) < 5000){
ESP_LOGI(TAG, "Short button release");
// Release moves Position from 1 (press) to 0 (idle)
uint8_t previousPosition = 1;
uint8_t newPosition = 0;
@@ -74,7 +76,6 @@ static void app_driver_button_release(void *arg, void *data)
}
else{
ESP_LOGI(TAG, "Long button release");
// Release moves Position from 1 (press) to 0 (idle)
uint8_t previousPosition = 1;
uint8_t newPosition = 0;
@@ -88,8 +89,9 @@ static void app_driver_button_release(void *arg, void *data)
static void app_driver_button_long_pressed(void *arg, void *data)
{
ESP_LOGI(TAG, "Long button pressed");
ESP_LOGI(TAG, "Long button pressed ");
gpio_button *button = (gpio_button *)data;
int switch_endpoint_id = (button != NULL) ? get_endpoint(button) : 1;
// Press moves Position from 0 (idle) to 1 (press)
uint8_t newPosition = 1;
lock::chip_stack_lock(portMAX_DELAY);
@@ -104,7 +106,8 @@ static int current_number_of_presses_counted = 1;
static void app_driver_button_multipress_ongoing(void *arg, void *data)
{
ESP_LOGI(TAG, "Multipress Ongoing");
gpio_button * button = (gpio_button *)data;
int switch_endpoint_id = (button != NULL) ? get_endpoint(button) : 1;
// Press moves Position from 0 (idle) to 1 (press)
uint8_t newPosition = 1;
current_number_of_presses_counted++;
@@ -118,7 +121,8 @@ static void app_driver_button_multipress_ongoing(void *arg, void *data)
static void app_driver_button_multipress_complete(void *arg, void *data)
{
ESP_LOGI(TAG, "Multipress Complete");
gpio_button * button = (gpio_button *)data;
int switch_endpoint_id = (button != NULL) ? get_endpoint(button) : 1;
// Press moves Position from 0 (idle) to 1 (press)
uint8_t previousPosition = 1;
uint8_t newPosition = 0;
@@ -133,21 +137,28 @@ static void app_driver_button_multipress_complete(void *arg, void *data)
}
#endif
app_driver_handle_t app_driver_button_init()
app_driver_handle_t app_driver_button_init(gpio_button * button)
{
/* Initialize button */
button_config_t config = button_driver_get_config();
if(button != NULL)
{
config.type = button_type_t::BUTTON_TYPE_GPIO;
config.gpio_button_config.gpio_num = button->GPIO_PIN_VALUE;
}
button_handle_t handle = iot_button_create(&config);
#if CONFIG_GENERIC_SWITCH_TYPE_LATCHING
iot_button_register_cb(handle, BUTTON_DOUBLE_CLICK, app_driver_button_switch_latched, NULL);
iot_button_register_cb(handle, BUTTON_DOUBLE_CLICK, app_driver_button_switch_latched, button);
#endif
#if CONFIG_GENERIC_SWITCH_TYPE_MOMENTARY
iot_button_register_cb(handle, BUTTON_PRESS_DOWN, app_driver_button_initial_pressed, NULL);
iot_button_register_cb(handle, BUTTON_PRESS_UP, app_driver_button_release, NULL);
iot_button_register_cb(handle, BUTTON_LONG_PRESS_START, app_driver_button_long_pressed, NULL);
iot_button_register_cb(handle, BUTTON_PRESS_REPEAT, app_driver_button_multipress_ongoing, NULL);
iot_button_register_cb(handle, BUTTON_PRESS_REPEAT_DONE, app_driver_button_multipress_complete, NULL);
iot_button_register_cb(handle, BUTTON_PRESS_DOWN, app_driver_button_initial_pressed, button);
iot_button_register_cb(handle, BUTTON_PRESS_UP, app_driver_button_release, button);
iot_button_register_cb(handle, BUTTON_LONG_PRESS_START, app_driver_button_long_pressed, button);
iot_button_register_cb(handle, BUTTON_PRESS_REPEAT, app_driver_button_multipress_ongoing, button);
iot_button_register_cb(handle, BUTTON_PRESS_REPEAT_DONE, app_driver_button_multipress_complete, button);
#endif
return (app_driver_handle_t)handle;
}
+70 -13
View File
@@ -18,7 +18,9 @@
#include <app_reset.h>
static const char *TAG = "app_main";
uint16_t switch_endpoint_id = 0;
static uint16_t configured_buttons = 0;
static button_endpoint button_list[CONFIG_MAX_CONFIGURABLE_BUTTONS];
using namespace esp_matter;
using namespace esp_matter::attribute;
@@ -82,30 +84,47 @@ static esp_err_t app_attribute_update_cb(attribute::callback_type_t type, uint16
return err;
}
extern "C" void app_main()
static esp_err_t create_button(struct gpio_button* button, node_t* node)
{
esp_err_t err = ESP_OK;
/* Initialize the ESP NVS layer */
nvs_flash_init();
/* Initialize driver */
app_driver_handle_t button_handle = app_driver_button_init();
/* Create a Matter node and add the mandatory Root Node device type on endpoint 0 */
node::config_t node_config;
node_t *node = node::create(&node_config, app_attribute_update_cb, app_identification_cb);
app_driver_handle_t button_handle = app_driver_button_init(button);
/* Create a new endpoint. */
generic_switch::config_t switch_config;
endpoint_t *endpoint = generic_switch::create(node, &switch_config, ENDPOINT_FLAG_NONE, button_handle);
/* These node and endpoint handles can be used to create/add other endpoints and clusters. */
if (!node || !endpoint) {
if (!node || !endpoint)
{
ESP_LOGE(TAG, "Matter node creation failed");
err = ESP_FAIL;
return err;
}
switch_endpoint_id = endpoint::get_id(endpoint);
ESP_LOGI(TAG, "Generic Switch created with endpoint_id %d", switch_endpoint_id);
for (int i = 0; i < configured_buttons; i++) {
if (button_list[i].button == button) {
break;
}
}
/* Check for maximum physical buttons that can be configured. */
if (configured_buttons <CONFIG_MAX_CONFIGURABLE_BUTTONS) {
button_list[configured_buttons].button = button;
button_list[configured_buttons].endpoint = endpoint::get_id(endpoint);
configured_buttons++;
}
else
{
ESP_LOGI(TAG, "Cannot configure more buttons");
err = ESP_FAIL;
return err;
}
static uint16_t generic_switch_endpoint_id = 0;
generic_switch_endpoint_id = endpoint::get_id(endpoint);
ESP_LOGI(TAG, "Generic Switch created with endpoint_id %d", generic_switch_endpoint_id);
cluster::fixed_label::config_t fl_config;
cluster_t *fl_cluster = cluster::fixed_label::create(endpoint, &fl_config, CLUSTER_FLAG_SERVER);
@@ -115,6 +134,7 @@ extern "C" void app_main()
/* Add additional features to the node */
cluster_t *cluster = cluster::get(endpoint, Switch::Id);
#if CONFIG_GENERIC_SWITCH_TYPE_LATCHING
cluster::switch_cluster::feature::latching_switch::add(cluster);
#endif
@@ -122,6 +142,42 @@ extern "C" void app_main()
#if CONFIG_GENERIC_SWITCH_TYPE_MOMENTARY
cluster::switch_cluster::feature::momentary_switch::add(cluster);
#endif
return err;
}
int get_endpoint(gpio_button* button) {
for (int i = 0; i < configured_buttons; i++) {
if (button_list[i].button == button) {
return button_list[i].endpoint;
}
}
return -1;
}
extern "C" void app_main()
{
esp_err_t err = ESP_OK;
/* Initialize the ESP NVS layer */
nvs_flash_init();
/* Create a Matter node and add the mandatory Root Node device type on endpoint 0 */
node::config_t node_config;
node_t *node = node::create(&node_config, app_attribute_update_cb, app_identification_cb);
/* Call for Boot button */
err = create_button(NULL, node);
/* Use the code snippet commented below to create more physical buttons. */
/* // Creating a gpio button. More buttons can be created in the same fashion specifying GPIO_PIN_VALUE.
* struct gpio_button button;
* button.GPIO_PIN_VALUE = GPIO_NUM_6;
* // Call to createButton function to configure your button.
* create_button(&button, node);
*/
/* Matter start */
err = esp_matter::start(app_event_cb);
if (err != ESP_OK) {
@@ -149,4 +205,5 @@ extern "C" void app_main()
esp_matter::console::wifi_register_commands();
esp_matter::console::init();
#endif
}
+17 -1
View File
@@ -10,6 +10,20 @@
#include <esp_err.h>
#include <esp_matter.h>
#include <hal/gpio_types.h>
struct gpio_button
{
gpio_num_t GPIO_PIN_VALUE;
};
struct button_endpoint
{
gpio_button* button;
uint16_t endpoint;
};
extern int get_endpoint(gpio_button* button);
typedef void *app_driver_handle_t;
@@ -17,10 +31,12 @@ typedef void *app_driver_handle_t;
*
* This initializes the button driver associated with the selected board.
*
* @param[in] button Pointer to `gpio_button`.For boot button value is NULL.
*
* @return Handle on success.
* @return NULL in case of failure.
*/
app_driver_handle_t app_driver_button_init();
app_driver_handle_t app_driver_button_init(gpio_button *button = NULL);
/** Driver Update
*
@@ -40,6 +40,9 @@ CONFIG_ESP_SECURE_CERT_DS_PERIPHERAL=n
# Enable for fixed-label
CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER=y
CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER=y
CONFIG_FACTORY_DEVICE_INFO_PROVIDER=y
CONFIG_FACTORY_COMMISSIONABLE_DATA_PROVIDER=y
# Use compact attribute storage mode
CONFIG_ESP_MATTER_NVS_USE_COMPACT_ATTR_STORAGE=y