[Tizen.Network.WiFi][TCSACR-192] Add new API to check wifi scan state (#544)
authorSeonah Moon <31679495+SeonahMoon@users.noreply.github.com>
Mon, 19 Nov 2018 01:17:10 +0000 (10:17 +0900)
committerchleun-moon <32117100+chleun-moon@users.noreply.github.com>
Mon, 19 Nov 2018 01:17:10 +0000 (10:17 +0900)
* 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

src/Tizen.Network.WiFi/Interop/Interop.WiFi.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/ScanStateChangedEventArgs.cs [new file with mode: 0755]
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiEnumerations.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManager.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiManagerImpl.cs
src/Tizen.Network.WiFi/Tizen.Network.WiFi/WiFiNetworkChange.cs

index 35c108e..70458db 100755 (executable)
@@ -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 (executable)
index 0000000..a6fc725
--- /dev/null
@@ -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
+{
+    /// <summary>
+    /// An extended EventArgs class which contains the changed scan state.
+    /// </summary>
+    /// <since_tizen> 6 </since_tizen>
+    public class ScanStateChangedEventArgs : EventArgs
+    {
+        internal ScanStateChangedEventArgs(WiFiScanState s)
+        {
+            State = s;
+       }
+
+        /// <summary>
+        /// The Wi-Fi scan state.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        public WiFiScanState State {get; private set;}
+    }
+}
index 2fc3656..d110106 100755 (executable)
@@ -195,4 +195,22 @@ namespace Tizen.Network.WiFi
         /// <since_tizen> 3 </since_tizen>
         Md5 = 5
     }
+
+    /// <summary>
+    /// Enumeration for the Wi-Fi scanning state.
+    /// </summary>
+    /// <since_tizen> 6 </since_tizen>
+    public enum WiFiScanState
+    {
+        /// <summary>
+        /// Scan is not running.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        NotScanning = 0,
+        /// <summary>
+        /// Scan is running.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        Scanning = 1
+    }
 }
index 28f0442..4eb5636 100755 (executable)
@@ -129,6 +129,19 @@ namespace Tizen.Network.WiFi
         }
 
         /// <summary>
+        /// The Wi-Fi scan state.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        /// <value>Represents the scan state of the Wi-Fi.</value>
+        static public WiFiScanState ScanState
+        {
+            get
+            {
+                return WiFiManagerImpl.Instance.ScanState;
+            }
+        }
+
+        /// <summary>
         /// DeviceStateChanged is raised when the device state is changed.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
@@ -202,6 +215,23 @@ namespace Tizen.Network.WiFi
         }
 
         /// <summary>
+        /// ScanStateChanged is raised when the scan state is changed.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        /// <feature>http://tizen.org/feature/network.wifi</feature>
+        static public event EventHandler<ScanStateChangedEventArgs> ScanStateChanged
+        {
+            add
+            {
+                WiFiManagerImpl.Instance.ScanStateChanged += value;
+            }
+            remove
+            {
+                WiFiManagerImpl.Instance.ScanStateChanged -= value;
+            }
+        }
+
+        /// <summary>
         /// Gets the Wi-Fi safe handle.
         /// </summary>
         /// <since_tizen> 3 </since_tizen>
index ac2d232..a5cb7aa 100644 (file)
@@ -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
index 76edc7b..3db144d 100755 (executable)
@@ -46,11 +46,13 @@ namespace Tizen.Network.WiFi
         private event EventHandler<DeviceStateChangedEventArgs> _deviceStateChanged;
         private event EventHandler<ConnectionStateChangedEventArgs> _connectionStateChanged;
         private event EventHandler<RssiLevelChangedEventArgs> _rssiLevelChanged;
+        private event EventHandler<ScanStateChangedEventArgs> _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<DeviceStateChangedEventArgs> DeviceStateChanged
@@ -175,6 +177,47 @@ namespace Tizen.Network.WiFi
             }
         }
 
+        internal event EventHandler<ScanStateChangedEventArgs> 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) =>