成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析 Qt Embedded 鍵盤驅動分析 (上)

移動開發
我們都知道Qt-x11借助XServer提供對硬件外設的接口,不需要直接和driver打交道,Qt Embedded則顛覆了這個傳統并且摒棄了對XServer的依賴, 所以免不了要有和硬件driver交互的時候。

經常看到有人問移植Qt Embedded時如何鍵盤響應不靈怎么辦,可能系統介紹這方面知識的文章比較少,這里筆者就盡我所能介紹一下,以填補以往的空白。 

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

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

告訴Qt Embedded你需要哪個驅動

QWS_KEYBOARD這個環境變量就是你需要了解的全部。

設置該變量的方法為在運行QtE server程序之前用下面的命令設置:

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

driver參數即驅動的鍵值, 如“usb”、“tty”等, 在下篇中我們再詳細討論這個。

options則指定硬件設備名, 如/dev/input/event0, 這個參數就要按你的硬件實際情況來提供了。

載入用戶需要的驅動插件

這個環境變量是如何工作的呢? 今天我們講述的重點放在QtE的幾個文件上:

讀取環境變量, 載入相應的鍵盤驅動插件:src/gui/embedded/qwindowsystem_qws.cpp

創建鍵盤處理函數類的實例:src/gui/embedded/qkbddriverfactory_qws.cpp

故事從QWSServerPrivate::initServer開始, 這個函數在QWSServer構造時被調用, 它會完成初始化的工作, 包括按順序初始化各個硬件接口(鼠標、鍵盤等等外設), 這個函數接近***的幾行代碼調用了openKeyboard來初始化鍵盤。

第二步進到同一源碼文件的QWSServer::openKeyboard(), 該函數負責解析環境變量 QWS_KEYBOARD的設定, 從中取得鍵盤設備的名稱和driver handler的類型, 并最終調用QKbdDriverFactory::create函數載入對應的鍵盤處理插件。

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

那么,如果上面所有的QT_NO都被定義了呢? 當然代碼就會跳過這一堆無用的code, 直接調用到

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

return factory->create(driver, device);

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

還有幾點有意思的地方:

1、 driver的類型信息不區分大小寫。

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

3、 同一時刻只能有一個driver處理函數生效。

4、 由于這部分代碼都在QWSServer構造時調用, 也就是說QtE不支持動態的更改鍵盤處理。

小結:Qt Embedded 鍵盤驅動分析的內容就介紹到這里,希望本篇文章對你有所幫助!請繼續參考 淺析 Qt Embedded 鍵盤驅動分析 。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-29 15:36:21

Qt Embedded 鍵盤

2011-06-13 13:35:06

Qt Embedded QT

2011-06-20 14:27:57

Qt Embedded

2011-06-10 13:21:00

Qt 網絡

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 對象模型

2011-06-21 13:52:18

Qt 界面

2011-06-28 13:47:37

Embedded QT ARM

2009-06-19 15:08:23

JDBC驅動

2009-06-19 17:14:47

JDBC驅動設置

2011-06-15 18:00:26

2011-06-30 13:49:00

Qt 鍵盤 聚焦

2011-06-29 09:20:41

Qt Embedded Qtopia

2021-09-08 09:22:23

領域驅動設計

2010-01-13 14:18:52

Windows Emb

2011-04-15 09:49:33

NAT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级在线观看 | 草樱av| 超碰人人在线 | 日本福利在线 | 成人在线视频免费观看 | 日韩电影免费在线观看中文字幕 | 欧美成人高清视频 | 天天综合网7799精品 | 波霸ol一区二区 | 日日摸日日爽 | 欧美日韩一区二区三区不卡视频 | 日韩精品免费在线观看 | 视频二区在线观看 | 亚洲午夜一区二区 | 国产成人精品久久二区二区91 | 免费中文字幕日韩欧美 | 久久久久国产 | 国产精品国产精品国产专区不卡 | caoporn国产精品免费公开 | 国产电影一区 | 亚洲三级免费看 | 久久久精品天堂 | 99在线观看视频 | 亚洲一区二区三区高清 | 91九色视频在线 | 中文字幕一区二区三区精彩视频 | 成人福利 | 波多野结衣一区二区 | 黄色在线免费观看 | 中文字幕av网站 | 黄网免费看 | 中文字幕 国产精品 | 蜜臀网 | 精品动漫一区 | 九九综合| 天天干狠狠操 | 成人午夜免费在线视频 | av国产精品 | 久久久美女 | 久久久久久免费看 | 日韩精品一区二区三区免费视频 |