欢迎来到天天文库
浏览记录
ID:39470069
大小:75.43 KB
页数:8页
时间:2019-07-04
《Windows主机端与自定义USBHID设备通信详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Windows主机端与自定义USBHID设备通信详解说明:- 以下结论都是基于 WindowsXP 系统所得出的,不保证在其他系统的适用性。- 在此讨论的是 HID 自定义设备,对于标准设备,譬如 USB 鼠标和键盘,由于操作系统对其独占,许多操作未必能正确执行。1 . 所使用的典型 WindowsAPICreateFileReadFileWriteFile以下函数是 DDK 的内容:HidD_SetFeatureHidD_GetFeatureHidD_SetO
2、utputReportHidD_GetInputReport其中, CreateFile 用于打开设备; ReadFile 、 HidD_GetFeature 、 HidD_GetInputReport 用于设备到主机方向的数据通信; WriteFile 、HidD_SetFeature 、 HidD_SetOutputReport 用于主机到设备方向的数据通信。鉴于实际应用,后文主要讨论 CreateFile , WriteFile , ReadFile , HidD_SetFeature 四个函数
3、,明白了这四个函数,其它的可以类推之。2 . 几个常见错误 当使用以上 API 时,如果操作失败,调用 GetLastError() 会得到以下常见错误: 6 : 句柄无效 23 : 数据错误(循环冗余码检查) 87 : 参数错误 1784 : 用户提供的 buffer 无效 后文将会详细说明这些错误情况。3. 主机端设备枚举程序流程4. 函数使用说
4、明CreateFile(devDetail->DevicePath, // 设备路径 GENERIC_READ
5、GENERIC_WRITE, // 访问方式 FILE_SHARE_READ
6、FILE_SHARE_WRITE, // 共享模式 NULL, OPEN_EXIST
7、ING, // 文件不存在时,返回失败 FILE_FLAG_OVERLAPPED, // 以重叠(异步)模式打开 NULL);在这里, CreateFile 用于打开 HID 设备,其中设备路径通过函数 SetupDiGetInterfaceDeviceDetail 取得。 CreateFile 有以下几点需要
8、注意:- 访问方式: 如果是系统独占设备,例如鼠标、键盘等等,应将此参数设置为 0 ,否则后续函数操作将失败(譬如 HidD_GetAttributes );也就是说,不能对独占设备进行除了查询以外的任何操作,所以能够使用的函数也是很有限的,下文的一些函数并不一定适合这些设备。在此顺便列出 MSDN 上关于此参数的说明:Ifthisparameteriszero,theapplicationcanqueryfileanddeviceattributeswithoutaccessingthede
9、vice.Thisisusefulifanapplicationwantstodeterminethesizeofafloppydiskdriveandtheformatsitsupportswithoutrequiringafloppyinthedrive.Itcanalsobeusedtotestforthefile'sordirectory'sexistencewithoutopeningitforreadorwriteaccess。- 重叠(异步)模式:此参数并不会在此处表现
10、出明显的意义,它主要是对后续的 WriteFile , ReadFile 有影响。如果这里设置为重叠(异步)模式,那么在使用 WriteFile , ReadFile 时也应该使用重叠(异步)模式,反之亦然。这首先要求 WriteFile , ReadFile 的最后一个参数不能为空( NULL )。否则,便会返回 87 (参数错误)错误号。当然, 87 号错误并不代表就是此参数不正确,更多的信息将在具体讲述这两个函数时指出。此参数为 0 时,代表同步模
此文档下载收益归作者所有