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

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

?? usbtransunitdata.c

?? This the compressed USB driver source code for vxworks5.6. It has device controller driver and other
?? C
?? 第 1 頁 / 共 3 頁
字號:
    pUSBTU_IRP tempIrp;    pUSBTU_IRP prevIrp;    if(pIrp == NULL)       return ERROR;    /* Check if the pipe handle is valid */    if (pipeInfo == NULL)       return ERROR;    /* remove the IRP from the list maintained - start */    /* Take the mutex before accessing the list */    OSS_MUTEX_TAKE (usbtuMutex, OSS_BLOCK);    tempIrp = pipeInfo->irpList;    prevIrp = pipeInfo->irpList;    while(tempIrp != NULL )        {      	if(tempIrp->pIrp == pIrp )            break;        else           {           prevIrp =  tempIrp;           tempIrp = tempIrp->nextIrp;           }        }    if (tempIrp == NULL)        {        OSS_MUTEX_RELEASE (usbtuMutex);	    return ERROR;	                  }    if(tempIrp == prevIrp)       pipeInfo->irpList = pipeInfo->irpList->nextIrp;    else       {       prevIrp->nextIrp = tempIrp->nextIrp;       if(tempIrp->nextIrp != NULL)            tempIrp->nextIrp->prevIrp = prevIrp;       }    OSS_FREE (tempIrp);    /* remove the IRP from the list maintained - End */    /* Release the mutex after accessing the list */    OSS_MUTEX_RELEASE (usbtuMutex);    pIrpContext = pIrp->usbdPtr;    /* Check for NULL Pointer */    if (pIrpContext == NULL)    {       USBTU_LOG ("IRP context is NULL\n");       return ERROR;    }    if(pIrpContext->urbPtr == NULL)       return ERROR;    pUrb = pIrpContext->urbPtr;        /* 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 Abort ");         USB_HCD_LOG_EVENT(USBTU_WV_CLIENT_TRANSFER, evLog, USBTU_WV_FILTER);        }      USBTU_LOG ( "usbdTransferAbort entered \n ");    /* if all the URB's are completed , there is nothing to abort */    if (pIrpContext->urbCompleteCount == pIrp->bfrCount)        {        USBTU_LOG ( "Transfer Completed! \n ");        return OK;        }    /* abort the URB's and release URB specific resources */    for ( i = 0 ; i < pIrp->bfrCount ; i++ )        {        status = usbHstURBCancel( &(pUrb[i]));        if ((status == USBHST_TRANSFER_COMPLETED) ||            (status == USBHST_INVALID_PARAMETER) ||              (status == USBHST_INVALID_REQUEST))                  {            USBTU_LOG ( "usbdTransferAbort CancelURB failed \n ");            s = ERROR;            break;            }        /* This will be freed by the callback */        if ( pUrb[i].pTransferSpecificData)            OSS_FREE (pUrb[i].pTransferSpecificData);        }    /* Call callback if the cancelling is successful */          if ( s!= ERROR)         {     pIrp->result = S_usbHcdLib_IRP_CANCELED;    (*pIrp->userCallback)(pIrp);    /* Release resources */    OSS_FREE(pUrb);    OSS_FREE(pIrpContext);    pIrp->usbdPtr = NULL;         }    if ( s == OK)        {        USBTU_LOG ( "usbdTransferAbort return OK \n ");        }    else        {        USBTU_LOG ( "usbdTransferAbort return ERROR \n ");        }    return s;   }/***************************************************************************** usbdVendorSpecific - Allows clients to issue vendor-specific USB requests** Certain devices may implement vendor-specific USB requests which cannot* be generated using the standard functions described elsewhere.  This* function allows a client to specify directly the exact parameters for a* USB control pipe request.** <requestType>, <request>, <value>, <index>, and <length> correspond* exactly to the bmRequestType, bRequest, wValue, wIndex, and wLength fields* defined by the USB Specfication.  If <length> is greater than zero, then* <pBfr> must be a non-NULL pointer to a data buffer which will provide or* accept data, depending on the direction of the transfer.** Vendor specific requests issued through this function are always directed* to the control pipe of the device specified by <nodeId>.  This function* formats and sends a Setup packet based on the parameters provided.  If a* non-NULL <pBfr> is also provided, then additional IN or OUT transfers* will be performed following the Setup packet.  The direction of these* transfers is inferred from the direction bit in the <requestType> param.* For IN transfers, the actual length of the data transferred will be* stored in <pActLen> if <pActLen> is not NULL.** RETURNS: OK, or ERROR if unable to execute vendor-specific request.** ERRNO: N/A*/STATUS usbdVendorSpecific    (    USBD_CLIENT_HANDLE clientHandle,	/* Client handle */    USBD_NODE_ID nodeId,		/* Node Id of device/hub */    UINT8 requestType,			/* bmRequestType in USB spec. */    UINT8 request,			/* bRequest in USB spec. */    UINT16 value,			/* wValue in USB spec. */    UINT16 index,			/* wIndex in USB spec. */    UINT16 length,			/* wLength in USB spec. */    pUINT8 pBfr,			/* ptr to data buffer */    pUINT16 pActLen			/* actual length of IN */    )    {    pUSBHST_URB pUrb;    pUSBHST_SETUP_PACKET pSetupPacket;    SEM_ID semMutex;    STATUS s = OK;    pUSBTU_DEVICE_DRIVER pDriver = (pUSBTU_DEVICE_DRIVER) clientHandle;    /* 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, " : Vendor Specific Transfer ");         USB_HCD_LOG_EVENT(USBTU_WV_CLIENT_TRANSFER, evLog, USBTU_WV_FILTER);        }      USBTU_LOG ( "usbdVendorSpecific entered \n ");    if (pActLen != NULL)        *pActLen = 0;    /* allocate a URB structure */    if ( !(pUrb =  OSS_CALLOC ( sizeof (USBHST_URB ))))        {        USBTU_LOG ( "usbdVendorSpecific returns ERROR: malloc failed \n ");        return ERROR;        }    /* allocate a setup packet structure */    if ( !(pSetupPacket = OSS_CALLOC ( sizeof (USBHST_SETUP_PACKET))))        {        OSS_FREE (pUrb);        USBTU_LOG ( "usbdVendorSpecific returns ERROR: malloc1 failed \n ");        return ERROR;        }    /* initialize the setup packet structure */    USBHST_FILL_SETUP_PACKET(pSetupPacket,requestType,request,value,                             index,length);    /* since the call has to block, create a semaphore */    if ( !(semMutex = semBCreate (SEM_Q_FIFO,SEM_EMPTY)))        {        OSS_FREE (pUrb);        OSS_FREE (pSetupPacket);        USBTU_LOG ( "usbdVendorSpecific returns ERROR: sem create failed \n ");        return ERROR;        }    /* initialize the URB structure */    USBHST_FILL_CONTROL_URB (pUrb,                             (UINT32)nodeId,                             0,                             pBfr,                             length,                             USBHST_SHORT_TRANSFER_OK,                             (PVOID)pSetupPacket,                             usbtuDataVendorSpecificCallback,                             (PVOID)semMutex,                             USBHST_SUCCESS                             );    /* submit the URB */    if ( usbHstURBSubmit (pUrb) != USBHST_SUCCESS)       {       /* failed to submit the URB */       OSS_FREE (pUrb);       OSS_FREE (pSetupPacket);       semDelete (semMutex);       USBTU_LOG ( "usbdVendorSpecific returns ERROR: SubmitURB failed \n ");       return ERROR;       }    /* block till vendor specific callback releases the semaphore */    USBTU_LOG(" waiting for transfer to complete \n ");    semTake (semMutex, WAIT_FOREVER);    USBTU_LOG(" transfer completed \n ");    /* URB completed, callback released the semaphore */    if (pUrb->nStatus != USBHST_SUCCESS )       {       USBTU_LOG("usbdVendorSpecific returns ERROR:URB status!=USBHST_SUCCESS\n");       s = ERROR;       }    /* update length fo data transfer */    if (pActLen != NULL)        *pActLen = pUrb->uTransferLength;    /* release resources allocated */    OSS_FREE (pUrb);    OSS_FREE (pSetupPacket);    semDelete (semMutex);    /* return status */    if ( s == OK)        {        USBTU_LOG ( "usbdVendorSpecific returns OK \n ");        }    else        {        USBTU_LOG ( "usbdVendorSpecific returns ERROR \n ");        }    return s;    }/***************************************************************************** usbtuDataUrbCompleteCallback - Callback called on URB completeion** This function is called from interrupt context by the USBD on a* URB completion.* RETURNS:  USBHST_SUCCESS , or USBHST_FAILURE on failure** ERRNO: N/A*/USBHST_STATUS usbtuDataUrbCompleteCallback    (    pUSBHST_URB urbPtr       /* URB pointer */    )    {    pUSBHST_URB pUrb = (pUSBHST_URB) urbPtr;    pUSB_IRP pIrp = (pUSB_IRP)pUrb->pContext;    pUSBTU_IRPCONTEXT pIrpContext = pIrp->usbdPtr;    MSG_Q_ID msgQid;    pUSBTU_IRP tempIrp;    pUSBTU_IRP prevIrp;    USBTU_LOG ( "usbtuDataUrbCompleteCallback entered \n ");    /* map the error codes */    if ( pUrb->nStatus != USBHST_SUCCESS )        {        switch (pUrb->nStatus)            {            case USBHST_TRANSFER_CANCELLED :                pIrp->result = S_usbHcdLib_IRP_CANCELED;                break;             case USBHST_DATA_UNDERRUN_ERROR :                pIrp->result = S_usbHcdLib_DATA_BFR_FAULT;                break;             case USBHST_TIMEOUT :                pIrp->result = S_usbHcdLib_CRC_TIMEOUT;                break;             case USBHST_STALL_ERROR :                pIrp->result = S_usbHcdLib_STALLED;                break;             case USBHST_DEVICE_NOT_RESPONDING_ERROR :                pIrp->result = S_usbHcdLib_IRP_CANCELED;                break;             default:              pIrp->result = ERROR;             }         }    else        pIrp->result = OK;    /* release URB specific resources */    if (pUrb->pTransferSpecificData)        OSS_FREE(pUrb->pTransferSpecificData);    /* Update the number of bytes transferred */    pIrp->bfrList[pIrpContext->urbCompleteCount].actLen  = pUrb->uTransferLength;    /* increment the URB completion count */    (pIrpContext->urbCompleteCount)++;    /* if all URB's have completed , call the callback  */    if ( pIrpContext->urbCompleteCount == pIrp->bfrCount)        {        /* get the message queue id */        msgQid = pIrpContext->msgQid;              if ( msgQSend(msgQid,(char *) &pIrp ,                         sizeof(char *) , NO_WAIT, MSG_PRI_NORMAL)                         != OK)                {                USBTU_LOG ( "usbtuDataUrbCompleteCallback msgQSend failed \n ");                }        /* Take the mutex before accessing the list */        OSS_MUTEX_TAKE (usbtuMutex, OSS_BLOCK);                tempIrp =pIrpContext->pipeInfo->irpList;        prevIrp =pIrpContext->pipeInfo->irpList;        /* unlink the irp from pipe info structure */        while(tempIrp != NULL )            {            	if(tempIrp->pIrp == pIrp )            	   break;                else                   {                    prevIrp =  tempIrp;                    tempIrp = tempIrp->nextIrp;                   }            }       /* If the IRP is present, unlink it from the pipe's         * request list        */        if (tempIrp != NULL)           {       if(tempIrp == prevIrp)       pIrpContext->pipeInfo->irpList = pIrpContext->pipeInfo->irpList->nextIrp;       else       {       	 prevIrp->nextIrp = tempIrp->nextIrp;       	 if( tempIrp->nextIrp)            tempIrp->nextIrp->prevIrp = prevIrp;       }       OSS_FREE (tempIrp);           }        /* If the pipe is marked for deletion and the list is empty,         * signal the semaphore so that the pipe can be safely deleted         */        if ((pIrpContext->pipeInfo->markedForDeletion == 1) &&        (pIrpContext->pipeInfo->irpList == NULL)         && (pIrpContext->pipeInfo->PipeDelete != NULL))           {           semGive(pIrpContext->pipeInfo->PipeDelete);           }        /* Release the semaphore */        OSS_MUTEX_RELEASE (usbtuMutex);        /* release IRP context resources */        OSS_FREE ( pIrpContext->urbPtr);        OSS_FREE ( pIrpContext);        }    USBTU_LOG ( "usbtuDataUrbCompleteCallback left \n ");    return USBHST_SUCCESS;    }/***************************************************************************** usbtuDataVendorSpecificCallback - Callback called on Vendor Specific Request* completeion** This function is called from interrupt context by the USBD on a* Vendor Specific request completion.** RETURNS:  USBHST_SUCCESS** ERRNO: N/A*/USBHST_STATUS usbtuDataVendorSpecificCallback    (    pUSBHST_URB urbPtr   	/* URB pointer */    )    {    pUSBHST_URB pUrb = (pUSBHST_URB) urbPtr;    USBTU_LOG ( "usbtuDataVendorSpecificCallback entered \n ");    /* release the semaphore */        semGive (pUrb->pContext);        USBTU_LOG ( "usbtuDataVendorSpecificCallback left \n ");    return USBHST_SUCCESS;    }/* End of file. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久久久久| 色呦呦日韩精品| 99久久综合99久久综合网站| 9191国产精品| 国产精品私人自拍| 久久精品国产亚洲5555| 色94色欧美sute亚洲线路二| 久久久精品人体av艺术| 午夜精品一区二区三区免费视频| 成人精品视频.| 精品日韩一区二区| 国产一区二区不卡老阿姨| 99视频在线精品| 久久亚洲春色中文字幕久久久| 亚洲国产综合人成综合网站| 成人福利视频网站| 色婷婷久久99综合精品jk白丝| 精品国产成人在线影院 | 国产91精品在线观看| 日韩久久久精品| 亚洲国产精品久久久久婷婷884| 成人网页在线观看| 国产日韩高清在线| 国产乱子伦视频一区二区三区| 日韩美女一区二区三区四区| 青青草97国产精品免费观看| 欧美亚洲高清一区| 亚洲风情在线资源站| 色屁屁一区二区| 亚洲在线视频一区| 欧美视频在线一区| 亚洲成a人片在线观看中文| 日本高清不卡在线观看| 亚洲欧洲精品一区二区三区| www.久久久久久久久| 欧美激情资源网| 99视频在线观看一区三区| 最新国产成人在线观看| 日本乱码高清不卡字幕| 一区二区三区精品在线| 欧美日韩高清在线| 日本美女一区二区| 日韩精品一区二区三区蜜臀 | 亚洲一区二区在线播放相泽| 日本乱人伦一区| 性做久久久久久免费观看欧美| 欧美乱妇20p| 蜜臀久久久久久久| 久久久久久久电影| av一区二区久久| 一区二区三区免费| 欧美一区二区二区| 春色校园综合激情亚洲| 亚洲黄色性网站| 欧美日本一道本| 精品一区二区三区免费毛片爱 | 国产一区视频在线看| 国产日韩欧美综合在线| 色中色一区二区| 日本成人在线不卡视频| 久久久精品中文字幕麻豆发布| 成人动漫精品一区二区| 亚洲综合免费观看高清完整版在线| 56国语精品自产拍在线观看| 久久国产乱子精品免费女| 一色屋精品亚洲香蕉网站| 欧美丝袜第三区| 狠狠色狠狠色合久久伊人| 亚洲天堂精品视频| 欧美一级二级在线观看| 成人app在线观看| 午夜精品久久久久久久久久久 | 精品视频一区二区不卡| 麻豆中文一区二区| 亚洲欧美一区二区三区极速播放 | 成人一级视频在线观看| 亚洲国产一区二区在线播放| 欧美一区二区三区系列电影| 成人av片在线观看| 久久精品国产99国产| 亚洲欧美日韩电影| 精品国产凹凸成av人导航| 91久久久免费一区二区| 国产风韵犹存在线视精品| 亚洲成av人片观看| 亚洲四区在线观看| 久久久激情视频| 欧美一区二区观看视频| 91免费看`日韩一区二区| 国产一区二区三区不卡在线观看 | 最新日韩av在线| 日韩免费成人网| 欧美日韩国产片| 色婷婷一区二区三区四区| 国产一区二区久久| 伦理电影国产精品| 亚洲第一激情av| 亚洲精品乱码久久久久| 国产精品麻豆99久久久久久| 精品日韩成人av| 91精品国产色综合久久ai换脸 | 欧美日韩免费一区二区三区视频| 成人自拍视频在线观看| 狠狠久久亚洲欧美| 青青草成人在线观看| 日日欢夜夜爽一区| 亚洲成国产人片在线观看| 亚洲乱码一区二区三区在线观看| 国产精品网曝门| 亚洲国产电影在线观看| 国产日韩亚洲欧美综合| 久久蜜桃一区二区| 精品久久久久久久久久久久包黑料 | 色婷婷久久久久swag精品| av激情亚洲男人天堂| 成人丝袜高跟foot| 不卡电影一区二区三区| 成人一区二区在线观看| av中文一区二区三区| 91麻豆精品在线观看| 一本大道av一区二区在线播放| 91视频精品在这里| 色婷婷精品久久二区二区蜜臀av| 一本到三区不卡视频| 欧美手机在线视频| 欧美电影一区二区| 日韩免费在线观看| 久久久99免费| 中文字幕中文字幕一区| 日韩美女视频一区| 午夜精品久久久久| 久久99国产精品尤物| 国产精品一二一区| 色综合天天性综合| 欧美日本不卡视频| 精品国产区一区| 国产精品国产精品国产专区不蜜| 亚洲狠狠丁香婷婷综合久久久| 午夜精品久久久久久久蜜桃app | 中文欧美字幕免费| 亚洲欧美日韩久久| 亚洲高清免费观看| 麻豆freexxxx性91精品| 国产福利精品一区二区| 95精品视频在线| 欧美人伦禁忌dvd放荡欲情| 日韩视频一区二区三区| 国产色产综合色产在线视频| 亚洲精品欧美专区| 蜜臀精品久久久久久蜜臀| 成人黄色777网| 欧美福利视频一区| 日本一区二区三区免费乱视频| 亚洲欧美日韩一区二区三区在线观看| 日韩黄色一级片| 国产一区二区三区久久久| 日本乱人伦aⅴ精品| 久久久久一区二区三区四区| 亚洲综合一区在线| 国产成人在线视频网址| 欧美午夜精品久久久久久孕妇| 久久综合九色综合97婷婷女人| 亚洲黄网站在线观看| 国产高清视频一区| 91精品国产色综合久久ai换脸 | 日韩福利电影在线| av在线播放一区二区三区| 欧美xxxx在线观看| 亚洲综合色噜噜狠狠| 韩国女主播成人在线观看| 欧美一a一片一级一片| 国产婷婷色一区二区三区四区| 视频在线观看一区二区三区| 成人免费视频一区| 精品久久久久一区二区国产| 亚洲国产精品欧美一二99| aaa国产一区| 久久亚洲二区三区| 久久精品久久综合| 欧美视频一区二区在线观看| 中文字幕日韩精品一区 | 六月丁香婷婷色狠狠久久| 在线看日本不卡| 国产精品成人免费在线| 激情小说欧美图片| 欧美一区二区三区四区五区| 亚洲一二三四在线| 91久久一区二区| 亚洲人成网站精品片在线观看| 福利一区在线观看| 久久精品欧美一区二区三区麻豆| 蜜臀久久99精品久久久画质超高清| 欧美片在线播放| 亚洲成a天堂v人片| 欧美日韩国产不卡| 丝袜美腿亚洲综合| 欧美一级片在线观看| 天天综合天天做天天综合| 欧美美女喷水视频| 偷窥少妇高潮呻吟av久久免费|