3138|2

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

紧急求助:USB设备移除后再插上,无法激活! [复制链接]

紧急求助:USB设备移除后再插上,无法激活!
2、我插上设备,在弹出的提示框中输入驱动程序名称后,能正确安装、调用USBDeviceAttach函数初始化设备了,我在应用程序中用CreateFil

e和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;
}

最新回复

这个问题现在已经解决了,现在又有个新的问题,就是对USB设备读写数据后,返回来的应答值不对,好像写什么值进去,它返回来的应答就是什么值,不符合预定的应答值。 请问各位大哥,可能是什么原因造成读写不正确??  详情 回复 发表于 2007-3-23 18:43
点赞 关注

回复
举报

55

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
做个广告,随便帮你顶
条件:1、wince开发2年以上。
      2、做过媒体处理的优先考虑。
      3、熟悉网络通讯协议。
      4、个人在兼职期间,时间能够保证。
      5、有良好的团队合作意识。
      6、有良好的上网条件。
注意:付款方式按照项目付款。

联系方式:project911@163.com

 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个问题现在已经解决了,现在又有个新的问题,就是对USB设备读写数据后,返回来的应答值不对,好像写什么值进去,它返回来的应答就是什么值,不符合预定的应答值。 请问各位大哥,可能是什么原因造成读写不正确??
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表