Return-Path: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Date: Fri, 14 Apr 2017 20:14:31 +0200 From: Olivier MARTIN To: Barry Byford <31baz66@gmail.com> Cc: Bluez mailing list Subject: Re: GATT Server: DBus GATT Services not advertised/exported In-Reply-To: References: <1b8c74ef5fafaca3c75fb87249d728f8@labapart.com> <1c0a0d7a4270d7dcb457523e8fbbc244@labapart.com> <7e78e5e8a8340ee2b459d0cd2f645712@labapart.com> Message-ID: Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Thanks Barry, setting 'ControllerMode = le' in /etc/bluetooth/main.conf fixed my issue. I can now see the GATT services. But I guess my adapter now only works as BLE adapter and will ignore the non-LE devices. In the comment of /etc/bluetooth/main.conf it is written the adapter should be by default set as 'dual'. Is it a bug in Bluez? Why GATT services are not exposed while using the default value for 'ControllerMode'? On 14.04.2017 14:30, Barry Byford wrote: > 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 >>>> >>>> >>>> >>