1 #pragma once 2 #include <common/sys/types.h> 3 #include <common/glib.h> 4 5 // 帧缓冲区标志位 6 #define SCM_BF_FB (1 << 0) // 当前buffer是设备显存中的帧缓冲区 7 #define SCM_BF_DB (1 << 1) // 当前buffer是双缓冲 8 #define SCM_BF_TEXT (1 << 2) // 使用文本模式 9 #define SCM_BF_PIXEL (1 << 3) // 使用图像模式 10 11 // ui框架类型 12 #define SCM_FRAMWORK_TYPE_TEXT (uint8_t)0 13 #define SCM_FRAMWORK_TYPE_GUI (uint8_t)1 14 15 /** 16 * @brief 帧缓冲区信息结构体 17 * 18 */ 19 struct scm_buffer_info_t 20 { 21 uint32_t width; // 帧缓冲区宽度(pixel或columns) 22 uint32_t height; // 帧缓冲区高度(pixel或lines) 23 uint32_t size; // 帧缓冲区大小(bytes) 24 uint32_t bit_depth; // 像素点位深度 25 26 uint64_t vaddr; // 帧缓冲区的地址 27 uint64_t flags; // 帧缓冲区标志位 28 }; 29 30 /** 31 * @brief 上层ui框架应当实现的接口 32 * 33 */ 34 struct scm_ui_framework_operations_t 35 { 36 int (*install)(struct scm_buffer_info_t *buf); // 安装ui框架的回调函数 37 int (*uninstall)(void *args); // 卸载ui框架的回调函数 38 int (*enable)(void *args); // 启用ui框架的回调函数 39 int (*disable)(void *args); // 禁用ui框架的回调函数 40 int (*change)(struct scm_buffer_info_t *buf); // 改变ui框架的帧缓冲区的回调函数 41 }; 42 struct scm_ui_framework_t 43 { 44 struct List list; 45 uint16_t id; 46 char name[16]; 47 uint8_t type; 48 struct scm_ui_framework_operations_t *ui_ops; 49 struct scm_buffer_info_t *buf; 50 }; 51 52 /** 53 * @brief 初始化屏幕管理模块 54 * 55 */ 56 void scm_init(); 57 58 /** 59 * @brief 当内存管理单元被初始化之后,重新处理帧缓冲区问题 60 * 61 */ 62 void scm_reinit(); 63 64 /** 65 * @brief 向屏幕管理器注册UI框架(动态获取框架对象结构体) 66 * 67 * @param name 框架名 68 * @param type 类型 69 * @param ops 框架操作方法 70 * @return int 71 */ 72 int scm_register_alloc(const char *name, const uint8_t type, struct scm_ui_framework_operations_t *ops); 73 74 /** 75 * @brief 向屏幕管理器注册UI框架(静态设置的框架对象) 76 * 77 * @param ui 框架结构体指针 78 * @return int 错误码 79 */ 80 int scm_register(struct scm_ui_framework_t *ui); 81 82 /** 83 * @brief 向屏幕管理器卸载UI框架 84 * 85 * @param ui ui框架结构体 86 * @return int 87 */ 88 int scm_unregister(struct scm_ui_framework_t *ui); 89 90 /** 91 * @brief 向屏幕管理器卸载动态创建的UI框架 92 * 93 * @param ui ui框架结构体 94 * @return int 95 */ 96 int scm_unregister_alloc(struct scm_ui_framework_t *ui); 97 98 /** 99 * @brief 允许动态申请内存 100 * 101 * @return int 102 */ 103 int scm_enable_alloc(); 104 105 /** 106 * @brief 允许双缓冲区 107 * 108 * @return int 109 */ 110 int scm_enable_double_buffer(); 111 112 /** 113 * @brief 启用某个ui框架,将它的帧缓冲区渲染到屏幕上 114 * 115 * @param ui 要启动的ui框架 116 * @return int 返回码 117 */ 118 int scm_framework_enable(struct scm_ui_framework_t *ui);