日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 默认站点!

默认站点

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2023/11/27 34 豆豆
默认站点 收集整理的這篇文章主要介紹了 arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、問(wèn)題

通過(guò)一個(gè)死循環(huán)將讀取鍵盤(pán)對(duì)應(yīng)的設(shè)備文件將觸發(fā)鍵盤(pán)事件在屏幕上打印出來(lái),按esc退出程序

代碼是在unbuntu10.04編譯執(zhí)行通過(guò)的

2、input_event描述

在Linux內(nèi)核中,input設(shè)備用input_dev結(jié)構(gòu)體描述,使用input子系統(tǒng)實(shí)現(xiàn)輸入設(shè)備驅(qū)動(dòng)的時(shí)候,驅(qū)動(dòng)的核心工作就是向系統(tǒng)報(bào)告按鍵、觸摸屏、鍵盤(pán)、鼠標(biāo)等輸入事件(event,通過(guò)input_event結(jié)構(gòu)體描述),不再需要關(guān)心文件操作接口,因?yàn)镮nput子系統(tǒng)已經(jīng)完成了文件操作接口

linux/input.h 這個(gè)文件定義了event事件的結(jié)構(gòu)體,API和標(biāo)準(zhǔn)按鍵的編碼等;

struct input_event {

struct timeval time;? //按鍵時(shí)間

__u16 type; //事件類型

__u16 code; //要模擬成什么按鍵

__s32 value;//是按下還是釋放

};

type,指事件類型,常見(jiàn)的事件類型有:

EV_KEY, 按鍵事件,如鍵盤(pán)的按鍵(按下哪個(gè)鍵),鼠標(biāo)的左鍵右鍵(是非擊下)等;

EV_REL, 相對(duì)坐標(biāo),主要是指鼠標(biāo)的移動(dòng)事件(相對(duì)位移);

EV_ABS, 絕對(duì)坐標(biāo),主要指觸摸屏的移動(dòng)事件

code:事件的代碼.

如果事件的類型代碼是EV_KEY,該代碼code為設(shè)備鍵盤(pán)代碼.0~127為鍵盤(pán)上的按鍵代碼

關(guān)于按鍵代碼的定義,部分如下所示:

#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,當(dāng)按鍵按下時(shí)值為1,松開(kāi)時(shí)值為0;如果事件的類型代碼是EV_REL,value的正數(shù)值和負(fù)數(shù)值分別代表兩個(gè)不同方向的值.

3、相關(guān)代碼

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、注意問(wèn)題

1)不同的類型計(jì)算機(jī),設(shè)備對(duì)應(yīng)event信息會(huì)有所不同

可以用cat獲得的設(shè)備對(duì)應(yīng)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:這行包含了物理設(shè)備信息。

H line: 這行包含了與設(shè)備關(guān)聯(lián)的 handler drivers。

B line: 這些行包含了顯示設(shè)備能力的一些位域 (bitfield)。

我的鍵盤(pán)對(duì)應(yīng)的事件類型是event2

2)open /dev/input/event2 device error

需要使用sudo或者改變?cè)O(shè)備的屬性

如下:

sudo ./key_simulator

或者

chmod 777 /dev/input/event2

本文歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者與出處

作者:流星

Linux 下獲取LAN中指定IP的網(wǎng)卡的MAC(物理地址)

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

Linux下獲取硬盤(pán)使用情況

Linux下獲取硬盤(pán)使用情況[總結(jié)] 1.前言 在嵌入式設(shè)備中,硬盤(pán)空間非常有限,在涉及到經(jīng)常寫(xiě)日志的進(jìn)程時(shí)候,需要考慮日志的大小和刪除,不然很快就硬盤(pán)寫(xiě)滿,導(dǎo)致日志程序崩潰.為了捕獲硬盤(pán)寫(xiě)滿的異常場(chǎng) ...

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

.net core在Linux下獲取AD域信息 .net Core 2.1.4 .net core現(xiàn)在System.DirectoryServices只支持Windows平臺(tái)下使用. 參考: http ...

Linux下獲取和設(shè)置IP

在Linux下獲取關(guān)于IP和網(wǎng)關(guān)的操作:重點(diǎn)是對(duì)struct ifreq 的操作. 那么進(jìn)入目錄/usr/include/net/if.h下看查找struct ifreq結(jié)構(gòu)體. /* Interfa ...

window&sol;linux下獲取文件MD5

MD5消息摘要算法(英語(yǔ): MD5 Message-Digest Algorithm), 主要用于確保信息傳輸過(guò)程的一致性校驗(yàn). ? 首先介紹兩個(gè)工具: window: WinMD5Free Linu ...

Linux下獲取本機(jī)IP地址的代碼

Linux下獲取本機(jī)IP地址的代碼,返回值即為互聯(lián)網(wǎng)標(biāo)準(zhǔn)點(diǎn)分格式的字符串. #define ETH_NAME "eth0" //獲得本機(jī)IP地址 char* GetLocalAdd ...

linux下獲取占用CPU資源最多的10個(gè)進(jìn)程

linux下獲取占用CPU資源最多的10個(gè)進(jìn)程,可以使用如下命令組合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下獲取占用 ...

Linux下獲取arm的交叉編譯工具鏈

轉(zhuǎn)載請(qǐng)注明文章:Linux下獲取arm的交叉編譯工具鏈?出處:多客博圖 這里介紹,Linux下獲取arm的交叉編譯工具鏈,比如arm-linux-gnueabihf-gcc.arm-linux-gne ...

在Windows及Linux下獲取毫秒級(jí)運(yùn)行時(shí)間的方法

在Windows下獲取毫秒級(jí)運(yùn)行時(shí)間的方法 頭文件: 函數(shù)原型: /*獲取時(shí)鐘頻率,保存在結(jié)構(gòu)LARGE_INTEGER中***/ WINBASEAPI BOOL W ...

隨機(jī)推薦

MySql&colon; 忘記root密碼

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

讀javascript高級(jí)程序設(shè)計(jì)15-Ajax&comma;CORS&comma;JSONP&comma;Img Ping

平時(shí)用慣了jQuery.ajax之類的方法,卻時(shí)常忽略了它背后的實(shí)現(xiàn),本文是學(xué)習(xí)了AJAX基礎(chǔ)及幾種跨域解決方案之后的一些收獲. 一.AJAX——XMLHttpRequest 談起Ajax我們都很熟悉 ...

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

解釋: 200 OK (from cache)? 是瀏覽器沒(méi)有跟服務(wù)器確認(rèn),直接用了瀏覽器緩存: 304 Not Modified 是瀏覽器和服務(wù)器多確認(rèn)了一次緩存有效性,再用的緩存. 觸發(fā)區(qū)別: 2 ...

ASP&period;NET MVC 學(xué)習(xí)2、從Controller傳遞數(shù)據(jù)到View

參考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view 一,Control ...

BZOJ 1048 &lbrack;HAOI2007&rsqb;分割矩陣

1048: [HAOI2007]分割矩陣 Time Limit:?10 Sec??Memory Limit:?162 MBSubmit:?623??Solved:?449[Submit][Status ...

ccf練習(xí)---節(jié)日

問(wèn)題描述 有一類節(jié)日的日期并不是固定的,而是以“a月的第b個(gè)星期c”的形式定下來(lái)的,比如說(shuō)母親節(jié)就定為每年的五月的第二個(gè)星期日. 現(xiàn)在,給你a,b,c和y1, y2(1850 ≤ y1, y2?≤ 2 ...

JavaMail收發(fā)郵件的一般流程與主要方法

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

iOS 獲取高速隨機(jī)路徑sandbox目錄

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

用C語(yǔ)言實(shí)現(xiàn)Ping程序功能

本文轉(zhuǎn)載自:http://www.ibm.com/developerworks/cn/linux/network/ping/ ping命令是用來(lái)查看網(wǎng)絡(luò)上另一個(gè)主機(jī)系統(tǒng)的網(wǎng)絡(luò)連接是否正常的一個(gè)工具.p ...

php優(yōu)秀框架codeigniter學(xué)習(xí)系列——CI&lowbar;Lang類學(xué)習(xí)

這篇文章主要介紹CI核心框架工具類CI_Lang. 根據(jù)CI文檔自己的定義,該類用來(lái): 提供相關(guān)的函數(shù),用于檢索語(yǔ)言文件和文本行,以便國(guó)際化. 以下選取類中的重點(diǎn)方法進(jìn)行說(shuō)明. __construct ...

總結(jié)

以上是默认站点為你收集整理的arm shell 获取本地键盘输入值_linux下获取按键响应事件【转】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得默认站点網(wǎng)站內(nèi)容還不錯(cuò),歡迎將默认站点推薦給好友。