
Overview
This project adapts a COLMI R12 smart ring to software that expects the standard Bluetooth Heart Rate Service. The patch makes the ring advertise that service so a fitness application such as Zwift can use its heart-rate notifications.
It is a narrowly targeted interoperability experiment. The supported combination is hardware RT11CR_V1.0 with stock firmware RT11CR_1.00.09_260424. Vendor firmware is not distributed with the project.
What the patch changes
The patched device exposes Heart Rate Service 0x180D, keeps heart-rate measurement running after the display sleeps, and resends the last valid BPM every two seconds between new sensor results.
That resend keeps a standard notification stream available between measurements. It does not create a new sensor reading every two seconds; the most recent valid result can appear more than once.
The work combines documented ARM Thumb patches with Python tooling for packaging, Bluetooth communication, monitoring, and recovery.
Reproducible packaging
The packager checks the exact input image before changing it. It verifies the expected original instruction ranges, preserves image length, and updates the firmware metadata and checksums.
The process produces both a patched image and a stock-recovery image. The recovery image uses a higher boot counter so it can restore the original code through the device’s update mechanism.
These checks are important because fixed-address binary patches depend on a specific firmware layout. A similarly named device or a different stock release is not automatically a compatible target.
Using it with Zwift
After following the supported-image preparation and flashing instructions in the repository:
- Disconnect other tools or phone apps that are connected to the ring.
- Put the ring on and open its heart-rate page.
- Pair the ring as a Heart Rate device in Zwift.
- Leave the ring on that page during the session.
A standalone BLE monitor can inspect standard notifications before involving Zwift. The tools can select a specific device if more than one compatible ring is nearby.
Known limitation and recovery
Leaving the heart-rate page stops the sensor and its updates. Keeping the display asleep is supported; navigating to another page is a different action. A tap-lock experiment was excluded after it made wake behavior unreliable.
The repository documents how to prepare and retain a recovery image. Its setup flow verifies the stock image and requires an explicit confirmation before starting an over-the-air flash.
Only the documented hardware and firmware combination was tested. The project does not establish general compatibility across R12 variants or medical measurement accuracy.
Files and credits
The public repository contains the patch assembly, Python tools, supported-image hashes, monitor, and recovery instructions. Use that versioned reference for the exact flashing procedure.
The cover is a COLMI Store product image. COLMI designed the hardware; my contribution is the independent firmware patch and the tooling around it.