作者linjack (嗯)
看板Programming
标题[问题]使用 win32 SDK/DDK 写 USB HID 的一些问题
时间Tue Nov 7 03:24:10 2006
个人以往完全没有 Device Programming 的经验
功课自觉做了不少但却没有很多进展
所以来这边请教一下前辈相关的问题
首先 我要写的并不是 win32 kernel-mode driver
只是操作某些 USB Device 的 user-mode app 而已
普通的 USB Device 可以经由 SetupDiXXX + CreateFile 来取得资讯
这个我已经成功了
但是我目前还需要试着让 winXP 接上两支 USB HID Mouse
(当然作用的范围仅限於我个人的 application 而已)
我也查到了 windows 系统会将 Keyboard 与 Mouse 资讯做保护
(其他的 HID 就不会, 例如 Gamepad or Joystick)
所以在使用 CreateFile 来开启 Keyboard 与 Mouse 资讯时
必须拿掉 GENERIC_READ 与 GENERIC_WRITE (否则 CreateFile 一定会失败)
因此 CreateFile 之後其实也无法 ReadFile 或 WriteFile
我想知道的就是 如果今天是开启了 USB HID Mouse
那我能接着用 win32 DDK 中 hidsdi.h 里提供的 HidD_XXX / HidP_XXX
等 API 来取得滑鼠所回传的资料吗 ?
Device Handle 我已确实由 CreateFile 取得了...
还是说因为我 CreateFile 时没有 GENERIC READ / WRITE flag
所以这些 HidD_XXX / HidP_XXX Api 也会失效 ?
我另外查到的一个做法是 使用 Windows Message Loop 的 WM_INPUT
吃 HID Raw Input 这样子连自行使用 SetupDiXXX API 与 CreateFile
都可以免去 也能做到分辨不同的两只 USB HID Mouse
唯一的问题就是 使用 windows msg loop 的前提是
该 thread 里至少要有一个 active 的 window
而这就又和我的目的似乎有点冲突了 ...
因为我是希望可以写出一个独立 和视窗不相关的 dll
希望它纯粹只和 device 有关系
因为到时候可能要 binding 或 export 给别的架构用
譬如说, 某些 GUI Framework, 或是绘图引擎包装如 Ogre, Irrlicht 等等
架出来的应用程式, 或是写给 Virtools Dev 的 dll plugin 等等
想请教前辈们对於两种作法的一点见解
或是指点第三条明路 <(_ _)> 感激不尽
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.72.57.78