偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

淺析 Qt Embedded 鍵盤(pán)驅(qū)動(dòng)分析 (上)

移動(dòng)開(kāi)發(fā)
我們都知道Qt-x11借助XServer提供對(duì)硬件外設(shè)的接口,不需要直接和driver打交道,Qt Embedded則顛覆了這個(gè)傳統(tǒng)并且摒棄了對(duì)XServer的依賴(lài), 所以免不了要有和硬件driver交互的時(shí)候。

經(jīng)??吹接腥藛?wèn)移植Qt Embedded時(shí)如何鍵盤(pán)響應(yīng)不靈怎么辦,可能系統(tǒng)介紹這方面知識(shí)的文章比較少,這里筆者就盡我所能介紹一下,以填補(bǔ)以往的空白。 

我們都知道Qt-x11借助XServer提供對(duì)硬件外設(shè)的接口,不需要直接和driver打交道,Qt Embedded則顛覆了這個(gè)傳統(tǒng)并且摒棄了對(duì)XServer的依賴(lài), 所以免不了要有和硬件driver交互的時(shí)候。為了保持Qt Embedded 對(duì)硬件最小化的依賴(lài)程度,Qt Embedded所有硬件相關(guān)的操作都采用插件的封裝形式,并且大部分功能都可以從程序外部運(yùn)用環(huán)境變量的方式來(lái)配置。 這樣一來(lái)我們只要針對(duì)不同的硬件寫(xiě)好不同的插件,為不同硬件平臺(tái)提供不同的啟動(dòng)腳本就可以了,換了硬件代碼卻不需要修改,這是多么愜意的事啊!簡(jiǎn)直是嵌入式開(kāi)發(fā)的***目標(biāo)!

Qt Embedded的鍵盤(pán)操作是這種插件封裝形式的典范,我們就以此為例,對(duì)Qt Embedded的硬件操作一窺究竟。

告訴Qt Embedded你需要哪個(gè)驅(qū)動(dòng)

QWS_KEYBOARD這個(gè)環(huán)境變量就是你需要了解的全部。

設(shè)置該變量的方法為在運(yùn)行QtE server程序之前用下面的命令設(shè)置:

export QWS_KEYBOARD= <driver>[:<driver specific options>]

driver參數(shù)即驅(qū)動(dòng)的鍵值, 如“usb”、“tty”等, 在下篇中我們?cè)僭敿?xì)討論這個(gè)。

options則指定硬件設(shè)備名, 如/dev/input/event0, 這個(gè)參數(shù)就要按你的硬件實(shí)際情況來(lái)提供了。

載入用戶(hù)需要的驅(qū)動(dòng)插件

這個(gè)環(huán)境變量是如何工作的呢? 今天我們講述的重點(diǎn)放在QtE的幾個(gè)文件上:

讀取環(huán)境變量, 載入相應(yīng)的鍵盤(pán)驅(qū)動(dòng)插件:src/gui/embedded/qwindowsystem_qws.cpp

創(chuàng)建鍵盤(pán)處理函數(shù)類(lèi)的實(shí)例:src/gui/embedded/qkbddriverfactory_qws.cpp

故事從QWSServerPrivate::initServer開(kāi)始, 這個(gè)函數(shù)在QWSServer構(gòu)造時(shí)被調(diào)用, 它會(huì)完成初始化的工作, 包括按順序初始化各個(gè)硬件接口(鼠標(biāo)、鍵盤(pán)等等外設(shè)), 這個(gè)函數(shù)接近***的幾行代碼調(diào)用了openKeyboard來(lái)初始化鍵盤(pán)。

第二步進(jìn)到同一源碼文件的QWSServer::openKeyboard(), 該函數(shù)負(fù)責(zé)解析環(huán)境變量 QWS_KEYBOARD的設(shè)定, 從中取得鍵盤(pán)設(shè)備的名稱(chēng)和driver handler的類(lèi)型, 并最終調(diào)用QKbdDriverFactory::create函數(shù)載入對(duì)應(yīng)的鍵盤(pán)處理插件。

第三步也是本場(chǎng)大戲的重頭, 打開(kāi)qkbddriverfactory_qws.cpp找到QKbdDriverFactory::create函數(shù)。 前面我們說(shuō)到過(guò)這個(gè)函數(shù)包含了創(chuàng)建鍵盤(pán)處理函數(shù)的類(lèi)的實(shí)例的代碼, 簡(jiǎn)單看一下這個(gè)函數(shù)我們發(fā)現(xiàn), 前面大段的code是一堆跟硬件類(lèi)型相關(guān)的宏包裹住的代碼, 這部分代表了Qt里內(nèi)嵌的driver handler, 而非插件形式提供的。 QtE自身支持的每個(gè)鍵盤(pán)設(shè)備都有一個(gè)預(yù)定義的宏和預(yù)定義的driver handler類(lèi)與之對(duì)應(yīng), 根據(jù)代碼顯示, 設(shè)備的類(lèi)型必須在configure階段就確定, 以X86模擬器環(huán)境下為例, 在這個(gè)環(huán)境下configure的時(shí)候需要加 -qvfb參數(shù), 這個(gè)參數(shù)就會(huì)去掉 QT_NO_QWS_KBD_QVFB這個(gè)宏, 在此函數(shù)中就表示為調(diào)用到return new QVFbKeyboardHandler(device);這行。

那么,如果上面所有的QT_NO都被定義了呢? 當(dāng)然代碼就會(huì)跳過(guò)這一堆無(wú)用的code, 直接調(diào)用到

if (QWSKeyboardHandlerFactoryInterface *factory = qobject_cast<QWSKeyboardHandlerFactoryInterface*>(loader()->instance(driver)))

return factory->create(driver, device);

這段代碼就比較有意思了,它代表的是以插件形式存在的各個(gè)鍵盤(pán)處理插件。在你不使用Qt預(yù)定義鍵盤(pán)處理的情況下就需要有與環(huán)境變量請(qǐng)求的driver handler鍵值一致的插件。鍵盤(pán)處理插件如何定義不是本文探討的內(nèi)容(請(qǐng)參看下篇),我們只要知道這個(gè)插件會(huì)提供一個(gè)標(biāo)識(shí)自己的鍵值,這樣loader比較創(chuàng)建插件的請(qǐng)求和插件的鍵值就知道該返回哪個(gè)插件提供的服務(wù)了。

還有幾點(diǎn)有意思的地方:

1、 driver的類(lèi)型信息不區(qū)分大小寫(xiě)。

2、 QtE內(nèi)嵌的driver類(lèi)型默認(rèn)是都不支持的, 只有在configure的時(shí)候加上-qt-kbd-xxx才能支持某種driver類(lèi)型。(詳情 configure –help)

3、 同一時(shí)刻只能有一個(gè)driver處理函數(shù)生效。

4、 由于這部分代碼都在QWSServer構(gòu)造時(shí)調(diào)用, 也就是說(shuō)QtE不支持動(dòng)態(tài)的更改鍵盤(pán)處理。

小結(jié):Qt Embedded 鍵盤(pán)驅(qū)動(dòng)分析的內(nèi)容就介紹到這里,希望本篇文章對(duì)你有所幫助!請(qǐng)繼續(xù)參考 淺析 Qt Embedded 鍵盤(pán)驅(qū)動(dòng)分析 。

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-06-29 15:36:21

Qt Embedded 鍵盤(pán)

2011-06-13 13:35:06

Qt Embedded QT

2011-06-20 14:27:57

Qt Embedded

2011-06-10 13:21:00

Qt 網(wǎng)絡(luò)

2011-06-30 10:59:43

2011-06-13 11:07:22

QT 移植

2011-06-09 18:05:00

QT MySql

2009-07-17 13:49:57

Windows Emb

2011-06-10 11:24:08

Qt Quick Designer

2011-06-20 15:13:08

Qt 對(duì)象模型

2011-06-21 13:52:18

Qt 界面

2011-06-28 13:47:37

Embedded QT ARM

2009-06-19 15:08:23

JDBC驅(qū)動(dòng)

2009-06-19 17:14:47

JDBC驅(qū)動(dòng)設(shè)置

2011-06-15 18:00:26

2011-06-30 13:49:00

Qt 鍵盤(pán) 聚焦

2011-06-29 09:20:41

Qt Embedded Qtopia

2021-09-08 09:22:23

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)

2010-01-13 14:18:52

Windows Emb

2011-04-15 09:49:33

NAT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)