⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 input.c

📁 主要是对Linux输入子系统的一些简单操作 比如lsinput是看有多少输入设备 比如input-events是看输入设备的键值 用来调试输入子系统很好
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <inttypes.h>#include "input.h"/* ------------------------------------------------------------------ */char *EV_NAME[EV_MAX] = {#include "EV.h"};char *REL_NAME[REL_MAX] = {#include "REL.h"};char *KEY_NAME[KEY_MAX] = {#include "KEY.h"#include "BTN.h"};char *BUS_NAME[] = {#include "BUS.h"};/* ------------------------------------------------------------------ */int device_open(int nr, int verbose){	char filename[32];	int fd, version;	snprintf(filename,sizeof(filename),		 "/dev/input/event%d",nr);	fd = open(filename,O_RDONLY);	if (-1 == fd) {		fprintf(stderr,"open %s: %s\n",			filename,strerror(errno));		return -1;	}	if (verbose)		fprintf(stderr,"%s\n",filename);	if (-1 == ioctl(fd,EVIOCGVERSION,&version)) {		perror("ioctl EVIOCGVERSION");		close(fd);		return -1;	}	if (EV_VERSION != version) {		fprintf(stderr, "protocol version mismatch (expected %d, got %d)\n",			EV_VERSION, version);		close(fd);		return -1;	}	return fd;}void device_info(int fd){	struct input_id id;	BITFIELD bits[32];	char buf[32];	int rc,bit;	rc = ioctl(fd,EVIOCGID,&id);	if (rc >= 0)		fprintf(stderr,			"   bustype : %s\n"			"   vendor  : 0x%x\n"			"   product : 0x%x\n"			"   version : %d\n",			BUS_NAME[id.bustype],			id.vendor, id.product, id.version);	rc = ioctl(fd,EVIOCGNAME(sizeof(buf)),buf);	if (rc >= 0)		fprintf(stderr,"   name    : \"%.*s\"\n",rc,buf);	rc = ioctl(fd,EVIOCGPHYS(sizeof(buf)),buf);	if (rc >= 0)		fprintf(stderr,"   phys    : \"%.*s\"\n",rc,buf);	rc = ioctl(fd,EVIOCGUNIQ(sizeof(buf)),buf);	if (rc >= 0)		fprintf(stderr,"   uniq    : \"%.*s\"\n",rc,buf);	rc = ioctl(fd,EVIOCGBIT(0,sizeof(bits)),bits);	if (rc >= 0) {		fprintf(stderr,"   bits ev :");		for (bit = 0; bit < rc*8 && bit < EV_MAX; bit++) {			if (test_bit(bit,bits))				fprintf(stderr," %s", EV_NAME[bit]);		}		fprintf(stderr,"\n");	}	fprintf(stderr,"\n");}/* ------------------------------------------------------------------ */void print_event(struct input_event *event){	char ts[32];	time_t t;	t = event->time.tv_sec;	strftime(ts,sizeof(ts),"%H:%M:%S",localtime(&t));	fprintf(stderr,"%s.%06ld: %s",ts,event->time.tv_usec,		EV_NAME[event->type]);	switch (event->type) {	case EV_KEY:		fprintf(stderr," %s %s",			KEY_NAME[event->code],			event->value ? "pressed" : "released");		break;	case EV_REL:		fprintf(stderr," %s %d",			REL_NAME[event->code], event->value);		break;	default:		fprintf(stderr," code=%u value=%d",			(unsigned int)event->code, event->value);	}	fprintf(stderr,"\n");}/* --------------------------------------------------------------------- * Local variables: * c-basic-offset: 8 * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -