Files
QD4C-firmware/app/page/cw_page.c

121 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "cw_page.h"
PAGE_LIST pagelist[page_max];
static uint8 page_busy = 0;
static int8 now_page = page_menu;
static int8 new_page = page_menu;
/**
* @brief 注册一个基本页面,包含一个初始化函数,循环函数,退出函数,事件函数
* @param pageID: 页面编号
* @param pageText: 页面标题的指针
* @param setupCallback: 初始化函数回调
* @param loopCallback: 循环函数回调
* @param exitCallback: 退出函数回调
* @param eventCallback: 事件函数回调
* @retval 无
*/
void Page_Register(uint8 pageID, char *pageText,
CallbackFunction_t setupCallback, CallbackFunction_t loopCallback,
CallbackFunction_t exitCallback, EventFunction_t eventCallback) {
pagelist[pageID].Text = pageText;
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 页面忙返回1 空闲返回0
*/
uint8 Page_GetStatus(void) {
if (page_busy)
return 1;
else
return 0;
}
/**
* @brief 页面运行函数
*
*/
void Page_Run(void) {
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);
// PAGE_REG(page_argv);
// PAGE_REG(page_sys);
// PAGE_REG(page_run);
Page_Shift(page_menu);
pagelist[now_page].SetupCallback(); //先构建一遍
}