国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

成都三合一網(wǎng)站建設(shè)推廣新產(chǎn)品最好的方法

成都三合一網(wǎng)站建設(shè),推廣新產(chǎn)品最好的方法,商城網(wǎng)站開發(fā)周期,wordpress djiango關(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)核用于描述時(shí)間點(diǎn)的時(shí)間結(jié)構(gòu)體__u16 type;//什么類型的事件(如案件類)__u16 code;//什么按鍵(如按鍵1)__s32 value;//值(按下)
};//去描述一次輸入類事件

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

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

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

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

? ? ? ? 但是input子系統(tǒng)等的為/dev/input/xxx(event n n=0、1、2......)。使用cat去確認(rèn)event對(duì)應(yīng)的設(shè)備,但是cat去read一個(gè)input設(shè)備時(shí),若無輸入則會(huì)阻塞,直到有輸入信息出現(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){//讀取一個(gè)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)一個(gè)三層思想:最上層的輸入事件驅(qū)動(dòng)層;中間的輸入核心層;最下層的輸入設(shè)備驅(qū)動(dòng)層。輸入事件驅(qū)動(dòng)層evdev.c mousedev.c 其被剝離與下面兩層。輸入核心層是input.c輸入核心層解析,而這兩層是內(nèi)核相關(guān)層,維護(hù)歸屬于內(nèi)核開發(fā)者,。最下層是輸入設(shè)備驅(qū)動(dòng)類,有各種文件夾,里面有各種設(shè)備驅(qū)動(dòng),歸屬于驅(qū)動(dòng)開發(fā)者進(jìn)行維護(hù)。

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

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

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

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

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

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

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

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

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

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

? ? ? ? 事件驅(qū)動(dòng)層接口函數(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(表示最多允許注冊(cè)8種handler)大多數(shù)用event_handler

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

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

? ? ? ? 注冊(cè)handler時(shí)去dev_list()在找匹配對(duì)象。注冊(cè)dev時(shí)去handler_list()中找匹配對(duì)象。

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

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

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

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

struct input_handler {void *private;//指向一個(gè)結(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;//對(duì)應(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方法:①獲取信息;②信息校驗(yàn)(結(jié)構(gòu)體大小、client等);③input_event_to_user將event發(fā)送到用戶層,wait_evebt_interruptible等待event信息(應(yīng)用層等待事件實(shí)現(xiàn))在.event中喚醒。

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

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

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

.probe=s3c_button_probe

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

GPIO_SFN(n)//模式
BITS_TO_LONGS(X)//幾個(gè)32為的long能放下x個(gè)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①申請(qǐng)GPIO;②設(shè)置GPIO;③申請(qǐng)input空間;④填空input;⑤注冊(cè)input;⑥啟動(dòng)定時(shí)器(等待一定時(shí)間完成消抖或輪詢)。

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

http://aloenet.com.cn/news/36004.html

相關(guān)文章:

  • 武漢哪里做網(wǎng)站好找個(gè)免費(fèi)的網(wǎng)站
  • 提供網(wǎng)站制作百度風(fēng)云排行榜官網(wǎng)
  • 網(wǎng)站建設(shè)公司該怎么銷售微信推廣方法
  • 上海企業(yè)招聘信息發(fā)布平臺(tái)長沙seo優(yōu)化推薦
  • 網(wǎng)站建設(shè)原因分析win7系統(tǒng)優(yōu)化軟件
  • 中國新聞社招聘2023年褲子seo關(guān)鍵詞
  • 中國最近軍事新聞視頻桂林網(wǎng)站優(yōu)化
  • 網(wǎng)站推廣解釋中國有幾個(gè)搜索引擎
  • 網(wǎng)站廣告輪播代碼運(yùn)營是做什么的
  • 邀請(qǐng)注冊(cè)推廣賺錢seo深圳優(yōu)化
  • 如何在記事本中做網(wǎng)站鏈接長沙自動(dòng)seo
  • 黃石建設(shè)信息網(wǎng)站國內(nèi)網(wǎng)絡(luò)銷售平臺(tái)有哪些
  • 公司網(wǎng)站建設(shè)開發(fā)濟(jì)南興田德潤優(yōu)惠嗎推廣平臺(tái)排行榜app
  • 行業(yè)網(wǎng)站建設(shè)費(fèi)用百度seo推廣軟件
  • 公司 做網(wǎng)站推廣信息發(fā)布平臺(tái)
  • 做網(wǎng)站是什么專業(yè)什么工作百度后臺(tái)推廣登錄
  • 做pc端網(wǎng)站要成本么廣告推廣軟件
  • wordpress loading優(yōu)化
  • wordpress手機(jī)版怎么注冊(cè)seo站
  • 做設(shè)計(jì)排版除了昵圖網(wǎng)還有什么網(wǎng)站中國新冠疫情最新消息
  • 專業(yè)做網(wǎng)站杭州網(wǎng)站推廣平臺(tái)
  • 東營本地網(wǎng)站制作公司品牌策劃與推廣方案
  • ios wordpress 編輯器淄博seo網(wǎng)站推廣
  • 小城鎮(zhèn)建設(shè)的網(wǎng)站谷歌瀏覽器 官網(wǎng)下載
  • 做網(wǎng)站有前途云南seo網(wǎng)絡(luò)優(yōu)化師
  • 學(xué)生做的網(wǎng)站需要備案seo課程多少錢
  • 建設(shè)網(wǎng)站經(jīng)營范圍怎么在百度上添加自己的店鋪地址
  • 網(wǎng)站制作 信科網(wǎng)絡(luò)第三方推廣平臺(tái)
  • 打字建站寶愛站官網(wǎng)
  • wordpress阿里百秀全達(dá)seo