# ANT+ to Bluetooth LE Bridge Bridge an ANT+ cycling power trainer over Bluetooth Low Energy, allowing modern devices that don't support ANT+ to receive power and cadence data. ## Quick Start 1. **Set up the USB dongle** — Follow the [Setup instructions](#setup) to prevent the `usbserial` driver from claiming it 2. **Build:** ```bash make build ``` 3. **Run** (requires root): ```bash sudo ./bin/bridge ``` 4. **Connect** — On your computer or phone, scan for BLE devices and connect to `LinuxAntBtBridge`. That's it. Your trainer's power and cadence data should now be available over BLE. ## Why this exists Modern training apps and devices (phone apps, many power meter displays) support Bluetooth LE but lack ANT+ radios. Previously, hardware-based Bluetooth-to-ANT+ bridges were available for this purpose, but these have now been discontinued. This project provides a simple, software-based alternative using a standard USB ANT+ dongle. This bridge listens to ANT+ data from a wired trainer and re-broadcasts it as a standard Cycling Power Profile service over BLE. ## How it works 1. Opens a USB ANT+ dongle and listens for broadcast messages from a specific trainer device number. 2. Parses power (Watts) and cadence (RPM) from the trainer's ANT+ data. 3. Exposes a standard Cycling Power Profile BLE service via the system's Bluetooth adapter, updating values as new ANT+ messages arrive. ## Requirements ### Hardware - A Bluetooth adapter (built-in or USB) - An ANT+ USB dongle (tested: ANT USBStick2, vendor `0x0fcf`, product `0x1008`) - An ANT+ cycling power trainer ### Software - Linux - BlueZ 5.50+ (for Bluetooth management) - D-Bus (for BlueZ communication) - `hciconfig` (usually part of the `bluez-utils` or `bluez-tools` package) **Note:** This program must be run as root to access the USB dongle. ## Tested hardware - USB dongle: ANT USBStick2 (Dynastream Innovations, vendor `0x0fcf`, product `0x1008`) ## Setup The Linux `usbserial` driver must be prevented from claiming the ANT+ dongle. ### Find your dongle's USB IDs If you're not using the tested dongle, find your dongle's vendor and product IDs: ```bash lsusb ``` Look for a line with "ANT" in the description. Note the vendor ID (e.g., `0fcf`) and product ID (e.g., `1008`). ### Create the udev rule Create the following udev rule to prevent `usbserial` from claiming the dongle: ```bash sudo tee /etc/udev/rules.d/99-ant-usb.rules > /dev/null <