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

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

?? bot.c

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++

THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name: 

        BOT.C

Abstract:

        Bulk-Only Transport
        USB Revison 1.0, Sept. 31, 1999

--*/

#include "bot.h"

BOOL
BOT_ResetAllPipes(
    PUSBMSC_DEVICE pUsbDevice
    );

DWORD
BOT_ResetEvent(
    HANDLE hEvent
    )
{
    DWORD dwErr = ERROR_SUCCESS;

    if ( hEvent && !ResetEvent(hEvent) ) {
        ASSERT(0);
        dwErr = GetLastError();
        DEBUGMSG( ZONE_ERR,(TEXT("*** ResetEvent ERROR:%d ***\n"), dwErr));
        return dwErr;
    }

    return TRUE;
}


//
// 3.1 Bulk-Only Mass Storage Reset.
// This class-specific command shall ready the device for the next CBW.
//
BOOL
BOT_MassStorageReset(
    PUSBMSC_DEVICE pUsbDevice
    )
{
    USB_DEVICE_REQUEST ControlHeader;
    DWORD dwBytesTransferred = 0;
    DWORD dwErr = 0, dwUsbErr = 0;
    BOOL bRc = FALSE;
    UCHAR count = 0;
    
    INIT_DT;

    DEBUGMSG( ZONE_TRACE, (TEXT("USBMSC>BOT_MassStorageReset\n")));

    START_DT;

    if ( ACCEPT_IO(pUsbDevice) ) {

        ControlHeader.bmRequestType = USB_REQUEST_HOST_TO_DEVICE | USB_REQUEST_CLASS | USB_REQUEST_FOR_INTERFACE;
        ControlHeader.bRequest = 255;
        ControlHeader.wValue = 0;
        ControlHeader.wIndex = pUsbDevice->pUsbInterface->Descriptor.bInterfaceNumber;
        ControlHeader.wLength = 0;
_retry:
        dwErr = IssueVendorTransfer( pUsbDevice->UsbFuncs,
                                     pUsbDevice->hUsbDevice,
                                     DefaultTransferComplete,
                                     pUsbDevice->hEP0Event,
                                     (USB_OUT_TRANSFER|USB_NO_WAIT|USB_SHORT_TRANSFER_OK),
                                     &ControlHeader,
                                     NULL, 0,
                                     &dwBytesTransferred,
                                     pUsbDevice->Timeouts.Reset,
                                     &dwUsbErr );

        if ( ERROR_SUCCESS == dwErr && USB_NO_ERROR == dwUsbErr ) {
            bRc = TRUE;
        } else if (ERROR_SUCCESS == ResetDefaultEndpoint(pUsbDevice->UsbFuncs, pUsbDevice->hUsbDevice) ) {
            if (++count < MAX_BOT_STALL_COUNT) {
                DEBUGMSG( ZONE_WARN, (TEXT("Retry BOT_MassStorageReset\n")));
                Sleep(ONE_FRAME_PERIOD);
                //TEST_TRAP();
                goto _retry;
            }
        }
    }

    STOP_DT( TEXT("BOT_MassStorageReset"), 10, pUsbDevice->Timeouts.Reset );
    
    DEBUGMSG( ZONE_TRACE, (TEXT("USBMSC<BOT_MassStorageReset:%d\n"), bRc) );

    return bRc;
}


//
// 3.2 Get Max LUN
//
UCHAR
BOT_GetMaxLUN(
    PUSBMSC_DEVICE pUsbDevice
    )
{
    USB_DEVICE_REQUEST ControlHeader;
    DWORD dwBytesTransferred = 0;
    UCHAR bMaxLun = 0xFF;
    DWORD dwErr = 0, dwUsbErr = 0;
    BOOL bRc = FALSE;

    INIT_DT;

    DEBUGMSG( ZONE_TRACE, (TEXT("USBMSC>BOT_GetMaxLUN\n")));

    START_DT;

    if ( ACCEPT_IO(pUsbDevice) ) {

        ControlHeader.bmRequestType = USB_REQUEST_DEVICE_TO_HOST | USB_REQUEST_CLASS | USB_REQUEST_FOR_INTERFACE;
        ControlHeader.bRequest = 254;
        ControlHeader.wValue = 0;
        ControlHeader.wIndex = pUsbDevice->pUsbInterface->Descriptor.bInterfaceNumber;
        ControlHeader.wLength = 1;

        dwErr = IssueVendorTransfer( pUsbDevice->UsbFuncs,
                                     pUsbDevice->hUsbDevice,
                                     DefaultTransferComplete,
                                     pUsbDevice->hEP0Event,
                                     (USB_IN_TRANSFER|USB_NO_WAIT|USB_SHORT_TRANSFER_OK),
                                     &ControlHeader,
                                     &bMaxLun, 0,
                                     &dwBytesTransferred,
                                     pUsbDevice->Timeouts.CommandBlock,
                                     &dwUsbErr );

        if ( ERROR_SUCCESS != dwErr || USB_NO_ERROR != dwUsbErr ) {
            
            ResetDefaultEndpoint(pUsbDevice->UsbFuncs, pUsbDevice->hUsbDevice);
                    
        }

    } 

    STOP_DT( TEXT("BOT_GetMaxLUN"), 10, pUsbDevice->Timeouts.CommandBlock );

    DEBUGMSG( ZONE_TRACE, (TEXT("USBMSC<BOT_GetMaxLUN:%d\n"), bMaxLun ));

    return bMaxLun;
}


//
// 5.3.4 Reset Recovery
//
BOOL
BOT_ResetRecovery(
    PUSBMSC_DEVICE pUsbDevice
    )
{
    BOOL bRc = FALSE;
    DWORD dwErr;

    INIT_DT;

    DEBUGMSG(ZONE_TRACE,(TEXT("USBMSC>BOT_ResetRecovery\n")));

    START_DT;
    
    // 0. reset endpoint 0
    dwErr = ResetDefaultEndpoint(pUsbDevice->UsbFuncs, 
                                 pUsbDevice->hUsbDevice);
    
    if ( ERROR_SUCCESS == dwErr ) 
    {
        // 1. send class command
        BOT_MassStorageReset(pUsbDevice);

        // 2. reset BulkIn endpoint
        dwErr = ResetBulkEndpoint(pUsbDevice->UsbFuncs, 
                                  pUsbDevice->hUsbDevice,
                                  pUsbDevice->BulkIn.hPipe,
                                  DefaultTransferComplete,
                                  pUsbDevice->BulkIn.hEvent,
                                  pUsbDevice->BulkIn.bIndex,
                                  pUsbDevice->Timeouts.Reset);
        
        if ( ERROR_SUCCESS == dwErr) 
        {
            // 3. reset BulkOut endpoint
            dwErr = ResetBulkEndpoint(pUsbDevice->UsbFuncs, 
                                      pUsbDevice->hUsbDevice,
                                      pUsbDevice->BulkOut.hPipe,
                                      DefaultTransferComplete,
                                      pUsbDevice->BulkOut.hEvent,
                                      pUsbDevice->BulkOut.bIndex,
                                      pUsbDevice->Timeouts.Reset );

            if ( ERROR_SUCCESS == dwErr ) {
                bRc = TRUE;
            }  //else TEST_TRAP();

        }  //else TEST_TRAP();
        //}
    } //else TEST_TRAP();

    BOT_ResetEvent(pUsbDevice->hEP0Event);
    BOT_ResetEvent(pUsbDevice->BulkIn.hEvent);
    BOT_ResetEvent(pUsbDevice->BulkOut.hEvent);

    STOP_DT( TEXT("BOT_ResetRecovery"), 10, pUsbDevice->Timeouts.Reset );
    
    DEBUGMSG(ZONE_TRACE,(TEXT("USBMSC<BOT_ResetRecovery:%d\n"), bRc));
   
    return bRc;
}



//
// Reset All Pipes
//
BOOL
BOT_ResetAllPipes(
    PUSBMSC_DEVICE pUsbDevice
    )
{
   BOOL bRc = FALSE;
   DWORD dwErr;

   INIT_DT;

   DEBUGMSG(ZONE_TRACE,(TEXT("USBMSC>BOT_ResetAllPipes\n")));

   START_DT

   // 0. reset endpoint 0
   dwErr = ResetDefaultEndpoint(pUsbDevice->UsbFuncs, 
                                pUsbDevice->hUsbDevice);

   if ( ERROR_SUCCESS == dwErr ) 
   {
        // 1. reset BulkIn endpoint
        if ( ResetPipe(pUsbDevice->UsbFuncs,
                       pUsbDevice->BulkIn.hPipe,
                       USB_NO_WAIT) ) 
        {
            // 2. reset BulkOut endpoint
            if ( ResetPipe(pUsbDevice->UsbFuncs,
                           pUsbDevice->BulkOut.hPipe,
                           USB_NO_WAIT) ) 
            {               
                bRc = TRUE;
            }
        }
    }

    BOT_ResetEvent(pUsbDevice->hEP0Event);
    BOT_ResetEvent(pUsbDevice->BulkIn.hEvent);
    BOT_ResetEvent(pUsbDevice->BulkOut.hEvent);

    STOP_DT( TEXT("BOT_ResetAllPipes"), 10, pUsbDevice->Timeouts.Reset );  

    DEBUGMSG(ZONE_TRACE,(TEXT("USBMSC<BOT_ResetAllPipes:%d\n"), bRc));
   
    return bRc;
}


//
// See 5.3 Data Transfer Conditions
//
DWORD
BOT_DataTransfer(
    PUSBMSC_DEVICE           pUsbDevice,
    PTRANSPORT_COMMAND       pCommand,
    OPTIONAL PTRANSPORT_DATA pData, // OPTIONAL
    BOOL                     Direction // TRUE = Data-In, else Data-Out
    )
{
    // Command Block Wrapper
    CBW Cbw;
    DWORD dwCbwSize = sizeof(CBW);

    // Command Status Wrapper
    CSW Csw;
    DWORD dwCswSize = sizeof(CSW);

    DWORD dwBytesTransferred = 0;   
    DWORD dwErr = ERROR_SUCCESS;
    DWORD dwUsbErr = USB_NO_ERROR;
    DWORD dwResetErr, dwCswErr;

    BOOL  bRc = FALSE;
    UCHAR ucStallCount;

    INIT_DT;

    DEBUGMSG(ZONE_TRACE,(TEXT("USBMSC>BOT_DataTransfer\n")));

    // parameter check
    if ( !pCommand || !pCommand->CommandBlock || pCommand->Length > MAX_CBWCB_SIZE ) {
        dwErr = ERROR_INVALID_PARAMETER;
        DEBUGMSG(ZONE_ERR,(TEXT("BOT_DataTransfer error:%d\n"),dwErr));
        SetLastError(dwErr);
        return dwErr;
    }

    if ( !ACCEPT_IO(pUsbDevice) ) {
        dwErr = ERROR_ACCESS_DENIED;
        DEBUGMSG( ZONE_ERR,(TEXT("BOT_DataTransfer error:%d\n"), dwErr));
        SetLastError(dwErr);
        return dwErr;
    }

    //
    // We require exclusive entry into the transport.
    // we could implement command queuing.
    //
    EnterCriticalSection(&pUsbDevice->Lock);

    if ( !BOT_ResetAllPipes(pUsbDevice) ) {
        DEBUGMSG( ZONE_ERR, (TEXT("BOT_ResetAllPipes failed!\n")));
        dwErr = ERROR_GEN_FAILURE;
        goto BOT_SendCommandDone;
    }

    ucStallCount = 0;

    pUsbDevice->dwCurTag++;

    memset( &Cbw, 0, dwCbwSize );
    memset( &Csw, 0, dwCswSize );

    //
    // build the active CBW
    //        
    Cbw.dCBWSignature = CBW_SIGNATURE;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久一本精品| 欧美色综合久久| 欧美曰成人黄网| 久久婷婷国产综合精品青草| 一区二区三区免费网站| 国产一区二区三区免费看| 欧美亚男人的天堂| 亚洲同性gay激情无套| 国产在线不卡一卡二卡三卡四卡| 欧美亚日韩国产aⅴ精品中极品| 国产日韩v精品一区二区| 欧美在线色视频| 91在线高清观看| 欧美国产一区二区在线观看| 欧美色图激情小说| 亚洲国产精品99久久久久久久久 | 亚洲成av人片一区二区三区| 国产成人综合亚洲91猫咪| 精品乱人伦小说| 日本不卡在线视频| 色综合久久综合网欧美综合网| 国产日本欧洲亚洲| 国产一区二区免费看| 欧美电视剧在线观看完整版| 日本欧美肥老太交大片| 7777精品伊人久久久大香线蕉超级流畅| 最新不卡av在线| 99re这里都是精品| 中文字幕一区三区| 国产视频一区不卡| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲一区二区三区爽爽爽爽爽| 色偷偷成人一区二区三区91| 国产精品传媒在线| 91在线视频网址| 亚洲美女淫视频| 欧美三级在线播放| 日韩二区在线观看| 欧美成人激情免费网| 开心九九激情九九欧美日韩精美视频电影| 欧美丰满少妇xxxxx高潮对白| 日韩精品国产欧美| 欧美哺乳videos| 福利一区二区在线| 亚洲综合另类小说| 日韩一级二级三级| 国产精品99久久久久久久vr| 国产精品蜜臀在线观看| 色欧美片视频在线观看| 三级不卡在线观看| 精品成人在线观看| 国产盗摄一区二区| 国产精品水嫩水嫩| 日本三级亚洲精品| 不卡的电影网站| 亚洲综合一区二区精品导航| 欧美美女直播网站| 国产一区二区三区电影在线观看| 亚洲欧洲日韩综合一区二区| 欧美性生活久久| 久久精品国产久精国产爱| 国产精品网站一区| 欧美日韩高清在线| 国产成人啪午夜精品网站男同| 亚洲黄色免费电影| 久久伊人中文字幕| 欧美日韩另类国产亚洲欧美一级| 韩国理伦片一区二区三区在线播放| 国产精品久久久久一区二区三区| 欧美日韩激情一区二区| 高清shemale亚洲人妖| 天天操天天综合网| 欧美激情一区二区在线| 欧洲一区在线电影| 成人动漫视频在线| 67194成人在线观看| 风间由美一区二区av101| 亚洲高清视频在线| 中文字幕一区二区三区av| 91精品国产欧美一区二区18| 99久免费精品视频在线观看| 免播放器亚洲一区| 亚洲国产美女搞黄色| 欧美极品xxx| 欧美一级日韩一级| 色综合久久精品| 成人美女视频在线观看| 久久精品国产**网站演员| 一区二区三区四区亚洲| 国产精品视频看| 久久伊99综合婷婷久久伊| 在线观看91av| 欧美男同性恋视频网站| 色先锋资源久久综合| 不卡av电影在线播放| 国产成人亚洲综合a∨猫咪| 久久99精品一区二区三区三区| 午夜av一区二区三区| 一区二区三区蜜桃网| 亚洲色图.com| 国产精品久久看| 国产精品美女久久久久久| 欧美精品一区二区三区一线天视频| 在线中文字幕一区二区| 91黄色激情网站| 91在线云播放| 一本大道久久a久久综合| 91丨九色丨尤物| 91老师国产黑色丝袜在线| www.亚洲色图.com| 91在线你懂得| 99久久精品免费看国产免费软件| 国产成人在线电影| 成人免费视频免费观看| www.爱久久.com| 97se亚洲国产综合自在线观| 成人妖精视频yjsp地址| 成人美女在线观看| 色综合av在线| 欧美精品久久天天躁| 欧美日本乱大交xxxxx| 91精品国产免费| 欧美本精品男人aⅴ天堂| 精品国产成人系列| 国产女人18毛片水真多成人如厕 | 国产午夜精品福利| 国产精品免费久久| 亚洲综合色噜噜狠狠| 日韩专区欧美专区| 国产在线看一区| 成人一区二区三区视频在线观看| 97成人超碰视| 欧美一区二区视频在线观看2022| 日韩欧美久久久| 久久精品夜色噜噜亚洲aⅴ| 国产精品动漫网站| 日韩制服丝袜先锋影音| 九色porny丨国产精品| 国产成人自拍在线| 欧美影院午夜播放| 日韩精品资源二区在线| 亚洲国产精品激情在线观看| 曰韩精品一区二区| 日产国产欧美视频一区精品| 国产一区 二区| 欧洲av在线精品| www激情久久| 亚洲精品日产精品乱码不卡| 美腿丝袜亚洲一区| av资源网一区| 欧美一区二区三区白人| 亚洲国产成人自拍| 午夜成人免费视频| 大桥未久av一区二区三区中文| 欧美日韩国产综合一区二区 | 国产大陆亚洲精品国产| 色呦呦日韩精品| 欧美变态口味重另类| 一区二区三区在线播| 国产在线精品一区二区不卡了 | 中文字幕欧美激情| 亚洲成av人在线观看| 成人一区二区三区视频| 日韩欧美一二三| 亚洲电影第三页| 成人精品gif动图一区| 欧美一区中文字幕| 一区二区三区在线观看国产| 国产精品123| 日韩女优制服丝袜电影| 亚洲一区二区三区在线看| 成人小视频免费观看| 欧美哺乳videos| 视频一区欧美日韩| 在线免费观看日本欧美| 国产精品久久久久久久第一福利| 久久99热这里只有精品| 欧美乱熟臀69xxxxxx| 亚洲色图20p| 99视频在线精品| 日本一区二区免费在线| 国产一区二区三区黄视频| 日韩免费看网站| 久久精品久久精品| 欧美日韩一区二区三区高清 | 欧美视频第二页| 亚洲靠逼com| eeuss影院一区二区三区| 国产精品看片你懂得| 丁香一区二区三区| 国产精品视频看| eeuss鲁片一区二区三区在线观看| 国产亚洲精品超碰| 丁香啪啪综合成人亚洲小说 | a4yy欧美一区二区三区| 国产亚洲精品aa| 成人综合婷婷国产精品久久免费| 久久综合色综合88| 国产乱码字幕精品高清av| 久久久久久影视|