首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]请教关于USB HID设备应用的问题

[求助]请教关于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有什么区别?
先谢谢各位朋友!
你在上面所指的各种请求都不是在应用程序中来体现的。这些只是当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。因为这个只是计算机操作系统完成的。
Gulf
谢谢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
哦,具体的这个数据手册我没看过,你现在应用程序是哪一部分的。围绕着USB设备有三块程序,一种是USB设备的驱动程序,第二种是USB单片机内部的汇编程序,还有就是我们常讲的应用程序,就是Windows上的高级语言写的应用程序,是用户直接使用的!它是跟驱动程序打交道的。我不知道你讲的应用程序是不是指这个。
你上面讲的应该是驱动程序中的函数。那个应该是DDK中的API。在写驱动中用的。但些芯片的驱动程序厂商是提供的!不需要你来写了!。你只需要在高级语言中来写应用程序的,就是在WINDOWS中调用微软的API。
Gulf
你说的没错!Windows DDK HID API 除了几个设置、获得HID设备信息的函数外,对输入、输出报告就用ReadFile、WirteFile这两个函数。
HidD_SetFeature、HidD_GetFeature也可以用来输入、输出报告,因没有提供源程序,所以看不明白这两个函数在固件里应该如何处理?特别是处理HidD_GetFeature这个函数。
返回列表