Ejemplo n.º 1
0
        private async void StartScan()
        {
            Log.Debug("StartScan. BLE adapter. enabled={0}", m_adapter.IsEnabled);
            if (IsScanning)
            {
                return;
            }
            if (!m_adapter.IsEnabled)
            {
                m_dialogs.Toast("Cannot start scan, Bluetooth is turned off");
                return;
            }
            StopScan();
            IsScanning   = true;
            m_scanCancel = new CancellationTokenSource(TimeSpan.FromSeconds(30));
            await m_adapter.ScanForDevices(
                Observer.Create(
                    ( IBlePeripheral peripheral ) =>
            {
                Device.BeginInvokeOnMainThread(
                    () =>
                {
                    var existing = FoundDevices.FirstOrDefault(d => d.Equals(peripheral));
                    if (existing != null)
                    {
                        /*
                         * Log.Trace(
                         * "Advertisement. rssi={2} name={3} address={0} id={1}",
                         * device.Address.EncodeToBase16String(),
                         * device.DeviceId,
                         * device.Rssi,
                         * device.Advertisement.DeviceName );
                         * Log.Trace(
                         * "   services={0} tx={1} service-data={2}",
                         * device.Advertisement.Services.Select( x => x.ToString() ).Join( "," ),
                         * device.Advertisement.TxPowerLevel,
                         * device.Advertisement.ServiceData.Select( x => x.Key + ":" + x.Value.EncodeToBase16String() ).Join( "," ) );
                         * Log.Trace(
                         * "   flags={0} mfg-data={1}",
                         * device.Advertisement.Flags,
                         * device.Advertisement.ManufacturerSpecificData.Select(
                         *          x => GetManufacturerName( x.Key ) + ":" + x.Value.EncodeToBase16String() ).Join( "," ) );
                         * //*/
                        existing.Update(peripheral);
                    }
                    else
                    {
                        FoundDevices.Add(new BlePeripheralViewModel(peripheral));
                    }
                });
            }), m_scanCancel.Token);

            IsScanning = false;
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Scan for nearby BLE device advertisements. Stop scanning when <paramref name="token" /> is cancelled.
 /// </summary>
 /// <param name="adapter">The adapter to use for scanning</param>
 /// <param name="advertisementDiscovered">Callback to notify for each discovered advertisement</param>
 public static Task ScanForDevices(this IBluetoothLowEnergyAdapter adapter,
                                   Action <IBlePeripheral> advertisementDiscovered, CancellationToken token)
 {
     return(adapter.ScanForDevices(Observer.Create(advertisementDiscovered), token));
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Scan for nearby BLE device advertisements. Stop scanning after <paramref name="timeout" />
 /// </summary>
 /// <param name="adapter">The adapter to use for scanning</param>
 /// <param name="advertisementDiscovered">Callback to notify for each discovered advertisement</param>
 /// <param name="timeout">cancel scan after this length of time</param>
 public static Task ScanForDevices(this IBluetoothLowEnergyAdapter adapter,
                                   IObserver <IBlePeripheral> advertisementDiscovered, TimeSpan timeout)
 {
     return(adapter.ScanForDevices(advertisementDiscovered, new CancellationTokenSource(timeout).Token));
 }