日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

說明:輸入子系統(input subsystem)的驅動層的核心結構。  

頭文件:include/linux/input.h

成員說明

void *private;

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

char *name;

???????//設備名字,如鍵盤名字。

char *phys;

???????//設備文件節點名,如input/kbd0。

char *uniq;

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

struct input_id id;

???????//后文作詳細介紹。

unsigned long evbit[NBITS(EV_MAX);]

???????//該設備驅動所能支持的事件。

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

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

???????//EV_REL???????相對坐標事件,用于鼠標

???????//EV_ABS???????絕對坐標事件,用于搖桿

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

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

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

???????//EV_REP???????重復按鍵事件

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

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

???????//EV_FF_STATUS??受力狀態事件

unsigned long keybit[NBITS(KEY_MAX)];

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

unsigned long relbit[NBITS(REL_MAX)];

???????//用于存放相對坐標值等

unsigned long absbit[NBITS(ABS_MAX)];

???????//用于存放絕對坐標值等

unsigned long mscbit[NBITS(MSC_MAX)];

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

unsigned long ledbit[NBITS(LED_MAX)];

???????//存放表示各種狀態的LED值

unsigned long sndbit[NBITS(SND_MAX)];

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

unsigned long ffbit[NBITS(FF_MAX)];

???????//存放受力設備的屬性

int ff_effects_max;

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

unsigned int keycodemax;

unsigned int keycodesize;

void * keycode;

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

unsigned int repeat_key;

???????//存放重復按鍵時的鍵值

struct timer_list timer;

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

struct pm_dev *pm_dev;

???????//考慮到有些設備可能有電源管理

struct pt_regs *regs;

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

int state;

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

int sync;

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

int abs[ABS_MAX + 1];

???????//顯然是與絕對坐標有關的,但具體的作用不清楚。

int rep[REP_MAX + 1];

???????//存放重復按鍵時的延時,系統依靠這個延時時間來判斷重復按鍵

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

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

???????//通俗解釋就是,假如我按了一個“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];

???????//顯然與絕對坐標值有關,但不知道具體作用

?

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);

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

?

struct input_handle *grab;

???????//該結構會在后文做具體介紹,這個指針用于占用輸入設備用,如鍵盤

struct list_head h_list;

struct list_head node;

???????//h_list鏈表用于與input_handler相聯系

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。