息屏显示(AOD)¶
本文说明 AOD 功能的配置、页面组织和应用接入方式。
1. 参考代码¶
文件 |
作用 |
|---|---|
|
管理 AOD 页面生命周期和事件分发 |
|
注册 AOD 页面入口和资源信息 |
2. 应用例程¶
场景 |
文件 |
调用接口 |
|---|---|---|
AOD 设置页面 |
|
|
AOD 设置业务处理 |
|
|
3. 简介¶
AOD(Always On Display,息屏显示)是智能手表的核心功能之一,允许手表在低功耗状态下持续显示关键信息。作为挂载在平铺应用上的子应用,AOD界面由 wf_fwk 框架进行统一管理和调度,为用户提供便捷的时间查看体验。支持静态或动态样式,可通过内置或外置方式更换。
AOD 功能通过
APP_AOD_USED使能,准确配置路径为:menuconfig (Top) → Gui Framework Config → AOD configuration → Enable application/aod (alway on display) (APP_AOD_USED);该项无直接depends on,默认开启。仅在APP_AOD_USED启用后,才显示AOD_DISABLE_AUTO_REFRESH与AOD_DISABLE_LCD_IDLE_MODE等 AOD 子项。支持多种开发方式:可选择 C 语言以及 SiFli GUI Builder 来实现AOD开发。
启用
APP_AOD_USED后,Solution 框架将提供自动注册以及调度机制。APP_AOD_USED是 Kconfig 配置符号,由构建系统生成对应配置宏,不应在源码或配置头中手工定义:内置AOD在编译阶段自动关联至专属代码段,系统启动后框架可直接识别并加载
外置AOD则通过框架的动态管理能力实现自动适配。
外置AOD支持完整的装入和卸载流程,从资源分配到状态同步均由框架封装处理,用户无需关心底层的注册逻辑、生命周期调度及资源清理细节,能够很容易地进行AOD的开发、扩展与更新。
4. C注册内置AOD¶
4.1 注册宏定义¶
使用AOD_REGISTER宏来注册内置AOD,语法如下:
AOD_REGISTER(priority, id, key_str, thumbnail)
参数说明:
priority: AOD优先级,AOD在选择界面中按优先级从高(数值小)到低排列。内置AOD的顺序可动态调整,修改管理链表(通过aod_list_get()获取)中的优先级即可。id: AOD名字,为字符串类型,框架调度该应用时使用,需要保证唯一性。key_str: AOD显示标题,为多语言字符串,仅作显示用。thumbnail: AOD缩略图,在AOD编辑等场景时使用。
4.2 示例¶
以下是创建一个优先级为 1 的AOD的示例代码:
// 定义AOD相关结构体
typedef struct
{
lv_obj_t *bg_cont;
lv_obj_t *hour_hand;
lv_obj_t *min_hand;
} aod_analog_t;
static aod_analog_t *p_aod_analog = NULL;
static void aod_analog_refresh_time_hand(void)
{
//在此刷新指针的角度
}
// 初始化函数
static rt_int32_t on_init(void *param)
{
p_aod_analog = (aod_analog_t *)rt_malloc(sizeof(aod_analog_t));
RT_ASSERT(p_aod_analog);
rt_memset(p_aod_analog, 0, sizeof(aod_analog_t));
// 初始化AOD相关资源等操作
...
}
// 暂停函数
static rt_int32_t on_pause(void *param)
{
// 暂停相关操作
...
}
// 恢复函数
static rt_int32_t on_resume(void *param)
{
// 恢复相关操作
...
aod_analog_refresh_time_hand(); //调用指针刷新函数
}
// 反初始化函数
static rt_int32_t on_deinit(void *param)
{
// 释放资源等操作
...
if (p_aod_analog)
{
rt_free(p_aod_analog);
p_aod_analog = NULL;
}
}
// 注册内置AOD
AOD_REGISTER(1, "analog", app_get_strid(key_aod_analog, "Aod_analog"), img_aod_analog_thumbnail);
具体例程可以参见solution\examples\_dynamic_app\c\aod\analog。
5. C注册外置AOD¶
C 外置 AOD 通过APP_DLMODULE_AOD_USED使能,路径为:menuconfig (Top) → Gui Framework Config → Dynamic_app config → Enable dynamic aod (APP_DLMODULE_AOD_USED)。该项始终依赖 RT_USING_DFS,并且还要求 RT_USING_MODULE 或 PC Simulator;因此 PC Simulator 工程也必须启用文件系统。该项默认值会在 APP_AOD_USED 启用时设为开启。
5.1 注册流程¶
在外置 AOD 应用源码首行定义
DYN_AOD,声明此 AOD 的资源通过外置方式获取。DYN_AOD是应用源码宏,不是menuconfig配置项;它不能替代APP_DLMODULE_AOD_USED:
#define DYN_AOD
注册宏定义 外置AOD的注册宏和内置AOD是一样的。
AOD_REGISTER(priority, id, key_str, thumbnail)
6. SiFli GUI Builder外置AOD¶
SiFli GUI Builder 工具支持可视化开发外置AOD,提升开发效率。需要注意,工具中的AOD属于表盘,需要创建表盘才能添加AOD样式。
SiFli GUI Builder 工具 AOD 通过
APP_TOOL_SUPPORT使能,路径为:menuconfig (Top) → App_Tool Config → app tool support (APP_TOOL_SUPPORT)。App_Tool Config是 Solution 框架直接加入根菜单的入口,仅在 HCPU 或 PC Simulator 工程中显示;APP_TOOL_SUPPORT直接依赖LV_USING_FREETYPE_ENGINE,两项默认均开启。用户可通过SiFli GUI Builder 工具实现SiFli GUI Builder工具实现外置AOD了解详细操作步骤。
具体例程可以参见solution\examples\_dynamic_app\tool\tool_wf\pointer。