备注
AI Translation Notice
This document was automatically translated by Qwen/Qwen3-8B
model, for reference only.
Source document: kernel/libs/lib_ui/scm.md
Translation time: 2025-05-19 01:41:31
Translation model:
Qwen/Qwen3-8B
Please report issues via Community Channel
Screen Manager (SCM)
备注
Author: Zhou Hanjie 2625553453@qq.com
The Screen Manager is used to control all UI frameworks. All frameworks must be registered with the Screen Manager before they can be used. Then, SCM controls which UI framework is currently in use.
traits
ScmUiFramework
Each UI framework that is to be registered with SCM must implement the methods defined in this trait, as follows:
pub trait ScmUiFramework: Sync + Send + Debug {
// 安装ui框架的回调函数
fn install(&self) -> Result<i32, SystemError> {
return Err(SystemError::ENOSYS);
}
// 卸载ui框架的回调函数
fn uninstall(&self) -> Result<i32, SystemError> {
return Err(SystemError::ENOSYS);
}
// 启用ui框架的回调函数
fn enable(&self) -> Result<i32, SystemError> {
return Err(SystemError::ENOSYS);
}
// 禁用ui框架的回调函数
fn disable(&self) -> Result<i32, SystemError> {
return Err(SystemError::ENOSYS);
}
// 改变ui框架的帧缓冲区的回调函数
fn change(&self, _buf: ScmBufferInfo) -> Result<i32, SystemError> {
return Err(SystemError::ENOSYS);
}
/// @brief 获取ScmUiFramework的元数据
/// @return 成功:Ok(ScmUiFramework的元数据)
/// 失败:Err(错误码)
fn metadata(&self) -> Result<ScmUiFrameworkMetadata, SystemError> {
// 若文件系统没有实现此方法,则返回“不支持”
return Err(SystemError::ENOSYS);
}
}
Main APIs
scm_init() - Initialize the screen management module
Prototype
pub extern "C" fn scm_init()
Description
scm_init() is mainly used to initialize some global variables used by SCM, such as the flag indicating whether double buffering is used, and some global variables used by textui when it is not initialized.
scm_reinit() - Reinitialize the screen management module after the memory management unit is initialized
Prototype
pub extern "C" fn scm_reinit() -> i32
Description
scm_reinit() is used to reprocess the frame buffer issues after the memory management unit has been initialized.
scm_enable_double_buffer() - Enable double buffering
Prototype
pub extern "C" fn scm_enable_double_buffer() -> i32
Description
scm_enable_double_buffer() is used to enable double buffering for outputting information to the window. After enabling, the information output to the window is temporarily stored in a buffer, and then this buffer’s content is output to the window’s frame buffer at regular intervals, rendering it to the window.
scm_framework_enable() - Enable a specific UI framework and render its frame buffer to the screen
Prototype
pub fn scm_framework_enable(framework: Arc<dyn ScmUiFramework>) -> Result<i32, SystemError>
Description
scm_framework_enable is used to enable a specific UI framework and render its frame buffer to the screen.
scm_register() - Register a UI framework with the screen manager
Prototype
pub fn scm_register(framework: Arc<dyn ScmUiFramework>) -> Result<i32, SystemError>
Description
scm_register is used to register a UI framework with SCM. It mainly calls the callback functions of the UI framework to install and activate it.