You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
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.
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.
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.
The text was updated successfully, but these errors were encountered: