From ebc1e96b763490053adb310ca601aa984e72c3c7 Mon Sep 17 00:00:00 2001 From: akash1-kumar <115205462+akash1-kumar@users.noreply.github.com> Date: Wed, 15 Nov 2023 14:13:37 +0530 Subject: [PATCH] [Tizen.Network.WiFi] Add set auto scan mode and hidden connect apis (#5730) * Add set auto scan mode and hidden connect apis Signed-off-by: Akash Kumar * Add auto-scan mode enum Signed-off-by: Akash Kumar * Make enum internal type Signed-off-by: Akash Kumar --------- Signed-off-by: Akash Kumar --- src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs | 4 ++ .../Tizen.Network.WiFi/WiFiEnumerations.cs | 20 ++++++++ .../Tizen.Network.WiFi/WiFiManager.cs | 36 ++++++++++++++ .../Tizen.Network.WiFi/WiFiManagerImpl.cs | 56 ++++++++++++++++++++++ 4 files changed, 116 insertions(+) diff --git a/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs b/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs index 70458db..ae1f638 100755 --- a/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs +++ b/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs @@ -92,6 +92,10 @@ internal static partial class Interop internal static extern int ForgetAP(SafeWiFiManagerHandle wifi, IntPtr ap, VoidCallback callback, IntPtr userData); [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_update_ap")] internal static extern int UpdateAP(SafeWiFiManagerHandle wifi, IntPtr ap); + [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_set_autoscan_mode")] + internal static extern int SetAutoScanMode(SafeWiFiManagerHandle wifi, int mode); + [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_connect_hidden_ap")] + internal static extern int ConnectHiddenAP(SafeWiFiManagerHandle wifi, string essid, int secType, string passphrase, VoidCallback callback, IntPtr userData); //Wi-Fi Monitor [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_get_connection_state")] diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs index d110106..3b23c4f 100755 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs @@ -15,6 +15,7 @@ */ using System; +using System.ComponentModel; namespace Tizen.Network.WiFi { @@ -213,4 +214,23 @@ namespace Tizen.Network.WiFi /// 6 Scanning = 1 } + + /// + /// Enumeration for the Wi-Fi autoscan mode. + /// + /// 10 + [EditorBrowsable(EditorBrowsableState.Never)] + public enum WiFiAutoScanMode + { + /// + /// Auto scan interval is increased exponentially like 4, 8, 16, ...128secs. + /// + /// 10 + Exponential = 0, + /// + /// Auto scan interval is fixed with 10secs(for mobile) / 15secs(for wearable). + /// + /// 10 + Periodic = 1 + } } diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs index 9e53676..599810c 100755 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs @@ -445,5 +445,41 @@ namespace Tizen.Network.WiFi { return WiFiManagerImpl.Instance.BssidScanAsync(); } + + /// + /// Set Auto Scan Mode. + /// + /// 10 + /// http://tizen.org/feature/network.wifi + /// http://tizen.org/privilege/network.set + /// http://tizen.org/privilege/network.get + /// Thrown when the Wi-Fi is not supported. + /// Thrown when the permission is denied. + /// Thrown when the method failed due to an invalid operation. + [EditorBrowsable(EditorBrowsableState.Never)] + static public void SetAutoScanMode(WiFiAutoScanMode scanMode) + { + WiFiManagerImpl.Instance.SetAutoScanMode((int)scanMode); + } + + /// + /// Hidden Ap connect. + /// + /// + /// This method must be called from MainThread. + /// + /// 10 + /// A task indicating whether the HiddenAPConnectAsync method is done or not. + /// http://tizen.org/feature/network.wifi + /// http://tizen.org/privilege/network.set + /// http://tizen.org/privilege/network.get + /// Thrown when the Wi-Fi is not supported. + /// Thrown when the permission is denied. + /// Thrown when the method failed due to an invalid operation. + [EditorBrowsable(EditorBrowsableState.Never)] + static public Task HiddenAPConnectAsync(string essid, int secType, string password) + { + return WiFiManagerImpl.Instance.HiddenAPConnectAsync(essid, secType, password); + } } } diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs index e150c36..8bad600 100644 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs @@ -596,6 +596,62 @@ namespace Tizen.Network.WiFi return task.Task; } + internal void SetAutoScanMode(int scanMode) + { + Log.Info(Globals.LogTag, "SetAutoScanMode"); + int ret = Interop.WiFi.SetAutoScanMode(GetSafeHandle(), scanMode); + CheckReturnValue(ret, "GetSafeHandle", PrivilegeNetworkGet); + } + + internal Task HiddenAPConnectAsync(string essid, int secType, string passphrase) + { + Log.Info(Globals.LogTag, "HiddenAPConnect"); + TaskCompletionSource task = new TaskCompletionSource(); + IntPtr id; + lock (_callback_map) + { + id = (IntPtr)_requestId++; + _callback_map[id] = (error, key) => + { + Log.Info(Globals.LogTag, "HiddenAPConnect Done " + essid); + if (error != (int)WiFiError.None) + { + Log.Error(Globals.LogTag, "Error occurs during HiddenAPConnect, " + (WiFiError)error); + task.SetException(new InvalidOperationException("Error occurs during HiddenAPConnect, " + (WiFiError)error)); + } + else + { + task.SetResult(true); + } + lock (_callback_map) + { + _callback_map.Remove(key); + } + }; + } + + context.Post((x) => + { + Log.Info(Globals.LogTag, "Interop.WiFi.HiddenAPConnect"); + try + { + int ret = (int)WiFiError.None; + lock (_callback_map) + { + ret = Interop.WiFi.ConnectHiddenAP(GetSafeHandle(), essid, secType, passphrase, _callback_map[id], id); + } + CheckReturnValue(ret, "HiddenAPConnect", ""); + } + catch (Exception e) + { + Log.Error(Globals.LogTag, "Exception on HiddenAPConnect\n" + e); + task.SetException(e); + } + }, null); + + return task.Task; + } + private void CheckReturnValue(int ret, string method, string privilege) { if (ret != (int)WiFiError.None) -- 2.7.4