diff --git a/src/Linux.Bluetooth/Constants/BluezConstants.cs b/src/Linux.Bluetooth/Constants/BluezConstants.cs
new file mode 100644
index 0000000..3f42f31
--- /dev/null
+++ b/src/Linux.Bluetooth/Constants/BluezConstants.cs
@@ -0,0 +1,18 @@
+namespace Linux.Bluetooth
+{
+ public static class BluezConstants
+ {
+ public const string DbusService = "org.bluez";
+
+ public const string AdapterInterface = "org.bluez.Adapter1";
+ public const string BatteryInterface = "org.bluez.Battery1";
+ public const string DeviceInterface = "org.bluez.Device1";
+ public const string GattServiceInterface = "org.bluez.GattService1";
+ public const string GattManagerInterface = "org.bluez.GattManager1";
+ public const string GattCharacteristicInterface = "org.bluez.GattCharacteristic1";
+ public const string GattDescriptorInterface = "org.bluez.GattDescriptor1";
+ public const string LeAdvertisementInterface = "org.bluez.LEAdvertisement1";
+ public const string LeAdvertisingManagerInterface = "org.bluez.LEAdvertisingManager1";
+ }
+
+}
diff --git a/src/Linux.Bluetooth/Constants.cs b/src/Linux.Bluetooth/Constants/GattConstants.cs
similarity index 63%
rename from src/Linux.Bluetooth/Constants.cs
rename to src/Linux.Bluetooth/Constants/GattConstants.cs
index 3cf067c..bf343c0 100644
--- a/src/Linux.Bluetooth/Constants.cs
+++ b/src/Linux.Bluetooth/Constants/GattConstants.cs
@@ -1,45 +1,34 @@
-namespace Linux.Bluetooth
-{
- public static class BluezConstants
- {
- public const string DbusService = "org.bluez";
- public const string AdapterInterface = "org.bluez.Adapter1";
- public const string DeviceInterface = "org.bluez.Device1";
- public const string GattServiceInterface = "org.bluez.GattService1";
- public const string GattManagerInterface = "org.bluez.GattManager1";
- public const string GattCharacteristicInterface = "org.bluez.GattCharacteristic1";
- public const string GattDescriptorInterface = "org.bluez.GattDescriptor1";
- public const string LeAdvertisementInterface = "org.bluez.LEAdvertisement1";
- public const string LeAdvertisingManagerInterface = "org.bluez.LEAdvertisingManager1";
- }
-
- // https://www.bluetooth.com/specifications/gatt/
-
- public static class GattConstants
- {
- //// Device Information
-
- public const string DeviceInformationServiceUUID = "0000180a-0000-1000-8000-00805f9b34fb";
- public const string ModelNameCharacteristicUUID = "00002a24-0000-1000-8000-00805f9b34fb";
- public const string ManufacturerNameCharacteristicUUID = "00002a29-0000-1000-8000-00805f9b34fb";
-
- //// Current Time
-
- public const string CurrentTimeServiceUUID = "00001805-0000-1000-8000-00805f9b34fb";
- public const string CurrentTimeCharacteristicUUID = "00002a2b-0000-1000-8000-00805f9b34fb";
-
- // Battery Service
- // BlueZ presents this service a separate interface, Battery1.
- // public const string BatteryServiceUUID = "0000180f-0000-1000-8000-00805f9b34fb";
- // public const string BatteryLevelCharacteristicUUID = "00002a19-0000-1000-8000-00805f9b34fb";
-
- // Apple Notification Center Service (ANCS)
- // https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Introduction/Introduction.html
- public const string ANCServiceUUID = "7905f431-b5ce-4e99-a40f-4b1e122d00d0";
-
- // TODO: Lowercase these.
- public const string ANCSNotificationSourceUUID = "9FBF120D-6301-42D9-8C58-25E699A21DBD";
- public const string ANCSControlPointUUID = "69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9";
- public const string ANCSDataSourceUUID = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB";
- }
-}
+namespace Linux.Bluetooth.Constants
+{
+ ///
+ /// GATT Constants based on, https://www.bluetooth.com/specifications/gatt/
+ ///
+ public static class GattConstants
+ {
+ //// Device Information
+
+ public const string DeviceInformationServiceUUID = "0000180a-0000-1000-8000-00805f9b34fb";
+ public const string ModelNameCharacteristicUUID = "00002a24-0000-1000-8000-00805f9b34fb";
+ public const string ManufacturerNameCharacteristicUUID = "00002a29-0000-1000-8000-00805f9b34fb";
+
+ //// Current Time
+
+ public const string CurrentTimeServiceUUID = "00001805-0000-1000-8000-00805f9b34fb";
+ public const string CurrentTimeCharacteristicUUID = "00002a2b-0000-1000-8000-00805f9b34fb";
+
+ // Battery Service
+ // BlueZ presents this service a separate interface, Battery1.
+ // public const string BatteryServiceUUID = "0000180f-0000-1000-8000-00805f9b34fb";
+ // public const string BatteryLevelCharacteristicUUID = "00002a19-0000-1000-8000-00805f9b34fb";
+
+ // Apple Notification Center Service (ANCS)
+ // https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Introduction/Introduction.html
+ public const string ANCServiceUUID = "7905f431-b5ce-4e99-a40f-4b1e122d00d0";
+
+ // TODO: Lowercase these.
+ public const string ANCSNotificationSourceUUID = "9FBF120D-6301-42D9-8C58-25E699A21DBD";
+
+ public const string ANCSControlPointUUID = "69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9";
+ public const string ANCSDataSourceUUID = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB";
+ }
+}
diff --git a/src/Linux.Bluetooth/Extensions/DeviceExtensions.cs b/src/Linux.Bluetooth/Extensions/DeviceExtensions.cs
index c23ddd5..24dec0b 100644
--- a/src/Linux.Bluetooth/Extensions/DeviceExtensions.cs
+++ b/src/Linux.Bluetooth/Extensions/DeviceExtensions.cs
@@ -8,6 +8,26 @@ namespace Linux.Bluetooth.Extensions
{
public static class DeviceExtensions
{
+ /// Get battery information for the
+ /// Device object.
+ ///
+ /// var battery = await device.GetBatteryAsync();
+ /// var percentage = await battery.GetPercentageAsync();
+ ///
+ /// Battery or null if unavailable.
+ public static async Task GetBatteryAsync(this IDevice1 device)
+ {
+ try
+ {
+ // TODO: Create Battery class with OnPropertyChanges for event notification subscriptions
+ return await GetBatteryInternalAsync(BluezConstants.BatteryInterface, device);
+ }
+ catch
+ {
+ return null;
+ }
+ }
+
/// Get a GATT Service with the supplied Service UUID.
/// Device object.
/// UUID of the Service.
@@ -33,7 +53,7 @@ public static async Task GetServiceAsync(this IDevice1 device, st
/// Collection of Gatt Services.
public static Task> GetServicesAsync(this IDevice1 device)
{
- return BlueZManager.GetProxiesAsync(BluezConstants.GattServiceInterface, device);
+ return BlueZManager.GetProxiesAsync(BluezConstants.GattServiceInterface, device);
}
/// Wait for Device's Property and specified value to resolve.
@@ -104,5 +124,14 @@ private static (Task, IDisposable) WaitForPropertyValueInternal(IDevice1 obj,
return (taskSource.Task, watcher);
}
+
+ private static async Task GetBatteryInternalAsync(string batteryInterface, IDevice1 device)
+ {
+ var battery = await Task.Run(() =>
+ Connection.System.CreateProxy(BluezConstants.DbusService, device.ObjectPath)
+ );
+
+ return battery;
+ }
}
}