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,20 +19,61 @@

#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 Attribute Override class for ClientMonitoring cluster attribures
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
*/
class ClientMonitoringAttributeAccess : public app::AttributeAccessInterface
{
public:
ClientMonitoringAttributeAccess() : AttributeAccessInterface(Optional<EndpointId>(0), ClientMonitoring::Id) {}
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved

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 resgitration table
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
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);
Expand All @@ -41,12 +82,14 @@ bool emberAfClientMonitoringClusterRegisterClientMonitoringCallback(
/**
* @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);
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
return false;
}

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

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

ClientMonitoringRegistrationTable & ClientMonitoringRegistrationTable::Instance()
{
return sInstance;
}
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved

} // namespace chip
40 changes: 40 additions & 0 deletions src/app/util/ClientMonitoringRegistrationTable.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
*
* 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() {}

static ClientMonitoringRegistrationTable & Instance();

private:
static ClientMonitoringRegistrationTable sInstance;
MonitoringRegistrationStruct mRegisteredClients[CHIP_CONFIG_MAX_CLIENT_REG_PER_FABRIC];
};

} // 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 4
mkardous-silabs marked this conversation as resolved.
Show resolved Hide resolved
#endif // CHIP_CONFIG_MAX_CLIENT_REG_PER_FABRIC
/**
* @}
*/