Skip to content

Commit f2ddd39

Browse files
authored
Merge pull request #2 from SuessLabs/feature/Battery
Device Battery Levels
2 parents 81171fb + f7ec92e commit f2ddd39

File tree

3 files changed

+82
-46
lines changed

3 files changed

+82
-46
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
namespace Linux.Bluetooth
2+
{
3+
public static class BluezConstants
4+
{
5+
public const string DbusService = "org.bluez";
6+
7+
public const string AdapterInterface = "org.bluez.Adapter1";
8+
public const string BatteryInterface = "org.bluez.Battery1";
9+
public const string DeviceInterface = "org.bluez.Device1";
10+
public const string GattServiceInterface = "org.bluez.GattService1";
11+
public const string GattManagerInterface = "org.bluez.GattManager1";
12+
public const string GattCharacteristicInterface = "org.bluez.GattCharacteristic1";
13+
public const string GattDescriptorInterface = "org.bluez.GattDescriptor1";
14+
public const string LeAdvertisementInterface = "org.bluez.LEAdvertisement1";
15+
public const string LeAdvertisingManagerInterface = "org.bluez.LEAdvertisingManager1";
16+
}
17+
18+
}
Lines changed: 34 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,34 @@
1-
namespace Linux.Bluetooth
2-
{
3-
public static class BluezConstants
4-
{
5-
public const string DbusService = "org.bluez";
6-
public const string AdapterInterface = "org.bluez.Adapter1";
7-
public const string DeviceInterface = "org.bluez.Device1";
8-
public const string GattServiceInterface = "org.bluez.GattService1";
9-
public const string GattManagerInterface = "org.bluez.GattManager1";
10-
public const string GattCharacteristicInterface = "org.bluez.GattCharacteristic1";
11-
public const string GattDescriptorInterface = "org.bluez.GattDescriptor1";
12-
public const string LeAdvertisementInterface = "org.bluez.LEAdvertisement1";
13-
public const string LeAdvertisingManagerInterface = "org.bluez.LEAdvertisingManager1";
14-
}
15-
16-
// https://www.bluetooth.com/specifications/gatt/
17-
18-
public static class GattConstants
19-
{
20-
//// Device Information
21-
22-
public const string DeviceInformationServiceUUID = "0000180a-0000-1000-8000-00805f9b34fb";
23-
public const string ModelNameCharacteristicUUID = "00002a24-0000-1000-8000-00805f9b34fb";
24-
public const string ManufacturerNameCharacteristicUUID = "00002a29-0000-1000-8000-00805f9b34fb";
25-
26-
//// Current Time
27-
28-
public const string CurrentTimeServiceUUID = "00001805-0000-1000-8000-00805f9b34fb";
29-
public const string CurrentTimeCharacteristicUUID = "00002a2b-0000-1000-8000-00805f9b34fb";
30-
31-
// Battery Service
32-
// BlueZ presents this service a separate interface, Battery1.
33-
// public const string BatteryServiceUUID = "0000180f-0000-1000-8000-00805f9b34fb";
34-
// public const string BatteryLevelCharacteristicUUID = "00002a19-0000-1000-8000-00805f9b34fb";
35-
36-
// Apple Notification Center Service (ANCS)
37-
// https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Introduction/Introduction.html
38-
public const string ANCServiceUUID = "7905f431-b5ce-4e99-a40f-4b1e122d00d0";
39-
40-
// TODO: Lowercase these.
41-
public const string ANCSNotificationSourceUUID = "9FBF120D-6301-42D9-8C58-25E699A21DBD";
42-
public const string ANCSControlPointUUID = "69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9";
43-
public const string ANCSDataSourceUUID = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB";
44-
}
45-
}
1+
namespace Linux.Bluetooth.Constants
2+
{
3+
/// <summary>
4+
/// GATT Constants based on, https://www.bluetooth.com/specifications/gatt/
5+
/// </summary>
6+
public static class GattConstants
7+
{
8+
//// Device Information
9+
10+
public const string DeviceInformationServiceUUID = "0000180a-0000-1000-8000-00805f9b34fb";
11+
public const string ModelNameCharacteristicUUID = "00002a24-0000-1000-8000-00805f9b34fb";
12+
public const string ManufacturerNameCharacteristicUUID = "00002a29-0000-1000-8000-00805f9b34fb";
13+
14+
//// Current Time
15+
16+
public const string CurrentTimeServiceUUID = "00001805-0000-1000-8000-00805f9b34fb";
17+
public const string CurrentTimeCharacteristicUUID = "00002a2b-0000-1000-8000-00805f9b34fb";
18+
19+
// Battery Service
20+
// BlueZ presents this service a separate interface, Battery1.
21+
// public const string BatteryServiceUUID = "0000180f-0000-1000-8000-00805f9b34fb";
22+
// public const string BatteryLevelCharacteristicUUID = "00002a19-0000-1000-8000-00805f9b34fb";
23+
24+
// Apple Notification Center Service (ANCS)
25+
// https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Introduction/Introduction.html
26+
public const string ANCServiceUUID = "7905f431-b5ce-4e99-a40f-4b1e122d00d0";
27+
28+
// TODO: Lowercase these.
29+
public const string ANCSNotificationSourceUUID = "9FBF120D-6301-42D9-8C58-25E699A21DBD";
30+
31+
public const string ANCSControlPointUUID = "69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9";
32+
public const string ANCSDataSourceUUID = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB";
33+
}
34+
}

src/Linux.Bluetooth/Extensions/DeviceExtensions.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,26 @@ namespace Linux.Bluetooth.Extensions
88
{
99
public static class DeviceExtensions
1010
{
11+
/// <summary>Get battery information for the </summary>
12+
/// <param name="device">Device object.</param>
13+
/// <example>
14+
/// var battery = await device.GetBatteryAsync();
15+
/// var percentage = await battery.GetPercentageAsync();
16+
/// </example>
17+
/// <returns>Battery or null if unavailable.</returns>
18+
public static async Task<IBattery1> GetBatteryAsync(this IDevice1 device)
19+
{
20+
try
21+
{
22+
// TODO: Create Battery class with OnPropertyChanges for event notification subscriptions
23+
return await GetBatteryInternalAsync(BluezConstants.BatteryInterface, device);
24+
}
25+
catch
26+
{
27+
return null;
28+
}
29+
}
30+
1131
/// <summary>Get a GATT Service with the supplied Service UUID.</summary>
1232
/// <param name="device">Device object.</param>
1333
/// <param name="serviceUuid">UUID of the Service.</param>
@@ -33,7 +53,7 @@ public static async Task<IGattService1> GetServiceAsync(this IDevice1 device, st
3353
/// <returns>Collection of Gatt Services.</returns>
3454
public static Task<IReadOnlyList<IGattService1>> GetServicesAsync(this IDevice1 device)
3555
{
36-
return BlueZManager.GetProxiesAsync<IGattService1>(BluezConstants.GattServiceInterface, device);
56+
return BlueZManager.GetProxiesAsync<IGattService1>(BluezConstants.GattServiceInterface, device);
3757
}
3858

3959
/// <summary>Wait for Device's Property and specified value to resolve.</summary>
@@ -104,5 +124,14 @@ private static (Task, IDisposable) WaitForPropertyValueInternal<T>(IDevice1 obj,
104124

105125
return (taskSource.Task, watcher);
106126
}
127+
128+
private static async Task<IBattery1> GetBatteryInternalAsync(string batteryInterface, IDevice1 device)
129+
{
130+
var battery = await Task.Run(() =>
131+
Connection.System.CreateProxy<IBattery1>(BluezConstants.DbusService, device.ObjectPath)
132+
);
133+
134+
return battery;
135+
}
107136
}
108137
}

0 commit comments

Comments
 (0)