/** * * Copyright (c) 2021 Project CHIP Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include struct Identify { /** * Callbacks are not thread safe. To access the identify struct please * consider using the LockChipStack / UnlockChipStack functions of the PlatformMgr. */ using onIdentifyStartCb = void (*)(Identify *); using onIdentifyStopCb = onIdentifyStartCb; using onEffectIdentifierCb = onIdentifyStartCb; /** * @brief Construct a new Identify object * * Please note: The app should create a instance of this object to handle * the identify. * * @param endpoint endpoint of the cluster * @param onIdentifyStart callback to indicate to the app to start identifiying * @param onIdentifyStop callback to indicate to the app to stop identifiying * @param identifyType initial identifying type * @param onEffectIdentifier if supported by the app, callback to the app to indicate change of effect identifier * @param effectIdentifier if supported by the app, initial identify effect * @param effectVariant if supported by the app, initial effect variant */ Identify(chip::EndpointId endpoint, onIdentifyStartCb onIdentifyStart, onIdentifyStopCb onIdentifyStop, chip::app::Clusters::Identify::IdentifyTypeEnum identifyType, onEffectIdentifierCb onEffectIdentifier = nullptr, chip::app::Clusters::Identify::EffectIdentifierEnum effectIdentifier = chip::app::Clusters::Identify::EffectIdentifierEnum::kBlink, chip::app::Clusters::Identify::EffectVariantEnum effectVariant = chip::app::Clusters::Identify::EffectVariantEnum::kDefault); ~Identify(); chip::EndpointId mEndpoint; onIdentifyStartCb mOnIdentifyStart = nullptr; onIdentifyStopCb mOnIdentifyStop = nullptr; chip::app::Clusters::Identify::IdentifyTypeEnum mIdentifyType; onEffectIdentifierCb mOnEffectIdentifier; chip::app::Clusters::Identify::EffectIdentifierEnum mCurrentEffectIdentifier; chip::app::Clusters::Identify::EffectIdentifierEnum mTargetEffectIdentifier; chip::app::Clusters::Identify::EffectVariantEnum mEffectVariant; bool mActive = false; Identify * nextIdentify = nullptr; bool hasNext() { return this->nextIdentify != nullptr; } Identify * next() { return this->nextIdentify; } void setNext(Identify * inst) { this->nextIdentify = inst; } };