Skip to content

Commit

Permalink
Support network commissioning attributes for P6 (#17625)
Browse files Browse the repository at this point in the history
  • Loading branch information
praveenCY authored Apr 22, 2022
1 parent 253ff55 commit 70a499d
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/platform/P6/ConnectivityManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ void ConnectivityManagerImpl::wlan_event_cb(cy_wcm_event_t event, cy_wcm_event_d
case CY_WCM_EVENT_DISCONNECTED:
ChipLogProgress(DeviceLayer, "CY_WCM_EVENT_DISCONNECTED");
ConnectivityMgrImpl().ChangeWiFiStationState(kWiFiStationState_Disconnecting);
NetworkCommissioning::P6WiFiDriver::GetInstance().SetLastDisconnectReason(WLC_E_SUP_DEAUTH);
break;
case CY_WCM_EVENT_IP_CHANGED:
ChipLogProgress(DeviceLayer, "CY_WCM_EVENT_IP_CHANGED");
Expand Down Expand Up @@ -323,6 +324,7 @@ void ConnectivityManagerImpl::ChangeWiFiStationState(WiFiStationState newState)
ChipLogProgress(DeviceLayer, "WiFi station state change: %s -> %s", WiFiStationStateToStr(mWiFiStationState),
WiFiStationStateToStr(newState));
mWiFiStationState = newState;
SystemLayer().ScheduleLambda([]() { NetworkCommissioning::P6WiFiDriver::GetInstance().OnNetworkStatusChange(); });
}
}

Expand Down
7 changes: 7 additions & 0 deletions src/platform/P6/NetworkCommissioningDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,11 @@ class P6WiFiDriver final : public WiFiDriver

void OnConnectWiFiNetwork();
void OnScanWiFiNetworkDone();
void OnNetworkStatusChange();

CHIP_ERROR SetLastDisconnectReason(int32_t reason);
int32_t GetLastDisconnectReason();

static P6WiFiDriver & GetInstance()
{
static P6WiFiDriver instance;
Expand All @@ -133,6 +138,8 @@ class P6WiFiDriver final : public WiFiDriver
WiFiNetwork mStagingNetwork;
ScanCallback * mpScanCallback;
ConnectCallback * mpConnectCallback;
NetworkStatusChangeCallback * mpStatusChangeCallback = nullptr;
int32_t mLastDisconnectedReason;
};

} // namespace NetworkCommissioning
Expand Down
48 changes: 44 additions & 4 deletions src/platform/P6/NetworkCommissioningWiFiDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <string>

using namespace ::chip;
using namespace ::chip::DeviceLayer::Internal;

namespace chip {
namespace DeviceLayer {
Expand All @@ -42,10 +43,11 @@ uint8_t NumAP; // no of network scanned
CHIP_ERROR P6WiFiDriver::Init(NetworkStatusChangeCallback * networkStatusChangeCallback)
{
CHIP_ERROR err;
size_t ssidLen = 0;
size_t credentialsLen = 0;
mpScanCallback = nullptr;
mpConnectCallback = nullptr;
size_t ssidLen = 0;
size_t credentialsLen = 0;
mpScanCallback = nullptr;
mpConnectCallback = nullptr;
mpStatusChangeCallback = networkStatusChangeCallback;

err = PersistedStorage::KeyValueStoreMgr().Get(kWiFiCredentialsKeyName, mSavedNetwork.credentials,
sizeof(mSavedNetwork.credentials), &credentialsLen);
Expand All @@ -63,11 +65,13 @@ CHIP_ERROR P6WiFiDriver::Init(NetworkStatusChangeCallback * networkStatusChangeC
mSavedNetwork.credentialsLen = credentialsLen;
mSavedNetwork.ssidLen = ssidLen;
mStagingNetwork = mSavedNetwork;

return err;
}

CHIP_ERROR P6WiFiDriver::Shutdown()
{
mpStatusChangeCallback = nullptr;
return CHIP_NO_ERROR;
}

Expand Down Expand Up @@ -342,6 +346,42 @@ CHIP_ERROR GetConnectedNetwork(Network & network)
return CHIP_NO_ERROR;
}

void P6WiFiDriver::OnNetworkStatusChange()
{
Network configuredNetwork;
bool staEnabled = false, staConnected = false;
VerifyOrReturn(P6Utils::IsStationEnabled(staEnabled) == CHIP_NO_ERROR);
VerifyOrReturn(staEnabled && mpStatusChangeCallback != nullptr);
CHIP_ERROR err = GetConnectedNetwork(configuredNetwork);
if (err != CHIP_NO_ERROR)
{
ChipLogError(DeviceLayer, "Failed to get configured network when updating network status: %s", err.AsString());
return;
}
VerifyOrReturn(P6Utils::IsStationConnected(staConnected) == CHIP_NO_ERROR);
if (staConnected)
{
mpStatusChangeCallback->OnNetworkingStatusChange(
Status::kSuccess, MakeOptional(ByteSpan(configuredNetwork.networkID, configuredNetwork.networkIDLen)),
MakeOptional(GetLastDisconnectReason()));
return;
}
mpStatusChangeCallback->OnNetworkingStatusChange(
Status::kUnknownError, MakeOptional(ByteSpan(configuredNetwork.networkID, configuredNetwork.networkIDLen)),
MakeOptional(GetLastDisconnectReason()));
}

CHIP_ERROR P6WiFiDriver::SetLastDisconnectReason(int32_t reason)
{
mLastDisconnectedReason = reason;
return CHIP_NO_ERROR;
}

int32_t P6WiFiDriver::GetLastDisconnectReason()
{
return mLastDisconnectedReason;
}

size_t P6WiFiDriver::WiFiNetworkIterator::Count()
{
return mDriver->mStagingNetwork.ssidLen == 0 ? 0 : 1;
Expand Down
6 changes: 6 additions & 0 deletions src/platform/P6/P6Utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@ CHIP_ERROR P6Utils::IsAPEnabled(bool & apEnabled)
return CHIP_NO_ERROR;
}

CHIP_ERROR P6Utils::IsStationEnabled(bool & staEnabled)
{
staEnabled = (WiFiMode == WIFI_MODE_STA || WiFiMode == WIFI_MODE_APSTA);
return CHIP_NO_ERROR;
}

bool P6Utils::IsStationProvisioned(void)
{
wifi_config_t stationConfig;
Expand Down
2 changes: 2 additions & 0 deletions src/platform/P6/P6Utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "whd_wlioctl.h"
#include <cy_wcm.h>
#include <platform/internal/CHIPDeviceLayerInternal.h>
#include <whd_events_int.h>

typedef struct
{
Expand Down Expand Up @@ -190,6 +191,7 @@ class P6Utils
{
public:
static CHIP_ERROR IsAPEnabled(bool & apEnabled);
static CHIP_ERROR IsStationEnabled(bool & staEnabled);
static bool IsStationProvisioned(void);
static CHIP_ERROR IsStationConnected(bool & connected);
static CHIP_ERROR StartWiFiLayer(void);
Expand Down

0 comments on commit 70a499d

Please sign in to comment.