11.03.2009

切換 usb profile

依照慣例,我又在copy人家的code..:p

這一篇

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 的字串。

沒有留言: