Files
WB55cgu/docs/ARCHITECTURE.md

59 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Архитектура
## Глобальные структуры
Главная глобальная структура:
```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`.