Return-Path: MIME-Version: 1.0 In-Reply-To: <7e78e5e8a8340ee2b459d0cd2f645712@labapart.com> References: <1b8c74ef5fafaca3c75fb87249d728f8@labapart.com> <1c0a0d7a4270d7dcb457523e8fbbc244@labapart.com> <7e78e5e8a8340ee2b459d0cd2f645712@labapart.com> From: Barry Byford <31baz66@gmail.com> Date: Fri, 14 Apr 2017 13:30:17 +0100 Message-ID: Subject: Re: GATT Server: DBus GATT Services not advertised/exported To: Olivier MARTIN Cc: Bluez mailing list Content-Type: text/plain; charset=UTF-8 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hello Olivier, On 14 April 2017 at 12:01, Olivier MARTIN wrote: > You are right Barry, `example-advertisement` seems to work well (I installed > and tried Nordic nRF Connect and I can see the expected advertisemet data). Excellent! > But I cannot still manage to get `example-gatt-server` :-( > I am sure I got it working last year with an older version of Bluez. But I > cannot make it work with Bluez v5.44. OK, I've taken a look at "example-gatt-server" and have it working... > > My testing procedure: > > 1. [Laptop] First terminal: Start `sudo ./src/bluetoothd -E -n -d` > 2. [Laptop] Second terminal: Start unmodified Bluez > ./test/example-gatt-server > 3. [Laptop] Third terminal: Ensure the adapter is "Powered: yes" and > "Discoverable: yes" OK, I've done this slightly different (details below). However, the first thing I did was edit "/etc/bluetooth/main.conf" I added the following line to the end of the file: ControllerMode = le Then I did the following: 1. [SBC1:T1] sudo ./src/bluetoothd -E -n -d 2. [SBC1:T2] ./example-gatt-server 3. [SBC1:T3] ./example-advertisement > > 4. [Android] Connect using Nordic nRF Connect (I also tried with "BLE > Scanner") and check I see the exposed GATT services by `example-gatt-server` > Unfortunately, I can only see: > - Generic Access Service (0x1800) > - Generic Attribute Service (0x1801) > I've used bluetoothctl on SBC2 to connect and read the battery values that the GATT server is counting down. $ bluetoothctl [NEW] Controller 00:00:00:00:5A:AD linaro-alip [default] [bluetooth]# scan on Discovery started [CHG] Controller 00:00:00:00:5A:AD Discovering: yes [NEW] Device B8:27:EB:22:57:E0 BluezeroLight [bluetooth]# scan off Discovery stopped [CHG] Controller 00:00:00:00:5A:AD Discovering: no [bluetooth]# connect B8:27:EB:22:57:E0 Attempting to connect to B8:27:EB:22:57:E0 [CHG] Device B8:27:EB:22:57:E0 Connected: yes Connection successful [...snip...] [NEW] Primary Service /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a 0000180f-0000-1000-8000-00805f9b34fb Battery Service [NEW] Characteristic /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b 00002a19-0000-1000-8000-00805f9b34fb Battery Level [...snip...] [CHG] Device B8:27:EB:22:57:E0 ServicesResolved: yes [BluezeroLight]# select-attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b [BluezeroLight:/service000a/char000b]# read Attempting to read /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Value: 0x46 46 F [BluezeroLight:/service000a/char000b]# notify on [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Notifying: yes Notify started [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Value: 0x46 [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Value: 0x44 [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Value: 0x42 [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Value: 0x40 [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Value: 0x3e [BluezeroLight:/service000a/char000b]# notify off [CHG] Attribute /org/bluez/hci0/dev_B8_27_EB_22_57_E0/service000a/char000b Notifying: no Notify stopped That seems to be working then. When I didn't have "ControllerMode = le" set then I did see it be unpredictable if it successfully connected or not. This also worked connecting with the nRF app. Does that work for you? > If I had to suspect Bluez code, I will guess there is something missing > around here: > > bluetoothd[20429]: src/device.c:gatt_server_init() # gatt_server_init > bluetoothd[20429]: src/device.c:gatt_debug() Primary services found: 2 > bluetoothd[20429]: src/device.c:gatt_debug() start: 0x0001, end: 0x0005, > uuid: 00001801-0000-1000-8000-00805f9b34fb > bluetoothd[20429]: src/device.c:gatt_debug() start: 0x0014, end: 0xffff, > uuid: 00001800-0000-1000-8000-00805f9b34fb > bluetoothd[20429]: src/device.c:gatt_debug() Registered handler for "Service > Changed": 0 > bluetoothd[20429]: src/device.c:gatt_client_ready_cb() status: success, > error: 0 > > As Bluez daemon does not get the GATT services from Buez GATT Database. But > it might be me who miss a step... > > > On 14.04.2017 12:37, Barry Byford wrote: >> >> example-advertisementHello Oliver, >> >> >> On 14 April 2017 at 11:03, Olivier MARTIN wrote: >>> >>> Thanks for replying my message Barry, >>> >>> Sorry, I forgot to mention but I start Bluez daemon with `sudo >>> ./src/bluetoothd -E -n -d` (after stopping the bluetooth service). So I >>> already run it with sudo and experimental option. >>> >>> I am not sure to understand what you mean by "this kind of error >>> message". >>> Because I do not see any error message in the log I provided. >> >> >> OK, that was bad on my part. I read it as complaining that there were >> too many advertisements. Looking again that wasn't what it was say. >> Apologies. >> >>> >>> Any other idea? >> >> >> I am by Linux Single Board Computers (SBC) today so I'm able to run >> what you are running and can show you what I'm seeing. I'll focus on >> example-advertisement first as example-gatt-server doesn't change the >> advertisements. >> >> I've started the BlueZ daemon with "./src/bluetoothd -E -n -d" >> >> In another shell when I start "./example-advertisement" I see the >> following in the output: >> >> bluetoothd[2325]: src/adapter.c:property_set_mode() sending Set >> Powered command for index 0 >> bluetoothd[2325]: src/adapter.c:property_set_mode_complete() Success >> (0x00) >> bluetoothd[2325]: src/adapter.c:new_settings_callback() Settings: >> 0x00000ad1 >> bluetoothd[2325]: src/adapter.c:settings_changed() Changed settings: >> 0x00000001 >> bluetoothd[2325]: src/adapter.c:adapter_start() adapter >> /org/bluez/hci0 has been enabled >> bluetoothd[2325]: src/adapter.c:trigger_passive_scanning() >> bluetoothd[2325]: src/advertising.c:register_advertisement() >> RegisterAdvertisement >> bluetoothd[2325]: src/advertising.c:client_create() Adding proxy for >> /org/bluez/example/advertisement0 >> bluetoothd[2325]: src/advertising.c:register_advertisement() >> Registered advertisement at path /org/bluez/example/advertisement0 >> bluetoothd[2325]: src/advertising.c:parse_service_uuids() Adding >> ServiceUUID: 180D >> bluetoothd[2325]: src/advertising.c:parse_service_uuids() Adding >> ServiceUUID: 180F >> bluetoothd[2325]: src/advertising.c:parse_manufacturer_data() Adding >> ManufacturerData for ffff >> bluetoothd[2325]: src/advertising.c:parse_service_data() Adding >> ServiceData for 9999 >> bluetoothd[2325]: src/advertising.c:refresh_advertisement() Refreshing >> advertisement: /org/bluez/example/advertisement0 >> bluetoothd[2325]: src/advertising.c:add_adv_callback() Advertisement >> registered: /org/bluez/example/advertisement0 >> >> >> On a second SBC, at the command line I run "bluetoothctl" and do "scan >> on". Once my first SBC is found I do "scan off". I then do "info >> B8:27:EB:22:57:E0" (this is the address of the first SBC) which gives >> the following output: >> >> [bluetooth]# info B8:27:EB:22:57:E0 >> Device B8:27:EB:22:57:E0 >> Alias: B8-27-EB-22-57-E0 >> Paired: no >> Trusted: no >> Blocked: no >> Connected: no >> LegacyPairing: no >> UUID: Heart Rate (0000180d-0000-1000-8000-00805f9b34fb) >> UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb) >> ManufacturerData Key: 0xffff >> ManufacturerData Value: 0x00 >> ManufacturerData Value: 0x01 >> ManufacturerData Value: 0x02 >> ManufacturerData Value: 0x03 >> ManufacturerData Value: 0x04 >> ServiceData Key: 00009999-0000-1000-8000-00805f9b34fb >> ServiceData Value: 0x00 >> ServiceData Value: 0x01 >> ServiceData Value: 0x02 >> ServiceData Value: 0x03 >> ServiceData Value: 0x04 >> >> >> I've also done a scan from my Android phone (using the Nordic nRF >> Connect app) and can see the advertisements also (just hard to share >> that information on here). >> >> Does that help? >> >> >>> >>> >>> On 13.04.2017 19:59, Barry Byford wrote: >>>> >>>> >>>> Hello Olivier, >>>> >>>> >>>> On 13 April 2017 at 12:14, Olivier MARTIN wrote: >>>>> >>>>> >>>>> Hi all, >>>>> I am having issue to advertise/export GATT services exposed through >>>>> DBus >>>>> API. I tried `./test/example-gatt-server`. And I also tried to merge >>>>> `./test/example-advertisement` into `./test/example-gatt-server`. But >>>>> in >>>>> both cases I only see the two compulsory GATT services: >>>>> - Generic Access Service (0x1800) >>>>> - Generic Attribute Service (0x1801) >>>>> >>>>> I am using Bluez v5.44. And I also tried Bluez v5.37. >>>>> >>>>> GATT Services seem to be discovered by Bluez (note: I added additional >>>>> debug >>>>> statement all prefixed with '#'): >>>>> >>>>> bluetoothd[16877]: src/gatt-database.c:manager_register_app() # >>>>> manager_register_app >>>>> bluetoothd[16877]: src/gatt-database.c:create_app() # create_app >>>>> bluetoothd[16877]: src/gatt-database.c:manager_register_app() >>>>> Registering >>>>> application: :1.404:/ >>>>> bluetoothd[16877]: src/advertising.c:register_advertisement() >>>>> RegisterAdvertisement >>>>> bluetoothd[16877]: src/advertising.c:client_create() Adding proxy for >>>>> /org/bluez/example/advertisement0 >>>>> bluetoothd[16877]: src/advertising.c:register_advertisement() >>>>> Registered >>>>> advertisement at path /org/bluez/example/advertisement0 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service0/char2, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char0/desc0, iface: >>>>> org.bluez.GattDescriptor1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char2/desc3, iface: >>>>> org.bluez.GattDescriptor1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char2, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service1/char0, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char1, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service0/char1, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char1/desc3, iface: >>>>> org.bluez.GattDescriptor1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char1/desc2, iface: >>>>> org.bluez.GattDescriptor1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service0/char0, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2, iface: org.bluez.GattService1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service1, iface: org.bluez.GattService1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service0, iface: org.bluez.GattService1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char0/desc1, iface: >>>>> org.bluez.GattDescriptor1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char2/desc2, iface: >>>>> org.bluez.GattDescriptor1 >>>>> bluetoothd[16877]: src/gatt-database.c:proxy_added_cb() Object >>>>> received: >>>>> /org/bluez/example/service2/char0, iface: org.bluez.GattCharacteristic1 >>>>> bluetoothd[16877]: src/gatt-database.c:client_ready_cb() # >>>>> client_ready_cb >>>>> bluetoothd[16877]: src/gatt-database.c:create_service() # >>>>> create_service >>>>> from /org/bluez/example/service2 >>>>> bluetoothd[16877]: src/gatt-database.c:create_service() # >>>>> create_service >>>>> from /org/bluez/example/service1 >>>>> bluetoothd[16877]: src/gatt-database.c:create_service() # >>>>> create_service >>>>> from /org/bluez/example/service0 >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_app() # >>>>> database_add_app >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_service() # >>>>> database_add_service >>>>> bluetoothd[16877]: src/gatt-database.c:cep_write_cb() Stored CEP value >>>>> in >>>>> the database >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_cep() Created CEP >>>>> entry >>>>> for characteristic >>>>> bluetoothd[16877]: src/gatt-database.c:cep_write_cb() Stored CEP value >>>>> in >>>>> the database >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_cep() Created CEP >>>>> entry >>>>> for characteristic >>>>> bluetoothd[16877]: src/gatt-database.c:cep_write_cb() Stored CEP value >>>>> in >>>>> the database >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_cep() Created CEP >>>>> entry >>>>> for characteristic >>>>> bluetoothd[16877]: src/gatt-database.c:gatt_db_service_added() # >>>>> gatt_db_service_added: GATT Service added to local database >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_service() # >>>>> database_add_service >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_ccc() Created CCC >>>>> entry >>>>> for characteristic >>>>> bluetoothd[16877]: src/gatt-database.c:gatt_db_service_added() # >>>>> gatt_db_service_added: GATT Service added to local database >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_service() # >>>>> database_add_service >>>>> bluetoothd[16877]: src/gatt-database.c:database_add_ccc() Created CCC >>>>> entry >>>>> for characteristic >>>>> bluetoothd[16877]: src/gatt-database.c:gatt_db_service_added() # >>>>> gatt_db_service_added: GATT Service added to local database >>>>> bluetoothd[16877]: src/gatt-database.c:client_ready_cb() GATT >>>>> application >>>>> registered: :1.404:/ >>>>> bluetoothd[16877]: src/advertising.c:parse_service_uuids() Adding >>>>> ServiceUUID: 180D >>>>> bluetoothd[16877]: src/advertising.c:parse_service_uuids() Adding >>>>> ServiceUUID: 180F >>>>> bluetoothd[16877]: src/advertising.c:parse_manufacturer_data() Adding >>>>> ManufacturerData for ffff >>>>> bluetoothd[16877]: src/advertising.c:parse_service_data() Adding >>>>> ServiceData >>>>> for 9999 >>>>> bluetoothd[16877]: src/advertising.c:refresh_advertisement() Refreshing >>>>> advertisement: /org/bluez/example/advertisement0 >>>>> bluetoothd[16877]: src/advertising.c:add_adv_callback() Advertisement >>>>> registered: /org/bluez/example/advertisement0 >>>>> >>>>> I start `./test/example-gatt-server` as a normal user. But Bluez does >>>>> not >>>>> seem to have any permission issue with it. >>>> >>>> >>>> >>>> Building from source I've seen something similar if I've used sudo for >>>> the >>>> make. >>>> >>>> To compile and install I use sudo for the install only: >>>> >>>> make -j 4 && sudo make install >>>> >>>> >>>> >>>>> >>>>> I am using 'BLE scanner' on Android to discover the GATT services. But >>>>> I >>>>> think the problem is coming from Bluez. When I connect the Android >>>>> device >>>>> to >>>>> Bluez, I can see this log: >>>>> >>>>> bluetoothd[16877]: src/adapter.c:connected_callback() hci0 device >>>>> 98:D6:F7:31:7B:0D connected eir_len 14 >>>>> bluetoothd[16877]: src/gatt-database.c:connect_cb() New incoming BR/EDR >>>>> ATT >>>>> connection >>>>> bluetoothd[16877]: attrib/gattrib.c:g_attrib_ref() 0x98cd908: >>>>> g_attrib_ref=1 >>>>> bluetoothd[16877]: src/device.c:load_gatt_db() # load_gatt_db: >>>>> Restoring >>>>> 98:D6:F7:31:7B:0D gatt database from file >>>>> '/var/lib/bluetooth/5C:F3:70:6A:D9:3C/cache/98:D6:F7:31:7B:0D' >>>>> bluetoothd[16877]: src/device.c:load_gatt_db_impl() # load_gatt_db_impl >>>>> bluetoothd[16877]: src/device.c:load_service() # load_service: loading >>>>> service: 0x0001, end: 0x0005, uuid: >>>>> 00001801-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:load_service() # load_service: loading >>>>> service: 0x0014, end: 0xffff, uuid: >>>>> 00001800-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:load_chrc() loading characteristic >>>>> handle: >>>>> 0x0002, value handle: 0x0003, properties 0x0020 uuid: >>>>> 00002a05-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:load_chrc() loading characteristic >>>>> handle: >>>>> 0x0015, value handle: 0x0016, properties 0x0002 uuid: >>>>> 00002a00-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:load_chrc() loading characteristic >>>>> handle: >>>>> 0x0017, value handle: 0x0018, properties 0x0002 uuid: >>>>> 00002a01-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:load_gatt_db() List GATT Primaries >>>>> before >>>>> being free: >>>>> bluetoothd[16877]: src/device.c:print_primary() - Primary UUID: >>>>> 00001801-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:print_primary() - Primary UUID: >>>>> 00001800-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:add_primary() # add_primary >>>>> bluetoothd[16877]: src/device.c:add_primary() # add_primary >>>>> bluetoothd[16877]: profiles/gap/gas.c:gap_accept() GAP profile accept >>>>> (98:D6:F7:31:7B:0D) >>>>> bluetoothd[16877]: src/service.c:change_state() 0x98c98e0: device >>>>> 98:D6:F7:31:7B:0D profile gap-profile state changed: disconnected -> >>>>> connected (0) >>>>> bluetoothd[16877]: src/gatt-client.c:btd_gatt_client_connected() Device >>>>> connected. >>>>> bluetoothd[16877]: src/device.c:gatt_server_init() # gatt_server_init >>>>> bluetoothd[16877]: src/device.c:gatt_debug() Primary services found: 2 >>>>> bluetoothd[16877]: src/device.c:gatt_debug() start: 0x0001, end: >>>>> 0x0005, >>>>> uuid: 00001801-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:gatt_debug() start: 0x0014, end: >>>>> 0xffff, >>>>> uuid: 00001800-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:gatt_debug() Registered handler for >>>>> "Service >>>>> Changed": 0 >>>>> bluetoothd[16877]: src/device.c:gatt_client_ready_cb() status: success, >>>>> error: 0 >>>>> bluetoothd[16877]: src/device.c:register_gatt_services() # >>>>> register_gatt_services >>>>> bluetoothd[16877]: src/device.c:add_primary() # add_primary >>>>> bluetoothd[16877]: src/device.c:add_primary() # add_primary >>>>> bluetoothd[16877]: src/device.c:add_gatt_service() # add_gatt_service: >>>>> UUID:00001801-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/gatt-client.c:btd_gatt_client_ready() GATT >>>>> client >>>>> ready >>>>> bluetoothd[16877]: src/gatt-client.c:create_services() Exporting >>>>> objects >>>>> for >>>>> GATT services: 98:D6:F7:31:7B:0D >>>>> bluetoothd[16877]: src/gatt-client.c:service_create() Exported GATT >>>>> service: >>>>> /org/bluez/hci0/dev_98_D6_F7_31_7B_0D/service0001 >>>>> bluetoothd[16877]: src/gatt-client.c:characteristic_create() Exported >>>>> GATT >>>>> characteristic: >>>>> /org/bluez/hci0/dev_98_D6_F7_31_7B_0D/service0001/char0002 >>>>> bluetoothd[16877]: src/device.c:device_svc_resolved() >>>>> /org/bluez/hci0/dev_98_D6_F7_31_7B_0D err 0 >>>>> bluetoothd[16877]: src/device.c:store_gatt_db() # store_gatt_db >>>>> bluetoothd[16877]: src/device.c:store_service() # store_service >>>>> bluetoothd[16877]: src/device.c:store_service() # store_service >>>>> bluetoothd[16877]: profiles/gap/gas.c:read_device_name_cb() GAP Device >>>>> Name: >>>>> Nexus 4 >>>>> bluetoothd[16877]: profiles/gap/gas.c:read_appearance_cb() GAP >>>>> Appearance: >>>>> 0x0000 >>>>> >>>>> I also reduced DBus 'TestAdvertisement' interface to only expose one >>>>> GATT >>>>> Service as many BLE adapter got a limitation in the size of the >>>>> advertisement packet: >>>>> class TestAdvertisement(Advertisement): >>>>> >>>>> def __init__(self, bus, index): >>>>> Advertisement.__init__(self, bus, index, 'peripheral') >>>>> #self.add_service_uuid('180D') # HeartRate >>>>> self.add_service_uuid('180F') # Battery >>>>> #self.add_manufacturer_data(0xffff, [0x00, 0x01, 0x02, 0x03, >>>>> 0x04]) >>>>> #self.add_service_data('9999', [0x00, 0x01, 0x02, 0x03, 0x04]) >>>>> self.include_tx_power = True >>>>> >>>>> My concern is mainly these lines: >>>>> >>>>> bluetoothd[16877]: src/device.c:gatt_debug() Primary services found: 2 >>>>> bluetoothd[16877]: src/device.c:gatt_debug() start: 0x0001, end: >>>>> 0x0005, >>>>> uuid: 00001801-0000-1000-8000-00805f9b34fb >>>>> bluetoothd[16877]: src/device.c:gatt_debug() start: 0x0014, end: >>>>> 0xffff, >>>>> uuid: 00001800-0000-1000-8000-00805f9b34fb >>>>> >>>> >>>> I've seen this kind of error message when I've had a failure of a >>>> previous script and the Bluetooth daemon is in some unknown state. At >>>> this point it is worth restarting the bluetooth service with: >>>> sudo service bluetooth restart >>>> >>>> You will see in the advertising DBus API documentation that it is >>>> still in experimental mode in 5.44. >>>> >>>> >>>> https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/advertising-api.txt#n78 >>>> >>>> This means that you need to make sure bluetoothd is started in >>>> experimental mode. Have you done this? >>>> You can check with "sudo service bluetooth status" >>>> >>>> Experimental can be switched on by default in the bluetooth.service file >>>> >>>> Edit /lib/systemd/system/bluetooth.service file to add --experimental >>>> flag >>>> e.g: >>>> >>>> sudo sed -i '/^ExecStart.*bluetoothd\s*$/ s/$/ --experimental/' >>>> /lib/systemd/system/bluetooth.service >>>> >>>> >>>> >>>> >>>>> I have not found the code that export GATT Services from GATT Database >>>>> to >>>>> the BLE central. >>>>> >>>>> From my search on Internet, it looks I am not the only one who is >>>>> having >>>>> this issue >>>>> I am happy to share/test anything that could help to make some >>>>> progress. >>>>> >>>>> Thanks, >>>>> Olivier >>>>> -- >>>>> To unsubscribe from this list: send the line "unsubscribe >>>>> linux-bluetooth" >>>>> in >>>>> the body of a message to majordomo@vger.kernel.org >>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> >>> >>> >