Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Silabs] Implement the WifiInterface class structure for all Wi-Fi platforms #37810

Merged
2 changes: 1 addition & 1 deletion examples/platform/silabs/BaseApplication.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ CHIP_ERROR BaseApplication::Init()
* Wait for the WiFi to be initialized
*/
ChipLogProgress(AppServer, "APP: Wait WiFi Init");
while (!IsStationReady())
while (!WifiInterface::GetInstance().IsStationReady())
{
osDelay(pdMS_TO_TICKS(10));
}
Expand Down
2 changes: 1 addition & 1 deletion examples/platform/silabs/MatterConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ CHIP_ERROR SilabsMatterConfig::InitMatter(const char * appName)
#ifdef SL_WIFI
CHIP_ERROR SilabsMatterConfig::InitWiFi(void)
{
return InitWiFiStack();
return WifiInterface::GetInstance().InitWiFiStack();
}
#endif // SL_WIFI

Expand Down
7 changes: 4 additions & 3 deletions src/platform/silabs/ConfigurationManagerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ namespace chip {
namespace DeviceLayer {

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

ConfigurationManagerImpl & ConfigurationManagerImpl::GetDefaultInstance()
{
Expand Down Expand Up @@ -290,14 +291,14 @@ void ConfigurationManagerImpl::DoFactoryReset(intptr_t arg)
PersistedStorage::KeyValueStoreMgrImpl().ErasePartition();

#if CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
error = TriggerDisconnection();
error = WifiInterface::GetInstance().TriggerDisconnection();
if (error != CHIP_NO_ERROR)
{
ChipLogError(DeviceLayer, "TriggerDisconnection() failed: %s", chip::ErrorStr(error));
}

ChipLogProgress(DeviceLayer, "Clearing WiFi provision");
ClearWifiCredentials();
WifiInterface::GetInstance().ClearWifiCredentials();
#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION

// Restart the system.
Expand All @@ -317,7 +318,7 @@ CHIP_ERROR ConfigurationManagerImpl::GetPrimaryWiFiMACAddress(uint8_t * buf)
VerifyOrReturnError(buf != nullptr, CHIP_ERROR_INVALID_ARGUMENT);

MutableByteSpan byteSpan(buf, kPrimaryMACAddressLength);
return GetMacAddress(SL_WFX_STA_INTERFACE, byteSpan);
return WifiInterface::GetInstance().GetMacAddress(SL_WFX_STA_INTERFACE, byteSpan);
}
#endif

Expand Down
38 changes: 20 additions & 18 deletions src/platform/silabs/ConnectivityManagerImpl_WIFI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ using namespace ::chip;
using namespace ::chip::Inet;
using namespace ::chip::System;
using namespace ::chip::DeviceLayer::Internal;
using namespace ::chip::DeviceLayer::Silabs;

namespace chip {
namespace DeviceLayer {
Expand All @@ -65,7 +66,7 @@ CHIP_ERROR ConnectivityManagerImpl::_Init()
// TODO Initialize the Chip Addressing and Routing Module.

// Ensure that station mode is enabled.
ConfigureStationMode();
WifiInterface::GetInstance().ConfigureStationMode();

err = DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL);

Expand All @@ -84,11 +85,11 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)

switch (event->Platform.WFXSystemEvent.data.genericMsgEvent.header.id)
{
case to_underlying(WifiEvent::kStartUp):
case to_underlying(WifiInterface::WifiEvent::kStartUp):
ChipLogProgress(DeviceLayer, "WIFI_EVENT_STA_START");
DriveStationState();
break;
case to_underlying(WifiEvent::kConnect):
case to_underlying(WifiInterface::WifiEvent::kConnect):
ChipLogProgress(DeviceLayer, "WIFI_EVENT_STA_CONNECTED");
if (mWiFiStationState == kWiFiStationState_Connecting)
{
Expand All @@ -103,7 +104,7 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
}
DriveStationState();
break;
case to_underlying(WifiEvent::kDisconnect):
case to_underlying(WifiInterface::WifiEvent::kDisconnect):
ChipLogProgress(DeviceLayer, "WIFI_EVENT_STA_DISCONNECTED");
if (mWiFiStationState == kWiFiStationState_Connecting)
{
Expand All @@ -112,9 +113,9 @@ void ConnectivityManagerImpl::_OnPlatformEvent(const ChipDeviceEvent * event)
DriveStationState();
break;

case to_underlying(WifiEvent::kGotIPv4):
case to_underlying(WifiEvent::kLostIP):
case to_underlying(WifiEvent::kGotIPv6):
case to_underlying(WifiInterface::WifiEvent::kGotIPv4):
case to_underlying(WifiInterface::WifiEvent::kLostIP):
case to_underlying(WifiInterface::WifiEvent::kGotIPv6):
ChipLogProgress(DeviceLayer, "IP Change Event");
UpdateInternetConnectivityState();
break;
Expand All @@ -128,7 +129,7 @@ ConnectivityManager::WiFiStationMode ConnectivityManagerImpl::_GetWiFiStationMod
{
if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled)
{
if (IsStationModeEnabled())
if (WifiInterface::GetInstance().IsStationModeEnabled())
{
mWiFiStationMode = kWiFiStationMode_Enabled;
}
Expand All @@ -143,12 +144,12 @@ ConnectivityManager::WiFiStationMode ConnectivityManagerImpl::_GetWiFiStationMod

bool ConnectivityManagerImpl::_IsWiFiStationProvisioned(void)
{
return IsWifiProvisioned();
return WifiInterface::GetInstance().IsWifiProvisioned();
}

bool ConnectivityManagerImpl::_IsWiFiStationEnabled(void)
{
return IsStationModeEnabled();
return WifiInterface::GetInstance().IsStationModeEnabled();
}

CHIP_ERROR ConnectivityManagerImpl::_SetWiFiStationMode(ConnectivityManager::WiFiStationMode val)
Expand Down Expand Up @@ -176,7 +177,7 @@ void ConnectivityManagerImpl::_ClearWiFiStationProvision(void)
{
if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled)
{
ClearWifiCredentials();
WifiInterface::GetInstance().ClearWifiCredentials();

DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL);
}
Expand Down Expand Up @@ -222,14 +223,14 @@ void ConnectivityManagerImpl::DriveStationState()
if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled)
{
// Ensure that the Wifi task is started.
CHIP_ERROR error = StartWifiTask();
CHIP_ERROR error = WifiInterface::GetInstance().StartWifiTask();
VerifyOrReturn(error == CHIP_NO_ERROR, ChipLogError(DeviceLayer, "StartWifiTask() failed: %s", ErrorStr(error)));

// Ensure that station mode is enabled in the WiFi layer.
ConfigureStationMode();
WifiInterface::GetInstance().ConfigureStationMode();
}

stationConnected = IsStationConnected();
stationConnected = WifiInterface::GetInstance().IsStationConnected();

// If the station interface is currently connected ...
if (stationConnected)
Expand All @@ -255,7 +256,7 @@ void ConnectivityManagerImpl::DriveStationState()
{
ChipLogProgress(DeviceLayer, "Disconnecting WiFi station interface");

CHIP_ERROR error = TriggerDisconnection();
CHIP_ERROR error = WifiInterface::GetInstance().TriggerDisconnection();
SuccessOrExitAction(error, ChipLogError(DeviceLayer, "TriggerDisconnection() failed: %s", ErrorStr(error)));

ChangeWiFiStationState(kWiFiStationState_Disconnecting);
Expand Down Expand Up @@ -299,7 +300,8 @@ void ConnectivityManagerImpl::DriveStationState()
if (mWiFiStationState != kWiFiStationState_Connecting)
{
ChipLogProgress(DeviceLayer, "Attempting to connect WiFi");
SuccessOrExitAction(ConnectToAccessPoint(), ChipLogError(DeviceLayer, "ConnectToAccessPoint() failed"));
SuccessOrExitAction(WifiInterface::GetInstance().ConnectToAccessPoint(),
ChipLogError(DeviceLayer, "ConnectToAccessPoint() failed"));

ChangeWiFiStationState(kWiFiStationState_Connecting);
}
Expand Down Expand Up @@ -376,9 +378,9 @@ void ConnectivityManagerImpl::UpdateInternetConnectivityState(void)
if (mWiFiStationState == kWiFiStationState_Connected)
{
#if CHIP_DEVICE_CONFIG_ENABLE_IPV4
haveIPv4Conn = HasAnIPv4Address();
haveIPv4Conn = WifiInterface::GetIstance().HasAnIPv4Address();
#endif /* CHIP_DEVICE_CONFIG_ENABLE_IPV4 */
haveIPv6Conn = HasAnIPv6Address();
haveIPv6Conn = WifiInterface::GetInstance().HasAnIPv6Address();
}

// If the internet connectivity state has changed...
Expand Down
24 changes: 12 additions & 12 deletions src/platform/silabs/DiagnosticDataProviderImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBssId(MutableByteSpan & BssId)

VerifyOrReturnError(BssId.size() >= bssIdSize, CHIP_ERROR_BUFFER_TOO_SMALL);

if (GetAccessPointInfo(ap) == CHIP_NO_ERROR)
if (Silabs::WifiInterface::GetInstance().GetAccessPointInfo(ap) == CHIP_NO_ERROR)
{
memcpy(BssId.data(), ap.bssid, bssIdSize);
BssId.reduce_size(bssIdSize);
Expand All @@ -355,7 +355,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiSecurityType(app::Clusters::WiFiNe
using app::Clusters::WiFiNetworkDiagnostics::SecurityTypeEnum;

wfx_wifi_scan_result_t ap = { 0 };
CHIP_ERROR error = GetAccessPointInfo(ap);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointInfo(ap);
if (error == CHIP_NO_ERROR)
{
// TODO: Is this actually right? Do the wfx_wifi_scan_result_t values
Expand All @@ -375,7 +375,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiVersion(app::Clusters::WiFiNetwork
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiChannelNumber(uint16_t & channelNumber)
{
wfx_wifi_scan_result_t ap = { 0 };
CHIP_ERROR error = GetAccessPointInfo(ap);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointInfo(ap);
if (error == CHIP_NO_ERROR)
{
channelNumber = ap.chan;
Expand All @@ -387,7 +387,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiChannelNumber(uint16_t & channelNu
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiRssi(int8_t & rssi)
{
wfx_wifi_scan_result_t ap = { 0 };
CHIP_ERROR error = GetAccessPointInfo(ap);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointInfo(ap);
if (error == CHIP_NO_ERROR)
{
rssi = ap.rssi;
Expand All @@ -399,7 +399,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiRssi(int8_t & rssi)
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBeaconLostCount(uint32_t & beaconLostCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
beaconLostCount = extra_info.beacon_lost_count;
Expand All @@ -416,7 +416,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiCurrentMaxRate(uint64_t & currentM
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketMulticastRxCount(uint32_t & packetMulticastRxCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
packetMulticastRxCount = extra_info.mcast_rx_count;
Expand All @@ -428,7 +428,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketMulticastRxCount(uint32_t &
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketMulticastTxCount(uint32_t & packetMulticastTxCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
packetMulticastTxCount = extra_info.mcast_tx_count;
Expand All @@ -440,7 +440,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketMulticastTxCount(uint32_t &
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketUnicastRxCount(uint32_t & packetUnicastRxCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
packetUnicastRxCount = extra_info.ucast_rx_count;
Expand All @@ -452,7 +452,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketUnicastRxCount(uint32_t & pa
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketUnicastTxCount(uint32_t & packetUnicastTxCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
packetUnicastTxCount = extra_info.ucast_tx_count;
Expand All @@ -464,7 +464,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiPacketUnicastTxCount(uint32_t & pa
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiOverrunCount(uint64_t & overrunCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
overrunCount = extra_info.overrun_count;
Expand All @@ -476,7 +476,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiOverrunCount(uint64_t & overrunCou
CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBeaconRxCount(uint32_t & beaconRxCount)
{
wfx_wifi_scan_ext_t extra_info = { 0 };
CHIP_ERROR error = GetAccessPointExtendedInfo(extra_info);
CHIP_ERROR error = Silabs::WifiInterface::GetInstance().GetAccessPointExtendedInfo(extra_info);
if (error == CHIP_NO_ERROR)
{
beaconRxCount = extra_info.beacon_rx_count;
Expand All @@ -487,7 +487,7 @@ CHIP_ERROR DiagnosticDataProviderImpl::GetWiFiBeaconRxCount(uint32_t & beaconRxC

CHIP_ERROR DiagnosticDataProviderImpl::ResetWiFiNetworkDiagnosticsCounts()
{
return ResetCounters();
return Silabs::WifiInterface::GetInstance().ResetCounters();
}
#endif // SL_WIFI

Expand Down
20 changes: 10 additions & 10 deletions src/platform/silabs/NetworkCommissioningWiFiDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

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

namespace chip {
namespace DeviceLayer {
Expand Down Expand Up @@ -138,14 +139,13 @@ CHIP_ERROR SlWiFiDriver::ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen,
{
if (ConnectivityMgr().IsWiFiStationProvisioned())
{
ChipLogProgress(DeviceLayer, "Disconecting for current wifi");
ReturnErrorOnFailure(TriggerDisconnection());
ChipLogProgress(DeviceLayer, "Disconnecting for current wifi");
ReturnErrorOnFailure(WifiInterface::GetInstance().TriggerDisconnection());
}
ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled));

// Set the wifi configuration
WifiCredentials wifiConfig;
wifiConfig.Clear();
WifiInterface::WifiCredentials wifiConfig;

VerifyOrReturnError(ssidLen <= WFX_MAX_SSID_LENGTH, CHIP_ERROR_BUFFER_TOO_SMALL);
memcpy(wifiConfig.ssid, ssid, ssidLen);
Expand All @@ -159,7 +159,7 @@ CHIP_ERROR SlWiFiDriver::ConnectWiFiNetwork(const char * ssid, uint8_t ssidLen,

ChipLogProgress(NetworkProvisioning, "Setting up connection for WiFi SSID: %.*s", static_cast<int>(ssidLen), ssid);
// Configure the WFX WiFi interface.
SetWifiCredentials(wifiConfig);
WifiInterface::GetInstance().SetWifiCredentials(wifiConfig);
ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Disabled));
ReturnErrorOnFailure(ConnectivityMgr().SetWiFiStationMode(ConnectivityManager::kWiFiStationMode_Enabled));
return CHIP_NO_ERROR;
Expand All @@ -181,7 +181,7 @@ void SlWiFiDriver::UpdateNetworkingStatus()
}

ByteSpan networkId = ByteSpan((const unsigned char *) mStagingNetwork.ssid, mStagingNetwork.ssidLen);
if (!IsStationConnected())
if (!WifiInterface::GetInstance().IsStationConnected())
{
// TODO: https://github.com/project-chip/connectedhomeip/issues/26861
mpStatusChangeCallback->OnNetworkingStatusChange(Status::kUnknownError, MakeOptional(networkId),
Expand Down Expand Up @@ -261,7 +261,7 @@ chip::BitFlags<WiFiSecurity> SlWiFiDriver::ConvertSecuritytype(wfx_sec_t securit
bool SlWiFiDriver::StartScanWiFiNetworks(ByteSpan ssid)
{
ChipLogProgress(DeviceLayer, "Start Scan WiFi Networks");
CHIP_ERROR err = StartNetworkScan(ssid, OnScanWiFiNetworkDone);
CHIP_ERROR err = WifiInterface::GetInstance().StartNetworkScan(ssid, OnScanWiFiNetworkDone);

if (err != CHIP_NO_ERROR)
{
Expand Down Expand Up @@ -326,13 +326,13 @@ void SlWiFiDriver::ScanNetworks(ByteSpan ssid, WiFiDriver::ScanCallback * callba

CHIP_ERROR GetConnectedNetwork(Network & network)
{
WifiCredentials wifiConfig;
WifiInterface::WifiCredentials wifiConfig;
network.networkIDLen = 0;
network.connected = false;

// we are able to fetch the wifi provision data and STA should be connected
VerifyOrReturnError(IsStationConnected(), CHIP_ERROR_NOT_CONNECTED);
ReturnErrorOnFailure(GetWifiCredentials(wifiConfig));
VerifyOrReturnError(WifiInterface::GetInstance().IsStationConnected(), CHIP_ERROR_NOT_CONNECTED);
ReturnErrorOnFailure(WifiInterface::GetInstance().GetWifiCredentials(wifiConfig));
VerifyOrReturnError(wifiConfig.ssidLength < NetworkCommissioning::kMaxNetworkIDLen, CHIP_ERROR_BUFFER_TOO_SMALL);

network.connected = true;
Expand Down
Loading
Loading