這一篇
USB Function profile switcher
示範了application 變更 usb profile 的code:先說OS 內建支援的 profile 都列在: [HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
下面的code sample 就是作者(Nicloas BESSON)提供的,切換activesync 和 mass storage 的 code:
void SwitchUSBFunctionProfile(BOOL bEnableActiveSync)
{
HANDLE hUSBFn;
UFN_CLIENT_INFO info;
DWORD dwBytes;
// Open the USB function driver
hUSBFn = CreateFile(USB_FUN_DEV, DEVACCESS_BUSNAMESPACE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
if(bEnableActiveSync)
{
// Enable USB Function profile for activesync
swprintf(info.szName, _T("Serial_Class"));
DeviceIoControl(hUSBFn, IOCTL_UFN_CHANGE_CURRENT_CLIENT,
info.szName, sizeof(info.szName), NULL, 0, &dwBytes, NULL))
}
else
{
// Enable USB Function for mass-storage
swprintf(info.szName, _T("Mass_Storage_Class"));
DeviceIoControl(hUSBFn, IOCTL_UFN_CHANGE_CURRENT_CLIENT,
info.szName, sizeof(info.szName), NULL, 0, &dwBytes, NULL);
}
}
我完整而沒有修改的 copy 過來。
上述使用到的 define value 都在
The defines values are located in %_WINCEROOT%\PUBLIC\COMMON\OAK\INC\usbfnioctl.h
方法大概是用 USB_FUN_DEV 提供的 IOControl -
IOCTL_UFN_CHANGE_CURRENT_CLIENT
來變換,吃的 argument 是 描述 profile 的字串。
沒有留言:
張貼留言