WinCE5.0
我的CE Device已经有FAT32的分区了
请问如何把CE Device在连接PC后,当作U盘?
看到很多大侠已经实现了:
“WinCE5有,支持那个U盘的。那个core os service下面那个usb host support加一个usb storeage class driver,然后加一个device drivers下面的usb fuction clients的一个mass storage就可以了 ,当然ohci之类的要选上。”
只加上这些就可以了吗?,但是我加上了,PC端看不到U盘的盘符
偶尔有一次看到了盘符,却根本打不开。
注册表哪里需要改动吗?
没有说明连接方式。。。。是要实现activesyc 还是。。。如果是,还要加as相关组件。。。。。
不是用ActiveSyc
就是通过USB,像插入U盘一样,在PC端出现个盘符,然后可以读取里面的内容
难度WinCE5.0没有实现这个功能吗? 还需要自己编写吗?
sunrain_hjb兄,你有实现这个功能了吗?
RAPI不是基于ActiveSync的吗?
在Device要加ActiveSync的组件,PC端要装ActiveSync。
我是想不用ActiveSync来实现U盘功能,好多人应该都做过吧
没错,RAPI是基于ActiveSync。
我当时基于RAPI实现了文件的操作。
跟你所需要的还不一样啊。^_^
楼主提到的方法是让CE设备成为HOST端,U盘接入到设备中,而不是让设备成为U盘。
要让设备接到PC的时候能够认出来是U盘,必须要有如下几个方面的资源:
1. 确定硬件平台有USB Client支持(非HOST)。
2. 加入Device Drivers -> USB Function Clients -> Mass Storage(CE6.0环境)。(注意Mass Storage和Serial两个驱动最好不要同时并存,因为ActiveSync有可能通过Serial连接。)
谢谢xinshine
1. 怎么确定硬件平台有USB Client支持?
2. 已加入Device Drivers -> USB Function Clients -> Mass Storage(Serial驱动未加)
目前仍不可以
现在,如果我插上SD卡PC上会有盘符
我看了调试的信息,前面的都正常,后面的有问题
0x8dfccb90: CStore Destructor(000D7EA0)
0x8dfccb90: SDMemory: GetDeviceInfo - Profile = SDMemory, length = 18
0x8dfccb90: SDMemory: GetStorageID Insufficient buffer space
SDMemory: -GetStorageID
0x8dfccb90: Loading partition driver mspart.dll hModule=8DF8D264
0x8dfccb90: Driver mspart.dll loaded
0x8dd13550: UsbFnMdd!CPipe::Open: Opened pipe (0x004dcff8): physical address 1, bus address 0x81
0x8dd13550: UsbFnMdd!UfnMdd_OpenPipe: Opened endpoint 0x81
0x8dd13550: UsbFnMdd!CPipe::Open: Opened pipe (0x004dd070): physical address 2, bus address 0x02
0x8dd13550: UsbFnMdd!UfnMdd_OpenPipe: Opened endpoint 0x2
0x8dd29b98: UsbMsFn!ProcessScsiRead10: IOCTL_DISK_READ failed; error = 160
0x8dd29b98: UsbMsFn!STORE_ExecuteCommand: failed to execute command 0x28
0x8dd29b98: UsbMsFn!BOT_ExecuteCB: Command : failed
0x8dfccb90: Opened the store hStore=000D8DE0
0x8dfccb90: NumSec=1939456 BytesPerSec=512 FreeSec=0 BiggestCreatable=0
0x8dfccb90: Partition Part00 NumSectors=1939454
0x8dfccb90: MSPART!PD_OpenPartition: dwStoreId=000D8DE0, PartName=Part00
0x8dfccb90: FSD_MountDisk: mounting volumes for hDsk=000DB100
0x8dfccb90: SDMemory: GetDeviceInfo - Profile = SDMemory, length = 18
0x8de87000: FSREG: Invalid HKEY 0x00000000
0x8de87000: FSREG: Invalid HKEY 0x00000000
0x8dd29b98: UsbMsFn!ProcessScsiRead10: IOCTL_DISK_READ failed; error = 160
0x8dd29b98: UsbMsFn!STORE_ExecuteCommand: failed to execute command 0x28
0x8dd29b98: UsbMsFn!BOT_ExecuteCB: Command : failed
查了WINERROR.H
// MessageId: ERROR_BAD_ARGUMENTS
// MessageText:
// One or more arguments are not correct.
#define ERROR_BAD_ARGUMENTS 160L
错误发生处
DWORD dwIoControlCode = (g_fLegacyBlockDriver) ? DISK_IOCTL_READ : IOCTL_DISK_READ;
fResult = DeviceIoControl(
g_hStore,
dwIoControlCode,
&sgSgReq,
sizeof(sgSgReq),
NULL,
0,
&dwBytesReturned,
NULL);
if (fResult) {
DEBUGMSG(ZONE_COMMENT, (_T(
"%s IOCTL_DISK_READ passed; %u bytes read\r\n"
), pszFname, dwBytesReturned));
}
else {
DWORD dwError = GetLastError();
DEBUGMSG(ZONE_ERROR, (_T(
"%s IOCTL_DISK_READ failed; error = %u\r\n"
), pszFname, dwError));
goto EXIT;
}
把USBFN那部分驱动看明白就OK了,然后修改注册表就可以了。针对不同的功能,系统加载对应的驱动就OK了,我实现了WINCE60+S3C6400下的做U盘功能
1。USBFN-------用于同步
2。MASSSTROAGE-----用于U盘
学习中。以前看2442 WM下的实现,做了一个软件切换的,不知道原理。。。。。。。。。