Skip to content

Commit 1029904

Browse files
bzbarsky-applepull[bot]
authored andcommitted
Refactor network commissioning setup in Linux example apps. (#27861)
* Refactor network commissioning setup in Linux example apps. Linux (and Mac) example apps were inconsistent in terms of how they handled network commissioning, with most of them being buggy in terms of not setting things up properly on Mac or not setting things up properly at all. The changes here move the setup into AppMain, so it's handled consistently across all example apps. * Address review comment.
1 parent e524694 commit 1029904

File tree

15 files changed

+169
-605
lines changed

15 files changed

+169
-605
lines changed

examples/all-clusters-app/linux/main-common.cpp

-99
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include <app/CommandHandler.h>
2525
#include <app/att-storage.h>
2626
#include <app/clusters/identify-server/identify-server.h>
27-
#include <app/clusters/network-commissioning/network-commissioning.h>
2827
#include <app/server/Server.h>
2928
#include <app/util/af.h>
3029
#include <lib/support/CHIPMem.h>
@@ -36,17 +35,6 @@
3635
#include <transport/SessionManager.h>
3736
#include <transport/raw/PeerAddress.h>
3837

39-
#if CHIP_DEVICE_LAYER_TARGET_DARWIN
40-
#include <platform/Darwin/NetworkCommissioningDriver.h>
41-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
42-
#include <platform/Darwin/WiFi/NetworkCommissioningWiFiDriver.h>
43-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
44-
#endif // CHIP_DEVICE_LAYER_TARGET_DARWIN
45-
46-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
47-
#include <platform/Linux/NetworkCommissioningDriver.h>
48-
#endif // CHIP_DEVICE_LAYER_TARGET_LINUX
49-
5038
#include <Options.h>
5139

5240
using namespace chip;
@@ -105,42 +93,7 @@ static Identify gIdentify1 = {
10593
OnTriggerEffect,
10694
};
10795

108-
// Network commissioning
10996
namespace {
110-
// This file is being used by platforms other than Linux, so we need this check to disable related features since we only
111-
// implemented them on linux.
112-
constexpr EndpointId kNetworkCommissioningEndpointMain = 0;
113-
constexpr EndpointId kNetworkCommissioningEndpointSecondary = 0xFFFE;
114-
115-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
116-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
117-
NetworkCommissioning::LinuxThreadDriver sThreadDriver;
118-
#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
119-
120-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
121-
NetworkCommissioning::LinuxWiFiDriver sWiFiDriver;
122-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
123-
124-
NetworkCommissioning::LinuxEthernetDriver sEthernetDriver;
125-
#endif // CHIP_DEVICE_LAYER_TARGET_LINUX
126-
127-
#if CHIP_DEVICE_LAYER_TARGET_DARWIN
128-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
129-
NetworkCommissioning::DarwinWiFiDriver sWiFiDriver;
130-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
131-
132-
NetworkCommissioning::DarwinEthernetDriver sEthernetDriver;
133-
#endif // CHIP_DEVICE_LAYER_TARGET_DARWIN
134-
135-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
136-
Clusters::NetworkCommissioning::Instance sThreadNetworkCommissioningInstance(kNetworkCommissioningEndpointMain, &sThreadDriver);
137-
#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
138-
139-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
140-
Clusters::NetworkCommissioning::Instance sWiFiNetworkCommissioningInstance(kNetworkCommissioningEndpointSecondary, &sWiFiDriver);
141-
#endif
142-
143-
Clusters::NetworkCommissioning::Instance sEthernetNetworkCommissioningInstance(kNetworkCommissioningEndpointMain, &sEthernetDriver);
14497

14598
class ExampleDeviceInstanceInfoProvider : public DeviceInstanceInfoProvider
14699
{
@@ -200,58 +153,6 @@ ExampleDeviceInstanceInfoProvider gExampleDeviceInstanceInfoProvider;
200153

201154
void ApplicationInit()
202155
{
203-
(void) kNetworkCommissioningEndpointMain;
204-
// Enable secondary endpoint only when we need it, this should be applied to all platforms.
205-
emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, false);
206-
207-
const bool kThreadEnabled = {
208-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
209-
LinuxDeviceOptions::GetInstance().mThread
210-
#else
211-
false
212-
#endif
213-
};
214-
215-
const bool kWiFiEnabled = {
216-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
217-
LinuxDeviceOptions::GetInstance().mWiFi
218-
#else
219-
false
220-
#endif
221-
};
222-
223-
if (kThreadEnabled && kWiFiEnabled)
224-
{
225-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
226-
sThreadNetworkCommissioningInstance.Init();
227-
#endif
228-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
229-
sWiFiNetworkCommissioningInstance.Init();
230-
#endif
231-
// Only enable secondary endpoint for network commissioning cluster when both WiFi and Thread are enabled.
232-
emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, true);
233-
}
234-
else if (kThreadEnabled)
235-
{
236-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
237-
sThreadNetworkCommissioningInstance.Init();
238-
#endif
239-
}
240-
else if (kWiFiEnabled)
241-
{
242-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
243-
// If we only enable WiFi on this device, "move" WiFi instance to main NetworkCommissioning cluster endpoint.
244-
sWiFiNetworkCommissioningInstance.~Instance();
245-
new (&sWiFiNetworkCommissioningInstance)
246-
Clusters::NetworkCommissioning::Instance(kNetworkCommissioningEndpointMain, &sWiFiDriver);
247-
sWiFiNetworkCommissioningInstance.Init();
248-
#endif
249-
}
250-
else
251-
{
252-
sEthernetNetworkCommissioningInstance.Init();
253-
}
254-
255156
std::string path = kChipEventFifoPathPrefix + std::to_string(getpid());
256157

257158
if (sChipNamedPipeCommands.Start(path, &sAllClustersCommandDelegate) != CHIP_NO_ERROR)

examples/all-clusters-app/linux/main.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,15 @@
2121
#include "binding-handler.h"
2222
#include "main-common.h"
2323

24+
// Network commissioning
25+
namespace {
26+
constexpr chip::EndpointId kNetworkCommissioningEndpointSecondary = 0xFFFE;
27+
} // anonymous namespace
28+
2429
int main(int argc, char * argv[])
2530
{
26-
VerifyOrDie(ChipLinuxAppInit(argc, argv, AppOptions::GetOptions()) == 0);
31+
VerifyOrDie(
32+
ChipLinuxAppInit(argc, argv, AppOptions::GetOptions(), chip::MakeOptional(kNetworkCommissioningEndpointSecondary)) == 0);
2733
VerifyOrDie(InitBindingHandlers() == CHIP_NO_ERROR);
2834

2935
LinuxDeviceOptions::GetInstance().dacProvider = AppOptions::GetDACProvider();

examples/all-clusters-minimal-app/linux/main-common.cpp

+1-90
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@
2121
#include <app/CommandHandler.h>
2222
#include <app/att-storage.h>
2323
#include <app/clusters/identify-server/identify-server.h>
24-
#include <app/clusters/network-commissioning/network-commissioning.h>
2524
#include <app/server/Server.h>
2625
#include <app/util/af.h>
2726
#include <lib/support/CHIPMem.h>
2827
#include <new>
29-
#include <platform/Linux/NetworkCommissioningDriver.h>
3028
#include <platform/PlatformManager.h>
3129
#include <system/SystemPacketBuffer.h>
3230
#include <transport/SessionManager.h>
@@ -84,94 +82,7 @@ static Identify gIdentify1 = {
8482
OnTriggerEffect,
8583
};
8684

87-
// Network commissioning
88-
namespace {
89-
// This file is being used by platforms other than Linux, so we need this check to disable related features since we only
90-
// implemented them on linux.
91-
constexpr EndpointId kNetworkCommissioningEndpointMain = 0;
92-
constexpr EndpointId kNetworkCommissioningEndpointSecondary = 0xFFFE;
93-
94-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
95-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
96-
NetworkCommissioning::LinuxThreadDriver sLinuxThreadDriver;
97-
Clusters::NetworkCommissioning::Instance sThreadNetworkCommissioningInstance(kNetworkCommissioningEndpointMain,
98-
&sLinuxThreadDriver);
99-
#endif
100-
#if CHIP_DEVICE_CONFIG_ENABLE_WPA
101-
NetworkCommissioning::LinuxWiFiDriver sLinuxWiFiDriver;
102-
Clusters::NetworkCommissioning::Instance sWiFiNetworkCommissioningInstance(kNetworkCommissioningEndpointSecondary,
103-
&sLinuxWiFiDriver);
104-
#endif
105-
NetworkCommissioning::LinuxEthernetDriver sLinuxEthernetDriver;
106-
Clusters::NetworkCommissioning::Instance sEthernetNetworkCommissioningInstance(kNetworkCommissioningEndpointMain,
107-
&sLinuxEthernetDriver);
108-
#else // CHIP_DEVICE_LAYER_TARGET_LINUX
109-
Clusters::NetworkCommissioning::NullNetworkDriver sNullNetworkDriver;
110-
Clusters::NetworkCommissioning::Instance sNullNetworkCommissioningInstance(kNetworkCommissioningEndpointMain, &sNullNetworkDriver);
111-
#endif // CHIP_DEVICE_LAYER_TARGET_LINUX
112-
} // namespace
113-
114-
void ApplicationInit()
115-
{
116-
(void) kNetworkCommissioningEndpointMain;
117-
// Enable secondary endpoint only when we need it, this should be applied to all platforms.
118-
emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, false);
119-
120-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
121-
const bool kThreadEnabled = {
122-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
123-
LinuxDeviceOptions::GetInstance().mThread
124-
#else
125-
false
126-
#endif
127-
};
128-
129-
const bool kWiFiEnabled = {
130-
#if CHIP_DEVICE_CONFIG_ENABLE_WPA
131-
LinuxDeviceOptions::GetInstance().mWiFi
132-
#else
133-
false
134-
#endif
135-
};
136-
137-
if (kThreadEnabled && kWiFiEnabled)
138-
{
139-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
140-
sThreadNetworkCommissioningInstance.Init();
141-
#endif
142-
#if CHIP_DEVICE_CONFIG_ENABLE_WPA
143-
sWiFiNetworkCommissioningInstance.Init();
144-
#endif
145-
// Only enable secondary endpoint for network commissioning cluster when both WiFi and Thread are enabled.
146-
emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, true);
147-
}
148-
else if (kThreadEnabled)
149-
{
150-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
151-
sThreadNetworkCommissioningInstance.Init();
152-
#endif
153-
}
154-
else if (kWiFiEnabled)
155-
{
156-
#if CHIP_DEVICE_CONFIG_ENABLE_WPA
157-
// If we only enable WiFi on this device, "move" WiFi instance to main NetworkCommissioning cluster endpoint.
158-
sWiFiNetworkCommissioningInstance.~Instance();
159-
new (&sWiFiNetworkCommissioningInstance)
160-
Clusters::NetworkCommissioning::Instance(kNetworkCommissioningEndpointMain, &sLinuxWiFiDriver);
161-
sWiFiNetworkCommissioningInstance.Init();
162-
#endif
163-
}
164-
else
165-
#endif // CHIP_DEVICE_LAYER_TARGET_LINUX
166-
{
167-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
168-
sEthernetNetworkCommissioningInstance.Init();
169-
#else
170-
// Use NullNetworkCommissioningInstance to disable the network commissioning functions.
171-
sNullNetworkCommissioningInstance.Init();
172-
#endif
173-
}
174-
}
85+
void ApplicationInit() {}
17586

17687
void emberAfLowPowerClusterInitCallback(EndpointId endpoint)
17788
{

examples/all-clusters-minimal-app/linux/main.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,15 @@
2020
#include "AppOptions.h"
2121
#include "binding-handler.h"
2222

23+
// Network commissioning
24+
namespace {
25+
constexpr chip::EndpointId kNetworkCommissioningEndpointSecondary = 0xFFFE;
26+
} // anonymous namespace
27+
2328
int main(int argc, char * argv[])
2429
{
25-
VerifyOrDie(ChipLinuxAppInit(argc, argv, AppOptions::GetOptions()) == 0);
30+
VerifyOrDie(
31+
ChipLinuxAppInit(argc, argv, AppOptions::GetOptions(), chip::MakeOptional(kNetworkCommissioningEndpointSecondary)) == 0);
2632
VerifyOrDie(InitBindingHandlers() == CHIP_NO_ERROR);
2733

2834
LinuxDeviceOptions::GetInstance().dacProvider = AppOptions::GetDACProvider();

examples/bridge-app/linux/main.cpp

+1-84
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include <app-common/zap-generated/ids/Clusters.h>
2525
#include <app/ConcreteAttributePath.h>
2626
#include <app/EventLogging.h>
27-
#include <app/clusters/network-commissioning/network-commissioning.h>
2827
#include <app/reporting/reporting.h>
2928
#include <app/util/af-types.h>
3029
#include <app/util/af.h>
@@ -39,17 +38,6 @@
3938
#include <setup_payload/QRCodeSetupPayloadGenerator.h>
4039
#include <setup_payload/SetupPayload.h>
4140

42-
#if CHIP_DEVICE_LAYER_TARGET_DARWIN
43-
#include <platform/Darwin/NetworkCommissioningDriver.h>
44-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
45-
#include <platform/Darwin/WiFi/NetworkCommissioningWiFiDriver.h>
46-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
47-
#endif // CHIP_DEVICE_LAYER_TARGET_DARWIN
48-
49-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
50-
#include <platform/Linux/NetworkCommissioningDriver.h>
51-
#endif // CHIP_DEVICE_LAYER_TARGET_LINUX
52-
5341
#include <pthread.h>
5442
#include <sys/ioctl.h>
5543

@@ -82,36 +70,6 @@ Device * gDevices[CHIP_DEVICE_CONFIG_DYNAMIC_ENDPOINT_COUNT];
8270
std::vector<Room *> gRooms;
8371
std::vector<Action *> gActions;
8472

85-
#if CHIP_DEVICE_LAYER_TARGET_LINUX
86-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
87-
DeviceLayer::NetworkCommissioning::LinuxThreadDriver sThreadDriver;
88-
#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
89-
90-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
91-
DeviceLayer::NetworkCommissioning::LinuxWiFiDriver sWiFiDriver;
92-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
93-
94-
DeviceLayer::NetworkCommissioning::LinuxEthernetDriver sEthernetDriver;
95-
#endif // CHIP_DEVICE_LAYER_TARGET_LINUX
96-
97-
#if CHIP_DEVICE_LAYER_TARGET_DARWIN
98-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
99-
DeviceLayer::NetworkCommissioning::DarwinWiFiDriver sWiFiDriver;
100-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
101-
102-
DeviceLayer::NetworkCommissioning::DarwinEthernetDriver sEthernetDriver;
103-
#endif // CHIP_DEVICE_LAYER_TARGET_DARWIN
104-
105-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
106-
Clusters::NetworkCommissioning::Instance sWiFiNetworkCommissioningInstance(0, &sWiFiDriver);
107-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
108-
109-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
110-
Clusters::NetworkCommissioning::Instance sThreadNetworkCommissioningInstance(0, &sThreadDriver);
111-
#endif // CHIP_DEVICE_CONFIG_ENABLE_THREAD
112-
113-
Clusters::NetworkCommissioning::Instance sEthernetNetworkCommissioningInstance(0, &sEthernetDriver);
114-
11573
const int16_t minMeasuredValue = -27315;
11674
const int16_t maxMeasuredValue = 32766;
11775
const int16_t initialMeasuredValue = 100;
@@ -769,48 +727,7 @@ bool emberAfActionsClusterInstantActionCallback(app::CommandHandler * commandObj
769727
return true;
770728
}
771729

772-
void ApplicationInit()
773-
{
774-
const bool kThreadEnabled = {
775-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
776-
LinuxDeviceOptions::GetInstance().mThread
777-
#else
778-
false
779-
#endif
780-
};
781-
782-
const bool kWiFiEnabled = {
783-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
784-
LinuxDeviceOptions::GetInstance().mWiFi
785-
#else
786-
false
787-
#endif
788-
};
789-
790-
if (kThreadEnabled && kWiFiEnabled)
791-
{
792-
// Just use the Thread one.
793-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
794-
sThreadNetworkCommissioningInstance.Init();
795-
#endif
796-
}
797-
else if (kThreadEnabled)
798-
{
799-
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
800-
sThreadNetworkCommissioningInstance.Init();
801-
#endif
802-
}
803-
else if (kWiFiEnabled)
804-
{
805-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
806-
sWiFiNetworkCommissioningInstance.Init();
807-
#endif
808-
}
809-
else
810-
{
811-
sEthernetNetworkCommissioningInstance.Init();
812-
}
813-
}
730+
void ApplicationInit() {}
814731

815732
const EmberAfDeviceType gBridgedOnOffDeviceTypes[] = { { DEVICE_TYPE_LO_ON_OFF_LIGHT, DEVICE_VERSION_DEFAULT },
816733
{ DEVICE_TYPE_BRIDGED_NODE, DEVICE_VERSION_DEFAULT } };

0 commit comments

Comments
 (0)