Windows Mobile USB Mass Storage(大容量存储器)功能开发总结
来源:互联网 发布:淘宝网雪纺衫 编辑:程序博客网 时间:2024/06/07 07:45
1. 目标:
隐藏系统【设置-连接】里自带的“由USB连接到PC”,添加自己的设置项,在原有功能:“USB ActiveSync、启用高级网络功能”的基础上添加“USB大容量存储器”功能,使USB线连接到PC上时能把设备上的SD卡以移动磁盘的形式呈现出来。
2. 模块划分:
此功能开发分为三部分:
(1) 控制面板程序(usbtopc.cpl)。
(2) 功能主程序(主要是UI、逻辑及注册表处理)(usbtopc.exe),点击【设置-连接】里的图标所启动的程序。
(3) USB驱动转换程序(usbswtich.exe)。
PS:也可以将后面两个程序集成为一个程序,便于加强控制。
3. 三者关系:
系统device.exe自动查找cpl程序,在进入【设置】时加载usbtopc.cpl,在设置里添加图标;Usbtopc.cpl捕获双击行为,调用usbtopc.exe,启动功能主程序;选择完要切换的驱动确认后,usbtopc.exe调用usbswitch.exe进行驱动切换。
4. usbtopc.cpl:在【设置】里添加图标,并会捕获双击行为,启动其他程序。
usbtopc.exe:提供功能主界面,处理是否需要切换驱动的逻辑,并根据用户的选择修改相应的注册表信息(DefaultClientDriver)。
usbswitch.exe:根据注册表信息(DefaultClientDriver),进行USB驱动切换。
5. 不知缘由CE_MODULES_USBMSFN宏失效,通过在
I:/WM604/PLATFORM/DracoBSP/FILES/wpc/oem.cpm.csv
文件里添加CE_MODULES_USBMSFN,OEMDrivers解决。
6. 取消【设置-连接】里的“由USB连接到PC”模块。
在platform.reg中添加如下注册设置:
[HKEY_LOCAL_MACHINE/ControlPanel/PCConnection]
"Group"=dword:2
"redirect"=""
7. 添加USB Mass Storage功能
(1) 添加SYSGEN_USBFN_STORAGE宏(所用的bsp上本身就添加了)
(2) 上面的宏原则上会使CE_MODULES_USBMSFN宏生效。(所用的bsp不知为何没生效,第5条给出了解决方案)
(3) 在platform.reg中添加注册表信息(所用的bsp已经给出)
(4) 在platform.bib中添加文件信息。
保证镜像运行起来后,windows目录下有usbmsfn.dll文件,此为usb mass Storage的驱动文件。
示例设置:
[HKEY_LOCAL_MACHINE/Drivers/USB/FunctionDrivers/Mass_Storage_Class]
"Dll"="usbmsfn.dll"
"idvendor"=dword:1286
"idProduct"=dword:A6CD
"Product"="Marvell Mass Storage"
"Manufacturer"="Marvell"
"InterfaceSubClass"=dword:06
"InterfaceProtocol"=dword:50
"DeviceName"="DSK2:"
"Removable"=dword:1
8. usb驱动切换程序参照微软源码usbswitch
I:/wm604/PUBLIC/APPS/OAK/SAMPLES/USBSWITCH
核心代码:
DeviceIoControl(hUfn, IOCTL_UFN_CHANGE_CURRENT_CLIENT, &ucn, sizeof(ucn), NULL, 0, NULL, NULL);
9. cpl程序出现的位置设置:
(1)设置注册表(2代表出现在【连接】页)
[HKEY_LOCAL_MACHINE/ControlPanel/usbtopc]
"Group" = dword:2
(2)cpl程序里处理CPL_IDNAME消息,设置控制面板小程序的名称,这个名称可以不跟程序本身的名称相同,但必须跟注册表里设置的名字相同(也便是usbtopc),这便是程序跟注册表里的设置联系的纽带。
10. 微软有的版本的usbmsfn.dll 是存在问题的,如果一直有问题,可以换用新版本的dll文件试试。
11. 后来添加了sd卡检测功能,卡不存在时不允许启用 “大容量存储器选项”
具体实现见:WM6.0 UDisk 添加存储卡检测功能开发备忘
12. 如果对USB驱动的概念不清楚,可参考文章:WinCE USB驱动架构及术语明析
13. 如何在”设置“中添加项,参考文章:Windows mobile在控制面板中添加应用
- Windows Mobile USB Mass Storage(大容量存储器)功能开发总结
- STM32 USB 大容量存储器Mass Storage工程的讲解
- STM32 USB 大容量存储器Mass Storage工程的讲解
- USB Mass Storage大容量存储的基本知识
- USB Mass Storage大容量存储的基本知识
- USB Mass Storage大容量存储的基本知识
- 008-Android平台开发-USB mass storage porting-USB功能移植
- USB复合设备(mass storage&hid)
- USB复合设备(mass storage&hid)
- USB复合设备(mass storage&hid)
- usb Mass Storage
- USB Mass Storage协议
- USB OTG mass storage
- USB mass storage协议
- USB mass storage协议
- USB Mass Storage协议
- USB Mass Storage协议
- USB Mass Storage协议
- Windows Mobile系统程序与控制面板命令参数
- 配置管理
- 循环语句
- Windows mobile在控制面板中添加应用
- eclipse中运行jsp程序时出现的异常“JETEmitters’is missing required library”
- Windows Mobile USB Mass Storage(大容量存储器)功能开发总结
- 关于Android下,修改frameworks/policies/xxx...文件后的编译问题
- Struts2中struts.xml的Action配置详解
- WM6.0 USBToPC 添加存储卡检测功能开发备忘
- __attribute__ 详解
- android开发过程中遇到的一些问题(包括自定义ProgressBar, Intent, Animation, ListView, RadioButton)
- 友元函数的应用
- 关于JSP的一些小的知识适于初学者,高手勿看·
- 【转】Linux 里有/lib和/usr/lib,这两个目录下的库文件有什么区别吗?如果没区别为什么又要分开放呢