From 42398c7741361a2c8265c7dc4be38482f41837dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Tue, 24 Jun 2025 22:48:58 +0200 Subject: [PATCH] feat(matter): NamespaceSwitches --- .../MatterEndpoints/MatterGenericSwitch.cpp | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libraries/Matter/src/MatterEndpoints/MatterGenericSwitch.cpp b/libraries/Matter/src/MatterEndpoints/MatterGenericSwitch.cpp index e20479af088..57c54811061 100644 --- a/libraries/Matter/src/MatterEndpoints/MatterGenericSwitch.cpp +++ b/libraries/Matter/src/MatterEndpoints/MatterGenericSwitch.cpp @@ -17,6 +17,7 @@ #include #include +#include #include using namespace esp_matter; @@ -24,6 +25,29 @@ using namespace esp_matter::endpoint; using namespace esp_matter::cluster; using namespace chip::app::Clusters; +namespace { +// Please refer to https://github.com/CHIP-Specifications/connectedhomeip-spec/blob/master/src/namespaces +constexpr const uint8_t kNamespaceSwitches = 0x43; +// Switches Namespace: 67, tag 0 (SwitchOn) +constexpr const uint8_t kTagSwitchOn = 0; +// Switches Namespace: 67, tag 1 (SwitchOff) +constexpr const uint8_t kTagSwitchOff = 1; + +constexpr const uint8_t kNamespacePosition = 8; +// Common Position Namespace: 8, tag: 0 (Left) +constexpr const uint8_t kTagPositionLeft = 0; +// Common Position Namespace: 8, tag: 1 (Right) +constexpr const uint8_t kTagPositionRight = 1; + +const Descriptor::Structs::SemanticTagStruct::Type gEp1TagList[] = { + {.namespaceID = kNamespaceSwitches, .tag = kTagSwitchOn}, + {.namespaceID = kNamespacePosition, .tag = kTagPositionRight}}; +const Descriptor::Structs::SemanticTagStruct::Type gEp2TagList[] = { + {.namespaceID = kNamespaceSwitches, .tag = kTagSwitchOff}, + {.namespaceID = kNamespacePosition, .tag = kTagPositionLeft}}; + +} + MatterGenericSwitch::MatterGenericSwitch() {} MatterGenericSwitch::~MatterGenericSwitch() { @@ -76,10 +100,15 @@ bool MatterGenericSwitch::begin() { switch_cluster::attribute::create_current_position(aCluster, 0); switch_cluster::attribute::create_number_of_positions(aCluster, 2); + + descriptor::attribute::create_tag_list(aCluster, NULL, 0, 0); setEndPointId(endpoint::get_id(endpoint)); log_i("Generic Switch created with endpoint_id %d", getEndPointId()); started = true; + + // TODO: Make it dynamic + SetTagList(getEndPointId(), chip::Span(gEp1TagList)); return true; }