打印

USB HID设备

[复制链接]
5365|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就可以开发,很简单。

使用特权

评论回复
5
zhuww| | 2011-11-24 15:05 | 只看该作者
firmware需要做的是在总线枚举的时候,发送setup包的时候报告自己的设备类型就可以了。下面要做的就是遵守hid规范。

使用特权

评论回复
6
llia|  楼主 | 2011-11-24 15:09 | 只看该作者
windows这边,发送控制命令的应该是私有协议,通信的时候直接访问USB设备。这个和windows自带的键盘鼠标标准驱动在访问固件的时候是否会冲突?比如模式什么的。

使用特权

评论回复
7
llia|  楼主 | 2011-11-24 15:13 | 只看该作者
控制命令是直接访问USB设备,还是要以驱动形式访问?我希望控制命令这一块能够直接访问,这样达到的效果是,只有win自带的键鼠驱动就可以实现我的目的了,不用单装驱动,可以实现吗?

使用特权

评论回复
8
yufe| | 2011-11-24 15:16 | 只看该作者
在USB总线枚举识别设备之前,windows驱动不会加载。事实上,USB总线driver枚举设备时执行的是协议规定的标准动作。枚举到设备类型之后,接下来才是查找注册表,加载相应的驱动。

使用特权

评论回复
9
zhuww| | 2011-11-24 15:39 | 只看该作者
没有自己的驱动的话,endpoint 0是无法直接访问的。你能做的就是在firmware中,对host发来的命令进行正确响应——比如你想让自己的设备识别成HID设备,那么就要做对应的回答。

使用特权

评论回复
10
llia|  楼主 | 2011-11-24 15:43 | 只看该作者
实际上,我要做的事情有两步

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

2. 通过软件(不包含win底层驱动的纯软件),枚举出我自己的设备,然后发送控制命令,控制终端设备(比如,禁止鼠标输入,禁止键盘输入,或者禁止输入特定的字节等功能)

使用特权

评论回复
11
llia|  楼主 | 2011-11-24 15:47 | 只看该作者
底层的软硬件和win系统的软件部分(不包含键鼠的标准驱动)都是自己开发,是端到端的,因此只要通信没问题,正确解释协议不时问题。我的控制命令(私有),和win的标准驱动会不会冲突,会不会导致通信失败。是否需要模式切换什么的


还有有没有什么推荐的现成的开发板,成本价格大概多少?

使用特权

评论回复
12
lium| | 2011-11-24 15:54 | 只看该作者
这是3个usb的组合设备,如果端点够用,可以做成3个hid设备,免驱

如果端点不够,则做成2个hid加一个自定义设备,复用端点0,需要写自定义设备的驱动

使用特权

评论回复
13
llia|  楼主 | 2011-11-24 15:59 | 只看该作者
我的目标是,不添加额外的win驱动,仅仅在应用层做工作,实现上述功能,可能吗?

使用特权

评论回复
14
zhuww| | 2011-11-24 16:05 | 只看该作者
HID还有力反馈啊很多设备,是可以由Host向Firmware发送特定包的。
所以你在Host发送的包中加入自定义的命令码,Firmware收到Host的包的时候,判断自定义命令码,然后做相应动作。
理论上是可行。
三年前做过HID设备,但是现在统忘却了。

使用特权

评论回复
15
langgq| | 2011-11-24 16:09 | 只看该作者
1是完全可以做到的。
2我想可能要添加自己的驱动。貌似不能在应用层直接向USB总线发命令。

使用特权

评论回复
16
llia|  楼主 | 2011-11-24 16:13 | 只看该作者
是否可以做HID+CDC的复合类型?

使用特权

评论回复
17
hanwe| | 2011-11-24 16:16 | 只看该作者
用DDK里面的SetupDi* API函数可以查询设备的ID

使用特权

评论回复
18
yufe| | 2011-11-24 19:47 | 只看该作者
hid设备应该不用驱动,但是要实现你的功能,恐怕还得有一些软件的支持。这不是驱动。

使用特权

评论回复
19
wangpe| | 2011-11-24 19:57 | 只看该作者
直接在设备管理器里面将对应的鼠标、键盘设备停用不就得了,软件都不用自己做。

如果觉得设备管理器用得不爽,那么既然设备管理器能够将对应的鼠标、键盘设备停用,那么应该也会有相应的api提供,自己再写个小软件,调用对应的api即可。

使用特权

评论回复
20
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

粉丝