@@ -9,11 +9,13 @@ Service UUID: `81040a2e-4819-11ee-be56-0242ac120002`.
99
1010| Characteristic | UUID | Operations | Payload size |
1111| ---| ---| ---| ---|
12- | RGB | ` 81040e7a-4819-11ee-be56-0242ac120002 ` | Write | 3 bytes |
13- | State | ` 81040e7b-4819-11ee-be56-0242ac120002 ` | Write | 1 byte |
12+ | RGB | ` 81040e7a-4819-11ee-be56-0242ac120002 ` | Read, write, notify | 3 bytes |
13+ | State | ` 81040e7b-4819-11ee-be56-0242ac120002 ` | Read, write, notify | 1 byte |
1414
1515Send the payload directly to its characteristic, without a message ID, length
16- prefix, or version byte. Neither characteristic supports reads or notifications.
16+ prefix, or version byte. Firmware 2.3.x adds reads and notifications using the
17+ same payloads and UUIDs. Older firmware is write-only: clients must check the
18+ discovered characteristic properties before reading or subscribing.
1719
1820## RGB color
1921
@@ -41,8 +43,9 @@ Write a single byte to State:
4143| ` 00 ` | Automatic state indication; firmware chooses colors and animations |
4244| ` 01 ` | Custom mode; display the stored RGB color |
4345
44- Use only these two values. The firmware callback currently does not reject
45- other numeric values, but they have no defined protocol meaning.
46+ Use only these two values. The firmware callback does not reject
47+ other numeric values on older versions; firmware 2.3.x rejects them with
48+ ATT Value Not Allowed and preserves the current mode.
4649
4750To show blue:
4851
@@ -58,6 +61,19 @@ that are not exactly three bytes, State payloads that are not exactly one byte,
5861and writes with a nonzero offset. Successful writes have no separate response
5962payload.
6063
64+ ## Readback and notifications
65+
66+ Read RGB to retrieve the stored custom color, including while automatic mode
67+ is active. Read State to retrieve the configured indication mode. These are
68+ configuration values, not the instantaneous color of a pulse or a DFU override.
69+ At boot the custom color is black and the indication mode is automatic.
70+
71+ Subscribe using each characteristic’s CCC descriptor, then read its current
72+ value. After a successful write, firmware notifies the accepted value to
73+ subscribers. Rejected writes leave the configuration unchanged and produce no
74+ notification. A successful write while unsubscribed remains valid. Settings
75+ are volatile and reset at reboot, as before.
76+
6177## Generated bindings
6278
6379[ ` protocol.yml ` ] ( protocol.yml ) defines both messages and their BLE metadata.
0 commit comments