1.9 KiB
1.9 KiB
Архитектура
Глобальные структуры
Главная глобальная структура:
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:
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:
- Создает или открывает Zigbee сеть.
- Регистрирует endpoint
APP_ZIGBEE_ENDPOINT. - Принимает отчеты cluster
APP_ZIGBEE_CLUSTER_INPUTS. - Передает распакованный отчет в
ZigbeePort_OnSlaveReportReceived(). - Обновляет
g_app.master_node.
Режим slave
Slave:
- Присоединяется к сети master.
- Опрос кнопок проходит с debounce
APP_BUTTON_DEBOUNCE_MS. - ADC фильтруется IIR фильтром 1/8.
- Отчет отправляется каждые
APP_ZIGBEE_REPORT_PERIOD_MS.