【全志T113-S3_100ask】16-1 linux系统驱动四线电阻屏(tpadc、tslib)

news2024/10/7 2:31:51

【全志T113-S3_100ask】16-1 linux系统使用TPADC驱动四线电阻屏(rtp、tslib)

  • (一)背景
  • (二)焊接鬼才
  • (三)解析input上报事件
  • (四)C语言解析input上报事件
  • (五)tslib的使用
    • 1、tslib框架
    • 2、tslib命令行测试
      • 1)ts_calibrate 触摸屏校准
      • 2)ts_print 坐标打印
      • 3)ts_test 涂鸦
  • (六)后记

(一)背景

上一小节,使用了内核驱动了 ili9341 ,但是上面的电阻屏并还没有驱动,查阅芯片数据手册,该芯片支持驱动四线触摸屏
在这里插入图片描述
且buildroot已经支持,官方设备树已经配置好。

	rtp:rtp@2009c00 {
		compatible = "allwinner,sun8i-ts";
		reg = <0x0 0x02009c00 0x0 0x400>;
		clocks = <&ccu CLK_TPADC>, <&ccu CLK_BUS_TPADC>;
		clock-names = "mod", "bus";
		clock-frequency = <1000000>;
		resets = <&ccu RST_BUS_TPADC>;
		interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
	};
	
	
	&rtp {
		allwinner,tp-sensitive-adjust = <0xf>;
		allwinner,filter-type = <0x1>;
		allwinner,ts-attached;
		status = "okay";
	};

触摸屏设备就在 /dev/input/event1
hexdump测试一下
在这里插入图片描述

触摸屏没接当然没数据啦

(二)焊接鬼才

那就手动把触摸屏的四根线焊上去吧(别接错了)
1、先把芯片拆下来把,这么小的引脚好像不好焊接。。。。。。(能画pcb的老老实实画,我这是贪玩)

在这里插入图片描述
然后把杜邦线焊上去
在这里插入图片描述
嗯,看起来没短路,然后接到核心板的对应引脚上
在这里插入图片描述

hexdump测试一下
在这里插入图片描述此此时按下触摸屏就会有数据,但是这些数据似乎看不懂

(三)解析input上报事件

以下图片来源于100ask
在这里插入图片描述
其中,如果type为0001,则为x轴,0003则为y轴,value为对应的值

(四)C语言解析input上报事件

#include "stdio.h"
#include "unistd.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "stdlib.h"
#include "string.h"
#include <linux/input.h>

/* 定义按键值 */
#define KEY0VALUE 0XF0
#define INVAKEY 0X00

typedef struct posi
{
    int x;
    int y;
};

int main(int argc, char *argv[])
{
    struct input_event in_ev = {0};
    int fd, ret;
    int keyvalue;
    struct posi xxyy = {0};

    /* 打开key驱动 */
    fd = open("/dev/input/event1", O_RDWR);
    if (fd < 0)
    {
        perror("open /dev/input/event1");
        return -1;
    }

    while (1) /* 循环读取数据 */
    {

        if (sizeof(struct input_event) != read(fd, &in_ev, sizeof(struct input_event)))
        {
            perror("read error");
            exit(-1);
        }

        if (EV_ABS == in_ev.type) // 触摸屏事件
        {

            if (in_ev.code == 1)
                xxyy.x = in_ev.value;
            if (in_ev.code == 0)
                xxyy.y = in_ev.value;
        }
        if (xxyy.x != 0 && xxyy.y != 0)
        {
            printf("x: %d  y: %d\n", xxyy.x, xxyy.y);
            xxyy.x = 0;
            xxyy.y = 0;
        }
    }

    ret = close(fd); /* 关闭文件 */
    if (ret < 0)
    {
        printf("file %s close failed!\r\n", argv[1]);
        return -1;
    }
    return 0;
}
  • makefile 记得链接 lts
    下面点击屏幕的四个点进行坐标获取
    在这里插入图片描述
    但是实际上这个是我们采集的adc的值,原则上我们需要将其转化为我们的坐标值
    以下内容是参考借鉴的思路
    在这里插入图片描述
    其实实际上并没有这么简单,如果用过电阻触摸屏手机的都知道,有时候点击屏幕并不准了,需要进行校准操作什么的。
    为简单了解过程,下面直接使用tslib进行实验

(五)tslib的使用

1、tslib框架

参考100ask
tslib的主要代码如图所示
在这里插入图片描述

  • 核心在于“plugins”目录里的“插件”,或称为“module”。这个目录下的每个文件都是一个module,每个module都提供2个函数:read、read_mt,前者用于读取单点触摸屏的数据,后者用于读取多点触摸屏的数据。
  • 要分析tslib的框架,先看看示例程序怎么使用,我们参考ts_test.c和ts_test_mt.c,前者用于一般触摸屏(比如电阻屏、单点电容屏),后者用于多点触摸屏。
  • 一个图就可以弄清楚tslib的框架:
    在这里插入图片描述
    好吧,我没看懂。。。直接实操测试吧

2、tslib命令行测试

记得在buildroot开启tslib

Target packages  --->
	Libraries  --->
		Hardware handling  --->
			[*] tslib

先配置环境

export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

其中:

  • export TSLIB_TSDEVICE=/dev/input/event1 # 触摸屏设备文件
  • export TSLIB_CALIBFILE=/etc/pointercal # 指定触摸屏校准文件pintercal的存放位置
  • export TSLIB_CONFFILE=/etc/ts.conf # tslib模块配置文件
  • export TSLIB_PLUGINDIR=/usr/lib/ts/ # tslib插件库目录
  • export TSLIB_CONSOLEDEVICE=none # 控制台设置
  • export TSLIB_FBDEVICE=/dev/fb0 # framebuffer设备文件

1)ts_calibrate 触摸屏校准

在这里插入图片描述

2)ts_print 坐标打印

从一个角落滑到另一个角落,与[0,0]—>[240,320]非常接近!
在这里插入图片描述

3)ts_test 涂鸦

在这里插入图片描述

(六)后记

1、感觉触摸屏input上报的时间很久,感觉很久才触发一次坐标值,是tpadc的配置有问题吗?
2、下次使用xpt2046或者ns2009/ns2016测试一下是否会流畅很多(可惜我的芯片拆掉不知道扔哪去了)
3、多动手折腾一下【狗头】
4、如何手写坐标校准呢?如何存储呢?

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

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

相关文章

大数据技术——Flume简介安装配置使用案例

文章目录1. Flume 概述1.1 Flume简介1.2 Flume的特点1.3 Flume的基础架构2. Flume安装配置2.1 下载地址2.2 安装部署3. Flume 使用案例3.1 实时监控单个追加文件3.2 实时监控目录下多个新文件3.3 实时监控目录下的多个追加文件1. Flume 概述 1.1 Flume简介 Flume是一种可配置、…

【Linux】Linux的环境变量(PATH、env、子进程继承环境变量等)

文章目录环境变量1、从一个小案例认识环境变量PATH2、常用的环境变量相关指令与系统调用3、子进程如何继承环境变量的&#xff1f;4、测试其它环境变量环境变量 1、从一个小案例认识环境变量PATH 我们在shell中通过file查看文件信息&#xff0c;看到我们常使用的指令都是可执…

C++ 类的静态成员详解

目录 前言 一、类的静态成员 1.static关键字 2.静态成员变量 3.静态成员函数 二、程序样例 1.程序演示 2.程序截图 总结 前言 本文记录C中 static 修饰类成员成为静态成员&#xff0c;其中包括静态成员类别、作用和程序演示。 嫌文字啰嗦的可直接跳到最后的总结。 一、类的静…

特征提取 - 骨架、中轴和距离变换

目录 1. 介绍 骨架 skeleton 中轴变换 Medial axis transformation 距离变换 distance transform 2. 距离变换的代码实现 distanceTransform 函数介绍 normalize 函数介绍 取局部最大值 完整代码 3. comparation 1. 介绍 骨架 skeleton 骨架的定义&#xff1a;就是…

【毕业设计】33-基于单片机的直流电机的转速检测与控制设计(原理图工程+PCB工程+源代码工程+仿真工程+答辩论文)

typora-root-url: ./ 【毕业设计】33-基于单片机的直流电机的转速检测与控制设计&#xff08;原理图工程PCB工程源代码工程仿真工程答辩论文&#xff09; 文章目录typora-root-url: ./【毕业设计】33-基于单片机的直流电机的转速检测与控制设计&#xff08;原理图工程PCB工程源…

盘点国内主流数字孪生厂商!你了解几家?

在国内&#xff0c;主流的数字孪生解决方案厂商包括华龙迅达、精航伟泰、羚数智能、力控科技、华力创通、同元软控、优也科技、51world、卡奥斯、摩尔元数、易知微、木棉树软件等。由于中国数字孪生市场仍处于早期发展阶段&#xff0c;且受限于建模、仿真和基于数据融合的数字线…

基于单RGB相机的全新三维表示方法|NeurIPS 2022

随着深度学习的发展&#xff0c;基于单张RGB图像的人体三维重建取得了持续进展。 但基于现有的表示方法&#xff0c;如参数化模型、体素栅格、三角网格和隐式神经表示&#xff0c;难以构筑兼顾高质量结果和实时速度的系统。 针对上述问题&#xff0c;天津大学团队联合清华大学…

Linux用户管理

文章目录一. 引子二. 用户管理1. 用户切换2. 注销用户3. 添加用户4. 设置用户密码5. 删除用户6. 查询用户信息三. 用户组管理1. 新增用户组2. 新增用户时添加组3. 修改用户的组四. 用户和组相关文件1. /etc/passwd2. /etc/shadow3. /etc/group一. 引子 Linux是一个多用户、多任…

【JavaScript作用域】

JavaScript作用域1 本节目标2 作用域2.1 作用域概述2.2 全局作用域2.3 局部作用域3 变量的作用域3.1 变量作用域的分类3.2 全局变量3.3 局部变量3.4 从执行效率看全局变量与局部变量3.5 JS没有块级作用域4 作用域链1 本节目标 说出JavaScript的两种作用域区分全局变量和局部变…

TinyML:是否是FPGA在人工智能方面的最佳应用?

TinyML 也是机器学习的一种&#xff0c;他的特点就是缩小深度学习网络可以在微型硬件中使用&#xff0c;主要应用在智能设备上。超低功耗嵌入式设备正在“入侵”我们的世界&#xff0c;借助新的嵌入式机器学习框架&#xff0c;它们将进一步推动人工智能驱动的物联网设备的普及。…

机器学习:一文从入门到读懂PCA(主成分分析)

深度学习&#xff1a;PCA白化前置知识内积的几何意义基基变换不同基下的向量变换逆矩阵不同基下的空间变换方差协方差协方差矩阵协方差矩阵对角化特征值分解、空间变换主成分分析&#xff08;PCA&#xff09;两个原则公式推导求解流程代码实现PCA的优缺点优点缺点前置知识 维度…

【测试沉思录】18.如何测试微信小程序?

作者&#xff1a;雷远缘 编辑&#xff1a;毕小烦 一. 先知道小程序是什么 啥是小程序&#xff1f; “小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用 “触手可及” 的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了 “用完即走” 的理念&am…

[附源码]Python计算机毕业设计SSM基于Java的民宿运营管理网站(程序+LW)

环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 Maven管理等…

详解 Spring Boot 项目中的配置文件

目录 1. Spring Boot 项目中配日文件的作用是什么 2. Spring Boot 配置文件的两种格式 3. properties 配置文件 3.1 properties 配置文件的基本语法 3.2 properties 配置文件的分类 3.3 如何读取配置文件 3.4 properties 配置文件的优缺点分析 4. yml 配置文件 4.1 yml …

【JavaSE】初识泛型

大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 Java的泛型&#xff0c;会来大家初步了解什么是泛型&#xff0c;以及泛型的使用&#xff0c;感受一手泛型的思想&#xff0c;面向对象编程太爽了~ 目录 一、泛型是什么&#xff1f; 二、泛型的语法 三、包…

Java给图片增加水印,根据图片大小自适应,右下角/斜角/平铺

Hi&#xff0c;I’m Shendi 最近写自己的文件服务器&#xff0c;上传图片时需要自动增加水印&#xff0c;在这里记录一下 文章目录效果展示读取图片从 byte[] 读取图片获取画板绘制水印根据图片大小自适应水印大小右下角文字水印斜角水印平铺水印图片水印输出图片水印就是在图片…

《剑指 Offer 》—58 - I. 翻转单词顺序

《剑指 Offer 》—58 - I. 翻转单词顺序 注意&#xff1a;本题与151 题相同&#xff1a;https://leetcode-cn.com/problems/reverse-words-in-a-string/ 注意&#xff1a;此题对比原题有改动 文章目录《剑指 Offer 》—58 - I. 翻转单词顺序一、题目内容二、个人答案&#xf…

Git 打patch (打补丁)的使用

patch 的使用 一般是diff ,apply ,format-patch,am 1 生成patch git diff > test.patch 这个是打补丁(test.patch自己取的名字,这个命令可以看出没有指定修改的问题所以默认把所有修改的文件都打patch了,同时还需要注意,这里是本地修改的没有执行add缓存的) 如果想指定某…

FPGA实现图像对比度自动调整,提供2套工程源码和技术支持

目录1.算法原理介绍2.HLS算法实现3.工程1介绍&#xff1a;zynq7100实现4.工程2介绍&#xff1a;Kintex7实现5.上板调试验证6.福利&#xff1a;工程源码获取1.算法原理介绍 使用直方图均衡技术实现 使用直方图均衡技术将原始图像的灰度直方图从比较集中的某个灰度区间变成在全部…

学习axure都要经历哪个阶段,如何快速入门

作为初学Axure同学们&#xff0c;正在学习AxureRP在这个过程中&#xff0c;我们应该经历每个阶段&#xff0c;掌握每个阶段的特点&#xff0c;明确如何在不同阶段学习&#xff0c;这样我们才能快速做到axure快速掌握这个工具。还能根据自己的实际工作需要&#xff0c;掌握自己的…