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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? enum.cpp

?? It permits simultaneous use of multiple USB Serial protocols.
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
static
CONTROL_RESPONSE
ProcessGetInterface(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();
    
    ValidateContext(pContext);

    if (dwMsg == UFN_MSG_PREPROCESSED_SETUP_PACKET) {
        // Nothing to do.
        goto EXIT;
    }

    const DWORD dwLength = 1;
    DEBUGCHK(dim(pContext->rgbBuffer) >= dwLength);

    CONTROL_RESPONSE response = CR_SUCCESS;

    DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Get interface.\r\n"), pszFname));   
    
    if (pContext->deviceState == DS_CONFIGURED) {
        PUFN_CONFIGURATION pConfig = GetConfig(pContext, pContext->Speed);
        PUFN_INTERFACE pInterface = &pConfig->pInterfaces[udr.wIndex];
        BYTE bAlternateSetting = pInterface->Descriptor.bAlternateSetting;
        pContext->rgbBuffer[0] = bAlternateSetting;
        SetupTx(pContext, pContext->rgbBuffer, dwLength, udr.wLength);
    }
    else {
        response = CR_STALL_DEFAULT_PIPE;
    }

EXIT:
    FUNCTION_LEAVE_MSG();

    return response;
}


// Handle a Get Status request.
static
CONTROL_RESPONSE
ProcessGetStatus(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();
    
    ValidateContext(pContext);

    if (dwMsg == UFN_MSG_PREPROCESSED_SETUP_PACKET) {
        // Nothing to do.
        goto EXIT;
    }

    const DWORD dwLength = 2;
    DEBUGCHK(dim(pContext->rgbBuffer) >= dwLength);
    CONTROL_RESPONSE response = CR_SUCCESS;

    pContext->rgbBuffer[0] = 0;
    pContext->rgbBuffer[1] = 0;

    BYTE bRecipient = GET_REQUESET_RECIPIENT(udr.bmRequestType);

    if (bRecipient == USB_REQUEST_FOR_DEVICE) {
        DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Get device status.\r\n"), pszFname));

        BYTE bStatus = 0;

        if (pContext->pHighSpeedConfigDesc->bmAttributes & USB_CONFIG_SELF_POWERED) {
            bStatus |= USB_GETSTATUS_SELF_POWERED;
        }

        if (pContext->fRemoteWakeupEnabled) {
            bStatus |= USB_GETSTATUS_REMOTE_WAKEUP_ENABLED;
        }

        pContext->rgbBuffer[0] = bStatus;
    }
    else if (bRecipient == USB_REQUEST_FOR_INTERFACE) {
        if ( (pContext->deviceState != DS_CONFIGURED) || (udr.wIndex != 1) ) {
            DEBUGMSG(ZONE_ERROR, (_T("%s Bad interface request\r\n"),
                pszFname));
            response = CR_STALL_DEFAULT_PIPE;
        }
    }
    else if (bRecipient == USB_REQUEST_FOR_ENDPOINT) {
        PCPipe pPipe = FindPipe(pContext, udr.wIndex);

        if ( pPipe && 
             ( (pContext->deviceState == DS_CONFIGURED) || (udr.wIndex == 0) ) ) {
            BOOL fHalted;
            pContext->PddInfo.pfnIsEndpointHalted(pContext->PddInfo.pvPddContext, 
                pPipe->GetPhysicalEndpoint(), &fHalted);
            if (fHalted) {
                pContext->rgbBuffer[0] = 1;
            }
        }
        else {
            DEBUGMSG(ZONE_ERROR, (_T("%s Bad endpoint request\r\n"),
                pszFname));
            response = CR_STALL_DEFAULT_PIPE;
        }
    }
    else {
        response = CR_UNHANDLED_REQUEST;
    }

    if (response == CR_SUCCESS) {
        // Need to send the data
        SetupTx(pContext, pContext->rgbBuffer, dwLength, udr.wLength);
    }

EXIT:
    FUNCTION_LEAVE_MSG();

    return response;
}


// Handle a Set Adress request.
static
CONTROL_RESPONSE
ProcessSetAddress(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    ValidateContext(pContext);

    DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Set address (%u) request.\r\n"),
        pszFname, udr.wValue));

    // Check for invalid conditions according to the USB spec.
    DEBUGCHK(udr.wValue <= 0x7F);
    DEBUGCHK(pContext->deviceState != DS_CONFIGURED);

    if (udr.wValue == 0) {
        ChangeDeviceState(pContext, DS_DEFAULT);
    }
    else {
        ChangeDeviceState(pContext, DS_ADDRESSED);
    }

    CONTROL_RESPONSE response;
    if (dwMsg == UFN_MSG_SETUP_PACKET) {
        response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
        pContext->PddInfo.pfnSetAddress(pContext->PddInfo.pvPddContext, 
            (BYTE) udr.wValue);
    }
    else {
        response = CR_SUCCESS;
    }

    FUNCTION_LEAVE_MSG();

    return response;
}
    

// Handle a Set Configuration request.
static
CONTROL_RESPONSE
ProcessSetConfiguration(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();
    
    CONTROL_RESPONSE response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
    
    ValidateContext(pContext);

    DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Set configuration (%u) request.\r\n"),
        pszFname, udr.wValue));

    PUFN_CONFIGURATION pConfig = GetConfig(pContext, pContext->Speed);
    BYTE bConfigurationValue = pConfig->Descriptor.bConfigurationValue;

    if (udr.wValue == 0) {
        if (pContext->deviceState == DS_CONFIGURED) {       
            ChangeDeviceState(pContext, DS_ADDRESSED);
            pContext->dwConfiguration = 0;
            SendDeviceNotification(pContext->lpDeviceNotify, 
                pContext->pvDeviceNotifyParameter, UFN_MSG_CONFIGURED, udr.wValue);
        }
        // else simply stay in addressed state        
    }
    else if (udr.wValue == bConfigurationValue) {
        // Only send the "device configured" message to the client once.
        if (pContext->deviceState != DS_CONFIGURED) {
            ChangeDeviceState(pContext, DS_CONFIGURED);
            pContext->dwConfiguration = bConfigurationValue;
            SendDeviceNotification(pContext->lpDeviceNotify, 
                pContext->pvDeviceNotifyParameter, UFN_MSG_CONFIGURED, udr.wValue);
        }
        // else simply stay in configured state
    }
    else {
        response = CR_STALL_DEFAULT_PIPE;
    }

    if (dwMsg == UFN_MSG_PREPROCESSED_SETUP_PACKET) {
        response = CR_SUCCESS;
    }

    FUNCTION_LEAVE_MSG();

    return response;
}


// Handle a Set Interface request.
static
CONTROL_RESPONSE
ProcessSetInterface(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    CONTROL_RESPONSE response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
    
    ValidateContext(pContext);

    DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Set interface (%u) request.\r\n"),
        pszFname, udr.wValue));

    PUFN_CONFIGURATION pConfig = GetConfig(pContext, pContext->Speed);
    PUFN_INTERFACE pInterface = &pConfig->pInterfaces[udr.wIndex];
    BYTE bAlternateSetting = pInterface->Descriptor.bAlternateSetting;

    if ( (udr.wValue != bAlternateSetting) || 
         (pContext->deviceState != DS_CONFIGURED) ) {
        response = CR_STALL_DEFAULT_PIPE;
    }

    if (dwMsg == UFN_MSG_PREPROCESSED_SETUP_PACKET) {
        response = CR_SUCCESS;
    }

    FUNCTION_LEAVE_MSG();

    return response;
}


// Handle a Clear Feature request.
static
CONTROL_RESPONSE
ProcessClearFeature(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    CONTROL_RESPONSE response = CR_UNHANDLED_REQUEST;
    
    ValidateContext(pContext);

    if ( (GET_REQUESET_RECIPIENT(udr.bmRequestType) == USB_REQUEST_FOR_ENDPOINT) && 
         (udr.wValue == USB_FEATURE_ENDPOINT_STALL) ) {
        BYTE bEndpoint = LOBYTE(udr.wIndex);
        DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Clear endpoint (0x%02x) halt request.\r\n"),
            pszFname, bEndpoint));

        PCPipe pPipe = FindPipe(pContext, bEndpoint);
        if (pPipe == NULL) {
            DEBUGMSG(ZONE_ERROR, (_T("%s Asked to clear halt for invalid endpoint 0x%02x\r\n"),
                pszFname, bEndpoint));
            response = CR_STALL_DEFAULT_PIPE;
        }
        else {
            if (dwMsg == UFN_MSG_SETUP_PACKET) {
                pContext->PddInfo.pfnClearEndpointStall(pContext->PddInfo.pvPddContext,
                    pPipe->GetPhysicalEndpoint());
                response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            }
        }
    }
    else if ( (GET_REQUESET_RECIPIENT(udr.bmRequestType) == USB_REQUEST_FOR_DEVICE)) {
        switch (udr.wValue) {
          case USB_FEATURE_REMOTE_WAKEUP:
            pContext->fRemoteWakeupEnabled = FALSE;
            response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            break;
          case USB_FEATURE_B_HNP_ENABLE:
            if (pContext->hParentBusHandle && BusChildIoControl(pContext->hParentBusHandle,IOCTL_BUS_USBOTG_HNP_DISABLE,NULL,0)) {
                response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            }
            break;
        }
    }
    if (dwMsg == UFN_MSG_PREPROCESSED_SETUP_PACKET) {
        response = CR_SUCCESS;
    }
    
    FUNCTION_LEAVE_MSG();

    return response;
}


// Handle a Set Feature request.
static
CONTROL_RESPONSE
ProcessSetFeature(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

    CONTROL_RESPONSE response = CR_UNHANDLED_REQUEST;
    
    ValidateContext(pContext);
    DEBUGMSG( ZONE_USB_EVENTS,(_T("%s:ProcessSetFeature udr.bmRequestType=0x%x, udr.wIndex=0x%x,udr.wValue=0x%x\r\n"),pszFname,udr.bmRequestType,udr.wIndex,udr.wValue));
    if ( (GET_REQUESET_RECIPIENT(udr.bmRequestType) == USB_REQUEST_FOR_ENDPOINT) && 
         (udr.wValue == USB_FEATURE_ENDPOINT_STALL) ) {
        BYTE bEndpoint = LOBYTE(udr.wIndex);
        DEBUGMSG(ZONE_USB_EVENTS, (_T("%s Halt endpoint (0x%02x) request.\r\n"),
            pszFname, bEndpoint));

        PCPipe pPipe = FindPipe(pContext, bEndpoint);
        if (pPipe == NULL) {
            DEBUGMSG(ZONE_ERROR, (_T("%s Asked to halt invalid endpoint 0x%02x\r\n"),
                pszFname, bEndpoint));
            response = CR_STALL_DEFAULT_PIPE;
        }
        else {
            if (dwMsg == UFN_MSG_SETUP_PACKET) {
                pContext->PddInfo.pfnStallEndpoint(pContext->PddInfo.pvPddContext, 
                    pPipe->GetPhysicalEndpoint());
                response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            }
        }
    }
    else if ( (GET_REQUESET_RECIPIENT(udr.bmRequestType) == USB_REQUEST_FOR_DEVICE)) {
        switch (udr.wValue) {
          case USB_FEATURE_REMOTE_WAKEUP:
            pContext->fRemoteWakeupEnabled = TRUE;
            response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            break;
          case USB_FEATURE_B_HNP_ENABLE:
            if (pContext->hParentBusHandle && BusChildIoControl(pContext->hParentBusHandle,IOCTL_BUS_USBOTG_HNP_ENABLE,NULL,0)) {
                response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            }
            break;
          case USB_FEATURE_A_HNP_SUPPORT:
            response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            break;
          case USB_FEATURE_A_ALT_HNP_SUPPORT: {
            RETAILMSG(1, (_T("%s ProcessSetFeature: SetFeature (a_alt_hnp_support) indicate this device does not connected to OTG port!!!\r\n"), pszFname));
            response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
            break;
          }
        }
    }
    else if ( (GET_REQUESET_RECIPIENT(udr.bmRequestType) == USB_REQUEST_FOR_DEVICE) && 
              (udr.wValue == USB_FEATURE_REMOTE_WAKEUP) ) {
        pContext->fRemoteWakeupEnabled = TRUE;
        response = CR_SUCCESS_SEND_CONTROL_HANDSHAKE;
    }


    if (dwMsg == UFN_MSG_PREPROCESSED_SETUP_PACKET) {
        response = CR_SUCCESS;
    }
    DEBUGMSG( ZONE_USB_EVENTS,(_T("%s:ProcessSetFeature return: response = %d \r\n"),pszFname,response));
    FUNCTION_LEAVE_MSG();

    return response;
}


// Handle a USB request.
static
CONTROL_RESPONSE
ProcessRequest(
    PUFN_MDD_CONTEXT pContext,
    USB_DEVICE_REQUEST udr,
    DWORD dwMsg
    )
{
    SETFNAME();
    FUNCTION_ENTER_MSG();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www国产精品av| 国产suv一区二区三区88区| 亚洲欧美日韩在线| 一区二区三区欧美日韩| 蜜臀av亚洲一区中文字幕| 国产综合久久久久久鬼色| k8久久久一区二区三区| 欧美剧在线免费观看网站| 久久天天做天天爱综合色| 久88久久88久久久| 欧美成人在线直播| 99久久精品免费| 精品久久久久久久人人人人传媒| 日韩综合小视频| 成人精品视频.| 欧美一区2区视频在线观看| 专区另类欧美日韩| 国产高清精品久久久久| 欧美欧美午夜aⅴ在线观看| 中文字幕一区二区三区精华液| 久久精品国产久精国产| 91精品蜜臀在线一区尤物| 亚洲天堂网中文字| 欧美老肥妇做.爰bbww| 精品制服美女丁香| 国产精品成人免费| 国产精品自在欧美一区| 精品国产凹凸成av人网站| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲黄网站在线观看| 国产精品中文有码| 樱花影视一区二区| 精品久久国产老人久久综合| 成人av高清在线| 国产精品五月天| 国产 欧美在线| 午夜精品一区二区三区电影天堂| 欧洲另类一二三四区| 综合久久久久久久| 欧美一级黄色大片| 日本高清视频一区二区| 日本一区二区三区四区| 国产精品一二三四五| 亚洲最色的网站| 久久久www成人免费毛片麻豆 | 欧美亚日韩国产aⅴ精品中极品| 中文字幕五月欧美| 日韩欧美国产一区二区三区| 久久99国产精品久久99| 一区二区三区精品视频| 欧美韩国日本不卡| 色激情天天射综合网| 国产在线不卡一卡二卡三卡四卡| 久久久久久久综合日本| 欧美理论在线播放| 色婷婷精品久久二区二区蜜臀av | 久久精品久久久精品美女| 亚洲免费看黄网站| 亚洲国产精品传媒在线观看| 精品国产一区二区三区忘忧草| 色婷婷综合五月| 国产成人av影院| 狠狠色综合播放一区二区| 午夜精品视频一区| 午夜久久久影院| 亚洲影院免费观看| 欧美一区二区三区色| 欧美唯美清纯偷拍| 91丨九色丨尤物| 麻豆精品国产91久久久久久 | 久久精品噜噜噜成人88aⅴ| 亚洲成人先锋电影| 久久久久久久久久看片| 欧美成人在线直播| 亚洲精品一区在线观看| 亚洲已满18点击进入久久| 国产精品青草久久| 中文字幕av一区二区三区高| 久久久久久久久久久99999| 欧美r级在线观看| 欧美大胆一级视频| 精品久久久久一区二区国产| 精品99久久久久久| 久久精品亚洲精品国产欧美| 91啪亚洲精品| 成人黄色免费短视频| 91一区二区三区在线播放| 91丝袜美腿高跟国产极品老师 | 国产麻豆一精品一av一免费| 久久电影网电视剧免费观看| 精品一区中文字幕| 极品少妇xxxx精品少妇偷拍| 国产毛片精品视频| 91啪亚洲精品| 欧美精三区欧美精三区| 日韩欧美国产三级| 久久免费的精品国产v∧| 中文字幕国产一区二区| 自拍av一区二区三区| 天天综合天天做天天综合| 久久 天天综合| 99热精品一区二区| 欧美视频第二页| 亚洲精品在线免费播放| 国产精品久久久久久久午夜片| 成人欧美一区二区三区黑人麻豆 | 水蜜桃久久夜色精品一区的特点 | 激情综合五月婷婷| 成人av免费网站| 91精品欧美久久久久久动漫| 国产日韩欧美在线一区| 伊人婷婷欧美激情| 日本美女视频一区二区| 久久久一区二区| 五月天丁香久久| 国产成人免费高清| 91精品国产乱码| 久久久精品免费网站| 国产精品初高中害羞小美女文| 亚洲一线二线三线视频| 极品少妇xxxx精品少妇| 91蜜桃在线免费视频| 日韩欧美精品在线| 亚洲综合在线五月| 国产一区二区三区在线观看免费| 91蝌蚪porny| 久久一区二区三区四区| 亚洲综合一二区| 高清成人免费视频| 欧美一级二级三级乱码| 国产精品福利影院| 免费观看一级欧美片| 婷婷久久综合九色综合绿巨人| 国产精品一区三区| 91精品国产91综合久久蜜臀| 最新国产の精品合集bt伙计| 久久国产综合精品| 欧美影视一区二区三区| 国产视频一区在线播放| 免费在线观看成人| 欧美日韩激情在线| 中文字幕永久在线不卡| 国产一区二区在线电影| 制服丝袜av成人在线看| 一区二区三区中文在线观看| 成人午夜精品一区二区三区| 日韩美女视频在线| 日韩电影在线免费看| 欧美在线影院一区二区| 中文字幕在线播放不卡一区| 国产成人av电影| 久久这里只有精品6| 九九视频精品免费| 日韩欧美国产一区二区三区| 日韩成人一区二区| 在线观看91精品国产麻豆| 亚洲午夜视频在线| 精品一区二区在线视频| 91精品国产全国免费观看| 亚洲国产你懂的| 欧美性生活大片视频| 樱花草国产18久久久久| 91黄视频在线观看| 亚洲伦理在线免费看| 一本高清dvd不卡在线观看| 国产精品午夜在线| 丁香婷婷综合激情五月色| 国产亚洲人成网站| 国产成人自拍高清视频在线免费播放 | 国产目拍亚洲精品99久久精品| 免费在线观看视频一区| 日韩精品最新网址| 狠狠色狠狠色综合系列| 久久精品在线观看| 91色综合久久久久婷婷| 九九视频精品免费| 亚洲精品网站在线观看| 9人人澡人人爽人人精品| 国产欧美精品一区二区色综合| 国产精品996| 欧美国产日韩精品免费观看| 成人一区二区在线观看| 国产精品国产三级国产普通话99| www.欧美亚洲| 一个色综合av| 欧美另类久久久品| 极品少妇一区二区| 国产精品亲子伦对白| 色综合中文字幕| 日韩三级免费观看| 国产精品91一区二区| 国产精品久久二区二区| 色94色欧美sute亚洲线路一久 | 男人的天堂亚洲一区| 欧美不卡视频一区| 成人手机在线视频| 亚洲影院在线观看| 久久嫩草精品久久久久| 91小视频免费看| 奇米精品一区二区三区在线观看 |