Bluetooth-Low-Energy-LED-Matrix icon indicating copy to clipboard operation
Bluetooth-Low-Energy-LED-Matrix copied to clipboard

Not up-to-date with Bluez 5.50 stack

Open dhruvkakadiya opened this issue 6 years ago • 1 comments
trafficstars

There are several things need to be updated in bluez_components.py file as to support latest functionalities in the latest stack. Also several functionalities are missing like setting data values and local name in the advertisement.

For example, I have below changes in my local branch.

diff --git a/src/bluez_components.py b/src/bluez_components.py
index cbe1f2a..ab2f6be 100644
--- a/src/bluez_components.py
+++ b/src/bluez_components.py
@@ -241,12 +241,14 @@ class Advertisement(dbus.service.Object):
     def __init__(self, bus, index, advertising_type):
         self.path = self.PATH_BASE + str(index)
         self.bus = bus
+        self.local_name = None
         self.ad_type = advertising_type
         self.service_uuids = None
         self.manufacturer_data = None
         self.solicit_uuids = None
         self.service_data = None
         self.include_tx_power = None
+        self.data = None
         dbus.service.Object.__init__(self, bus, self.path)
 
     def get_properties(self):
@@ -260,14 +262,21 @@ class Advertisement(dbus.service.Object):
                                                     signature='s')
         if self.manufacturer_data is not None:
             properties['ManufacturerData'] = dbus.Dictionary(
-                self.manufacturer_data, signature='qay')
+                self.manufacturer_data, signature='qv')
         if self.service_data is not None:
             properties['ServiceData'] = dbus.Dictionary(self.service_data,
-                                                        signature='say')
+                                                        signature='sv')
+        if self.local_name is not None:
+            properties['LocalName'] = dbus.String(self.local_name)
         if self.include_tx_power is not None:
             properties['IncludeTxPower'] = dbus.Boolean(self.include_tx_power)
         return {LE_ADVERTISEMENT_IFACE: properties}
 
+        if self.data is not None:
+            properties['Data'] = dbus.Dictionary(
+                self.data, signature='yv')
+        return {LE_ADVERTISEMENT_IFACE: properties}
+
     def get_path(self):
         return dbus.ObjectPath(self.path)
 
@@ -283,13 +292,23 @@ class Advertisement(dbus.service.Object):
 
     def add_manufacturer_data(self, manuf_code, data):
         if not self.manufacturer_data:
-            self.manufacturer_data = dict()
-        self.manufacturer_data[manuf_code] = data
+            self.manufacturer_data = dbus.Dictionary({}, signature='qv')
+        self.manufacturer_data[manuf_code] = dbus.Array(data, signature='y')
 
     def add_service_data(self, uuid, data):
         if not self.service_data:
-            self.service_data = dict()
-        self.service_data[uuid] = data
+            self.service_data = dbus.Dictionary({}, signature='sv')
+        self.service_data[uuid] = dbus.Array(data, signature='y')
+
+    def add_local_name(self, name):
+        if not self.local_name:
+            self.local_name = ""
+        self.local_name = dbus.String(name)
+
+    def add_data(self, ad_type, data):
+        if not self.data:
+            self.data = dbus.Dictionary({}, signature='yv')
+        self.data[ad_type] = dbus.Array(data, signature='y')
 
     @dbus.service.method(DBUS_PROP_IFACE,
                          in_signature='s',

I have tested above changes for Bluez5-5.50 stack and they are working fine. I am also looking at changes to set advertising params as well.

dhruvkakadiya avatar Mar 01 '19 00:03 dhruvkakadiya

Thanks for the info. I haven't actively worked on this demo project since I created it in 2016. Back then BlueZ's BLE advertisement API was still marked as experimental. I pulled the code in bluez_components.py from BlueZ's own examples, so it is no surprise that some things have changed. For now I don't have enough time to come back to this project, but I will keep this issue open so that others can see that BlueZ's API has changed in the meantime.

WIStudent avatar Mar 01 '19 22:03 WIStudent