Skip to content

Commit 3a75821

Browse files
Refactor AttributeValue to the appropriate Value* in AttributeValueList
1 parent 335ae19 commit 3a75821

File tree

31 files changed

+911
-112
lines changed

31 files changed

+911
-112
lines changed

examples/all-clusters-app/all-clusters-common/all-clusters-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -3514,7 +3514,14 @@ provisional cluster ScenesManagement = 98 {
35143514

35153515
struct AttributeValuePair {
35163516
attrib_id attributeID = 0;
3517-
int32u attributeValue = 1;
3517+
optional int8u valueUnsigned8 = 1;
3518+
optional int8s valueSigned8 = 2;
3519+
optional int16u valueUnsigned16 = 3;
3520+
optional int16s valueSigned16 = 4;
3521+
optional int32u valueUnsigned32 = 5;
3522+
optional int32s valueSigned32 = 6;
3523+
optional int64u valueUnsigned64 = 7;
3524+
optional int64s valueSigned64 = 8;
35183525
}
35193526

35203527
struct ExtensionFieldSet {

examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -2426,7 +2426,14 @@ provisional cluster ScenesManagement = 98 {
24262426

24272427
struct AttributeValuePair {
24282428
attrib_id attributeID = 0;
2429-
int32u attributeValue = 1;
2429+
optional int8u valueUnsigned8 = 1;
2430+
optional int8s valueSigned8 = 2;
2431+
optional int16u valueUnsigned16 = 3;
2432+
optional int16s valueSigned16 = 4;
2433+
optional int32u valueUnsigned32 = 5;
2434+
optional int32s valueSigned32 = 6;
2435+
optional int64u valueUnsigned64 = 7;
2436+
optional int64s valueSigned64 = 8;
24302437
}
24312438

24322439
struct ExtensionFieldSet {

examples/light-switch-app/light-switch-common/light-switch-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -2037,7 +2037,14 @@ provisional cluster ScenesManagement = 98 {
20372037

20382038
struct AttributeValuePair {
20392039
attrib_id attributeID = 0;
2040-
int32u attributeValue = 1;
2040+
optional int8u valueUnsigned8 = 1;
2041+
optional int8s valueSigned8 = 2;
2042+
optional int16u valueUnsigned16 = 3;
2043+
optional int16s valueSigned16 = 4;
2044+
optional int32u valueUnsigned32 = 5;
2045+
optional int32s valueSigned32 = 6;
2046+
optional int64u valueUnsigned64 = 7;
2047+
optional int64s valueSigned64 = 8;
20412048
}
20422049

20432050
struct ExtensionFieldSet {

examples/light-switch-app/qpg/zap/switch.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1834,7 +1834,14 @@ provisional cluster ScenesManagement = 98 {
18341834

18351835
struct AttributeValuePair {
18361836
attrib_id attributeID = 0;
1837-
int32u attributeValue = 1;
1837+
optional int8u valueUnsigned8 = 1;
1838+
optional int8s valueSigned8 = 2;
1839+
optional int16u valueUnsigned16 = 3;
1840+
optional int16s valueSigned16 = 4;
1841+
optional int32u valueUnsigned32 = 5;
1842+
optional int32s valueSigned32 = 6;
1843+
optional int64u valueUnsigned64 = 7;
1844+
optional int64s valueSigned64 = 8;
18381845
}
18391846

18401847
struct ExtensionFieldSet {

examples/lighting-app/lighting-common/lighting-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1854,7 +1854,14 @@ provisional cluster ScenesManagement = 98 {
18541854

18551855
struct AttributeValuePair {
18561856
attrib_id attributeID = 0;
1857-
int32u attributeValue = 1;
1857+
optional int8u valueUnsigned8 = 1;
1858+
optional int8s valueSigned8 = 2;
1859+
optional int16u valueUnsigned16 = 3;
1860+
optional int16s valueSigned16 = 4;
1861+
optional int32u valueUnsigned32 = 5;
1862+
optional int32s valueSigned32 = 6;
1863+
optional int64u valueUnsigned64 = 7;
1864+
optional int64s valueSigned64 = 8;
18581865
}
18591866

18601867
struct ExtensionFieldSet {

examples/lighting-app/silabs/data_model/lighting-thread-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1559,7 +1559,14 @@ provisional cluster ScenesManagement = 98 {
15591559

15601560
struct AttributeValuePair {
15611561
attrib_id attributeID = 0;
1562-
int32u attributeValue = 1;
1562+
optional int8u valueUnsigned8 = 1;
1563+
optional int8s valueSigned8 = 2;
1564+
optional int16u valueUnsigned16 = 3;
1565+
optional int16s valueSigned16 = 4;
1566+
optional int32u valueUnsigned32 = 5;
1567+
optional int32s valueSigned32 = 6;
1568+
optional int64u valueUnsigned64 = 7;
1569+
optional int64s valueSigned64 = 8;
15631570
}
15641571

15651572
struct ExtensionFieldSet {

examples/lighting-app/silabs/data_model/lighting-wifi-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1850,7 +1850,14 @@ provisional cluster ScenesManagement = 98 {
18501850

18511851
struct AttributeValuePair {
18521852
attrib_id attributeID = 0;
1853-
int32u attributeValue = 1;
1853+
optional int8u valueUnsigned8 = 1;
1854+
optional int8s valueSigned8 = 2;
1855+
optional int16u valueUnsigned16 = 3;
1856+
optional int16s valueSigned16 = 4;
1857+
optional int32u valueUnsigned32 = 5;
1858+
optional int32s valueSigned32 = 6;
1859+
optional int64u valueUnsigned64 = 7;
1860+
optional int64s valueSigned64 = 8;
18541861
}
18551862

18561863
struct ExtensionFieldSet {

examples/placeholder/linux/apps/app1/config.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -3020,7 +3020,14 @@ provisional cluster ScenesManagement = 98 {
30203020

30213021
struct AttributeValuePair {
30223022
attrib_id attributeID = 0;
3023-
int32u attributeValue = 1;
3023+
optional int8u valueUnsigned8 = 1;
3024+
optional int8s valueSigned8 = 2;
3025+
optional int16u valueUnsigned16 = 3;
3026+
optional int16s valueSigned16 = 4;
3027+
optional int32u valueUnsigned32 = 5;
3028+
optional int32s valueSigned32 = 6;
3029+
optional int64u valueUnsigned64 = 7;
3030+
optional int64s valueSigned64 = 8;
30243031
}
30253032

30263033
struct ExtensionFieldSet {

examples/placeholder/linux/apps/app2/config.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -2977,7 +2977,14 @@ provisional cluster ScenesManagement = 98 {
29772977

29782978
struct AttributeValuePair {
29792979
attrib_id attributeID = 0;
2980-
int32u attributeValue = 1;
2980+
optional int8u valueUnsigned8 = 1;
2981+
optional int8s valueSigned8 = 2;
2982+
optional int16u valueUnsigned16 = 3;
2983+
optional int16s valueSigned16 = 4;
2984+
optional int32u valueUnsigned32 = 5;
2985+
optional int32s valueSigned32 = 6;
2986+
optional int64u valueUnsigned64 = 7;
2987+
optional int64s valueSigned64 = 8;
29812988
}
29822989

29832990
struct ExtensionFieldSet {

examples/thermostat/nxp/zap/thermostat_matter_thread.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1755,7 +1755,14 @@ provisional cluster ScenesManagement = 98 {
17551755

17561756
struct AttributeValuePair {
17571757
attrib_id attributeID = 0;
1758-
int32u attributeValue = 1;
1758+
optional int8u valueUnsigned8 = 1;
1759+
optional int8s valueSigned8 = 2;
1760+
optional int16u valueUnsigned16 = 3;
1761+
optional int16s valueSigned16 = 4;
1762+
optional int32u valueUnsigned32 = 5;
1763+
optional int32s valueSigned32 = 6;
1764+
optional int64u valueUnsigned64 = 7;
1765+
optional int64s valueSigned64 = 8;
17591766
}
17601767

17611768
struct ExtensionFieldSet {

examples/thermostat/nxp/zap/thermostat_matter_wifi.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,14 @@ provisional cluster ScenesManagement = 98 {
16661666

16671667
struct AttributeValuePair {
16681668
attrib_id attributeID = 0;
1669-
int32u attributeValue = 1;
1669+
optional int8u valueUnsigned8 = 1;
1670+
optional int8s valueSigned8 = 2;
1671+
optional int16u valueUnsigned16 = 3;
1672+
optional int16s valueSigned16 = 4;
1673+
optional int32u valueUnsigned32 = 5;
1674+
optional int32s valueSigned32 = 6;
1675+
optional int64u valueUnsigned64 = 7;
1676+
optional int64s valueSigned64 = 8;
16701677
}
16711678

16721679
struct ExtensionFieldSet {

examples/virtual-device-app/virtual-device-common/virtual-device-app.matter

+8-1
Original file line numberDiff line numberDiff line change
@@ -1902,7 +1902,14 @@ provisional cluster ScenesManagement = 98 {
19021902

19031903
struct AttributeValuePair {
19041904
attrib_id attributeID = 0;
1905-
int32u attributeValue = 1;
1905+
optional int8u valueUnsigned8 = 1;
1906+
optional int8s valueSigned8 = 2;
1907+
optional int16u valueUnsigned16 = 3;
1908+
optional int16s valueSigned16 = 4;
1909+
optional int32u valueUnsigned32 = 5;
1910+
optional int32s valueSigned32 = 6;
1911+
optional int64u valueUnsigned64 = 7;
1912+
optional int64s valueSigned64 = 8;
19061913
}
19071914

19081915
struct ExtensionFieldSet {

src/app/clusters/color-control-server/color-control-server.cpp

+66-27
Original file line numberDiff line numberDiff line change
@@ -112,21 +112,21 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
112112
{
113113
xValue = 0x616B; // Default X value according to spec
114114
}
115-
AddAttributeValuePair(pairs, Attributes::CurrentX::Id, xValue, attributeCount);
115+
AddAttributeValuePair<uint16_t>(pairs, Attributes::CurrentX::Id, xValue, attributeCount);
116116

117117
uint16_t yValue;
118118
if (Status::Success != Attributes::CurrentY::Get(endpoint, &yValue))
119119
{
120120
yValue = 0x607D; // Default Y value according to spec
121121
}
122-
AddAttributeValuePair(pairs, Attributes::CurrentY::Id, yValue, attributeCount);
122+
AddAttributeValuePair<uint16_t>(pairs, Attributes::CurrentY::Id, yValue, attributeCount);
123123
}
124124

125125
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kEnhancedHue))
126126
{
127127
uint16_t hueValue = 0x0000;
128128
Attributes::EnhancedCurrentHue::Get(endpoint, &hueValue);
129-
AddAttributeValuePair(pairs, Attributes::EnhancedCurrentHue::Id, hueValue, attributeCount);
129+
AddAttributeValuePair<uint16_t>(pairs, Attributes::EnhancedCurrentHue::Id, hueValue, attributeCount);
130130
}
131131

132132
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kHueAndSaturation))
@@ -136,7 +136,7 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
136136
{
137137
saturationValue = 0x00;
138138
}
139-
AddAttributeValuePair(pairs, Attributes::CurrentSaturation::Id, saturationValue, attributeCount);
139+
AddAttributeValuePair<uint8_t>(pairs, Attributes::CurrentSaturation::Id, saturationValue, attributeCount);
140140
}
141141

142142
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kColorLoop))
@@ -146,21 +146,21 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
146146
{
147147
loopActiveValue = 0x00;
148148
}
149-
AddAttributeValuePair(pairs, Attributes::ColorLoopActive::Id, loopActiveValue, attributeCount);
149+
AddAttributeValuePair<uint8_t>(pairs, Attributes::ColorLoopActive::Id, loopActiveValue, attributeCount);
150150

151151
uint8_t loopDirectionValue;
152152
if (Status::Success != Attributes::ColorLoopDirection::Get(endpoint, &loopDirectionValue))
153153
{
154154
loopDirectionValue = 0x00;
155155
}
156-
AddAttributeValuePair(pairs, Attributes::ColorLoopDirection::Id, loopDirectionValue, attributeCount);
156+
AddAttributeValuePair<uint8_t>(pairs, Attributes::ColorLoopDirection::Id, loopDirectionValue, attributeCount);
157157

158158
uint16_t loopTimeValue;
159159
if (Status::Success != Attributes::ColorLoopTime::Get(endpoint, &loopTimeValue))
160160
{
161161
loopTimeValue = 0x0019; // Default loop time value according to spec
162162
}
163-
AddAttributeValuePair(pairs, Attributes::ColorLoopTime::Id, loopTimeValue, attributeCount);
163+
AddAttributeValuePair<uint16_t>(pairs, Attributes::ColorLoopTime::Id, loopTimeValue, attributeCount);
164164
}
165165

166166
if (ColorControlServer::Instance().HasFeature(endpoint, ColorControlServer::Feature::kColorTemperature))
@@ -170,15 +170,15 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
170170
{
171171
temperatureValue = 0x00FA; // Default temperature value according to spec
172172
}
173-
AddAttributeValuePair(pairs, Attributes::ColorTemperatureMireds::Id, temperatureValue, attributeCount);
173+
AddAttributeValuePair<uint16_t>(pairs, Attributes::ColorTemperatureMireds::Id, temperatureValue, attributeCount);
174174
}
175175

176176
uint8_t modeValue;
177177
if (Status::Success != Attributes::EnhancedColorMode::Get(endpoint, &modeValue))
178178
{
179179
modeValue = ColorControl::EnhancedColorMode::kCurrentXAndCurrentY; // Default mode value according to spec
180180
}
181-
AddAttributeValuePair(pairs, Attributes::EnhancedColorMode::Id, modeValue, attributeCount);
181+
AddAttributeValuePair<uint8_t>(pairs, Attributes::EnhancedColorMode::Id, modeValue, attributeCount);
182182

183183
app::DataModel::List<AttributeValuePair> attributeValueList(pairs, attributeCount);
184184

@@ -237,52 +237,76 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
237237
case Attributes::CurrentX::Id:
238238
if (SupportsColorMode(endpoint, ColorControl::EnhancedColorMode::kCurrentXAndCurrentY))
239239
{
240-
if (decodePair.attributeValue)
240+
if (decodePair.valueUnsigned16.HasValue())
241241
colorXTransitionState->finalValue =
242-
std::min(static_cast<uint16_t>(decodePair.attributeValue), colorXTransitionState->highLimit);
242+
std::min(decodePair.valueUnsigned16.Value(), colorXTransitionState->highLimit);
243243
}
244244
break;
245245
case Attributes::CurrentY::Id:
246246
if (SupportsColorMode(endpoint, ColorControl::EnhancedColorMode::kCurrentXAndCurrentY))
247247
{
248-
colorYTransitionState->finalValue =
249-
std::min(static_cast<uint16_t>(decodePair.attributeValue), colorYTransitionState->highLimit);
248+
if (decodePair.valueUnsigned16.HasValue())
249+
{
250+
colorYTransitionState->finalValue =
251+
std::min(decodePair.valueUnsigned16.Value(), colorYTransitionState->highLimit);
252+
}
250253
}
251254
break;
252255
case Attributes::EnhancedCurrentHue::Id:
253256
if (SupportsColorMode(endpoint, ColorControl::EnhancedColorMode::kEnhancedCurrentHueAndCurrentSaturation))
254257
{
255-
colorHueTransitionState->finalEnhancedHue = static_cast<uint16_t>(decodePair.attributeValue);
258+
if (decodePair.valueUnsigned16.HasValue())
259+
{
260+
colorHueTransitionState->finalEnhancedHue = decodePair.valueUnsigned16.Value();
261+
}
256262
}
257263
break;
258264
case Attributes::CurrentSaturation::Id:
259265
if (SupportsColorMode(endpoint, ColorControl::EnhancedColorMode::kCurrentHueAndCurrentSaturation))
260266
{
261-
colorSaturationTransitionState->finalValue =
262-
std::min(static_cast<uint16_t>(decodePair.attributeValue), colorSaturationTransitionState->highLimit);
267+
if (decodePair.valueUnsigned16.HasValue())
268+
{
269+
colorSaturationTransitionState->finalValue =
270+
std::min(decodePair.valueUnsigned16.Value(), colorSaturationTransitionState->highLimit);
271+
}
263272
}
264273
break;
265274
case Attributes::ColorLoopActive::Id:
266-
loopActiveValue = static_cast<uint8_t>(decodePair.attributeValue);
275+
if (decodePair.valueUnsigned8.HasValue())
276+
{
277+
loopActiveValue = decodePair.valueUnsigned8.Value();
278+
}
267279
break;
268280
case Attributes::ColorLoopDirection::Id:
269-
loopDirectionValue = static_cast<uint8_t>(decodePair.attributeValue);
281+
if (decodePair.valueUnsigned8.HasValue())
282+
{
283+
loopDirectionValue = decodePair.valueUnsigned8.Value();
284+
}
270285
break;
271286
case Attributes::ColorLoopTime::Id:
272-
loopTimeValue = static_cast<uint16_t>(decodePair.attributeValue);
287+
if (decodePair.valueUnsigned16.HasValue())
288+
{
289+
loopTimeValue = decodePair.valueUnsigned16.Value();
290+
}
273291
break;
274292
case Attributes::ColorTemperatureMireds::Id:
275293
if (SupportsColorMode(endpoint, ColorControl::EnhancedColorMode::kColorTemperature))
276294
{
277-
colorTempTransitionState->finalValue =
278-
std::min(static_cast<uint16_t>(decodePair.attributeValue), colorTempTransitionState->highLimit);
295+
if (decodePair.valueUnsigned16.HasValue())
296+
{
297+
colorTempTransitionState->finalValue =
298+
std::min(decodePair.valueUnsigned16.Value(), colorTempTransitionState->highLimit);
299+
}
279300
}
280301
break;
281302
case Attributes::EnhancedColorMode::Id:
282-
if (decodePair.attributeValue <=
283-
static_cast<uint8_t>(ColorControl::EnhancedColorMode::kEnhancedCurrentHueAndCurrentSaturation))
303+
if (decodePair.valueUnsigned8.HasValue())
284304
{
285-
targetColorMode = static_cast<uint8_t>(decodePair.attributeValue);
305+
if (decodePair.valueUnsigned8.Value() <=
306+
static_cast<uint8_t>(ColorControl::EnhancedColorMode::kEnhancedCurrentHueAndCurrentSaturation))
307+
{
308+
targetColorMode = decodePair.valueUnsigned8.Value();
309+
}
286310
}
287311
break;
288312
default:
@@ -371,11 +395,26 @@ class DefaultColorControlSceneHandler : public scenes::DefaultSceneHandlerImpl
371395
}
372396
}
373397

374-
void AddAttributeValuePair(ScenesManagement::Structs::AttributeValuePair::Type * pairs, AttributeId id, uint32_t value,
398+
/// AddAttributeValuePair
399+
/// @brief Helper function to add an attribute value pair to the attribute value pair array in the color control SceneHandler
400+
/// @param pairs list of attribute value pairs
401+
/// @param id attribute id
402+
/// @param value attribute value
403+
/// @param attributeCount number of attributes in the list, incremented by this function, used to keep track of how many
404+
/// attributes from the array are being used for the list to encode
405+
template <typename Type>
406+
void AddAttributeValuePair(ScenesManagement::Structs::AttributeValuePair::Type * pairs, AttributeId id, Type value,
375407
size_t & attributeCount)
376408
{
377-
pairs[attributeCount].attributeID = id;
378-
pairs[attributeCount].attributeValue = value;
409+
pairs[attributeCount].attributeID = id;
410+
if constexpr (sizeof(Type) == sizeof(uint8_t))
411+
{
412+
pairs[attributeCount].valueUnsigned8.SetValue(value);
413+
}
414+
else if constexpr (sizeof(Type) == sizeof(uint16_t))
415+
{
416+
pairs[attributeCount].valueUnsigned16.SetValue(value);
417+
}
379418
attributeCount++;
380419
}
381420
};

0 commit comments

Comments
 (0)