-
Notifications
You must be signed in to change notification settings - Fork 0
/
DeviceListBLETab.xaml.cs
85 lines (78 loc) · 2.81 KB
/
DeviceListBLETab.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System.Collections.ObjectModel;
using Plugin.BLE.Abstractions.Contracts;
using ILogger = MetroLog.ILogger;
using LoggerFactory = MetroLog.LoggerFactory;
namespace CardioMeter;
public partial class DeviceListBLETab
{
private static readonly ILogger Log = LoggerFactory.GetLogger(nameof(DeviceListBLETab));
private BLEDeviceManager _bleDeviceManager => App.Current.Services.GetService<BLEDeviceManager>();
private bool _isScanning;
ObservableCollection<IDevice> DiscoveredDevices = new ();
public DeviceListBLETab()
{
InitializeComponent();
DeviceCollectionView.ItemsSource = DiscoveredDevices;
_bleDeviceManager.DeviceDiscovered += OnDeviceDiscovered;
_bleDeviceManager.StateChanged += (_,e) => BLEStatusLabel.Text = "BLE Status: " + e.NewState;
BLEStatusLabel.Text = "BLE Status: " + _bleDeviceManager.State;
BLEScanToggleBtn.Clicked += OnBLEScanToggleBtnClicked;
}
private async void OnDeviceCollectionViewSelectionChanged(object sender, SelectionChangedEventArgs e)
{
_bleDeviceManager.StopScanning();
_isScanning = false;
BLEScanToggleBtn.Text = "Start Scanning";
var deviceGuid = ((IDevice)e.CurrentSelection[0]).Id;
AppPreferences.LastSelectedBLEUUID = deviceGuid.ToString();
try
{
var connectedDevice = App.Current.Services.GetService<BLEHeartRateManager>();
await connectedDevice.Connect(deviceGuid);
}
catch (Exception ex)
{
Log.Error("Error connecting to device", ex);
await DisplayAlert("Error", $"Error connecting to device: {ex.GetType()}\n\n{ex.Message}", "OK");
DeviceCollectionView.SelectedItem = null;
return;
}
await Shell.Current.GoToAsync("//home");
}
private void OnBLEScanToggleBtnClicked(object sender, EventArgs e)
{
if (_isScanning)
{
_bleDeviceManager.StopScanning();
_isScanning = false;
BLEScanToggleBtn.Text = "Start Scanning";
}
else
{
if (_bleDeviceManager.CheckPermissions())
{
_bleDeviceManager.StartScanning();
_isScanning = true;
BLEScanToggleBtn.Text = "Stop Scanning";
}
}
}
private void OnDeviceDiscovered(object sender, IDevice e)
{
Log.Info($"Device Discovered: {e.Name}");
MainThread.BeginInvokeOnMainThread(() =>
{
DiscoveredDevices.Add(e);
});
}
protected override void OnDisappearing()
{
base.OnDisappearing();
if (_isScanning)
{
_bleDeviceManager.StopScanning();
_isScanning = false;
BLEScanToggleBtn.Text = "Start Scanning";
}
}
}