Skip to content

Commit b335217

Browse files
[NXP] Fix read last-networking-status and read last-network-id issue for ethernet and wifi (#42031)
* [NXP][wifi] Fix read last-networking-status and read last-network-id issue Signed-off-by: Martin Girardot <martin.girardot@nxp.com> * [NXP][ethernet] Fix read last-networking-status and read last-network-id issue Signed-off-by: Martin Girardot <martin.girardot@nxp.com> * [NXP] fix PR comment Signed-off-by: Martin Girardot <martin.girardot@nxp.com> * Restyled by whitespace * Restyled by clang-format --------- Signed-off-by: Martin Girardot <martin.girardot@nxp.com> Co-authored-by: Restyled.io <commits@restyled.io>
1 parent 2b096c7 commit b335217

File tree

6 files changed

+64
-2
lines changed

6 files changed

+64
-2
lines changed

examples/platform/nxp/common/wifi_connect/source/WifiConnect.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ CHIP_ERROR WifiConnectAtboot(chip::DeviceLayer::NetworkCommissioning::WiFiDriver
4545
VerifyOrReturnError(status == chip::DeviceLayer::NetworkCommissioning::Status::kSuccess, CHIP_ERROR_CONNECTION_ABORTED);
4646
wifiDriver->ConnectNetwork(ssidSpan, nullptr);
4747
}
48+
if (networks != nullptr)
49+
{
50+
networks->Release();
51+
}
4852
return CHIP_NO_ERROR;
4953
}
5054

src/platform/nxp/common/ConnectivityManagerImpl.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ void ConnectivityManagerImpl::ProcessWlanEvent(enum wlan_event_reason wlanEvent)
399399
{
400400
sInstance._SetWiFiStationState(kWiFiStationState_Connecting_Succeeded);
401401
sInstance._SetWiFiStationState(kWiFiStationState_Connected);
402+
NetworkCommissioning::NXPWiFiDriver::GetInstance().OnNetworkStatusChange();
402403
NetworkCommissioning::NXPWiFiDriver::GetInstance().OnConnectWiFiNetwork(NetworkCommissioning::Status::kSuccess,
403404
CharSpan(), wlanEvent);
404405
sInstance.OnStationConnected();

src/platform/nxp/common/Ethernet/NxpEthDriver.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,39 @@ void NxpEthDriver::eth_netif_ext_status_callback(struct netif * netif, netif_nsc
6464
{
6565
ChipLogError(DeviceLayer, "Failed to schedule work: %" CHIP_ERROR_FORMAT, err.Format());
6666
}
67+
SystemLayer().ScheduleLambda([]() { NxpEthDriver::Instance().OnNetworkStatusChange(); });
68+
}
69+
}
70+
71+
void NxpEthDriver::OnNetworkStatusChange()
72+
{
73+
ChipLogProgress(NetworkProvisioning, "NxpEthDriver::OnNetworkStatusChange\r\n");
74+
VerifyOrReturn(mpStatusChangeCallback != nullptr);
75+
NetworkIterator * networkIterator = GetNetworks();
76+
77+
if (networkIterator != nullptr)
78+
{
79+
EthernetNetworkIterator * ethIterator = static_cast<EthernetNetworkIterator *>(networkIterator);
80+
81+
if (ethIterator->interfaceNameLen)
82+
{
83+
mpStatusChangeCallback->OnNetworkingStatusChange(
84+
Status::kSuccess, MakeOptional(ByteSpan(ethIterator->interfaceName, ethIterator->interfaceNameLen)), NullOptional);
85+
}
86+
else
87+
{
88+
mpStatusChangeCallback->OnNetworkingStatusChange(
89+
Status::kUnknownError, MakeOptional(ByteSpan(ethIterator->interfaceName, ethIterator->interfaceNameLen)),
90+
NullOptional);
91+
}
92+
networkIterator->Release();
6793
}
6894
}
6995

7096
CHIP_ERROR NxpEthDriver::Init(NetworkStatusChangeCallback * networkStatusChangeCallback)
7197
{
7298
err_t err;
99+
mpStatusChangeCallback = networkStatusChangeCallback;
73100
ethernetif_config_t enet_config = {
74101
.phyHandle = &phyHandle,
75102
.phyAddr = EXAMPLE_PHY_ADDRESS,

src/platform/nxp/common/Ethernet/NxpEthDriver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,13 @@ class NxpEthDriver final : public EthernetDriver
7676
}
7777

7878
private:
79+
void OnNetworkStatusChange();
7980
static void print_ip_addresses(struct netif * netif);
8081
static void eth_netif_ext_status_callback(struct netif * netif, netif_nsc_reason_t reason,
8182
const netif_ext_callback_args_t * args);
8283
phy_handle_t phyHandle;
8384
struct netif netif_app;
85+
NetworkStatusChangeCallback * mpStatusChangeCallback = nullptr;
8486
};
8587

8688
} // namespace NetworkCommissioning

src/platform/nxp/common/NetworkCommissioningDriver.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class NXPWiFiDriver final : public WiFiDriver
7272
Status ReorderNetwork(ByteSpan networkId, uint8_t index, MutableCharSpan & outDebugText) override;
7373
void ConnectNetwork(ByteSpan networkId, ConnectCallback * callback) override;
7474
CHIP_ERROR ConnectWiFiStagedNetwork();
75+
void OnNetworkStatusChange();
7576

7677
/* Returns the network SSID. User needs to allocate a buffer of size >= DeviceLayer::Internal::kMaxWiFiSSIDLength.
7778
* ssid - pointer to the returned SSID
@@ -104,6 +105,7 @@ class NXPWiFiDriver final : public WiFiDriver
104105
private:
105106
bool NetworkMatch(const WiFiNetwork & network, ByteSpan networkId);
106107
CHIP_ERROR StartScanWiFiNetworks(ByteSpan ssid);
108+
CHIP_ERROR GetConnectedNetwork(Network & network);
107109

108110
WiFiNetworkIterator mWiFiIterator = WiFiNetworkIterator(this);
109111
WiFiNetwork mSavedNetwork;

src/platform/nxp/common/NetworkCommissioningWiFiDriver.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,32 @@ void NXPWiFiDriver::OnConnectWiFiNetwork(Status commissioningError, CharSpan deb
240240
}
241241
}
242242

243+
void NXPWiFiDriver::OnNetworkStatusChange()
244+
{
245+
ChipLogProgress(NetworkProvisioning, "NXPWiFiDriver::OnNetworkStatusChange\r\n");
246+
Network configuredNetwork;
247+
248+
VerifyOrReturn(mpStatusChangeCallback != nullptr);
249+
CHIP_ERROR err = GetConnectedNetwork(configuredNetwork);
250+
if (err != CHIP_NO_ERROR)
251+
{
252+
ChipLogError(DeviceLayer, "Failed to get configured network when updating network status: %s", err.AsString());
253+
return;
254+
}
255+
256+
if (configuredNetwork.networkIDLen)
257+
{
258+
mpStatusChangeCallback->OnNetworkingStatusChange(
259+
Status::kSuccess, MakeOptional(ByteSpan(configuredNetwork.networkID, configuredNetwork.networkIDLen)), NullOptional);
260+
}
261+
else
262+
{
263+
mpStatusChangeCallback->OnNetworkingStatusChange(
264+
Status::kUnknownError, MakeOptional(ByteSpan(configuredNetwork.networkID, configuredNetwork.networkIDLen)),
265+
NullOptional);
266+
}
267+
}
268+
243269
void NXPWiFiDriver::ConnectNetwork(ByteSpan networkId, ConnectCallback * callback)
244270
{
245271
CHIP_ERROR err = CHIP_NO_ERROR;
@@ -448,7 +474,7 @@ uint32_t NXPWiFiDriver::GetSupportedWiFiBandsMask() const
448474
return bands;
449475
}
450476

451-
static CHIP_ERROR GetConnectedNetwork(Network & network)
477+
CHIP_ERROR NXPWiFiDriver::GetConnectedNetwork(Network & network)
452478
{
453479
struct wlan_network wlan_network;
454480
int result;
@@ -490,7 +516,7 @@ bool NXPWiFiDriver::WiFiNetworkIterator::Next(Network & item)
490516
mExhausted = true;
491517

492518
Network connectedNetwork;
493-
CHIP_ERROR err = GetConnectedNetwork(connectedNetwork);
519+
CHIP_ERROR err = mDriver->GetConnectedNetwork(connectedNetwork);
494520

495521
if (err == CHIP_NO_ERROR)
496522
{

0 commit comments

Comments
 (0)