работает слейв и мастер

This commit is contained in:
2026-05-28 03:20:13 +03:00
commit cbb571f124
191 changed files with 55316 additions and 0 deletions

58
docs/ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,58 @@
# Архитектура
## Глобальные структуры
Главная глобальная структура:
```c
extern AppContext_t g_app;
```
Она содержит:
- `role` - текущая роль `APP_ROLE_MASTER` или `APP_ROLE_SLAVE`.
- `zigbee_state` - состояние Zigbee подключения.
- `slave_inputs.buttons[3]` - три кнопки.
- `slave_inputs.analog` - один аналоговый канал.
- `zigbee` - PAN ID, канал, endpoint и cluster id.
- `uptime_ms`, `last_report_ms` - таймеры приложения.
## Payload slave
Slave должен отправлять структуру `AppSlaveInputs_t`:
```c
typedef struct
{
AppButton_t buttons[3];
AppAnalogChannel_t analog;
uint32_t sequence;
} AppSlaveInputs_t;
```
Для стабильного Zigbee протокола проект формирует `AppSlaveReport_t` через `App_MakeSlaveReport()`.
В Zigbee лучше передавать поля в фиксированном порядке, а не сырую C-структуру целиком:
- `sequence`, 4 байта
- `buttons`, битовая маска 3 младших бит
- `analog_raw`, 2 байта
- `analog_percent`, 1 байт
## Режим master
Master:
1. Создает или открывает Zigbee сеть.
2. Регистрирует endpoint `APP_ZIGBEE_ENDPOINT`.
3. Принимает отчеты cluster `APP_ZIGBEE_CLUSTER_INPUTS`.
4. Передает распакованный отчет в `ZigbeePort_OnSlaveReportReceived()`.
5. Обновляет `g_app.master_node`.
## Режим slave
Slave:
1. Присоединяется к сети master.
2. Опрос кнопок проходит с debounce `APP_BUTTON_DEBOUNCE_MS`.
3. ADC фильтруется IIR фильтром 1/8.
4. Отчет отправляется каждые `APP_ZIGBEE_REPORT_PERIOD_MS`.