【瑞昱RTL8763E】刷屏

1 显示界面填充

用户创建的各个界面在 rtk_gui group 中。各界面中 icon[]表对界面进行描述,表中的每个元素代表一 个显示元素,可以是背景、小图标、字符等,UI_WidgetTypeDef 结构体含义如下:

typedef struct _UI_WidgetTypeDef

{

    int16_t x;                              //起始显示位置横坐标

    int16_t y;                              //起始显示位置纵坐标

    int16_t active_ys;                       //有效滑动区域纵向起始位置

    int16_t active_ye;                       //有效滑动区域纵向结束位置

    int16_t width;                          //图片宽度

    int16_t hight;                          //图片高度

    uint32_t addr;                          //图片在flash中地址

    uint16_t widget_id_type;                //图标类型(背景、普通图标、遮挡图标、表盘指针、字符等)

    union

   {

        UI_ClockPointerTypeDef clock_pointer;

        UI_StringRecordTypeDef string_mem;

        uint32_t mask_addr;

        uint32_t graph_color;

        uint32_t num_string_addr;

    } u;

    bool touch_capability;                  //是否支持点触菜单切换

    void (*widget_touch_func)(uint32_t button_touch_type);              //点触菜单切换回调函数

} UI_WidgetTypeDef;

 

typedef struct _UI_StringRecordTypeDef

{

    uint16_t single_font_height;     //字体高度

    uint16_t font_number;         //将要显示字符串中第几个字符

    uint16_t font_count;           //字符个数

    uint32_t font_color;           //字符颜色

} UI_StringRecordTypeDef;

 

2 回调函数实现功能

/* change Here for UI */

const UI_MenuTypeDef Player =

{

    /* change Here for UI */

    .name = (const char *)"Player",

    .MenuParent = NULL,

    .MenuSub = NULL,

    .button_func = menu_button_cb,

    .touch_func = menu_touch_cb,

    .update_func = menu_update_cb,

    .dynamic_cb = menu_dynamic_time_cb,

    .display_cb = menu_display_time_cb,

    .cur_display_info = menu_display_info_cb,

    .constructor_cb = menu_constructor_cb,

    .destructor_cb = menu_destructor_cb,

    .pWidgetList = (UI_WidgetTypeDef *)icon,

    .current_max_widget = sizeof(icon) / sizeof(UI_WidgetTypeDef),

};

menu_touch_cb 触摸屏回调函数,包括基本的触摸滑动类型。

触摸滑动类型

含义解释

TOUCH_HOLD

横向跟指拖动

TOUCH_HOLD_Y

纵向跟指拖动

TOUCH_ORIGIN_FROM_X

横向回弹

TOUCH_ORIGIN_FROM_Y

纵向回弹

TOUCH_RIGHT_SLIDE

向右快速滑动

TOUCH_LEFT_SLIDE

向左快速滑动

TOUCH_UP_SLIDE

向上快速滑动

TOUCH_DOWN_SLIDE

向下快速滑动

TOUCH_INVALIDE

无效滑动

 在此回调函数中可以实现菜单之间相互切换的逻辑关系。利用rtl_gui_menu_update()rtl_gui_menu_slide()接口表明菜单之间的切换关系,接口详细说明参考下一节。

menu_constructor_cb构建当前菜单:

menu_ destructor _cb销毁当前菜单: 

menu_display_info_cb更新菜单图标内容数组,例如时间菜单每次刷屏时所显示的时间不同,这时此回调回来更新所要显示的时间。

menu_dynamic_time_cb界面定时刷新回调。

menu_update_cb界面刷新回调。

3 关键接口

实际刷屏接口:

void rtl_gui_menu_update(UI_MenuTypeDef *ui_cur, void *p_ui_cur_argv, \

                      UI_MenuTypeDef *ui_sub, void *p_ui_sub_argv, \

                      UI_MenuTypeDef *ui_par, void *p_ui_par_argv, \

                      int16_t detal_x, int16_t detal_y)

  • ui_cur,当前菜单,p_ui_cur_argv对应菜单内容更新;
  • ui_sub,下滑/右滑菜单,p_ui_sub_argv对应菜单内容更新;
  • ui_par,上滑/左滑菜单p_ui_par_argv对应菜单内容更新
  • detal_x,滑动造成的横向偏移;
  • detal_y,滑动造成的纵向偏移;

 记录各个菜单详情以及滑动位置及距离:

void rtl_gui_menu_slide(UI_MenuTypeDef *ui_cur, void *p_ui_cur_argv, \

                    UI_MenuTypeDef *ui_sub, void *p_ui_sub_argv, \

                    UI_MenuTypeDef *ui_par, void *p_ui_par_argv, \

                    int16_t from_x, int16_t to_x, \

                    int16_t from_y, int16_t to_y) 

  • ui_cur,当前菜单,p_ui_cur_argv对应菜单内容更新;
  • ui_sub,下滑/右滑菜单,p_ui_sub_argv对应菜单内容更新;
  • ui_par,上滑/左滑菜单p_ui_par_argv对应菜单内容更新
  • from_x,横向起始滑动位置;
  • to_x,横向目标位置;
  • from_y,纵向起始滑动位置;
  • to_y,纵向目标位置;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝商品详情API接口多线程调用:解锁数据分析行业的效率新篇章

在数据分析行业,淘宝作为中国最大的在线购物平台,其商品详情数据具有极高的市场价值。然而,面对海量的数据,如何高效、稳定地获取这些数据,一直是数据分析师面临的重要挑战。本文将探讨如何通过多线程调用淘宝商品详情…

JavaSE——面向对象11:内部类(局部内部类、匿名内部类、成员内部类、静态内部类)

目录 一、内部类基本介绍 (一)内部类定义 (二)内部类基本语法 (三)内部类代码示例 (四)内部类的分类 二、局部内部类 三、匿名内部类(重要) (一)基本介绍 (二)基于接口的匿名内部类 (三)基于类的匿名内部类 (四)注意事项与使用细节 (五)匿名内部类的最佳实践——当…

UE4 材质学习笔记01(什么是着色器/PBR基础)

1.什么是shader 着色器是控制屏幕上每个像素颜色的代码,这些代码通常在图形处理器上运行。 现如今游戏引擎使用先进的基于物理的渲染和照明。而且照明模型模型大多数是被锁定的。 因此我们创建着色器可以控制颜色,法线,粗糙度,…

vue2 + View design 使用inputNumber设置默认值为undefined但展示数据为1且表单校验不通过的原因

文章目录 一、背景二、操作步骤1.复现前的准备工作(1)vue版本和view design 版本(2)创建一个组件(组件中根据类型渲染不同的组件)(3)在list.vue页面中引入组件,传入配置&…

于BERT的中文问答系统12

主要改进点 日志配置: 确保日志文件按日期和时间生成,便于追踪不同运行的记录。 数据处理: 增加了对数据加载过程中错误的捕获和日志记录,确保程序能够跳过无效数据并继续运行。 模型训练: 增加了重新训练模型的功能,用户可以选择重新训练现有模型或从头开始训练。 用…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon(禹贡),基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力,提供专业的GIS(Geographic Information System)功能,赋能传统关系型数据库。 Yukon 支…

重学SpringBoot3-集成Redis(六)之消息队列

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(六)之消息队列 1. 什么是发布/订阅(Pub/Sub)?2. 场景应用3. Spring Boot 3 整合 R…

[网络]NAT、代理服务、内网穿透、内网打洞

目录 一、NAT 1.1 NAT 技术背景 1.2 NAT IP 转换过程 1.3 NAPT(Network Address Port Translation) 1.地址转换表 2. NAPT(网络地址端口转换Network Address Port Translation) 3. NAT技术的缺陷 二、代理服务器 2.1 正向…

Vue2与Vue3: 关键差异与新特性介绍

目录 一、Vue 2 与 Vue 3 的关键差异 1.双向数据绑定原理: Object.defineProperty() 的作用 Proxy API 简介 2.支持碎片(Fragment) 为什么支持碎片很重要? 如何实现的? 3.API类型 4.数据变量和方法的定义 5.生…

北交大研究突破:塑料光纤赋能低成本无摄像头AR/VR眼动追踪技术

北交大研究:探索无摄像头低成本AR/VR眼动追踪新路径 在AR/VR技术领域,眼动追踪作为一项关键技术,对于提升用户体验、优化渲染效率具有重要意义。然而,传统的眼动追踪方案多依赖于高成本的摄像头,这不仅增加了设备的制造…

解锁 Python 嵌套字典的奥秘:高效操作与实战应用指南

文章目录 前言🍀一、 什么是 Python 字典?1.1 字典的语法 🍀二、 字典的基本操作2.1 字典的创建2.2 访问字典中的值2.3 添加或修改键值对2.4 删除字典中的键值对 🍀三、 字典的遍历操作3.1 遍历字典的键3.2 遍历字典的值3.3 同时遍…

华为仓颉语言入门(9):for-in表达式

for-in 表达式用于遍历序列,它会依次访问序列中的每个元素,直到遍历完成。它常用于处理列表、数组或其他集合类型,能够有效简化代码,减少重复劳动。其基本语法如下: for (循环变量 in 序列) {循环体 }在 for-in 表达式中,每次循环都会检查是否遍历了序列中的所有元素。如…

【代码随想录Day34】动态规划Part03

0-1 背包问题 二维 题目链接/文章讲解:代码随想录 视频讲解:带你学透 0-1 背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili import java.uti…

基于SSM的仿win10界面的酒店管理系统

基于SSM的仿win10界面的酒店管理系统 运行环境: jdk1.8 eclipse tomcat7 mysql5.7 项目技术: jspssm(springspringmvcmybatis)mysql 项目功能模块:基础功能、房间类型、楼层信息、附属功能

【Ubuntu】DNS设置不生效/重启被重置

/etc/resolv.conf 是一个链接,指向/run/systemd/resolve/stub-resolv.conf , ubuntuVM-4-13-ubuntu:/run/systemd/resolve$ ll /etc/resolv.conf lrwxrwxrwx 1 root root 39 Sep 30 14:40 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.…

大数据新视界 --大数据大厂之大数据驱动智能客服 -- 提升客户体验的核心动力

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

HUAWEI New4.9G 与 2.6G 无法正常切换问题处理案例

HUAWEI New4.9G 与 2.6G 无法正常切换问题处理案例 在某地市的 XX 音乐节保障准备期间,为确保活动期间的网络质量,现场新开了 4.9G HUAWEI 室外基站。在网络优化和测试中,发现UE无法实现从 2.6G 到 4.9G 的正常切换。虽然现场具备 4.9G信号覆…

【Router】路由功能之IP过滤(IP Filter)功能(基于端口)介绍及实现

IP过滤(IP Filter) IP Filter是一种通过对网络数据包中的 IP 地址进行分析和筛选,以实现对网络流量的控制和管理的技术。 IP过滤(IP Filter)作用 安全防护 可以阻止来自特定 IP 地址或 IP 地址范围的恶意攻击、非法访问等,增强网络的安全性。 流量管理 根据不同的 IP …

深度解析:Tkinter 界面布局与优化技巧

目录 深度解析:Tkinter 界面布局与优化技巧1. Tkinter 布局管理简介如何选择合适的布局管理器 2. pack() 布局管理详解嵌套布局 3. grid() 布局管理详解行列合并 4. place() 精确布局详解5. Tkinter 界面优化技巧自适应布局响应式布局资源管理 6. 项目示例&#xff…

每日OJ题_牛客_组队竞赛_贪心_C++_Java

目录 牛客_组队竞赛_贪心 题目解析 C代码1 C代码2 Java代码 牛客_组队竞赛_贪心 组队竞赛_牛客笔试题_牛客网 (nowcoder.com) 描述: 牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个…