# mpage **Repository Path**: mculover666/mpage ## Basic Information - **Project Name**: mpage - **Description**: No description available - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-09 - **Last Updated**: 2024-01-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mpage 嵌入式多页显示界面框架 # mpage ui msg 设计 ui msg 用来在界面间传递消息: ```c typedef struct mpage_ui_msg_st { unsigned int mpage_id_src; unsigned int mpage_id_dst; unsigned int msg_type; unsigned int msg_len; unsigned char msg_ctx[MPAGE_UI_MSG_LEN_MAX]; } mpage_ui_msg_t; ``` - mpage_id_src:发出该消息的页面 id(可选) - mpage_id_dst:要接收消息的页面 id(必填) - msg_type:可用于指明该消息类型,用于ui界面判断(可选) - msg_len:消息内容长度,单位Byte(可选) - msg_ctx:消息内容(可选),最大长度可由 MPAGE_UI_MSG_LEN_MAX 指定,默认256. # 如何添加页面 1. 在枚举类型中添加page id(WELCOME只是默认页,可删除),mpage通过指定 page id 来跳转到对应的页。 ```c enum mpage_id { PAGE_WELCOME, // ... }; ``` 2. 在`mpage_ui.c`中添加该页对应的 ui 逻辑,添加后在`mpage_ui.h`中声明: ```c void welcom_ui(mpage_ui_msg_t *msg) { } ``` 前端界面函数被调用时会传入ui_msg,用户可通过ui_msg拿到需要显示的信息。 3. 在`mpage_logic.c`中添加该页对应的后台逻辑。 ```c static int welcom_logic(mpage_ui_msg_t *msg) { return 0; } ``` 后端逻辑函数中,用户可利用 ui_msg 全局变量封装消息,使用下面的 API 发送 ui_msg 并跳转到对应界面: ```c int mpage_ui_msg_post(mpage_ui_msg_t *msg); ``` 4. 前后端函数各自完成后,将{<页面id>,<页面ui函数>, <页面后台逻辑函数>} 注册到 mpage 中。 ```c const mpage_t mpage[] = { {PAGE_WELCOME, welcom_ui, welcom_logic}, }; ``` # 如何启动 mpage 启动 API 如下: ```c int mpage_start(void); ``` mpage调度器在 while (1) 循环中执行,所以**该函数启动后不再返回**。 (1)裸机中,推荐在 while (1) 之前调用,由 mpage 接管系统中原有的死循环。 (2)RTOS中,推荐新建一个任务,任务中执行 mpage_start。