Day6_TouchEvent
2022/5/23 23:22:52
本文主要是介绍Day6_TouchEvent,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 1.输入事件
- 简化表格:
- 2.实例程序
- touch.h文件
- touch.c文件
- main.c文件
- 分析:
1.输入事件
输入设备(键盘,鼠标,触摸屏,游戏手柄.....),都属于输入的子系统 特点 : 你不知道他什么时候输入,当我们输入的时候,我们称之为输入事件 触摸屏对GEC6818的一个文件 : /dev/input/event0
struct input_event{ struct timeval time; _u16 type; _u16 code; _s32 value; }; @type :表示事件的类型 区分是什么事件 #define EV_KEY 0x01 按键事件 #define EV_REL 0x02 (relative) 相对事件: 鼠标 #define EV_ABS 0x03 (absolute) 绝对事件: 触摸屏 @code if type == EV_KEY code键值, 区分按下的是哪个键 #define KEY_ESC 1 #define KEY_1 2 #define KEY_2 3 #define KEY_3 4 #define KEY_4 5 。。。。。 #define BTN_TOUCH 0x14a //触摸屏的按键 if type == EV_REL code就是相对的坐标轴 区分是哪个轴 #define REL_X 0x00 #define REL_Y 0x01 #define REL_Z 0x02 。。。。。 if type == EV_ABS code就是绝对坐标轴 #define ABS_X 0x00 #define ABS_Y 0x01 。。。。。。 #define ABS_PRESSURE 0x18//触摸屏的压力值 @value if type == EV_KEY code == KEY_ESC value按键的状态值 按键的状态 按下 1 松开 0 if type == EV_ABS code == ABS_X value是x轴的坐标 if type == EV_ABS code == ABS_Y value是y轴的坐标 if type == EV_ABS code == ABS_PRESSURE value是压力值
简化表格:
type | ture number | code | ture number | value meaning |
---|---|---|---|---|
EV_KEY | 0x01 | KEY_ESC | 0x01 | 按键的状态:1按0松 |
KEY_X | 0x0X | 按键的状态:1按0松 | ||
... | ... | 按键的状态:1按0松 | ||
BTN_TOUCH | 0x14a | 按键的状态:1按0松 | ||
EV_REL | 0x02 | REL_X | 0x00 | x轴 |
REL_Y | 0x01 | y轴 | ||
REL_Z.. | 0x02 | z轴 | ||
... | ... | ... | ||
EV_ABS | 0x03 | ABS_X | 0x00 | x轴的坐标 |
ABS_Y | 0x01 | y轴的坐标 | ||
ABS_PRESSURE | 0x18 | 压力值 |
2.实例程序
touch.h文件
#ifndef __TOUCH_H__ #define __TOUCH_H__ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <stdio.h> #include <linux/input.h>//输入子系统 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 void getTouch(); #endif
touch.c文件
#include "touch.h" //获取坐标 void getTouch() { int x=-1,y=-1; //1.打开触摸屏 int fd = open("/dev/input/event0",O_RDONLY); if(-1 == fd) { perror("open ScreenTouch failed\n"); return ; } //2.操作 struct input_event ev; while(1) { read(fd,&ev,sizeof(ev)); printf("type =%d,code=%d,value=%d\n",ev.type,ev.code,ev.value); if(ev.type == EV_ABS && ev.code == ABS_X )//触摸屏的x轴 { x = ev.value *(1.0*800/1040); } if(ev.type == EV_ABS && ev.code == ABS_Y )//触摸屏的y轴 { y = ev.value*(1.0*480/600); } printf("( %d , %d )\n",x,y); if(ev.type == EV_KEY && ev.code == BTN_TOUCH && ev.value == 0 ) //手指松开 { break;//一次获取 } } //3.关闭 close(fd); }
main.c文件
#include"touch.h" int main() { getTouch(); }
分析:
type=3,code=0,value=307:屏幕事件 | x轴坐标 | x=307
type=3,code=1,value=338:屏幕事件 | y轴坐标 | y=338
type=1,code=330,value=1:按键事件 | 屏幕按键 | 已经摁下
type=0,code=0,value=0:应该是系统事件,不太清楚
type=1,code=330,value=0:按键事件 | 屏幕按键 | 已经松开
这篇关于Day6_TouchEvent的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享