息屏显示(AOD)

1. 简介

AOD(Always On Display,息屏显示)是智能手表的核心功能之一,允许手表在低功耗状态下持续显示关键信息。作为挂载在平铺应用上的子应用,AOD界面由 wf_fwk 框架进行统一管理和调度,为用户提供便捷的时间查看体验。支持静态或动态样式,可通过内置或外置方式更换。

  • AOD功能通过 APP_AOD_USED 使能,配置路径为:menuconfig (Top) Development Config Solution Component Config

  • 支持多种开发方式:可选择 C 语言以及 SiFli GUI Builder 来实现AOD开发。

  • 使能AOD相关的宏之后,Solution 框架将提供自动注册以及调度机制:

    • 内置AOD在编译阶段自动关联至专属代码段,系统启动后框架可直接识别并加载

    • 外置AOD则通过框架的动态管理能力实现自动适配。

    • 外置AOD支持完整的装入和卸载流程,从资源分配到状态同步均由框架封装处理,用户无需关心底层的注册逻辑、生命周期调度及资源清理细节,能够很容易地进行AOD的开发、扩展与更新。

2. C注册内置AOD

2.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编辑等场景时使用。

2.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

3. C注册外置AOD

C外置AOD通过 APP_DLMODULE_AOD_USED使能(menuconfig (Top) Development Config Dynamic_app config)。

3.1 注册流程

  1. 代码第一行定义DYN_AOD宏,申明此AOD是外置AOD,资源通过外置方式获取:

    #define DYN_AOD
  1. 注册宏定义 外置AOD的注册宏和内置AOD是一样的。

WF_REGISTER(priority, id, name, thumb_img, ptr_size)

4. SiFli GUI Builder外置AOD

SiFli GUI Builder 工具支持可视化开发外置AOD,提升开发效率。需要注意,工具中的AOD属于表盘,需要创建表盘才能添加AOD样式。

  • SiFli GUI Builder 工具AOD通过 APP_TOOL_SUPPORT 使能,配置路径为:menuconfig (Top) App_Tool Config

  • 用户可通过SiFli GUI Builder 工具实现SiFli GUI Builder工具实现外置AOD了解详细操作步骤。

具体例程可以参见solution\examples\_dynamic_app\tool\tool_wf\pointer