Linux获取/dev/input目录下的event对应的设备

阅读: 评论:0

Linux获取/dev/input目录下的event对应的设备

Linux获取/dev/input目录下的event对应的设备

当我们在Linux操作系统下使用input子系统时,当我们先插鼠标,在插上摄像头与先插摄像头,在插鼠标,操作系统为两个设备分配的event号不是固定的,先插上的是event0,后插上的是event1 。那么问题来了,我们写应用程序,我们怎么知道那个设备对应那个event接口,我们不可能认为指定使用那个接口,因为有时候插播顺序并不一致,下面我用代码来获取event接口。
使用cat /proc/bus/input/devices  
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input2
U: Uniq=
H: Handlers=kbd event2 
B: EV=120013
B: KEY=4 2000000 3803078 f800d001 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7


I: Bus=0011 Vendor=0002 Product=0005 Version=0000
N: Name="ImPS/2 Generic Wheel Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input3
U: Uniq=
H: Handlers=mouse1 event3 
B: EV=7
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103

主要观察打印信息,Name项是不一样的,我们就可以从这里下手,读取到这个名字,然后在这一类中读取event的值。
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>#include <sys/mman.h>//#define DBG_PRINTF(...)  
#define DBG_PRINTF printfchar *command="cat /proc/bus/input/devices > " ;
char *file_path="./";
char  *file_buff;int number;
int find_event()
{int iFd;FILE *tFp;struct stat tStat;char *sub_buff="Handlers=mouse1";  /* according  to mouse name find event number*/char *buff;tFp=fopen(file_path,"r+");    /* check if  file */if(NULL!=tFp){fclose(tFp);system("");}system(command);/* 打开文件 */tFp = fopen(file_path, "r+");if (tFp == NULL){DBG_PRINTF("can't open %sn", file_path);return -1;}iFd = fileno(tFp);fstat(iFd, &tStat);/* mmap the file to mem */file_buff = (unsigned char *)mmap(NULL , tStat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, iFd, 0);if (file_buff== (unsigned char *)-1){DBG_PRINTF("mmap error!n");return -1;}buff=strstr(file_buff,sub_buff);/* in the mem file_buff  find sub_buff name */if(NULL==buff){DBG_PRINTF("can't find %sn",sub_buff);munmap(file_buff, tStat.st_size);return -1;}number=*(buff+strlen(sub_buff)+6);/* 6== event */munmap(file_buff, tStat.st_size);fclose(tFp);return  0;}int main(int argc, char **argv)
{find_event();DBG_PRINTF("event%dn",number-'0');return 0;
}


遇到同样的问题我们可以采取同样的措施,先映射到内存上,再来查找。也可以直接使用fopen打开文件,然后使用fgets函数来读取到buf中,在使用strstr来查找。
查看CPU信息:cat /proc/cpuinfo  
  
查看内存信息:cat /proc/meminfo  
  
查看USB设备:cat /proc/bus/usb/devices  
  
查看键盘和鼠标:cat /proc/bus/input/devices  
  
查看各分区使用情况:df  
查看体系结构:busybox uname -a  
  
查看中断信息:cat /proc/interrupts  

本文发布于:2024-02-04 18:13:49,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170713413758170.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设备   目录下   dev   Linux   event
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23