WinCE顯示驅動

2021-04-25 03:54:12 字數 3631 閱讀 9013

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)

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值

但事實上,以上介面並非直接由顯示驅動公開給gwes的.顯示驅動只公開了乙個介面drvenabledriver(),在這個介面中匯出其他介面,具體的做法如下.

bool

apientry

gpeenabledriver(

ulong           iengineversion,

ulong           cj,

drvenabledata * pded,

pengcallbacks   pengcallbacks)

bool apientry drvenabledriver(   

ulong          iengineversion,

ulong          cj,

drvenabledata *pded,

pengcallbacks pengcallbacks)

gwes呼叫drvenabledriver(),而drvenabledriver()函式呼叫上面的gpeenabledriver函式,其中第三個引數就是返回的其他介面的函式指標.在ddi_if.c中同時定義了全域性函式指標陣列如下:

const drvenabledata pdrvfn = ,,

省略 ,,

,};如此,上層獲得下層的函式指標pded.即獲得了所有介面函式的指標.此外,第4個引數pengcallbacks是乙個**函式的指標入口,是上層提供給下層的**函式.是系統提供給顯示驅動呼叫的.它具體包括下面這些:

(brvshobj 代表乙個執行用實線或網格刪除填充操作的毛刷.)

brvshobj_pvallocrbrush 為毛刷分配記憶體

brushobj_pvgetrbrush 為特定毛刷返回指標

(clipobj 代表剪下區結構)

clipobj-benum 從剪下區,列舉剪下矩形的函式

clipobj-cenumstart 為列舉剪下區的剪下矩形設定引數

engcreatedericebitmap 使gdi對裝置位圖進行處理

engcreatedevicebitmap 請求gdi建立乙個位圖,並返回控制代碼.

engcreatedevicesu***ce 通過gdi建立乙個顯示驅動程式管理的裝置介面

engcreatepalette 請求gdi建立乙個調色盤.

engdeletesu***ce 通知gdi顯示驅動程式不再需要裝置介面

palobj-cgetcolors 將顏色複製到調色盤上

(pathdat 儲存部分繪製路徑的結構)

pathobj-beenum 由繪製路徑中列舉pathdata記錄

pathobj-venumstart 乙個繪製路徑列舉它的線性部分

pathobj-vgetbounds 返回繪製路徑的有限制矩形區

(xlateobj 用來在調色盤之間傳送色彩)

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...