ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Day6_TouchEvent

2022-05-23 21:03:18  阅读:174  来源: 互联网

标签: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();
}

image-20220521205433085

分析:

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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有