Skip to content

Commit

Permalink
[Telink] adopt WiFi driver
Browse files Browse the repository at this point in the history
  • Loading branch information
serhiiSalamakha committed Jan 22, 2025
1 parent 41eab7f commit ae6c519
Show file tree
Hide file tree
Showing 5 changed files with 193 additions and 49 deletions.
16 changes: 8 additions & 8 deletions src/platform/telink/wifi/ConnectivityManagerImplWiFi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ ConnectivityManager::WiFiStationMode ConnectivityManagerImplWiFi::_GetWiFiStatio
{
if (mStationMode != ConnectivityManager::WiFiStationMode::kWiFiStationMode_ApplicationControlled)
{
mStationMode = (WiFiManager::StationStatus::DISABLED == WiFiManager().Instance().GetStationStatus())
mStationMode = (WiFiManager::StationStatus::DISABLED == WiFiManager::Instance().GetStationStatus())
? ConnectivityManager::WiFiStationMode::kWiFiStationMode_Disabled
: ConnectivityManager::WiFiStationMode::kWiFiStationMode_Enabled;
}
Expand All @@ -60,7 +60,7 @@ CHIP_ERROR ConnectivityManagerImplWiFi::_SetWiFiStationMode(ConnectivityManager:

bool ConnectivityManagerImplWiFi::_IsWiFiStationEnabled(void)
{
return (WiFiManager::StationStatus::DISABLED <= WiFiManager().Instance().GetStationStatus());
return (WiFiManager::StationStatus::DISABLED <= WiFiManager::Instance().GetStationStatus());
}

bool ConnectivityManagerImplWiFi::_IsWiFiStationApplicationControlled(void)
Expand All @@ -70,7 +70,7 @@ bool ConnectivityManagerImplWiFi::_IsWiFiStationApplicationControlled(void)

bool ConnectivityManagerImplWiFi::_IsWiFiStationConnected(void)
{
return (WiFiManager::StationStatus::CONNECTED == WiFiManager().Instance().GetStationStatus());
return (WiFiManager::StationStatus::CONNECTED == WiFiManager::Instance().GetStationStatus());
}

System::Clock::Timeout ConnectivityManagerImplWiFi::_GetWiFiStationReconnectInterval(void)
Expand All @@ -88,14 +88,14 @@ bool ConnectivityManagerImplWiFi::_IsWiFiStationProvisioned(void)
{
// from Matter perspective `provisioned` means that the supplicant has been provided
// with SSID and password (doesn't matter if valid or not)
return (WiFiManager::StationStatus::CONNECTING <= WiFiManager().Instance().GetStationStatus());
return (WiFiManager::StationStatus::CONNECTING <= WiFiManager::Instance().GetStationStatus());
}

void ConnectivityManagerImplWiFi::_ClearWiFiStationProvision(void)
{
if (_IsWiFiStationProvisioned())
{
if (CHIP_NO_ERROR != WiFiManager().Instance().ClearStationProvisioningData())
if (CHIP_NO_ERROR != WiFiManager::Instance().ClearStationProvisioningData())
{
ChipLogError(DeviceLayer, "Cannot clear WiFi station provisioning data");
}
Expand All @@ -104,9 +104,9 @@ void ConnectivityManagerImplWiFi::_ClearWiFiStationProvision(void)

bool ConnectivityManagerImplWiFi::_CanStartWiFiScan()
{
return (WiFiManager::StationStatus::DISABLED != WiFiManager().Instance().GetStationStatus() &&
WiFiManager::StationStatus::SCANNING != WiFiManager().Instance().GetStationStatus() &&
WiFiManager::StationStatus::CONNECTING != WiFiManager().Instance().GetStationStatus());
return (WiFiManager::StationStatus::DISABLED != WiFiManager::Instance().GetStationStatus() &&
WiFiManager::StationStatus::SCANNING != WiFiManager::Instance().GetStationStatus() &&
WiFiManager::StationStatus::CONNECTING != WiFiManager::Instance().GetStationStatus());
}

void ConnectivityManagerImplWiFi::_OnWiFiStationProvisionChange()
Expand Down
25 changes: 16 additions & 9 deletions src/platform/telink/wifi/TelinkWiFiDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@

#include "TelinkWiFiDriver.h"

#include <stdint.h>

#include <platform/KeyValueStoreManager.h>

#include <lib/support/CodeUtils.h>
#include <lib/support/SafeInt.h>
#include <lib/support/TypeTraits.h>
#include <platform/CHIPDeviceLayer.h>

using namespace ::chip;
Expand Down Expand Up @@ -103,8 +106,8 @@ CHIP_ERROR TelinkWiFiDriver::Init(NetworkStatusChangeCallback * networkStatusCha

if (mStagingNetwork.IsConfigured())
{
WiFiManager::ConnectionHandling handling{ [] { Instance().OnNetworkStatusChanged(Status::kSuccess); },
[] { Instance().OnNetworkStatusChanged(Status::kUnknownError); },
WiFiManager::ConnectionHandling handling{ [](const wifi_conn_status & connStatus) {
Instance().OnNetworkConnStatusChanged(connStatus); },
System::Clock::Seconds32{ kWiFiConnectNetworkTimeoutSeconds } };
ReturnErrorOnFailure(
WiFiManager::Instance().Connect(mStagingNetwork.GetSsidSpan(), mStagingNetwork.GetPassSpan(), handling));
Expand All @@ -113,8 +116,11 @@ CHIP_ERROR TelinkWiFiDriver::Init(NetworkStatusChangeCallback * networkStatusCha
return CHIP_NO_ERROR;
}

void TelinkWiFiDriver::OnNetworkStatusChanged(Status status)
void TelinkWiFiDriver::OnNetworkConnStatusChanged(const wifi_conn_status & connStatus)
{
// TODO: check if we can report more accurate errors
Status status = connStatus ? Status::kUnknownError : Status::kSuccess;

if (status == Status::kSuccess)
{
ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Enabled);
Expand All @@ -136,8 +142,9 @@ void TelinkWiFiDriver::OnNetworkStatusChanged(Status status)
ssid = WiFiManager::Instance().GetWantedNetwork().ssid;
ssidLen = WiFiManager::Instance().GetWantedNetwork().ssidLen;
}
mpNetworkStatusChangeCallback->OnNetworkingStatusChange(status, MakeOptional(ByteSpan(wifiInfo.mSsid, wifiInfo.mSsidLen)),
NullOptional);
mpNetworkStatusChangeCallback->OnNetworkingStatusChange(status, MakeOptional(ByteSpan(ssid, ssidLen)),
connStatus ? MakeOptional(static_cast<int32_t>(connStatus))
: NullOptional);
}

if (mpConnectCallback)
Expand Down Expand Up @@ -179,8 +186,8 @@ CHIP_ERROR TelinkWiFiDriver::RevertConfiguration()

if (mStagingNetwork.IsConfigured())
{
WiFiManager::ConnectionHandling handling{ [] { Instance().OnNetworkStatusChanged(Status::kSuccess); },
[] { Instance().OnNetworkStatusChanged(Status::kUnknownError); },
WiFiManager::ConnectionHandling handling{ [](const wifi_conn_status & connStatus) {
Instance().OnNetworkConnStatusChanged(connStatus); },
System::Clock::Seconds32{ kWiFiConnectNetworkTimeoutSeconds } };
ReturnErrorOnFailure(
WiFiManager::Instance().Connect(mStagingNetwork.GetSsidSpan(), mStagingNetwork.GetPassSpan(), handling));
Expand Down Expand Up @@ -233,8 +240,8 @@ Status TelinkWiFiDriver::ReorderNetwork(ByteSpan networkId, uint8_t index, Mutab
void TelinkWiFiDriver::ConnectNetwork(ByteSpan networkId, ConnectCallback * callback)
{
Status status = Status::kSuccess;
WiFiManager::ConnectionHandling handling{ [] { Instance().OnNetworkStatusChanged(Status::kSuccess); },
[] { Instance().OnNetworkStatusChanged(Status::kUnknownError); },
WiFiManager::ConnectionHandling handling{ [](const wifi_conn_status & connStatus) {
Instance().OnNetworkConnStatusChanged(connStatus); },
System::Clock::Seconds32{ kWiFiConnectNetworkTimeoutSeconds } };

VerifyOrExit(mpConnectCallback == nullptr, status = Status::kUnknownError);
Expand Down
2 changes: 1 addition & 1 deletion src/platform/telink/wifi/TelinkWiFiDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ class TelinkWiFiDriver final : public WiFiDriver
return sInstance;
}

void OnNetworkStatusChanged(Status status);
void OnNetworkConnStatusChanged(const wifi_conn_status & connStatus);
void OnScanWiFiNetworkResult(const WiFiScanResponse & result);
void OnScanWiFiNetworkDone(const WiFiManager::ScanDoneStatus & status);

Expand Down
Loading

0 comments on commit ae6c519

Please sign in to comment.