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.
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 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