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
@@ -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));
}
2 changes: 1 addition & 1 deletion examples/platform/silabs/MatterConfig.cpp
Original file line number Diff line number Diff line change
@@ -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

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

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

ConfigurationManagerImpl & ConfigurationManagerImpl::GetDefaultInstance()
{
@@ -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.
@@ -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

38 changes: 20 additions & 18 deletions src/platform/silabs/ConnectivityManagerImpl_WIFI.cpp
Original file line number Diff line number Diff line change
@@ -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 {
@@ -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);

@@ -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)
{
@@ -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)
{
@@ -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;
@@ -128,7 +129,7 @@ ConnectivityManager::WiFiStationMode ConnectivityManagerImpl::_GetWiFiStationMod
{
if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled)
{
if (IsStationModeEnabled())
if (WifiInterface::GetInstance().IsStationModeEnabled())
{
mWiFiStationMode = kWiFiStationMode_Enabled;
}
@@ -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)
@@ -176,7 +177,7 @@ void ConnectivityManagerImpl::_ClearWiFiStationProvision(void)
{
if (mWiFiStationMode != kWiFiStationMode_ApplicationControlled)
{
ClearWifiCredentials();
WifiInterface::GetInstance().ClearWifiCredentials();

DeviceLayer::SystemLayer().ScheduleWork(DriveStationState, NULL);
}
@@ -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)
@@ -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);
@@ -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);
}
@@ -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...
24 changes: 12 additions & 12 deletions src/platform/silabs/DiagnosticDataProviderImpl.cpp
Original file line number Diff line number Diff line change
@@ -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);
@@ -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
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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

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

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

namespace chip {
namespace DeviceLayer {
@@ -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);
@@ -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;
@@ -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),
@@ -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)
{
@@ -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;
Loading