1bool
initinput(hwnd hwnd)216
//第二步 建立裝置,滑鼠,鍵盤等。
17 res = pinput->createdevice(
18 guid_syskeyboard, //
裝置的guid,這裡使用定義好的
19 &pkeyboard, //
裝置指標
20null);
21if (!succeeded(res))
2225
//第三步 為裝置設定通訊格式
26//
依然使用定義好的
27 res = pkeyboard->setdataformat(&c_dfdikeyboard);
28if (!succeeded(res))
2932
//第四步 設定協作模式,獨佔,共享,後台能否互動等。
33//
一般為 前台互動,非獨佔的模式。
34//
除錯狀態下 改為 非獨佔 後台可互動
35 res = pkeyboard->setcooperativelevel(hwnd, discl_nonexclusive |discl_background);
36//
res = pkeyboard->setcooperativelevel(hwnd, discl_nonexclusive | discl_foreground);
3738
if (!succeeded(res))
3942
43//
第五步 設定裝置的緩衝區大小,預設為0(立即模式),鍵盤一般為立即模式,滑鼠為緩衝模式
44//
45dipropdword dpw;
46 dpw.diph.dwsize = sizeof(dipropdword); //
必須初始化為外圍結構的大小,如sizeof(dipropdword)
47 dpw.diph.dwheadersize = sizeof(dipropheader); //
必須初始化為sizeof(dipropheader)
48 dpw.diph.dwhow = diph_device; //
如果包含整個裝置則為diph_device,否則為diph_byoffset或diph_byid,說明採用哪種系統標識裝置物
49 dpw.diph.dwobj = 0; //
屬性被訪問的裝置物的標識,如果包含整個裝置則為o(對設定緩衝區大小而言)
50 dpw.dwdata = 0;51
52//
外圍的大小減去dipropheader即diph的大小,就可以:得到dwdata
53 res = pkeyboard->setproperty(diprop_buffersize,&dpw.diph);
54if (!succeeded(res))
5558 res = pkeyboard->acquire();
59if (!succeeded(res))
6063
64return
true
;65 }
1bool readstate(char *buf,dword len)29
//由於可能丟失裝置
10while (true)11
22}23else
2427
}28 }
1 byte keys[256]; //256個按鍵
2#define key_down(key) (keys[key] &0x80)
裝置初始化函式巨集
初始化 的記憶體結構 init begin init.text init init.data initdata setup start init.setup setup param initcall start initcall1.init core initcall initcall2.init ...
AHCI sata裝置初始化流程
檢測sata裝置 檢測hba的存在 根據hba的port挨個檢測是否連線。根據intel文件,需要檢測的項有 pxssts.det 03h,pxssts.ipm 02h或06h 檢測signature,0101的就是sata了 初始化sata裝置 關閉指令執行。設定pxcmd.st 0,pxcmd....
USB裝置驅動之裝置初始化 裝置列舉
usb裝置從接入hub到正常工作之前,都屬於裝置列舉階段。所謂裝置列舉,就是讓host控制器認識usb裝置,並為其準備資源,建立好主機與裝置間的資料傳遞機制。該階段的工作,是usb通訊協議規定的,所以屬於iso標準流程。裝置列舉階段也對應了usb裝置的五種狀態。裝置列舉階段分為如下8個步驟 獲取裝置...