/** * @file alarm_manager.h * @brief 报警管理器 - 双模式 (本地判定 + 服务端指令) * * 本地模式: 离线也能用, 跌倒/水浸/心率异常/呼吸异常 本地判定触发 * 服务端模式: 收到 cmd/{gateid}/alarm, alarm/restore 执行联动 */ #ifndef ALARM_MANAGER_H #define ALARM_MANAGER_H #include #include "config.h" class AlarmManager { public: // 告警类型 (本地 + 服务端共用) enum AlarmType { ALARM_NONE = 0, ALARM_FALL, // 跌倒 (本地 + 服务端) ALARM_WATER_LEAK, // 水浸 (本地 + 服务端) ALARM_HEART_ABNORMAL, // 心率异常 (本地) ALARM_BREATH_ABNORMAL, // 呼吸异常 (本地) ALARM_SERVER, // 服务端下发 (通用) }; AlarmManager(); ~AlarmManager(); bool begin(); void loop(); // ============================================================ // 本地报警接口 (离线可用) // ============================================================ /** 触发本地报警 */ void triggerLocal(AlarmType type); /** 清除本地报警 */ void clearLocal(AlarmType type); /** 清除所有本地报警 */ void clearAllLocal(); // ============================================================ // 服务端指令接口 (协议规范 §5.1, §5.2) // ============================================================ /** 执行服务端告警指令 */ void executeAlarm(const AlarmCommand& cmd); /** 执行服务端恢复指令 */ void executeRestore(const AlarmCommand& cmd); /** 蜂鸣器测试 */ void buzzerTest(uint32_t durationSec); // ============================================================ // 状态查询 (上报用) // ============================================================ bool isBuzzerOn() const { return _buzzerOn; } bool hasActiveAlarm() const { return _activeCount > 0; } const char* getActiveAlarmType() const; private: void _setBuzzer(bool on); void _setLED(bool on); void _updateBuzzer(); void _updateLED(); // 蜂鸣器/LED 状态 bool _buzzerOn; bool _ledOn; uint32_t _buzzerOffTime; // 定时关闭时刻 (0=手动关) uint32_t _buzzerToggleTime; // 间歇切换时刻 bool _buzzerBeepState; // 间歇状态 (响/停) uint8_t _beepCount; // 当前周期哔了几声 // 活动报警列表 (最多 4 个同时) AlarmType _activeAlarms[4]; uint8_t _activeCount; // LED 闪烁 uint32_t _lastLEDToggle; }; #endif // ALARM_MANAGER_H