diff --git a/definition/NetworkManager.json b/definition/NetworkManager.json
index d5220509..dff50690 100644
--- a/definition/NetworkManager.json
+++ b/definition/NetworkManager.json
@@ -1556,6 +1556,11 @@
"summary": "WiFi status",
"type": "string",
"example": "WIFI_STATE_CONNECTED"
+ },
+ "ssid": {
+ "summary": "The SSID associated with the Wi-Fi profile causing the state transition. For a disconnected state, this is the SSID that was previously connected, when available; otherwise an empty string",
+ "type": "string",
+ "example": "myHomeSSID"
}
},
"required": [
diff --git a/docs/NetworkManagerPlugin.md b/docs/NetworkManagerPlugin.md
index b65a75fd..31332359 100644
--- a/docs/NetworkManagerPlugin.md
+++ b/docs/NetworkManagerPlugin.md
@@ -1966,6 +1966,7 @@ Triggered when WIFI connection state get changed. The possible states are define
| params | object | |
| params.state | integer | WiFi State |
| params.status | string | WiFi status |
+| params?.ssid | string | *(optional)* The SSID associated with the Wi-Fi profile causing the state transition. For a disconnected state, this is the SSID that was previously connected, when available; otherwise an empty string |
### Example
@@ -1975,7 +1976,8 @@ Triggered when WIFI connection state get changed. The possible states are define
"method": "client.events.1.onWiFiStateChange",
"params": {
"state": 5,
- "status": "WIFI_STATE_CONNECTED"
+ "status": "WIFI_STATE_CONNECTED",
+ "ssid": "myHomeSSID"
}
}
```
diff --git a/interface/INetworkManager.h b/interface/INetworkManager.h
index ce8cb509..8e6cabea 100644
--- a/interface/INetworkManager.h
+++ b/interface/INetworkManager.h
@@ -286,7 +286,7 @@ namespace WPEFramework
// WiFi Notifications that other processes can subscribe to
virtual void onAvailableSSIDs(const string jsonOfScanResults /* @in */){};
- virtual void onWiFiStateChange(const WiFiState state /* @in */){};
+ virtual void onWiFiStateChange(const WiFiState state /* @in */, const string ssid /* @in */){};
virtual void onWiFiSignalQualityChange(const string ssid /* @in */, const int strength /* @in */, const int noise /* @in */, const int snr /* @in */, const WiFiSignalQuality quality /* @in */){};
};
diff --git a/plugin/NetworkManager.h b/plugin/NetworkManager.h
index 6a101bdf..d8a47e77 100644
--- a/plugin/NetworkManager.h
+++ b/plugin/NetworkManager.h
@@ -89,9 +89,9 @@ namespace WPEFramework
_parent.onAvailableSSIDs(jsonOfScanResults);
}
- void onWiFiStateChange(const Exchange::INetworkManager::WiFiState state) override
+ void onWiFiStateChange(const Exchange::INetworkManager::WiFiState state, const string ssid) override
{
- _parent.onWiFiStateChange(state);
+ _parent.onWiFiStateChange(state, ssid);
}
void onWiFiSignalQualityChange(const string ssid, const int strength, const int noise, const int snr, const Exchange::INetworkManager::WiFiSignalQuality quality) override
@@ -262,7 +262,7 @@ namespace WPEFramework
void onIPAddressChange(const string interface, const string ipversion, const string ipaddress, const Exchange::INetworkManager::IPStatus status);
void onInternetStatusChange(const Exchange::INetworkManager::InternetStatus prevState, const Exchange::INetworkManager::InternetStatus currState, const string interface);
void onAvailableSSIDs(const string jsonOfScanResults);
- void onWiFiStateChange(const Exchange::INetworkManager::WiFiState state);
+ void onWiFiStateChange(const Exchange::INetworkManager::WiFiState state, const string ssid);
void onWiFiSignalQualityChange(const string ssid, const int strength, const int noise, const int snr, const Exchange::INetworkManager::WiFiSignalQuality quality);
private:
diff --git a/plugin/NetworkManagerImplementation.cpp b/plugin/NetworkManagerImplementation.cpp
index 1ba0509a..e5a8cd41 100644
--- a/plugin/NetworkManagerImplementation.cpp
+++ b/plugin/NetworkManagerImplementation.cpp
@@ -818,7 +818,7 @@ namespace WPEFramework
NMLOG_INFO("Publishing onWiFiStateChange Event");
const auto& eventData = std::get(data);
for (const auto callback : callbacks) {
- callback->onWiFiStateChange(eventData.state);
+ callback->onWiFiStateChange(eventData.state, eventData.ssid);
callback->Release();
}
}
@@ -1354,10 +1354,15 @@ namespace WPEFramework
void NetworkManagerImplementation::ReportWiFiStateChange(const Exchange::INetworkManager::WiFiState state)
{
LOG_ENTRY_FUNCTION();
+ static std::string lastKnownSSID;
+
/* start signal strength monitor when wifi connected */
if(INetworkManager::WiFiState::WIFI_STATE_CONNECTED == state)
{
m_wlanConnected.store(true);
+ Exchange::INetworkManager::WiFiSSIDInfo ssidInfo{};
+ if ((GetConnectedSSID(ssidInfo) == Core::ERROR_NONE) && !ssidInfo.ssid.empty())
+ lastKnownSSID = ssidInfo.ssid;
startWiFiSignalQualityMonitor(DEFAULT_WIFI_SIGNAL_TEST_INTERVAL_SEC);
}
else
@@ -1366,14 +1371,14 @@ namespace WPEFramework
m_wlanConnected.store(false); /* Any other state is considered as WiFi not connected. */
}
- NMLOG_INFO("Posting onWiFiStateChange (%d)", state);
+ NMLOG_INFO("Posting onWiFiStateChange (%d) ssid: %s", state, lastKnownSSID.c_str());
#if USE_TELEMETRY
string stateStr = Core::EnumerateType(state).Data();
NMLOG_INFO("NM_WIFI_STATUS = %s", stateStr.c_str());
logTelemetry("NM_WIFI_STATUS", stateStr);
#endif
{
- WiFiStateChangeData eventData{state};
+ WiFiStateChangeData eventData{state, lastKnownSSID};
enqueueEvent(NM_ON_WIFISTATE_CHANGE, std::move(eventData));
}
}
diff --git a/plugin/NetworkManagerImplementation.h b/plugin/NetworkManagerImplementation.h
index bafe337f..4a251e95 100644
--- a/plugin/NetworkManagerImplementation.h
+++ b/plugin/NetworkManagerImplementation.h
@@ -251,6 +251,7 @@ namespace WPEFramework
struct WiFiStateChangeData {
Exchange::INetworkManager::WiFiState state;
+ string ssid;
};
struct WiFiSignalQualityChangeData {
diff --git a/plugin/NetworkManagerJsonRpc.cpp b/plugin/NetworkManagerJsonRpc.cpp
index d49e6c5d..b040953a 100644
--- a/plugin/NetworkManagerJsonRpc.cpp
+++ b/plugin/NetworkManagerJsonRpc.cpp
@@ -1105,12 +1105,13 @@ namespace WPEFramework
Notify(_T("onAvailableSSIDs"), parameters);
}
- void NetworkManager::onWiFiStateChange(const Exchange::INetworkManager::WiFiState state)
+ void NetworkManager::onWiFiStateChange(const Exchange::INetworkManager::WiFiState state, const string ssid)
{
JsonObject parameters;
Core::JSON::EnumType iState{state};
parameters["state"] = JsonValue(state);
parameters["status"] = iState.Data();
+ parameters["ssid"] = ssid;
LOG_INPARAM();
Notify(_T("onWiFiStateChange"), parameters);