Update Smoke CO Alarm Implementation (#27955)
* Add event field to Smoke CO Alarm implementation
* Fix INVALID_COMMAND
* Simplify the switch-case
---------
Co-authored-by: Hare <renilr0@outlook.com>
diff --git a/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp b/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp
index d6ee753..77919b8 100644
--- a/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp
+++ b/examples/smoke-co-alarm-app/silabs/src/SmokeCoAlarmManager.cpp
@@ -210,183 +210,132 @@
bool SmokeCoAlarmManager::OnEventTriggerHandle(uint64_t eventTrigger)
{
- bool success = false;
+ bool isValidCommand = true;
switch (eventTrigger)
{
case kTriggeredEvent_WarningSmokeAlarm:
- success = SmokeCoAlarmServer::Instance().SetSmokeState(1, AlarmStateEnum::kWarning);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kSmokeAlarm, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetSmokeState(1, AlarmStateEnum::kWarning), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kSmokeAlarm, true);
break;
case kTriggeredEvent_CriticalSmokeAlarm:
- success = SmokeCoAlarmServer::Instance().SetSmokeState(1, AlarmStateEnum::kCritical);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kSmokeAlarm, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetSmokeState(1, AlarmStateEnum::kCritical), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kSmokeAlarm, true);
break;
case kTriggeredEvent_SmokeAlarmClear:
- success = SmokeCoAlarmServer::Instance().SetSmokeState(1, AlarmStateEnum::kNormal);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kSmokeAlarm, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetSmokeState(1, AlarmStateEnum::kNormal), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kSmokeAlarm, false);
break;
case kTriggeredEvent_WarningCOAlarm:
- success = SmokeCoAlarmServer::Instance().SetCOState(1, AlarmStateEnum::kWarning);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kCOAlarm, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetCOState(1, AlarmStateEnum::kWarning), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kCOAlarm, true);
break;
case kTriggeredEvent_CriticalCOAlarm:
- success = SmokeCoAlarmServer::Instance().SetCOState(1, AlarmStateEnum::kCritical);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kCOAlarm, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetCOState(1, AlarmStateEnum::kCritical), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kCOAlarm, true);
break;
case kTriggeredEvent_COAlarmClear:
- success = SmokeCoAlarmServer::Instance().SetCOState(1, AlarmStateEnum::kNormal);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kCOAlarm, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetCOState(1, AlarmStateEnum::kNormal), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kCOAlarm, false);
break;
case kTriggeredEvent_WarningBatteryAlert:
- success = SmokeCoAlarmServer::Instance().SetBatteryAlert(1, AlarmStateEnum::kWarning);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kBatteryAlert, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetBatteryAlert(1, AlarmStateEnum::kWarning), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kBatteryAlert, true);
break;
case kTriggeredEvent_CriticalBatteryAlert:
- success = SmokeCoAlarmServer::Instance().SetBatteryAlert(1, AlarmStateEnum::kCritical);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kBatteryAlert, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetBatteryAlert(1, AlarmStateEnum::kCritical), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kBatteryAlert, true);
break;
case kTriggeredEvent_BatteryAlertClear:
- success = SmokeCoAlarmServer::Instance().SetBatteryAlert(1, AlarmStateEnum::kNormal);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kBatteryAlert, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetBatteryAlert(1, AlarmStateEnum::kNormal), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kBatteryAlert, false);
break;
case kTriggeredEvent_HardwareFaultAlert:
- success = SmokeCoAlarmServer::Instance().SetHardwareFaultAlert(1, true);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kHardwareFault, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetHardwareFaultAlert(1, true), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kHardwareFault, true);
break;
case kTriggeredEvent_HardwareFaultAlertClear:
- success = SmokeCoAlarmServer::Instance().SetHardwareFaultAlert(1, false);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kHardwareFault, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetHardwareFaultAlert(1, false), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kHardwareFault, false);
break;
case kTriggeredEvent_EndofServiceAlert:
- success = SmokeCoAlarmServer::Instance().SetEndOfServiceAlert(1, EndOfServiceEnum::kExpired);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kEndOfService, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetEndOfServiceAlert(1, EndOfServiceEnum::kExpired), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kEndOfService, true);
break;
case kTriggeredEvent_EndofServiceAlertClear:
- success = SmokeCoAlarmServer::Instance().SetEndOfServiceAlert(1, EndOfServiceEnum::kNormal);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kEndOfService, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetEndOfServiceAlert(1, EndOfServiceEnum::kNormal), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kEndOfService, false);
break;
case kTriggeredEvent_DeviceMute:
- success = SmokeCoAlarmServer::Instance().SetDeviceMuted(1, MuteStateEnum::kMuted);
+ SmokeCoAlarmServer::Instance().SetDeviceMuted(1, MuteStateEnum::kMuted);
break;
case kTriggeredEvent_DeviceMuteClear:
- success = SmokeCoAlarmServer::Instance().SetDeviceMuted(1, MuteStateEnum::kNotMuted);
+ SmokeCoAlarmServer::Instance().SetDeviceMuted(1, MuteStateEnum::kNotMuted);
break;
case kTriggeredEvent_InterconnectSmokeAlarm:
- success = SmokeCoAlarmServer::Instance().SetInterconnectSmokeAlarm(1, AlarmStateEnum::kWarning);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectSmoke, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetInterconnectSmokeAlarm(1, AlarmStateEnum::kWarning), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectSmoke, true);
break;
case kTriggeredEvent_InterconnectSmokeAlarmClear:
- success = SmokeCoAlarmServer::Instance().SetInterconnectSmokeAlarm(1, AlarmStateEnum::kNormal);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectSmoke, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetInterconnectSmokeAlarm(1, AlarmStateEnum::kNormal), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectSmoke, false);
break;
case kTriggeredEvent_InterconnectCOAlarm:
- success = SmokeCoAlarmServer::Instance().SetInterconnectCOAlarm(1, AlarmStateEnum::kWarning);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectCO, true);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetInterconnectCOAlarm(1, AlarmStateEnum::kWarning), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectCO, true);
break;
case kTriggeredEvent_InterconnectCOAlarmClear:
- success = SmokeCoAlarmServer::Instance().SetInterconnectCOAlarm(1, AlarmStateEnum::kNormal);
- if (success)
- {
- success = AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectCO, false);
- }
+ VerifyOrReturnValue(SmokeCoAlarmServer::Instance().SetInterconnectCOAlarm(1, AlarmStateEnum::kNormal), true);
+ AlarmMgr().SetExpressedState(1, ExpressedStateEnum::kInterconnectCO, false);
break;
case kTriggeredEvent_ContaminationStateHigh:
- success = SmokeCoAlarmServer::Instance().SetContaminationState(1, ContaminationStateEnum::kWarning);
+ SmokeCoAlarmServer::Instance().SetContaminationState(1, ContaminationStateEnum::kWarning);
break;
case kTriggeredEvent_ContaminationStateLow:
- success = SmokeCoAlarmServer::Instance().SetContaminationState(1, ContaminationStateEnum::kLow);
+ SmokeCoAlarmServer::Instance().SetContaminationState(1, ContaminationStateEnum::kLow);
break;
case kTriggeredEvent_ContaminationStateClear:
- success = SmokeCoAlarmServer::Instance().SetContaminationState(1, ContaminationStateEnum::kNormal);
+ SmokeCoAlarmServer::Instance().SetContaminationState(1, ContaminationStateEnum::kNormal);
break;
case kTriggeredEvent_SensitivityLevelHigh:
- success = SmokeCoAlarmServer::Instance().SetSensitivityLevel(1, SensitivityEnum::kHigh);
+ SmokeCoAlarmServer::Instance().SetSensitivityLevel(1, SensitivityEnum::kHigh);
break;
case kTriggeredEvent_SensitivityLevelLow:
- success = SmokeCoAlarmServer::Instance().SetSensitivityLevel(1, SensitivityEnum::kLow);
+ SmokeCoAlarmServer::Instance().SetSensitivityLevel(1, SensitivityEnum::kLow);
break;
case kTriggeredEvent_SensitivityLevelClear:
- success = SmokeCoAlarmServer::Instance().SetSensitivityLevel(1, SensitivityEnum::kStandard);
+ SmokeCoAlarmServer::Instance().SetSensitivityLevel(1, SensitivityEnum::kStandard);
break;
default:
- break;
+ isValidCommand = false;
}
- return success;
+ return isValidCommand;
}
bool SmokeCoAlarmManager::SetExpressedState(EndpointId endpointId, ExpressedStateEnum expressedState, bool isSet)
diff --git a/src/app/clusters/smoke-co-alarm-server/smoke-co-alarm-server.cpp b/src/app/clusters/smoke-co-alarm-server/smoke-co-alarm-server.cpp
index 403955d..aa1d6fe 100644
--- a/src/app/clusters/smoke-co-alarm-server/smoke-co-alarm-server.cpp
+++ b/src/app/clusters/smoke-co-alarm-server/smoke-co-alarm-server.cpp
@@ -83,7 +83,7 @@
if (success && (newSmokeState == AlarmStateEnum::kWarning || newSmokeState == AlarmStateEnum::kCritical))
{
- Events::SmokeAlarm::Type event{};
+ Events::SmokeAlarm::Type event{ newSmokeState };
SendEvent(endpointId, event);
}
@@ -107,7 +107,7 @@
if (success && (newCOState == AlarmStateEnum::kWarning || newCOState == AlarmStateEnum::kCritical))
{
- Events::COAlarm::Type event{};
+ Events::COAlarm::Type event{ newCOState };
SendEvent(endpointId, event);
}
@@ -131,7 +131,7 @@
if (success && (newBatteryAlert == AlarmStateEnum::kWarning || newBatteryAlert == AlarmStateEnum::kCritical))
{
- Events::LowBattery::Type event{};
+ Events::LowBattery::Type event{ newBatteryAlert };
SendEvent(endpointId, event);
}
@@ -297,7 +297,7 @@
if (success &&
(newInterconnectSmokeAlarm == AlarmStateEnum::kWarning || newInterconnectSmokeAlarm == AlarmStateEnum::kCritical))
{
- Events::InterconnectSmokeAlarm::Type event{};
+ Events::InterconnectSmokeAlarm::Type event{ newInterconnectSmokeAlarm };
SendEvent(endpointId, event);
}
@@ -323,7 +323,7 @@
if (success && (newInterconnectCOAlarm == AlarmStateEnum::kWarning || newInterconnectCOAlarm == AlarmStateEnum::kCritical))
{
- Events::InterconnectCOAlarm::Type event{};
+ Events::InterconnectCOAlarm::Type event{ newInterconnectCOAlarm };
SendEvent(endpointId, event);
}