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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

input驱动12种事件类型Event types的含义

發(fā)布時間:2025/4/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 input驱动12种事件类型Event types的含义 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
linux2.6?input?subsystem中部分相關(guān)結(jié)構(gòu)體的分析
  ?最近在做linux2.6的鍵盤驅(qū)動程序的工作,接觸到了input subsystem這一概念,現(xiàn)把我對其中相關(guān)結(jié)構(gòu)體的理解寫出來。如果我的理解有錯誤,希望大家指正,謝謝! 1.input_dev

說明:輸入子系統(tǒng)(input subsystem)的驅(qū)動層的核心結(jié)構(gòu)。  

頭文件:include/linux/input.h

成員說明

void *private;

???????//不清楚。

char *name;

???????//設(shè)備名字,如鍵盤名字。

char *phys;

???????//設(shè)備文件節(jié)點名,如input/kbd0。

char *uniq;

???????//全球唯一的ID號。

struct input_id id;

???????//后文作詳細(xì)介紹。

unsigned long evbit[NBITS(EV_MAX);]

???????//該設(shè)備驅(qū)動所能支持的事件。

???????//EV_SYN??????同步事件

???????//EV_KEY???????鍵盤事件

???????//EV_REL???????相對坐標(biāo)事件,用于鼠標(biāo)

???????//EV_ABS???????絕對坐標(biāo)事件,用于搖桿

???????//EV_MSC??????其他事件

???????//EV_LED???????LED燈事件

???????//EV_SND??????聲音事件

???????//EV_REP???????重復(fù)按鍵事件

???????//EV_FF?????????受力事件

???????//EV_PWR??????電源事件

???????//EV_FF_STATUS??受力狀態(tài)事件

unsigned long keybit[NBITS(KEY_MAX)];

???????//鍵值存放表

unsigned long relbit[NBITS(REL_MAX)];

???????//用于存放相對坐標(biāo)值等

unsigned long absbit[NBITS(ABS_MAX)];

???????//用于存放絕對坐標(biāo)值等

unsigned long mscbit[NBITS(MSC_MAX)];

???????//存放其他事件類型

unsigned long ledbit[NBITS(LED_MAX)];

???????//存放表示各種狀態(tài)的LED值

unsigned long sndbit[NBITS(SND_MAX)];

???????//存放各種事件的聲音

unsigned long ffbit[NBITS(FF_MAX)];

???????//存放受力設(shè)備的屬性

int ff_effects_max;

???????//顯然與受力效果有關(guān),具體作用還不大清楚。

unsigned int keycodemax;

unsigned int keycodesize;

void * keycode;

???????//這三個不是很清楚,有點模糊理解。

unsigned int repeat_key;

???????//存放重復(fù)按鍵時的鍵值

struct timer_list timer;

???????//定時器

struct pm_dev *pm_dev;

???????//考慮到有些設(shè)備可能有電源管理

struct pt_regs *regs;

???????//不清楚

int state;

???????//顯然是表示一個狀態(tài),但不清楚具體是誰的狀態(tài)

int sync;

???????//具體用于什么也不大清楚

int abs[ABS_MAX + 1];

???????//顯然是與絕對坐標(biāo)有關(guān)的,但具體的作用不清楚。

int rep[REP_MAX + 1];

???????//存放重復(fù)按鍵時的延時,系統(tǒng)依靠這個延時時間來判斷重復(fù)按鍵

???????//rep[0]表示開始要重復(fù)按鍵時的延時時間,即第1個鍵與第2個鍵(開始重復(fù)按鍵)之間的延時

???????//rep[1]此后重復(fù)按鍵之前的延時時間,直到按鍵抬起

???????//通俗解釋就是,假如我按了一個“a”,并且一直按著,那么在顯示出來的第一個a與第二個a之間的時間延時為rep[0],而此后的相鄰兩個a之間的延時為rep[1]

??

unsigned long key[NBITS(KEY_MAX)];

unsigned long led[NBITS(LED_MAX)];

unsigned long snd[NBITS(SND_MAX)];

???????//不知道有什么用

int absmax[ABS_MAX + 1];

int absmin[ABS_MAX + 1];

int absfuzz[ABS_MAX + 1];

int absflat[ABS_MAX + 1];

???????//顯然與絕對坐標(biāo)值有關(guān),但不知道具體作用

?

int (*open)(struct input_dev *dev);

void (*close)(struct input_dev *dev);

int (*accept)(struct input_dev *dev, struct file *file);

int (*flush)(struct input_dev *dev, struct file *file);

int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);

int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);

int (*erase_effect)(struct input_dev *dev, int effect_id);

???????//底層與硬件相關(guān)的一組操作,若有具體定義,則會在input core層被調(diào)用,具體看input.c。

?

struct input_handle *grab;

???????//該結(jié)構(gòu)會在后文做具體介紹,這個指針用于占用輸入設(shè)備用,如鍵盤

struct list_head h_list;

struct list_head node;

???????//h_list鏈表用于與input_handler相聯(lián)系

???????//node鏈表:設(shè)備向輸入子系統(tǒng)(input subsystem)注冊后,會將該鏈表添加到系統(tǒng)維護(hù)的一個鏈表中去,從而系統(tǒng)可以管理這個設(shè)備

總結(jié)

以上是生活随笔為你收集整理的input驱动12种事件类型Event types的含义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。