#include "page.h" #include "by_button.h" PAGE_LIST pagelist[page_max]; static uint8_t page_busy = 0; static int8_t new_page = page_menu; static int8_t now_page = page_menu; int8_t Get_new_page(void) { return new_page; } /** * @brief 注册一个基本页面,包含一个初始化函数,循环函数,退出函数,事件函数 * @param pageID: 页面编号 * @param pageText: 页面标题的指针 * @param setupCallback: 初始化函数回调 * @param loopCallback: 循环函数回调 * @param exitCallback: 退出函数回调 * @param eventCallback: 事件函数回调 * @retval 无 */ void Page_Register(uint8_t pageID, CallbackFunction_t setupCallback, CallbackFunction_t loopCallback, CallbackFunction_t exitCallback, EventFunction_t eventCallback) { pagelist[pageID].SetupCallback = setupCallback; pagelist[pageID].LoopCallback = loopCallback; pagelist[pageID].ExitCallback = exitCallback; pagelist[pageID].EventCallback = eventCallback; } /** * @brief 页面事件传递 * @param event: 事件编号 * @retval 无 */ void Page_EventTransmit(unsigned char event) { /*将事件传递到当前页面*/ if (pagelist[now_page].EventCallback != 0) pagelist[now_page].EventCallback(event); } /** * @brief 页面切换 * @param pageID:页面号 * @retval 1:成功 0:失败 */ void Page_Shift(unsigned char pageID) { if (page_busy == 0) { new_page = pageID; } } /** * @brief 关闭当前页面 * */ void Page_CloseCurrentPage() { pagelist[now_page].ExitCallback(); } /** * @brief 打开当前页面 * */ void Page_OpenCurrentPage() { pagelist[now_page].SetupCallback(); } /** * @brief 获取页面状态 * * @return uint8_t 页面忙返回 1 空闲返回 0 */ uint8_t Page_GetStatus(void) { if (page_busy) return 1; else return 0; } /** * @brief 页面运行函数 * */ void Page_Run(void) { uint8_t temp_status = by_button_get_status(); // 轮询旋钮状态 if (temp_status) { pagelist[now_page].EventCallback(temp_status); } if (now_page != new_page) { if (new_page >= page_max && new_page < page_menu) { new_page = page_menu; } // 执行当前页面退出回调函数 if ((pagelist[now_page].ExitCallback != 0)) { pagelist[now_page].ExitCallback(); } // 执行新页面构造回调函数 if (pagelist[new_page].SetupCallback != 0) { pagelist[new_page].SetupCallback(); } now_page = new_page; } if (page_busy == 0) { // 执行循环函数 pagelist[now_page].LoopCallback(); } } /** * @brief 页面初始化(注册,构建)ATTENTION 在此处添加新加入的页面 * */ void Page_Init(void) { PAGE_REG(page_menu, "main"); PAGE_REG(page_rtcam, "rtcam"); PAGE_REG(page_param1, "aim_param"); PAGE_REG(page_param2, "exp"); PAGE_REG(page_dparam, "dparam"); PAGE_REG(page_reset, "reset"); // PAGE_REG(page_argv); // PAGE_REG(page_sys); // PAGE_REG(page_run); Page_Shift(page_menu); pagelist[now_page].SetupCallback(); // 先构建一遍 }