討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
請問關於hid virtual driver如何設計??
更改我的閱讀文章字型大小
作者 : polol258(章魚小弟)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/11/18 上午 10:08:02
各位先進,你們好

小弟是驅動程式開發初學者,由於目前工作是要做出一個虛擬的觸控hid裝置

期望的系統流程如下:
     USB驅動程式(接收觸控面板的RAW Data)->演算法背景程式(軟體計算觸控點)->hid觸控驅動程式(送出觸控點至OS中)

參考了wdk7.0中的hid驅動程式範例,發覺裡頭的驅動程式範例都是個filter驅動程式,負責將serial裝置或是非hid的usb裝置轉換成hid類型的驅動程式(小弟的認知,不知是否正確),與我所想做的驅動程式有所落差

因此想請教各位先進,我想做的hid觸控驅動程式是否可實現??如果可以,可參考wdk中的哪個範例程式呢??

再此先感謝各位先進的指教~~~十分感謝!!
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人polol258註記此篇回應為最佳解答 2013/12/21 上午 02:46:24
Win8.1 Virtual HID driver 做法有兩種, 在 Win Dev Center 上可找到 sample code

UMDF: HID Minidriver Sample (UMDF Version 1)
KMDF: WDK\\src\hid\hidusbfx2 and \src\hid\vhidmini

這兩者差異取決在, 是否要真正控制一個 Hardware bus or not.

在 Win8 上, MSFT 對 HID Device 搞了兩個技術: HID over I2C, HID over USB.
用意在於解決將 WinRT ARM SoC 周邊相容到 WDK HIDCLass Driver.

我兩年前 trace 過 Qualcomm WinRT TouchPanel driver.
QCOM 8960 APQ 使用內建低速 DPS, 透過 I2C Bus 去連接 ATMEL Touch Panel Controller.
透過 HID Over I2C 的 driver, 連接到 MsHidKmdf.sys 來讓 Kenel 誤認成 HID device.
因為要直接 program 8960 APQ 的 I2C controller, 所以一定要用 KMDF WDK API.

但若不需要控制底層 Hardware, 可以用 UMDF Virtual HID Driver.
它是用 MsHidUmdf.sys bridge to HIDCLass Driver.
好處是可以在 driver 內使用 User Mode API (Graphic API 除外).

Win8.1 上的 sensor driver 都是屬於 UMDF Virtual HID Driver.
而底層 sensor HW access 是透過 Intel SPB Dirver 來存取.

我參與 Transform Book T-100/M80TA 時, 就很不爽 Intel 的作風.
把 BayTrail-T 的 device driver 全部封鎖不公開.
T-100 初期 sensor driver 有重大 Bug, 我叫 Intel SPB driver 給我 trace.
結果它不願意, 就只好一直拖時間, 來來回回好幾次才搞定.


回到你的問題:

  USB 驅動程式->演算法背景程式->hid觸控驅動程式

我想到有兩種解法: 快但複雜 or 慢但簡單.

快但複雜:
你的 USB driver 要回報成 HID Device, 並在 Usage Table 報成是 Multi-Point HID Device.
然後改寫 WDK Mouse Filter, 去攔截 data, 套上演算法修正 data, 在往上回報.

慢但簡單:
改寫 UMDF HID Minidriver, 用 User Mode HID API 去取得 USB Device 資料.
套上演算法修正 data, 在往上回報.

不過你若要改寫就快一點, 因為 MSFT 即將推出 Direct Touch 技術.
以後所有的 Win TouchPanel/TouchPad Driver 全部由 MSFT 內建.
Touch Contorller Vendor 只能寫 firmware, 製作符合 Direct Touch規格的介面.
讓 MSFT built-in driver 呼叫.

而濾雜訊, 定位校正等演算法, 只能塞到 Fimware 端處理.
作者 : polol258(章魚小弟)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/1/13 上午 11:18:56
感謝Weber 大大提供的資訊

由於我們期望能將演算法藉由.NET Framework為基本架構進行開發

所以小弟我用了比較笨的方式做了下列架構

USB 驅動程式->演算法背景程式(base Net Framework)->中介驅動程式<->hid觸控驅動程式
利用.NET Framework為平台讀取USB的資料封包後,經由演算法運算後,再將觸控資訊利用Device Control機制送至中介驅動程式
讓中介驅動程式作為背景程式與hid觸控驅動程式之間資料溝通的橋樑

這樣做法看起來除了會莫名增加一個中介驅動程式的存在,目前在開發測試上還沒發現有什麼特別問題

不過小弟想請教一下如果利用umdf架構方式進行演算發開發,其所可使用效能等同於利用.NET Framework平台嗎?
實在很難了解umdf開發的應用面是在何處?他與kmdf的區隔性又是如何呢?
作者 : weber(weber) 程式設計甘苦談優秀好手貼文超過200則人氣指數超過30000點
[ 貼文 302 | 人氣 33525 | 評價 2220 | 評價/貼文 7.35 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2014/1/26 下午 02:19:03
UMDF vs. KMDF 不同點在於:
a. KDMF 使用 WDK API, UMDF 使用 SDK API(graph API 除外)
b. KMDF 在 kernel mode 執行, 執行優先權遠高於 UMDF.
c. KMDF 可寫 HW Interrupt Handler, 快速處理 HW Interrupt Event.
   UMDF 是靠 OS 的 Polling 機制, 來模擬 Interrupt, 速度不好.
   只適用在低速的 sensor driver.

UMDF 通常用在 Window Sensor driver 的開發上.
Win 8 sensor driver, 普遍是用 UMDF+KMDF 架構寫的,
UMDF 負責 Sensor Driver Extension 介面實作, KMDF 負責 HW access.
以 T-100 (BayTrail-T) 為例, 各家 sensor IC 廠只寫 UMDF 這部分.
它們必須依靠 Intel KMDF SPB Driver 去做 HW access.


>USB 驅動程式->演算法背景程式(base Net Framework)->中介驅動程式<->hid觸控驅動程式
這種寫法遇到高速 HID device, 或者系統太 Busy 時, 會嚴重 lay. 原因如下:

a. user mode 與 kernel mode 的 context switch cost.
   中介驅動程式呼叫 DeviceIoControl 時會有 user mode/kernel mode context switch
   DeviceIoControl 的執行優先權不高, 遇到需要高速傳輸資料時, 會造成lag 現象.
   (check Windows Internals 6th)

b. MSFT .Net Framework 是個 JIT compiler. 速度比不上 Native API,
   而且 UMDF 不支援 .Net Framework. (check "CLR via C#" by Jeffrey Richter)


如果我來寫, 會用下列寫法:
USB 驅動程式->UMDF Virtual HID Driver(演算法+ HID driver 介面)

演算法部份可用 SDK API+ C 來啟動 GPU/Intel 加速指令集,
速度遠比 .Net Framework 快非常非常多.
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875