Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IC-Device] Add Accessor class for ClientMonitoring Cluster #23909

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -19,34 +19,77 @@

#include <app-common/zap-generated/af-structs.h>
#include <app-common/zap-generated/attributes/Accessors.h>
#include <app/AttributeAccessInterface.h>
#include <app/CommandHandler.h>
#include <app/ConcreteAttributePath.h>
#include <app/util/ClientMonitoringRegistrationTable.h>
#include <app/util/af-event.h>
#include <app/util/af.h>
#include <app/util/attribute-storage.h>

using namespace chip;
using namespace chip::app;
using namespace chip::app::Clusters;
using namespace chip::app::Clusters::ClientMonitoring;

namespace {

/**
* @brief Implementation of attribute access for ClientMonitoring cluster
*/
class ClientMonitoringAttributeAccess : public app::AttributeAccessInterface
{
public:
ClientMonitoringAttributeAccess() : AttributeAccessInterface(MakeOptional(kRootEndpointId), ClientMonitoring::Id) {}

CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override
{
VerifyOrDie(aPath.mClusterId == ClientMonitoring::Id);

switch (aPath.mAttributeId)
{
case ClientMonitoring::Attributes::ExpectedClients::Id:
// TODO : Implement Client monitoring registration table
return CHIP_ERROR_NOT_IMPLEMENTED;

default:
break;
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
}

return CHIP_NO_ERROR;
}

CHIP_ERROR Write(const ConcreteDataAttributePath & aPath, AttributeValueDecoder & aDecoder) override
{
return CHIP_ERROR_WRITE_FAILED;
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
}
};

ClientMonitoringAttributeAccess gAttribute;

} // namespace

/**
* @brief Client Monitoring Cluster RegisterClientMonitoring Command callback (from client)
*/
bool emberAfClientMonitoringClusterRegisterClientMonitoringCallback(
app::CommandHandler * commandObj, const app::ConcreteCommandPath & commandPath,
CommandHandler * commandObj, const ConcreteCommandPath & commandPath,
const Commands::RegisterClientMonitoring::DecodableType & commandData)
{
emberAfSendImmediateDefaultResponse(EMBER_ZCL_STATUS_UNSUPPORTED_COMMAND);
commandObj->AddStatus(commandPath, Protocols::InteractionModel::Status::UnsupportedCommand);
return false;
}
/**
* @brief Client Monitoring Cluster StayAwakeRequest Command callback (from client)
*/
bool emberAfClientMonitoringClusterStayAwakeRequestCallback(app::CommandHandler * commandObj,
const chip::app::ConcreteCommandPath & commandPath,
bool emberAfClientMonitoringClusterStayAwakeRequestCallback(CommandHandler * commandObj, const ConcreteCommandPath & commandPath,
const Commands::StayAwakeRequest::DecodableType & commandData)
{
emberAfSendImmediateDefaultResponse(EMBER_ZCL_STATUS_UNSUPPORTED_COMMAND);
commandObj->AddStatus(commandPath, Protocols::InteractionModel::Status::UnsupportedCommand);
return false;
}

void MatterClientMonitoringPluginServerInitCallback() {}
void MatterClientMonitoringPluginServerInitCallback()
{
registerAttributeAccessOverride(&gAttribute);
}
75 changes: 75 additions & 0 deletions src/app/util/ClientMonitoringRegistrationTable.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/**
*
* Copyright (c) 2022 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 "ClientMonitoringRegistrationTable.h"

namespace chip {

/**********************************************************
* Attributes Definition
*********************************************************/

/**********************************************************
* ClientMonitoringRegistrationTable Implementation
*********************************************************/

ClientMonitoringRegistrationTable::ClientMonitoringRegistrationTable(FabricIndex fabricIndex)
{
this->LoadFromStorage(fabricIndex);
}

void ClientMonitoringRegistrationTable::LoadFromStorage(FabricIndex fabricIndex)
{
// TODO: Implement load from NVM logic
}

void ClientMonitoringRegistrationTable::SaveToStorage()
{
// Store to NVM based of class attributes
}

NodeId ClientMonitoringRegistrationTable::getClientNodeId()
{
return mRegisteredClient.clientNodeId;
}

uint64_t ClientMonitoringRegistrationTable::getICid()
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
{
return mRegisteredClient.ICid;
}

FabricIndex ClientMonitoringRegistrationTable::getFaricIndex()
{
return mRegisteredClient.fabricIndex;
}

void ClientMonitoringRegistrationTable::setClientNodeId(NodeId clientNodeId)
{
mRegisteredClient.clientNodeId = clientNodeId;
}

void ClientMonitoringRegistrationTable::setICid(uint64_t ICid)
{
mRegisteredClient.ICid = ICid;
}

void ClientMonitoringRegistrationTable::setFabricIndex(FabricIndex fabric)
{
mRegisteredClient.fabricIndex = fabric;
}

} // namespace chip
51 changes: 51 additions & 0 deletions src/app/util/ClientMonitoringRegistrationTable.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/**
*
* Copyright (c) 2022 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 <app-common/zap-generated/cluster-objects.h>
#include <lib/core/CHIPConfig.h>
#include <lib/support/CodeUtils.h>
#include <platform/CHIPDeviceConfig.h>

namespace chip {
class ClientMonitoringRegistrationTable
{
public:
using MonitoringRegistrationStruct = chip::app::Clusters::ClientMonitoring::Structs::MonitoringRegistration::Type;

ClientMonitoringRegistrationTable(FabricIndex fabricIndex);
~ClientMonitoringRegistrationTable(){};

void SaveToStorage();

// Getter
NodeId getClientNodeId();
uint64_t getICid();
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
FabricIndex getFaricIndex();

// Setter
void setClientNodeId(NodeId clientNodeId);
void setICid(uint64_t ICid);
void setFabricIndex(FabricIndex fabric);

private:
void LoadFromStorage(FabricIndex fabricIndex);
MonitoringRegistrationStruct mRegisteredClient;
};

} // namespace chip
10 changes: 10 additions & 0 deletions src/lib/core/CHIPConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -1315,6 +1315,16 @@ extern const char CHIP_NON_PRODUCTION_MARKER[];
#ifndef CHIP_CONFIG_NUM_CD_KEY_SLOTS
#define CHIP_CONFIG_NUM_CD_KEY_SLOTS 5
#endif // CHIP_CONFIG_NUM_CD_KEY_SLOTS

/**
* @def CHIP_CONFIG_MAX_CLIENT_REG_PER_FABRIC
*
* @brief Defines the number of clients that can register for monitoring with a server
* see ClientMonitoring cluster for specification
*/
#ifndef CHIP_CONFIG_MAX_CLIENT_REG_PER_FABRIC
#define CHIP_CONFIG_MAX_CLIENT_REG_PER_FABRIC 1
#endif // CHIP_CONFIG_MAX_CLIENT_REG_PER_FABRIC
/**
* @}
*/