中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

成都三合一網(wǎng)站建設(shè)蘇州網(wǎng)絡(luò)公司

成都三合一網(wǎng)站建設(shè),蘇州網(wǎng)絡(luò)公司,綿陽網(wǎng)站建設(shè)優(yōu)化,福州專業(yè)做網(wǎng)站關(guān)于輸入類設(shè)備的系統(tǒng)有touch、按鍵、鼠標(biāo)等,在系統(tǒng)中,命令行也是輸入類系統(tǒng)。但是GUI的引入,不同輸入類設(shè)備數(shù)量不斷提升,帶來麻煩,所以出現(xiàn)了struct input_event。 struct input_event {struct timeval time;//內(nèi)核…

? ? ? ? 關(guān)于輸入類設(shè)備的系統(tǒng)有touch、按鍵、鼠標(biāo)等,在系統(tǒng)中,命令行也是輸入類系統(tǒng)。但是GUI的引入,不同輸入類設(shè)備數(shù)量不斷提升,帶來麻煩,所以出現(xiàn)了struct input_event。

struct input_event {struct timeval time;//內(nèi)核用于描述時間點的時間結(jié)構(gòu)體__u16 type;//什么類型的事件(如案件類)__u16 code;//什么按鍵(如按鍵1)__s32 value;//值(按下)
};//去描述一次輸入類事件

? ? ? ? input子系統(tǒng)分為四個部分:應(yīng)用層、input_event(事件,是驅(qū)動層到應(yīng)用層)+input_core(核心,就是框架)+硬件驅(qū)動。

? ? ? ? 中斷事件去喚醒input子系統(tǒng),從驅(qū)動->input_core->input_event->應(yīng)用層,向應(yīng)用層返回一個input_event。

? ? ? ? 事件驅(qū)動里的GUI框架:QT(信號與槽),VC等。等待事件發(fā)生,執(zhí)行下一步過程,等待過程中,處于平衡狀態(tài)。應(yīng)用層的信號與槽可以理解為嵌入式系統(tǒng)中的中斷與中斷處理程序。

? ? ? ? 應(yīng)用層的使用方法:/device設(shè)備文件;/sys屬性文件。

? ? ? ? 但是input子系統(tǒng)等的為/dev/input/xxx(event n n=0、1、2......)。使用cat去確認(rèn)event對應(yīng)的設(shè)備,但是cat去read一個input設(shè)備時,若無輸入則會阻塞,直到有輸入信息出現(xiàn)。

int fd = -1, ret = -1;
struct input_event ev;fd = open(DEVICE_KEY, O_RDONLY);
if (fd < 0)
{perror("open");return -1;
}while (1){//讀取一個event事件包memset(&ev, 0, sizeof(struct input_event));ret = read(fd, &ev, sizeof(struct input_event));if (ret != sizeof(struct input_event)){perror("read");close(fd);return -1;}// 解析event包,才知道發(fā)生了什么樣的輸入事件printf("%s.\n", (unsigned char *)&ev);	}//關(guān)閉設(shè)備
close(fd);

? ? ?

????????input子系統(tǒng)框架:

? ? ? ? 首先,確認(rèn)一個三層思想:最上層的輸入事件驅(qū)動層;中間的輸入核心層;最下層的輸入設(shè)備驅(qū)動層。輸入事件驅(qū)動層evdev.c mousedev.c 其被剝離與下面兩層。輸入核心層是input.c輸入核心層解析,而這兩層是內(nèi)核相關(guān)層,維護(hù)歸屬于內(nèi)核開發(fā)者,。最下層是輸入設(shè)備驅(qū)動類,有各種文件夾,里面有各種設(shè)備驅(qū)動,歸屬于驅(qū)動開發(fā)者進(jìn)行維護(hù)。

? ? ? ? 因為輸入事件驅(qū)動層存在四種平行層,所以應(yīng)剝離于輸入核心層,不同設(shè)備以適應(yīng)不同的特性(Keyboard Hander、Mouse Hander;Joystick Hander;Event Hander)。最后的Event Hande模型達(dá)到了最大的兼容,可以兼容上面3個模型。

? ? ? ? 一個事件支持一對多模型發(fā)送到應(yīng)用層。

? ? ? ? 在開發(fā)驅(qū)動過程中,只需要去寫/改最下層,上中兩層是內(nèi)核開發(fā)人員進(jìn)行維護(hù)的,中間的一層只是為驅(qū)動寫了一些接口,模型已經(jīng)定義完成,開發(fā)者核心工作將是在驅(qū)動的調(diào)優(yōu)方向。

? ? ? ? 輸入核心層以一個模塊編譯到內(nèi)核中input_input();class_register()注冊了input類/sys/class/input;input_proc_init()是procfs初始化;register_chrdev()注冊字符類設(shè)備。

? ? ? ? 設(shè)備驅(qū)動層接口函數(shù)(在中間層實現(xiàn))

input_allocate_device();//申請dev,初步初始化input_dev
input_set_capability();//設(shè)置輸入事件能力(接收上面事件)可多次調(diào)用
input_register_device();//注冊dev
順序執(zhí)行上述代碼

? ? ? ? 一個鼠標(biāo)最少應(yīng)調(diào)用input_set_capabitity 4次聲明能力為BTN_LEFT;BTN_RIGHT;REL_X;REL_Y這四個宏定義。

? ? ? ? __set_bit(EV_SYN,dev_evbit)在register_device中調(diào)用,使dev有發(fā)送同步包的能力。

init_timer();//內(nèi)核定時器
list_add_tail();//添加鏈表完成注冊
list_for_each_entry();//遍歷dev與handler方法匹配
input_attach_handler();//handler->comect();//最終實現(xiàn)device與handler掛接

? ? ? ? input_match_device()中進(jìn)行關(guān)于總線、廠商等的對比,最終實現(xiàn)handler匹配,其位置在handler->connect()之前。

? ? ? ? 事件驅(qū)動層接口函數(shù):

int input_register_handler(struct input_handler *handler);
int input_register_handle(struct input_handle *handle);input_register_handler();INIT_LIST_HEAD(&handler->h_list);list_add_tail(&handler->node, &input_handler_list);input_table[8];//指針數(shù)組,指向input_handler(表示最多允許注冊8種handler)大多數(shù)用event_handler

? ? ? ? 一個硬件匹配兩個handler會匹配2個設(shè)備號(次)與各自設(shè)備文件相綁定:

handler->minor>>5    =>minor/32=input_table[下標(biāo)]。

? ? ? ? 注冊handler時去dev_list()在找匹配對象。注冊dev時去handler_list()中找匹配對象。

? ? ? ? input_register_handle用于處理dev與handler關(guān)系。

? ? ? ? 事件驅(qū)動層框架 evdev.c/mouse.c是一種handler。

evdev_init()input_register_handler()核心層已經(jīng)實現(xiàn),handler去調(diào)用

? ? ? ? input_handler結(jié)構(gòu)體:

struct input_handler {void *private;//指向一個結(jié)構(gòu)體void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);//硬件信息加工bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);bool (*match)(struct input_handler *handler, struct input_dev *dev);//支持自有matchint (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);//匹配上連接void (*disconnect)(struct input_handle *handle);//斷開連接void (*start)(struct input_handle *handle);const struct file_operations *fops;//對應(yīng)應(yīng)用層使用方法//一些設(shè)備信息int minor;const char *name;const struct input_device_id *id_table;//handler支持設(shè)備特征,用于match匹配//handler與dev鏈表struct list_head	h_list;struct list_head	node;
};

? ? ? ? .read方法:①獲取信息;②信息校驗(結(jié)構(gòu)體大小、client等);③input_event_to_user將event發(fā)送到用戶層,wait_evebt_interruptible等待event信息(應(yīng)用層等待事件實現(xiàn))在.event中喚醒。

? ? ? ? .connect方法,在匹配上后調(diào)用(match):①minor校驗;②內(nèi)存開辟;③數(shù)據(jù)填充;④MKDEV填充次設(shè)備號;⑤device_initialize()+⑦device_add完成device_register;⑥input_register_handle注冊handle放鏈表中。

? ? ? ? .event方法,封裝硬件層信息為struct發(fā)送到user:①獲取驅(qū)動信息(時間部分-內(nèi)核時間);②evdev_pass_event()發(fā)送到那個handler(支持多個handler發(fā)送)是一種通知方式(放buffer)用wake_lock_timeout設(shè)置喚醒時鐘,kill_fasync()發(fā)異步通知(誰關(guān)注發(fā)誰)異步通知+多路IO復(fù)用。

? ? ? ? 在X210中,官方實現(xiàn)的按鍵發(fā)送值與規(guī)范方法不同,不是很規(guī)范。

.probe=s3c_button_probe

? ? ? ? platform+input總線實現(xiàn)。driver+dev=>probe=驅(qū)動;input+驅(qū)動=>發(fā)包應(yīng)用層。在x210按鍵消息可見Button_x210.c。

GPIO_SFN(n)//模式
BITS_TO_LONGS(X)//幾個32為的long能放下x個bit數(shù)據(jù),有余數(shù)就向上兼容
set_bit();//向位圖設(shè)置相應(yīng)位

? ? ? ? handler與dev匹配通過input->id.bustype ;input->id.vendor;input->id.product;input->id.version,進(jìn)行匹配。

? ? ? ? .probe①申請GPIO;②設(shè)置GPIO;③申請input空間;④填空input;⑤注冊input;⑥啟動定時器(等待一定時間完成消抖或輪詢)。

? ? ? ? /proc/interrupts記錄了內(nèi)核注冊的中斷。

http://www.risenshineclean.com/news/58502.html

相關(guān)文章:

  • 做網(wǎng)站用的什么服務(wù)器優(yōu)秀企業(yè)網(wǎng)站模板
  • github 可以做網(wǎng)站嗎如何創(chuàng)建網(wǎng)站教程
  • 佛山免費(fèi)網(wǎng)站制作百度排名點擊器
  • 國外做機(jī)械設(shè)計任務(wù)的網(wǎng)站求職seo
  • 個人網(wǎng)站可以做資訊嗎?網(wǎng)絡(luò)推廣課程培訓(xùn)
  • 潁州網(wǎng)站建設(shè)最近新聞?wù)?/a>
  • 優(yōu)惠購網(wǎng)站怎么做的青島網(wǎng)站建設(shè)與設(shè)計制作
  • 佛山做公司網(wǎng)站地推項目平臺
  • 做動態(tài)文字的網(wǎng)站杭州網(wǎng)站定制
  • 做網(wǎng)站建設(shè)的公司有哪些方面建設(shè)網(wǎng)站公司
  • 教育網(wǎng)站如何做seo網(wǎng)絡(luò)運(yùn)營團(tuán)隊
  • 域名怎樣連接到網(wǎng)站外貿(mào)推廣哪個公司好
  • 網(wǎng)站地圖制作怎么做?360網(wǎng)站排名優(yōu)化
  • 電影網(wǎng)站做seo愛站關(guān)鍵詞
  • 網(wǎng)站seo設(shè)計百度手機(jī)助手app
  • 做網(wǎng)站的術(shù)語域名注冊平臺哪個好
  • 一個大佬做的本子網(wǎng)站專業(yè)seo站長工具
  • 做搞機(jī)網(wǎng)站廣告公司經(jīng)營范圍
  • 怎么做批量的網(wǎng)站檢查網(wǎng)頁設(shè)計制作網(wǎng)站教程
  • 深圳定制西裝哪家好seo優(yōu)化網(wǎng)站模板
  • 中文網(wǎng)站模板免費(fèi)下載域名??烤W(wǎng)頁推廣大全2021
  • 包裝設(shè)計網(wǎng)站排行榜十大接單推廣平臺
  • 微商城 微網(wǎng)站制作360應(yīng)用商店
  • 新河網(wǎng)招聘信息seo積分優(yōu)化
  • 誰有wap網(wǎng)站掌門一對一輔導(dǎo)官網(wǎng)
  • 安徽做網(wǎng)站杭州seo網(wǎng)絡(luò)推廣
  • 做網(wǎng)站要的圖片斗魚百度關(guān)鍵詞排名工具
  • 醫(yī)院網(wǎng)站建設(shè)策劃案模板b2b平臺免費(fèi)推廣網(wǎng)站
  • 門戶網(wǎng)站的基本特征多選題seo整站優(yōu)化外包
  • 怎樣制作自己公司的網(wǎng)站西安百度關(guān)鍵詞優(yōu)化