4549|4

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

HID驱动的USBDieviceAttach [复制链接]

我对CE的USB HID驱动有点疑问. 就是USBHID.cpp已经有USBDieviceAttach了. 在kbdhid.cpp中也有USBDieviceAttach
也就是说当我插入一个usb键盘后. 首先会调用USBHID.cpp中的USBDieviceAttach. 然后再调用kbdhid.cpp中的USBDieviceAttach.
请问CE系统是怎么知道要调用kbdhid.cpp中USBDieviceAttach. 而不是mouhid.cpp中USBDieviceAttach呢? 在哪段代码中可以看出来.

最新回复

谢谢楼上的提示. 还有个问题. 比如我插入的是游戏手柄. 应该是看接口描述符来判断是哪种HID设备来调用这个设备的驱动. 如果我写好一个game.dll. 这个dll应该怎么注册呢. 注册在哪个位置才能被系统加载? 比如: [HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\1_2\USBMouse] "DLL"="usbmouse.dll InterfaceSubclassCode为1(引导接口类), InterfaceProtocolCode为2(鼠标协议类) 系统是怎么建立不同类型HID设备与该设备驱动文件位置的? 我看应该不是1_2这个值. 因为我的键盘是1_6. 但实际上我的键盘 InterfaceSubclassCode为0(引导接口类), InterfaceProtocolCode为0(键盘协议类) 我在读HIDMDD.CPP文件. 看到加载入哪个驱动应该在LoadHidClients函数中. 具体还在研究   详情 回复 发表于 2008-5-23 17:51
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
MDD和PDD的作用导致的。
USBDeviceAttach是所有USB Device的抽象出来的MDD层的一个函数,会根据得到的设备描述符去调用相应的设备Attach函数,你插上的是USB键盘,调用的是kbdhid.cpp中的Attach,如果你插上的是U盘,那么就会调用MassStorage对应的Attach函数了。
这些函数的实现都是要符合M$定义好的程序结构的,输入输出参数,各个参数及结果、返回值用的结构体,都是定义好的,才可以实现这样的功能。
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我的意思是:
USBHID.cpp中的USBDieviceAttach是所有HID设备插入后调用的第一个函数. 然后调用各自的USBDieviceAttach.
如果插入的键盘. 则调用kbdhid.cpp中的USBDieviceAttach. 鼠标则调用mouhid.cpp中USBDieviceAttach.

看了楼上的提示还是不太明白是哪个函数来根据不同HID设备类来分别调用其USBDieviceAttach呢? 能否举例说明? 谢谢.
我准备用EVC写一个HID设备的dll驱动程序.
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
是device.exe通过注册表一层层调用下来的。
你可以看HID相关的def,必然会export USBDeviceAttach接口。要满足WINCE的驱动架构,这个函数是必然存在的。
当有Device接入时,根据描述符判断是哪种device,然后加载该device对应的dll,这个dll里面就必然包含了USBDeviceAttach,而且,一般还会抽象出MDD的USBDeviceAttach,并要求实现PDD的USBDeviceAttach,至于PDD的里面是否执行什么,就由OEM决定了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢楼上的提示. 还有个问题. 比如我插入的是游戏手柄. 应该是看接口描述符来判断是哪种HID设备来调用这个设备的驱动.
如果我写好一个game.dll. 这个dll应该怎么注册呢. 注册在哪个位置才能被系统加载? 比如:
[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients\Default\Default\1_2\USBMouse] "DLL"="usbmouse.dll
InterfaceSubclassCode为1(引导接口类),
InterfaceProtocolCode为2(鼠标协议类)
系统是怎么建立不同类型HID设备与该设备驱动文件位置的? 我看应该不是1_2这个值. 因为我的键盘是1_6. 但实际上我的键盘
InterfaceSubclassCode为0(引导接口类),
InterfaceProtocolCode为0(键盘协议类)
我在读HIDMDD.CPP文件. 看到加载入哪个驱动应该在LoadHidClients函数中. 具体还在研究

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表