/* * * Copyright (c) 2022 Project CHIP Authors * All rights reserved. * * 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 #include #include #include #include class BindingHandler { public: struct BindingData { chip::AttributeId attributeId; chip::EndpointId EndpointId = 1; chip::CommandId CommandId; chip::ClusterId ClusterId; uint8_t Value; bool IsGroup{ false }; bool isReadAttribute = false; }; void Init(); void PrintBindingTable(); bool IsGroupBound(); static void SwitchWorkerHandler(intptr_t); static void BindingWorkerHandler(intptr_t); static void OnInvokeCommandFailure(BindingData & aBindingData, CHIP_ERROR aError); static BindingHandler & GetInstance() { static BindingHandler sBindingHandler; return sBindingHandler; } private: static void OnOffProcessCommand(chip::CommandId, const EmberBindingTableEntry &, chip::OperationalDeviceProxy *, void *); static void LevelControlProcessCommand(chip::CommandId, const EmberBindingTableEntry &, chip::OperationalDeviceProxy *, void *); static void LightSwitchChangedHandler(const EmberBindingTableEntry &, chip::OperationalDeviceProxy *, void *); static void LightSwitchContextReleaseHandler(void * context); static void InitInternal(intptr_t); bool mCaseSessionRecovered = false; };