298 lines
8.3 KiB
C
298 lines
8.3 KiB
C
/**
|
||
* @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__ */
|