Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for Coded PHY (Bluetooth 5.0 feature) when scanning. #1225

Open
pvvx opened this issue Feb 17, 2023 · 13 comments
Open

Support for Coded PHY (Bluetooth 5.0 feature) when scanning. #1225

pvvx opened this issue Feb 17, 2023 · 13 comments
Labels
enhancement New feature or request

Comments

@pvvx
Copy link

pvvx commented Feb 17, 2023

  • bleak version:
    all
  • Python version:
    all
  • Operating System:
    Linux, Android
  • BlueZ version (bluetoothctl -v) in case of Linux:
    bluetoothctl: 5.66

Description

There is no advertising reception and the ability to connect to BLE LongRange (Coded PHY).

What I Did

Bugs in Android and Linux with scanning with different PHY format have long been fixed.
The specification 'Bluetooth 5.0' since 2016 opens the work of BLE advertising in two PHY modes - LE Coded or 1M on the main channels for extended advertising.

home-assistant/core#88277 (comment)

Logs

Switch the adapter to work with CodedPHY:
hcitool -i hci0 cmd 08 31 03 04 04
image

Further work in 'Bleak' is limited to 'Coded PHY' format only.

Information about adapter capabilities:

# btmgmt phy
Supported phys: BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX LECODEDTX LECODEDRX
Configurable phys: BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE2MTX LE2MRX LECODEDTX LECODEDRX
Selected phys: BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LECODEDTX LECODEDRX

# hciconfig -a
hci0:   Type: Primary  Bus: USB
        BD Address: 8C:88:2B:20:8B:42  ACL MTU: 1021:6  SCO MTU: 255:12
        UP RUNNING
        RX bytes:2020 acl:0 sco:0 events:178 errors:0
        TX bytes:23965 acl:0 sco:0 commands:178 errors:0
        Features: 0xff 0xff 0xff 0xfe 0xdb 0xfd 0x7b 0x87
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: SLAVE ACCEPT
        Name: 'nanopineoplus2'
        Class: 0x000000
        Service Classes: Unspecified
        Device Class: Miscellaneous,
        HCI Version: 5.1 (0xa)  Revision: 0x999
        LMP Version: 5.1 (0xa)  Subversion: 0x646b
        Manufacturer: Realtek Semiconductor Corporation (93)

The adapter's capabilities allow it to accept 1M and Coded PHY.

What are the commands to make 'Bleak' work according to the Bluetooth 5.0 specification?

@dlech
Copy link
Collaborator

dlech commented Feb 17, 2023

There are not any operating systems APIs to request using coded phy that I am aware of.

@dlech
Copy link
Collaborator

dlech commented Feb 17, 2023

What about Windows, Mac and Linux?

@pvvx
Copy link
Author

pvvx commented Feb 17, 2023

New versions of bluez work.
One method is to switch the USB-BT5.0+ adapter to Coded PHY mode.

For example, you can take:
Low-cost Realtek RTL8761 BT adapter (current Linux firmware on RTL8761 supports BT5.1)
image
USB ID 0bda:8771 Realtek Semiconductor Corp. Bluetooth radio

For Home Assistan to work with 'LE Long Range' in "Bluetooth" integration based on "bleak", it is advisable to install the latest version of bluez and add it to /lib/systemd/system/bluetooth.service
ExecStart=/usr/local/libexec/bluetooth/bluetoothd --experimental

Before launching Home Assistant, you need to switch the USB-BT5.0+ adapter to work in CodedPHY:
hcitool -i hci1 cmd 08 31 03 04 04

# btmon -i 1
Bluetooth monitor ver 5.66
= Note: Linux version 5.15.89-sunxi64 (aarch64)                                                                0.654717
= Note: Bluetooth subsystem version 2.22                                                                       0.654746
= New Index: 8C:88:2B:00:E7:EA (Primary,USB,hci1)                                                              0.654754
= Open Index: 8C:88:2B:00:E7:EA                                                                                0.654757
= Index Info: 8C:88:2B:00:E7:EA (Realtek Semiconductor Corporation)                                            0.654761
= New Index: 00:1A:7D:DA:71:13 (Primary,USB,hci0)                                                              0.654764
= Open Index: 00:1A:7D:DA:71:13                                                                                0.654766
= Index Info: 00:1A:7D:DA:71:13 (Cambridge Silicon Radio)                                                      0.654768
@ RAW Open: hass (privileged) version 2.22                                                            {0x0002} 0.654777
@ MGMT Open: bluetoothd (privileged) version 1.21                                                     {0x0001} 0.654786
> HCI Event: LE Meta Event (0x3e) plen 59                                                                   #1 2.325655
      LE Extended Advertising Report (0x0d)
        Num reports: 1
        Entry 0
          Event type: 0x0001
            Props: 0x0001
              Connectable
            Data status: Complete
          Address type: Public (0x00)
          Address: A4:C1:38:0B:5E:ED (Telink Semiconductor (Taipei) Co. Ltd.)
          Primary PHY: LE Coded
          Secondary PHY: LE Coded
          SID: 0x00
          TX power: 127 dBm
          RSSI: -56 dBm (0xc8)
          Periodic advertising interval: 0.00 msec (0x0000)
          Direct address type: Public (0x00)
          Direct address: 00:00:00:00:00:00 (OUI 00-00-00)
          Data length: 0x21
        02 01 06 11 16 1c 18 02 00 8d 23 02 8a 07 03 03  ..........#.....
        e3 0e 02 01 56 0b 09 41 54 43 5f 30 42 35 45 45  ....V..ATC_0B5EE
        44                                               D
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Service Data: User Data (0x181c)
          Data: 02008d23028a070303e30e020156
        Name (complete): ATC_0B5EED
@ MGMT Event: Device Found (0x0012) plen 47                                                           {0x0001} 2.325754
        LE Address: A4:C1:38:0B:5E:ED (Telink Semiconductor (Taipei) Co. Ltd.)
        RSSI: -56 dBm (0xc8)
        Flags: 0x00000000
        Data length: 33
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Service Data: User Data (0x181c)
          Data: 02008d23028a070303e30e020156
        Name (complete): ATC_0B5EED
> HCI Event: LE Meta Event (0x3e) plen 59                                                                  #2 12.826263
      LE Extended Advertising Report (0x0d)
        Num reports: 1
        Entry 0
          Event type: 0x0001
            Props: 0x0001
              Connectable
            Data status: Complete
          Address type: Public (0x00)
          Address: A4:C1:38:0B:5E:ED (Telink Semiconductor (Taipei) Co. Ltd.)
          Primary PHY: LE Coded
          Secondary PHY: LE Coded
          SID: 0x00
          TX power: 127 dBm
          RSSI: -54 dBm (0xca)
          Periodic advertising interval: 0.00 msec (0x0000)
          Direct address type: Public (0x00)
          Direct address: 00:00:00:00:00:00 (OUI 00-00-00)
          Data length: 0x21
        02 01 06 11 16 1c 18 02 00 8e 23 02 8a 07 03 03  ..........#.....
        e3 0e 02 01 56 0b 09 41 54 43 5f 30 42 35 45 45  ....V..ATC_0B5EE
        44                                               D
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Service Data: User Data (0x181c)
          Data: 02008e23028a070303e30e020156
        Name (complete): ATC_0B5EED
@ MGMT Event: Device Found (0x0012) plen 47                                                          {0x0001} 12.826337
        LE Address: A4:C1:38:0B:5E:ED (Telink Semiconductor (Taipei) Co. Ltd.)
        RSSI: -54 dBm (0xca)
        Flags: 0x00000000
        Data length: 33
        Flags: 0x06
          LE General Discoverable Mode
          BR/EDR Not Supported
        Service Data: User Data (0x181c)
          Data: 02008e23028a070303e30e020156
        Name (complete): ATC_0B5EED

To get a BLE 5.0 scan on such an adapter (1M and Сoded PHY), switching the scan to different PHY variants is required.


Mac doesn't interest me at all because of the many limitations in BLE. There are Bluetooth SIG standards, but Macs have their own :)

BLE scanning does not work well on Windows initially...

@pvvx
Copy link
Author

pvvx commented Feb 17, 2023

http://www.bluez.org/
Bluetooth Management API
/doc/mgmt-api.txt

Set PHY Configuration Command
=============================

	Command Code:		0x0045
	Controller Index:	<controller id>
	Command Parameters: 	Selected_PHYs (4 Octet)
	Return Parameters:

	This command is used to set the default PHY to the controller.

	This will be stored and used for all the subsequent scanning
	and connection initiation.

	The list of supported PHYs can be retrieved via the
	Get PHY Configuration command. Selecting unsupported or
	deselecting default PHYs will result in an Invalid Parameter
	error.

	This can be called at any point to change the Selected PHYs.

	Refer Get PHY Configuration command for PHYs parameter.

	This command generates a Command Complete event on success
	or a Command Status event on failure.

	Possible errors:	Invalid Parameters
				Invalid Index

@DienoX
Copy link

DienoX commented Feb 18, 2023

@pvvx
Thank you for your efforts on LE CODED.
I hope that it will be possible to properly implement Bluetooth 5 in bleak. Although in support for Android and Linux.
I'm keeping my fingers crossed for that.

So far I am very happy with the implementation of your software when using it with Linux.

@dlech dlech added the enhancement New feature or request label Feb 18, 2023
@dlech dlech changed the title Bleak not supports reading, writing and getting notifications from GATT servers, as well as a function for discovering BLE devices Bluetooth Core Specification Version 5.0 and next version? Support for Coded PHY (Bluetooth 5.0 feature) when scanning. Feb 18, 2023
@pvvx pvvx closed this as completed Feb 18, 2023
@dlech dlech reopened this May 31, 2023
@DienoX
Copy link

DienoX commented May 31, 2023

Why was it opened?

@dlech
Copy link
Collaborator

dlech commented May 31, 2023

This is a feature that has been requested by multiple users. I don't know if it is currently technically possible, but maybe some day.

@pvvx
Copy link
Author

pvvx commented May 31, 2023

Starting with the bluetooth 5.0 standard from 2016, it is required to set secondary and primary PHY for scanning and advertising.
The current Bleak does not have support for Bluetooth 5.0 yet.
https://techcrunch.com/2023/05/31/hubble-network-is-building-out-a-space-based-bluetooth-network-to-connect-over-billion-devices/

@pvvx
Copy link
Author

pvvx commented Jun 20, 2023

How are things going with the support of "Periodic Advertising with Responses (PAwR)", "Encrypted Advertising Data" and so on?

@Sorien
Copy link

Sorien commented Jan 10, 2024

any news on this?

@inteltryb93
Copy link

Seriously, how hasn't this been tackled yet? It's like waiting for the next ice age! We've got all the specs laid out, bugs squashed left and right, and yet, we're still twiddling our thumbs here without BLE LongRange support in Bleak? Come on, folks! Android and Linux have sorted their end ages ago, and Bluetooth 5.0 has been out since the dinosaurs roamed the Earth! We've got the adapter practically waving its hands saying, "I'm ready, use me!" So, what gives? Can we please get some action on this?

@pvvx
Copy link
Author

pvvx commented Feb 26, 2024

Bleak believes that there is no need for people to use new smartphones and USB3.0. Use Nokia 3310 and USB 1.1. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

5 participants