2016-06-29 06:59:28

by François Beaufort

[permalink] [raw]
Subject: LE ControllerMode fails with Google Chrome

When setting "ControllerMode = le" in /etc/bluetooth/main.conf file,
starting a dual scan from Google Chrome fails as you can see below.

Run ./chrome --enable-web-bluetooth
Go to https://googlechrome.github.io/samples/web-bluetooth/automatic-reconnect.html
Click "Scan button"
Bluetooth chooser should show nearby Bluetooth devices. Sadly it only
returns the ones in cache.with "ControllerMode = dual"

According to logs below, it looks like the scan stopped immediately.
For info, it works great

// Click Scan Web button
bluetoothd[26766]: src/adapter.c:set_discovery_filter() sender :1.11
bluetoothd[26766]: src/adapter.c:parse_discovery_filter_dict()
filtered discovery params: transport: 7 rssi: 32767 pathloss: 32767
bluetoothd[26766]: src/adapter.c:set_discovery_filter() successfully
pre-set filter
bluetoothd[26766]: src/adapter.c:start_discovery() sender :1.11
bluetoothd[26766]: src/adapter.c:update_discovery_filter()
bluetoothd[26766]: src/adapter.c:discovery_filter_to_mgmt_cp()
bluetoothd[26766]: src/adapter.c:trigger_start_discovery()
bluetoothd[26766]: src/adapter.c:cancel_passive_scanning()
bluetoothd[26766]: src/adapter.c:start_discovery_timeout()
bluetoothd[26766]: src/adapter.c:start_discovery_timeout()
adapter->current_discovery_filter == 1
bluetoothd[26766]: src/adapter.c:start_discovery_timeout() sending
MGMT_OP_START_SERVICE_DISCOVERY 127, 7, 0
bluetoothd[26766]: src/adapter.c:start_discovery_complete() status 0x0b
bluetoothd[26766]: src/adapter.c:trigger_start_discovery()
bluetoothd[26766]: src/adapter.c:cancel_passive_scanning()

// Click "Cancel" button from Chrome Bluetooth chooser
bluetoothd[26766]: src/adapter.c:stop_discovery() sender :1.11
bluetoothd[26766]: src/adapter.c:discovery_destroy() owner :1.11
bluetoothd[26766]: src/adapter.c:trigger_passive_scanning()


2016-07-04 17:30:29

by Marcel Holtmann

[permalink] [raw]
Subject: Re: LE ControllerMode fails with Google Chrome

Hi Francois,

> When setting "ControllerMode = le" in /etc/bluetooth/main.conf file,
> starting a dual scan from Google Chrome fails as you can see below.
>
> Run ./chrome --enable-web-bluetooth
> Go to https://googlechrome.github.io/samples/web-bluetooth/automatic-reconnect.html
> Click "Scan button"
> Bluetooth chooser should show nearby Bluetooth devices. Sadly it only
> returns the ones in cache.with "ControllerMode = dual"

if you tell bluetoothd to configure a dual mode controller as it is a single mode controller, then only LE side will work. The kernel will block any attempt to use dual mode or BR/EDR functionality. However this might be a simple bug somewhere in the code that accidentally tries to use dual mode on a single mode controller.

Should be rather easy to fix if you can pin-point down the line of code that does this wrong. In general this should not be exposed to the D-Bus interface as an error. It should do the right thing depending on what controller is used or how it is configured.

Regards

Marcel