Skip to main content

Bluetooth Connectivity on Tachyon

Tachyon includes the integrated Qualcomm® FastConnect™ 6900 system within the QCM6490 chipset, providing advanced Wi-Fi and Bluetooth support. Bluetooth is connected over an internal interface and managed through standard Linux services and tools.

Overview

The FastConnect 6900 supports Bluetooth 5.2, including LE Audio and Classic Audio. It offers dual-radio support, multi-role operation (central and peripheral), and multi-stream audio. The device is driven by the bluez5 Bluetooth stack, version 5.56.

Bluetooth devices on the desktop variant can be managed via the blueman GUI. On the headless variant, bluetoothctl provides full command-line control.

Bluetooth Specifications

FeatureDetails
SystemQualcomm® FastConnect™ 6900
Bluetooth VersionBluetooth® 5.2
TopologiesDual Bluetooth® Radios
Low Energy SupportBluetooth® Low Energy Audio
Max Data Rate (Bluetooth)Defined by 5.2 spec (LE Isochronous, etc.)
Host InterfacePCIe (integrated into QCM6490)
Profiles SupportedA2DP Sink/Source, HFP, AVRCP, GATT, etc.

Driver & Firmware Support

Tachyon uses the standard HCI protocol for Bluetooth communications. A Qualcomm-specific adapter is included in the OS release to bridge to the FastConnect hardware. These drivers are pre-installed and configured—no manual setup is needed.

⚠️ Do not remove or overwrite the BlueZ or HCI-related packages, as upstream versions are not compatible with the Qualcomm-specific stack.

BlueZ provides the following key tools:

  • bluetoothctl: configure controller, scan/pair/trust/connect to devices.
  • hciconfig: view Bluetooth controller state.
  • hciattach: automatically connects the HCI UART at startup via hciattach.service.

Bluetooth devices can be managed with the included blueman GUI program in the desktop variant.

Known Issues and Caveats

1/ Tachyon uses a custom bluez5 package using an older version of bluez.

It cannot be removed or updated without breaking hardware compatability

2/ Bluetooth HCI connection problems with blueman on first use.

Once BT is enabled this does not happen on subsequent restarts. If bluetooth scanning does not return any devices restart the HCI connection via sudo systemctl restart hciattach

3/ BT speaker not integrating with system audio via pulse audio server

Still under investigation

4/ paplay not working with pulse audio devices like BT speaker

Workaround is to use pacmd instead while we sort out issues


Using Bluetooth with the Desktop Software Variant

On first boot, blueman will ask to auto turn on bluetooth, click accept and yes

Bluetooth turn on Bluetooth turn on

There may be an issue on first setup of the bluetooth controller scan failing. If this is the case, restart the HCI connection via sudo systemctl restart hciattach and retry scanning. This is a known issue and will be investigated.

Bluetooth turn on

Place your device in pairing mode and scan. The device should be populated in the list.

Bluetooth turn on

Connecting to the device can be done with right click menu options or using the setup button and following the prompts

Bluetooth turn on Bluetooth turn on

For audio devices, the volume can be controlled via the PulseAudio Volume controll application.

Bluetooth turn on

Using Bluetooth with the Headless Software Variant

Verify that the bluez bluetoothd service is running

systemctl status bluetooth
● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2024-06-18 04:29:49 CST; 1min 29s ago
Docs: man:bluetoothd(8)
Main PID: 3166 (bluetoothd)
Status: "Running"
Tasks: 1 (limit: 5763)
Memory: 1.7M
CGroup: /system.slice/bluetooth.service
└─3166 /usr/libexec/bluetooth/bluetoothd

If the service is not running, start it with sudo systemctl start bluetooth

Verify that the HCI USART is connected

systemctl status hciattach
● hciattach.service - Attach Bluetooth HCI UART
Loaded: loaded (/etc/systemd/system/hciattach.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2024-06-18 04:29:50 CST; 2min 9s ago
Process: 3244 ExecStart=/usr/bin/hciattach /dev/ttyHS0 qca (code=exited, status=0/SUCCESS)
Main PID: 3244 (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 5763)
Memory: 512.0K
CGroup: /system.slice/hciattach.service
└─3517 /usr/bin/hciattach /dev/ttyHS0 qca

You can query the state of the hci0 device via

hciconfig -a hci0
hci0: Type: Primary Bus: UART
BD Address: 00:00:00:00:5A:AD ACL MTU: 1024:8 SCO MTU: 240:4
DOWN
RX bytes:711 acl:0 sco:0 events:40 errors:0
TX bytes:454 acl:0 sco:0 commands:40 errors:0
Features: 0xff 0xfe 0x8f 0xfe 0xd8 0x3f 0x5b 0x87
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF
Link mode: SLAVE ACCEPT

If there is no hci0 device, or it is unresponsive, restart the hciattach service

sudo systemctl restart hciattach

Enabling and using Bluetooth:

Once the hci0 device is created, the bluetooth controller hardware will be be manageable by bluez using the bluetoothctl command

bluetoothctl
Agent registered
[CHG] Controller 00:00:00:00:5A:AD Pairable: yes
[bluetooth]#

Power on the hardware with power on

[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 00:00:00:00:5A:AD Powered: yes

The controller should be available via the show command

[bluetooth]# show
Controller 00:00:00:00:5A:AD (public)
Name: tachyon-c368e534
Alias: Tachyon-c368e534
Class: 0x00000000
Powered: yes
Discoverable: no
DiscoverableTimeout: 0x000000b4
Pairable: yes
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: Headset (00001108-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb)
Modalias: usb:v1D6Bp0246d0538
Discovering: no
Roles: central
Roles: peripheral
Advertising Features:
ActiveInstances: 0x00 (0)
SupportedInstances: 0x05 (5)
SupportedIncludes: tx-power
SupportedIncludes: appearance
SupportedIncludes: local-name
SupportedSecondaryChannels: 1M
SupportedSecondaryChannels: 2M
SupportedSecondaryChannels: Coded

Discover devices with scan on

[bluetooth]# scan on
Discovery started
[CHG] Controller 00:00:00:00:5A:AD Discovering: yes
[NEW] Device 45:ED:B2:CC:35:B0 45-ED-B2-CC-35-B0
[NEW] Device 4F:5E:81:42:19:53 4F-5E-81-42-19-53
[NEW] Device 7F:B2:11:AE:E1:A7 7F-B2-11-AE-E1-A7
[NEW] Device 64:16:66:72:2D:9A N00BV
[NEW] Device B0:B2:1C:D3:19:96 110057_1994
[NEW] Device 70:6C:8F:48:2C:14 70-6C-8F-48-2C-14
[NEW] Device E0:5A:1B:DA:87:B6 109539_87B4
[NEW] Device 45:C3:7E:26:17:DD 45-C3-7E-26-17-DD
[NEW] Device E6:23:D1:0B:23:14 E6-23-D1-0B-23-14
[NEW] Device C3:33:CF:BC:21:E7 N0B1A
[NEW] Device CD:D7:F9:AB:6D:E2 N062X
[NEW] Device C3:D7:CF:F2:8F:5B N0B1R
[NEW] Device FA:86:94:02:B4:C8 N0B33
[NEW] Device F5:B5:28:FC:19:7D N0A1Q
[NEW] Device CC:D3:D3:39:5A:B2 N05WG
[NEW] Device 4E:34:4B:2E:3E:E8 N5CZ1
[NEW] Device 70:99:1C:E8:CC:B8 JBL Clip 3

The scan should return devices with the MAC addresses. Devices will be printed as they are discovered. To list all the currently discovered devices

[bluetooth]# devices
Device 45:ED:B2:CC:35:B0 45-ED-B2-CC-35-B0
Device 4F:5E:81:42:19:53 4F-5E-81-42-19-53
Device 7F:B2:11:AE:E1:A7 7F-B2-11-AE-E1-A7
Device 64:16:66:72:2D:9A N00BV
Device B0:B2:1C:D3:19:96 110057_1994
Device 70:6C:8F:48:2C:14 70-6C-8F-48-2C-14
Device E0:5A:1B:DA:87:B6 109539_87B4
Device 45:C3:7E:26:17:DD 45-C3-7E-26-17-DD
Device E6:23:D1:0B:23:14 E6-23-D1-0B-23-14
Device C3:33:CF:BC:21:E7 N0B1A
Device CD:D7:F9:AB:6D:E2 N062X
Device C3:D7:CF:F2:8F:5B N0B1R
Device FA:86:94:02:B4:C8 N0B33
Device F5:B5:28:FC:19:7D N0A1Q
Device CC:D3:D3:39:5A:B2 N05WG
Device 4E:34:4B:2E:3E:E8 N5CZ1
Device 70:99:1C:E8:CC:B8 JBL Clip 3
Device 18:45:B3:36:94:95 18-45-B3-36-94-95

Trust the device

[bluetooth]# trust 70:99:1C:E8:CC:B8
[CHG] Device 70:99:1C:E8:CC:B8 Trusted: yes
Changing 70:99:1C:E8:CC:B8 trust succeeded

Pair with a device, use the mac address

[bluetooth]# pair 70:99:1C:E8:CC:B8
Attempting to pair with 70:99:1C:E8:CC:B8
[CHG] Device 70:99:1C:E8:CC:B8 Connected: yes
[CHG] Device 70:99:1C:E8:CC:B8 UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device 70:99:1C:E8:CC:B8 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device 70:99:1C:E8:CC:B8 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device 70:99:1C:E8:CC:B8 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device 70:99:1C:E8:CC:B8 UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device 70:99:1C:E8:CC:B8 ServicesResolved: yes
[CHG] Device 70:99:1C:E8:CC:B8 Paired: yes
Pairing successful

Connect to the device:

[bluetooth]# connect 70:99:1C:E8:CC:B8
Attempting to connect to 70:99:1C:E8:CC:B8
[CHG] Device 70:99:1C:E8:CC:B8 Connected: yes
Connection successful
[CHG] Device 70:99:1C:E8:CC:B8 ServicesResolved: yes

The devices info is available via the info command

[JBL Clip 3]# info
Device 70:99:1C:E8:CC:B8 (public)
Name: JBL Clip 3
Alias: JBL Clip 3
Class: 0x00240414
Icon: audio-card
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Headset (00001108-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb)
ManufacturerData Key: 0x0057
ManufacturerData Value:
01 00 cb 0e d0 1e 03 01 ........
RSSI: -56
TxPower: 0

Playing audio from the command line:

Once connected with a bluetooth speaker, it should be available to play audio via pulseaudio.

Find the speaker a2dp sink using

pactl list short sinks
1 bluez_sink.70_99_1C_E8_CC_B8.a2dp_sink module-bluez5-device.c s16le 2ch 48000Hz SUSPENDED

Play audio with that sink

pacmd play-file /usr/share/sounds/alsa/Front_Center.wav bluez_sink.70_99_1C_E8_CC_B8.a2dp_sink