|
28 | 28 | #include <app-common/zap-generated/attributes/Accessors.h>
|
29 | 29 | #include <app/clusters/general-diagnostics-server/GenericFaultTestEventTriggerDelegate.h>
|
30 | 30 | #include <app/clusters/general-diagnostics-server/general-diagnostics-server.h>
|
| 31 | +#include <app/clusters/identify-server/identify-server.h> |
31 | 32 | #include <app/server/Dnssd.h>
|
32 | 33 | #include <app/server/Server.h>
|
33 | 34 | #include <app/util/attribute-storage.h>
|
@@ -87,6 +88,65 @@ namespace {
|
87 | 88 | constexpr int extDiscTimeoutSecs = 20;
|
88 | 89 | }
|
89 | 90 |
|
| 91 | +EmberAfIdentifyEffectIdentifier sIdentifyEffect = EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT; |
| 92 | + |
| 93 | +/********************************************************** |
| 94 | + * Identify Callbacks |
| 95 | + *********************************************************/ |
| 96 | + |
| 97 | +namespace { |
| 98 | +void OnTriggerIdentifyEffectCompleted(chip::System::Layer * systemLayer, void * appState) |
| 99 | +{ |
| 100 | + sIdentifyEffect = EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT; |
| 101 | +} |
| 102 | +} // namespace |
| 103 | + |
| 104 | +void OnTriggerIdentifyEffect(Identify * identify) |
| 105 | +{ |
| 106 | + sIdentifyEffect = identify->mCurrentEffectIdentifier; |
| 107 | + |
| 108 | + if (identify->mCurrentEffectIdentifier == EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE) |
| 109 | + { |
| 110 | + ChipLogProgress(Zcl, "IDENTIFY_EFFECT_IDENTIFIER_CHANNEL_CHANGE - Not supported, use effect variant %d", |
| 111 | + identify->mEffectVariant); |
| 112 | + sIdentifyEffect = static_cast<EmberAfIdentifyEffectIdentifier>(identify->mEffectVariant); |
| 113 | + } |
| 114 | + |
| 115 | + switch (sIdentifyEffect) |
| 116 | + { |
| 117 | + case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BLINK: |
| 118 | + case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_BREATHE: |
| 119 | + case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_OKAY: |
| 120 | + SystemLayer().ScheduleLambda([identify] { |
| 121 | + (void) chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds16(5), OnTriggerIdentifyEffectCompleted, |
| 122 | + identify); |
| 123 | + }); |
| 124 | + break; |
| 125 | + case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_FINISH_EFFECT: |
| 126 | + SystemLayer().ScheduleLambda([identify] { |
| 127 | + (void) chip::DeviceLayer::SystemLayer().CancelTimer(OnTriggerIdentifyEffectCompleted, identify); |
| 128 | + (void) chip::DeviceLayer::SystemLayer().StartTimer(chip::System::Clock::Seconds16(1), OnTriggerIdentifyEffectCompleted, |
| 129 | + identify); |
| 130 | + }); |
| 131 | + break; |
| 132 | + case EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT: |
| 133 | + SystemLayer().ScheduleLambda( |
| 134 | + [identify] { (void) chip::DeviceLayer::SystemLayer().CancelTimer(OnTriggerIdentifyEffectCompleted, identify); }); |
| 135 | + sIdentifyEffect = EMBER_ZCL_IDENTIFY_EFFECT_IDENTIFIER_STOP_EFFECT; |
| 136 | + break; |
| 137 | + default: |
| 138 | + ChipLogProgress(Zcl, "No identifier effect"); |
| 139 | + } |
| 140 | +} |
| 141 | + |
| 142 | +Identify gIdentify = { |
| 143 | + chip::EndpointId{ 1 }, |
| 144 | + [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStart"); }, |
| 145 | + [](Identify *) { ChipLogProgress(Zcl, "onIdentifyStop"); }, |
| 146 | + EMBER_ZCL_IDENTIFY_IDENTIFY_TYPE_VISIBLE_LED, |
| 147 | + OnTriggerIdentifyEffect, |
| 148 | +}; |
| 149 | + |
90 | 150 | void LockOpenThreadTask(void)
|
91 | 151 | {
|
92 | 152 | chip::DeviceLayer::ThreadStackMgr().LockThreadStack();
|
|
0 commit comments