Skip to content

Caeruleus v1.1.0

Latest

Choose a tag to compare

@praetorian-aaron praetorian-aaron released this 31 Jul 06:31
· 4 commits to main since this release
40907eb

This release improves compatibility with older BlueZ versions, where the host's GATT view can be incomplete or the handles it reports can be off by one from the device's true ATT handles.

What's new

Host/BlueZ-independent GATT access: enumerate --raw and read --raw. Older BlueZ (for example 5.55 on Raspbian bullseye) omits the remote GAP (0x1800) and GATT (0x1801) services from its D-Bus GATT tree, so a plain enumerate can miss characteristics such as Device Name (0x2A00) entirely, and read can't reach them. enumerate --raw (root) walks the device's own attribute database directly over the ATT channel, giving a complete view with the device's true handles regardless of the host's BlueZ version, and read --raw (root) reads any of those handles directly over ATT. Together they let you discover and read the parts of a device that older BlueZ hides. (#28, #30)

Correct characteristic handles on old BlueZ. On BlueZ before 5.57, which does not expose the characteristic Handle D-Bus property, caeruleus derived the handle from the object path. That path carries the declaration handle, one less than the value handle you actually read and write. Characteristic handles are now the true value handle on every BlueZ version, so a handle from enumerate (or enumerate --raw) works directly with read, write, listen, and cccd. (#29)

On a current BlueZ nothing changes. On an older one, such as a Raspberry Pi running 5.55, the GATT tree is now complete, the handles line up with what you read, and you can read the characteristics BlueZ previously hid.

Install

go install github.com/praetorian-inc/caeruleus/cmd/caeruleus@latest

Or download the archive for your architecture below, extract, and put caeruleus on your $PATH. Requires Linux with BlueZ and a standard BLE adapter; a few raw-socket commands need root.

Assets

Asset Platform
caeruleus_1.1.0_linux_amd64.tar.gz Linux x86_64
caeruleus_1.1.0_linux_arm64.tar.gz Linux arm64
checksums.txt SHA-256 checksums

Full changelog: v1.0.0...v1.1.0