コード例 #1
0
ファイル: WiFiAP.cs プロジェクト: wiertel/TizenFX
        /// <summary>
        /// Connects the access point asynchronously.
        /// </summary>
        /// <since_tizen> 3 </since_tizen>
        /// <returns> A task indicating whether the connect method is done or not.</returns>
        /// <remarks>
        /// This method must be called from MainThread.
        /// </remarks>
        /// <feature>http://tizen.org/feature/network.wifi</feature>
        /// <privilege>http://tizen.org/privilege/network.set</privilege>
        /// <privilege>http://tizen.org/privilege/network.get</privilege>
        /// <exception cref="NotSupportedException">Thrown when the Wi-Fi is not supported.</exception>
        /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
        /// <exception cref="ObjectDisposedException">Thrown when the object instance is disposed or released.</exception>
        /// <exception cref="OutOfMemoryException">Thrown when the system is out of memory.</exception>
        /// <exception cref="InvalidOperationException">Thrown when the method failed due to an invalid operation.</exception>
        public Task ConnectAsync()
        {
            Log.Info(Globals.LogTag, "ConnectAsync HashCode: " + _apHandle.GetHashCode());
            if (_disposed)
            {
                throw new ObjectDisposedException("Invalid AP instance (Object may have been disposed or released)");
            }
            TaskCompletionSource <bool> task = new TaskCompletionSource <bool>();
            IntPtr id;

            lock (_callback_map)
            {
                id = (IntPtr)_requestId++;
                _callback_map[id] = (error, key) =>
                {
                    Log.Info(Globals.LogTag, "ConnectAsync done " + (WiFiError)error);
                    if (error != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Error occurs during WiFi connecting, " + (WiFiError)error);
                        task.SetException(new InvalidOperationException("Error occurs during WiFi connecting, " + (WiFiError)error));
                    }
                    else
                    {
                        task.SetResult(true);
                    }
                    lock (_callback_map)
                    {
                        _callback_map.Remove(key);
                    }
                };
            }

            context.Post((x) =>
            {
                Log.Info(Globals.LogTag, "Interop.WiFi.Connect");
                try
                {
                    int ret = Interop.WiFi.Connect(WiFiManagerImpl.Instance.GetSafeHandle(), _apHandle, _callback_map[id], id);
                    if (ret != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret);
                        if (ret == (int)WiFiError.InvalidParameterError)
                        {
                            throw new InvalidOperationException("Invalid handle");
                        }
                        WiFiErrorFactory.ThrowWiFiException(ret, WiFiManagerImpl.Instance.GetSafeHandle().DangerousGetHandle(), _apHandle);
                    }
                }
                catch (Exception e)
                {
                    Log.Error(Globals.LogTag, "Exception on ConnectAsync\n" + e);
                    task.SetException(e);
                }
            }, null);

            return(task.Task);
        }
コード例 #2
0
        internal Task SetDefaultCellularProfile(CellularServiceType type, ConnectionProfile profile)
        {
            Log.Info(Globals.LogTag, "SetDefaultCellularProfile");
            if (profile != null)
            {
                TaskCompletionSource <bool> task = new TaskCompletionSource <bool>();
                IntPtr id;
                lock (_callback_map)
                {
                    id = (IntPtr)_requestId++;
                    _callback_map[id] = (error, key) =>
                    {
                        Log.Info(Globals.LogTag, "SetDefaultCellularProfile done " + profile.Name);
                        if (error != ConnectionError.None)
                        {
                            Log.Error(Globals.LogTag, "Error occurs during set default cellular profile, " + error);
                            task.SetException(new InvalidOperationException("Error occurs during set default cellular profile, " + error));
                        }
                        else
                        {
                            task.SetResult(true);
                        }
                        lock (_callback_map)
                        {
                            _callback_map.Remove(key);
                        }
                    };
                }

                context.Post((x) =>
                {
                    Log.Info(Globals.LogTag, "Interop.Connection.SetDefaultCellularServiceProfileAsync " + profile.Name);
                    try
                    {
                        int ret = Interop.Connection.SetDefaultCellularServiceProfileAsync(GetHandle(), (int)type, profile.ProfileHandle, _callback_map[id], id);

                        if ((ConnectionError)ret != ConnectionError.None)
                        {
                            Log.Error(Globals.LogTag, "It failed to set default cellular profile, " + (ConnectionError)ret);
                            ConnectionErrorFactory.CheckFeatureUnsupportedException(ret, "http://tizen.org/feature/network.telephony");
                            ConnectionErrorFactory.CheckHandleNullException(ret, (GetHandle() == IntPtr.Zero || profile.ProfileHandle == IntPtr.Zero), "Connection or Profile Handle may have been disposed or released");
                            ConnectionErrorFactory.ThrowConnectionException(ret);
                        }
                    } catch (Exception e)
                    {
                        Log.Error(Globals.LogTag, "Exception on SetDefaultCellularServiceProfileAsync\n" + e.ToString());
                        task.SetException(e);
                    }
                }, null);

                return(task.Task);
            }
            else
            {
                throw new ArgumentNullException("Profile is null");
            }
        }
コード例 #3
0
ファイル: WiFiManagerImpl.cs プロジェクト: yourina/TizenFX
        internal Task ActivateAsync()
        {
            Log.Info(Globals.LogTag, "ActivateAsync");
            TaskCompletionSource <bool> task = new TaskCompletionSource <bool>();
            IntPtr id;

            lock (_callback_map)
            {
                id = (IntPtr)_requestId++;
                _callback_map[id] = (error, key) =>
                {
                    Log.Info(Globals.LogTag, "ActivateAsync done");
                    if (error != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Error occurs during WiFi activating, " + (WiFiError)error);
                        task.SetException(new InvalidOperationException("Error occurs during WiFi activating, " + (WiFiError)error));
                    }
                    else
                    {
                        task.SetResult(true);
                    }
                    lock (_callback_map)
                    {
                        _callback_map.Remove(key);
                    }
                };
            }

            context.Post((x) =>
            {
                Log.Info(Globals.LogTag, "Interop.WiFi.ActivateAsync");
                try
                {
                    int ret = Interop.WiFi.Activate(GetSafeHandle(), _callback_map[id], id);
                    if (ret != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Failed to activate wifi, Error - " + (WiFiError)ret);
                        WiFiErrorFactory.ThrowWiFiException(ret, GetSafeHandle().DangerousGetHandle());
                    }
                }
                catch (Exception e)
                {
                    Log.Error(Globals.LogTag, "Exception on ActivateAsync\n" + e.ToString());
                    task.SetException(e);
                }
            }, null);

            return(task.Task);
        }
コード例 #4
0
ファイル: WiFiManagerImpl.cs プロジェクト: wonrst/TizenFX
        internal Task ActivateAsync()
        {
            Log.Info(Globals.LogTag, "ActivateAsync");
            TaskCompletionSource <bool> task = new TaskCompletionSource <bool>();
            IntPtr id;

            lock (_callback_map)
            {
                id = (IntPtr)_requestId++;
                _callback_map[id] = (error, key) =>
                {
                    Log.Info(Globals.LogTag, "ActivateAsync done");
                    if (error != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Error occurs during WiFi activating, " + (WiFiError)error);
                        task.SetException(WiFiErrorFactory.GetException(error, "Error occurs during WiFi activating"));
                    }
                    else
                    {
                        task.SetResult(true);
                    }
                    lock (_callback_map)
                    {
                        _callback_map.Remove(key);
                    }
                };
            }

            context.Post((x) =>
            {
                Log.Info(Globals.LogTag, "Interop.WiFi.ActivateAsync");
                try
                {
                    int ret = (int)WiFiError.None;
                    lock (_callback_map)
                    {
                        ret = Interop.WiFi.Activate(GetSafeHandle(), _callback_map[id], id);
                    }
                    CheckReturnValue(ret, "Activate", "");
                }
                catch (Exception e)
                {
                    Log.Error(Globals.LogTag, "Exception on ActivateAsync\n" + e);
                    task.SetException(e);
                }
            }, null);

            return(task.Task);
        }
コード例 #5
0
        /// <summary>
        /// Connects the access point with WPS without SSID asynchronously.
        /// </summary>
        /// <since_tizen> 3 </since_tizen>
        /// <param name="info">A WpsInfo instance which is of type WpsPbcInfo or WpsPinInfo.</param>
        /// <returns>A task which contains Connected access point information.</returns>
        /// <remarks>
        /// If WpsPinInfo is used, its object has to be constructed with a pin which must be 4 or 8 characters long. \n
        /// This method must be called from MainThread.
        /// </remarks>
        /// <feature>http://tizen.org/feature/network.wifi</feature>
        /// <privilege>http://tizen.org/privilege/network.set</privilege>
        /// <privilege>http://tizen.org/privilege/network.get</privilege>
        /// <privilege>http://tizen.org/privilege/network.profile</privilege>
        /// <exception cref="NotSupportedException">Thrown when the Wi-Fi is not supported.</exception>
        /// <exception cref="UnauthorizedAccessException">Thrown when permission is denied.</exception>
        /// <exception cref="ArgumentNullException">Thrown when the WpsPinInfo object is constructed with a null pin.</exception>
        /// <exception cref="ArgumentOutOfRangeException">Thrown when the WpsPinInfo object is constructed with a pin which is not of 4 or 8 characters long.</exception>
        /// <exception cref="OutOfMemoryException">Thrown when the system is out of memory.</exception>
        /// <exception cref="ArgumentException">Thrown when the method failed due to an invalid parameter.</exception>
        /// <exception cref="InvalidOperationException">Thrown when the method failed due to an invalid operation.</exception>
        /// <exception cref="NowInProgressException">Thrown when the Wi-Fi connection is now in progress.</exception>
        /// <exception cref="TimeoutException">Thrown when the timeout of WPS connection is expired.</exception>
        public static Task <WiFiAP> ConnectWpsWithoutSsidAsync(WpsInfo info)
        {
            Log.Info(Globals.LogTag, "ConnectWpsWithoutSsidAsync");
            wpsWithoutSsidTask = new TaskCompletionSource <WiFiAP>();
            IntPtr id;

            lock (s_callbackMap)
            {
                id = (IntPtr)s_requestId++;
                s_callbackMap[id] = (error, key) =>
                {
                    Log.Info(Globals.LogTag, "ConnectWpsWithoutSsidAsync done");
                    if (error != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Error occurs during WiFi connecting, " + (WiFiError)error);
                        wpsWithoutSsidTask.SetException(WiFiErrorFactory.GetException(error, "Error occurs during WiFi connecting"));
                        wpsWithoutSsidTask = null;
                        Log.Info(Globals.LogTag, "task is null");
                    }
                    else
                    {
                        WiFiAP ap = WiFiManagerImpl.Instance.GetConnectedAP();
                        wpsWithoutSsidTask.SetResult(ap);
                        wpsWithoutSsidTask = null;
                        Log.Info(Globals.LogTag, "task is null");
                    }
                    lock (s_callbackMap)
                    {
                        s_callbackMap.Remove(key);
                    }
                };
            }

            s_context.Post((x) =>
            {
                try
                {
                    int ret = -1;
                    if (info.GetType() == typeof(WpsPbcInfo))
                    {
                        Log.Info(Globals.LogTag, "Interop.WiFi.ConnectByWpsPbcWithoutSsid");
                        ret = Interop.WiFi.ConnectByWpsPbcWithoutSsid(WiFiManagerImpl.Instance.GetSafeHandle(), s_callbackMap[id], id);
                    }
                    else if (info.GetType() == typeof(WpsPinInfo))
                    {
                        WpsPinInfo pinInfo = (WpsPinInfo)info;
                        if (pinInfo.GetWpsPin() == null)
                        {
                            throw new ArgumentNullException("Wps pin should not be null");
                        }

                        if (pinInfo.GetWpsPin().Length != 4 && pinInfo.GetWpsPin().Length != 8)
                        {
                            throw new ArgumentOutOfRangeException("Wps pin should be of 4 or 8 characters long");
                        }

                        Log.Info(Globals.LogTag, "Interop.WiFi.ConnectByWpsPinWithoutSsid");
                        ret = Interop.WiFi.ConnectByWpsPinWithoutSsid(WiFiManagerImpl.Instance.GetSafeHandle(), pinInfo.GetWpsPin(), s_callbackMap[id], id);
                    }

                    if (ret != (int)WiFiError.None)
                    {
                        Log.Error(Globals.LogTag, "Failed to connect wifi, Error - " + (WiFiError)ret);
                        WiFiErrorFactory.ThrowWiFiException(ret, WiFiManagerImpl.Instance.GetSafeHandle().DangerousGetHandle());
                    }
                }
                catch (Exception e)
                {
                    Log.Error(Globals.LogTag, "Exception on ConnectWpsWithoutSsidAsync\n" + e);
                    wpsWithoutSsidTask.SetException(e);
                    wpsWithoutSsidTask = null;
                    Log.Info(Globals.LogTag, "task is null");
                }
            }, null);

            return(wpsWithoutSsidTask.Task);
        }