RK3568笔记十五:触摸屏测试

若该文为原创文章,转载请注明原文出处。

使用正点原子的ATK-RK3568板子,一直在测试屏幕和视频,突然想到触摸屏测试,一直没有用过,原子给的demo跑的是QT系统,触摸功能是正常的,测试一下,并记录。

一 、环境

1、平台:rk3568

2、开发板: ATK-RK3568正点原子板子

3、环境:buildroot

二、关闭QT系统

打开板子终端,输入ps -x

打到QT的那个PID

这里不能直接使用kill,需要使用bin下的kill,既 在次查看ps,会发现已经被结束了。

三、触摸测试

检查event编号

复制代码
hexdump /dev/input/event2

经测试我的屏幕是event2,自行测试

按触摸屏会输出信息的就是触摸屏对应文件

0000000 3cb7 5984 0000 0000 f07b 0001 0000 0000

0000010 0003 0039 0000 0000 3cb7 5984 0000 0000

0000020 f07b 0001 0000 0000 0003 0035 01a0 0000

0000030 3cb7 5984 0000 0000 f07b 0001 0000 0000

0000040 0003 0036 0209 0000 3cb7 5984 0000 0000

0000050 f07b 0001 0000 0000 0003 0030 0019 0000

0000060 3cb7 5984 0000 0000 f07b 0001 0000 0000

0000070 0003 0032 0019 0000 3cb7 5984 0000 0000

0000080 f07b 0001 0000 0000 0000 0000 0000 0000

0000090 3cb7 5984 0000 0000 aa61 0003 0000 0000

00000a0 0003 0035 019e 0000 3cb7 5984 0000 0000

四、触摸屏获取坐标

1、触摸屏代码的思路

第一步:打开触摸屏的驱动("/dev/input/event2")

第二步:读取触摸屏的坐标

第三步:关闭触摸屏

2、输入子系统模型

概念:linux把所有输入类型设备(键盘,鼠标,触摸屏)的驱动统一成了一个模型-->输入子系统模型

linux为了统一,就搞出了输入子系统模型这个概念,所有的人开发linux上键盘,鼠标,触摸屏的驱动都必须按照输入子系统模型规定好的参数,变量去写代码

linux提供的跟输入子系统模型有关的头文件

/usr/include/linux/input.h

输入子系统模型中的重要结构体

复制代码
struct input_event
{
    type; //表示事件类型  EV_KEY 键盘的驱动   EV_ABS 触摸屏的驱动
    code; //表示按键的键值,x,y坐标  ABS_X    ABS_Y
    value; //表示坐标值
}

3、测试源码

复制代码
/*************************************************
*头文件
*************************************************/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <linux/input.h>

#define TS_PATH "/dev/input/event2"

int get_input_evnet(void)
{
	//1.打开触摸屏文件
    int fd = open(TS_PATH, O_RDWR);
    if (fd == -1)
    {
        perror("open failed!");
        return -1;
    }
    //2.读取触摸屏文件数据
    struct input_event xy;
	int x, y;	   //存放点击屏幕的横纵坐标
	int flag = 0;  //记录当前获取坐标的信息
    while (1)
    {
        read(fd, &xy, sizeof(xy));
		printf("type:0x%2x\tcode:0x%2x\tvalue:%d\n",xy.type,xy.code,xy.value);
		
		// EV_ABS 0x03 绝对坐标,如触摸屏上报的坐标
		// type:0x 3       code:0x39       value:0
        // type:0x 3       code:0x35       value:669
        // type:0x 3       code:0x36       value:1224
		
        if(xy.type == EV_ABS && xy.code == 0x35)
        {
            x = xy.value;    //获取点击的时候X轴坐标的值 (0~1024)--> (0~800)
			flag = 1;
			printf("flag = 1\n");
        }
		if(xy.type == EV_ABS && xy.code == 0x36)
        {
            y = xy.value;	 //获取点击的时候Y轴坐标的值 (0~600)-->(0~480)
			flag = 2;
			printf("flag = 2\n");
        }
        //设置条件:每读取一次完整的坐标,就打印一次坐标
		if(flag == 2)
		{
			printf("(%d,%d)\n", x, y);
			flag = 0;
			//break;//获取一次坐标就跳出循环
        }
    }
    //3.关闭触摸屏文件
	close(fd);
    return 0;
}


int main(void)
{

	get_input_evnet();
	
	return 0;
}

编译

复制代码
/opt/atk-dlrk356x-toolchain/usr/bin/aarch64-buildroot-linux-gnu-g++ touch_test.cpp -o touch_test

把编译后的可执行文件上传到开发板上运行,输出的坐标基本可以对应得上。

如有侵权,或需要完整代码,请及时联系博主。

相关推荐
老王熬夜敲代码2 小时前
C++继承回顾
c++·笔记
摇滚侠3 小时前
Spring Boot3零基础教程,整合 SSM,笔记52
java·spring boot·笔记
lbai71344 小时前
Perf-Ninja听课笔记 - 环境配置及Warmup
笔记·性能优化
递归不收敛4 小时前
四、高效注意力机制与模型架构
人工智能·笔记·自然语言处理·架构
陈苏同学5 小时前
笔记1.4:机器人学的语言——三维空间位姿描述 (旋转矩阵 - 齐次变换矩阵 - 欧拉角 - 四元数高效表示旋转)
笔记·线性代数·算法·机器人
岑梓铭5 小时前
考研408《计算机组成原理》复习笔记,第五章(5)——CPU的【指令流水线(含中断)】
笔记·考研·408·计算机组成原理·计组
递归不收敛6 小时前
多模态学习大纲笔记(未完成)
人工智能·笔记·学习·自然语言处理
摇滚侠7 小时前
Spring Boot3零基础教程,Profile 环境隔离用法,笔记55
java·spring boot·笔记
新子y8 小时前
【小白笔记】input() 和 print() 这两个函数
笔记·python
雾岛听蓝8 小时前
C语言:使用顺序表实现通讯录
c语言·数据结构·经验分享·笔记·visualstudio