private void InternalAdvertisementHandler(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args) { Console.WriteLine("Advertisement Received For: " + args.Advertisement.LocalName); if (args.Advertisement.LocalName.ToLower().StartsWith("brsolesleft")) { Console.WriteLine(String.Format("Found {0} with RSSI {1}", args.Advertisement.LocalName, args.RawSignalStrengthInDBm)); this.left = new BrilliantSoleDevice(args.Advertisement.LocalName, args.BluetoothAddress, args.RawSignalStrengthInDBm); } if (args.Advertisement.LocalName.ToLower().StartsWith("brsolesright")) { Console.WriteLine(String.Format("Found {0} with RSSI {1}", args.Advertisement.LocalName, args.RawSignalStrengthInDBm)); this.right = new BrilliantSoleDevice(args.Advertisement.LocalName, args.BluetoothAddress, args.RawSignalStrengthInDBm); } // If we have found both devices, and are not already connecting. if (this.left != null && this.right != null && this.state != State.Connecting) { Console.WriteLine( String.Format( "Left Device ({0}) and Right Device ({1}) have been found, stopping scanning and attempting to connect.", this.left.name, this.right.name ) ); this.watcher.Stop(); this.ConnectAsync(); } }
private async Task <BrilliantSoleDevice> RetrieveCharacteristicsAsync(BrilliantSoleDevice sole) { Console.WriteLine("Attempting to retrieve forward haptic characteristic for " + sole.name); var forward = await sole.haptics.GetCharacteristicsForUuidAsync(FORWARD_HAPTIC_CHARACTERISTIC); if (forward.Characteristics.Count == 0) { Console.WriteLine("Failed to retrieve characteristics for " + sole.name); Console.WriteLine("Status Code: " + forward.Status); throw new Exception("Failed to retrieve characteristics."); // TODO - Recover } sole.forward = forward.Characteristics[0]; Console.WriteLine("Attempting to retrieve reverse haptic characteristic for " + sole.name); var reverse = await sole.haptics.GetCharacteristicsForUuidAsync(REVERSE_HAPTIC_CHARACTERISTIC); if (reverse.Characteristics.Count == 0) { Console.WriteLine("Failed to retrieve characteristics for " + sole.name); Console.WriteLine("Status Code: " + forward.Status); throw new Exception("Failed to retrieve characteristics."); // TODO - Recover } sole.reverse = reverse.Characteristics[0]; Console.WriteLine("Successfully to retrieved haptic characteristics from " + sole.name); return(sole); }
/// <summary> /// Update a device's haptic values. /// </summary> /// <param name="device">The device to update.</param> /// <param name="forward">The forward value to set.</param> /// <param name="reverse">The reverse value to set.</param> /// <returns></returns> private async Task <BrilliantSoleDevice> UpdateDeviceHaptics(BrilliantSoleDevice device, UInt16 forward, UInt16 reverse) { if (this.state != State.Connected) { return(null); } Console.WriteLine("Attempting to update device {0} with forward value of {1} and reverse value of {2}", device.name, forward, reverse); try { var forwardWriter = new DataWriter(); forwardWriter.WriteUInt16(forward); var reverseWriter = new DataWriter(); reverseWriter.WriteUInt16(reverse); var forwardResult = await device.forward.WriteValueWithResultAsync(forwardWriter.DetachBuffer()); Console.WriteLine(String.Format("Wrote value {0} to {1} forward haptic with status {2}", forward, device.name, forwardResult.Status)); var reverseResult = await device.reverse.WriteValueWithResultAsync(reverseWriter.DetachBuffer()); Console.WriteLine(String.Format("Wrote value {0} to {1} reverse haptic with status {2}", reverse, device.name, reverseResult.Status)); } catch (Exception err) { Console.WriteLine("Invalid value exception, unable to write values."); Console.WriteLine(err); } return(device); }
private async Task <BluetoothLEDevice> ConnectToDeviceAsync(BrilliantSoleDevice sole) { Console.WriteLine("Attempting to connect to " + sole.name); sole.device = await BluetoothLEDevice.FromBluetoothAddressAsync(sole.address); if (sole.device == null) { Console.WriteLine("Failed to connect to " + sole.name); throw new Exception("Failed to connect."); // TODO - Recover } Console.WriteLine("Successfully connected to " + sole.name); return(sole.device); }
private async Task <GattDeviceServicesResult> RetrieveServicesAsync(BrilliantSoleDevice sole) { Console.WriteLine("Attempting to retrieve haptic service from " + sole.name); var result = await sole.device.GetGattServicesForUuidAsync(HAPTIC_SERVICE); if (result.Services.Count == 0) { Console.WriteLine("Failed to retrieve services for " + sole.name); Console.WriteLine("Status Code: " + result.Status); throw new Exception("Failed to retrieve services."); // TODO - Recover } sole.haptics = result.Services[0]; Console.WriteLine("Successfully to retrieved haptic service from " + sole.name); return(result); }