Re: GATT Server: DBus GATT Services not advertised/exported

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Oliver,

On Thu, Apr 20, 2017 at 2:20 AM, Olivier MARTIN <olivier@xxxxxxxxxxxx> wrote:
> I am back on the thread.
> What I noticed last week when I tried on Android phone with both "BLE
> Scanner" and "Nordic Connect", discovering GATT services is really really
> slow (it takes 2 min to discover all `example-gatt-server` GATT services) on
> Nexus 4 with Android 5.1.1 and Ubuntu 16.04 with Bluez v5.44 for the GATT
> server. I am using the Asus USB-BT400 (Broadcom chipset).
>
> I did more investigation this evening but I have not done any progress.
> I tried with `example-gatt-server` started by the user and root and no
> change in the poor performance.
>
> I do not know what is taking so long but for instance it takes many seconds
> to execute this part:
>
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x005e
> end: 0x0061
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x0060
> end: 0x0061
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0061 end:
> 0x0061
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x0062
> end: 0x0071
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x0062
> end: 0x0071
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x006e
> end: 0x0071
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0065 end:
> 0x0067
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0066 end:
> 0x0067
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0067 end:
> 0x0067
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x006a end:
> 0x006c
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x006b end:
> 0x006c
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x006c end:
> 0x006c
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x006f end:
> 0x0071
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0070 end:
> 0x0071
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0071 end:
> 0x0071
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x0072
> end: 0x0079
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x0072
> end: 0x0079
> bluetoothd[12913]: src/device.c:gatt_debug() Read By Type - start: 0x0079
> end: 0x0079
> bluetoothd[12913]: src/device.c:gatt_debug() Find Info - start: 0x0077 end:
> 0x0077

You should be able to see their timings in HCI with btmon, or just use
journalctl if are thinking there is a delay in processing the packets
but I think that is not the case. These many Find Info does indeed
looks odd, and there are even repeated range.

>
>
>
> On 14.04.2017 20:31, Barry Byford wrote:
>>
>> Hello Olivier,
>>
>> On 14 April 2017 at 19:14, Olivier MARTIN <olivier@xxxxxxxxxxxx> wrote:
>>>
>>> Thanks Barry, setting 'ControllerMode = le' in /etc/bluetooth/main.conf
>>> fixed my issue. I can now see the GATT services.
>>
>>
>> Good news!
>>
>>> 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'?
>>
>>
>> This issue has come up before and was discuss here:
>> http://marc.info/?l=linux-bluetooth&m=146071596012263&w=2
>>
>>
>>
>>
>>> On 14.04.2017 14:30, Barry Byford wrote:
>>>>
>>>>
>>>> Hello Olivier,
>>>>
>>>>
>>>> On 14 April 2017 at 12:01, Olivier MARTIN <olivier@xxxxxxxxxxxx> 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 <olivier@xxxxxxxxxxxx>
>>>>>> 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 <olivier@xxxxxxxxxxxx>
>>>>>>>> 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@xxxxxxxxxxxxxxx
>>>>>>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>
>>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth"
> in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux