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

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:按键事件 | 屏幕按键 | 已经松开



这篇关于Day6_TouchEvent的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程