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

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

?? usbehcdrhemulation.c

?? vxWorks下USB2.0中的EHCI的HCD源碼,極具有參考價值
?? C
?? 第 1 頁 / 共 5 頁
字號:
                        pHCDData->RHData.bRemoteWakeupEnabled = FALSE;
                        }
                        /* Update the URB status */
                        pURB->nStatus = USBHST_SUCCESS;
                        break;
                    }
                case USBHST_RECIPIENT_INTERFACE: /* Interface recipient */
                case USBHST_RECIPIENT_ENDPOINT:  /* Endpoint recipient */
                    {

                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;
                    break;
                    }
                default:
                    {
                    /* Invalid recipient value */

                    pURB->nStatus = USBHST_INVALID_REQUEST;
                    break;
                    }
                }
            break;
            }
        case USBHST_REQ_GET_CONFIGURATION:/* Get Configuration request */
            {

            /*
             * Update the URB transfer buffer with the current configuration
             * value for the root hub
             */

            pURB->pTransferBuffer[0] = pHCDData->RHData.uConfigValue;

            /* Update the URB transfer length */

            pURB->uTransferLength = USB_EHCD_RH_GET_CONFIG_SIZE;

            /* Update the URB status */

            pURB->nStatus = USBHST_SUCCESS;
            break;
            }
        case USBHST_REQ_GET_DESCRIPTOR:/* Get Descriptor request */
            {
            /* Check the descriptor type */

            switch (pSetup->wValue >> USB_EHCD_RH_DESCRIPTOR_BITPOSITION)
                {
                case USBHST_DEVICE_DESC:
                    {
                    /* Check the length of descriptor requested */

                    if (pSetup->wLength >= USB_EHCD_RH_DEVICE_DESC_SIZE)
                        {
                        /* Update the URB transfer length */

                        pURB->uTransferLength = USB_EHCD_RH_DEVICE_DESC_SIZE;
                        }
                    else
                        {
                        /* Update the URB transfer length */

                        pURB->uTransferLength = pSetup->wLength;
                        }

                    /* Copy the descriptor to the URB transfer buffer */

                    OS_MEMCPY(pURB->pTransferBuffer,
                              gRHDeviceDescriptor,
                              pURB->uTransferLength);


                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;

                    break;
                    }
                case USBHST_CONFIG_DESC:
                    {

                    /* Check the length of descriptor requested */

                    if (pSetup->wLength >= USB_EHCD_RH_CONFIG_DESC_SIZE)
                        {
                        /* Update the URB transfer length */

                        pURB->uTransferLength = USB_EHCD_RH_CONFIG_DESC_SIZE;
                        }
                    else
                        {
                        /* Update the URB transfer length */

                        pURB->uTransferLength = pSetup->wLength;
                        }

                    /* Copy the descriptor to the URB transfer buffer */

                    OS_MEMCPY(pURB->pTransferBuffer,
                              gRHConfigDescriptor,
                              pURB->uTransferLength);

                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;
                    break;
                    }
                default:
                    {
                    /* Invalid descriptor type */

                    pURB->nStatus = USBHST_INVALID_REQUEST;
                    break;
                    }
                }
            break;
            }
        case USBHST_REQ_GET_STATUS:/* Get Status request */
            {
            /* Based on the recipient value, handle the request */

            switch (pSetup->bmRequestType & USB_EHCD_RH_RECIPIENT_MASK)
                {
                case USBHST_RECIPIENT_DEVICE:/* Device recipient */
                    {
                    /* Clear the URB transfer buffer */

                    OS_MEMSET(pURB->pTransferBuffer,
                              0,
                              USB_EHCD_RH_GET_STATUS_SIZE);

                    /* Update the device status - Self powered */

                    pURB->pTransferBuffer[0] = 0x01;

                    /* If remote wakeup is enabled, update the status */

                    if (TRUE == pHCDData->RHData.bRemoteWakeupEnabled)
                        {
                        /* Remote wakeup is enabled */

                        pURB->pTransferBuffer[0] |= 0x02;
                        }

                    /* Update the URB transfer length */

                    pURB->uTransferLength = USB_EHCD_RH_GET_STATUS_SIZE;

                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;

                    break;
                    }
                case USBHST_RECIPIENT_INTERFACE: /* Interface recipient */
                case USBHST_RECIPIENT_ENDPOINT:  /* Endpoint recipient */
                    {
                    /* Update the URB transfer buffer */

                    OS_MEMSET(pURB->pTransferBuffer,
                              0,
                              USB_EHCD_RH_GET_STATUS_SIZE);

                    /* Update the URB transfer length */

                    pURB->uTransferLength = USB_EHCD_RH_GET_STATUS_SIZE;

                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;

                    break;
                    }
                default :
                    {
                    /* Invalid recipient value */

                    pURB->nStatus = USBHST_INVALID_REQUEST;

                    break;
                    }

                }
            break;
            }
        case USBHST_REQ_SET_ADDRESS:/* Set Address request */
            {
            /* Check whether the address is valid */

            if (0 == pSetup->wValue)
                {
                /* Address is not valid */

                pURB->nStatus = USBHST_INVALID_REQUEST;

                break;
                }

            /* Update the RH address */

            pHCDData->RHData.uDeviceAddress = (UINT8)pSetup->wValue;

            /* Update the URB status */

            pURB->nStatus = USBHST_SUCCESS;

            break;
            }
        case USBHST_REQ_SET_CONFIGURATION:/* Set Configuration request */
            {
            /* Check whether the configuration value is valid */

            if ((0 != pSetup->wValue) && (1 != pSetup->wValue))
                {
                /* Invalid configuration value. Update the URB status */

                pURB->nStatus = USBHST_INVALID_REQUEST;

                break;
                }

            /* Update the current configuration value for the root hub */

            pHCDData->RHData.uConfigValue = (UINT8)pSetup->wValue;

            /*
             * Enable the EHCI interrupts - this is done as only
             * after configuration of the Root hub any device other than
             * Root hub will be serviced.
             */

            USB_EHCD_WRITE_REG(pHCDData,
                           USB_EHCD_USBINTR,
                           USB_EHCD_RH_CONFIG_INTERRUPT_MASK);

            /* Update the URB status */

            pURB->nStatus = USBHST_SUCCESS;
            
            break;
            }
        case USBHST_REQ_SET_FEATURE:/* Set feature request */
            {
            /* Based on the recipient, handle the request */
            switch (pSetup->bmRequestType & USB_EHCD_RH_RECIPIENT_MASK)
                {
    		case USBHST_RECIPIENT_DEVICE: /* Device recipient */
                    {
                    /* Check the feature selector */

                    if (USBHST_FEATURE_DEVICE_REMOTE_WAKEUP == pSetup->wValue)
                        {
                        /* Disable the device remote wakeup feature */

                        pHCDData->RHData.bRemoteWakeupEnabled = TRUE;
                        }

                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;
                    break;
                    }
                case USBHST_RECIPIENT_INTERFACE: /* Interface recipient */
                case USBHST_RECIPIENT_ENDPOINT:  /* Endpoint recipient */
                    {

                    /* Update the URB status */

                    pURB->nStatus = USBHST_SUCCESS;
                    break;
                    }
                default:
                    {
                    /* Invalid recipient value */

                    pURB->nStatus = USBHST_INVALID_REQUEST;
                    break;
                    }
                }
            break;
            }
        default :/* Invalid request */
            {
            pURB->nStatus = USBHST_INVALID_REQUEST;
            break;
            }
        }/* End of switch () */

    /* If a callback function is registered, call the callback function */

    if (NULL != pURB->pfCallback)
        {
        (pURB->pfCallback)(pURB);
        }

    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdRhProcessStandardRequest - Exit\n",0,0,0,0);
    return Status;
    }
    /* End of usbEhcdRhProcessStandardRequest() */

/***************************************************************************
*
* usbEhcdRhClearPortFeature - clears a feature of the port
*
* This routine clears a feature of the port.
*
* RETURNS: USBHST_SUCCESS if the URB is submitted successfully.
* USBHST_INVALID_PARAMETER if the parameters are not valid.
*
* ERRNO:
*   None.
*/

USBHST_STATUS usbEhcdRhClearPortFeature
    (
    pUSB_EHCD_DATA pHCDData,           /* Ptr to HCD block           */
    pUSBHST_URB	   pURB                /* Ptr to User Request Block  */
    )
    {
    /* To hold the request status */

    USBHST_STATUS Status = USBHST_SUCCESS;

    /* Pointer to the setup packet */

    pUSBHST_SETUP_PACKET pSetup = NULL;

    OS_LOG_MESSAGE_LOW(EHCD,"usbEhcdRhClearPortFeature - Entry\n",0,0,0,0);

    /* Check the validity of the parameters */

    if (NULL == pHCDData ||
        NULL == pURB ||
        NULL == pURB->pTransferSpecificData)
        {
        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdRhClearPortFeature - \
                                           Invalid parameters\n",0,0,0,0);

        pURB->nStatus = USBHST_INVALID_PARAMETER;
        return USBHST_INVALID_PARAMETER;
        }

    /* Extract the setup packet */

    pSetup = (pUSBHST_SETUP_PACKET)pURB->pTransferSpecificData;

    /* Check whether the members are valid */

    if (pSetup->wIndex >
                pHCDData->RHData.uNumDownstreamPorts)
        {
        OS_LOG_MESSAGE_HIGH(EHCD,"usbEhcdRhClearPortFeature - \
                                           Invalid port index\n",0,0,0,0);
        pURB->nStatus = USBHST_INVALID_PARAMETER;
        return USBHST_INVALID_PARAMETER;
        }

    /* Handle the request based on the feature to be cleared */

    switch(pSetup->wValue)
        {
        case USB_EHCD_RH_PORT_ENABLE:/* Port enable */
            {
            /* Clear the enable bit */

            USB_EHCD_CLR_BIT_PORT(pHCDData,
                              (pSetup->wIndex) -1,
                              PORT_ENABLED_DISABLED);

            /* Update the URB status */

            pURB->nStatus = USBHST_SUCCESS;
            break;
            }
        case USB_EHCD_RH_PORT_SUSPEND:/* Port Suspend */
            {
            /* To hold the status of the port */

            UINT32 uPortStatus = 0;

            /* Drive port resume */

            USB_EHCD_SET_BIT_PORT(pHCDData,
                              ((pSetup->wIndex) -1),
                              FORCE_PORT_RESUME);

            /*
             * The resume signal should be generated for atleast
             * 20ms. Additional 10 ms is for handling the
             * software delays.
             * Should be checked whether there is any performance issue
             * with this delay.
             */

            OS_DELAY_MS(30);

            /* Stop port resume */

            USB_EHCD_CLR_BIT_PORT(pHCDData,
                              (pSetup->wIndex) -1,
                              FORCE_PORT_RESUME);

            /* Update the URB status */

            pURB->nStatus = USBHST_SUCCESS;

            /* Copy the value in the port status register */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区久久| 国产很黄免费观看久久| 国产精品资源网站| 欧美在线短视频| 国产亚洲美州欧州综合国| 亚洲.国产.中文慕字在线| 成人精品视频网站| 日韩欧美在线观看一区二区三区| 亚洲天堂福利av| 国产二区国产一区在线观看| 欧美午夜宅男影院| 一区免费观看视频| 国产成人免费av在线| 日韩一本二本av| 夜色激情一区二区| 99在线精品观看| 国产女人aaa级久久久级| 日本sm残虐另类| 欧美日韩国产三级| 亚洲曰韩产成在线| 91视频免费播放| 亚洲欧洲精品一区二区三区| 国产精品自在在线| 精品国产一区二区国模嫣然| 蜜桃视频第一区免费观看| 欧美视频精品在线| 亚洲国产精品久久久久婷婷884 | 色国产综合视频| 国产精品成人一区二区艾草| 国产91精品在线观看| 久久久激情视频| 国产一区二三区| 精品国产一区二区亚洲人成毛片| 欧美aaaaa成人免费观看视频| 欧美性生活久久| 亚洲国产成人va在线观看天堂| 欧美亚洲一区二区在线| 一个色在线综合| 精品视频1区2区3区| 亚洲成人黄色小说| 欧美一区二区三区的| 日本欧美久久久久免费播放网| 91精品国产综合久久香蕉的特点| 天堂av在线一区| 日韩精品在线一区| 国产精品一二三四五| 日本一区二区久久| 色哟哟一区二区| 婷婷亚洲久悠悠色悠在线播放| 欧美乱熟臀69xxxxxx| 免费av成人在线| 国产欧美一区二区精品仙草咪| 国产老肥熟一区二区三区| 国产精品福利电影一区二区三区四区| 不卡的av在线播放| 婷婷成人综合网| 久久精品夜夜夜夜久久| 色狠狠一区二区| 蜜桃av一区二区三区| 国产日韩欧美麻豆| 色婷婷精品大视频在线蜜桃视频 | 欧美精品三级在线观看| 久久99精品一区二区三区三区| 国产色一区二区| 欧美性视频一区二区三区| 精品综合久久久久久8888| 国产精品第四页| 91精品婷婷国产综合久久| 国产成人精品aa毛片| 亚洲图片自拍偷拍| 久久久久久久久伊人| 色天天综合久久久久综合片| 极品少妇一区二区三区精品视频 | 午夜视频在线观看一区二区三区| 欧美一区二区三区四区视频| 成人av资源在线| 秋霞午夜av一区二区三区| 中文字幕成人在线观看| 91精品在线观看入口| 91麻豆国产香蕉久久精品| 久久国产精品区| 亚洲激情在线播放| 国产精品天美传媒沈樵| 在线观看91av| 色哟哟精品一区| 国产.欧美.日韩| 美洲天堂一区二卡三卡四卡视频| 亚洲天堂成人网| 国产拍欧美日韩视频二区| 欧美一级免费大片| 91国产免费看| 不卡的电影网站| 国产久卡久卡久卡久卡视频精品| 午夜激情一区二区三区| 亚洲日本电影在线| 国产欧美精品一区aⅴ影院| 欧美大片一区二区三区| 欧美伦理电影网| 欧美三级电影在线观看| 91欧美一区二区| 不卡的av网站| 不卡的电影网站| 成人妖精视频yjsp地址| 国产一区二区精品久久91| 美女网站色91| 日韩精品一二区| 婷婷亚洲久悠悠色悠在线播放| 亚洲精品免费在线播放| 亚洲欧美另类久久久精品| 国产精品电影院| 国产精品家庭影院| 亚洲欧洲韩国日本视频| 国产精品国产三级国产| 国产精品青草久久| 亚洲欧洲国产日韩| ㊣最新国产の精品bt伙计久久| 亚洲国产精品激情在线观看| 久久亚洲影视婷婷| 国产农村妇女毛片精品久久麻豆| 久久久久久9999| 国产精品嫩草久久久久| 亚洲日本在线观看| 一区二区在线观看视频在线观看| 亚洲美女电影在线| 亚洲五码中文字幕| 免费观看久久久4p| 久草精品在线观看| 国产成人免费在线观看| av动漫一区二区| 欧美日韩一卡二卡| 欧美xxxxx牲另类人与| 久久精品男人的天堂| 中文字幕精品在线不卡| 一区二区国产视频| 视频在线观看91| 韩国成人福利片在线播放| 成人性色生活片免费看爆迷你毛片| 国产不卡免费视频| 在线观看一区日韩| 26uuu亚洲综合色欧美 | 欧美大白屁股肥臀xxxxxx| 亚洲精品一区二区三区影院 | 日韩精品一区二区三区视频在线观看| 精品国产青草久久久久福利| 亚洲国产高清不卡| 亚洲综合成人在线视频| 精品综合免费视频观看| 成年人国产精品| 欧美精品1区2区3区| 中文欧美字幕免费| 午夜电影久久久| 国产成人一级电影| 欧美做爰猛烈大尺度电影无法无天| 日韩一区国产二区欧美三区| 中文字幕色av一区二区三区| 午夜精品一区二区三区免费视频| 国产一区二区三区免费| 91久久精品一区二区二区| 欧美成人综合网站| 亚洲免费av高清| 国产在线精品视频| 欧美日韩一区二区在线视频| 久久久久久久久久久久电影 | 欧美久久久久久久久| 久久久美女艺术照精彩视频福利播放| 亚洲色图另类专区| 激情六月婷婷久久| 欧美午夜电影一区| 亚洲欧美一区二区视频| 国产在线精品一区二区夜色 | 亚洲一区在线观看免费观看电影高清| 久久激情综合网| 欧美日韩激情一区二区三区| 欧美激情一区二区三区全黄| 免费在线视频一区| 欧美色手机在线观看| 亚洲人成网站色在线观看| 国模冰冰炮一区二区| 91精品在线麻豆| 亚洲一区视频在线| 一本久久综合亚洲鲁鲁五月天| 国产日产亚洲精品系列| 日本vs亚洲vs韩国一区三区二区| 在线精品视频小说1| 亚洲欧洲综合另类| 不卡一区二区在线| 国产精品三级在线观看| 国产一区二区三区四区五区美女 | 美女mm1313爽爽久久久蜜臀| 欧洲亚洲精品在线| 亚洲特级片在线| av电影在线观看一区| 国产精品私人影院| 国产91精品一区二区| 国产日本亚洲高清| 粉嫩av一区二区三区在线播放 | 91精品国产色综合久久ai换脸| 综合亚洲深深色噜噜狠狠网站| 大陆成人av片| 中文在线一区二区|