Board logo

标题: [求助]请教关于USB HID设备应用的问题 [打印本页]

作者: hidusb    时间: 2005-5-9 23:00     标题: [求助]请教关于USB HID设备应用的问题

标准USB设备请求命令有标准请求、类请求、用户请求命令,HID设备在应用程序中可以用API的HidD_SetFeature、HidD_GetFeature函数处理USB设备的标准请求、类请求命令,我的问题是:
1、用户请求命令用API的那个函数来处理?
2、HidD_SetFeature、HidD_GetFeature只能处理标准的HID请求命令,那么用户请求命令在应用程序中用什么函数处理?
3、是不是只要固件有用户请求命令处理过程,就必须写设备驱动程序?HID设备也必须写驱动程序吗?
4、看到好多USB HID设备的例程的应用还要安装驱动程序,为什么?WINDOWS不是已包含HID设备驱动程序了吗?
5、API的ReadFile、WirteFile与HidD_SetFeature、HidD_GetFeature有什么区别?
先谢谢各位朋友!
作者: maingao    时间: 2005-5-10 17:36

你在上面所指的各种请求都不是在应用程序中来体现的。这些只是当WINDOW检测到USB设备的时候进行列举的一上过程只是USB设备响应列举的过程,这是USB控制传输中的一些指令。这些只是在设备的驱动程序中用到的东西,至于你讲的应用程序中根本不需要去关心这些的。你只关心去读写数据。
其实你的第一和第二个问题是相同 的问题。在应用程序中用户请求只是对HID设备写数据。上面的这些不需要你去关心。对HID设备进行读写用到的API一般为WriteFile和ReadFile。
一般的USB设备都得有驱动程序,不然你无法跟设备通讯。须不须要写就得根据设备来决定了,一般的是不用的。因为windows98以上的版本中都包括了 HID通信需要的各种信息。不需要再安装驱动的。因为windows 都已内置。
API的ReadFile、WirteFile与HidD_SetFeature、HidD_GetFeature有什么区别,HidD_SetFeature、HidD_GetFeature只是在查找与设备相匹配的驱动程序的过程中使用的。这些完成之后,应用程序和设备都准备好ReadFile、WirteFileAPI函数在报告里交换数据的。不一样的。前者只是请求设备的相应信息。后才是传输数据。一般来讲很少在应用程序中用到HidD_SetFeature、HidD_GetFeature。因为这个只是计算机操作系统完成的。
作者: hidusb    时间: 2005-5-11 00:16

谢谢maingao
但为什么飞思卡尔的应用例程RD68HC908USBSKEYSW是用HidD_SetFeature、HidD_GetFeature来与HID设备交换数据的?
以下是数据手册DRM013.pdf写的:
• Set KeyID through HID Set_Report (Input) command
• Get KeyID through HID Get_Report (Output) command
• Send challenge through HID Set_Report (feature) command
• Challenge result through HID Get_Report (feature) command
Command BmRequestType bRequest wValueL wValueL wIndex wLength Data
Set KeyID      $21                  $09          $00        $03         $00     $0008    KeyID
Get KeyID $21 $01 $00 $03 $00 $0008 KeyID
Send Challenge $21 $09 $00 $02 $00 $0008 Challenge
Get Challenge $21 $01 $00 $02 $00 $0008 KeyID
作者: maingao    时间: 2005-5-12 16:06

哦,具体的这个数据手册我没看过,你现在应用程序是哪一部分的。围绕着USB设备有三块程序,一种是USB设备的驱动程序,第二种是USB单片机内部的汇编程序,还有就是我们常讲的应用程序,就是Windows上的高级语言写的应用程序,是用户直接使用的!它是跟驱动程序打交道的。我不知道你讲的应用程序是不是指这个。
你上面讲的应该是驱动程序中的函数。那个应该是DDK中的API。在写驱动中用的。但些芯片的驱动程序厂商是提供的!不需要你来写了!。你只需要在高级语言中来写应用程序的,就是在WINDOWS中调用微软的API。
作者: hidusb    时间: 2005-5-12 20:32

你说的没错!Windows DDK HID API 除了几个设置、获得HID设备信息的函数外,对输入、输出报告就用ReadFile、WirteFile这两个函数。
HidD_SetFeature、HidD_GetFeature也可以用来输入、输出报告,因没有提供源程序,所以看不明白这两个函数在固件里应该如何处理?特别是处理HidD_GetFeature这个函数。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0