Skip to content
This repository was archived by the owner on Dec 20, 2023. It is now read-only.

Commit 715fa56

Browse files
author
Jay Logue
authored
Merge pull request #478 from openweave/feature/wireless-reg-prov-support
Network Provisioning: Support for wireless regulatory provisioning
2 parents 9708816 + 6c52b04 commit 715fa56

21 files changed

+1381
-70
lines changed

src/device-manager/WeaveDeviceManager.cpp

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,6 +1842,77 @@ WEAVE_ERROR WeaveDeviceManager::SetRendezvousMode(uint16_t modeFlags, void* appR
18421842
return err;
18431843
}
18441844

1845+
WEAVE_ERROR WeaveDeviceManager::GetWirelessRegulatoryConfig(void* appReqState, GetWirelessRegulatoryConfigCompleteFunct onComplete,
1846+
ErrorFunct onError)
1847+
{
1848+
WEAVE_ERROR err = WEAVE_NO_ERROR;
1849+
PacketBuffer* msgBuf = NULL;
1850+
1851+
if (mOpState != kOpState_Idle)
1852+
return WEAVE_ERROR_INCORRECT_STATE;
1853+
1854+
VerifyOrExit(onComplete != NULL && onError != NULL, err = WEAVE_ERROR_INVALID_ARGUMENT);
1855+
1856+
msgBuf = PacketBuffer::New();
1857+
VerifyOrExit(msgBuf != NULL, err = WEAVE_ERROR_NO_MEMORY);
1858+
1859+
mAppReqState = appReqState;
1860+
mOnComplete.GetWirelessRegulatoryConfig = onComplete;
1861+
mOnError = onError;
1862+
mOpState = kOpState_GetWirelessRegulatoryConfig;
1863+
1864+
err = SendRequest(kWeaveProfile_NetworkProvisioning, NetworkProvisioning::kMsgType_GetWirelessRegulatoryConfig, msgBuf,
1865+
HandleNetworkProvisioningResponse);
1866+
msgBuf = NULL;
1867+
1868+
exit:
1869+
if (msgBuf != NULL)
1870+
PacketBuffer::Free(msgBuf);
1871+
if (err != WEAVE_NO_ERROR)
1872+
ClearOpState();
1873+
return err;
1874+
}
1875+
1876+
WEAVE_ERROR WeaveDeviceManager::SetWirelessRegulatoryConfig(const WirelessRegConfig *regConfig, void* appReqState,
1877+
CompleteFunct onComplete, ErrorFunct onError)
1878+
{
1879+
WEAVE_ERROR err = WEAVE_NO_ERROR;
1880+
PacketBuffer* msgBuf = NULL;
1881+
TLVWriter writer;
1882+
1883+
if (mOpState != kOpState_Idle)
1884+
return WEAVE_ERROR_INCORRECT_STATE;
1885+
1886+
VerifyOrExit(onComplete != NULL && onError != NULL, err = WEAVE_ERROR_INVALID_ARGUMENT);
1887+
1888+
msgBuf = PacketBuffer::New();
1889+
VerifyOrExit(msgBuf != NULL, err = WEAVE_ERROR_NO_MEMORY);
1890+
1891+
writer.Init(msgBuf);
1892+
1893+
err = regConfig->Encode(writer);
1894+
SuccessOrExit(err);
1895+
1896+
err = writer.Finalize();
1897+
SuccessOrExit(err);
1898+
1899+
mAppReqState = appReqState;
1900+
mOnComplete.General = onComplete;
1901+
mOnError = onError;
1902+
mOpState = kOpState_SetWirelessRegulatoryConfig;
1903+
1904+
err = SendRequest(kWeaveProfile_NetworkProvisioning, NetworkProvisioning::kMsgType_SetWirelessRegulatoryConfig, msgBuf,
1905+
HandleNetworkProvisioningResponse);
1906+
msgBuf = NULL;
1907+
1908+
exit:
1909+
if (msgBuf != NULL)
1910+
PacketBuffer::Free(msgBuf);
1911+
if (err != WEAVE_NO_ERROR)
1912+
ClearOpState();
1913+
return err;
1914+
}
1915+
18451916
WEAVE_ERROR WeaveDeviceManager::GetLastNetworkProvisioningResult(void* appReqState, CompleteFunct onComplete, ErrorFunct onError)
18461917
{
18471918
WEAVE_ERROR err = WEAVE_NO_ERROR;
@@ -3968,6 +4039,20 @@ void WeaveDeviceManager::HandleNetworkProvisioningResponse(ExchangeContext *ec,
39684039
delete[] netInfoList;
39694040
}
39704041

4042+
else if (profileId == kWeaveProfile_NetworkProvisioning && msgType == NetworkProvisioning::kMgrType_GetWirelessRegulatoryConfigComplete)
4043+
{
4044+
VerifyOrExit(opState == kOpState_GetWirelessRegulatoryConfig, err = WEAVE_ERROR_INVALID_MESSAGE_TYPE);
4045+
4046+
WirelessRegConfig regConfig;
4047+
4048+
regConfig.Init();
4049+
4050+
err = regConfig.DecodeInPlace(payload);
4051+
SuccessOrExit(err);
4052+
4053+
devMgr->mOnComplete.GetWirelessRegulatoryConfig(devMgr, devMgr->mAppReqState, &regConfig);
4054+
}
4055+
39714056
else if (profileId == kWeaveProfile_Common && msgType == nl::Weave::Profiles::Common::kMsgType_StatusReport)
39724057
{
39734058
DeviceStatus devStatus;

src/device-manager/WeaveDeviceManager.h

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include <Weave/Profiles/device-description/DeviceDescription.h>
3636
#include <Weave/Profiles/network-provisioning/NetworkProvisioning.h>
3737
#include <Weave/Profiles/network-provisioning/NetworkInfo.h>
38+
#include <Weave/Profiles/network-provisioning/WirelessRegConfig.h>
3839
#include <Weave/Profiles/security/WeaveSecurity.h>
3940
#include <Weave/Profiles/security/WeaveCASE.h>
4041
#include <Weave/Profiles/security/WeaveSig.h>
@@ -89,6 +90,7 @@ typedef void (*ConnectionClosedFunc)(WeaveDeviceManager *deviceMgr, void *appReq
8990
typedef void (*PairTokenCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState, const uint8_t *tokenPairingBundle, uint32_t tokenPairingBunldeLen);
9091
typedef void (*UnpairTokenCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState);
9192
typedef void (*GetCameraAuthDataCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState, const char *macAddress, const char *authData);
93+
typedef void (*GetWirelessRegulatoryConfigCompleteFunct)(WeaveDeviceManager *deviceMgr, void *appReqState, const WirelessRegConfig *regConfig);
9294
};
9395

9496
class NL_DLL_EXPORT WeaveDeviceManager : private Security::CASE::WeaveCASEAuthDelegate
@@ -209,6 +211,8 @@ class NL_DLL_EXPORT WeaveDeviceManager : private Security::CASE::WeaveCASEAuthDe
209211
ErrorFunct onError);
210212
WEAVE_ERROR GetRendezvousMode(void* appReqState, GetRendezvousModeCompleteFunct onComplete, ErrorFunct onError);
211213
WEAVE_ERROR SetRendezvousMode(uint16_t modeFlags, void* appReqState, CompleteFunct onComplete, ErrorFunct onError);
214+
WEAVE_ERROR GetWirelessRegulatoryConfig(void* appReqState, GetWirelessRegulatoryConfigCompleteFunct onComplete, ErrorFunct onError);
215+
WEAVE_ERROR SetWirelessRegulatoryConfig(const WirelessRegConfig *regConfig, void* appReqState, CompleteFunct onComplete, ErrorFunct onError);
212216
WEAVE_ERROR GetLastNetworkProvisioningResult(void* appReqState, CompleteFunct onComplete, ErrorFunct onError);
213217

214218
// ----- Fabric Provisioning -----
@@ -300,36 +304,38 @@ class NL_DLL_EXPORT WeaveDeviceManager : private Security::CASE::WeaveCASEAuthDe
300304
kOpState_UnpairToken = 41,
301305
kOpState_GetCameraAuthData = 42,
302306
kOpState_EnumerateDevices = 43,
303-
kOpState_RemotePassiveRendezvousTimedOut = 44
307+
kOpState_RemotePassiveRendezvousTimedOut = 44,
308+
kOpState_GetWirelessRegulatoryConfig = 45,
309+
kOpState_SetWirelessRegulatoryConfig = 46,
304310
};
305311

306312
enum ConnectionState
307313
{
308-
kConnectionState_NotConnected = 0,
309-
kConnectionState_WaitDeviceConnect = 1,
310-
kConnectionState_IdentifyDevice = 2,
311-
kConnectionState_ConnectDevice = 3,
312-
kConnectionState_StartSession = 4,
313-
kConnectionState_ReenableConnectionMonitor = 5,
314-
kConnectionState_Connected = 6,
315-
kConnectionState_IdentifyRemoteDevice = 7
314+
kConnectionState_NotConnected = 0,
315+
kConnectionState_WaitDeviceConnect = 1,
316+
kConnectionState_IdentifyDevice = 2,
317+
kConnectionState_ConnectDevice = 3,
318+
kConnectionState_StartSession = 4,
319+
kConnectionState_ReenableConnectionMonitor = 5,
320+
kConnectionState_Connected = 6,
321+
kConnectionState_IdentifyRemoteDevice = 7
316322
};
317323

318324
enum
319325
{
320-
kMaxPairingCodeLength = 16,
326+
kMaxPairingCodeLength = 16,
321327

322-
kConRetryInterval = 500, // ms
323-
kEnumerateDevicesRetryInterval = 500, // ms
324-
kSessionRetryInterval = 1000, // ms
325-
kMaxSessionRetryCount = 20,
328+
kConRetryInterval = 500, // ms
329+
kEnumerateDevicesRetryInterval = 500, // ms
330+
kSessionRetryInterval = 1000, // ms
331+
kMaxSessionRetryCount = 20,
326332
};
327333

328334
enum
329335
{
330-
kAuthType_None = 0,
331-
kAuthType_PASEWithPairingCode = 1,
332-
kAuthType_CASEWithAccessToken = 2
336+
kAuthType_None = 0,
337+
kAuthType_PASEWithPairingCode = 1,
338+
kAuthType_CASEWithAccessToken = 2
333339
};
334340

335341
enum
@@ -370,6 +376,7 @@ class NL_DLL_EXPORT WeaveDeviceManager : private Security::CASE::WeaveCASEAuthDe
370376
UnpairTokenCompleteFunct UnpairToken;
371377
GetCameraAuthDataCompleteFunct GetCameraAuthData;
372378
DeviceEnumerationResponseFunct DeviceEnumeration;
379+
GetWirelessRegulatoryConfigCompleteFunct GetWirelessRegulatoryConfig;
373380
} mOnComplete;
374381
CompleteFunct mOnRemotePassiveRendezvousComplete;
375382
ErrorFunct mOnError;

0 commit comments

Comments
 (0)