Files
WB55cgu/docs/ARCHITECTURE.md

1.9 KiB
Raw Permalink Blame History

Архитектура

Глобальные структуры

Главная глобальная структура:

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:

  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.