标签:code Day6 value ABS EV type TouchEvent define
目录
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:按键事件 | 屏幕按键 | 已经松开
标签:code,Day6,value,ABS,EV,type,TouchEvent,define
来源: https://www.cnblogs.com/jfbk/p/16302780.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。