public override void OnConnectionStateChange (BluetoothGatt gatt, GattStatus status, ProfileState newState) { Console.WriteLine ("OnConnectionStateChange: "); base.OnConnectionStateChange (gatt, status, newState); //TODO: need to pull the cached RSSI in here, or read it (requires the callback) Device device = new Device (gatt.Device, gatt, this, 0); switch (newState) { // disconnected case ProfileState.Disconnected: Console.WriteLine ("disconnected"); this.DeviceDisconnected (this, new DeviceConnectionEventArgs () { Device = device }); break; // connecting case ProfileState.Connecting: Console.WriteLine ("Connecting"); break; // connected case ProfileState.Connected: Console.WriteLine ("Connected"); this.DeviceConnected (this, new DeviceConnectionEventArgs () { Device = device }); break; // disconnecting case ProfileState.Disconnecting: Console.WriteLine ("Disconnecting"); break; } }
public void OnLeScan (BluetoothDevice bleDevice, int rssi, byte[] scanRecord) { Console.WriteLine ("Adapter.LeScanCallback: " + bleDevice.Name); // TODO: for some reason, this doesn't work, even though they have the same pointer, // it thinks that the item doesn't exist. so i had to write my own implementation // if(!this._discoveredDevices.Contains(device) ) { // this._discoveredDevices.Add (device ); // } Device device = new Device (bleDevice, null, null, rssi); if (!DeviceExistsInDiscoveredList (bleDevice)) this._discoveredDevices.Add (device); // TODO: in the cross platform API, cache the RSSI // TODO: shouldn't i only raise this if it's not already in the list? this.DeviceDiscovered (this, new DeviceDiscoveredEventArgs { Device = device }); }