72 lines
2.4 KiB
C
72 lines
2.4 KiB
C
#ifndef __EVENT_H__
|
||
#define __EVENT_H__
|
||
|
||
#include "config.h"
|
||
|
||
/* ====== 事件环形缓冲区 (队列) 接口 ====== */
|
||
|
||
/**
|
||
* @brief 初始化事件队列
|
||
* @details 将队列的头指针、尾指针以及当前事件计数器全部归零,清空缓冲区。
|
||
*/
|
||
void EventQueue_Init(void);
|
||
|
||
/**
|
||
* @brief 将一个普通事件压入队列的末尾 (入队)
|
||
* @param evt 要入队的系统事件实例
|
||
* @return bit 1-入队成功,0-队列已满 (入队失败,丢弃事件)
|
||
* @note 此函数操作时会自动禁用全局中断 (EA = 0),操作完成后恢复以防止重入冲突。
|
||
*/
|
||
bit EventQueue_Push(SystemEvent evt);
|
||
|
||
/**
|
||
* @brief 将一个紧急/高优先级事件强行插入到队列的首部 (插队)
|
||
* @param evt 要优先处理的系统事件
|
||
* @return bit 1-插队成功,0-队列已满 (插队失败)
|
||
* @note 用于处理如 SOS 紧急求救和无线防区报警等需要立即响应的事件。操作受全局中断屏蔽保护。
|
||
*/
|
||
bit EventQueue_InsertFront(SystemEvent evt);
|
||
|
||
/**
|
||
* @brief 从队列首部弹出一个事件 (出队)
|
||
* @return SystemEvent 被取出的系统事件。如果队列为空,将返回一个 key_event 为 KEY_EVENT_NONE 的空事件。
|
||
* @note 操作时受全局中断屏蔽保护。
|
||
*/
|
||
SystemEvent EventQueue_Pop(void);
|
||
|
||
/**
|
||
* @brief 检测事件队列当前是否为空
|
||
* @return bit 1-队列为空,0-队列中仍有事件未处理
|
||
*/
|
||
bit EventQueue_IsEmpty(void);
|
||
|
||
/**
|
||
* @brief 检测事件队列当前是否已满 (即达到最大深度 8)
|
||
* @return bit 1-队列已满,0-队列仍有剩余空闲槽位
|
||
*/
|
||
bit EventQueue_IsFull(void);
|
||
|
||
/**
|
||
* @brief 获取事件队列中当前已缓冲的事件总个数
|
||
* @return u8 当前事件的缓存个数
|
||
*/
|
||
u8 EventQueue_GetCount(void);
|
||
|
||
|
||
/* ====== 事件分发环与定时器驱动初始化 ====== */
|
||
|
||
/**
|
||
* @brief 事件分发轮询主处理程序
|
||
* @details 负责从事件队列中弹出当前最优先的事件,解析其内容,处理全局重置逻辑(如重置闲置休眠计时器),
|
||
* 并根据事件的类型与当前活跃的前台 APP 状态将事件分发到具体的应用程序中去处理。
|
||
*/
|
||
void Event_Dispatcher_Loop(void);
|
||
|
||
/**
|
||
* @brief 初始化 Timer1 定时器,生成系统基准时钟 (1ms 中断)
|
||
* @details 配置定时器 1 为 16 位自动重装载模式,设定中断周期为 1.0 毫秒,开启 Timer1 中断并启动计数。
|
||
*/
|
||
void Timer1_Init(void);
|
||
|
||
#endif // __EVENT_H__
|