Programação de aplicativos em ambiente Linux (8): Sistema de entrada

Um: sistema de entrada

Introdução ao sistema de entrada e referência do driver: https://blog.csdn.net/qq_34968572/article/details/89875957

Leitura e análise de eventos do sistema de entrada:

1. Obtenha instruções de informações do dispositivo relacionadas ao evento:

cat /proc/bus/input/devices

O significado correspondente dos parâmetros:

I: ID do dispositivo

struct input_id {
	__u16 bustype; //总线类型
	__u16 vendor;  //与厂商相关的ID
	__u16 product; //与产品相关的ID
	__u16 version; //版本号
};

N: nome do dispositivo

P: O caminho físico do dispositivo na hierarquia do sistema

S: o caminho localizado no sistema de arquivos sys

U: o código de identificação único do dispositivo

H: Lista de identificadores de entrada associados ao dispositivo

B: bitmap

PROP:设备属性。
EV:设备支持的事件类型。
KEY:此设备具有的键/按钮。
MSC:设备支持的其他事件。
LED:设备上的指示灯。

2. Veja os comandos do evento:

hexdump /dev/input/event1

Primeiro observe a estrutura do tipo de evento de evento no kernel e, em seguida, analise um evento do mouse de acordo com o comando hexdump:

struct timeval {
	__kernel_time_t		tv_sec;		/* seconds */
	__kernel_suseconds_t	tv_usec;	/* microseconds */
};

struct input_event {
	struct timeval time;
	__u16 type;
	__u16 code;
	__s32 value;
};

Coluna 1: número de série hexdump

2 ~ 3 colunas: segundos

Colunas 4 ~ 5: sutil

6 colunas: tipo de evento, evento relativo, evento absoluto, etc.

/*
 * Event types
 */

#define EV_SYN			0x00  同步事件
#define EV_KEY			0x01  按键事件
#define EV_REL			0x02  相对事件
#define EV_ABS			0x03  绝对事件
#define EV_MSC			0x04
#define EV_SW			0x05
#define EV_LED			0x11
#define EV_SND			0x12
#define EV_REP			0x14
#define EV_FF			0x15
#define EV_PWR			0x16
#define EV_FF_STATUS		0x17
#define EV_MAX			0x1f
#define EV_CNT			(EV_MAX+1)

Coluna 7: Valor do evento. Para eventos relativos, como o mouse, o código representa a coordenada x ou y em relação à posição atual do mouse

/*
 * Keys and buttons
 *
 * Most of the keys/buttons are modeled after USB HUT 1.12
 * (see http://www.usb.org/developers/hidpage).
 * Abbreviations in the comments:
 * AC - Application Control
 * AL - Application Launch Button
 * SC - System Control
 */

#define KEY_RESERVED		0
#define KEY_ESC			1
#define KEY_1			2
#define KEY_2			3
#define KEY_3			4
#define KEY_4			5
... ...

Coluna 8: O significado do valor correspondente do dispositivo específico, que é expresso como o deslocamento em relação à posição atual

Dois: Aplicação

struct input_event event_mouse ;
int fd    = -1 ;

fd = open("/dev/input/event2", O_RDONLY);
read(fd, &event_mouse, sizeof(event_mouse));
if(EV_ABS == event_mouse.type || EV_REL == event_mouse.type)
{
//code表示相对位移X或者Y,当判断是X时,打印X的相对位移value
//当判断是Y时,打印Y的相对位移value
if(event_mouse.code == REL_X)
{
    printf("event_mouse.code_X:%d\n", event_mouse.code);
    printf("event_mouse.value_X:%d\n", event_mouse.value);
}
else if(event_mouse.code == REL_Y)
{
    printf("event_mouse.code_Y:%d\n", event_mouse.code);
    printf("event_mouse.value_Y:%d\n", event_mouse.value);
}

 

Acho que você gosta

Origin blog.csdn.net/qq_34968572/article/details/107403611
Recomendado
Clasificación