209 lines
12 KiB
C
209 lines
12 KiB
C
|
|
#ifndef __LV_UI_H__
|
|
#define __LV_UI_H__
|
|
/*#include "key_event_deal.h"*/
|
|
#include "key_driver.h"
|
|
#include "sdk_config.h"
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
* @brief 给控件模型ID发送全局指针消息
|
|
* @application 适用于给模型发送全局(结构体等)指针等情况
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] ptr: 模型数据指针,根据控件ID实际数据类型使用
|
|
* @param[in] len: 发送消息的长度
|
|
* @param[in] refr_now: 是否立刻刷新UI界面,还是说等UI刷新周期自动更新,建议填写0
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_msg_send_global_ptr(unsigned int msg_id, const void *ptr, unsigned int len, char refr_now);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
* @brief 给控件模型ID发送string消息
|
|
* @application 适用于发送字符串类型的消息
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] string: 模型字符串指针,根据控件ID实际数据类型使用
|
|
* @param[in] refr_now: 是否立刻刷新UI界面,还是说等UI刷新周期自动更新,建议填写0
|
|
*-------------------------------------------------------------------------------*/
|
|
|
|
int lvgl_module_msg_send_string(unsigned int msg_id, const char *string, char refr_now);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 给控件模型ID发送value消息
|
|
* @application 适用于发送整数类型的消息
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] value: 模型数据指针,根据控件ID实际数据类型使用
|
|
* @param[in] refr_now: 是否立刻刷新UI界面,还是说等UI刷新周期自动更新,建议填写0
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_msg_send_value(unsigned int msg_id, unsigned int value, char refr_now);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 通过模型ID,获取一个与该ID绑定的指针,填充该指针后,
|
|
使用lvgl_module_msg_send_ptr发送给模型,发送后无需考虑指针、内存释放的问题
|
|
*@application 适用于发送长度大于4的字符串或者申请一个(结构体变量等)指针的情况,填充后发送
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] len: 申请指针的大小,根据控件ID实际数据类型使用
|
|
* @param[out/in] ptr: 申请的指针/发送时需要作为参数输入
|
|
* @param[in] refr_now: 是否立刻刷新UI界面,还是说等UI刷新周期自动更新,建议填写0
|
|
*-------------------------------------------------------------------------------*/
|
|
void *lvgl_module_msg_get_ptr(unsigned int msg_id, unsigned int len);
|
|
int lvgl_module_msg_send_ptr(void *ptr, char refr_now);
|
|
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 创建一个模型组
|
|
* @application 适用于用于需要同时刷新多个控件模型ID的情况
|
|
* @param[in] msg_group_id: 模型组的ID,可以自行定义,只需确保不同模型使用不同的ID即可
|
|
* @param[out] group: 返回模型组指针
|
|
*-------------------------------------------------------------------------------*/
|
|
void *lvgl_module_group_create(unsigned int msg_group_id);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 给组中的控件模型ID添加全局指针消息
|
|
* @application 适用于给模型发送全局(结构体等)指针等情况
|
|
* @param[in] group: 模型组指针,需要将该消息添加到模型组中,同一个消息可以多次添加到不同的模型组中
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] ptr: 模型数据指针,根据控件ID实际数据类型使用
|
|
* @param[in] len: 发送消息的长度
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_msg_group_add_global_ptr(void *group, unsigned int msg_id, const void *ptr, unsigned int len);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 给组中的控件模型ID添加string消息
|
|
* @application 适用于控件ID使用的数据类型为字符串类型
|
|
* @param[in] group: 模型组指针,需要将该消息添加到模型组中,同一个消息可以多次添加到不同的模型组中
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] string: 模型字符串指针,根据控件ID实际数据类型使用
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_msg_group_add_string(void *group, unsigned int msg_id, const char *string);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 给组中的控件模型ID添加value消息
|
|
* @application 适用于控件ID使用的数据类型为整数类型
|
|
* @param[in] group: 模型组指针,需要将该消息添加到模型组中,同一个消息可以多次添加到不同的模型组中
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] value: 模型数据指针,根据控件ID实际数据类型使用
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_msg_group_add_value(void *group, unsigned int msg_id, unsigned int value);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
*@brief 给组中的控件模型ID添加指针消息, 同样无需考虑后续指针、内存释放的问题
|
|
* @application 适用于发送长度大于4的字符串或者申请一个(结构体变量等)指针的情况,填充后发送
|
|
* @param[in] group: 模型组指针,需要将该消息添加到模型组中,同一个消息可以多次添加到不同的模型组中
|
|
* @param[in] msg_id: 控件模型ID,gui_model_msg_id_t,由UI界面工具生成
|
|
* @param[in] len: 申请指针的大小,根据控件ID实际数据类型使用
|
|
* @param[out/in] ptr: 申请的指针/发送时需要作为参数输入
|
|
*-------------------------------------------------------------------------------*/
|
|
void *lvgl_module_msg_group_add_ptr(void *group, unsigned int msg_id, unsigned int len);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
* @brief 一次性刷新组内添加的模型消息
|
|
* @param[in] group: 需要刷新的模型组指针
|
|
* @param[in] refr_now: 是否立刻刷新UI界面,还是说等UI刷新周期自动更新,建议填写0
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_msg_group_send(void *group, char refr_now);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
* @brief 通过一个变量的变化来发送控件值/状态,注:变量要配合DEFINE_UI_VARIABLE_REG()使用
|
|
* @param[in] msg_id: 需要刷新的模型id
|
|
* @param[in] refr_now: 是否立刻刷新UI界面,还是说等UI刷新周期自动更新,建议填写0
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_varable_reg_send(unsigned int msg_id, char refr_now);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
* @brief 通过模型组添加并同时发送多个变量来刷新控件值/状态,注:每个变量都要配合DEFINE_UI_VARIABLE_REG()使用
|
|
* @param[in] group: 需要刷新的模型组指针
|
|
* @param[in] msg_id: 添加到模型组的模型id
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_module_varable_reg_group_add(void *group, unsigned int msg_id);
|
|
int lvgl_module_varable_reg_group_send(void *group, char refr_now);
|
|
|
|
/*-------------------------------------------------------------------------------
|
|
* @brief 非LVGL线程通过rpc解耦函数来调用LVGL线程接口
|
|
* @param[in] void:(*rpc_func)(...) LVGL内部接口
|
|
* @param[in] argc LVGL内部接口所需要的参数数量
|
|
* @param[in] ... LVGL内部接口所需要的参数
|
|
*-------------------------------------------------------------------------------*/
|
|
int lvgl_rpc_post_func(void (*rpc_func)(void *, ...), int argc, ...);
|
|
|
|
|
|
|
|
struct ui_module_event_handler {
|
|
int msg_id;
|
|
int (*onchange)(int change_event, void *data);
|
|
};
|
|
|
|
|
|
#if TCFG_UI_ENABLE && CONFIG_LVGL_UI_ENABLE
|
|
#define LV_HDL_SEC SEC_USED
|
|
#else
|
|
#define LV_HDL_SEC(x)
|
|
#endif
|
|
|
|
|
|
extern const struct ui_module_event_handler ui_module_event_handler_begin[], ui_module_event_handler_end[];
|
|
|
|
|
|
#define REGISTER_UI_MODULE_EVENT_HANDLER(_msg_id) \
|
|
static const struct ui_module_event_handler ui_module_event_handler_##_msg_id \
|
|
LV_HDL_SEC(.ui_module_event_handler) = { \
|
|
.msg_id = _msg_id,
|
|
|
|
|
|
|
|
|
|
|
|
//UI页面切换注册函数,页面注册函数通常是进行app切换操作,需要在UI工具上针对指定页面开启“加载/卸载函数”
|
|
struct ui_screen_action_handler {
|
|
int page_id;
|
|
int (*onchange)(int action);
|
|
};
|
|
|
|
struct ui_key_event_handler {
|
|
int page_id;
|
|
int (*key_onchange)(struct key_event *key);
|
|
};
|
|
|
|
extern const struct ui_screen_action_handler ui_screen_action_handler_begin[], ui_screen_action_handler_end[];
|
|
extern const struct ui_key_event_handler ui_key_event_handler_begin[], ui_key_event_handler_end[];
|
|
|
|
|
|
#define REGISTER_UI_SCREEN_ACTION_HANDLER(_page_id) \
|
|
static const struct ui_screen_action_handler ui_screen_action_handler_##_page_id \
|
|
LV_HDL_SEC(.ui_screen_action_handler) = { \
|
|
.page_id = _page_id,
|
|
|
|
|
|
#define REGISTER_UI_KEY_EVENT_HANDLER(_page_id) \
|
|
static const struct ui_key_event_handler ui_key_event_handler_##_page_id \
|
|
LV_HDL_SEC(.ui_key_event_handler) = { \
|
|
.page_id = _page_id,
|
|
|
|
|
|
|
|
struct ui_varable_reg_t {
|
|
void *ptr;
|
|
unsigned int len;
|
|
void (*get_set_value_cb)(char access);
|
|
unsigned short msg_id;
|
|
};
|
|
|
|
extern const struct ui_varable_reg_t ui_varable_reg_tab_begin[], ui_varable_reg_tab_end[];
|
|
|
|
/*-------------------------------------------------------------------------------------------------
|
|
* @brief varable变量模型注册接口
|
|
* @param[in] MSG_ID 绑定的模型ID
|
|
* @param[in] VARIABLE_TYPE varable变量类型,只允许发送u8,u16,u32类型的变量
|
|
* @param[in] VARIABLE_NAME varable变量名称,使用时,需要在外部用extern声明该变量,再修改它,最后调用lvgl_module_varable_reg_send接口发送
|
|
* @param[in] GET_SET_VALUE_CALLBACK 需要指定GET_SET_VALUE_CALLBACK回调,lvgl现成发送并刷新完varable变量消息后,会进到该回调,
|
|
可以在该回调中做一些通知外部线程的操作,若不需要通知,则直接定义成空函数
|
|
*---------------------------------------------------------------------------------------------------*/
|
|
#define DEFINE_UI_VARIABLE_REG(MSG_ID,VARIABLE_TYPE,VARIABLE_NAME,GET_SET_VALUE_CALLBACK) \
|
|
VARIABLE_TYPE VARIABLE_NAME; \
|
|
static const struct ui_varable_reg_t varable_reg_##MSG_ID \
|
|
LV_HDL_SEC(.ui_varable_reg_tab) = { \
|
|
.msg_id = MSG_ID,\
|
|
.ptr =&VARIABLE_NAME,\
|
|
.len=sizeof(VARIABLE_TYPE),\
|
|
.get_set_value_cb=GET_SET_VALUE_CALLBACK,\
|
|
}
|
|
|
|
#endif
|