在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6719|回复: 0

vxworks usb管道传输速度的问题,非常感谢!(含代码)

[复制链接]
发表于 2006-11-29 21:08:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我用的是vxworks5.5+tornado2.2,它自带有usb1.1的协议栈,在此基础上我编写了一个扫描仪设备驱动,但是传输却只有100KB/S,比实际的600-900KB/S少很多,但是却找不什么原因,下面是读操作时的代码片断,希望各位大虾帮帮我啊!万分感谢!
   if (pScanDev->direction  == USB_CBW_DIR_IN)
     {
memset (&(pScanDev->outIrp), 0, sizeof (USB_IRP));
   
     pScanDev->outIrp.irpLen            = sizeof (USB_IRP);
     pScanDev->outIrp.userCallback      = usbScanIrpCallback;
     pScanDev->outIrp.timeout           = usbScanIrpTimeOut;
     pScanDev->outIrp.transferLen       = sizeof(pScanDev->CommandByte);
     pScanDev->outIrp.bfrCount          = 0x01;  
     pScanDev->outIrp.bfrList[0].pid    = USB_PID_OUT;
     pScanDev->outIrp.bfrList[0].pBfr   = (UINT8*)(pScanDev->CommandByte);
     pScanDev->outIrp.bfrList[0].bfrLen = sizeof(pScanDev->CommandByte);
     pScanDev->outIrp.userPtr           = pScanDev;            

     if (usbdTransfer (usbdHandle,
        pScanDev->outPipeHandle,
        &(pScanDev->outIrp))
      != OK)
         {
         logMsg ("usbScanCmdExecute: Unable to submit IRP for transfer\n",
                      0, 0, 0, 0, 0, 0);
         return (USB_INTERNAL_ERROR);
         }

     /* Wait till the transfer of IRP completes or time out */

     if ( OSS_SEM_TAKE (scanIrpSem,
                       usbScanIrpTimeOut + USB_SCAN_OFFS)
       == ERROR )
         {
         logMsg ("usbScanCmdExecute: Irp Time out \n", 0, 0, 0, 0, 0, 0);
         OSS_SEM_GIVE (scanIrpSem);
         return (USB_INTERNAL_ERROR);
         }
     if (pScanDev->outIrp.result == S_usbHcdLib_STALLED)
         {
         usbScanDevResetRecovery (pScanDev);
         OSS_SEM_GIVE (scanIrpSem);
         return (USB_BULK_IO_ERROR);
         }         

            memset (&(pScanDev->inIrp), 0, sizeof (USB_IRP));   

            /* form an IRP to read from BULK_IN pipe */
            pScanDev->inIrp.irpLen            = sizeof(USB_IRP);
            pScanDev->inIrp.userCallback      = usbScanIrpCallback;
            pScanDev->inIrp.timeout           = usbScanIrpTimeOut;
            pScanDev->inIrp.transferLen       = pScanDev->CommandLen;
            pScanDev->inIrp.bfrCount          = 0x01;  
            pScanDev->inIrp.bfrList[0].pid    = USB_PID_IN;
            pScanDev->inIrp.bfrList[0].pBfr   = pScanDev->scanInData;
            pScanDev->inIrp.bfrList[0].bfrLen = pScanDev->CommandLen;
            pScanDev->inIrp.userPtr           = pScanDev;            

            if (usbdTransfer (usbdHandle,
         pScanDev->inPipeHandle,
         &(pScanDev->inIrp))
       != OK)
                {
                logMsg ("usbScanCmdExecute: Unable to submit IRP for "\
                              "BULK_IN data transfer\n", 0, 0, 0, 0, 0, 0);
                OSS_SEM_GIVE (scanIrpSem);
                return (USB_INTERNAL_ERROR);
                }
       if ( OSS_SEM_TAKE (scanIrpSem, usbScanIrpTimeOut + 1000) == ERROR )
         {
         logMsg ("usbScanCmdExecute: Irp in Use \n", 0, 0, 0, 0, 0, 0);
         return (USB_INTERNAL_ERROR);
         }
         if (pScanDev->inIrp.result == S_usbHcdLib_STALLED)
         {
         usbScanDevResetRecovery (pScanDev);
         OSS_SEM_GIVE (scanIrpSem);
         return (USB_BULK_IO_ERROR);
         }
    }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-2-23 23:31 , Processed in 0.014714 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表