是什么原因导致不能调用回调函数

紫皮书   2008-5-10 10:00 楼主
最近在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()));
    }

回复评论 (1)

每次上电后. 插入USB设备后. 系统会调用USBDeviceAttac. 但拔出USB后. 没调用已经注册的回调函数. 并且在不断电情况下再插入USB设备也不调用USBDeviceAttac了. 这是怎么回事?
点赞  2008-5-12 16:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复