From 7899a27db51ba14effc68327dd6b778fcbff6062 Mon Sep 17 00:00:00 2001 From: Thamim Razith Date: Tue, 8 Oct 2024 19:45:20 +0000 Subject: [PATCH 1/4] DELIA-66222: onAvailableSSIDs event not functioning correctly in the WiFi plugin Reason for change: Added the existing filter logic for frequenct & SSID Test Procedure: Verify in custom build Risks: None Signed-off-by: Thamim Razith --- CHANGELOG.md | 3 ++ CMakeLists.txt | 2 +- NetworkManager.json | 2 +- NetworkManagerImplementation.h | 2 ++ NetworkManagerJsonRpc.cpp | 50 ++++++++++++++++++++++++------- NetworkManagerRDKProxy.cpp | 54 +++++++++++++++++++++++++++++++++- 6 files changed, 99 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7b39ff..f33591e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ All notable changes to this RDK Service will be documented in this file. * Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development. +## [0.5.0] - 2024-10-08 +- Added Fitler Frequency logic in StartWifiScan + ## [0.4.0] - 2024-10-04 ### Added - Added RDKLogger Integration diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c39039..dd61f17 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ find_package(WPEFramework) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") set(VERSION_MAJOR 0) -set(VERSION_MINOR 4) +set(VERSION_MINOR 5) set(VERSION_PATCH 0) add_compile_definitions(NETWORKMANAGER_MAJOR_VERSION=${VERSION_MAJOR}) diff --git a/NetworkManager.json b/NetworkManager.json index 0096bdd..2309272 100644 --- a/NetworkManager.json +++ b/NetworkManager.json @@ -8,7 +8,7 @@ "locator": "libWPEFrameworkNetworkManager.so", "status": "production", "description": "A Unified `NetworkManager` plugin that allows you to manage Ethernet and Wifi interfaces on the device.", - "version": "0.4.0" + "version": "0.5.0" }, "common": { "$ref": "../../common/common.json" diff --git a/NetworkManagerImplementation.h b/NetworkManagerImplementation.h index 8c98390..92f5a1d 100644 --- a/NetworkManagerImplementation.h +++ b/NetworkManagerImplementation.h @@ -223,6 +223,7 @@ namespace WPEFramework void ReportWiFiStateChangedEvent(const INetworkManager::WiFiState state); void ReportWiFiSignalStrengthChangedEvent(const string ssid , const string signalLevel , const WiFiSignalQuality signalQuality); + void FilterWiFiByFrequency(JsonArray &ssids); private: void platform_init(); void retryIarmEventRegistration(); @@ -243,6 +244,7 @@ namespace WPEFramework public: WiFiSignalStrengthMonitor m_wifiSignalMonitor; mutable ConnectivityMonitor connectivityMonitor; + static uint32_t currentFrequency; }; } } diff --git a/NetworkManagerJsonRpc.cpp b/NetworkManagerJsonRpc.cpp index 06da7b6..04318ae 100644 --- a/NetworkManagerJsonRpc.cpp +++ b/NetworkManagerJsonRpc.cpp @@ -769,19 +769,47 @@ namespace WPEFramework { LOG_INPARAM(); uint32_t rc = Core::ERROR_GENERAL; - const Exchange::INetworkManager::WiFiFrequency frequency = static_cast (parameters["frequency"].Number()); + double frequencyValue = 0.0; + Exchange::INetworkManager::WiFiFrequency frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_WHATEVER; - if (_networkManager) - rc = _networkManager->StartWiFiScan(frequency); - else - rc = Core::ERROR_UNAVAILABLE; - - if (Core::ERROR_NONE == rc) + if (parameters.HasLabel("frequency")) { - response["success"] = true; - } - LOG_OUTPARAM(); - return rc; + if (parameters["frequency"].Content() == Core::JSON::Variant::type::NUMBER) + frequencyValue = parameters["frequency"].Number(); + else if (parameters["frequency"].Content() == Core::JSON::Variant::type::STRING) + frequencyValue = stod(parameters["frequency"].String()); // Use stod converts a string to double, handles decimals + + NMLOG_INFO("Frequency value received: %f", frequencyValue); + + //Map the double value to WiFiFrequency enum + if (frequencyValue == 2.4) { + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_2_4_GHZ; + } + else if (frequencyValue == 5.0) { + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_5_GHZ; + } + else if (frequencyValue == 6.0) { + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_6_GHZ; + } + else { + NMLOG_INFO("Invalid frequency value: %f\n", frequencyValue); + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_WHATEVER; + } + } + + NMLOG_INFO("Mapped frequency to enum value: %d", static_cast(frequency)); + + if (_networkManager) + rc = _networkManager->StartWiFiScan(static_cast(frequency)); + else + rc = Core::ERROR_UNAVAILABLE; + + if (Core::ERROR_NONE == rc) + { + response["success"] = true; + } + LOG_OUTPARAM(); + return rc; } uint32_t NetworkManager::StopWiFiScan(const JsonObject& parameters, JsonObject& response) diff --git a/NetworkManagerRDKProxy.cpp b/NetworkManagerRDKProxy.cpp index 67052cd..a6e9887 100644 --- a/NetworkManagerRDKProxy.cpp +++ b/NetworkManagerRDKProxy.cpp @@ -333,6 +333,8 @@ typedef struct _IARM_Bus_WiFiSrvMgr_SsidList_Param_t { } IARM_Bus_WiFiSrvMgr_SsidList_Param_t; +uint32_t NetworkManagerImplementation::currentFrequency = 0; + #define IARM_BUS_NETSRVMGR_API_getInterfaceList "getInterfaceList" #define IARM_BUS_NETSRVMGR_API_getDefaultInterface "getDefaultInterface" #define IARM_BUS_NETSRVMGR_API_setDefaultInterface "setDefaultInterface" @@ -498,6 +500,7 @@ namespace WPEFramework } JsonArray ssids = eventDocument["getAvailableSSIDs"].Array(); + ::_instance->FilterWiFiByFrequency(ssids); string json; ssids.ToString(json); @@ -531,6 +534,49 @@ namespace WPEFramework NMLOG_WARNING("WARNING - cannot handle IARM events without a Network plugin instance!"); } + void NetworkManagerImplementation::FilterWiFiByFrequency(JsonArray &ssids) + { + JsonArray result; + + if (NetworkManagerImplementation::currentFrequency != WIFI_FREQUENCY_WHATEVER) + { + for(int i=0; i Date: Tue, 8 Oct 2024 16:07:22 -0400 Subject: [PATCH 2/4] Update NetworkManagerImplementation.h --- NetworkManagerImplementation.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/NetworkManagerImplementation.h b/NetworkManagerImplementation.h index 92f5a1d..a2966e0 100644 --- a/NetworkManagerImplementation.h +++ b/NetworkManagerImplementation.h @@ -223,12 +223,12 @@ namespace WPEFramework void ReportWiFiStateChangedEvent(const INetworkManager::WiFiState state); void ReportWiFiSignalStrengthChangedEvent(const string ssid , const string signalLevel , const WiFiSignalQuality signalQuality); - void FilterWiFiByFrequency(JsonArray &ssids); private: void platform_init(); void retryIarmEventRegistration(); void threadEventRegistration(); void executeExternally(NetworkEvents event, const string commandToExecute, string& response); + void filterScanResults(JsonArray &ssids); private: std::list _notificationCallbacks; @@ -241,10 +241,11 @@ namespace WPEFramework uint16_t m_stunBindTimeout; uint16_t m_stunCacheTimeout; std::thread m_registrationThread; + INetworkManager::WiFiFrequency scanForFreq; + public: WiFiSignalStrengthMonitor m_wifiSignalMonitor; mutable ConnectivityMonitor connectivityMonitor; - static uint32_t currentFrequency; }; } } From 2dddc5e1c45bf1dacf0b7e6776fb3b51eb5323bc Mon Sep 17 00:00:00 2001 From: Karunakaran A <48997923+karuna2git@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:09:08 -0400 Subject: [PATCH 3/4] Update NetworkManagerRDKProxy.cpp --- NetworkManagerRDKProxy.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/NetworkManagerRDKProxy.cpp b/NetworkManagerRDKProxy.cpp index a6e9887..14c7fa4 100644 --- a/NetworkManagerRDKProxy.cpp +++ b/NetworkManagerRDKProxy.cpp @@ -1042,11 +1042,7 @@ const string CIDR_PREFIXES[CIDR_NETMASK_IP_LEN] = { memset(¶m, 0, sizeof(param)); NMLOG_INFO ("StartWifiScan frequency value :%d",frequency); - NetworkManagerImplementation::currentFrequency = WIFI_FREQUENCY_WHATEVER; - - if (frequency != WIFI_FREQUENCY_WHATEVER) { - NetworkManagerImplementation::currentFrequency = frequency; - } + scanForFreq = frequency; retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getAvailableSSIDsAsync, (void *)¶m, sizeof(IARM_Bus_WiFiSrvMgr_SsidList_Param_t)); From b0e61b43f017cd7032a6ed9953a2df2041331646 Mon Sep 17 00:00:00 2001 From: Thamim Razith Date: Wed, 9 Oct 2024 00:15:36 +0000 Subject: [PATCH 4/4] Update the required changes --- CHANGELOG.md | 2 +- CMakeLists.txt | 4 +- NetworkManager.json | 2 +- NetworkManagerGnomeEvents.cpp | 2 +- NetworkManagerImplementation.cpp | 52 +++++++++++++++++++++++- NetworkManagerImplementation.h | 2 +- NetworkManagerJsonRpc.cpp | 68 ++++++++++++++------------------ NetworkManagerRDKProxy.cpp | 50 +---------------------- 8 files changed, 88 insertions(+), 94 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f33591e..a0071cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ All notable changes to this RDK Service will be documented in this file. * Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development. -## [0.5.0] - 2024-10-08 +## [0.4.1] - 2024-10-08 - Added Fitler Frequency logic in StartWifiScan ## [0.4.0] - 2024-10-04 diff --git a/CMakeLists.txt b/CMakeLists.txt index dd61f17..2c52435 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,8 @@ find_package(WPEFramework) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") set(VERSION_MAJOR 0) -set(VERSION_MINOR 5) -set(VERSION_PATCH 0) +set(VERSION_MINOR 4) +set(VERSION_PATCH 1) add_compile_definitions(NETWORKMANAGER_MAJOR_VERSION=${VERSION_MAJOR}) add_compile_definitions(NETWORKMANAGER_MINOR_VERSION=${VERSION_MINOR}) diff --git a/NetworkManager.json b/NetworkManager.json index 2309272..0096bdd 100644 --- a/NetworkManager.json +++ b/NetworkManager.json @@ -8,7 +8,7 @@ "locator": "libWPEFrameworkNetworkManager.so", "status": "production", "description": "A Unified `NetworkManager` plugin that allows you to manage Ethernet and Wifi interfaces on the device.", - "version": "0.5.0" + "version": "0.4.0" }, "common": { "$ref": "../../common/common.json" diff --git a/NetworkManagerGnomeEvents.cpp b/NetworkManagerGnomeEvents.cpp index b7f1706..49cb632 100644 --- a/NetworkManagerGnomeEvents.cpp +++ b/NetworkManagerGnomeEvents.cpp @@ -597,7 +597,7 @@ namespace WPEFramework if(_nmEventInstance->doScanNotify) { _nmEventInstance->doScanNotify = false; - _instance->ReportAvailableSSIDsEvent(ssidListJson); + _instance->ReportAvailableSSIDsEvent(ssidList); } } diff --git a/NetworkManagerImplementation.cpp b/NetworkManagerImplementation.cpp index 7315ca0..c46d7ff 100644 --- a/NetworkManagerImplementation.cpp +++ b/NetworkManagerImplementation.cpp @@ -456,6 +456,49 @@ namespace WPEFramework return; } + void NetworkManagerImplementation::filterScanResults(JsonArray &ssids) + { + JsonArray result; + + if (scanForFreq != WIFI_FREQUENCY_WHATEVER) + { + for(int i=0; ionAvailableSSIDs(jsonOfWiFiScanResults); diff --git a/NetworkManagerImplementation.h b/NetworkManagerImplementation.h index a2966e0..2b67858 100644 --- a/NetworkManagerImplementation.h +++ b/NetworkManagerImplementation.h @@ -219,7 +219,7 @@ namespace WPEFramework void ReportIPAddressChangedEvent(const string& interface, bool isAcquired, bool isIPv6, const string& ipAddress); void ReportActiveInterfaceChangedEvent(const string prevActiveInterface, const string currentActiveinterface); void ReportInternetStatusChangedEvent(const InternetStatus oldState, const InternetStatus newstate); - void ReportAvailableSSIDsEvent(const string jsonOfWiFiScanResults); + void ReportAvailableSSIDsEvent(JsonArray &arrayofWiFiScanResults); void ReportWiFiStateChangedEvent(const INetworkManager::WiFiState state); void ReportWiFiSignalStrengthChangedEvent(const string ssid , const string signalLevel , const WiFiSignalQuality signalQuality); diff --git a/NetworkManagerJsonRpc.cpp b/NetworkManagerJsonRpc.cpp index 04318ae..97b1396 100644 --- a/NetworkManagerJsonRpc.cpp +++ b/NetworkManagerJsonRpc.cpp @@ -769,47 +769,39 @@ namespace WPEFramework { LOG_INPARAM(); uint32_t rc = Core::ERROR_GENERAL; - double frequencyValue = 0.0; Exchange::INetworkManager::WiFiFrequency frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_WHATEVER; - if (parameters.HasLabel("frequency")) + string freqString = parameters["frequency"].String(); + + NMLOG_INFO("Received frequency string: %s", freqString.c_str()); + + if (freqString == "2.4") { + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_2_4_GHZ; + } + else if (freqString == "5") { + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_5_GHZ; + } + else if (freqString == "6") { + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_6_GHZ; + } + else { + NMLOG_ERROR("Invalid frequency value received: %s", freqString.c_str()); + frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_WHATEVER; + } + + NMLOG_INFO("Frequency value mapped to enum: %d", frequency); + + if (_networkManager) + rc = _networkManager->StartWiFiScan(frequency); + else + rc = Core::ERROR_UNAVAILABLE; + + if (Core::ERROR_NONE == rc) { - if (parameters["frequency"].Content() == Core::JSON::Variant::type::NUMBER) - frequencyValue = parameters["frequency"].Number(); - else if (parameters["frequency"].Content() == Core::JSON::Variant::type::STRING) - frequencyValue = stod(parameters["frequency"].String()); // Use stod converts a string to double, handles decimals - - NMLOG_INFO("Frequency value received: %f", frequencyValue); - - //Map the double value to WiFiFrequency enum - if (frequencyValue == 2.4) { - frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_2_4_GHZ; - } - else if (frequencyValue == 5.0) { - frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_5_GHZ; - } - else if (frequencyValue == 6.0) { - frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_6_GHZ; - } - else { - NMLOG_INFO("Invalid frequency value: %f\n", frequencyValue); - frequency = Exchange::INetworkManager::WiFiFrequency::WIFI_FREQUENCY_WHATEVER; - } - } - - NMLOG_INFO("Mapped frequency to enum value: %d", static_cast(frequency)); - - if (_networkManager) - rc = _networkManager->StartWiFiScan(static_cast(frequency)); - else - rc = Core::ERROR_UNAVAILABLE; - - if (Core::ERROR_NONE == rc) - { - response["success"] = true; - } - LOG_OUTPARAM(); - return rc; + response["success"] = true; + } + LOG_OUTPARAM(); + return rc; } uint32_t NetworkManager::StopWiFiScan(const JsonObject& parameters, JsonObject& response) diff --git a/NetworkManagerRDKProxy.cpp b/NetworkManagerRDKProxy.cpp index 14c7fa4..1f1bd92 100644 --- a/NetworkManagerRDKProxy.cpp +++ b/NetworkManagerRDKProxy.cpp @@ -333,8 +333,6 @@ typedef struct _IARM_Bus_WiFiSrvMgr_SsidList_Param_t { } IARM_Bus_WiFiSrvMgr_SsidList_Param_t; -uint32_t NetworkManagerImplementation::currentFrequency = 0; - #define IARM_BUS_NETSRVMGR_API_getInterfaceList "getInterfaceList" #define IARM_BUS_NETSRVMGR_API_getDefaultInterface "getDefaultInterface" #define IARM_BUS_NETSRVMGR_API_setDefaultInterface "setDefaultInterface" @@ -500,11 +498,8 @@ namespace WPEFramework } JsonArray ssids = eventDocument["getAvailableSSIDs"].Array(); - ::_instance->FilterWiFiByFrequency(ssids); - string json; - ssids.ToString(json); - ::_instance->ReportAvailableSSIDsEvent(json); + ::_instance->ReportAvailableSSIDsEvent(ssids); } case IARM_BUS_WIFI_MGR_EVENT_onWIFIStateChanged: { @@ -534,49 +529,6 @@ namespace WPEFramework NMLOG_WARNING("WARNING - cannot handle IARM events without a Network plugin instance!"); } - void NetworkManagerImplementation::FilterWiFiByFrequency(JsonArray &ssids) - { - JsonArray result; - - if (NetworkManagerImplementation::currentFrequency != WIFI_FREQUENCY_WHATEVER) - { - for(int i=0; i