/* * * 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. */ #include #include #include #include #include #include #include #include using namespace chip; using namespace chip::app; using namespace chip::app::Clusters; using namespace chip::app::Clusters::Actions::Attributes; namespace { class ActionsAttrAccess : public AttributeAccessInterface { public: // Register for the Actions cluster on all endpoints. ActionsAttrAccess() : AttributeAccessInterface(Optional::Missing(), Actions::Id) {} CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; private: static constexpr uint16_t ClusterRevision = 1; CHIP_ERROR ReadActionListAttribute(EndpointId endpoint, AttributeValueEncoder & aEncoder); CHIP_ERROR ReadEndpointListAttribute(EndpointId endpoint, AttributeValueEncoder & aEncoder); CHIP_ERROR ReadSetupUrlAttribute(EndpointId endpoint, AttributeValueEncoder & aEncoder); CHIP_ERROR ReadClusterRevision(EndpointId endpoint, AttributeValueEncoder & aEncoder); }; constexpr uint16_t ActionsAttrAccess::ClusterRevision; CHIP_ERROR ActionsAttrAccess::ReadActionListAttribute(EndpointId endpoint, AttributeValueEncoder & aEncoder) { // Just return an empty list return aEncoder.EncodeEmptyList(); } CHIP_ERROR ActionsAttrAccess::ReadEndpointListAttribute(EndpointId endpoint, AttributeValueEncoder & aEncoder) { // Just return an empty list return aEncoder.EncodeEmptyList(); } CHIP_ERROR ActionsAttrAccess::ReadSetupUrlAttribute(EndpointId endpoint, AttributeValueEncoder & aEncoder) { static const char SetupUrl[] = "https://example.com"; return aEncoder.Encode(chip::Span(SetupUrl, strlen(SetupUrl))); } CHIP_ERROR ActionsAttrAccess::ReadClusterRevision(EndpointId endpoint, AttributeValueEncoder & aEncoder) { return aEncoder.Encode(ClusterRevision); } ActionsAttrAccess gAttrAccess; CHIP_ERROR ActionsAttrAccess::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) { VerifyOrDie(aPath.mClusterId == Actions::Id); switch (aPath.mAttributeId) { case ActionList::Id: return ReadActionListAttribute(aPath.mEndpointId, aEncoder); case EndpointLists::Id: return ReadEndpointListAttribute(aPath.mEndpointId, aEncoder); case SetupURL::Id: return ReadSetupUrlAttribute(aPath.mEndpointId, aEncoder); case ClusterRevision::Id: return ReadClusterRevision(aPath.mEndpointId, aEncoder); default: break; } return CHIP_NO_ERROR; } } // anonymous namespace void MatterActionsPluginServerInitCallback() { AttributeAccessInterfaceRegistry::Instance().Register(&gAttrAccess); }