亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbtransunitdata.c

?? This the compressed USB driver source code for vxworks5.6. It has device controller driver and other
?? C
?? 第 1 頁 / 共 3 頁
字號:
* window for the underlying USB host controller.  The frame window specifies* the maximum number of frames into the future (relative to the current frame* number) which may be specified by <startFrame>.  <startFrame> should be* specified only for isochronous transfers.** <dataBlockSize> may also be specified for isochronous transfers.  If non-0,* the <dataBlockSize> defines the granularity of isochronous data being sent.* When the underlying Host Controller Driver (HCD) breaks up the transfer into* individual frames, it will ensure that the amount of data transferred in* each frame is a multiple of this value.** <timeout> specifies the IRP timeout in milliseconds.	If the caller passes* a value of zero, then the USBD sets a default timeout of USB_TIMEOUT_DEFAULT.* If no timeout is desired, then <timeout> should be set to USB_TIMEOUT_NONE.* Timeouts apply only to control and bulk transfers.  Isochronous and* interrupt transfers do not time out.** <bfrList> is an array of buffer descriptors which describe data buffers to* be associated with this IRP.	If more than the one <bfrList> element is* required then the caller must allocate the IRP by calculating the size as** \cs* irpLen = sizeof (USB_IRP) + (sizeof (USB_BFR_DESCR) * (bfrCount - 1))* \ce** <transferLen> must be the total length of data to be transferred.  In other* words, transferLen is the sum of all <bfrLen> entries in the <bfrList>.** <pid> specifies the packet type to use for the indicated buffer and is* specified as USB_PID_xxxx.** The IRP <userCallback> routine must point to a client-supplied IRP_CALLBACK* routine.  The usbdTransfer() function returns as soon as the IRP has been* successfully enqueued.  If there is a failure in delivering the IRP to the* HCD, then usbdTransfer() returns an error.  The actual result of the IRP* should be checked after the <userCallback> routine has been invoked.** RETURNS: OK, or ERROR if unable to submit IRP for transfer.** ERRNO: N/A*/STATUS usbdTransfer    (    USBD_CLIENT_HANDLE clientHandle,	/* Client handle */    USBD_PIPE_HANDLE pipeHandle,	/* Pipe handle */    pUSB_IRP pIrp			/* ptr to I/O request packet */    )    {    pUSBTU_IRPCONTEXT pIrpContext;    pUSBTU_PIPE_INFO pipeInfo = (pUSBTU_PIPE_INFO) pipeHandle;    pUSBTU_DEVICE_DRIVER clientInfo = (pUSBTU_DEVICE_DRIVER) clientHandle;    pUSBHST_ISO_PACKET_DESC pIsoPacketDesc;    pUSBHST_URB pUrb;    int no;    int i;    int bufferlength;    int bufferIndex;    int transferflag = 0;    pUSBTU_DEVICE_DRIVER pDriver = (pUSBTU_DEVICE_DRIVER) clientHandle;    pUSBTU_IRP tempIrp = NULL;    UINT32 frameCount = 0;    UINT32 bytesThroughFrameCount = 0;    UINT32 maxLen= 0;    UINT32 bytesSoFar = 0;    /* Wind View Instrumentation */    if ((usbtuInitWvFilter & USBTU_WV_FILTER) == TRUE)        {        char evLog[USBTU_WV_LOGSIZE];        strncpy ((char*)evLog, (char *)pDriver->clientName,USBD_NAME_LEN );         strcat(evLog, " : USBD Transfer ");         USB_HCD_LOG_EVENT(USBTU_WV_CLIENT_TRANSFER, evLog, USBTU_WV_FILTER);        }      USBTU_LOG ( "usbdTransfer entered \n ");    /* control transfer type not handled by usbdTransfer */    if (pipeInfo->transferType == USB_XFRTYPE_CONTROL)        {        USBTU_LOG ( "usbdTransfer returns ERROR : control transfer  \n ");        return ERROR;        }    /* If pipe is marked for deletion return ERROR */    if(pipeInfo->markedForDeletion)        {        USBTU_LOG ( "usbdTransfer returns ERROR : pipe marked for deletion  \n ");        return ERROR;        }    /* allocate structure for IRP context */    if ( !(pIrpContext = OSS_CALLOC ( sizeof (USBTU_IRPCONTEXT))))        {        USBTU_LOG ( "usbdTransfer returns ERROR : malloc  \n ");        return ERROR;        }    /* allocate an array of URB structures one for each buffer */    if (!(pIrpContext->urbPtr =            OSS_CALLOC ( pIrp->bfrCount * sizeof(USBHST_URB))))        {         OSS_FREE (pIrpContext);         USBTU_LOG ( "usbdTransfer returns ERROR : malloc1 failed  \n ");         return ERROR;        }    /* set the array index */    pIrpContext->urbIndex = 0;    pIrpContext->pipeInfo = pipeInfo;    pIrpContext->urbCompleteCount = 0;    /* store the IRP context structure in IRP  */    pIrp->usbdPtr = pIrpContext;    /* set the initial status of IRP to OK */    pIrp->result = OK;    /* get the message queue id of client */    pIrpContext->msgQid = clientInfo->msgQidIrpComplete;    /* determine the transfer flag */    if (pIrp->flags == USB_FLAG_SHORT_OK)        transferflag = USBHST_SHORT_TRANSFER_OK;    else        {        if ( pIrp->flags & USB_FLAG_ISO_ASAP)            transferflag = USBHST_START_ISOCHRONOUS_TRANSFER_ASAP;        }    /* Allocate memory for irp link list element */    if (!(tempIrp = OSS_CALLOC ( sizeof (USBTU_IRP))))        {         OSS_FREE(pIrpContext->urbPtr);         OSS_FREE (pIrpContext);         USBTU_LOG ( "usbdTransfer returns ERROR : malloc1 failed  \n ");         return ERROR;        }    tempIrp->pIrp = pIrp;    tempIrp->nextIrp = NULL;    tempIrp->prevIrp = NULL;    /* Take the mutex before accessing the list */    OSS_MUTEX_TAKE (usbtuMutex, OSS_BLOCK);    /* Add the request to the list of requests for      * the pipe     */      if(pipeInfo->irpList == NULL)       	pipeInfo->irpList = tempIrp;    else        {           tempIrp->nextIrp = pipeInfo->irpList;           pipeInfo->irpList->prevIrp = tempIrp;           pipeInfo->irpList = tempIrp;        }    /* Release the mutex */    OSS_MUTEX_RELEASE (usbtuMutex);    switch ( pipeInfo->transferType)        {        case USB_XFRTYPE_ISOCH:            /* isochronous transfer type */            for ( bufferIndex= 0; bufferIndex < pIrp->bfrCount ; bufferIndex++)                {                /* get the length of the buffer */                bufferlength = (pIrp->bfrList[bufferIndex]).bfrLen;                /* determine the number of isochronous packet                 * descriptors required                 */                if (pipeInfo->bandwidth == 0)                    {                 if ( bufferlength % pipeInfo->uMaxPacketSize)                    no = ( bufferlength / pipeInfo->uMaxPacketSize ) + 1;                else                    no = ( bufferlength / pipeInfo->uMaxPacketSize);                pIsoPacketDesc = NULL;                /* allocate ischronous packet descriptors */                if (!(pIsoPacketDesc =                        OSS_CALLOC( no * sizeof (USBHST_ISO_PACKET_DESC))))                    {                    /* cancel already submitted URB's */                    usbdTransferAbort(clientHandle, pipeHandle, pIrp);                    USBTU_LOG ( "usbdTransfer returns ERROR : malloc2  \n ");                    return ERROR;                    }                /* initialize the isochronous packet descriptors  */                for ( i= 0 ; i< no ; i++)                   {                   /* update the length */                   if ( i == (no - 1) )                       {                       pIsoPacketDesc[i].uLength =                                (bufferlength % pipeInfo->uMaxPacketSize);                       }                   else                       pIsoPacketDesc[i].uLength = pipeInfo->uMaxPacketSize;                   /* update the offset */                   pIsoPacketDesc[i].uOffset =pipeInfo->uMaxPacketSize * i;                   }                    }                else                    {                    /* Determine the number of packets based on pipeInfo->bandwidth */                    bytesSoFar = 0;                    frameCount = 0;                    while ((int) bytesSoFar < bufferlength)                        {                                       frameCount++;          	        bytesThroughFrameCount = (frameCount * pipeInfo->bandwidth) / 1000L;                        maxLen = min (bytesThroughFrameCount - bytesSoFar,	                          bufferlength - bytesSoFar);                        maxLen = min (maxLen, pipeInfo->uMaxPacketSize);                        if (pIrp->dataBlockSize != 0 && maxLen > pIrp->dataBlockSize)		            maxLen = (maxLen / pIrp->dataBlockSize) * pIrp->dataBlockSize;                        bytesSoFar += maxLen ;                        }                    no = frameCount;                    pIsoPacketDesc = NULL;                    /* allocate ischronous packet descriptors */                    if (!(pIsoPacketDesc =                        OSS_CALLOC( no * sizeof (USBHST_ISO_PACKET_DESC))))                        {                        /* cancel already submitted URB's */                        usbdTransferAbort(clientHandle, pipeHandle, pIrp);                        USBTU_LOG ( "usbdTransfer returns ERROR : malloc2  \n ");                        return ERROR;                         }                    /* initialize the isochronous packet descriptors  */                    bytesSoFar = 0;                    frameCount = 0;                    while ((int) bytesSoFar < bufferlength)                       {                        frameCount++;          	        bytesThroughFrameCount = (frameCount * pipeInfo->bandwidth) / 1000L;                        maxLen = min (bytesThroughFrameCount - bytesSoFar,	                          bufferlength - bytesSoFar);                        maxLen = min (maxLen, pipeInfo->uMaxPacketSize);                        if (pIrp->dataBlockSize != 0 && maxLen > pIrp->dataBlockSize)		            maxLen = (maxLen / pIrp->dataBlockSize) * pIrp->dataBlockSize;                       /* update the offset */                       pIsoPacketDesc[frameCount - 1].uOffset =bytesSoFar;                       /* update the length */                       pIsoPacketDesc[frameCount - 1].uLength = maxLen;                       bytesSoFar += maxLen ;                       }                                      }                /* get the URB structure to be filled from array of URB structures */                pUrb = &(pIrpContext->urbPtr[pIrpContext->urbIndex]);                /* initialize the URB structure */#if 1                USBHST_FILL_ISOCHRONOUS_URB(pUrb,                                            pipeInfo->hDevice,                                            pipeInfo->endpointAddress,                                            (pIrp->bfrList[bufferIndex]).pBfr,                                            (pIrp->bfrList[bufferIndex]).bfrLen,                                            transferflag,                                            pIrp->startFrame,                                            no,                                            pIsoPacketDesc,                                            usbtuDataUrbCompleteCallback,                                            (PVOID)pIrp,                                            USBHST_SUCCESS);#else	/* WARNING**************Just a patch */		transferflag |= USBHST_START_ISOCHRONOUS_TRANSFER_ASAP;                USBHST_FILL_ISOCHRONOUS_URB(pUrb,                                            pipeInfo->hDevice,                                            pipeInfo->endpointAddress,                                            (pIrp->bfrList[bufferIndex]).pBfr,                                            (pIrp->bfrList[bufferIndex]).bfrLen,                                            transferflag,                                            0,                                            no,                                            pIsoPacketDesc,                                            usbtuDataUrbCompleteCallback,                                            (PVOID)pIrp,                                            USBHST_SUCCESS);#endif                /* increment the URB array index */                (pIrpContext->urbIndex)++;                /* submit the URB */                if ( usbHstURBSubmit (pUrb) != USBHST_SUCCESS)                    {                    /* cancel already submitted URB's */                    USBTU_LOG("usbdTransfer returns ERROR : SubmitURB failed\n");                    usbdTransferAbort(clientHandle, pipeHandle, pIrp);                    return ERROR;                    }                }             break;        case USB_XFRTYPE_BULK :            /* Bulk Transfer Type */            for ( bufferIndex= 0; bufferIndex < pIrp->bfrCount ; bufferIndex++)                {                /* get the URB structure to be filled */                pUrb = &(pIrpContext->urbPtr[ pIrpContext->urbIndex]);                /* initialize the URB structure */                USBHST_FILL_BULK_URB(pUrb,                                     pipeInfo->hDevice,                                     pipeInfo->endpointAddress,                                     (pIrp->bfrList[bufferIndex]).pBfr,                                     (pIrp->bfrList[bufferIndex]).bfrLen,                                     transferflag,                                     usbtuDataUrbCompleteCallback,                                     (PVOID)pIrp,                                     USBHST_SUCCESS                                     );                /* increment the URB array index */                (pIrpContext->urbIndex)++;                /* submit the URB */                if ( usbHstURBSubmit(pUrb) != USBHST_SUCCESS)                    {                    /* cancel already submitted URB's */                    USBTU_LOG("usbdTransfer returns ERROR : SubmitURB failed\n");                    usbdTransferAbort(clientHandle, pipeHandle, pIrp);                    return ERROR;                    }                }            break;        case USB_XFRTYPE_INTERRUPT:            /* Interrupt Transfer Type */            for ( bufferIndex= 0; bufferIndex < pIrp->bfrCount ; bufferIndex++)                {                /* Get the URB structure to be filled */                pUrb = &(pIrpContext->urbPtr[ pIrpContext->urbIndex]);                /* initialize the URB structure */                USBHST_FILL_INTERRUPT_URB(pUrb,                                        pipeInfo->hDevice,                                        pipeInfo->endpointAddress,                                        (pIrp->bfrList[bufferIndex]).pBfr,                                        (pIrp->bfrList[bufferIndex]).bfrLen,                                        transferflag,                                        usbtuDataUrbCompleteCallback,                                        (PVOID)pIrp,                                        USBHST_SUCCESS                                        );                /* increment the URB array index */                (pIrpContext->urbIndex)++;                /* submit the URB */                if ( usbHstURBSubmit(pUrb) != OK)                    {                    /* cancel already submitted URB's */                    USBTU_LOG("usbdTransfer returns ERROR : SubmitURB failed\n");                    usbdTransferAbort(clientHandle, pipeHandle, pIrp);                    return ERROR;                    }                }            break;        default: break;        }     USBTU_LOG(" usbdTransfer returns OK \n ");     return OK;    }/***************************************************************************** usbdTransferAbort - Aborts a transfer** This function aborts an IRP which was previously submitted through* a call to usbdTransfer().** RETURNS: OK, or ERROR if unable to abort transfer.** ERRNO: N/A*/STATUS usbdTransferAbort    (    USBD_CLIENT_HANDLE clientHandle,	/* Client handle */    USBD_PIPE_HANDLE pipeHandle,	    /* Pipe handle */    pUSB_IRP pIrp			/* ptr to I/O to abort */    )    {    int i;    pUSBTU_IRPCONTEXT pIrpContext;     pUSBHST_URB pUrb;    STATUS s = OK;    pUSBTU_DEVICE_DRIVER pDriver = (pUSBTU_DEVICE_DRIVER) clientHandle;    USBHST_STATUS status;    pUSBTU_PIPE_INFO pipeInfo = (pUSBTU_PIPE_INFO) pipeHandle;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费在线播放| 欧美美女一区二区在线观看| 亚洲综合免费观看高清完整版| 欧美一区二区视频在线观看2022| 暴力调教一区二区三区| 亚洲综合无码一区二区| 中文字幕乱码久久午夜不卡| 在线播放亚洲一区| 91网站在线观看视频| 久久99国产精品麻豆| 亚洲18色成人| 亚洲视频一区二区在线观看| 国产欧美一区二区精品性色超碰| 欧美精品在线视频| 色婷婷一区二区三区四区| 国产福利不卡视频| 国产资源在线一区| 美女久久久精品| 日韩av电影天堂| 亚洲国产日韩a在线播放性色| 国产精品久久夜| 亚洲国产精品二十页| 国产亚洲女人久久久久毛片| 精品国产精品网麻豆系列| 日韩一本二本av| 欧美男生操女生| 欧美久久婷婷综合色| 欧美中文字幕一区二区三区| 色综合久久九月婷婷色综合| 99在线视频精品| 粉嫩13p一区二区三区| 粉嫩高潮美女一区二区三区 | 国内精品久久久久影院薰衣草| 亚洲国产欧美在线人成| 亚洲已满18点击进入久久| 亚洲免费av网站| 伊人夜夜躁av伊人久久| 一区二区三区波多野结衣在线观看 | 国产69精品一区二区亚洲孕妇 | 97精品电影院| 91麻豆自制传媒国产之光| 99国产精品一区| 在线精品观看国产| 欧美写真视频网站| 制服丝袜成人动漫| 日韩欧美电影在线| 2023国产精品自拍| 国产欧美精品国产国产专区| 中文字幕日本不卡| 一二三区精品福利视频| 图片区小说区国产精品视频| 日本人妖一区二区| 国模少妇一区二区三区| 丁香天五香天堂综合| 99天天综合性| 欧美狂野另类xxxxoooo| 久久一夜天堂av一区二区三区| 中文字幕欧美三区| 亚洲乱码国产乱码精品精的特点| 亚洲综合色在线| 麻豆91在线看| 成人黄色小视频| 欧美午夜电影网| 精品久久人人做人人爽| 中文字幕精品一区| 夜夜嗨av一区二区三区网页| 免费日韩伦理电影| 成年人网站91| 欧美一区二区三区播放老司机| 久久美女艺术照精彩视频福利播放 | 色哟哟精品一区| 91麻豆精品国产自产在线| 久久婷婷国产综合精品青草| 亚洲欧美成aⅴ人在线观看 | 91在线码无精品| 3atv在线一区二区三区| 国产欧美一区二区精品久导航 | 欧美电影免费观看高清完整版| 国产欧美日韩三区| 亚洲第一在线综合网站| 国产一区福利在线| 欧美亚洲综合色| 久久久91精品国产一区二区三区| 亚洲欧美成aⅴ人在线观看| 久久99精品一区二区三区三区| 色综合天天综合色综合av| 精品国产网站在线观看| 亚洲另类春色国产| 国产在线视频一区二区三区| 欧美午夜电影在线播放| 国产精品毛片久久久久久久| 强制捆绑调教一区二区| 91在线免费视频观看| 久久久美女毛片| 午夜亚洲福利老司机| 91丨porny丨国产入口| 久久久精品黄色| 日本不卡一二三| 色婷婷av久久久久久久| 欧美韩国日本不卡| 精品一区二区三区免费播放| 欧美老人xxxx18| 亚洲欧美乱综合| 成人午夜免费av| 精品久久久久久久久久久院品网| 亚洲成人资源在线| 91久久免费观看| 国产精品免费久久久久| 精品夜夜嗨av一区二区三区| 欧美高清激情brazzers| 亚洲在线视频网站| 99精品视频一区二区| 国产精品视频看| 国产伦精品一区二区三区免费| 91麻豆精品91久久久久久清纯| 亚洲综合一区二区三区| 色婷婷亚洲一区二区三区| 成人免费一区二区三区视频| 成人午夜免费视频| 国产精品人成在线观看免费| 国产精品一区二区在线播放| 欧美精品一区二区三区蜜桃视频| 免费的成人av| 欧美va亚洲va| 精品一区二区三区不卡| 日韩欧美中文一区二区| 强制捆绑调教一区二区| 日韩午夜在线播放| 蜜臀久久99精品久久久画质超高清 | 韩国成人福利片在线播放| 日韩一区二区在线播放| 日本成人在线一区| 日韩免费一区二区三区在线播放| 免费人成黄页网站在线一区二区| 欧美群妇大交群中文字幕| 五月婷婷色综合| 日韩一区二区免费高清| 乱中年女人伦av一区二区| 日韩欧美久久久| 久久精品国产第一区二区三区| 日韩美一区二区三区| 国产一区美女在线| 国产精品女同一区二区三区| 97成人超碰视| 亚洲.国产.中文慕字在线| 欧美一区二区三区视频在线观看| 麻豆免费精品视频| 久久蜜桃av一区精品变态类天堂| 大白屁股一区二区视频| 亚洲欧美另类图片小说| 欧美在线观看禁18| 秋霞av亚洲一区二区三| 337p日本欧洲亚洲大胆色噜噜| 国产精品影视天天线| 中文字幕亚洲一区二区va在线| 色偷偷一区二区三区| 午夜亚洲福利老司机| 久久综合久久鬼色| eeuss鲁片一区二区三区| 亚洲午夜一区二区| 日韩精品一区二区在线| 成人黄色片在线观看| 亚欧色一区w666天堂| 欧美tickling网站挠脚心| 国产sm精品调教视频网站| 亚洲精品伦理在线| 日韩欧美综合在线| 99re成人精品视频| 偷窥少妇高潮呻吟av久久免费| 精品盗摄一区二区三区| av一区二区三区黑人| 亚洲成a人v欧美综合天堂下载| 精品国产乱码久久| 一本一道波多野结衣一区二区| 日本不卡的三区四区五区| 国产精品视频免费| 555www色欧美视频| 99精品欧美一区二区三区综合在线| 三级久久三级久久久| 日本一区二区三区四区| 777奇米四色成人影色区| 国产.精品.日韩.另类.中文.在线.播放| 亚洲一区二区三区四区在线观看 | 东方aⅴ免费观看久久av| 午夜欧美视频在线观看| 国产精品久久久99| 欧美大白屁股肥臀xxxxxx| 91丨九色丨蝌蚪丨老版| 久久66热偷产精品| 亚洲午夜精品17c| 国产日产亚洲精品系列| 91精品国产色综合久久久蜜香臀| av电影天堂一区二区在线| 久久99久久精品欧美| 亚洲综合一二三区| 一区在线观看视频| 久久久久国产精品麻豆| 欧美美女喷水视频| 在线视频亚洲一区| 成人在线视频一区二区|