@@ -42,6 +42,7 @@ using namespace chip::app::Clusters::Thermostat::Structs;
42
42
using namespace chip ::app::Clusters::Thermostat::Attributes;
43
43
using namespace chip ::app::Clusters::TemperatureMeasurement;
44
44
using namespace chip ::app::Clusters::TemperatureMeasurement::Attributes;
45
+ using namespace Protocols ::InteractionModel;
45
46
46
47
using namespace chip ::DeviceLayer;
47
48
@@ -60,6 +61,12 @@ ThermostatManager ThermostatManager::sThermostatMgr;
60
61
61
62
namespace {
62
63
64
+ CHIP_ERROR ChipErrorFromStatusCode (Status status)
65
+ {
66
+ StatusIB statusIB (status);
67
+ return statusIB.ToChipError ();
68
+ }
69
+
63
70
template <typename DecodableAttributeType>
64
71
static void OnAttributeChangeReported (const ConcreteDataAttributePath & path, const DecodableAttributeType & value);
65
72
@@ -70,30 +77,30 @@ void OnAttributeChangeReported<MeasuredValue::TypeInfo::DecodableType>(const Con
70
77
ClusterId clusterId = path.mClusterId ;
71
78
if (clusterId != TemperatureMeasurement::Id)
72
79
{
73
- ChipLogError (AppServer, " Attribute change reported for TemperatureMeasurement cluster on incorrect cluster id %u " ,
74
- clusterId);
80
+ ChipLogError (AppServer, " Attribute change reported for TemperatureMeasurement cluster on incorrect cluster id " ChipLogFormatMEI ,
81
+ ChipLogValueMEI ( clusterId) );
75
82
return ;
76
83
}
77
84
78
85
AttributeId attributeId = path.mAttributeId ;
79
86
if (attributeId != MeasuredValue::Id)
80
87
{
81
- ChipLogError (AppServer, " Attribute change reported for TemperatureMeasurement cluster for incorrect attribute %u " ,
82
- attributeId);
88
+ ChipLogError (AppServer, " Attribute change reported for TemperatureMeasurement cluster for incorrect attribute" ChipLogFormatMEI ,
89
+ ChipLogValueMEI ( attributeId) );
83
90
return ;
84
91
}
85
92
86
93
if (!value.IsNull ())
87
94
{
88
95
ChipLogDetail (AppServer, " Attribute change reported for TemperatureMeasurement cluster - MeasuredValue is %d" ,
89
- static_cast < short >( value.Value () ));
96
+ value.Value ());
90
97
}
91
98
}
92
99
93
100
static void OnError (const ConcreteDataAttributePath * path, ChipError err)
94
101
{
95
- ChipLogError (AppServer, " Subscribing to cluster Id %u and attribute Id %u failed with error %" CHIP_ERROR_FORMAT,
96
- path->mClusterId , path->mAttributeId , err.Format ());
102
+ ChipLogError (AppServer, " Subscribing to cluster Id " ChipLogFormatMEI " and attribute Id " ChipLogFormatMEI " failed with error %" CHIP_ERROR_FORMAT,
103
+ ChipLogValueMEI ( path->mClusterId ), ChipLogValueMEI ( path->mAttributeId ) , err.Format ());
97
104
}
98
105
99
106
static void OnSubscriptionEstablished (const ReadClient & client, unsigned int value)
@@ -111,7 +118,7 @@ void SubscribeToAttribute(ClusterId clusterId, AttributeId attributeId, const Em
111
118
SubscribeAttribute<DecodableAttributeType>(
112
119
peer_device->GetExchangeManager (), peer_device->GetSecureSession ().Value (), binding.remote , clusterId, attributeId,
113
120
&OnAttributeChangeReported<DecodableAttributeType>, &OnError, 0 , kMaxIntervalCeilingSeconds , &OnSubscriptionEstablished,
114
- nullptr , true /* fabricFiltered */ , true /* keepExistingSubscription */ );
121
+ nullptr , true /* fabricFiltered */ , false /* keepExistingSubscription */ );
115
122
}
116
123
117
124
static void ThermostatBoundDeviceChangedHandler (const EmberBindingTableEntry & binding, OperationalDeviceProxy * peer_device,
@@ -183,7 +190,7 @@ CHIP_ERROR ThermostatManager::Init()
183
190
" mSystemMode: %u (%s) \n mRunningMode: %u (%s) \n mLocalTemperature: %d \n mOccupiedHeatingSetpoint: %d \n "
184
191
" mOccupiedCoolingSetpoint: %d"
185
192
" NumberOfPresets: %d" ,
186
- static_cast < uint8_t > (mSystemMode ), SystemModeString (mSystemMode ), static_cast < uint8_t > (mRunningMode ),
193
+ to_underlying (mSystemMode ), SystemModeString (mSystemMode ), to_underlying (mRunningMode ),
187
194
RunningModeString (mRunningMode ), mLocalTemperature , mOccupiedHeatingSetpoint , mOccupiedCoolingSetpoint ,
188
195
GetNumberOfPresets ());
189
196
@@ -229,21 +236,21 @@ void ThermostatManager::ThermostatClusterAttributeChangeHandler(AttributeId attr
229
236
switch (attributeId)
230
237
{
231
238
case LocalTemperature::Id: {
232
- mLocalTemperature = static_cast < int16_t >( Encoding::LittleEndian::Get16 ( value) );
239
+ memcpy (& mLocalTemperature , value, size );
233
240
ChipLogError (AppServer, " Local temperature changed to %d" , mLocalTemperature );
234
241
EvalThermostatState ();
235
242
}
236
243
break ;
237
244
238
245
case OccupiedCoolingSetpoint::Id: {
239
- mOccupiedCoolingSetpoint = static_cast < int16_t >( Encoding::LittleEndian::Get16 ( value) );
246
+ memcpy (& mOccupiedCoolingSetpoint , value, size );
240
247
ChipLogError (AppServer, " Cooling temperature changed to %d" , mOccupiedCoolingSetpoint );
241
248
EvalThermostatState ();
242
249
}
243
250
break ;
244
251
245
252
case OccupiedHeatingSetpoint::Id: {
246
- mOccupiedHeatingSetpoint = static_cast < int16_t >( Encoding::LittleEndian::Get16 ( value) );
253
+ memcpy (& mOccupiedHeatingSetpoint , value, size );
247
254
ChipLogError (AppServer, " Heating temperature changed to %d" , mOccupiedHeatingSetpoint );
248
255
EvalThermostatState ();
249
256
}
@@ -313,52 +320,43 @@ uint8_t ThermostatManager::GetNumberOfPresets()
313
320
314
321
CHIP_ERROR ThermostatManager::SetSystemMode (SystemModeEnum systemMode)
315
322
{
316
- uint8_t systemModeValue = static_cast < uint8_t > (systemMode);
323
+ uint8_t systemModeValue = to_underlying (systemMode);
317
324
if (mSystemMode == systemMode)
318
325
{
319
326
ChipLogDetail (AppServer, " Already in system mode: %u (%s)" , systemModeValue, SystemModeString (systemMode));
320
327
return CHIP_NO_ERROR;
321
328
}
322
329
323
330
ChipLogError (AppServer, " Setting system mode: %u (%s)" , systemModeValue, SystemModeString (systemMode));
324
- Protocols::InteractionModel::Status status = SystemMode::Set (kThermostatEndpoint , systemMode);
325
-
326
- // TODO: CHIP_ERROR_WRITE_FAILED might not be the best error code to send
327
- return (status == Protocols::InteractionModel::Status::Success) ? CHIP_NO_ERROR : CHIP_ERROR_WRITE_FAILED;
331
+ return ChipErrorFromStatusCode (SystemMode::Set (kThermostatEndpoint , systemMode));
328
332
}
329
333
330
334
CHIP_ERROR ThermostatManager::SetRunningMode (ThermostatRunningModeEnum runningMode)
331
335
{
332
- uint8_t runningModeValue = static_cast < uint8_t > (runningMode);
336
+ uint8_t runningModeValue = to_underlying (runningMode);
333
337
if (mRunningMode == runningMode)
334
338
{
335
339
ChipLogDetail (AppServer, " Already in running mode: %u (%s)" , runningModeValue, RunningModeString (runningMode));
336
340
return CHIP_NO_ERROR;
337
341
}
338
342
339
343
ChipLogError (AppServer, " Setting running mode: %u (%s)" , runningModeValue, RunningModeString (runningMode));
340
- Protocols::InteractionModel::Status status = ThermostatRunningMode::Set (kThermostatEndpoint , runningMode);
341
-
342
- // TODO: CHIP_ERROR_WRITE_FAILED might not be the best error code to send
343
- return (status == Protocols::InteractionModel::Status::Success) ? CHIP_NO_ERROR : CHIP_ERROR_WRITE_FAILED;
344
+ return ChipErrorFromStatusCode (ThermostatRunningMode::Set (kThermostatEndpoint , runningMode));
344
345
}
345
346
346
347
CHIP_ERROR ThermostatManager::SetCurrentTemperature (int16_t temperature)
347
348
{
348
- Protocols::InteractionModel::Status status = LocalTemperature::Set (kThermostatEndpoint , temperature);
349
- return (status == Protocols::InteractionModel::Status::Success) ? CHIP_NO_ERROR : CHIP_ERROR_WRITE_FAILED;
349
+ return ChipErrorFromStatusCode (LocalTemperature::Set (kThermostatEndpoint , temperature));
350
350
}
351
351
352
352
CHIP_ERROR ThermostatManager::SetCurrentHeatingSetPoint (int16_t heatingSetpoint)
353
353
{
354
- Protocols::InteractionModel::Status status = OccupiedHeatingSetpoint::Set (kThermostatEndpoint , heatingSetpoint);
355
- return (status == Protocols::InteractionModel::Status::Success) ? CHIP_NO_ERROR : CHIP_ERROR_WRITE_FAILED;
354
+ return ChipErrorFromStatusCode (OccupiedHeatingSetpoint::Set (kThermostatEndpoint , heatingSetpoint));
356
355
}
357
356
358
357
CHIP_ERROR ThermostatManager::SetCurrentCoolingSetPoint (int16_t coolingSetpoint)
359
358
{
360
- Protocols::InteractionModel::Status status = OccupiedCoolingSetpoint::Set (kThermostatEndpoint , coolingSetpoint);
361
- return (status == Protocols::InteractionModel::Status::Success) ? CHIP_NO_ERROR : CHIP_ERROR_WRITE_FAILED;
359
+ return ChipErrorFromStatusCode (OccupiedCoolingSetpoint::Set (kThermostatEndpoint , coolingSetpoint));
362
360
}
363
361
364
362
void ThermostatManager::EvalThermostatState ()
@@ -367,7 +365,7 @@ void ThermostatManager::EvalThermostatState()
367
365
" Eval Thermostat Running Mode \n "
368
366
" mSystemMode: %u (%s) \n mRunningMode: %u (%s) \n mLocalTemperature: %d \n mOccupiedHeatingSetpoint: %d \n "
369
367
" mOccupiedCoolingSetpoint: %d" ,
370
- static_cast < uint8_t > (mSystemMode ), SystemModeString (mSystemMode ), static_cast < uint8_t > (mRunningMode ),
368
+ to_underlying (mSystemMode ), SystemModeString (mSystemMode ), to_underlying (mRunningMode ),
371
369
RunningModeString (mRunningMode ), mLocalTemperature , mOccupiedHeatingSetpoint , mOccupiedCoolingSetpoint );
372
370
373
371
switch (mSystemMode )
@@ -495,8 +493,8 @@ void MatterPostAttributeChangeCallback(const ConcreteAttributePath & attributePa
495
493
ChipLogProgress (AppServer, " Cluster callback: " ChipLogFormatMEI, ChipLogValueMEI (clusterId));
496
494
497
495
ChipLogProgress (AppServer,
498
- " Attribute ID changed: " ChipLogFormatMEI " Endpoint: %d ClusterId: %d Type: %u Value: %u, length %u" ,
499
- ChipLogValueMEI (attributeId), attributePath.mEndpointId , clusterId, type, *value, size);
496
+ " Attribute ID changed: " ChipLogFormatMEI " Endpoint: %d ClusterId: " ChipLogFormatMEI " Type: %u Value: %u, length %u" ,
497
+ ChipLogValueMEI (attributeId), attributePath.mEndpointId , ChipLogValueMEI ( clusterId) , type, *value, size);
500
498
501
499
ThermostatMgr ().AttributeChangeHandler (attributePath.mEndpointId , clusterId, attributeId, value, size);
502
500
}
0 commit comments