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

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

?? usbbulkdevlib.c

?? sl811hs_vxworks_host_driver_v1_0_13 sl811的主驅動
?? C
?? 第 1 頁 / 共 5 頁
字號:
                OSS_SEM_GIVE (bulkIrpSem);  
                return (USB_INTERNAL_ERROR);
                }
       
            /* 
             * wait till the data transfer ends on bulk out pipe before reading
             * the command status 
             */

            if ( OSS_SEM_TAKE (bulkIrpSem, 
                               usbBulkIrpTimeOut + USB_BULK_OFFS) == ERROR )
                {
                USB_BULK_DEBUG ("usbBulkCmdExecute: Irp time out \n", 
                                0, 0, 0, 0, 0, 0);
                OSS_SEM_GIVE (bulkIrpSem);
                return (USB_INTERNAL_ERROR);
                }
            }  
        }

    /* read the command status from the device. */

    memset (&pBulkDev->statusIrp, 0, sizeof (USB_IRP));

    /* Form an IRP to read the CSW from the BULK_IN pipe */

    pBulkDev->statusIrp.irpLen            = sizeof( USB_IRP );
    pBulkDev->statusIrp.userCallback      = usbBulkIrpCallback;
    pBulkDev->statusIrp.timeout           = usbBulkIrpTimeOut;
    pBulkDev->statusIrp.transferLen       = USB_CSW_LENGTH;
    pBulkDev->statusIrp.bfrCount          = 0x01;  
    pBulkDev->statusIrp.bfrList[0].pid    = USB_PID_IN;
    pBulkDev->statusIrp.bfrList[0].pBfr   = (UINT8 *)(&pBulkDev->bulkCsw);
    pBulkDev->statusIrp.bfrList[0].bfrLen = USB_CSW_LENGTH;
    pBulkDev->statusIrp.userPtr           = pBulkDev;

    /* Submit IRP */

    if (usbdTransfer (usbdHandle, 
		      pBulkDev->inPipeHandle, 
		      &pBulkDev->statusIrp) 
		    != OK)
        {
        USB_BULK_ERR ("usbBulkCmdExecute: Unable to submit Status IRP\n",
                      0, 0, 0, 0, 0, 0);
        OSS_SEM_GIVE (bulkIrpSem);
        return (USB_INTERNAL_ERROR);
        }

    if ( OSS_SEM_TAKE (bulkIrpSem, 
                       usbBulkIrpTimeOut + USB_BULK_OFFS) 
		     == ERROR )
        {
        USB_BULK_DEBUG ("usbBulkCmdExecute: Irp time out \n", 
                        0, 0, 0, 0, 0, 0);
        OSS_SEM_GIVE (bulkIrpSem);
        return (USB_INTERNAL_ERROR);
        }

    /* Check whether status IRP was transferred */
        
    if (pBulkDev->statusIrp.result == S_usbHcdLib_STALLED)  /* if stalled */
        { 
 
        /* Clear STALL on the BULK IN endpoint */

        if ((usbdFeatureClear (usbdHandle, 
			       pBulkDev->bulkDevId, 
			       USB_RT_ENDPOINT, 
			       USB_FSEL_DEV_ENDPOINT_HALT, 
			       (pBulkDev->inEpAddress & 0x7F))) 
			      != OK)
            {
            USB_BULK_ERR ("usbBulkCmdExecute: Failed to clear HALT feauture "\
                          "on bulk in Endpoint %x\n", 0, 0, 0, 0, 0, 0);
            }  

        /* Try to read the CSW once again */

        if (usbdTransfer (usbdHandle, 
			  pBulkDev->inPipeHandle, 
			  &pBulkDev->statusIrp) 
			!= OK)
            {
            USB_BULK_ERR ("usbBulkCmdExecute: Unable to submit Status IRP\n",
                          0, 0, 0, 0, 0, 0);
            OSS_SEM_GIVE (bulkIrpSem);
            return (USB_INTERNAL_ERROR);
            } 

        if ( OSS_SEM_TAKE (bulkIrpSem, 
                           usbBulkIrpTimeOut + USB_BULK_OFFS) 
			 == ERROR )
            {
            USB_BULK_DEBUG ("usbBulkCmdExecute: Irp time out \n", 
                            0, 0, 0, 0, 0, 0);
            OSS_SEM_GIVE (bulkIrpSem);
            return (USB_INTERNAL_ERROR);
            }

        /* how about the status this time */

        if (pBulkDev->statusIrp.result == S_usbHcdLib_STALLED)
            {
            /* Failed to read CSW again. Do reset recovery */
            
            OSS_SEM_GIVE (bulkIrpSem);
            usbBulkDevResetRecovery (pBulkDev); 
            return (USB_BULK_IO_ERROR);
            }
        }

    OSS_SEM_GIVE (bulkIrpSem);    

    /* If any error other than STALL on Endpoint. */ 

    if ( pBulkDev->statusIrp.result != OK )
        {
        return (USB_IRP_FAILED);
        }

    /* If successful in transferring the CSW IRP, check the buffer */

    pCsw = (pUSB_BULK_CSW)(pBulkDev->statusIrp.bfrList[0].pBfr);

    /* Check the length of CSW received. If not USB_CSW_LENGTH, invalid CSW. */


    if ( pBulkDev->statusIrp.bfrList[0].actLen != USB_CSW_LENGTH)
        {
        USB_BULK_ERR ("usbBulkCmdExecute: Invalid CSW\n", 0, 0, 0, 0, 0, 0);
        usbBulkDevResetRecovery (pBulkDev);   
        return (USB_INVALID_CSW);
        }

    /* check the signature/tag/status in command status block */

    if ( (pCsw->signature != USB_BULK_SWAP_32 (USB_CSW_SIGNATURE)) 
         || (pCsw->tag != USB_BULK_SWAP_32 (USB_CBW_TAG))
         || (pCsw->status > USB_CSW_PHASE_ERROR))
        {
        USB_BULK_ERR ("usbBulkCmdExecute: Logical Error in status block\n", 
                      0, 0, 0, 0, 0, 0);   
        usbBulkDevResetRecovery (pBulkDev);
        return (USB_INVALID_CSW);
        }
 
    /* check for Data residue. */ 
        
    if (pCsw->dataResidue > 0) 
        { 
        USB_BULK_ERR ("usbBulkCmdExecute: Data transfer incomplete\n", 
                      0, 0, 0, 0, 0, 0);   
        return (USB_DATA_INCOMPLETE); 
        }

    /* It is a valid CSW. Check for the status of the CBW executed */

    if ( pCsw->status == USB_CSW_STATUS_FAIL )  /* Command failed */
        {
        USB_BULK_ERR ("usbBulkCmdExecute: CBW Failed \n", 0, 0, 0, 0, 0, 0);
        return (USB_COMMAND_FAILED); 
        } 
    else if (pCsw->status == USB_CSW_PHASE_ERROR) 
        {
        /* Phase error while executing the command in CBW. Reset recovery */ 

        USB_BULK_ERR ("usbBulkCmdExecute: Phase Error\n", 0, 0, 0, 0, 0, 0);
           
        /* fatal error. do a reset recovery */        

        usbBulkDevResetRecovery (pBulkDev);
        return (USB_PHASE_ERROR);
        }    

    return (USB_COMMAND_SUCCESS);
    }


/***************************************************************************
*
* usbBulkDevDestroy - release USB_BULK_DEV structure and its links
*
* Unlinks the indicated USB_BULK_DEV structure and de-allocates
* resources associated with the device.
*
* RETURNS: N/A
*/

LOCAL void usbBulkDevDestroy
    (
    pUSB_BULK_DEV pBlkDev       /* pointer to bulk device   */
    )

    {
    pUSB_BULK_DEV pBulkDev = (pUSB_BULK_DEV) pBlkDev;

    if (pBulkDev != NULL)
        {

        /* Unlink the structure. */

        usbListUnlink (&pBulkDev->bulkDevLink);

        /* Release pipes and wait for IRPs. */

        if (pBulkDev->outPipeHandle != NULL)
            usbdPipeDestroy (usbdHandle, pBulkDev->outPipeHandle);

        if (pBulkDev->inPipeHandle != NULL)
            usbdPipeDestroy (usbdHandle, pBulkDev->inPipeHandle);

        /* wait for any IRP to complete */

        OSS_SEM_TAKE (bulkIrpSem, OSS_BLOCK); 

        OSS_SEM_GIVE (bulkIrpSem);

        /* Release structure. */

        OSS_FREE (pBulkDev);
        }
    }

/***************************************************************************
*
* usbBulkDevFind - Searches for a USB_BULK_DEV for indicated node ID
*
* RETURNS: pointer to matching USB_BULK_DEV or NULL if not found
*/

LOCAL pUSB_BULK_DEV usbBulkDevFind
    (
    USBD_NODE_ID nodeId          /* node ID to be looked for */
    )

    {
    pUSB_BULK_DEV pBulkDev = usbListFirst (&bulkDevList);

    /* browse through the list */

    while (pBulkDev != NULL)
        {
        if (pBulkDev->bulkDevId == nodeId)
        break;

        pBulkDev = usbListNext (&pBulkDev->bulkDevLink);
        }

    return (pBulkDev);
    }

/***************************************************************************
*
* findEndpoint - Searches for a BULK endpoint of the indicated direction.
*
* RETURNS: pointer to matching endpoint descriptor or NULL if not found
*/

LOCAL pUSB_ENDPOINT_DESCR findEndpoint
    (
    pUINT8 pBfr,
    UINT16 bfrLen,
    UINT16 direction
    )

    {
    pUSB_ENDPOINT_DESCR pEp;

    while ((pEp = usbDescrParseSkip (&pBfr, &bfrLen, USB_DESCR_ENDPOINT)) 
          != NULL)
        {
        if ((pEp->attributes & USB_ATTR_EPTYPE_MASK) == USB_ATTR_BULK &&
            (pEp->endpointAddress & USB_ENDPOINT_DIR_MASK) == direction)
            break;
        }

    return pEp;
    }


/***************************************************************************
*
* usbBulkPhysDevCreate - create a USB_BULK_DEV Structure for the device attached
*
* This function is invoked from the dynamic attach callback routine whenever 
* a USB_BULK_DEV device is attached.  It allocates memory for the structure,
* sets device configuration, and creates pipe for bulk-in and bulk-out endpoints.
* 
* RETURNS: OK on success, ERROR if failed to create pipes, set configuration
*/

LOCAL STATUS usbBulkPhysDevCreate
    (
    USBD_NODE_ID nodeId,         /* USBD Node Id ofthe device */     
    UINT16       configuration,  /* Configuration value       */ 
    UINT16       interface       /* Interface Number          */ 
    )
    {
    UINT16   actLength;
    UINT8    bfr[255];           /* store for descriptors     */ 
    UINT8  * pBfr = bfr;         /* pointer to the above store*/ 
    UINT     ifNo;
    UINT16   maxPacketSize;  

    pUSB_BULK_DEV     pBulkDev;
    pUSB_CONFIG_DESCR pCfgDescr;
    pUSB_INTERFACE_DESCR pIfDescr;
    pUSB_ENDPOINT_DESCR pOutEp;
    pUSB_ENDPOINT_DESCR pInEp;

    /*
     * A new device is being attached.	Check if we already 
     * have a structure for this device.
     */

    if (usbBulkDevFind (nodeId) != NULL)
        return (OK);

    /* Allocate memory for a new structure to represent this device */

    if ((pBulkDev = OSS_CALLOC (sizeof (*pBulkDev))) == NULL)
        {
        USB_BULK_ERR ("usbBulkPhysDevCreate: Unable to allocate memory\n",
                        0, 0, 0, 0, 0, 0);
        goto errorExit;
        }

    pBulkDev->bulkDevId     = nodeId; 
    pBulkDev->configuration = configuration;
    pBulkDev->interface     = interface;
    pBulkDev->connected     = TRUE;

    /* Check out the device configuration */

    /* Configuration index is assumed to be one less than config'n value */

    if (usbdDescriptorGet (usbdHandle, pBulkDev->bulkDevId, 
                           USB_RT_STANDARD | USB_RT_DEVICE, 
#if 0
                           USB_DESCR_CONFIGURATION, (configuration - 1), 
#else
                           USB_DESCR_CONFIGURATION, 0, 
#endif
                           0, 255, bfr, &actLength) != OK)  
        {
        USB_BULK_ERR ("usbBulkPhysDevCreate: Unable to read configuration "\
                      "descriptor\n", 0, 0, 0, 0, 0, 0);
        goto errorExit;
        }

    if ((pCfgDescr = usbDescrParse (bfr, actLength, 
                                    USB_DESCR_CONFIGURATION)) == NULL)
        {
        USB_BULK_ERR ("usbBulkPhysDevCreate: Unable to find configuration "\
                      "descriptor\n", 0, 0, 0, 0, 0, 0);
        goto errorExit;
        }
   
    /* Look for the interface representing the MSC/SCSI/BULK_ONLY. */

    ifNo = 0;
    while ((pIfDescr = usbDescrParseSkip (&pBfr, &actLength, 
                       USB_DESCR_INTERFACE)) != NULL)
        {
        if (ifNo == pBulkDev->interface)
            break;
        ifNo++;
        }

    if (pIfDescr == NULL)
        goto errorExit;

    pBulkDev->altSetting = pIfDescr->alternateSetting;

    /* 
     * Retrieve the endpoint descriptor(s) following the identified interface
     * descriptor.
     */

    if ((pOutEp = findEndpoint (pBfr, actLength, USB_ENDPOINT_OUT)) == NULL)
        goto errorExit;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品人人做人人爽人人| 欧美一区二区三区电影| 日韩激情视频在线观看| 国产欧美一区二区精品性色超碰| 91黄色小视频| 九色综合狠狠综合久久| 夜夜揉揉日日人人青青一国产精品| 欧美videos中文字幕| 色88888久久久久久影院野外| 久久9热精品视频| 亚洲国产综合在线| 国产精品萝li| 国产亚洲成aⅴ人片在线观看| 色狠狠色狠狠综合| 亚洲欧美怡红院| 久久精品一区二区三区av| 91精品免费观看| 欧美综合色免费| 97精品超碰一区二区三区| 国产一区二区三区免费看| 蜜臀久久99精品久久久久久9| 亚洲精品欧美二区三区中文字幕| 国产欧美日韩亚州综合 | 92精品国产成人观看免费| 国内精品写真在线观看| 免费观看日韩电影| 艳妇臀荡乳欲伦亚洲一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 精品一区二区三区蜜桃| 日韩高清不卡在线| 亚洲午夜久久久久中文字幕久| 中文字幕在线不卡一区| 国产欧美一区二区三区鸳鸯浴| 国产亚洲婷婷免费| 久久九九久久九九| 久久日一线二线三线suv| 精品国产91久久久久久久妲己| 欧美一区二区三区男人的天堂| 欧美裸体bbwbbwbbw| 欧美三级在线视频| 欧美肥妇free| 2022国产精品视频| 99re热视频精品| 91一区在线观看| 欧美性色黄大片| 欧美日韩国产精选| 4438x亚洲最大成人网| 91精品国产入口| 欧美成人性战久久| 久久久久亚洲蜜桃| 国产精品久久久久一区| 亚洲婷婷综合久久一本伊一区| 日韩一区在线免费观看| 洋洋成人永久网站入口| 日韩精品电影在线| 国产一区二区在线视频| 成人精品视频一区二区三区尤物| 99久久久国产精品免费蜜臀| 日本精品视频一区二区| 欧美另类变人与禽xxxxx| 日韩欧美中文一区| 欧美激情中文字幕一区二区| 亚洲视频精选在线| 午夜精品久久久| 国内精品免费在线观看| 色综合久久中文字幕综合网| 欧美日韩免费观看一区二区三区| 欧美一区二区三区人| 欧美国产精品v| 亚洲最新视频在线播放| 久久精品国产99国产| 懂色av中文一区二区三区| 在线这里只有精品| 精品久久久久一区二区国产| |精品福利一区二区三区| 亚洲成人一区在线| 国产精品99久久久| 欧美影院一区二区三区| 亚洲一区二区三区爽爽爽爽爽 | 精品国产免费视频| 国产精品久久久久四虎| 午夜私人影院久久久久| 久久超碰97人人做人人爱| kk眼镜猥琐国模调教系列一区二区 | 国产精品天美传媒沈樵| 亚洲国产成人av网| 国产成人三级在线观看| 精品污污网站免费看| 久久精品人人做人人综合| 亚洲六月丁香色婷婷综合久久| 麻豆精品一区二区三区| 91猫先生在线| 久久综合色之久久综合| 亚洲精品免费看| 国产在线一区二区| 欧美日韩视频在线一区二区 | 国产亚洲成aⅴ人片在线观看 | 国产精品国产三级国产三级人妇 | 在线播放欧美女士性生活| 欧美激情一区二区在线| 午夜不卡av在线| 99久久精品国产一区二区三区| 欧美在线免费观看亚洲| 国产精品久久久久9999吃药| 欧美96一区二区免费视频| 99re成人精品视频| 久久久精品国产免费观看同学| 图片区小说区区亚洲影院| 精品乱码亚洲一区二区不卡| 一本大道综合伊人精品热热| 欧美mv和日韩mv国产网站| 亚洲欧美激情插| 成人深夜视频在线观看| 久久青草欧美一区二区三区| 日韩国产一二三区| 欧美亚洲一区二区在线| 国产精品久久久久久久久久久免费看| 久久黄色级2电影| 欧美片网站yy| 亚洲一区二区三区精品在线| 91麻豆swag| 自拍偷在线精品自拍偷无码专区| 国产成a人亚洲精| 2021久久国产精品不只是精品| 日本成人在线看| 在线综合+亚洲+欧美中文字幕| 一区二区三区不卡在线观看| 色综合天天综合网天天狠天天| 国产精品麻豆久久久| 粉嫩欧美一区二区三区高清影视 | 中文字幕一区二区三| 成人av集中营| 国产精品乱码一区二区三区软件| 国产伦理精品不卡| 欧美成人伊人久久综合网| 蜜桃视频一区二区三区在线观看| 欧美欧美欧美欧美| 日本v片在线高清不卡在线观看| 91.com视频| 免费人成黄页网站在线一区二区| 欧美一级专区免费大片| 男女男精品网站| 精品精品国产高清a毛片牛牛| 狠狠色丁香久久婷婷综合_中 | 日韩一二三区视频| 色综合欧美在线视频区| 亚洲欧美另类久久久精品2019| 一道本成人在线| 亚洲成av人片| 国产欧美一区视频| 五月天久久比比资源色| 8x8x8国产精品| 激情另类小说区图片区视频区| 久久久久久久久久久99999| 国产成人免费网站| 亚洲欧美日韩人成在线播放| 欧美午夜宅男影院| 日韩av中文字幕一区二区三区| 欧美成人一区二区三区| 国产高清亚洲一区| 日韩一区欧美一区| 欧美一区二区视频在线观看2020| 久久99精品久久久久婷婷| 中文字幕免费观看一区| 欧洲生活片亚洲生活在线观看| 偷拍日韩校园综合在线| 欧美精品一区二区三区四区| 高清不卡在线观看| 亚洲午夜影视影院在线观看| 日韩免费看的电影| 成人av电影在线网| 日韩不卡一区二区三区| 国产精品久久午夜| 欧美伦理电影网| 成人在线视频一区| 一区二区三区精品视频| 日韩午夜激情免费电影| av在线免费不卡| 青草av.久久免费一区| 国产精品第五页| 日韩欧美一区二区免费| 播五月开心婷婷综合| 日本在线播放一区二区三区| 国产欧美日韩麻豆91| 欧美日本国产一区| 成人免费视频视频| 青青草成人在线观看| 亚洲激情图片一区| 欧美精品一区二区三区蜜桃视频 | 欧美最猛性xxxxx直播| 久久99国产精品免费网站| 亚洲乱码国产乱码精品精的特点| 日韩精品一区二区三区在线观看 | 国产成人鲁色资源国产91色综| 国产精品99久久久久久宅男| 色噜噜久久综合| 国产麻豆精品在线观看| 日本欧美肥老太交大片| 国产精品美女久久久久久久久 | 国产v综合v亚洲欧|