Re: btvirt with two virtual controllers: Cannot connect to GATT server

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

 



Hi Olivier,

On 2020-04-08 21:40:03, Olivier MARTIN wrote:
> Hi Luiz,
>
> On 07.04.20 08:30, Olivier MARTIN wrote:
>> Hi Luiz,
>>
>> On 07.04.20 02:26, Luiz Augusto von Dentz wrote:
>>> Hi Olivier,
>>>
>>> On Mon, Apr 6, 2020 at 4:06 PM Olivier MARTIN <olivier@xxxxxxxxxxxx>
>>> wrote:
>>>> Hi all,
>>>>
>>>> I am trying to test BLE connection between two virtual controllers
>>>> (created with 'btvirt'). But when trying to connect to the GATT server
>>>> running on the first virtual controller, I have the error
>>>> "src/device.c:att_connect_cb() connect error: Transport endpoint is not
>>>> connected (107)"
>>>>
>>>>
>>>> To test my test case, I am using the head of Bluez (2a7df9323e, Sunday
>>>> 5th April).
>>>>
>>>> Here is the test case:
>>>>
>>>> 1. Start btvirt for BLE: sudo ./emulator/btvirt -L -U2 (you will
>>>> need my
>>>> patch to fix command line parsing I sent a couple of minutes ago)
>>>>
>>>> 2. Start bluetoothctl to initialize the Virtual Controller that would
>>>> play the role of GATT Server:
>>>>
>>>>      $ bluetoothctl
>>>>      [NEW] Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2
>>>> [default]
>>>>      [NEW] Device E3:01:36:88:4C:DE TestAdvertisement
>>>>      [NEW] Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>>>      [NEW] Device DB:E3:2A:E8:90:C4 TestAdvertisement
>>>>
>>>>      [bluetooth]# list
>>>>      Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
>>>>      Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>>>
>>>>      [bluetooth]# power on
>>>>      Changing power on succeeded
>>>>      [CHG] Controller DB:E3:2A:E8:90:C4 Powered: yes
>>>>
>>>>      [bluetooth]# discoverable on
>>>>      Changing discoverable on succeeded
>>>>      [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: yes
>>> Try with advertise.discoverable on, advertise instances actually have
>>> their discoverable flag.
>>
>> I am not sure to understand how "advertise.discoverable on" will fix
>> my issue.
>>
>> I do not have any issue to discover the GATT server running on the
>> first instance of the virtual controller from the second one (see log
>> below).
>>
>> The only issue is when I try connecting to the GATT server with
>> 'connect DB:E3:2A:E8:90:C4', I have the error "Failed to connect:
>> org.bluez.Error.Failed" with the error in bluetoothd
>> "src/device.c:att_connect_cb() connect error: Transport endpoint is
>> not connected (107)".
>
> I still wanted to make sure "advertise.discoverable on" would not solve
> my issue. I have just tested with the latest bluez (commit 60423fed392a)
> by adding "menu advertise" + "discoverable on" to the steps to duplicate
> the issue. And I still see the error:
>
> bluetoothd[14755]: src/device.c:btd_device_set_temporary() temporary 0
> bluetoothd[14755]: src/device.c:device_connect_le() Connection attempt
> to: DB:E3:2A:E8:90:C4
> bluetoothd[14755]: src/device.c:att_connect_cb() connect error:
> Transport endpoint is not connected (107)
>

I was having similar issues with getting btvirt working. I resolved my
issue by using btmgmt to set the virtual adapter I was trying to
connect to have "connectable on".

As you can see below, the two virtual adapters are created without
being connectable:

pi@raspberrypi:~ $ btmgmt info | grep -P "hci|current settings"
hci2:   Primary controller
        current settings: powered bondable ssp br/edr le secure-conn
hci1:   Primary controller
        current settings: powered bondable ssp br/edr le secure-conn
hci0:   Primary controller
        current settings: powered connectable bondable ssp br/edr le secure-conn
pi@raspberrypi:~ $ sudo btmgmt --index 1 connectable on
hci1 Set Connectable complete, settings: powered connectable bondable
ssp br/edr le secure-conn
pi@raspberrypi:~ $ btmgmt info | grep -P "hci|current settings"
hci2:   Primary controller
        current settings: powered bondable ssp br/edr le secure-conn
hci1:   Primary controller
        current settings: powered connectable bondable ssp br/edr le secure-conn
hci0:   Primary controller
        current settings: powered connectable bondable ssp br/edr le secure-conn

>
>>
>>>>      [bluetooth]# advertise on
>>>>      [CHG] Controller DB:E3:2A:E8:90:C4 SupportedInstances: 0x04
>>>>      [CHG] Controller DB:E3:2A:E8:90:C4 ActiveInstances: 0x01
>>>>      Advertising object registered
>>>>
>>>>
>>>> 3. Use './test/example-gatt-server' to simulate GATT server. I confirm
>>>> the server is started on DB:E3:2A:E8:90:C4 (first virtual controller)
>>>>
>>>> 4. Return to bluetoothctl to switch to second virtual controller and
>>>> connect to the first one
>>>>
>>>>      [bluetooth]# select E3:01:36:88:4C:DE
>>>>      Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480 [default]
>>>>
>>>>      [bluetooth]# power on
>>>>      Changing power on succeeded
>>>>      [CHG] Controller E3:01:36:88:4C:DE Powered: yes
>>>>
>>>>      [bluetooth]# scan on
>>>>      Discovery started
>>>>      [CHG] Controller E3:01:36:88:4C:DE Discovering: yes
>>>>      [NEW] Device DB:E3:2A:E8:90:C4
>>>>      [bluetooth]# scan off
>>>>      Discovery stopped
>>>>      [CHG] Controller E3:01:36:88:4C:DE Discovering: no
>>>>
>>>>      [bluetooth]# connect DB:E3:2A:E8:90:C4
>>>>      Attempting to connect to DB:E3:2A:E8:90:C4
>>>>      Failed to connect: org.bluez.Error.Failed
>>>>      [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: no
>>>>
>>>>
>>>> And in the bluetoothd log:
>>>>
>>>>      bluetoothd[15175]: src/adapter.c:start_discovery() sender :1.6483
>>>>      bluetoothd[15175]: src/adapter.c:update_discovery_filter()
>>>>      bluetoothd[15175]: src/adapter.c:discovery_filter_to_mgmt_cp()
>>>>      bluetoothd[15175]: src/adapter.c:trigger_start_discovery()
>>>>      bluetoothd[15175]: src/adapter.c:cancel_passive_scanning()
>>>>      bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>>>>      bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>>>> adapter->current_discovery_filter == 0
>>>>      bluetoothd[15175]: src/adapter.c:start_discovery_complete()
>>>> status 0x00
>>>>      bluetoothd[15175]: src/adapter.c:discovering_callback() hci0
>>>> type 6 discovering 1 method 0
>>>>      bluetoothd[15175]: src/adapter.c:device_found_callback() hci0
>>>> addr DB:E3:2A:E8:90:C4, rssi 0 flags 0x0000 eir_len 3
>>>>      bluetoothd[15175]: src/device.c:device_set_legacy() legacy 0
>>>>      bluetoothd[15175]: src/device.c:device_set_flags() flags 6
>>>>      bluetoothd[15175]: src/adapter.c:stop_discovery() sender :1.6483
>>>>      bluetoothd[15175]: src/adapter.c:stop_discovery_complete()
>>>> status 0x00
>>>>      bluetoothd[15175]: src/adapter.c:trigger_passive_scanning()
>>>>      bluetoothd[15175]: src/adapter.c:discovery_remove() owner :1.6483
>>>>      bluetoothd[15175]: src/adapter.c:discovering_callback() hci0
>>>> type 6 discovering 0 method 0
>>>>      bluetoothd[15175]: src/device.c:device_connect_le() Connection
>>>> attempt to: DB:E3:2A:E8:90:C4
>>>>      bluetoothd[15175]: src/device.c:att_connect_cb() connect error:
>>>> Transport endpoint is not connected (107)
>>>>
>>>



[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