feat(setprotocol): define system payload schemas

This commit is contained in:
2026-09-01 11:47:08 +03:00
parent 19becd7b8c
commit 9b636a9f40
5 changed files with 279 additions and 3 deletions

View File

@@ -93,7 +93,59 @@ broadcast; на broadcast-запрос отвечать нельзя, если
Неизвестный тип не является ошибкой кадрирования. Устройство отвечает
`UNSUPPORTED`, если запрос был адресован ему и требовал ответа.
## 5. Телеметрия реального времени
## 5. Системные payload schema v1
Все описанные ниже поля входят в body ответа **после** обязательного
`status u16`. Строки передаются в UTF-8 без завершающего нуля. Версия схемы
отделена от версии кадра, чтобы поля можно было расширять независимо.
### DEVICE_INFO
```text
schema_version u16 = 1
device_class u16
hardware_version u32
firmware_version u32
dictionary_version u32
serial_number u64
model_length u8 (0..63)
model u8[model_length], UTF-8
```
Числовые версии являются значениями изделия; рекомендуемая упаковка
`major.minor.patch.build` — по одному байту от старшего к младшему.
`device_class` назначается в реестре изделий SET, а `dictionary_version`
меняется при несовместимом изменении адресов или типов общей карты.
### CAPABILITIES
```text
schema_version u16 = 1
max_payload u16 (1..512 для базового профиля)
interface_mask u32 (бит с номером setp_iface_t)
feature_flags u32
max_read_items u16
max_write_items u16
max_subscriptions u16
max_publish_items u16
```
Стабильные `feature_flags`: `READ=bit0`, `WRITE=bit1`, `CATALOG=bit2`,
`SUBSCRIBE=bit3`, `LOG_READ=bit4`, `FIRMWARE=bit5`, `DIAGNOSTICS=bit6`.
Нулевой лимит означает, что соответствующая функция не поддерживается.
Эталонные body без status:
```text
DEVICE_INFO (SET-01):
01 00 34 12 02 00 01 00 04 00 03 00 44 33 22 11
EF CD AB 89 67 45 23 01 06 53 45 54 2D 30 31
CAPABILITIES (RS232 + CAN, READ + CATALOG + SUBSCRIBE):
01 00 00 02 0A 00 00 00 0D 00 00 00 40 00 20 00 04 00 18 00
```
## 6. Телеметрия реального времени
### SUBSCRIBE
@@ -131,7 +183,7 @@ repeat item_count times:
Телеметрия имеет меньший приоритет, чем ответы и прошивка. При переполнении
очереди разрешено отбросить старый `PUBLISH`, но нельзя частично передать кадр.
## 6. Прошивка
## 7. Прошивка
Типы:
@@ -175,7 +227,7 @@ offset u32 | data_length u16 | flags u16 | data_crc32 u32 | data[]
CRC32 защищает линию, SHA-256 — целостность образа, подпись — происхождение.
Один CRC не является защитой от подмены прошивки.
## 7. Привязки к физическим интерфейсам
## 8. Привязки к физическим интерфейсам
### RS-232, RS-485, USB CDC