Skip to content

Reaction Device API

This site documents the BLE protocol used by Reaction/Quizbox devices.

The intent is practical client implementation: how to connect, how messages are framed, which protobuf payloads are sent, and what each event means when an app receives it.

Source Of Truth

These docs were written against the current repository implementation:

Area Source files
Wire schema reaction_protos/*.proto
BLE service, characteristics, advertising main/Source/BleTransport.cpp
Pairing and write authorization main/Tasks/BleTask.cpp, main/Source/BleSessionManager.cpp, main/Source/BleSessionPolicy.cpp
Message routing main/Source/BleProtocolHandler.cpp
Event to protobuf conversion main/Source/EventConverter.cpp
Quizzer behavior main/Source/QuizzerHandler.cpp
Timer behavior main/Source/TimerHandler.cpp, main/Tasks/TimerTask.hpp
Config behavior reaction_protos/Config.proto, main/Source/ConfigService.cpp, main/Source/DeviceConfig.cpp
Firmware update behavior reaction_protos/FirmwareUpdate.proto, main/Source/FirmwareUpdateHandler.cpp
Python test client behavior tools/reaction_ble_protocol.py, tools/ble_test_client.py

If this site and those files disagree, treat the source files as authoritative and update the docs in the same pull request as the protocol change.

Hosting

The repository includes mkdocs.yml, so this site can be hosted with GitHub Pages, Read the Docs, or any static web host.

Local preview:

python3 -m pip install -r docs/requirements.txt
python3 -m mkdocs serve

Static build:

python3 -m mkdocs build

Important Accuracy Note

Some older engineering notes remain in docs/ for history and implementation context. The pages under API Guide are the client-facing reference. See Known Gaps for places where older specs or comments implied behavior that current firmware does not appear to implement.