Ramka Data
Każda notyfikacja na charakterystyce Data zawiera jedną ramkę data_frame.
| Header (12B) |
Payload |
| Module ID |
Flags |
Frame Number |
Sample Count |
Timestamp First [µs] |
Timestamp Last Δ [µs] |
Payload |
| 1B |
1B |
1B |
1B |
5B (uint40 LE) |
3B (uint24 LE) |
1–232B |
| byte 0 |
byte 1 |
byte 2 |
byte 3 |
byte 4–8 |
byte 9–11 |
byte 12+ |
| Offset |
Rozmiar |
Pole |
Opis |
| 0 |
1B |
module_id |
ID modułu — patrz Moduły |
| 1 |
1B |
flags |
Flagi nagłówka (patrz niżej) |
| 2 |
1B |
frame_number |
Numer ramki (inkrementowany per-moduł, 0–255 z zawijaniem) |
| 3 |
1B |
sample_count |
Liczba próbek w payload |
| 4 |
5B |
timestamp_first |
Timestamp pierwszej próbki [µs] (uint40, LE) |
| 9 |
3B |
timestamp_last_delta |
Delta do ostatniej próbki [µs] (uint24, LE) |
| 12 |
1–232B |
payload |
Dane sensorowe (format zależy od modułu) |
Flagi
| Bit |
Nazwa |
Opis |
| 7 (MSB) |
FLAG_ERROR |
Ramka zawiera serializowany error_t zamiast danych sensorów. module_id identyfikuje moduł źródłowy błędu. |
| 0–6 |
— |
Zarezerwowane |
Stałe
| Stała |
Wartość |
Opis |
DATA_FRAME_HEADER_SIZE |
12 |
|
DATA_FRAME_PAYLOAD_MIN |
1 |
|
DATA_FRAME_PAYLOAD_MAX |
232 |
|
DATA_FRAME_MODULE_ID_INDEX |
0 |
|
DATA_FRAME_FLAGS_INDEX |
1 |
|
DATA_FRAME_FRAME_NUMBER_INDEX |
2 |
|
DATA_FRAME_SAMPLE_COUNT_INDEX |
3 |
|
DATA_FRAME_TIMESTAMP_FIRST_INDEX |
4 |
|
DATA_FRAME_TIMESTAMP_LAST_DELTA_INDEX |
9 |
|
DATA_FRAME_PAYLOAD_INDEX |
12 |
|
Rozmiary
- Minimalna ramka: 13B (12B header + 1B payload)
- Maksymalna ramka: 244B (12B header + 232B payload)
- MTU requirement: ≥ 247B (244 + 3B ATT overhead)
Timestamp
timestamp_first — absolutny czas pierwszej próbki w mikrosekundach (od startu systemu)
timestamp_last_delta — różnica czasu między pierwszą a ostatnią próbką w payload (µs)
- Timestamp ostatniej próbki =
timestamp_first + timestamp_last_delta