【瑞昱RTL8763E】刷屏

news2024/11/25 12:40:29

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.coloradmin.cn/o/2195270.html

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

相关文章

每年每门学科排名第一的学生 和每年总成绩都有所提升的学生

一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的…

【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理

【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理 本文参考移植步骤文件配置代码修改inv_mpu.cinv_mpu.hinv_mpu_dmp_motion_driver.c 使用 自检失败怎么处理ret -1改正DEBUG过程 ret -9改正DEBUG过程 本文参考 B站 CSDN 移植步骤 文件配置 新建一个 dmp 文件夹 并将…

【斯坦福CS144】Lab1

一、实验目的 1.实现一个流重组器——一个将字节流的小块 (称为子串或段 )按正确顺序组装成连续的字节流的模块; 2.深入理解 TCP 协议的工作方式。 二、实验内容 编写一个名为"StreamReassembler"的数据结构,它负责…

【Nacos入门到实战十四】Nacos配置管理:集群部署与高可用策略

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

原神5.1前瞻网页HTML+CSS+JS

这篇文章主要是总结一下我在制作页面的时候用到的一些技术以及经验总结,博主也是第一次写网页,代码也是在不断地“进化”,哪里写的不好大家可以随意指出。 下面就是一些经验总结,如果想看具体效果我这里也不好展示,需要…

pytorch导入数据集

1、概念: Dataset:一种数据结构,存储数据及其标签 Dataloader:一种工具,可以将Dataset里的数据分批、打乱、批量加载并进行迭代等 (方便模型训练和验证) Dataset就像一个大书架,存…

QSerialPort 串口通信示例

之前使用过MFC写过串口通信的示例,今年学了Qt,特意使用Qt写了串口通信的示例,发现比MFC要容易一些, MFC串口示例如下: Qt示例如下: Qt这个做的很简单,主要还是想验证一下api, 核心…

今日指数day8实战补充(上)

1.用户管理 1.多条件综合查询 1.1 多条件综合查询接口说明 1)原型效果 2)接口说明 功能描述:多条件综合查询用户分页信息,条件包含:分页信息 用户创建日期范围 服务路径:/api/users 服务方法&#xff1…

Linux的Tomcat安装部署

1.下载jdk11 java11的官方URL 此时进入可能会有登录注册,挺简单的,注册登录就好 2.上传到Linux 3.解压 命令: tar -zxvf /root/linux.jdk/jdk-11.0.24_linux-x64_bin.tar.gz 4.移动解压文件夹到新建文件夹 新建文件夹: mkdir -p /export/server 移动命令: mv jdk-11.0…

联想服务器配置阵列、安装操作系统

文章目录 [toc]1.配置阵列2.制作启动盘3.安装系统 1.配置阵列 1.根据提示进入BIOS设置(F1) 2.系统设置 3.存储 4.第四步可以看到raid卡信息 5.Main Menu 6.Configuration Management 7.Create Virtual Drive 8.Select RAID Level raid5 9.Select Drives…

透明物体的投射和接收阴影

1、让透明度测试Shader投射阴影 (1)同样我们使用FallBack的形式投射阴影,但是需要注意的是,FallBack的内容为:Transparent / Cutout / VertexLit,该默认Shader中会把裁剪后的物体深度信息写入到 阴影映射纹…

降重秘籍:如何利用ChatGPT将重复率从45%降至10%以下?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 重复率高达45%?很多人一查论文的重复率,瞬间想“完了,这次真的要重写了”。但其实不用这么绝望!有了ChatGPT,降重真的没那么难。今天就教你几招&a…

VGG16模型实现MNIST图像分类

MNIST图像数据集 MNIST(Modified National Institute of Standards and Technology)是一个经典的机器学习数据集,常用于训练和测试图像处理和机器学习算法,特别是在数字识别领域。该数据集包含了大约 7 万张手写数字图片&#xf…

wsl环境下安装MySQL5.7

安装操作需root权限: 1-通过 sudo su - ,切换到root用户。 2-在每一个命令前加上sudo,临时提升权限 1、下载apt仓库文件 wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb 安装包是.deb的文件2、配置仓库,使…

MyBatis 批量插入方案

MyBatis 批量插入 MyBatis 插入数据的方法有几种: for 循环,每次都重新连接一次数据库,每次只插入一条数据。 在编写 sql 时用 for each 标签,建立一次数据库连接。 使用 MyBatis 的 batchInsert 方法。 下面是方法 1 和 2 的…

Linux防火墙-案例(一)filter表

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

51单片机的水位检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块水位传感器继电器LED、按键和蜂鸣器等模块构成。适用于水位监测、水位控制、水位检测相似项目。 可实现功能: 1、LCD1602实时显示水位高度 2、水位传感器采集水位高度 3、按键可设置水位的下限 4、按键可手动加…

动手学大模型应用开发之大模型简介

动手学大模型应用开发之大模型简介 主要学习目标什么是大语言模型大模型的能力和特点涌现能力作为基座模型支持多元应用的能力支持对话作为统一入口的能力大模型特点 常见大模型ChatGpt通义千问 LangChainLangChain的核心模块 总结相关学习链接 主要学习目标 学习如何进行大模…

【AI知识点】激活函数(Activation Function)

激活函数(Activation Function) 是神经网络中的一个关键组件,负责将输入的线性组合转化为非线性输出。它赋予神经网络模型以复杂的表达能力,使其能够处理非线性问题,比如分类、图像识别和自然语言处理等任务。 1. 激活…

【redis-06】redis的stream流实现消息中间件

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…