wince的顯示驅動和普通的裝置驅動不一樣.普通的裝置驅動是由裝置管理器device.exe載入和管理的;而顯示驅動是由gwes.exe載入和管理的,類似的由gwes載入管理的還有鍵盤滑鼠,觸控螢幕,印表機等驅動,這些叫本地驅動(內建驅動).所以,顯示驅動ddi就不是常見裝置驅動的ddi(流介面ddi).更具體說,它不是通過createfile這些檔案系統api介面來訪問.而是通過gdi介面,熟悉win32應用程式設計的會記起,gdi就是createdc,releasedc等等這些api,可以在wingdi.h中找到這些介面.
一般的,顯示驅動是分層實現的,mdd層一般會使用微軟提供的gpe模組.如果要支援旋轉,使用gperotate,如果要支援ddraw,使用ddgpe模組.事實上,對wince5,gperotate已經合併到gpe裡面了,typedef gpe gperotate.而ddgpe也是從gpe繼承過來的類.在一些驅動中ddraw和rotate是不能同時使用的.)
tips:gpe是什麼?乙個簡單的圖形引擎.首先這是乙個類,其次從顯示驅動分層上說,使用gpe作為上層mdd,可以節省工作,因為它處理了和上層的介面,並且軟體方式模擬了一些圖形功能.
提供給gwes呼叫的介面一共大概20幾個函式.gwes通過以下ddi和顯示驅動互動,並向上提供gdi介面.
drvanyblt 有擴充套件或透明位塊傳送(bit block transfers)但事實上,以上介面並非直接由顯示驅動公開給gwes的.顯示驅動只公開了乙個介面drvenabledriver(),在這個介面中匯出其他介面,具體的做法如下.drvbitblt 有剪下和遮蔽的通常位塊傳送
drvconstrostcontrol 允許軟體、硬體對照調整
drvcopybits 傳送gdi設計的列印段到列印驅動程式
drvcreatedevicebitmap 設計和管理位圖
drvdeletedevicebitmap 刪除設計位圖
drvdisabledriver 通知驅動程式gdi不再需要它,並準備解除安裝它
drvdisablepdev 通知驅動程式gdi不再需要特殊列印或顯示裝置
drvdisablesu***ce 通知驅動程式gdi不再需要特殊繪製表面
drvenabledriver 由驅動程式輸出初始記錄,為gdi的ddi函式返回指標
drvenablepdev 為gdi返回乙個pdev,它是乙個物理顯示裝置的邏輯表示
drvenablesu***ce 設計乙個繪製介面,並把它與pdev相連
drvenddoc 傳送任何所需的完成列印檔案控制資訊
drvfillpath 用毛刷填充路徑
drvgetmasks 為目前顯示裝置模式獲取顏色遮蔽
drvgetmodes 列舉、顯示裝置支援的顯示模式
drvmovepointer 移動指標,保證gdi不干涉
drvpaint 用毛刷漆出乙個特定區
drvpowerhandler 呼叫處理、上電、掉電通知
//drvaweryfont 獲得字型公制資訊
drvrealizebrush 建立由gdi指定引數毛刷
drvrealizecolor 把乙個rgb顏色,對映到由裝置支援最可能獲得顏色
drvsetpalette 設定顯示裝置調色盤
drvsetpointershape 對游標設定新形狀並更新顯示
drvstaredoc 傳送任意的開始列印檔案資訊
drvstartpage 傳送任意的列印新頁的資訊
drvstrokepath 刪除路徑
drvtransparentblt 透明位塊傳送
drvunrealizecolor 將顯示裝置制式的顏色映成rgb值
boolgwes呼叫drvenabledriver(),而drvenabledriver()函式呼叫上面的gpeenabledriver函式,其中第三個引數就是返回的其他介面的函式指標.在ddi_if.c中同時定義了全域性函式指標陣列如下:apientry
gpeenabledriver(
ulong iengineversion,
ulong cj,
drvenabledata * pded,
pengcallbacks pengcallbacks)
bool apientry drvenabledriver(
ulong iengineversion,
ulong cj,
drvenabledata *pded,
pengcallbacks pengcallbacks)
const drvenabledata pdrvfn = ,,
省略 ,,
,};如此,上層獲得下層的函式指標pded.即獲得了所有介面函式的指標.此外,第4個引數pengcallbacks是乙個**函式的指標入口,是上層提供給下層的**函式.是系統提供給顯示驅動呼叫的.它具體包括下面這些:
(brvshobj 代表乙個執行用實線或網格刪除填充操作的毛刷.)
brvshobj_pvallocrbrush 為毛刷分配記憶體(clipobj 代表剪下區結構)brushobj_pvgetrbrush 為特定毛刷返回指標
clipobj-benum 從剪下區,列舉剪下矩形的函式(pathdat 儲存部分繪製路徑的結構)clipobj-cenumstart 為列舉剪下區的剪下矩形設定引數
engcreatedericebitmap 使gdi對裝置位圖進行處理
engcreatedevicebitmap 請求gdi建立乙個位圖,並返回控制代碼.
engcreatedevicesu***ce 通過gdi建立乙個顯示驅動程式管理的裝置介面
engcreatepalette 請求gdi建立乙個調色盤.
engdeletesu***ce 通知gdi顯示驅動程式不再需要裝置介面
palobj-cgetcolors 將顏色複製到調色盤上
pathobj-beenum 由繪製路徑中列舉pathdata記錄(xlateobj 用來在調色盤之間傳送色彩)pathobj-venumstart 乙個繪製路徑列舉它的線性部分
pathobj-vgetbounds 返回繪製路徑的有限制矩形區
xlateobj-cgetpalette 由指定的調色盤返回顏色.
wince下裝驅動
前邊說了如何在開發版上裝wince.現在我手上有乙個usb的攝像頭,為了要他能在開發板上使用,我得給他裝上驅動.產家提供了dll和需要修改登錄檔的說明.下邊說下步驟,開啟之前做wince核心定製燒寫的工程,把驅動檔案,假設叫a.dll,拷貝到工程目錄下,d wince420 public wince...
wince 驅動練習
wince 驅動練習 寫乙個 led 的驅動 準備放到流驅動中 c wince600 platform smdk2440a src drivers gpio 資料夾 複製到當前目錄並改名為 led 並修改 drivers 資料夾下dir 檔案 新增 led c wince600 platform s...
WinCE藍芽驅動
1 wince藍芽驅動 2 wince藍芽學習一 wince6.0藍芽協議棧 3 wince上藍芽說明文件 4 wince藍芽應用的實現 藍芽耳機 5 基於wince作業系統的藍芽高質量音訊傳輸的實現.pdf 8 error failed reading e32 structure in modul...