最近在2440上写了motorola L6我手机的USB驱动. 现在驱动能够被加载. 也能读取数据和设备描述符等. 但是有一个问题就是每次拔出我的设备时候. CE系统不调用我的回调函数. 以下是我注测回调函数的过程. 这种现象导致我手机拔出了. 但系统并没有释放USB设备资源. 请教在CE下搞过USB驱动的DX帮看看是什么原因导致不能调用回调函数.
RETAILMSG(1, (TEXT("Activate Device! \r\n")));
//激活流驱动接口,使应用程序能够以File API的方式来访问
pDrv->hStreamDevice = ActivateDevice (wsSubClassRegKey, (DWORD)pDrv);
if (pDrv->hStreamDevice)
{
// register for USB callbacks
//在设备拔出时由系统回调
if (lpUsbFuncs->lpRegisterNotificationRoutine (hDevice, USBDeviceNotificationCallback, pDrv))
{
// Accept this device as our own
*fAcceptControl = TRUE;
}
else
{
RETAILMSG(1, (TEXT("Can't register for USB Callbacks! rc=%d\r\n"),
GetLastError()));
}
}
else
{
RETAILMSG(1, (TEXT("Can't activate stream device! rc=%d\r\n"),
GetLastError()));
}
每次上电后. 插入USB设备后. 系统会调用USBDeviceAttac. 但拔出USB后. 没调用已经注册的回调函数. 并且在不断电情况下再插入USB设备也不调用USBDeviceAttac了. 这是怎么回事?