Protokół Control
Protokół Control służy do konfiguracji modułów urządzenia.
Klient wysyła komendy Write na charakterystykę Control, urządzenie odpowiada Indicate.
Typy komend
| Komenda | Wartość | Opis |
|---|---|---|
CONTROL_CMD_SET |
1 |
|
CONTROL_CMD_GET |
2 |
Format ramek
SET Command (Klient → Urządzenie)
| Offset | Pole | Rozmiar | Opis |
|---|---|---|---|
| 0 | transaction_id |
1B | Identyfikator transakcji (klient wybiera, odpowiedź zwraca ten sam) |
| 1 | module_id |
1B | ID modułu docelowego — patrz Moduły |
| 2 | command |
1B | 1 (SET) |
| 3 | key |
1B | Klucz parametru — patrz Klucze |
| 4+ | value |
0–239B | Wartość do ustawienia (format zależy od klucza) |
SET Reply (Urządzenie → Klient)
| Offset | Pole | Rozmiar | Opis |
|---|---|---|---|
| 0–3 | nagłówek | 4B | Taki sam jak w komendzie |
| 4 | status |
1B | Kod statusu — patrz niżej |
GET Command (Klient → Urządzenie)
| Offset | Pole | Rozmiar | Opis |
|---|---|---|---|
| 0–3 | nagłówek | 4B | Jak wyżej, command = 2 (GET) |
GET Reply (Urządzenie → Klient)
| Offset | Pole | Rozmiar | Opis |
|---|---|---|---|
| 0–3 | nagłówek | 4B | Echo z komendy |
| 4 | status |
1B | Kod statusu |
| 5+ | value |
0–239B | Wartość (tylko jeśli status = OK) |
Kody statusu
| Status | Wartość | Opis |
|---|---|---|
CONTROL_STATUS_OK |
1 |
Operacja zakończona sukcesem |
CONTROL_STATUS_UNKNOWN_ERROR |
2 |
Nieznany błąd |
CONTROL_STATUS_NOT_CALIBRATED |
3 |
Moduł nie skalibrowany |
CONTROL_STATUS_UNKNOWN_COMMAND |
4 |
Nieznana komenda |
CONTROL_STATUS_UNSUPPORTED_KEY |
5 |
Moduł nie obsługuje tego klucza |
CONTROL_STATUS_INVALID_VALUE |
6 |
Wartość poza zakresem / niepoprawna |
CONTROL_STATUS_BUSY |
7 |
Operacja w toku (np. kalibracja) |
CONTROL_STATUS_NOT_READY |
8 |
Moduł nie zainicjalizowany |
CONTROL_STATUS_HARDWARE_ERROR |
9 |
Błąd sprzętowy (np. I2C/SPI) |
Stałe rozmiarów
| Stała | Wartość | Opis |
|---|---|---|
CONTROL_HEADER_SIZE |
4 |
tid + mod + cmd + key |
CONTROL_SET_REPLY_SIZE |
5 |
header + status |
CONTROL_GET_REPLY_HEADER |
5 |
header + status (before values) |
CONTROL_VALUE_MAX_SIZE |
239 |
244 - 5 (worst-case GET reply) |
Przykłady
Włączenie modułu Magnetometer
Komenda SET:
Odpowiedź:
Odczyt informacji o module Magnetometer
Komenda GET:
Odpowiedź:
RX: [0x02] [0x06] [0x02] [0x01] [0x00] [MMC5983MA\0]
tid mag GET INFO OK model_name
[0x10] [0x04] [0x01,0x00] [0x32,0x00] [0x64,0x00] [0xC8,0x00]
ODR 4 val 1 Hz 50 Hz 100 Hz 200 Hz
[0x14] [0x02] [0x32,0x00] [0xC8,0x00]
FILTER 2 val 50 Hz 200 Hz
KEY_CTRL_INFO — Format odpowiedzi TLV
Komenda GET z kluczem KEY_CTRL_INFO (0x01) zwraca opis modułu
oraz listę konfigurowalnych parametrów z dozwolonymi wartościami.
Format wartości w reply
Każdy wpis TLV:
| Pole | Rozmiar | Opis |
|---|---|---|
model_name |
N+1 B | Null-terminated nazwa sensora/modułu (np. "LSM6DSV32X") |
key_id |
1 B | Klucz konfiguracji (np. 0x10 = KEY_CFG_ODR) |
count |
1 B | Liczba dozwolonych wartości (0 = dowolna wartość) |
value_i |
2 B (LE) | Dozwolona wartość fizyczna (uint16) |
Interpretacja przez klienta
- count > 0 → lista dozwolonych opcji → wyświetl jako dropdown/menu
- count = 0 → klucz istnieje, wartość dowolna → wyświetl jako input field
- Brak TLV dla danego klucza → moduł nie obsługuje tego parametru
Moduły i ich parametry
| Moduł | Model | Parametry w INFO |
|---|---|---|
| AccGyro (2) | LSM6DSV32X | ODR (0x10), Acc range (0x11), Gyro range (0x12) |
| Barometer (3) | BMP581 | Oversampling (0x13), Filter (0x14) |
| Battery (4) | Battery | — (tylko model_name) |
| GNSS (5) | ZED-F9P | Update rate (0x80), Dynamic model (0x81) |
| Magnetometer (6) | MMC5983MA | ODR (0x10), Filter (0x14) |
| Selector (7) | TMAG5273 | Hysteresis (0x80, freeform) |
| Trigger (8) | TMAG5273 | Sensitivity (0x80), Mode (0x81) |
| Quaternion (9) | Madgwick | — (tylko model_name) |
| UI (11) | UI | — (tylko model_name) |
| Kickback (12) | Kickback | Timing (0x80, freeform) |
| Displacement (13) | Displacement | Soft R (0x81, freeform) |
Transaction ID
transaction_id jest wybierany przez klienta i kopiowany do odpowiedzi.
Pozwala to dopasować odpowiedź do komendy, gdy wysyłasz wiele komend jednocześnie.