public BleMoCoBusCommService(Ble.IDevice device, Ble.IAdapter adapter) { Debug.WriteLine("Create BleMoCoBusCommService"); _device = device; _adapter = adapter; _adapter.DeviceConnected += AdapterOnDeviceConnected; _adapter.DeviceDisconnected += AdapterOnDeviceDisconnected; }
private void AdapterOnDeviceDisconnected(object sender, Ble.DeviceConnectionEventArgs e) { Debug.WriteLine("AdapterOnDeviceDisconnected 1"); if (e.Device.ID != _device.ID) return; Debug.WriteLine("AdapterOnDeviceDisconnected 2"); _device = e.Device; OnDisconnect(); }
private void AdapterOnDeviceConnected(object sender, Ble.DeviceConnectionEventArgs e) { Debug.WriteLine("AdapterOnDeviceConnected 1"); if (e.Device.ID != _device.ID) return; Debug.WriteLine("AdapterOnDeviceConnected 2"); _device = e.Device; _device.ServicesDiscovered += DeviceOnServicesDiscovered; _device.DiscoverServices(); }
public Sensor(ble.IAdapter adapter, ble.IDevice device, ble.IService service) { BleDevice = device; Loading = true; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Loading")); this.service = service; switch (service.Name) { case "TI SensorTag Barometer": ImageId = "Pressure"; break; case "TI SensorTag Humidity": ImageId = "Humidity"; break; case "TI SensorTag Infrared Thermometer": ImageId = "Thermometer"; break; } service.CharacteristicsDiscovered += async(s, e) => { foreach (var characteristic in service.Characteristics) { if (characteristic.Name.Contains("Data")) { dataChar = await characteristic.ReadAsync(); await Task.Delay(1000); } else if (characteristic.Name.Contains("On/Off")) { onOffChar = await characteristic.ReadAsync(); onOffChar.Write(new byte[] { 0x01 }); await Task.Delay(1000); } else if (characteristic.Name.Contains("Sample Rate")) { sampleChar = await characteristic.ReadAsync(); await Task.Delay(1000); } } if (dataChar.CanUpdate) { valueUpdatedHandler = (se, ea) => { Data = Decode(dataChar); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Data")); }; dataChar.ValueUpdated += valueUpdatedHandler; dataChar = await dataChar.ReadAsync(); await Task.Delay(2000); dataChar.StartUpdates(); Loading = false; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Loading")); } }; service.DiscoverCharacteristics(); }