Files
QDAC-firmware/app/page/page.c

143 lines
3.1 KiB
C
Raw Normal View History

#include "page.h"
2023-12-19 16:55:05 +08:00
#include "by_button.h"
2023-12-19 16:55:05 +08:00
PAGE_LIST pagelist[page_max];
static uint8_t page_busy = 0;
2024-03-02 16:00:05 +08:00
static int8_t new_page = page_menu;
static int8_t now_page = page_menu;
2023-12-19 16:55:05 +08:00
2024-03-02 16:00:05 +08:00
int8_t Get_new_page(void)
{
return new_page;
}
2023-12-19 16:55:05 +08:00
/**
* @brief 退
* @param pageID:
* @param pageText:
* @param setupCallback:
* @param loopCallback:
* @param exitCallback: 退
* @param eventCallback:
* @retval
*/
2024-02-24 15:06:30 +08:00
void Page_Register(uint8_t pageID,
CallbackFunction_t setupCallback, CallbackFunction_t loopCallback,
CallbackFunction_t exitCallback, EventFunction_t eventCallback)
{
2024-02-24 15:06:30 +08:00
2023-12-19 16:55:05 +08:00
pagelist[pageID].SetupCallback = setupCallback;
pagelist[pageID].LoopCallback = loopCallback;
pagelist[pageID].ExitCallback = exitCallback;
2023-12-19 16:55:05 +08:00
pagelist[pageID].EventCallback = eventCallback;
}
/**
* @brief
* @param event:
* @retval
*/
void Page_EventTransmit(unsigned char event)
{
2023-12-19 16:55:05 +08:00
/*将事件传递到当前页面*/
if (pagelist[now_page].EventCallback != 0)
pagelist[now_page].EventCallback(event);
}
/**
* @brief
* @param pageID
* @retval 1 0
*/
void Page_Shift(unsigned char pageID)
{
2023-12-19 16:55:05 +08:00
if (page_busy == 0) {
new_page = pageID;
}
}
/**
* @brief
*
*/
void Page_CloseCurrentPage()
{
2023-12-19 16:55:05 +08:00
pagelist[now_page].ExitCallback();
}
/**
* @brief
*
*/
void Page_OpenCurrentPage()
{
2023-12-19 16:55:05 +08:00
pagelist[now_page].SetupCallback();
}
/**
* @brief
*
* @return uint8_t 1 0
2023-12-19 16:55:05 +08:00
*/
uint8_t Page_GetStatus(void)
{
2023-12-19 16:55:05 +08:00
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);
}
2023-12-19 16:55:05 +08:00
if (now_page != new_page) {
if (new_page >= page_max && new_page < page_menu) {
new_page = page_menu;
}
// 执行当前页面退出回调函数
2023-12-19 16:55:05 +08:00
if ((pagelist[now_page].ExitCallback != 0)) {
pagelist[now_page].ExitCallback();
}
// 执行新页面构造回调函数
2023-12-19 16:55:05 +08:00
if (pagelist[new_page].SetupCallback != 0) {
pagelist[new_page].SetupCallback();
}
now_page = new_page;
}
if (page_busy == 0) {
// 执行循环函数
2023-12-19 16:55:05 +08:00
pagelist[now_page].LoopCallback();
}
}
/**
* @brief ATTENTION
2023-12-19 16:55:05 +08:00
*
*/
void Page_Init(void)
{
2024-02-24 15:06:30 +08:00
PAGE_REG(page_menu, "main");
PAGE_REG(page_rtcam, "rtcam");
PAGE_REG(page_param1, "Param1");
PAGE_REG(page_param2, "param2");
2024-03-02 16:00:05 +08:00
PAGE_REG(page_dparam, "dparam");
2023-12-19 16:55:05 +08:00
// PAGE_REG(page_argv);
// PAGE_REG(page_sys);
// PAGE_REG(page_run);
Page_Shift(page_menu);
pagelist[now_page].SetupCallback(); // 先构建一遍
2023-12-19 16:55:05 +08:00
}