Skip to content

Commit 30542c4

Browse files
crlonxpwoody-apple
authored andcommitted
* Add freq_list option to support multiple channels
* Add more tests in QRCode test Signed-off-by: Lo,Chin-Ran <chin-ran.lo@nxp.com>
1 parent f9f2aa3 commit 30542c4

File tree

9 files changed

+68
-21
lines changed

9 files changed

+68
-21
lines changed

examples/platform/linux/AppMain.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,10 @@ int ChipLinuxAppInit(int argc, char * const argv[], OptionSet * customOptions,
481481
if (EnsureWiFiIsStarted())
482482
{
483483
ChipLogProgress(NotSpecified, "Wi-Fi Management started");
484-
DeviceLayer::ConnectivityMgr().SetWiFiPAFAdvertisingEnabled(LinuxDeviceOptions::GetInstance().mWiFiPAF);
484+
DeviceLayer::ConnectivityManager::WiFiPAFAdvertiseParam args;
485+
args.enable = LinuxDeviceOptions::GetInstance().mWiFiPAF;
486+
args.ExtCmds = LinuxDeviceOptions::GetInstance().mWiFiPafExtCmds;
487+
DeviceLayer::ConnectivityMgr().SetWiFiPAFAdvertisingEnabled(args);
485488
}
486489
}
487490
#endif

examples/platform/linux/Options.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ OptionDef sDeviceOptionDefs[] = {
121121
{ "wifi", kNoArgument, kDeviceOption_WiFi },
122122
{ "wifi-supports-5g", kNoArgument, kDeviceOption_WiFiSupports5g },
123123
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
124-
{ "wifipaf", kNoArgument, kDeviceOption_WiFi_PAF },
124+
{ "wifipaf", kArgumentRequired, kDeviceOption_WiFi_PAF },
125125
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
126126
#endif // CHIP_DEVICE_CONFIG_ENABLE_WPA
127127
#if CHIP_ENABLE_OPENTHREAD
@@ -197,9 +197,10 @@ const char * sDeviceOptionHelp =
197197
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
198198
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
199199
"\n"
200-
" --wifipaf\n"
200+
" --wifipaf freq_list=<freq_1>,<freq_2>... \n"
201201
" Enable Wi-Fi PAF via wpa_supplicant.\n"
202-
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
202+
" Give an empty string if not setting freq_list: \"\"\n"
203+
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFIPAFs
203204
#if CHIP_ENABLE_OPENTHREAD
204205
"\n"
205206
" --thread\n"
@@ -603,6 +604,7 @@ bool HandleOption(const char * aProgram, OptionSet * aOptions, int aIdentifier,
603604
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
604605
case kDeviceOption_WiFi_PAF: {
605606
LinuxDeviceOptions::GetInstance().mWiFiPAF = true;
607+
LinuxDeviceOptions::GetInstance().mWiFiPafExtCmds = aValue;
606608
break;
607609
}
608610
#endif

examples/platform/linux/Options.h

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ struct LinuxDeviceOptions
5151
bool mThread = false;
5252
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
5353
bool mWiFiPAF = false;
54+
const char * mWiFiPafExtCmds = nullptr;
5455
#endif
5556
#if CHIP_DEVICE_CONFIG_ENABLE_BOTH_COMMISSIONER_AND_COMMISSIONEE || CHIP_DEVICE_ENABLE_PORT_PARAMS
5657
uint16_t securedDevicePort = CHIP_PORT;

src/app/server/CommissioningWindowManager.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,10 @@ void CommissioningWindowManager::OnPlatformEvent(const DeviceLayer::ChipDeviceEv
7373
mServer->GetBleLayerObject()->CloseAllBleConnections();
7474
#endif
7575
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
76-
DeviceLayer::ConnectivityMgr().SetWiFiPAFAdvertisingEnabled(false);
76+
DeviceLayer::ConnectivityManager::WiFiPAFAdvertiseParam args;
77+
args.enable = false;
78+
args.ExtCmds = nullptr;
79+
DeviceLayer::ConnectivityMgr().SetWiFiPAFAdvertisingEnabled(args);
7780
#endif
7881
}
7982
else if (event->Type == DeviceLayer::DeviceEventType::kFailSafeTimerExpired)

src/include/platform/ConnectivityManager.h

+15-3
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,9 @@ class ConnectivityManager
175175
void ClearWiFiStationProvision();
176176
CHIP_ERROR GetAndLogWiFiStatsCounters();
177177
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
178-
CHIP_ERROR SetWiFiPAFAdvertisingEnabled(bool val);
178+
struct WiFiPAFAdvertiseParam;
179179

180+
CHIP_ERROR SetWiFiPAFAdvertisingEnabled(WiFiPAFAdvertiseParam &args);
180181
typedef void (*OnConnectionCompleteFunct)(void * appState);
181182
typedef void (*OnConnectionErrorFunct)(void * appState, CHIP_ERROR err);
182183
CHIP_ERROR WiFiPAFConnect(const SetupDiscriminator & connDiscriminator, void * appState, OnConnectionCompleteFunct onSuccess,
@@ -282,6 +283,17 @@ struct ConnectivityManager::SEDIntervalsConfig
282283
System::Clock::Milliseconds32 IdleIntervalMS;
283284
};
284285

286+
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
287+
struct ConnectivityManager::WiFiPAFAdvertiseParam
288+
{
289+
/* To enable/disable WiFiPAF Commissioning */
290+
bool enable;
291+
/* The optional commands */
292+
const char* ExtCmds;
293+
};
294+
#endif
295+
296+
285297
/**
286298
* Returns a reference to the public interface of the ConnectivityManager singleton object.
287299
*
@@ -422,9 +434,9 @@ inline CHIP_ERROR ConnectivityManager::GetAndLogWiFiStatsCounters()
422434
}
423435

424436
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
425-
inline CHIP_ERROR ConnectivityManager::SetWiFiPAFAdvertisingEnabled(bool val)
437+
inline CHIP_ERROR ConnectivityManager::SetWiFiPAFAdvertisingEnabled(WiFiPAFAdvertiseParam &args)
426438
{
427-
return static_cast<ImplClass *>(this)->_SetWiFiPAFAdvertisingEnabled(val);
439+
return static_cast<ImplClass *>(this)->_SetWiFiPAFAdvertisingEnabled(args);
428440
}
429441

430442
inline CHIP_ERROR ConnectivityManager::WiFiPAFConnect(const SetupDiscriminator & connDiscriminator, void * appState,

src/include/platform/internal/GenericConnectivityManagerImpl_WiFi.h

-3
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,6 @@ class GenericConnectivityManagerImpl_WiFi
7777
bool _CanStartWiFiScan();
7878
void _OnWiFiScanDone();
7979
void _OnWiFiStationProvisionChange();
80-
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
81-
CHIP_ERROR _SetWiFiPAFAdvertisingEnabled(bool val);
82-
#endif
8380
// TODO ICD rework: ambiguous declaration of _SetPollingInterval when thread and wifi are both build together
8481
#if CHIP_CONFIG_ENABLE_ICD_SERVER && !CHIP_DEVICE_CONFIG_ENABLE_THREAD
8582
CHIP_ERROR _SetPollingInterval(System::Clock::Milliseconds32 pollingInterval);

src/platform/Linux/ConnectivityManagerImpl.cpp

+17-7
Original file line numberDiff line numberDiff line change
@@ -822,11 +822,11 @@ const char srv_name[] = "_matterc._udp";
822822
/*
823823
NAN-USD Service Protocol Type: ref: Table 58 of Wi-Fi Aware Specificaiton
824824
*/
825-
#define MAX_PAF_PUBLISH_SSI_BUFLEN 128
825+
#define MAX_PAF_PUBLISH_SSI_BUFLEN 512
826826
#define MAX_PAF_TX_SSI_BUFLEN 2048
827827
#define NAN_SRV_PROTO_MATTER 3
828828
#define NAM_PUBLISH_PERIOD 300u
829-
#define NAN_PUBLISH_SSI_TAG "ssi="
829+
#define NAN_PUBLISH_SSI_TAG " ssi="
830830

831831
#pragma pack(push, 1)
832832
struct PAFPublishSSI
@@ -837,14 +837,22 @@ struct PAFPublishSSI
837837
uint16_t VendorId;
838838
};
839839
#pragma pack(pop)
840-
CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFPublish()
840+
CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFPublish(ConnectivityManager::WiFiPAFAdvertiseParam &InArgs)
841841
{
842842
CHIP_ERROR ret;
843843
GAutoPtr<GError> err;
844844
gchar args[MAX_PAF_PUBLISH_SSI_BUFLEN];
845845
gint publish_id;
846+
size_t req_len;
846847

847848
snprintf(args, sizeof(args), "service_name=%s srv_proto_type=%u ttl=%u ", srv_name, NAN_SRV_PROTO_MATTER, NAM_PUBLISH_PERIOD);
849+
req_len = strlen(args)+strlen(InArgs.ExtCmds);
850+
if ((InArgs.ExtCmds != nullptr) &&
851+
(MAX_PAF_PUBLISH_SSI_BUFLEN > req_len)) {
852+
strcat(args, InArgs.ExtCmds);
853+
} else {
854+
ChipLogError(DeviceLayer, "Input cmd is too long: limit:%d, req: %lu", MAX_PAF_PUBLISH_SSI_BUFLEN, req_len);
855+
}
848856

849857
struct PAFPublishSSI PafPublish_ssi;
850858
VerifyOrReturnError(
@@ -860,7 +868,9 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFPublish()
860868
{
861869
PafPublish_ssi.VendorId = 0;
862870
}
863-
strcat(args, NAN_PUBLISH_SSI_TAG);
871+
if (MAX_PAF_PUBLISH_SSI_BUFLEN > strlen(args)+strlen(NAN_PUBLISH_SSI_TAG)) {
872+
strcat(args, NAN_PUBLISH_SSI_TAG);
873+
}
864874
ret = Encoding::BytesToUppercaseHexString((uint8_t *) &PafPublish_ssi, sizeof(PafPublish_ssi), &args[strlen(args)],
865875
MAX_PAF_PUBLISH_SSI_BUFLEN - strlen(args));
866876
VerifyOrReturnError(ret == CHIP_NO_ERROR, ret);
@@ -887,11 +897,11 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFCancelPublish()
887897
return CHIP_NO_ERROR;
888898
}
889899

890-
CHIP_ERROR ConnectivityManagerImpl::_SetWiFiPAFAdvertisingEnabled(bool val)
900+
CHIP_ERROR ConnectivityManagerImpl::_SetWiFiPAFAdvertisingEnabled(WiFiPAFAdvertiseParam &args)
891901
{
892-
if (val == true)
902+
if (args.enable == true)
893903
{
894-
return _WiFiPAFPublish();
904+
return _WiFiPAFPublish(args);
895905
}
896906
else
897907
{

src/platform/Linux/ConnectivityManagerImpl.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@ class ConnectivityManagerImpl final : public ConnectivityManager,
250250
OnConnectionErrorFunct mOnPafSubscribeError;
251251
Transport::WiFiPAFBase * pmWiFiPAF;
252252
void * mAppState;
253-
CHIP_ERROR _SetWiFiPAFAdvertisingEnabled(bool val);
254-
CHIP_ERROR _WiFiPAFPublish();
253+
CHIP_ERROR _SetWiFiPAFAdvertisingEnabled(WiFiPAFAdvertiseParam &args);
254+
CHIP_ERROR _WiFiPAFPublish(WiFiPAFAdvertiseParam &args);
255255
CHIP_ERROR _WiFiPAFCancelPublish();
256256
#endif
257257

src/setup_payload/tests/TestQRCode.cpp

+20-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ TEST(TestQRCode, TestRendezvousFlags)
5353
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlag::kOnNetwork);
5454
EXPECT_TRUE(CheckWriteRead(inPayload));
5555

56+
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlag::kWiFiPAF);
57+
EXPECT_TRUE(CheckWriteRead(inPayload));
58+
5659
inPayload.rendezvousInformation.SetValue(
5760
RendezvousInformationFlags(RendezvousInformationFlag::kSoftAP, RendezvousInformationFlag::kOnNetwork));
5861
EXPECT_TRUE(CheckWriteRead(inPayload));
@@ -61,9 +64,25 @@ TEST(TestQRCode, TestRendezvousFlags)
6164
RendezvousInformationFlags(RendezvousInformationFlag::kBLE, RendezvousInformationFlag::kOnNetwork));
6265
EXPECT_TRUE(CheckWriteRead(inPayload));
6366

67+
inPayload.rendezvousInformation.SetValue(
68+
RendezvousInformationFlags(RendezvousInformationFlag::kWiFiPAF, RendezvousInformationFlag::kOnNetwork));
69+
EXPECT_TRUE(CheckWriteRead(inPayload));
70+
6471
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlags(
6572
RendezvousInformationFlag::kBLE, RendezvousInformationFlag::kSoftAP, RendezvousInformationFlag::kOnNetwork));
6673
EXPECT_TRUE(CheckWriteRead(inPayload));
74+
75+
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlags(
76+
RendezvousInformationFlag::kWiFiPAF, RendezvousInformationFlag::kSoftAP, RendezvousInformationFlag::kOnNetwork));
77+
78+
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlags(
79+
RendezvousInformationFlag::kWiFiPAF, RendezvousInformationFlag::kBLE, RendezvousInformationFlag::kOnNetwork));
80+
81+
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlags(
82+
RendezvousInformationFlag::kWiFiPAF, RendezvousInformationFlag::kBLE, RendezvousInformationFlag::kSoftAP,
83+
RendezvousInformationFlag::kOnNetwork));
84+
85+
EXPECT_TRUE(CheckWriteRead(inPayload));
6786
}
6887

6988
TEST(TestQRCode, TestCommissioningFlow)
@@ -89,7 +108,7 @@ TEST(TestQRCode, TestMaximumValues)
89108
inPayload.productID = 0xFFFF;
90109
inPayload.commissioningFlow = CommissioningFlow::kCustom;
91110
inPayload.rendezvousInformation.SetValue(RendezvousInformationFlags(
92-
RendezvousInformationFlag::kBLE, RendezvousInformationFlag::kSoftAP, RendezvousInformationFlag::kOnNetwork));
111+
RendezvousInformationFlag::kWiFiPAF, RendezvousInformationFlag::kBLE, RendezvousInformationFlag::kSoftAP, RendezvousInformationFlag::kOnNetwork));
93112
inPayload.discriminator.SetLongValue(static_cast<uint16_t>((1 << kPayloadDiscriminatorFieldLengthInBits) - 1));
94113
inPayload.setUpPINCode = static_cast<uint32_t>((1 << kSetupPINCodeFieldLengthInBits) - 1);
95114

0 commit comments

Comments
 (0)