USB HID设备

[复制链接]
6170|24
 楼主| llia 发表于 2011-11-24 14:39 | 显示全部楼层 |阅读模式
我的想法是,开发一个USB设备,该设备具有如下功能

1. 同时具有键盘和鼠标功能,能被xp系统自动识别为hid设备。(键盘鼠标都是标准的)
2. 同时,我可以通过PC上的相应软件向它发送一些控制命令,比如禁止键盘输入,禁止鼠标输入。设备接收到命令后就不再发送键盘或者鼠标消息到PC了。

请问这样的USB设备可以实现吗?哪位大侠给个思路。
 楼主| llia 发表于 2011-11-24 14:43 | 显示全部楼层
如果可以实现,请问第2部分是否要单独写驱动,还是实现一个软件,直接向USB设备发送控制命令就可以了?
目标是:USB固件部分和上位软件都可以自己开发,中间的驱动最好只用windows自带的标准的,可以不用额外安装驱动最好
wangpe 发表于 2011-11-24 14:51 | 显示全部楼层
没问题,HID设备的读写是有API的,同时windows也提供了标准驱动。
选择什么样的client controller都行,关键是你自己熟悉,这样好写firmware。
guoyt 发表于 2011-11-24 15:01 | 显示全部楼层
对,譬如cypress的,一般都是51的核,用keil就可以开发,很简单。
zhuww 发表于 2011-11-24 15:05 | 显示全部楼层
firmware需要做的是在总线枚举的时候,发送setup包的时候报告自己的设备类型就可以了。下面要做的就是遵守hid规范。
 楼主| llia 发表于 2011-11-24 15:09 | 显示全部楼层
windows这边,发送控制命令的应该是私有协议,通信的时候直接访问USB设备。这个和windows自带的键盘鼠标标准驱动在访问固件的时候是否会冲突?比如模式什么的。
 楼主| llia 发表于 2011-11-24 15:13 | 显示全部楼层
控制命令是直接访问USB设备,还是要以驱动形式访问?我希望控制命令这一块能够直接访问,这样达到的效果是,只有win自带的键鼠驱动就可以实现我的目的了,不用单装驱动,可以实现吗?
yufe 发表于 2011-11-24 15:16 | 显示全部楼层
在USB总线枚举识别设备之前,windows驱动不会加载。事实上,USB总线driver枚举设备时执行的是协议规定的标准动作。枚举到设备类型之后,接下来才是查找注册表,加载相应的驱动。
zhuww 发表于 2011-11-24 15:39 | 显示全部楼层
没有自己的驱动的话,endpoint 0是无法直接访问的。你能做的就是在firmware中,对host发来的命令进行正确响应——比如你想让自己的设备识别成HID设备,那么就要做对应的回答。
 楼主| llia 发表于 2011-11-24 15:43 | 显示全部楼层
实际上,我要做的事情有两步

1. 插入USB设备,被win系统识别成键盘鼠标设备,并能够正常进行键鼠操作

2. 通过软件(不包含win底层驱动的纯软件),枚举出我自己的设备,然后发送控制命令,控制终端设备(比如,禁止鼠标输入,禁止键盘输入,或者禁止输入特定的字节等功能)
 楼主| llia 发表于 2011-11-24 15:47 | 显示全部楼层
底层的软硬件和win系统的软件部分(不包含键鼠的标准驱动)都是自己开发,是端到端的,因此只要通信没问题,正确解释协议不时问题。我的控制命令(私有),和win的标准驱动会不会冲突,会不会导致通信失败。是否需要模式切换什么的


还有有没有什么推荐的现成的开发板,成本价格大概多少?
lium 发表于 2011-11-24 15:54 | 显示全部楼层
这是3个usb的组合设备,如果端点够用,可以做成3个hid设备,免驱

如果端点不够,则做成2个hid加一个自定义设备,复用端点0,需要写自定义设备的驱动
 楼主| llia 发表于 2011-11-24 15:59 | 显示全部楼层
我的目标是,不添加额外的win驱动,仅仅在应用层做工作,实现上述功能,可能吗?
zhuww 发表于 2011-11-24 16:05 | 显示全部楼层
HID还有力反馈啊很多设备,是可以由Host向Firmware发送特定包的。
所以你在Host发送的包中加入自定义的命令码,Firmware收到Host的包的时候,判断自定义命令码,然后做相应动作。
理论上是可行。
三年前做过HID设备,但是现在统忘却了。
langgq 发表于 2011-11-24 16:09 | 显示全部楼层
1是完全可以做到的。
2我想可能要添加自己的驱动。貌似不能在应用层直接向USB总线发命令。
 楼主| llia 发表于 2011-11-24 16:13 | 显示全部楼层
是否可以做HID+CDC的复合类型?
hanwe 发表于 2011-11-24 16:16 | 显示全部楼层
用DDK里面的SetupDi* API函数可以查询设备的ID
yufe 发表于 2011-11-24 19:47 | 显示全部楼层
hid设备应该不用驱动,但是要实现你的功能,恐怕还得有一些软件的支持。这不是驱动。
wangpe 发表于 2011-11-24 19:57 | 显示全部楼层
直接在设备管理器里面将对应的鼠标、键盘设备停用不就得了,软件都不用自己做。

如果觉得设备管理器用得不爽,那么既然设备管理器能够将对应的鼠标、键盘设备停用,那么应该也会有相应的api提供,自己再写个小软件,调用对应的api即可。
guoyt 发表于 2011-11-24 20:03 | 显示全部楼层
1. 同时具有键盘和鼠标功能,能被xp系统自动识别为hid设备。(键盘鼠标都是标准的)
-->可以实现,你可以参考HID规格中关于“复合设备”的描述。
使用系统自带的HID驱动程序即可,就不用自己开发驱动了。

2. 同时,我可以通过PC上的相应软件向它发送一些控制命令,比如禁止键盘输入,禁止鼠标输入。设备接收到命令后就不再发送键盘或者鼠标消息到PC了。  
如果可以实现,请问第2部分是否要单独写驱动,还是实现一个软件,直接向USB设备发送控制命令就可以了?  
目标是:USB固件部分和上位软件都可以自己开发,中间的驱动最好只用windows自带的标准的,可以不用额外安装驱动最好  
-->需要完成发命令的功能,跟据你的意思是可以实现的。即 只需要开发 a.PC端应用程序 b.USB chip firmware。  
驱动都是自带的。应用程序发送控制命令,USB firmware收到后,作出响应(如disable某个功能)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

961

主题

8893

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部