76 lines
3.1 KiB
Markdown
76 lines
3.1 KiB
Markdown
# set-protocol
|
||
|
||
Единый переносимый протокол SET для новых устройств и SETGUI. Один и тот же
|
||
прикладной кадр используется для управления, чтения общей карты, потоковой
|
||
телеметрии и безопасной передачи прошивки через:
|
||
|
||
- RS-232 и RS-485;
|
||
- USB CDC;
|
||
- CAN с сегментацией;
|
||
- Ethernet TCP;
|
||
- Ethernet UDP, когда нужен обмен без соединения.
|
||
|
||
Протокол не привязан к HAL, ОС или микроконтроллеру. Реализация на C99 не
|
||
использует динамическую память. Все многобайтные значения little-endian.
|
||
|
||
## Что уже реализовано
|
||
|
||
| Файл | Назначение |
|
||
|---|---|
|
||
| `set_protocol.*` | кадр v2, CRC32, потоковый parser, статусы ответов |
|
||
| `set_can.*` | extended CAN ID, сегментация, flow-control и reassembly timeout |
|
||
| `set_firmware.*` | BEGIN/DATA/END/STATUS, resume, CRC блока, SHA-256 и подпись |
|
||
| `set_telemetry.*` | подписки и типизированные push-пакеты с timestamp |
|
||
| `PROTOCOL.md` | обязательный wire-контракт и привязки к носителям |
|
||
| `MIGRATION.md` | порядок перехода SETGUI и существующих прошивок с v1 |
|
||
| `PORTING.md` | подключение UART, CAN, USB и Ethernet |
|
||
| `tests/` | host-тесты и фиксированный эталонный кадр |
|
||
|
||
Файл [`PROTOCOL.md`](PROTOCOL.md) является источником истины. Числа из него
|
||
нельзя менять без выпуска следующей версии протокола.
|
||
|
||
## Минимальный stream-приёмник
|
||
|
||
```c
|
||
#include "set_protocol.h"
|
||
|
||
static setp_parser_t parser;
|
||
|
||
static void on_frame(const setp_frame_t *frame, void *user)
|
||
{
|
||
(void)user;
|
||
/* frame->payload действует только до возврата из callback. */
|
||
}
|
||
|
||
void protocol_init(void)
|
||
{
|
||
setp_parser_init(&parser);
|
||
}
|
||
|
||
void protocol_feed(const uint8_t *data, uint16_t length)
|
||
{
|
||
(void)setp_parser_feed(&parser, data, length, on_frame, NULL);
|
||
}
|
||
```
|
||
|
||
Для RS-232, RS-485, USB CDC и TCP в parser передаются любые принятые chunks.
|
||
Для UDP один UDP payload должен содержать ровно один полный SETP-кадр.
|
||
|
||
## Сборка
|
||
|
||
```text
|
||
cmake -B build
|
||
cmake --build build
|
||
ctest --test-dir build
|
||
```
|
||
|
||
Либо добавьте три файла из `src/` и каталог `include/` непосредственно в
|
||
проект прошивки.
|
||
|
||
## Версии
|
||
|
||
- GUI protocol v1 остаётся только переходным форматом старых устройств.
|
||
- Все новые устройства используют SET protocol v2 (`SETP_VERSION = 2`).
|
||
- v1 и v2 имеют одинаковый SOF `A5 5A`, поэтому номер версии проверяется до
|
||
разбора остальных полей.
|