表盘对接
一、说明
表盘的构成分为三个部分:表盘主体,表盘普通样式,AOD样式。
由于部分工程不存在表盘框架,这种情况下表盘文件不会被使用。
二、表盘主体
相关文件:
《app_tool_wf.c》
《app_tool_wf.h》
1.表盘的注册和删除
1.1 表盘注册
void sfat_wf_register(void *data)
{
sfat_manager_node_t *node = (sfat_manager_node_t *)data;
wf_register((const char *)node->binary.header.st->id, NULL, &ops, NULL);
wf_node_t *desc = wf_get_node((const char *)node->binary.header.st->id);
desc->type = WF_TOOL;
}
在解析工具表盘文件的时候,会调用此函数进行表盘注册。并将表盘类型设置为GUI工具表盘。
1.2 表盘删除
void sfat_wf_unregister(void *data)
{
sfat_manager_node_t *node = (sfat_manager_node_t *)data;
wf_del_node((const char *)node->binary.header.st->id);
}
在删除工具表盘文件的时候,会调用此函数进行表盘注销。
2.表盘编辑页的显示
相关文件:
《wf_edit_gui.c》
static lv_obj_t *wf_edit_create_item(lv_obj_t *parent, lv_multlist_item_t *item)
{
wf_node_t *node = (wf_node_t *)item->info;
if (node->type == WF_DYNAMIC || node->type == WF_QJS || node->type == WF_PYTHON)
lv_multswipe_enable(item, item_btn, LV_MULTSWIPE_STYLE_DEFAULT);
#ifdef APP_TOOL_SUPPORT
else if (node->type == WF_TOOL)
{
sfat_manager_node_t *tool_node = sfat_manager_get_node_by_id(node->id, SFAT_MANAGER_TYPE_WF);
sfat_theme_t *theme = sfat_read_theme(tool_node->file_path, &tool_node->binary, tool_node->save_data->valid_theme_id, false);
lv_obj_t *img = lv_img_create(item_btn);
lv_img_set_src_offset(img, tool_node->file_path, theme->dynamic.resource_thum->data_addr, theme->dynamic.resource_thum->data_len);
sfat_free_theme(theme);
}
#endif
}
wf_edit_create_item这个函数用于创建显示表盘缩略图的按键。需要在其中加入GUI工具表盘的处理流程。通过判断表盘类型是否为GUI工具表盘,进行绘制相应的缩略图。
三、表盘普通样式
在表盘编辑页中,滑动选择到具备多个普通样式的表盘以后,点击编辑进入表盘样式编辑页面。 在此通过上下滑动可以切换选中的表盘样式,点击确认即可保存。
选中的表盘样式会在表盘主页中被显示出来。
四、表盘AOD样式
相关文件:
《app_tool_wf_aod.c》
《app_tool_wf_aod.h》
1.AOD的注册和删除
1.1 AOD注册
void sfat_wf_aod_register(void *data)
{
sfat_manager_node_t *node = (sfat_manager_node_t *)data;
aod_desc_t *desc = app_calloc(1, sizeof(aod_desc_t));
desc->name = 0;
desc->id_str = node->binary.header.st->id;
desc->handler = msg_handler;
desc->img = (const void *)node; //becaues of the img can not be used in the desc struct, so we use the node struct to instead of the img path
desc->prio = 0;
desc->type = GUI_AOD_TOOL;
aod_register(desc);
nvm_sys_copy_update(aod_name, (void *)node->binary.header.st->id, AOD_NAME_MAX_LEN, 0);
app_aod_t *p_screen_always_on = aod_info_get();
p_screen_always_on->desc = desc;
}
在解析工具表盘文件的时候,会检查表盘中是否存在AOD样式,如果存在则会调用此函数进行注册。
1.2 AOD删除
void sfat_wf_aod_unregister(void *data)
{
sfat_manager_node_t *node = (sfat_manager_node_t *)data;
aod_del_node(node->binary.header.st->id);
}
在删除工具表盘文件的时候,会检查表盘中是否存在AOD样式,如果存在则会调用此函数进行注销。