Hi Barry, On Thu, Jul 18, 2019 at 10:03 AM Barry Byford <31baz66@xxxxxxxxx> wrote: > > Hello, > > The Python examples provided in the test directory of the BlueZ > repository use the python-dbus library. Looking at the documentation > of that library it does start by raising concerns and offering > alternatives. I have been looking at some of the alternatives and am > having difficultly getting them to work with BlueZ. I have been > focusing on the org.bluez.LEAdvertisement1 interface. > > Looking at the documentation, it says the service, interface and > object details are: > Service org.bluez > Interface org.bluez.LEAdvertisement1 > Object path freely definable > > I am not being successful at publishing to the org.bluez service. It > is also not where the current examples publish to. > Looking at the GattProfile1 documentation, it has service and object > as application dependant. > Service <application dependent> > Interface org.bluez.GattProfile1 > Object path <application dependent> > Should the documentation of Service on LEAdvertisement1 be freely > definable also? Yep, the bus name is up to the application which usually don't register a friendly name if you try to register with 'org.bluez' it would probably conflict with the daemon itself so you wouldn't be able to register that name anyway. > I have created the LEAdvertisement1 interface so that it has an > ObjectManager and is introspectable. When I pass the object to > RegisterAdvertisement on the org.bluez.LEAdvertisingManager1 interface > it accepts it (does not give an error) but does not register the data > and I see no advertisement appear. Is there somewhere I can find a > more detailed description of what needs to be on the > org.bluez.LEAdvertisement1 interface that will work with > RegisterAdvertisement? Do you have the bluetoothd output when you register, I get the following when using bluetoothctl: bluetooth]# power on Changing power on succeeded [bluetooth]# advertise on [CHG] Controller B8:8A:60:D8:17:D7 SupportedInstances: 0x04 [CHG] Controller B8:8A:60:D8:17:D7 ActiveInstances: 0x01 Advertising object registered Tx Power: off Name: off Apperance: off Discoverable: off [bluetooth]# bluetoothd[6103]: src/advertising.c:client_create() Adding proxy for /org/bluez/advertising bluetoothd[6103]: src/advertising.c:register_advertisement() Registered advertisement at path /org/bluez/advertising bluetoothd[6103]: src/advertising.c:refresh_adv() Refreshing advertisement: /org/bluez/advertising bluetoothd[6103]: src/advertising.c:add_adv_callback() Advertisement registered: /org/bluez/advertising > For reference, I have put below what I am currently putting on the > org.bluez.LEAdvertisement1 interface. > > Thanks, > Barry > > > $ busctl call ukBaz.bluezero /ukBaz/bluezero/advertisement1 > org.freedesktop.DBus.ObjectManager GetManagedObjects > a{oa{sa{sv}}} 1 "/ukBaz/bluezero/advertisement1" 5 > "org.freedesktop.DBus.Properties" 0 > "org.freedesktop.DBus.Introspectable" 0 "org.freedesktop.DBus.Peer" 0 > "org.freedesktop.DBus.ObjectManager" 0 "org.bluez.LEAdvertisement1" 6 > "Type" s "broadcast" "ServiceUUIDs" as 0 "ManufacturerData" a{sv} 0 > "SolicitUUIDs" as 0 "ServiceData" a{sv} 1 "FEAA" ay 18 16 8 3 117 107 > 66 97 122 46 103 105 116 104 117 98 46 105 111 "IncludeTxPower" b > false Not sure if that is the problem but usually ObjectManager is suppose to be on the '/' (root) path. > $ busctl call ukBaz.bluezero /ukBaz/bluezero/advertisement1 > org.freedesktop.DBus.Properties GetAll s org.bluez.LEAdvertisement1 > a{sv} 6 "Type" s "broadcast" "ServiceUUIDs" as 0 "ManufacturerData" > a{sv} 0 "SolicitUUIDs" as 0 "ServiceData" a{sv} 1 "FEAA" ay 18 16 8 3 > 117 107 66 97 122 46 103 105 116 104 117 98 46 105 111 > "IncludeTxPower" b false > > $ busctl call ukBaz.bluezero /ukBaz/bluezero/advertisement1 > org.freedesktop.DBus.Introspectable Introspect > s "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object > Introspection 1.0//EN\"\n > \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n<!-- > GDBus 2.60.4 -->\n<node>\n <interface > name=\"org.freedesktop.DBus.Properties\">\n <method name=\"Get\">\n > <arg type=\"s\" name=\"interface_name\" direction=\"in\"/>\n > <arg type=\"s\" name=\"property_name\" direction=\"in\"/>\n <arg > type=\"v\" name=\"value\" direction=\"out\"/>\n </method>\n > <method name=\"GetAll\">\n <arg type=\"s\" > name=\"interface_name\" direction=\"in\"/>\n <arg type=\"a{sv}\" > name=\"properties\" direction=\"out\"/>\n </method>\n <method > name=\"Set\">\n <arg type=\"s\" name=\"interface_name\" > direction=\"in\"/>\n <arg type=\"s\" name=\"property_name\" > direction=\"in\"/>\n <arg type=\"v\" name=\"value\" > direction=\"in\"/>\n </method>\n <signal > name=\"PropertiesChanged\">\n <arg type=\"s\" > name=\"interface_name\"/>\n <arg type=\"a{sv}\" > name=\"changed_properties\"/>\n <arg type=\"as\" > name=\"invalidated_properties\"/>\n </signal>\n </interface>\n > <interface name=\"org.freedesktop.DBus.Introspectable\">\n <method > name=\"Introspect\">\n <arg type=\"s\" name=\"xml_data\" > direction=\"out\"/>\n </method>\n </interface>\n <interface > name=\"org.freedesktop.DBus.Peer\">\n <method name=\"Ping\"/>\n > <method name=\"GetMachineId\">\n <arg type=\"s\" > name=\"machine_uuid\" direction=\"out\"/>\n </method>\n > </interface>\n <interface > name=\"org.freedesktop.DBus.ObjectManager\">\n <method > name=\"GetManagedObjects\">\n <arg type=\"a{oa{sa{sv}}}\" > name=\"object_paths_interfaces_and_properties\" direction=\"out\">\n > </arg>\n </method>\n <signal name=\"InterfacesAdded\">\n > <arg type=\"o\" name=\"object_path\">\n </arg>\n <arg > type=\"a{sa{sv}}\" name=\"interfaces_and_properties\">\n </arg>\n > </signal>\n <signal name=\"InterfacesRemoved\">\n <arg > type=\"o\" name=\"object_path\">\n </arg>\n <arg type=\"as\" > name=\"interfaces\">\n </arg>\n </signal>\n </interface>\n > <interface name=\"org.bluez.LEAdvertisement1\">\n <annotation > name=\"org.freedesktop.DBus.Properties.PropertiesChanged\" > value=\"const\">\n </annotation>\n <method name=\"Release\">\n > <annotation name=\"org.freedesktop.DBus.Method.NoReply\" > value=\"true\">\n </annotation>\n </method>\n <property > type=\"s\" name=\"Type\" access=\"read\">\n </property>\n > <property type=\"as\" name=\"ServiceUUIDs\" access=\"read\">\n > </property>\n <property type=\"a{sv}\" name=\"ManufacturerData\" > access=\"read\">\n </property>\n <property type=\"as\" > name=\"SolicitUUIDs\" access=\"read\">\n </property>\n <property > type=\"a{sv}\" name=\"ServiceData\" access=\"read\">\n > </property>\n <property type=\"b\" name=\"IncludeTxPower\" > access=\"read\">\n </property>\n </interface>\n</node>\n" -- Luiz Augusto von Dentz