23
23
#include < app/AttributeAccessInterface.h>
24
24
#include < app/AttributeAccessInterfaceRegistry.h>
25
25
#include < app/CommandHandler.h>
26
+ #include < app/CommandHandlerInterface.h>
27
+ #include < app/CommandHandlerInterfaceRegistry.h>
26
28
#include < app/ConcreteCommandPath.h>
27
29
#include < app/EventLogging.h>
28
30
#include < app/util/attribute-storage.h>
@@ -40,11 +42,15 @@ using chip::DeviceLayer::GetDiagnosticDataProvider;
40
42
41
43
namespace {
42
44
43
- class WiFiDiagosticsAttrAccess : public AttributeAccessInterface
45
+ class WiFiDiagosticsGlobalInstance : public AttributeAccessInterface , public CommandHandlerInterface
44
46
{
45
47
public:
46
48
// Register for the WiFiNetworkDiagnostics cluster on all endpoints.
47
- WiFiDiagosticsAttrAccess () : AttributeAccessInterface(Optional<EndpointId>::Missing(), WiFiNetworkDiagnostics::Id) {}
49
+ WiFiDiagosticsGlobalInstance (DiagnosticDataProvider & diagnosticProvider) :
50
+ AttributeAccessInterface (Optional<EndpointId>::Missing(), WiFiNetworkDiagnostics::Id),
51
+ CommandHandlerInterface (Optional<EndpointId>::Missing(), WiFiNetworkDiagnostics::Id),
52
+ mDiagnosticProvider (diagnosticProvider)
53
+ {}
48
54
49
55
CHIP_ERROR Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override ;
50
56
@@ -57,14 +63,20 @@ class WiFiDiagosticsAttrAccess : public AttributeAccessInterface
57
63
CHIP_ERROR ReadWiFiVersion (AttributeValueEncoder & aEncoder);
58
64
CHIP_ERROR ReadChannelNumber (AttributeValueEncoder & aEncoder);
59
65
CHIP_ERROR ReadWiFiRssi (AttributeValueEncoder & aEncoder);
66
+
67
+ void InvokeCommand (HandlerContext & ctx) override ;
68
+
69
+ void HandleResetCounts (HandlerContext & ctx, const Commands::ResetCounts::DecodableType & commandData);
70
+
71
+ DiagnosticDataProvider & mDiagnosticProvider ;
60
72
};
61
73
62
74
template <typename T, typename Type>
63
- CHIP_ERROR WiFiDiagosticsAttrAccess ::ReadIfSupported (CHIP_ERROR (DiagnosticDataProvider::*getter)(T &), Type & data,
64
- AttributeValueEncoder & aEncoder)
75
+ CHIP_ERROR WiFiDiagosticsGlobalInstance ::ReadIfSupported (CHIP_ERROR (DiagnosticDataProvider::*getter)(T &), Type & data,
76
+ AttributeValueEncoder & aEncoder)
65
77
{
66
78
T value;
67
- CHIP_ERROR err = (DeviceLayer::GetDiagnosticDataProvider () .*getter)(value);
79
+ CHIP_ERROR err = (mDiagnosticProvider .*getter)(value);
68
80
69
81
if (err == CHIP_NO_ERROR)
70
82
{
@@ -78,13 +90,13 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::ReadIfSupported(CHIP_ERROR (DiagnosticDataP
78
90
return aEncoder.Encode (data);
79
91
}
80
92
81
- CHIP_ERROR WiFiDiagosticsAttrAccess ::ReadWiFiBssId (AttributeValueEncoder & aEncoder)
93
+ CHIP_ERROR WiFiDiagosticsGlobalInstance ::ReadWiFiBssId (AttributeValueEncoder & aEncoder)
82
94
{
83
95
Attributes::Bssid::TypeInfo::Type bssid;
84
96
85
97
uint8_t bssidBytes[chip::DeviceLayer::kMaxHardwareAddrSize ];
86
98
MutableByteSpan bssidSpan (bssidBytes);
87
- if (DeviceLayer::GetDiagnosticDataProvider () .GetWiFiBssId (bssidSpan) == CHIP_NO_ERROR)
99
+ if (mDiagnosticProvider .GetWiFiBssId (bssidSpan) == CHIP_NO_ERROR)
88
100
{
89
101
if (!bssidSpan.empty ())
90
102
{
@@ -101,12 +113,12 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::ReadWiFiBssId(AttributeValueEncoder & aEnco
101
113
return aEncoder.Encode (bssid);
102
114
}
103
115
104
- CHIP_ERROR WiFiDiagosticsAttrAccess ::ReadSecurityType (AttributeValueEncoder & aEncoder)
116
+ CHIP_ERROR WiFiDiagosticsGlobalInstance ::ReadSecurityType (AttributeValueEncoder & aEncoder)
105
117
{
106
118
Attributes::SecurityType::TypeInfo::Type securityType;
107
119
SecurityTypeEnum value = SecurityTypeEnum::kUnspecified ;
108
120
109
- if (DeviceLayer::GetDiagnosticDataProvider () .GetWiFiSecurityType (value) == CHIP_NO_ERROR)
121
+ if (mDiagnosticProvider .GetWiFiSecurityType (value) == CHIP_NO_ERROR)
110
122
{
111
123
securityType.SetNonNull (value);
112
124
ChipLogProgress (Zcl, " The current type of Wi-Fi security used: %d" , to_underlying (value));
@@ -119,12 +131,12 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::ReadSecurityType(AttributeValueEncoder & aE
119
131
return aEncoder.Encode (securityType);
120
132
}
121
133
122
- CHIP_ERROR WiFiDiagosticsAttrAccess ::ReadWiFiVersion (AttributeValueEncoder & aEncoder)
134
+ CHIP_ERROR WiFiDiagosticsGlobalInstance ::ReadWiFiVersion (AttributeValueEncoder & aEncoder)
123
135
{
124
136
Attributes::WiFiVersion::TypeInfo::Type version;
125
137
WiFiVersionEnum value = WiFiVersionEnum::kUnknownEnumValue ;
126
138
127
- if (DeviceLayer::GetDiagnosticDataProvider () .GetWiFiVersion (value) == CHIP_NO_ERROR)
139
+ if (mDiagnosticProvider .GetWiFiVersion (value) == CHIP_NO_ERROR)
128
140
{
129
141
version.SetNonNull (value);
130
142
ChipLogProgress (Zcl, " The current 802.11 standard version in use by the Node: %d" , to_underlying (value));
@@ -137,12 +149,12 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::ReadWiFiVersion(AttributeValueEncoder & aEn
137
149
return aEncoder.Encode (version);
138
150
}
139
151
140
- CHIP_ERROR WiFiDiagosticsAttrAccess ::ReadChannelNumber (AttributeValueEncoder & aEncoder)
152
+ CHIP_ERROR WiFiDiagosticsGlobalInstance ::ReadChannelNumber (AttributeValueEncoder & aEncoder)
141
153
{
142
154
Attributes::ChannelNumber::TypeInfo::Type channelNumber;
143
155
uint16_t value = 0 ;
144
156
145
- if (DeviceLayer::GetDiagnosticDataProvider () .GetWiFiChannelNumber (value) == CHIP_NO_ERROR)
157
+ if (mDiagnosticProvider .GetWiFiChannelNumber (value) == CHIP_NO_ERROR)
146
158
{
147
159
channelNumber.SetNonNull (value);
148
160
ChipLogProgress (Zcl, " The channel that Wi-Fi communication is currently operating on is: %d" , value);
@@ -155,12 +167,12 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::ReadChannelNumber(AttributeValueEncoder & a
155
167
return aEncoder.Encode (channelNumber);
156
168
}
157
169
158
- CHIP_ERROR WiFiDiagosticsAttrAccess ::ReadWiFiRssi (AttributeValueEncoder & aEncoder)
170
+ CHIP_ERROR WiFiDiagosticsGlobalInstance ::ReadWiFiRssi (AttributeValueEncoder & aEncoder)
159
171
{
160
172
Attributes::Rssi::TypeInfo::Type rssi;
161
173
int8_t value = 0 ;
162
174
163
- if (DeviceLayer::GetDiagnosticDataProvider () .GetWiFiRssi (value) == CHIP_NO_ERROR)
175
+ if (mDiagnosticProvider .GetWiFiRssi (value) == CHIP_NO_ERROR)
164
176
{
165
177
rssi.SetNonNull (value);
166
178
ChipLogProgress (Zcl, " The current RSSI of the Node’s Wi-Fi radio in dB: %d" , value);
@@ -174,9 +186,7 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::ReadWiFiRssi(AttributeValueEncoder & aEncod
174
186
return aEncoder.Encode (rssi);
175
187
}
176
188
177
- WiFiDiagosticsAttrAccess gAttrAccess ;
178
-
179
- CHIP_ERROR WiFiDiagosticsAttrAccess::Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
189
+ CHIP_ERROR WiFiDiagosticsGlobalInstance::Read (const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder)
180
190
{
181
191
if (aPath.mClusterId != WiFiNetworkDiagnostics::Id)
182
192
{
@@ -240,6 +250,25 @@ CHIP_ERROR WiFiDiagosticsAttrAccess::Read(const ConcreteReadAttributePath & aPat
240
250
return CHIP_NO_ERROR;
241
251
}
242
252
253
+ void WiFiDiagosticsGlobalInstance::InvokeCommand (HandlerContext & handlerContext)
254
+ {
255
+ switch (handlerContext.mRequestPath .mCommandId )
256
+ {
257
+ case Commands::ResetCounts::Id:
258
+ CommandHandlerInterface::HandleCommand<Commands::ResetCounts::DecodableType>(
259
+ handlerContext, [this ](HandlerContext & ctx, const auto & commandData) { HandleResetCounts (ctx, commandData); });
260
+ break ;
261
+ }
262
+ }
263
+
264
+ void WiFiDiagosticsGlobalInstance::HandleResetCounts (HandlerContext & ctx, const Commands::ResetCounts::DecodableType & commandData)
265
+ {
266
+ mDiagnosticProvider .ResetWiFiNetworkDiagnosticsCounts ();
267
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
268
+ }
269
+
270
+ WiFiDiagosticsGlobalInstance gWiFiDiagosticsInstance (DeviceLayer::GetDiagnosticDataProvider());
271
+
243
272
} // anonymous namespace
244
273
245
274
namespace chip {
@@ -316,18 +345,10 @@ void WiFiDiagnosticsServer::OnConnectionStatusChanged(uint8_t connectionStatus)
316
345
} // namespace app
317
346
} // namespace chip
318
347
319
- bool emberAfWiFiNetworkDiagnosticsClusterResetCountsCallback (app::CommandHandler * commandObj,
320
- const app::ConcreteCommandPath & commandPath,
321
- const Commands::ResetCounts::DecodableType & commandData)
322
- {
323
- DeviceLayer::GetDiagnosticDataProvider ().ResetWiFiNetworkDiagnosticsCounts ();
324
- commandObj->AddStatus (commandPath, Protocols::InteractionModel::Status::Success);
325
-
326
- return true ;
327
- }
328
-
329
348
void MatterWiFiNetworkDiagnosticsPluginServerInitCallback ()
330
349
{
331
- AttributeAccessInterfaceRegistry::Instance ().Register (&gAttrAccess );
350
+ AttributeAccessInterfaceRegistry::Instance ().Register (&gWiFiDiagosticsInstance );
351
+ CommandHandlerInterfaceRegistry::Instance ().RegisterCommandHandler (&gWiFiDiagosticsInstance );
352
+
332
353
GetDiagnosticDataProvider ().SetWiFiDiagnosticsDelegate (&WiFiDiagnosticsServer::Instance ());
333
354
}
0 commit comments