/// <Docs>GATT client</Docs> /// <summary> /// Raises the connection state change event. /// </summary> /// <param name="gatt">Gatt.</param> /// <param name="status">Status.</param> /// <param name="newState">New state.</param> public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus status, ProfileState newState) { base.OnConnectionStateChange(gatt, status, newState); if (status != GattStatus.Success) return; var device = new Device(gatt.Device, gatt, this, 0, null); switch (newState) { case ProfileState.Disconnected: device.State = DeviceState.Disconnected; try { gatt.Close(); gatt = null; } catch (Exception ex) { Debug.WriteLine("Unable to close connection to gatt. Exception: {0}", ex.Message); } finally { DeviceDisconnected(this, new DeviceConnectionEventArgs(device)); } break; case ProfileState.Connected: device.State = DeviceState.Connected; DeviceConnected(this, new DeviceConnectionEventArgs(device)); break; } }
/// <summary> /// Raises the le scan event. /// </summary> /// <param name="bleDevice">The BLE device that was discovered.</param> /// <param name="rssi">Rssi.</param> /// <param name="scanRecord">Scan record.</param> public void OnLeScan(BluetoothDevice bleDevice, int rssi, byte[] scanRecord) { var deviceId = Device.DeviceIdFromAddress(bleDevice.Address); if (DiscoveredDevices.All(x => x.Id != deviceId)) { var device = new Device(bleDevice, null, null, rssi, scanRecord); DiscoveredDevices.Add(device); DeviceDiscovered(this, new DeviceDiscoveredEventArgs(device)); } }