打印

帮我分析一下问题可能出在什么地方?

[复制链接]
526|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengf|  楼主 | 2018-12-7 12:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USB设备拔插无法识别 芯片是cypress的。希望各位能帮我分析一下问题可能出在什么地方?
沙发
renyaq| | 2018-12-7 12:48 | 只看该作者
如果可能的话,能否简要介绍一下系统检测USB设备的原理。谢谢

使用特权

评论回复
板凳
pangb| | 2018-12-7 12:53 | 只看该作者
C/C++ code

LRESULT CALLBACK
WndProc( HWND hwnd,       // handle to window
                   UINT uMsg,       // message identifier
                   WPARAM wParam,   // First message parameter
                   LPARAM lParam)   // second message parameter
{
     if ( g_device == NULL )
         return 0;
     DEV_BROADCAST_HDR * dhr;
     switch ( uMsg )
     {
     case WM_TIMER:
         g_device->CheckChange();
     break;
     case WM_DEVICECHANGE:  //
         char str[256];
         dhr = (DEV_BROADCAST_HDR*)lParam;
         switch( wParam )
         {
         case DBT_DEVICEARRIVAL:
             PDEV_BROADCAST_DEVICEINTERFACE lpdbd;
             PDEV_BROADCAST_VOLUME lpdbv;
             switch( dhr->dbch_devicetype )
             {
             case DBT_DEVTYP_DEVICEINTERFACE:
                 lpdbd = (PDEV_BROADCAST_DEVICEINTERFACE)lParam;
                 sprintf( str, "GUID:%x-%x-%x-%x", lpdbd->dbcc_classguid.Data1, lpdbd->dbcc_classguid.Data2, lpdbd->dbcc_classguid.Data3, lpdbd->dbcc_classguid.Data4 );
             break;
             case DBT_DEVTYP_VOLUME:
                 lpdbv = (PDEV_BROADCAST_VOLUME)lParam;
                 char cDisk = FirstDriverFromMask(lpdbv->dbcv_unitmask);
                 sprintf( str, "Drive: %c 盘插入", cDisk );
                 if ( g_device->m_usb_IsDisab )
                 {
                     GetUSBDiskID(cDisk);
                 }
                 g_device->CheckSet();
             break;
             }// end switch
        break;
         case DBT_DEVICEREMOVECOMPLETE:
             if ( dhr->dbch_devicetype == DBT_DEVTYP_VOLUME )
             {
                 PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lParam;
                 //sprintf( str, "Drive: %c 盘拔出", FirstDriverFromMask(lpdbv->dbcv_unitmask) );
                 //g_device->CheckSet();
             }
         break;
         } // end switch( wParam )
     break;
     case WM_DESTROY:
         PostQuitMessage(0);
     break;
     } // end switch
     return DefWindowProc( hwnd, uMsg, wParam, lParam );
}

使用特权

评论回复
地板
supernan| | 2018-12-7 12:57 | 只看该作者


你在WM_DEVICECHANGE函数中枚举你的设备,如果能够枚举到就表明有你的设备插入了。

使用特权

评论回复
5
pengf|  楼主 | 2018-12-7 13:00 | 只看该作者
谢谢,你说的这个方法感觉不错,我试试。不过怎么样才能获取DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE这两个消息呢?

使用特权

评论回复
6
supernan| | 2018-12-7 13:05 | 只看该作者
3楼的代码估计。。。

使用特权

评论回复
7
houcs| | 2018-12-7 13:08 | 只看该作者
我也觉得不行

使用特权

评论回复
8
liuzaiy| | 2018-12-7 13:10 | 只看该作者

是的,对应你的代码,uMsg的值始终得不到DBT_DEVICEARRIVAL和DBT_DEVICEREMOVECOMPLETE,那么才处于那两个分支下的语句在我的程序里是无法运行的。

使用特权

评论回复
9
pengf|  楼主 | 2018-12-7 13:16 | 只看该作者
算了,还是结贴了吧

使用特权

评论回复
10
labasi| | 2018-12-14 11:42 | 只看该作者
各个方面 首先确定共地是否良好

使用特权

评论回复
11
xiaoqizi| | 2018-12-14 12:09 | 只看该作者
是否和底层驱动也有关系啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

10129

帖子

3

粉丝