예제 #1
0
        public static IAsyncAction UpdateTile(TetheringState state)
        {
            var loader = new Windows.ApplicationModel.Resources.ResourceLoader();

            var enabled    = state == TetheringState.Enabled;
            var logo       = enabled ? logoOn : logoOff;
            var deviceName = AppSettings.RemoteDevice;
            var tileText   = string.Format(loader.GetString(enabled ? "Tile_Tooltip_ToDisable" : "Tile_Tooltip_ToEnable"), deviceName);
            var s          = new SecondaryTile(SwitchTileId,
                                               tileText,
                                               !enabled ? EnableSwitchArgument : DisableSwitchArgument,
                                               logo, TileSize.Square150x150);

            // Specify a foreground text value.
            return(AsyncInfo.Run(async(cancel) =>
            {
                try
                {
                    await s.UpdateAsync();
                }
                catch (Exception)
                {
                    // Ignore
                }
            }));
        }
예제 #2
0
        public static IAsyncOperation <TetheringState> SendBluetooth(TetheringState state)
        {
            return(AsyncInfo.Run(async(cancel) =>
            {
                if (!await EnableBluetooh())
                {
                    return TetheringState.NoBluetooth;
                }

                if (AppSettings.RemoteDevice == null)
                {
                    return TetheringState.Error;
                }
                var device = (await GetDevices()).SingleOrDefault(d => d.Name == AppSettings.RemoteDevice);
                if (device == null)
                {
                    return TetheringState.Error;
                }
                var result = await SendBluetooth(device.Device, state);

                return result;
            }));
        }
예제 #3
0
        public static IAsyncOperation <TetheringState> SendBluetooth(DeviceInformation dev, TetheringState state)
        {
            return(AsyncInfo.Run(async(cancel) =>
            {
                for (var tryout = 10; tryout > 0; tryout--)
                {
                    try
                    {
                        var selector = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(ServiceUuid));
                        var devices = await DeviceInformation.FindAllAsync(selector);
                        var service = devices.SingleOrDefault(d => d.Id.StartsWith(dev.Id, StringComparison.OrdinalIgnoreCase));
                        if (service == null)
                        {
                            throw new Exception("Tethermote Service not found");
                        }

                        using (var socket = await ConnectDevice(service))
                        {
                            using (var outstream = socket.OutputStream)
                            {
                                await outstream.WriteAsync(new byte[] { (byte)state }.AsBuffer());
                            }
                            using (var instream = socket.InputStream)
                            {
                                var buf = new Windows.Storage.Streams.Buffer(1);
                                var red = (await instream.ReadAsync(buf, 1, Windows.Storage.Streams.InputStreamOptions.Partial)).Length;

                                if (red == 1)
                                {
                                    return (TetheringState)buf.ToArray()[0];
                                }
                                Debug.WriteLine("No data");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex);
                        try
                        {
                            await PingDevice(dev.Id);
                        }
                        catch (Exception e2)
                        {
                            Debug.WriteLine(e2);
                        }
                        if (tryout != 1)
                        {
                            await Task.Delay(100);
                        }
                    }
                }
                return TetheringState.Error;
            }));
        }