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 |
|
CONTROL_STATUS_UNKNOWN_ERROR |
2 |
|
CONTROL_STATUS_NOT_CALIBRATED |
3 |
|
CONTROL_STATUS_UNKNOWN_COMMAND |
4 |
|
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
Przykłady
Włączenie modułu Magnetometer
Komenda SET:
Odpowiedź:
Odczyt wersji firmware
Komenda GET:
Odpowiedź:
RX: [0x02] [0x00] [0x02] [0x20] [0x01] [0x31] [0x2E] [0x30] [0x00]
tid system GET FW_VER OK '1' '.' '0' '\0'
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.