Diagnostics
Module ID: 1 (jako FLAG_ERROR w ramce Data, MODULE_SYSTEM)
Moduł Diagnostics odpowiada za raportowanie błędów systemowych.
Błędy są wysyłane jako ramki Data z ustawioną flagą FLAG_ERROR (bit 7) —
payload zawiera serializowany error_t zamiast danych sensorowych.
Data Frame
Header
| Header (12B) | |||||
| Module ID | Flags | Frame Nr | Sample Count | Timestamp First | Timestamp Last Δ |
| 1B | 1B | 1B | 1B | 5B LE | 3B LE |
| byte 0 | byte 1 | byte 2 | byte 3 | byte 4–8 | byte 9–11 |
| Pole | Wartość |
|---|---|
| Module ID | ID modułu, który zgłosił błąd |
| Flags | 0x80 (bit 7 = FLAG_ERROR) |
| Sample Count | 1 |
| Timestamp Last Δ | 0 (zdarzenie — single sample) |
Payload — error_t (9 bajtów, little-endian)
| error_t (9B) | ||||||
| Level | Source | Reason | Instance | Sensor Model | Detail Type | Detail Value |
| 1B | 1B | 1B | 1B | 1B | 1B | 3B LE |
| byte 0 | byte 1 | byte 2 | byte 3 | byte 4 | byte 5 | byte 6–8 |
| Offset | Rozmiar | Pole | Typ | Opis |
|---|---|---|---|---|
| 0 | 1B | level |
error_level_t |
Poziom błędu |
| 1 | 1B | source |
error_source_t |
Źródło błędu |
| 2 | 1B | reason |
error_reason_t |
Przyczyna |
| 3 | 1B | instance |
uint8_t |
Indeks instancji (np. numer barometru) — opcjonalne |
| 4 | 1B | sensor_model |
error_sensor_model_t |
Model sensora — opcjonalne |
| 5 | 1B | detail_type |
error_detail_type_t |
Typ informacji dodatkowej — opcjonalne |
| 6–8 | 3B | detail_value |
uint24_t LE |
Wartość szczegółowa — opcjonalne |
Interpretacja
- WARNING — pozwala na dalsze działanie (np. niski stan baterii)
- CRITICAL — wymaga reakcji (np. awaria czujnika)
Perspektywa aplikacji mobilnej
Z perspektywy aplikacji kluczowe są dwa pola: level i source. Wiadomo wtedy jak ważny jest błąd i jakie jest źródło. Pozostałe pola (instance, sensor_model, detail) służą do diagnostyki i mogą być przesłane do producenta w razie problemów.
Parsowanie (TypeScript)
interface MwtError {
level: number; // 0=None, 1=Warning, 2=Critical
source: number; // error_source_t
reason: number; // error_reason_t
instance: number;
sensorModel: number;
detailType: number;
detailValue: number;
}
function parseError(payload: DataView): MwtError {
return {
level: payload.getUint8(0),
source: payload.getUint8(1),
reason: payload.getUint8(2),
instance: payload.getUint8(3),
sensorModel: payload.getUint8(4),
detailType: payload.getUint8(5),
detailValue: payload.getUint8(6)
| (payload.getUint8(7) << 8)
| (payload.getUint8(8) << 16),
};
}
Przykłady
Ostrzeżenie — niski stan baterii
level [0]: 0x01 (WARNING)
source [1]: 0x68 (104 = Battery)
reason [2]: 0x05 (LOW_LEVEL)
instance [3]: 0x00
sensor_model [4]: 0x00
detail_type [5]: 0x03 (MILLIVOLTS)
detail_value [6-8]: 0xA9 0x0C 0x00 → 3241 mV
Interpretacja: Ostrzeżenie o niskim stanie baterii (3241 mV).
Błąd krytyczny — barometr
level [0]: 0x02 (CRITICAL)
source [1]: 0x67 (103 = Barometer)
reason [2]: 0x03 (INITIALIZATION_FAILED)
instance [3]: 0x04 (barometr nr 4)
sensor_model [4]: 0x01 (BMP581)
detail_type [5]: 0x04 (NRFX_ERROR_CODE)
detail_value [6-8]: 0x07 0xAC 0xAB → 11250695
Interpretacja: Barometr nr 4 (BMP581) nie przeszedł inicjalizacji — błąd NRFX o kodzie 11250695.
Control
Moduł Diagnostics nie obsługuje bezpośrednich komend Control.
Błędy są dostępne przez moduł System (MODULE_SYSTEM, ID = 1).
Błędy z kolejki są automatycznie flushowane po połączeniu BLE
jako ramki Data z flagą FLAG_ERROR.
Pełna tabela enumów: Kody błędów.