コード例 #1
0
 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();
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }