900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】

arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】

时间:2018-07-02 00:11:19

相关推荐

arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】

1、问题

通过一个死循环将读取键盘对应的设备文件将触发键盘事件在屏幕上打印出来,按esc退出程序

代码是在unbuntu10.04编译执行通过的

2、input_event描述

在Linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作就是向系统报告按键、触摸屏、键盘、鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为Input子系统已经完成了文件操作接口

linux/input.h 这个文件定义了event事件的结构体,API和标准按键的编码等;

struct input_event {

struct timeval time; //按键时间

__u16 type; //事件类型

__u16 code; //要模拟成什么按键

__s32 value;//是按下还是释放

};

type,指事件类型,常见的事件类型有:

EV_KEY, 按键事件,如键盘的按键(按下哪个键),鼠标的左键右键(是非击下)等;

EV_REL, 相对坐标,主要是指鼠标的移动事件(相对位移);

EV_ABS, 绝对坐标,主要指触摸屏的移动事件

code:事件的代码.

如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.0~127为键盘上的按键代码

关于按键代码的定义,部分如下所示:

#define KEY_RESERVED 0

#define KEY_ESC 1

#define KEY_1 2

#define KEY_2 3

#define KEY_3 4

#define KEY_4 5

#define KEY_5 6

#define KEY_6 7

#define KEY_7 8

#define KEY_8 9

#define KEY_9 10

#define KEY_0 11

#define KEY_MINUS 12

#define KEY_EQUAL 13

#define KEY_BACKSPACE 14

#define KEY_TAB 15

#define KEY_Q 16

#define KEY_W 17

#define KEY_E 18

#define KEY_R 19

#define KEY_T 20

value:

事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_REL,value的正数值和负数值分别代表两个不同方向的值.

3、相关代码

key_simulator.c

#include

#include

#include

#include

#include

int main ()

{

int keys_fd;

char ret[2];

struct input_event t;

keys_fd = open ("/dev/input/event2", O_RDONLY);

if (keys_fd <= 0)

{

printf ("open /dev/input/event2 device error!\n");

return 0;

}

while (1)

{

if (read (keys_fd, &t, sizeof (t)) == sizeof (t))

{

if (t.type == EV_KEY)

if (t.value == 0 || t.value == 1)

{

printf ("key %d %s\n", t.code,

(t.value) ? "Pressed" : "Released");

if(t.code==KEY_ESC)

break;

}

}

}

close (keys_fd);

return 0;

}

4、注意问题

1)不同的类型计算机,设备对应event信息会有所不同

可以用cat获得的设备对应event信息:

# cat /proc/bus/input/devices

I: Bus=0019 Vendor=0000 Product=0001 Version=0000

N: Name="Power Button"

P: Phys=LNXPWRBN/button/input0

S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0

U: Uniq=

H: Handlers=kbd event0

B: EV=3

B: KEY=100000 0 0 0

I: Bus=0017 Vendor=0001 Product=0001 Version=0100

N: Name="Macintosh mouse button emulation"

P: Phys=

S: Sysfs=/devices/virtual/input/input1

U: Uniq=

H: Handlers=mouse0 event1

B: EV=7

B: KEY=70000 0 0 0 0 0 0 0 0

B: REL=3

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

I line:这行包含身份信息,显示了 bus type是 3 (usb), vendor, product, version等信息。

N line:这行包含了名字信息。

P line:这行包含了物理设备信息。

H line: 这行包含了与设备关联的 handler drivers。

B line: 这些行包含了显示设备能力的一些位域 (bitfield)。

我的键盘对应的事件类型是event2

2)open /dev/input/event2 device error

需要使用sudo或者改变设备的属性

如下:

sudo ./key_simulator

或者

chmod 777 /dev/input/event2

本文欢迎转载,转载请注明作者与出处

作者:流星

Linux 下获取LAN中指定IP的网卡的MAC(物理地址)

// all.h// /06/20,a.m. wenxy #ifndef _ALL_H#define _ALL_H #include #include < ...

Linux下获取硬盘使用情况

Linux下获取硬盘使用情况[总结] 1.前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃.为了捕获硬盘写满的异常场 ...

&period;net core在Linux下获取AD域信息

.net core在Linux下获取AD域信息 .net Core 2.1.4 .net core现在System.DirectoryServices只支持Windows平台下使用. 参考: http ...

Linux下获取和设置IP

在Linux下获取关于IP和网关的操作:重点是对struct ifreq 的操作. 那么进入目录/usr/include/net/if.h下看查找struct ifreq结构体. /* Interfa ...

window&sol;linux下获取文件MD5

MD5消息摘要算法(英语: MD5 Message-Digest Algorithm), 主要用于确保信息传输过程的一致性校验. 首先介绍两个工具: window: WinMD5Free Linu ...

Linux下获取本机IP地址的代码

Linux下获取本机IP地址的代码,返回值即为互联网标准点分格式的字符串. #define ETH_NAME "eth0" //获得本机IP地址 char* GetLocalAdd ...

linux下获取占用CPU资源最多的10个进程

linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

Linux下获取arm的交叉编译工具链

转载请注明文章:Linux下获取arm的交叉编译工具链出处:多客博图 这里介绍,Linux下获取arm的交叉编译工具链,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...

在Windows及Linux下获取毫秒级运行时间的方法

在Windows下获取毫秒级运行时间的方法 头文件: 函数原型: /*获取时钟频率,保存在结构LARGE_INTEGER中***/ WINBASEAPI BOOL W ...

随机推荐

MySql&colon; 忘记root密码

win7 + mysql5.6.35 C:\Windows\system32>mysql --versionmysql Ver 14.14 Distrib 5.6.35, for Win64 ...

读javascript高级程序设计15-Ajax&comma;CORS&comma;JSONP&comma;Img Ping

平时用惯了jQuery.ajax之类的方法,却时常忽略了它背后的实现,本文是学习了AJAX基础及几种跨域解决方案之后的一些收获. 一.AJAX——XMLHttpRequest 谈起Ajax我们都很熟悉 ...

200 OK &lpar;from cache&rpar; 与 304 Not Modified

解释: 200 OK (from cache) 是浏览器没有跟服务器确认,直接用了浏览器缓存: 304 Not Modified 是浏览器和服务器多确认了一次缓存有效性,再用的缓存. 触发区别: 2 ...

ASP&period;NET MVC 学习2、从Controller传递数据到View

参考:/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view 一,Control ...

BZOJ 1048 &lbrack;HAOI&rsqb;分割矩阵

1048: [HAOI]分割矩阵 Time Limit:10 SecMemory Limit:162 MBSubmit:623Solved:449[Submit][Status ...

ccf练习---节日

问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形式定下来的,比如说母亲节就定为每年的五月的第二个星期日. 现在,给你a,b,c和y1, y2(1850 ≤ y1, y2≤ 2 ...

JavaMail收发邮件的一般流程与主要方法

1.Properties属性类 Properties p = new Properties(); p.put(key, value); key -|mail.smtp.host -|mail.sm ...

iOS 获取高速随机路径sandbox目录

NSLog(@"%@", NSHomeDirectory());//沙盒主目录 NSLog(@"%@", NSTemporaryDirectory());//砂 ...

用C语言实现Ping程序功能

本文转载自:/developerworks/cn/linux/network/ping/ ping命令是用来查看网络上另一个主机系统的网络连接是否正常的一个工具.p ...

php优秀框架codeigniter学习系列——CI&lowbar;Lang类学习

这篇文章主要介绍CI核心框架工具类CI_Lang. 根据CI文档自己的定义,该类用来: 提供相关的函数,用于检索语言文件和文本行,以便国际化. 以下选取类中的重点方法进行说明. __construct ...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。