息屏显示(AOD)

本文说明 AOD 功能的配置、页面组织和应用接入方式。

1. 参考代码

文件

作用

solution\framework\gui_fwk\aod_fwk\aod_fwk.c

管理 AOD 页面生命周期和事件分发

solution\framework\gui_fwk\reg_fwk\aod_reg.c

注册 AOD 页面入口和资源信息

2. 应用例程

场景

文件

调用接口

AOD 设置页面

aod_setting_gui.c

app_get_strid()、AOD 设置页事件回调

AOD 设置业务处理

aod_setting_proc.c

app_is_built_in()

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_REFRESHAOD_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 注册流程

  1. 在外置 AOD 应用源码首行定义 DYN_AOD,声明此 AOD 的资源通过外置方式获取。DYN_AOD 是应用源码宏,不是 menuconfig 配置项;它不能替代 APP_DLMODULE_AOD_USED

    #define DYN_AOD
  1. 注册宏定义 外置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