Files
arcs/apps-ui/apps/llm/views/lisa_ui_llm_primary.h
2026-08-13 16:50:52 +08:00

298 lines
8.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file lisa_ui_llm_primary.h
* @brief LLM UI主要组件头文件
*
* 继承自LLM UI基础组件提供具体的任务栏元素实现
* 包括WiFi图标、状态文本以及容器中的emoji动画和文本显示。
*
* @version 1.0.0
* @date 2024
* @author Lisa UI Team
*/
#ifndef __LISA_UI_LLM_PRIMARY_H__
#define __LISA_UI_LLM_PRIMARY_H__
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================
* 包含文件
*==========================================*/
#include "lisa_ui_llm_base.h"
#include "lvgl.h"
#include <stdint.h>
#include <stdbool.h>
/*===========================================
* 宏定义
*==========================================*/
/** 状态文本最大长度 */
#define LISA_UI_LLM_PRIMARY_MAX_STATUS_LENGTH 32
/** 内容文本最大长度 */
#define LISA_UI_LLM_PRIMARY_MAX_CONTENT_LENGTH 256
/** 类型检查宏 */
#define LISA_UI_LLM_PRIMARY_CLASS_CHECK(obj) (lv_obj_has_class(obj, &lisa_ui_llm_primary_class))
/** 根据每帧时长计算总动画时长的辅助宏 */
#define LISA_UI_LLM_DURATION_BY_FRAME(frame_duration_ms, frame_count) ((frame_duration_ms) * (frame_count))
/**
* @brief LLM UI主要组件结构体
*
* 继承自LLM UI基础组件添加具体的任务栏元素和容器内容
*/
struct lisa_ui_llm_primary {
lisa_ui_llm_base_t base_obj; /*!< 基础对象 */
/* 任务栏元素 */
#ifndef CONFIG_BOARD_ARCS_MINI
lv_obj_t *settings_icon; /*!< 设置图标 */
#endif
lv_obj_t *wifi_icon; /*!< WiFi图标 */
lv_obj_t *full_duplex_icon; /*!< 交互模式图标(全双工) */
lv_obj_t *alarm_icon; /*!< 闹钟图标 */
lv_obj_t *battery_icon; /*!< 电量图标 */
lv_obj_t *status_label; /*!< 状态文本标签 */
/* 容器内容元素 */
lv_obj_t *emoji_container; /*!< emoji 动画容器 */
lv_obj_t *emoji_anim; /*!< emoji 动画图片 */
lv_obj_t *content_container; /*!< 内容文本容器 */
lv_obj_t *content_label; /*!< 内容文本标签 */
lv_obj_t *img;
lv_obj_t *img_hint;
};
/** LLM UI主要组件类型定义 */
typedef struct lisa_ui_llm_primary lisa_ui_llm_primary_t;
/*===========================================
* 全局变量声明
*==========================================*/
/** LLM UI主要组件类定义 */
extern const lv_obj_class_t lisa_ui_llm_primary_class;
/*===========================================
* 函数声明
*==========================================*/
/**
* @brief 创建LLM UI主要组件
*
* @param parent 父对象如果为NULL则使用当前活动屏幕
* @return lv_obj_t* 创建的LLM UI主要组件对象失败返回NULL
*
* @note 该函数会自动创建任务栏的所有元素和容器内容
*
* @code
* // 创建LLM UI主要组件
* lv_obj_t *llm_ui = lisa_ui_llm_primary_create(lv_scr_act());
* if (llm_ui != NULL) {
* // 组件创建成功,包含完整的任务栏和内容区域
* }
* @endcode
*/
lv_obj_t *lisa_ui_llm_primary_create(lv_obj_t *parent);
#ifndef CONFIG_BOARD_ARCS_MINI
/**
* @brief 获取设置图标对象
*
* @param obj LLM UI主要组件对象
* @return lv_obj_t* 设置图标对象失败返回NULL
*/
lv_obj_t *lisa_ui_llm_primary_settings_icon_get(lv_obj_t *obj);
#endif
/**
* @brief 获取WiFi图标对象
*
* @param obj LLM UI主要组件对象
* @return lv_obj_t* WiFi图标对象失败返回NULL
*/
lv_obj_t *lisa_ui_llm_primary_wifi_icon_get(lv_obj_t *obj);
/**
* @brief 获取状态文本标签对象
*
* @param obj LLM UI主要组件对象
* @return lv_obj_t* 状态文本标签对象失败返回NULL
*/
lv_obj_t *lisa_ui_llm_primary_status_label_get(lv_obj_t *obj);
/**
* @brief 获取电量图标对象
*
* @param obj LLM UI主要组件对象
* @return lv_obj_t* 电量图标对象失败返回NULL
*/
lv_obj_t *lisa_ui_llm_primary_battery_icon_get(lv_obj_t *obj);
/**
* @brief 获取emoji动画图片对象
*
* @param obj LLM UI主要组件对象
* @return lv_obj_t* emoji动画图片对象失败返回NULL
*/
lv_obj_t *lisa_ui_llm_primary_emoji_img_get(lv_obj_t *obj);
/**
* @brief 获取内容文本标签对象
*
* @param obj LLM UI主要组件对象
* @return lv_obj_t* 内容文本标签对象失败返回NULL
*/
lv_obj_t *lisa_ui_llm_primary_content_label_get(lv_obj_t *obj);
/**
* @brief 设置状态文本
*
* @param obj LLM UI主要组件对象
* @param status 状态文本如果为NULL则清空状态
*
*/
void lisa_ui_llm_primary_set_status_text(lv_obj_t *obj, const char *status);
/**
* @brief 设置内容文本
*
* @param obj LLM UI主要组件对象
* @param content 内容文本如果为NULL则清空内容
*
*/
void lisa_ui_llm_primary_set_content_text(lv_obj_t *obj, const char *content);
/**
* @brief 设置内容文本(追加)
*
* @param obj LLM UI主要组件对象
* @param content 内容文本如果为NULL则清空内容
*
*/
void lisa_ui_llm_primary_add_content_text(lv_obj_t *obj, const char *content);
/**
* @brief 设置WiFi图标显示状态
*
* @param obj LLM UI主要组件对象
* @param img_path 图片路径如果为NULL则不显示WiFi图标
*/
void lisa_ui_llm_primary_set_wifi_img(lv_obj_t *obj, const void *img_path);
/**
* @brief 设置交互模式图标显示状态
*
* @param obj LLM UI主要组件对象
* @param visible true显示false隐藏
*/
void lisa_ui_llm_primary_set_full_duplex_icon_visible(lv_obj_t *obj, bool visible);
/**
* @brief 设置闹钟图标显示状态
*
* @param obj LLM UI主要组件对象
* @param visible true显示false隐藏
*/
void lisa_ui_llm_primary_set_alarm_icon_visible(lv_obj_t *obj, bool visible);
/**
* @brief 设置电量图标显示状态
*
* @param obj LLM UI主要组件对象
* @param img_path 图片路径如果为NULL则隐藏图标
*/
void lisa_ui_llm_primary_set_battery_img(lv_obj_t *obj, const void *img_path);
/**
* @brief 启动emoji动画
*
* @param obj LLM UI主要组件对象
*/
void lisa_ui_llm_primary_start_emoji_animation(lv_obj_t *obj);
/**
* @brief 停止emoji动画
*
* @param obj LLM UI主要组件对象
*/
void lisa_ui_llm_primary_stop_emoji_animation(lv_obj_t *obj);
/**
* @brief 设置自定义emoji动画图片
*
* @param obj LLM UI主要组件对象
* @param images 图片数组指针
* @param images_count 图片数量
* @param duration 动画时长(毫秒)
* @param first_frame_delay 第一帧停留时间(毫秒)0表示无延迟
*/
void lisa_ui_llm_primary_set_custom_emoji_animation(lv_obj_t *obj, const void **images, uint32_t images_count,
uint32_t duration, uint32_t first_frame_delay);
/**
* @brief 设置emoji动画循环参数
*
* @param obj LLM UI主要组件对象
* @param loop_count 循环次数0表示无限循环
*/
void lisa_ui_llm_primary_set_loop_count(lv_obj_t *obj, uint32_t loop_count);
#ifndef CONFIG_BOARD_ARCS_MINI
/**
* @brief 设置设置图标事件回调
*
* @param obj LLM UI主要组件对象
* @param event_cb 事件回调函数
* @param user_data 用户数据
*/
void lisa_ui_llm_primary_set_settings_icon_event_cb(lv_obj_t *obj, lv_event_cb_t event_cb, void *user_data);
#endif
/**
* @brief 显示拍照图片到表情容器
*
* @param obj LLM UI主要组件对象
* @param rgb565_data RGB565图片数据
* @param width 图片宽度
* @param height 图片高度
*/
void lisa_ui_llm_primary_show_camera_image(lv_obj_t *obj, const uint16_t *rgb565_data, uint32_t width, uint32_t height);
/**
* @brief 隐藏拍照图片
*
* @param obj LLM UI主要组件对象
*/
void lisa_ui_llm_primary_hide_camera_image(lv_obj_t *obj);
lv_obj_t *lisa_ui_llm_primary_emoji_anim_get(lv_obj_t *obj);
/*===========================================
* 内联函数
*==========================================*/
/**
* @brief 检查对象是否为LLM UI主要组件类型
*
* @param obj 要检查的对象
* @return true 是LLM UI主要组件类型
* @return false 不是LLM UI主要组件类型
*/
static inline bool lisa_ui_llm_primary_is_valid(lv_obj_t *obj)
{
return (obj != NULL) && LISA_UI_LLM_PRIMARY_CLASS_CHECK(obj);
}
void lisa_ui_llm_primary_img_show(lv_obj_t *obj, void *img);
void lisa_ui_llm_primary_img_hide(lv_obj_t *obj);
void lisa_ui_llm_primary_img_hint_show(lv_obj_t *obj, const char *text);
void lisa_ui_llm_primary_img_hint_hide(lv_obj_t *obj);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __LISA_UI_LLM_PRIMARY_H__ */