2016-07-26 16 views
0

Ich verbinde mit einem Magicblue Bluetooth LE LED-Licht mit C# unter Windows 10 und möchte in der Lage sein, seine Farben zu ändern.Wie kann ich mit C# alle Dienste für ein Bluetooth LE-Gerät (BLE) abrufen?

Ich bin in der Lage, den GattDeviceService zu bekommen und auf seine einzige Eigenschaft gut zugreifen. Ich bin jedoch nicht in der Lage, herauszufinden, wie ich zu den anderen beiden Diensten des Geräts komme. Einer von ihnen hat eine Schreibeigenschaft, um die RGB-Farbe einzustellen.

Mit meinem iPhone mit der LightBlue App und Microsofts BthGATTDump.exe kann ich die Dienste und Eigenschaften sehen. Ich dachte, sobald ich den GattDeviceService bekomme, konnte ich "GetAllIncludeServices()" aber das gibt eine leere Liste zurück. Wenn ich versuche, eine bestimmte Dienstleistung zu erhalten, für die ich die Guid habe, ist es nicht auch (siehe unten):

//Watcher for Bluetooth LE Services 
private void StartBLEWatcher() 
{ 
    int discoveredServices = 0; 
    // Hook up handlers for the watcher events before starting the watcher 
    OnBLEAdded = async (watcher, deviceInfo) => 
    { 
     Dispatcher.RunAsync(CoreDispatcherPriority.Low, async() => 
     { 
      Debug.WriteLine("OnBLEAdded: " + deviceInfo.Id); 
      GattDeviceService service = await GattDeviceService.FromIdAsync(deviceInfo.Id); 
      var services = service.GetAllIncludedServices(); 
      int count0 = services.Count; //returns 0 
      Guid G = new Guid("0000ffe5-0000-1000-8000-00805f9b34fb"); 
      var services2 = service.GetIncludedServices(G); 
      int count = services2.Count; //returns 0 although this service "should" exist 
      var characteristics = service.GetAllCharacteristics(); 
      int count2 = characteristics.Count; //return 1 This is the Gatt service with Notify 

Im Fall ist es für jedermann nützlich mir zu helfen, unten ist der bthgattdump.exe Ausgang für die LED BLE-Gerät.

C:\Program Files (x86)\Windows Kits\10\Tools\x64\Bluetooth\BthGATTDump>bthgattdump 
Microsoft Bluetooth GATT database viewer v1.00 Copyright (c) Microsoft Corp. 
Please select device 
     0 - LEDBLE-CA913BE2 
     1 - HID OVER GATT 
     2: To quit 
0 
Selected device - LEDBLE-CA913BE2 
Device Address - eb0cca913be2 (STATIC) 
[Service] Handle=0x0001 Type=0x1800(GAP) 
    [Characteristic] Handle=0x0002 ValueHandle=0x0003 Type=0x2a00(Device Name) Properties=(Read/Write) 
     [Value] LEDBLE-CA913BE2 
    [Characteristic] Handle=0x0004 ValueHandle=0x0005 Type=0x2a01(Appearance) Properties=(Read) 
     [Value] [4000] 
    [Characteristic] Handle=0x0006 ValueHandle=0x0007 Type=0x2a04(Peripheral Preferred Connection Parameters) Properties=(Read) 
     [Value] [100018000000C800] 
[Service] Handle=0x0008 Type=0x1801(GATT) 
[Service] Handle=0x0009 Type=0xfff0 
[Service] Handle=0x000a Type=0xffe5 
    [Characteristic] Handle=0x000b ValueHandle=0x000c Type=0xffe9 Properties=(WriteWithoutResponse) 
[Service] Handle=0x000d Type=0xffe0 
    [Characteristic] Handle=0x000e ValueHandle=0x000f Type=0xffe4 Properties=(Notify) 
     [Descriptor] Handle=0x0010 Type=0x2902(Client Configuration) 
      [Value] No subscription 

C:\Program Files (x86)\Windows Kits\10\Tools\x64\Bluetooth\BthGATTDump> 

Welche dumme Sache fehlt mir?

Antwort

1

Sie möchten wahrscheinlich die "Inklusivleistungen" nicht bekommen. Enthaltene Dienste ist ein spezielles Konzept in BLE, das ich bezweifle, dass Sie verwenden, die verwendet wird, um einen Dienst von einem anderen zu verknüpfen.

Achten Sie in Ihrem Beobachter auf BLE-Geräte und nicht auf einen bestimmten Dienst. Mit diesem BLE-Gerät erhalten Sie eine Liste aller primären-Dienste.

+0

Das war es ... Ich musste zurück zum Gerät gehen, um die Dienste zu bekommen. – burhop

0
var services = service.GetAllIncludedServices(); 
var services2 = service.GetIncludedServices(G); 

Wenn RGB-Farb Service im service Sie bekommen haben enthalten ist, funktioniert dies. Sonst nicht.

Vielleicht können Sie versuchen, diese:

var GatDevices = await DeviceInformation.FindAllAsync(GattDeviceService.GetDeviceSelectorFromUuid(Guid.Parse("0000ffe5-0000-1000-8000-00805f9b34fb"))); 
var service = await GattDeviceService.FromIdAsync(GatDevices[0].Id); 
var characteristics = service.GetAllCharacteristics(); 

Weitere Informationen zu FindAllAsync-API finden Sie here.