Skip to the content.

The normative spec is protocol/SPEC.md (framing + codecs implemented and host-tested; BLE transport and message handling are not). Where this draft and SPEC.md differ, SPEC.md wins: PONG is a PING response frame, not a separate type. This file fixes the shape so firmware and desktop cannot diverge silently: both sides will test against the same protocol/vectors.json.

Frame

 0      1      2      3        4..5      6..(6+len-1)   last 2
+------+------+------+--------+---------+--------------+------+
| ver  | type | flags| seq    | len(LE) |   payload    | crc16|
+------+------+------+--------+---------+--------------+------+

Message families

HELLO/HELLO_ACK (versions, capabilities, device UUID, name, hardware id, firmware version) · KEY_DOWN · KEY_UP · KEY_TAP · MOUSE_MOVE (relative, int16, droppable) · MOUSE_BUTTON_DOWN/UP · SCROLL · RELEASE_ALL · PING/PONG · STATUS (HID mounted state, counters) · SET_NAME · ERROR.

Reliability rules