From: Seonah Moon <31679495+SeonahMoon@users.noreply.github.com> Date: Mon, 19 Nov 2018 01:17:10 +0000 (+0900) Subject: [Tizen.Network.WiFi][TCSACR-192] Add new API to check wifi scan state (#544) X-Git-Tag: 5.5_M2~411 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a5740a797eea3e3423014d73487dadb048b25bc1;p=platform%2Fcore%2Fcsapi%2Ftizenfx.git [Tizen.Network.WiFi][TCSACR-192] Add new API to check wifi scan state (#544) * Add new API to check wifi scan state * Correct API version * [Tizen.Network.WiFi] remove unnecessary ToString() * [Tizen.Network.WiFi] Fix typo * Use auto-generate property * Indent correctly * Use ?. operator for readability * Fix typo --- diff --git a/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs b/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs index 35c108e..70458db 100755 --- a/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs +++ b/src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs @@ -36,6 +36,8 @@ internal static partial class Interop internal delegate void ConnectionStateChangedCallback(int connectionState, IntPtr ap, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void RssiLevelChangedCallback(int level, IntPtr userData); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + internal delegate void ScanStateChangedCallback(int scanState, IntPtr userData); //capi-network-wifi-1.0.65-19.23.armv7l [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_initialize_cs")] @@ -110,6 +112,12 @@ internal static partial class Interop internal static extern int SetRssiLevelchangedCallback(SafeWiFiManagerHandle wifi, RssiLevelChangedCallback callback, IntPtr userData); [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_unset_rssi_level_changed_cb")] internal static extern int UnsetRssiLevelchangedCallback(SafeWiFiManagerHandle wifi); + [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_get_scan_state")] + internal static extern int GetScanState(SafeWiFiManagerHandle wifi, out int scanState); + [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_set_scan_state_changed_cb")] + internal static extern int SetScanStateChangedCallback(SafeWiFiManagerHandle wifi, ScanStateChangedCallback callback, IntPtr userData); + [DllImport(Libraries.WiFi, EntryPoint = "wifi_manager_unset_scan_state_changed_cb")] + internal static extern int UnsetScanStateChangedCallback(SafeWiFiManagerHandle wifi); internal static class AP { diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/ScanStateChangedEventArgs.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/ScanStateChangedEventArgs.cs new file mode 100755 index 0000000..a6fc725 --- /dev/null +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/ScanStateChangedEventArgs.cs @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; + +namespace Tizen.Network.WiFi +{ + /// + /// An extended EventArgs class which contains the changed scan state. + /// + /// 6 + public class ScanStateChangedEventArgs : EventArgs + { + internal ScanStateChangedEventArgs(WiFiScanState s) + { + State = s; + } + + /// + /// The Wi-Fi scan state. + /// + /// 6 + public WiFiScanState State {get; private set;} + } +} diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs index 2fc3656..d110106 100755 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs @@ -195,4 +195,22 @@ namespace Tizen.Network.WiFi /// 3 Md5 = 5 } + + /// + /// Enumeration for the Wi-Fi scanning state. + /// + /// 6 + public enum WiFiScanState + { + /// + /// Scan is not running. + /// + /// 6 + NotScanning = 0, + /// + /// Scan is running. + /// + /// 6 + Scanning = 1 + } } diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs index 28f0442..4eb5636 100755 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs @@ -129,6 +129,19 @@ namespace Tizen.Network.WiFi } /// + /// The Wi-Fi scan state. + /// + /// 6 + /// Represents the scan state of the Wi-Fi. + static public WiFiScanState ScanState + { + get + { + return WiFiManagerImpl.Instance.ScanState; + } + } + + /// /// DeviceStateChanged is raised when the device state is changed. /// /// 3 @@ -202,6 +215,23 @@ namespace Tizen.Network.WiFi } /// + /// ScanStateChanged is raised when the scan state is changed. + /// + /// 6 + /// http://tizen.org/feature/network.wifi + static public event EventHandler ScanStateChanged + { + add + { + WiFiManagerImpl.Instance.ScanStateChanged += value; + } + remove + { + WiFiManagerImpl.Instance.ScanStateChanged -= value; + } + } + + /// /// Gets the Wi-Fi safe handle. /// /// 3 diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs index ac2d232..a5cb7aa 100644 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs @@ -128,6 +128,21 @@ namespace Tizen.Network.WiFi } } + internal WiFiScanState ScanState + { + get + { + int state; + int ret = Interop.WiFi.GetScanState(GetSafeHandle(), out state); + if (ret != (int)WiFiError.None) + { + Log.Error(Globals.LogTag, "Failed to get scan state, Error - " + (WiFiError)ret); + return WiFiScanState.NotScanning; + } + return (WiFiScanState)state; + } + } + internal static WiFiManagerImpl Instance { get diff --git a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs index 76edc7b..3db144d 100755 --- a/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs +++ b/src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs @@ -46,11 +46,13 @@ namespace Tizen.Network.WiFi private event EventHandler _deviceStateChanged; private event EventHandler _connectionStateChanged; private event EventHandler _rssiLevelChanged; + private event EventHandler _scanStateChanged; private event EventHandler _backgroundScanFinished; private Interop.WiFi.DeviceStateChangedCallback _deviceChangedCallback; private Interop.WiFi.ConnectionStateChangedCallback _connectionChangedCallback; private Interop.WiFi.RssiLevelChangedCallback _rssiChangedCallback; + private Interop.WiFi.ScanStateChangedCallback _scanChangedCallback; private Interop.WiFi.VoidCallback _backgroundScanFinishedCallback; internal event EventHandler DeviceStateChanged @@ -175,6 +177,47 @@ namespace Tizen.Network.WiFi } } + internal event EventHandler ScanStateChanged + { + add + { + context.Post((x) => + { + if (_scanStateChanged == null) + { + try + { + RegisterScanStateChangedEvent(); + } + catch (Exception e) + { + Log.Error(Globals.LogTag, "Exception on adding ScanStateChanged\n" + e); + return; + } + } + _scanStateChanged += value; + }, null); + } + remove + { + context.Post((x) => + { + _scanStateChanged -= value; + if (_scanStateChanged == null) + { + try + { + UnregisterScanStateChangedEvent(); + } + catch (Exception e) + { + Log.Error(Globals.LogTag, "Exception on removing ScanStateChanged\n" + e); + } + } + }, null); + } + } + internal event EventHandler BackgroundScanFinished { add @@ -294,6 +337,28 @@ namespace Tizen.Network.WiFi } } + private void RegisterScanStateChangedEvent() + { + _scanChangedCallback = (int scanState, IntPtr userData) => + { + _scanStateChanged?.Invoke(null, new ScanStateChangedEventArgs((WiFiScanState)scanState)); + }; + int ret = Interop.WiFi.SetScanStateChangedCallback(GetSafeHandle(), _scanChangedCallback, IntPtr.Zero); + if (ret != (int)WiFiError.None) + { + Log.Error(Globals.LogTag, "Failed to set scan state changed callback, Error - " + (WiFiError)ret); + } + } + + private void UnregisterScanStateChangedEvent() + { + int ret = Interop.WiFi.UnsetScanStateChangedCallback(GetSafeHandle()); + if (ret != (int)WiFiError.None) + { + Log.Error(Globals.LogTag, "Failed to unset scan state changed callback, Error - " + (WiFiError)ret); + } + } + private void RegisterBackgroundScanFinishedEvent() { _backgroundScanFinishedCallback = (int result, IntPtr userDate) =>