关于USB MassStorage Client Function的几个问题?

rushlife 2009-01-17 09:54:50
在WinCE上实现优盘的功能已经实现了,现在我有几个小问题想请教一下?
1、usbmsfn.dll是MassStorage Client Function对应的驱动文件,这个文件的源代码在哪里,如何编译?
我通过查阅以前的帖子,发现可以通过sysgen_capture usbmsfn 得到对应的sources文件,以下是我得到的文件
//////////////////////////////////////////////////
TARGETNAME=usbmsfn

TARGETTYPE=DYNLINK
RELEASETYPE=PLATFORM
SYNCHRONIZE_DRAIN=1

DLLENTRY=DllEntry

DEFFILE=$(_PUBLICROOT)\common\oak\lib\$(_CPUINDPATH)\usbmsfn.def

SOURCELIBS=

TARGETLIBS=\
$(_PUBLICROOT)\common\oak\lib\$(_CPUINDPATH)\usbmsfn_lib.lib \
$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\scsi2dad.lib \
$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ufnclientlib.lib \
$(_PUBLICROOT)\common\oak\lib\$(_CPUINDPATH)\storeapi.lib \
$(_SYSGENSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib

SOURCES=
//////////////////////////
我还是个初学者,对这个文件看的不是很懂,为什么sources这里是空的?
2、在注册表中
////////////////////////////
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Mass_Storage_Class]
"Dll"="usbmsfn.dll"
"InterfaceSubClass"=dword:06
"InterfaceProtocol"=dword:50
"DeviceName"="DSK1:"
"FriendlyName"="Mass Storage"
"idVendor"=dword:045E
"Manufacturer"="Generic Manufacturer (PROTOTYPE--Remember to change idVendor)"
"idProduct"=dword:FFFF
"Product"="Generic Mass Storage (PROTOTYPE--Remember to change idVendor)"
"bcdDevice"=dword:0
////////////////////////////////////////////////////
InterfaceSubClass=6,这里的定义是什么?
我查阅资料发现表示是SCSI接口,当改成2时对应应该是的是ATAPI(光驱).
可是我改成2后,发现系统还是一样将其识别为普通的优盘.
这里想问下InterfaceSubClass是什么意思?应该在哪里找对应的资料.
此外MSDN上的InterfaceProtocol=50,而我的手机中的InterfaceProtocol=80,这个键值又是什么意思?
3、我看了下对应的代码,发现bot.cpp比较像是Client Function的源代码,我想请问这里这个代码是在哪里对U盘的类型进行判断的?能不能像U3盘一样将U盘识别为光盘或者磁盘?

上面问的问题比较多,可能没有解释清楚,请大家多多指教!
...全文
417 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seven_zhangxw 2009-01-20
  • 打赏
  • 举报
回复
学习了一把
hzdysymbol 2009-01-18
  • 打赏
  • 举报
回复
我还是个初学者,对这个文件看的不是很懂,为什么sources这里是空的?
因为这个DLL所需要的源代码都已经在相关的lib文件里了,所以在这里没有代码需要编译,所以sources为空
yangkunzhen 2009-01-18
  • 打赏
  • 举报
回复
源码在pubic\common\oak\driver\usbfn\class\

目前在Windows CE 5.0中微软好像只实现了SICI-2指令,所以当你指定InterfaceSubClass=2(ATAPI(光驱))是没有用的.

使用InterfaceProtocol=80 表示采用的是 BOT (bulk-only transport),所以在源码的文件中有一个bot.c文件,也就是transport layer。而你说的在MSDN上的InterfaceProtocol=50,我觉得应该不对吧,至少我在MSDN上没看到,(可以给我个链接),具体的话你可以看 USB mass storage spec,这些都有详细的介绍。


最后说明下,Windows CE usb driver本身就是一个很大的模块,如果真想做下去,并做的很好,建议还是多看看些spec。不然很多USB 的概念你都不知道,那,如果碰到BUG你也无从入手。
xqhrs232 2009-01-18
  • 打赏
  • 举报
回复
有源代码的,你在CE目录下好好找找

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧