阅读:1359回复:1
紧急求助:USB设备移除后再插上,无法激活!
我插上设备,在弹出的提示框中输入驱动程序名称后,能正确安装、调用USBDeviceAttach函数初始化设备了,我在应用程序中用CreateFile和DeviceIOControl函数可以访问了,但是当我拔出设备第二次插进去的时候,那个提示框又弹出来要我输入驱动程序名,我跟踪进去发现在调用USBDeviceAttach函数里的ActivateDevice时失败,无法激活设备!我查了一些资料,说ActivateDevice要调用到流驱动的XXX_Init函数,必须要在DLL中输出XXX_Init函数并正确执行。这个函数我也写有了,在.def文件中输出了。而且也注册了设备移出时的回调函数,为什么第一次安装的时候调用ActivateDevice能成功,然后拔出设备再插进去的时候就无法激活了呢?
这个问题卡了我一个星期了还没解决,各位大哥有谁熟悉WinCE下流接口驱动的,请指点一下小弟,非常感激! chenjiaotou@tom.com BOOL USBDeviceAttach(USB_HANDLE hDevice, LPCUSB_FUNCS lpUsbFuncs, LPCUSB_INTERFACE lpInterface, LPCWSTR UniqueDriverId, LPBOOL fAccessContrl, LPCUSB_DRIVER_SETTINGS lpDriverSettings, DWORD dwUnused) { ...... ...... __try { //hStreamDevice就是在Active键下的Hnd键值 pLmeusb->hStreamDevice = ActivateDevice(wsSubClassRegKey, (DWORD)pLmeusb); } __except (EXCEPTION_EXECUTE_HANDLER) { pLmeusb->hStreamDevice = 0; printf("Can't Activate Device! rc=%d\r\n", GetLastError()); } printf("pLmeusb->hStreamDevice = %d\n", pLmeusb->hStreamDevice); //ok if (pLmeusb->hStreamDevice) { //为设备注册一个回调函数, 在设备拔出时由系统回调 if (lpUsbFuncs->lpRegisterNotificationRoutine(hDevice,DeviceNotify,pLmeusb)) { *fAccessContrl = TRUE; // Accept this device as our own } else { MessageBox(NULL, _T("Failed to RegisterNotificationRoutine!"), _T("OK"), MB_OK); } } else { MessageBox(NULL, _T("Can't Activate Device!"), _T("OK"), MB_OK); } return TRUE; } BOOL WINAPI DeviceNotify(LPVOID lpvNotifyParameter, DWORD dwCode, LPDWORD * dwInfo1, LPDWORD * dwInfo2, LPDWORD * dwInfo3, LPDWORD * dwInfo4) { if (dwCode == USB_CLOSE_DEVICE) { //清理占用的资源 //取得驱动程序指针 PLMEUSB_CONTEXT pLmeusb = (PLMEUSB_CONTEXT)lpvNotifyParameter; if(!DeactivateDevice(pLmeusb->hStreamDevice)) { MessageBox(NULL, _T("DeactivateDevice error"), _T("OK"), MB_OK); } Sleep(1000); PDEVICECONTEXT pPDD = (PDEVICECONTEXT)pLmeusb->dwDeviceContext; //先释放设备上下文 LocalFree(pPDD->usbVideoIF); LocalFree(pPDD); //再释放驱动程序 LocalFree(pLmeusb); return TRUE; } return FALSE; } |
|
沙发#
发布于:2007-03-23 18:52
这个问题现在已经解决了,现在又有个新的问题,就是对USB设备读写数据后,返回来的应答值不对,好像写什么值进去,它返回来的应答就是什么值,不符合预定的应答值。 请问各位大哥,可能是什么原因造成读写不正确?? 斑竹大哥,给点意见吧
|
|