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
Feature | Details |
---|---|
System | Qualcomm® FastConnect™ 6900 |
Bluetooth Version | Bluetooth® 5.2 |
Topologies | Dual Bluetooth® Radios |
Low Energy Support | Bluetooth® Low Energy Audio |
Max Data Rate (Bluetooth) | Defined by 5.2 spec (LE Isochronous, etc.) |
Host Interface | PCIe (integrated into QCM6490) |
Profiles Supported | A2DP 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 viahciattach.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


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.

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

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


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

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