22
22
#include < app/AttributeAccessInterface.h>
23
23
#include < app/AttributeAccessInterfaceRegistry.h>
24
24
#include < app/CommandHandler.h>
25
+ #include < app/CommandHandlerInterface.h>
26
+ #include < app/CommandHandlerInterfaceRegistry.h>
25
27
#include < app/ConcreteCommandPath.h>
26
28
#include < app/util/attribute-storage.h>
27
29
#include < lib/core/Optional.h>
28
30
#include < platform/DiagnosticDataProvider.h>
31
+ #include < zap-generated/gen_config.h>
29
32
30
33
using namespace chip ;
31
34
using namespace chip ::app;
@@ -36,11 +39,15 @@ using chip::DeviceLayer::DiagnosticDataProvider;
36
39
37
40
namespace {
38
41
39
- class EthernetDiagosticsAttrAccess : public AttributeAccessInterface
42
+ class EthernetDiagosticsGlobalInstance : public AttributeAccessInterface , public CommandHandlerInterface
40
43
{
41
44
public:
42
45
// Register for the EthernetNetworkDiagnostics cluster on all endpoints.
43
- EthernetDiagosticsAttrAccess () : AttributeAccessInterface(Optional<EndpointId>::Missing(), EthernetNetworkDiagnostics::Id) {}
46
+ EthernetDiagosticsGlobalInstance (DiagnosticDataProvider & diagnosticProvider) :
47
+ AttributeAccessInterface (Optional<EndpointId>::Missing(), EthernetNetworkDiagnostics::Id),
48
+ CommandHandlerInterface (Optional<EndpointId>::Missing(), EthernetNetworkDiagnostics::Id),
49
+ mDiagnosticProvider (diagnosticProvider)
50
+ {}
44
51
45
52
CHIP_ERROR Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override ;
46
53
@@ -51,11 +58,19 @@ class EthernetDiagosticsAttrAccess : public AttributeAccessInterface
51
58
CHIP_ERROR ReadPHYRate (AttributeValueEncoder & aEncoder);
52
59
CHIP_ERROR ReadFullDuplex (AttributeValueEncoder & aEncoder);
53
60
CHIP_ERROR ReadCarrierDetect (AttributeValueEncoder & aEncoder);
61
+
62
+ void InvokeCommand (HandlerContext & ctx) override ;
63
+
64
+ #ifdef ETHERNET_NETWORK_DIAGNOSTICS_ENABLE_RESET_COUNTS_CMD
65
+ void HandleResetCounts (HandlerContext & ctx, const Commands::ResetCounts::DecodableType & commandData);
66
+ #endif
67
+
68
+ DiagnosticDataProvider & mDiagnosticProvider ;
54
69
};
55
70
56
71
template <typename T>
57
- CHIP_ERROR EthernetDiagosticsAttrAccess ::ReadIfSupported (CHIP_ERROR (DiagnosticDataProvider::*getter)(T &),
58
- AttributeValueEncoder & aEncoder)
72
+ CHIP_ERROR EthernetDiagosticsGlobalInstance ::ReadIfSupported (CHIP_ERROR (DiagnosticDataProvider::*getter)(T &),
73
+ AttributeValueEncoder & aEncoder)
59
74
{
60
75
T data;
61
76
CHIP_ERROR err = (DeviceLayer::GetDiagnosticDataProvider ().*getter)(data);
@@ -71,7 +86,7 @@ CHIP_ERROR EthernetDiagosticsAttrAccess::ReadIfSupported(CHIP_ERROR (DiagnosticD
71
86
return aEncoder.Encode (data);
72
87
}
73
88
74
- CHIP_ERROR EthernetDiagosticsAttrAccess ::ReadPHYRate (AttributeValueEncoder & aEncoder)
89
+ CHIP_ERROR EthernetDiagosticsGlobalInstance ::ReadPHYRate (AttributeValueEncoder & aEncoder)
75
90
{
76
91
Attributes::PHYRate::TypeInfo::Type pHYRate;
77
92
auto value = app::Clusters::EthernetNetworkDiagnostics::PHYRateEnum::kRate10M ;
@@ -90,7 +105,7 @@ CHIP_ERROR EthernetDiagosticsAttrAccess::ReadPHYRate(AttributeValueEncoder & aEn
90
105
return aEncoder.Encode (pHYRate);
91
106
}
92
107
93
- CHIP_ERROR EthernetDiagosticsAttrAccess ::ReadFullDuplex (AttributeValueEncoder & aEncoder)
108
+ CHIP_ERROR EthernetDiagosticsGlobalInstance ::ReadFullDuplex (AttributeValueEncoder & aEncoder)
94
109
{
95
110
Attributes::FullDuplex::TypeInfo::Type fullDuplex;
96
111
bool value = false ;
@@ -108,7 +123,7 @@ CHIP_ERROR EthernetDiagosticsAttrAccess::ReadFullDuplex(AttributeValueEncoder &
108
123
return aEncoder.Encode (fullDuplex);
109
124
}
110
125
111
- CHIP_ERROR EthernetDiagosticsAttrAccess ::ReadCarrierDetect (AttributeValueEncoder & aEncoder)
126
+ CHIP_ERROR EthernetDiagosticsGlobalInstance ::ReadCarrierDetect (AttributeValueEncoder & aEncoder)
112
127
{
113
128
Attributes::CarrierDetect::TypeInfo::Type carrierDetect;
114
129
bool value = false ;
@@ -127,9 +142,7 @@ CHIP_ERROR EthernetDiagosticsAttrAccess::ReadCarrierDetect(AttributeValueEncoder
127
142
return aEncoder.Encode (carrierDetect);
128
143
}
129
144
130
- EthernetDiagosticsAttrAccess gAttrAccess ;
131
-
132
- CHIP_ERROR EthernetDiagosticsAttrAccess::Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
145
+ CHIP_ERROR EthernetDiagosticsGlobalInstance::Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
133
146
{
134
147
if (aPath.mClusterId != EthernetNetworkDiagnostics::Id)
135
148
{
@@ -172,19 +185,35 @@ CHIP_ERROR EthernetDiagosticsAttrAccess::Read(const ConcreteReadAttributePath &
172
185
}
173
186
return CHIP_NO_ERROR;
174
187
}
175
- } // anonymous namespace
176
188
177
- bool emberAfEthernetNetworkDiagnosticsClusterResetCountsCallback (app::CommandHandler * commandObj,
178
- const app::ConcreteCommandPath & commandPath,
179
- const Commands::ResetCounts::DecodableType & commandData)
189
+ void EthernetDiagosticsGlobalInstance::InvokeCommand (HandlerContext & handlerContext)
180
190
{
181
- DeviceLayer::GetDiagnosticDataProvider ().ResetEthNetworkDiagnosticsCounts ();
182
- commandObj->AddStatus (commandPath, Protocols::InteractionModel::Status::Success);
191
+ switch (handlerContext.mRequestPath .mCommandId )
192
+ {
193
+ case Commands::ResetCounts::Id:
194
+ #ifdef ETHERNET_NETWORK_DIAGNOSTICS_ENABLE_RESET_COUNTS_CMD
195
+ CommandHandlerInterface::HandleCommand<Commands::ResetCounts::DecodableType>(
196
+ handlerContext, [this ](HandlerContext & ctx, const auto & commandData) { HandleResetCounts (ctx, commandData); });
197
+ break ;
198
+ #endif
199
+ }
200
+ }
183
201
184
- return true ;
202
+ #ifdef ETHERNET_NETWORK_DIAGNOSTICS_ENABLE_RESET_COUNTS_CMD
203
+ void EthernetDiagosticsGlobalInstance::HandleResetCounts (HandlerContext & ctx,
204
+ const Commands::ResetCounts::DecodableType & commandData)
205
+ {
206
+ mDiagnosticProvider .ResetEthNetworkDiagnosticsCounts ();
207
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
185
208
}
209
+ #endif
210
+
211
+ EthernetDiagosticsGlobalInstance gEthernetDiagosticsInstance (DeviceLayer::GetDiagnosticDataProvider());
212
+
213
+ } // anonymous namespace
186
214
187
215
void MatterEthernetNetworkDiagnosticsPluginServerInitCallback ()
188
216
{
189
- AttributeAccessInterfaceRegistry::Instance ().Register (&gAttrAccess );
217
+ AttributeAccessInterfaceRegistry::Instance ().Register (&gEthernetDiagosticsInstance );
218
+ CommandHandlerInterfaceRegistry::Instance ().RegisterCommandHandler (&gEthernetDiagosticsInstance );
190
219
}
0 commit comments