Skip to content

Commit 9a51a1d

Browse files
committed
Fix the error that PAF can't start multiple times in using chip-tool interactive mode
Fix the code style problems Signed-off-by: Lo,Chin-Ran <chin-ran.lo@nxp.com>
1 parent 04f9022 commit 9a51a1d

15 files changed

+76
-53
lines changed

src/app/server/CommissioningWindowManager.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void CommissioningWindowManager::OnPlatformEvent(const DeviceLayer::ChipDeviceEv
7373
mServer->GetBleLayerObject()->CloseAllBleConnections();
7474
#endif
7575
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
76-
chip::WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer()->Shutdown(
76+
chip::WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer().Shutdown(
7777
[](uint32_t id, WiFiPAF::WiFiPafRole role) { DeviceLayer::ConnectivityMgr().WiFiPAFShutdown(id, role); });
7878
#endif
7979
}

src/controller/CHIPDeviceController.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ void DeviceCommissioner::Shutdown()
572572
}
573573
#endif // CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY
574574
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
575-
WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer()->Shutdown(
575+
WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer().Shutdown(
576576
[](uint32_t id, WiFiPAF::WiFiPafRole role) { DeviceLayer::ConnectivityMgr().WiFiPAFShutdown(id, role); });
577577
#endif
578578

@@ -843,7 +843,9 @@ CHIP_ERROR DeviceCommissioner::EstablishPASEConnection(NodeId remoteDeviceId, Re
843843
VerifyOrReturnValue(!connDiscriminator.IsShortDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT,
844844
ChipLogError(Controller, "Error, Long discriminator is required"));
845845
uint16_t discriminator = connDiscriminator.GetLongValue();
846-
WiFiPAF::WiFiPAFSession sessionInfo = { .nodeId = nodeId, .discriminator = discriminator };
846+
WiFiPAF::WiFiPAFSession sessionInfo = { .role = WiFiPAF::WiFiPafRole::kWiFiPafRole_Subscriber,
847+
.nodeId = nodeId,
848+
.discriminator = discriminator };
847849
ReturnErrorOnFailure(
848850
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(WiFiPAF::PafInfoAccess::kAccNodeInfo, sessionInfo));
849851
DeviceLayer::ConnectivityMgr().WiFiPAFSubscribe(discriminator, reinterpret_cast<void *>(this),

src/controller/SetUpCodePairer.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,9 @@ CHIP_ERROR SetUpCodePairer::StartDiscoverOverWiFiPAF(SetupPayload & payload)
264264
VerifyOrReturnValue(!connDiscriminator.IsShortDiscriminator(), CHIP_ERROR_INVALID_ARGUMENT,
265265
ChipLogError(Controller, "Error, Long discriminator is required"));
266266
uint16_t discriminator = connDiscriminator.GetLongValue();
267-
WiFiPAF::WiFiPAFSession sessionInfo = { .nodeId = mRemoteId, .discriminator = discriminator };
267+
WiFiPAF::WiFiPAFSession sessionInfo = { .role = WiFiPAF::WiFiPafRole::kWiFiPafRole_Subscriber,
268+
.nodeId = mRemoteId,
269+
.discriminator = discriminator };
268270
ReturnErrorOnFailure(
269271
DeviceLayer::ConnectivityMgr().GetWiFiPAF()->AddPafSession(WiFiPAF::PafInfoAccess::kAccNodeInfo, sessionInfo));
270272
CHIP_ERROR err = DeviceLayer::ConnectivityMgr().WiFiPAFSubscribe(discriminator, (void *) this, OnWiFiPAFSubscribeComplete,

src/include/platform/ConnectivityManager.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ inline void ConnectivityManager::ResetThreadNetworkDiagnosticsCounts()
528528
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
529529
inline WiFiPAF::WiFiPAFLayer * ConnectivityManager::GetWiFiPAF()
530530
{
531-
return static_cast<ImplClass *>(this)->_GetWiFiPAF();
531+
return &WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer();
532532
}
533533

534534
inline void ConnectivityManager::WiFiPafSetApFreq(const uint16_t freq)

src/include/platform/internal/GenericPlatformManagerImpl.ipp

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ void GenericPlatformManagerImpl<ImplClass>::_Shutdown()
154154

155155
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
156156
ChipLogProgress(DeviceLayer, "WiFi-PAF Layer shutdown");
157-
WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer()->Shutdown(
157+
WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer().Shutdown(
158158
[](uint32_t id, WiFiPAF::WiFiPafRole role) { DeviceLayer::ConnectivityMgr().WiFiPAFShutdown(id, role); });
159159
#endif
160160

src/platform/Linux/ConnectivityManagerImpl.cpp

+26-24
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ ConnectivityManagerImpl ConnectivityManagerImpl::sInstance;
105105
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
106106
static void StopSignalHandler(int signum)
107107
{
108-
WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer()->Shutdown([](uint32_t id, WiFiPAF::WiFiPafRole role) {
108+
WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer().Shutdown([](uint32_t id, WiFiPAF::WiFiPafRole role) {
109109
switch (role)
110110
{
111111
case WiFiPAF::WiFiPafRole::kWiFiPafRole_Publisher:
@@ -165,7 +165,7 @@ CHIP_ERROR ConnectivityManagerImpl::_Init()
165165
}
166166
#endif
167167
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
168-
pmWiFiPAF = WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer();
168+
pmWiFiPAF = &WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer();
169169
pmWiFiPAF->Init(&DeviceLayer::SystemLayer());
170170

171171
struct sigaction sa = {};
@@ -185,20 +185,21 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
185185
GenericConnectivityManagerImpl_Thread<ConnectivityManagerImpl>::_OnPlatformEvent(event);
186186
#endif
187187
#if CHIP_DEVICE_CONFIG_ENABLE_WIFIPAF
188+
WiFiPAFLayer & WiFiPafLayer = WiFiPAF::WiFiPAFLayer::GetWiFiPAFLayer();
188189
switch (event->Type)
189190
{
190191
case DeviceEventType::kCHIPoWiFiPAFReceived: {
191192
ChipLogProgress(DeviceLayer, "WiFi-PAF: event: kCHIPoWiFiPAFReceived");
192-
WiFiPAF::WiFiPAFSession RxInfo;
193+
WiFiPAFSession RxInfo;
193194
memcpy(&RxInfo, &event->CHIPoWiFiPAFReceived.SessionInfo, sizeof(WiFiPAF::WiFiPAFSession));
194-
_GetWiFiPAF()->OnWiFiPAFMessageReceived(RxInfo, System::PacketBufferHandle::Adopt(event->CHIPoWiFiPAFReceived.Data));
195+
WiFiPafLayer.OnWiFiPAFMessageReceived(RxInfo, System::PacketBufferHandle::Adopt(event->CHIPoWiFiPAFReceived.Data));
195196
break;
196197
}
197198
case DeviceEventType::kCHIPoWiFiPAFConnected: {
198199
ChipLogProgress(DeviceLayer, "WiFi-PAF: event: kCHIPoWiFiPAFConnected");
199200
WiFiPAF::WiFiPAFSession SessionInfo;
200201
memcpy(&SessionInfo, &event->CHIPoWiFiPAFReceived.SessionInfo, sizeof(WiFiPAF::WiFiPAFSession));
201-
_GetWiFiPAF()->HandleTransportConnectionInitiated(SessionInfo, mOnPafSubscribeComplete, mAppState, mOnPafSubscribeError);
202+
WiFiPafLayer.HandleTransportConnectionInitiated(SessionInfo, mOnPafSubscribeComplete, mAppState, mOnPafSubscribeError);
202203
break;
203204
}
204205
case DeviceEventType::kCHIPoWiFiPAFCancelConnect: {
@@ -214,7 +215,7 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
214215
ChipLogProgress(DeviceLayer, "WiFi-PAF: event: kCHIPoWiFiPAFWriteDone");
215216
WiFiPAF::WiFiPAFSession TxInfo;
216217
memcpy(&TxInfo, &event->CHIPoWiFiPAFReceived.SessionInfo, sizeof(WiFiPAF::WiFiPAFSession));
217-
_GetWiFiPAF()->HandleWriteConfirmed(TxInfo, event->CHIPoWiFiPAFReceived.result);
218+
WiFiPafLayer.HandleWriteConfirmed(TxInfo, event->CHIPoWiFiPAFReceived.result);
218219
break;
219220
}
220221
}
@@ -941,8 +942,9 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFPublish(ConnectivityManager::WiFiPAF
941942
wpa_supplicant_1_interface_call_nanpublish_sync(mWpaSupplicant.iface, args, &publish_id, nullptr, &err.GetReceiver());
942943

943944
ChipLogProgress(DeviceLayer, "WiFi-PAF: publish_id: %u ! ", publish_id);
944-
WiFiPAFSession sessionInfo = { .id = publish_id };
945-
ReturnErrorOnFailure(_GetWiFiPAF()->AddPafSession(PafInfoAccess::kAccSessionId, sessionInfo));
945+
WiFiPAFSession sessionInfo = { .role = WiFiPafRole::kWiFiPafRole_Publisher, .id = publish_id };
946+
WiFiPAFLayer & WiFiPafLayer = WiFiPAFLayer::GetWiFiPAFLayer();
947+
ReturnErrorOnFailure(WiFiPafLayer.AddPafSession(PafInfoAccess::kAccSessionId, sessionInfo));
946948
InArgs.publish_id = publish_id;
947949

948950
g_signal_connect(mWpaSupplicant.iface, "nanreplied",
@@ -974,11 +976,6 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFCancelPublish(uint32_t PublishId)
974976
wpa_supplicant_1_interface_call_nancancel_publish_sync(mWpaSupplicant.iface, PublishId, nullptr, &err.GetReceiver());
975977
return CHIP_NO_ERROR;
976978
}
977-
978-
WiFiPAF::WiFiPAFLayer * ConnectivityManagerImpl::_GetWiFiPAF()
979-
{
980-
return pmWiFiPAF;
981-
}
982979
#endif
983980

984981
void ConnectivityManagerImpl::StartNonConcurrentWiFiManagement()
@@ -1465,8 +1462,9 @@ void ConnectivityManagerImpl::OnDiscoveryResult(GVariant * discov_info)
14651462
/*
14661463
Error Checking
14671464
*/
1468-
WiFiPAFSession sessionInfo = { .discriminator = pPublishSSI->DevInfo };
1469-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
1465+
WiFiPAFSession sessionInfo = { .discriminator = pPublishSSI->DevInfo };
1466+
WiFiPAFLayer & WiFiPafLayer = WiFiPAFLayer::GetWiFiPAFLayer();
1467+
auto pPafInfo = WiFiPafLayer.GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
14701468
if (pPafInfo == nullptr)
14711469
{
14721470
ChipLogError(DeviceLayer, "WiFi-PAF: DiscoveryResult, no valid session with discriminator: %u", pPublishSSI->DevInfo);
@@ -1564,8 +1562,9 @@ void ConnectivityManagerImpl::OnReplied(GVariant * reply_info)
15641562
SetupDiscriminator);
15651563
return;
15661564
}
1567-
WiFiPAFSession sessionInfo = { .id = publish_id };
1568-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccSessionId, sessionInfo);
1565+
WiFiPAFSession sessionInfo = { .id = publish_id };
1566+
WiFiPAFLayer & WiFiPafLayer = WiFiPAFLayer::GetWiFiPAFLayer();
1567+
auto pPafInfo = WiFiPafLayer.GetPAFInfo(PafInfoAccess::kAccSessionId, sessionInfo);
15691568
if (pPafInfo == nullptr)
15701569
{
15711570
ChipLogError(DeviceLayer, "WiFi-PAF: OnReplied, no valid session with publish_id: %d", publish_id);
@@ -1590,7 +1589,7 @@ void ConnectivityManagerImpl::OnReplied(GVariant * reply_info)
15901589
pPafInfo->id = publish_id;
15911590
pPafInfo->peer_id = peer_subscribe_id;
15921591
memcpy(pPafInfo->peer_addr, peer_addr, sizeof(uint8_t) * 6);
1593-
_GetWiFiPAF()->HandleTransportConnectionInitiated(*pPafInfo);
1592+
WiFiPafLayer.HandleTransportConnectionInitiated(*pPafInfo);
15941593
}
15951594

15961595
void ConnectivityManagerImpl::OnNanReceive(GVariant * obj)
@@ -1641,15 +1640,17 @@ void ConnectivityManagerImpl::OnNanReceive(GVariant * obj)
16411640
void ConnectivityManagerImpl::OnNanPublishTerminated(guint public_id, gchar * reason)
16421641
{
16431642
ChipLogProgress(Controller, "WiFi-PAF: Publish terminated (%u, %s)", public_id, reason);
1644-
WiFiPAFSession sessionInfo = { .id = public_id };
1645-
_GetWiFiPAF()->RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
1643+
WiFiPAFSession sessionInfo = { .id = public_id };
1644+
WiFiPAFLayer & WiFiPafLayer = WiFiPAFLayer::GetWiFiPAFLayer();
1645+
WiFiPafLayer.RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
16461646
}
16471647

16481648
void ConnectivityManagerImpl::OnNanSubscribeTerminated(guint subscribe_id, gchar * reason)
16491649
{
16501650
ChipLogProgress(Controller, "WiFi-PAF: Subscription terminated (%u, %s)", subscribe_id, reason);
1651-
WiFiPAFSession sessionInfo = { .id = subscribe_id };
1652-
_GetWiFiPAF()->RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
1651+
WiFiPAFSession sessionInfo = { .id = subscribe_id };
1652+
WiFiPAFLayer & WiFiPafLayer = WiFiPAFLayer::GetWiFiPAFLayer();
1653+
WiFiPafLayer.RmPafSession(PafInfoAccess::kAccSessionId, sessionInfo);
16531654
/*
16541655
Indicate the connection event
16551656
*/
@@ -1707,8 +1708,9 @@ CHIP_ERROR ConnectivityManagerImpl::_WiFiPAFSubscribe(const uint16_t & connDiscr
17071708
mOnPafSubscribeComplete = onSuccess;
17081709
mOnPafSubscribeError = onError;
17091710

1710-
WiFiPAFSession sessionInfo = { .discriminator = PafPublish_ssi.DevInfo };
1711-
auto pPafInfo = _GetWiFiPAF()->GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
1711+
WiFiPAFSession sessionInfo = { .discriminator = PafPublish_ssi.DevInfo };
1712+
WiFiPAFLayer & WiFiPafLayer = WiFiPAFLayer::GetWiFiPAFLayer();
1713+
auto pPafInfo = WiFiPafLayer.GetPAFInfo(PafInfoAccess::kAccDisc, sessionInfo);
17121714
if (pPafInfo != nullptr)
17131715
{
17141716
pPafInfo->id = subscribe_id;

src/platform/Linux/ConnectivityManagerImpl.h

-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ class ConnectivityManagerImpl final : public ConnectivityManager,
152152
void OnNanPublishTerminated(guint public_id, gchar * reason);
153153
void OnNanSubscribeTerminated(guint subscribe_id, gchar * reason);
154154
CHIP_ERROR _WiFiPAFSend(const WiFiPAF::WiFiPAFSession & TxInfo, chip::System::PacketBufferHandle && msgBuf);
155-
WiFiPAF::WiFiPAFLayer * _GetWiFiPAF();
156155
void _WiFiPafSetApFreq(const uint16_t freq) { mApFreq = freq; }
157156
CHIP_ERROR _WiFiPAFShutdown(uint32_t id, WiFiPAF::WiFiPafRole role);
158157
#endif

src/transport/raw/WiFiPAF.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ CHIP_ERROR WiFiPAFBase::WiFiPAFCloseSession(WiFiPAFSession & SessionInfo)
138138
{
139139
VerifyOrReturnError(mWiFiPAFLayer->GetWiFiPAFState() != State::kNotReady, CHIP_ERROR_INCORRECT_STATE);
140140
DeviceLayer::ConnectivityMgr().WiFiPAFShutdown(SessionInfo.id, SessionInfo.role);
141+
mWiFiPAFLayer->SetWiFiPAFState(State::kInitialized);
141142

142143
return CHIP_NO_ERROR;
143144
}

src/wifipaf/WiFiPAFConfig.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
* simultaneous PAF connections the application will establish).
3737
*/
3838
#ifndef WIFIPAF_LAYER_NUM_PAF_ENDPOINTS
39-
#define WIFIPAF_LAYER_NUM_PAF_ENDPOINTS 1
39+
#define WIFIPAF_LAYER_NUM_PAF_ENDPOINTS 2
4040
#endif // WIFIPAF_LAYER_NUM_PAF_ENDPOINTS
4141

4242
#if (WIFIPAF_LAYER_NUM_PAF_ENDPOINTS < 1)

src/wifipaf/WiFiPAFEndPoint.cpp

+7-2
Original file line numberDiff line numberDiff line change
@@ -223,12 +223,10 @@ void WiFiPAFEndPoint::FinalizeClose(uint8_t oldState, uint8_t flags, CHIP_ERROR
223223

224224
// Ensure transmit queue is empty and set to NULL.
225225
mSendQueue = nullptr;
226-
227226
// Clear the session information
228227
ChipLogProgress(WiFiPAF, "Shutdown PAF session (%u, %u)", mSessionInfo.id, mSessionInfo.role);
229228
mWiFiPafLayer->mWiFiPAFTransport->WiFiPAFCloseSession(mSessionInfo);
230229
memset(&mSessionInfo, 0, sizeof(mSessionInfo));
231-
232230
// Fire application's close callback if we haven't already, and it's not suppressed.
233231
if (oldState != kState_Closing && (flags & kWiFiPAFCloseFlag_SuppressCallback) == 0)
234232
{
@@ -254,6 +252,7 @@ void WiFiPAFEndPoint::FinalizeClose(uint8_t oldState, uint8_t flags, CHIP_ERROR
254252
Free();
255253
}
256254
}
255+
ClearAll();
257256
}
258257

259258
void WiFiPAFEndPoint::DoCloseCallback(uint8_t state, uint8_t flags, CHIP_ERROR err)
@@ -1264,5 +1263,11 @@ void WiFiPAFEndPoint::HandleSendAckTimeout(chip::System::Layer * systemLayer, vo
12641263
}
12651264
}
12661265

1266+
void WiFiPAFEndPoint::ClearAll()
1267+
{
1268+
memset(reinterpret_cast<uint8_t *>(this), 0, sizeof(WiFiPAFEndPoint));
1269+
return;
1270+
}
1271+
12671272
} /* namespace WiFiPAF */
12681273
} /* namespace chip */

src/wifipaf/WiFiPAFEndPoint.h

+1
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ class DLL_EXPORT WiFiPAFEndPoint
183183
void FreePAFtpEngine();
184184

185185
void QueueTx(PacketBufferHandle && data, PacketType_t type);
186+
void ClearAll();
186187
};
187188

188189
} /* namespace WiFiPAF */

src/wifipaf/WiFiPAFLayer.cpp

+26-16
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
#include "WiFiPAFConfig.h"
2727
#include "WiFiPAFEndPoint.h"
2828
#include "WiFiPAFError.h"
29-
#include <cassert>
3029
#include <lib/core/CHIPEncoding.h>
3130

3231
#undef CHIP_WIFIPAF_LAYER_DEBUG_LOGGING_ENABLED
@@ -314,9 +313,9 @@ CHIP_ERROR WiFiPAFLayer::HandleWriteConfirmed(WiFiPAF::WiFiPAFSession & TxInfo,
314313
}
315314

316315
static WiFiPAFLayer sInstance;
317-
WiFiPAFLayer * WiFiPAFLayer::GetWiFiPAFLayer()
316+
WiFiPAFLayer & WiFiPAFLayer::GetWiFiPAFLayer()
318317
{
319-
return &sInstance;
318+
return sInstance;
320319
}
321320

322321
CHIP_ERROR WiFiPAFLayer::NewEndPoint(WiFiPAFEndPoint ** retEndPoint, WiFiPAFSession & SessionInfo, WiFiPafRole role)
@@ -356,7 +355,7 @@ CHIP_ERROR WiFiPAFLayer::HandleTransportConnectionInitiated(WiFiPAF::WiFiPAFSess
356355

357356
void WiFiPAFLayer::OnEndPointConnectComplete(WiFiPAFEndPoint * endPoint, CHIP_ERROR err)
358357
{
359-
assert(endPoint != nullptr);
358+
VerifyOrDie(endPoint != nullptr);
360359
if (endPoint->mOnPafSubscribeComplete != nullptr)
361360
{
362361
endPoint->mOnPafSubscribeComplete(endPoint->mAppState);
@@ -392,29 +391,29 @@ WiFiPAFLayer::GetHighestSupportedProtocolVersion(const PAFTransportCapabilitiesR
392391
return retVersion;
393392
}
394393

395-
#define INVALID_PAF_SESSION_ID 0xff
394+
inline constexpr uint8_t kInvalidActiveWiFiPafSessionId = UINT8_MAX;
396395
void WiFiPAFLayer::InitialPafInfo()
397396
{
398397
for (uint8_t i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
399398
{
400-
cleanPafInfo(mPafInfoVect[i]);
399+
CleanPafInfo(mPafInfoVect[i]);
401400
}
402401
}
403402

404-
void WiFiPAFLayer::cleanPafInfo(WiFiPAFSession & SessionInfo)
403+
void WiFiPAFLayer::CleanPafInfo(WiFiPAFSession & SessionInfo)
405404
{
406405
memset(&SessionInfo, 0, sizeof(WiFiPAFSession));
407-
SessionInfo.id = UINT32_MAX;
408-
SessionInfo.peer_id = UINT32_MAX;
409-
SessionInfo.nodeId = UINT32_MAX;
406+
SessionInfo.id = kUndefinedWiFiPafSessionId;
407+
SessionInfo.peer_id = kUndefinedWiFiPafSessionId;
408+
SessionInfo.nodeId = kUndefinedNodeId;
410409
SessionInfo.discriminator = UINT16_MAX;
411410
return;
412411
}
413412

414413
CHIP_ERROR WiFiPAFLayer::AddPafSession(PafInfoAccess accType, WiFiPAFSession & SessionInfo)
415414
{
416415
uint8_t i;
417-
uint8_t eSlotId = INVALID_PAF_SESSION_ID;
416+
uint8_t eSlotId = kInvalidActiveWiFiPafSessionId;
418417
WiFiPAFSession * pPafSession = nullptr;
419418

420419
// Check if the session has existed
@@ -426,7 +425,7 @@ CHIP_ERROR WiFiPAFLayer::AddPafSession(PafInfoAccess accType, WiFiPAFSession & S
426425
case PafInfoAccess::kAccNodeInfo:
427426
if (pPafSession->nodeId == SessionInfo.nodeId)
428427
{
429-
assert(pPafSession->discriminator == SessionInfo.discriminator);
428+
VerifyOrDie(pPafSession->discriminator == SessionInfo.discriminator);
430429
// Already exist
431430
return CHIP_NO_ERROR;
432431
}
@@ -441,13 +440,17 @@ CHIP_ERROR WiFiPAFLayer::AddPafSession(PafInfoAccess accType, WiFiPAFSession & S
441440
default:
442441
return CHIP_ERROR_NOT_IMPLEMENTED;
443442
};
444-
if ((pPafSession->id == UINT32_MAX) && (pPafSession->nodeId == UINT32_MAX) && (pPafSession->discriminator == UINT16_MAX))
443+
if ((pPafSession->id == kUndefinedWiFiPafSessionId) && (pPafSession->nodeId == kUndefinedNodeId) &&
444+
(pPafSession->discriminator == UINT16_MAX))
445+
{
445446
eSlotId = i;
447+
}
446448
}
447449
// Add the session if available
448-
if (eSlotId != INVALID_PAF_SESSION_ID)
450+
if (eSlotId != kInvalidActiveWiFiPafSessionId)
449451
{
450-
pPafSession = &mPafInfoVect[eSlotId];
452+
pPafSession = &mPafInfoVect[eSlotId];
453+
pPafSession->role = SessionInfo.role;
451454
switch (accType)
452455
{
453456
case PafInfoAccess::kAccNodeInfo:
@@ -483,7 +486,7 @@ CHIP_ERROR WiFiPAFLayer::RmPafSession(PafInfoAccess accType, WiFiPAFSession & Se
483486
{
484487
ChipLogProgress(WiFiPAF, "Removing session with id: %u", pPafSession->id);
485488
// Clear the slot
486-
cleanPafInfo(*pPafSession);
489+
CleanPafInfo(*pPafSession);
487490
return CHIP_NO_ERROR;
488491
}
489492
break;
@@ -503,6 +506,13 @@ WiFiPAFSession * WiFiPAFLayer::GetPAFInfo(PafInfoAccess accType, WiFiPAFSession
503506
for (i = 0; i < WIFIPAF_LAYER_NUM_PAF_ENDPOINTS; i++)
504507
{
505508
pPafSession = &mPafInfoVect[i];
509+
if (pPafSession->role == kWiFiPafRole_Publisher)
510+
{
511+
if (pPafSession->id != kUndefinedWiFiPafSessionId)
512+
return pPafSession;
513+
else
514+
continue;
515+
}
506516
switch (accType)
507517
{
508518
case PafInfoAccess::kAccSessionId:

0 commit comments

Comments
 (0)