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

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

?? hcd.cpp

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? CPP
字號(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:
//     hcd.cpp
// Abstract:
//     This file contains the Chcd object, which is the main entry
//     point for all HCDI calls by USBD
//
// Notes:
//
#include <globals.hpp>
#include <hcd.hpp>
CHcd::CHcd( )
{
    m_pCRootHub=NULL;
}
CHcd::~CHcd()
{
    Lock();
    CRootHub *pRoot = m_pCRootHub;
    m_pCRootHub = NULL;
    Unlock();
     // signal root hub to close
    if ( pRoot ) {
        pRoot->HandleDetach();
        delete pRoot;
    }
   
}
CRootHub* CHcd::SetRootHub(CRootHub* pRootHub)
{
    Lock();
    CRootHub* pReturn=m_pCRootHub;
    m_pCRootHub=pRootHub;
    Unlock();
    return pReturn;
}

// ******************************************************************
BOOL CHcd::OpenPipe( IN UINT address,
                      IN LPCUSB_ENDPOINT_DESCRIPTOR lpEndpointDescriptor,
                      OUT LPUINT lpPipeIndex )
//
// Purpose: Create a logical communication pipe to the endpoint described
//          by lpEndpointDescriptor for device address.
//
// Parameters:  address - address of device to open pipe for
//
//              lpEndpointDescriptor - describes endpoint to open
//
//              lpPipeIndex - out param, indicating index of opened pipe
//
// Returns: TRUE if pipe opened ok, FALSE otherwise
//
// Notes: This needs to be implemented for HCDI
// ******************************************************************
{
    DEBUGMSG(ZONE_UHCD, (TEXT("+CHcd::OpenPipe for device on addr %d\n"), address));
    BOOL fSuccess = FALSE;

    Lock();
    CRootHub *pRoot = m_pCRootHub;

    if ( pRoot != NULL &&
         lpEndpointDescriptor != NULL &&
         lpEndpointDescriptor->bDescriptorType == USB_ENDPOINT_DESCRIPTOR_TYPE &&
         lpEndpointDescriptor->bLength >= sizeof( USB_ENDPOINT_DESCRIPTOR ) &&
         lpPipeIndex != NULL ) {

        // root hub will send the request to the appropriate device
        fSuccess = ( requestOK == pRoot->OpenPipe( address,
                                                   lpEndpointDescriptor,
                                                   lpPipeIndex ) );
    }
    Unlock();
    DEBUGMSG(ZONE_UHCD, (TEXT("-CHcd::OpenPipe for address %d, returning BOOL %d\n"), address, fSuccess ));
    return fSuccess;
}

// ******************************************************************
BOOL CHcd::ClosePipe( IN UINT address,
                       IN UINT pipeIndex )
//
// Purpose: Close the logical communication pipe to this device's endpoint
//
// Parameters:  address - address of device to close pipe for
//
//              pipeIndex - indicating index of pipe to close
//
// Returns: TRUE if call to m_pCRootHub succeeds, else FALSE
//
// Notes: This needs to be implemented for HCDI
// ******************************************************************
{
    DEBUGMSG( ZONE_UHCD, (TEXT("+CHcd::ClosePipe - address = %d, pipeIndex = %d\n"), address, pipeIndex) );
    BOOL fSuccess = FALSE;

    Lock();
    CRootHub *pRoot = m_pCRootHub;

    if (pRoot != NULL)
        fSuccess = (requestOK == pRoot->ClosePipe( address, pipeIndex ) );

    Unlock();
    DEBUGMSG( ZONE_UHCD, (TEXT("-CHcd::ClosePipe - address = %d, pipeIndex = %d, returning BOOL %d\n"), address, pipeIndex, fSuccess) );
    return fSuccess;
}

// ******************************************************************
BOOL CHcd::IssueTransfer( IN UINT address,
                           IN UINT pipeIndex,
                           IN LPTRANSFER_NOTIFY_ROUTINE lpStartAddress,
                           IN LPVOID lpvNotifyParameter,
                           IN DWORD dwFlags,
                           IN LPCVOID lpvControlHeader,
                           IN DWORD dwStartingFrame,
                           IN DWORD dwFrames,
                           IN LPCDWORD aLengths,
                           IN DWORD dwBufferSize,
                           IN_OUT LPVOID lpvBuffer,
                           IN ULONG paBuffer,
                           IN LPCVOID lpvCancelId,
                           OUT LPDWORD adwIsochErrors,
                           OUT LPDWORD adwIsochLengths,
                           OUT LPBOOL lpfComplete,
                           OUT LPDWORD lpdwBytesTransfered,
                           OUT LPDWORD lpdwError )
// Purpose: Issue a USB transfer
//
// Parameters:  address - address of device
//
//              pipeIndex - index of pipe to issue transfer on (NOT the endpoint address)
//
//              lpStartAddress - ptr to function to callback when transfer completes
//                               (this can be NULL)
//
//              lpvNotifyParameter - parameter to pass to lpStartAddress in callback
//
//              dwFlags - combination of
//                              USB_IN_TRANSFER
//                              USB_OUT_TRANSFER
//                              USB_NO_WAIT
//                              USB_SHORT_TRANSFER_OK
//                              USB_START_ISOCH_ASAP
//                              USB_COMPRESS_ISOCH
//                              USB_SEND_TO_DEVICE
//                              USB_SEND_TO_INTERFACE
//                              USB_SEND_TO_ENDPOINT
//                              USB_DONT_BLOCK_FOR_MEM
//                         defined in usbtypes.h
//
//              lpvControlHeader - for control transfers, a pointer to the
//                                 USB_DEVICE_REQUEST structure
//
//
//              dwStartingFrame - for Isoch transfers, this indicates the
//                                first frame of the transfer. If the
//                                USB_START_ISOCH_ASAP flag is set in
//                                dwFlags, the dwStartingFrame is ignored
//                                and the transfer is scheduled As Soon
//                                As Possible
//
//              dwFrames - indicates over how many frames to conduct this
//                         Isochronous transfer. Also should be the # of
//                         entries in aLengths, adwIsochErrors, adwIsochLengths
//
//
//              aLengths - array of dwFrames long. aLengths[i] is how much
//                         isoch data to transfer in the i'th frame. The
//                         sum of all entries should be dwBufferSize
//
//              dwBufferSize - size of data buffer passed in lpvBuffer
//
//              lpvBuffer - data buffer (may be NULL)
//
//              paBuffer - physical address of data buffer (may be 0)
//
//              lpvCancelId - identifier used to refer to this transfer
//                            in case it needs to be canceled later
//
//              adwIsochErrors - array of dwFrames long. adwIsochErrors[ i ]
//                               is set on transfer complete to be the status
//                               of the i'th frame of the isoch transfer
//
//              adwIsochLengths - array of dwFrames long. adwIsochLengths[ i ]
//                                is set on transfer complete to be the amount
//                                of data transferred in the i'th frame of
//                                the isoch transfer
//
//              lpfComplete - pointer to BOOL indicating TRUE/FALSE on
//                            whether this transfer is complete
//
//              lpdwBytesTransfered - pointer to DWORD indicating total # of
//                                    bytes successfully transferred
//
//              lpdwError - pointer to DWORD set to error status on
//                          transfer complete
//
// Returns: TRUE if transfer scheduled ok, otherwise FALSE
//
// Notes: This needs to be implemented for HCDI
// ******************************************************************
{
   DEBUGMSG( ZONE_UHCD | ZONE_TRANSFER, (TEXT("+CHcd::IssueTransfer - address = %d, pipe = %d, dwFlags = 0x%x, lpvControlHeader = 0x%x, lpvBuffer = 0x%x, dwBufferSize = %d\n"), address, pipeIndex, dwFlags, lpvControlHeader, lpvBuffer, dwBufferSize));
   BOOL fSuccess = FALSE;
   Lock();
   CRootHub *pRoot = m_pCRootHub;

   if (pRoot != NULL) {
       fSuccess = (requestOK == pRoot->IssueTransfer(
                                                address,
                                                pipeIndex,
                                                lpStartAddress,
                                                lpvNotifyParameter,
                                                dwFlags,
                                                lpvControlHeader,
                                                dwStartingFrame,
                                                dwFrames,
                                                aLengths,
                                                dwBufferSize,
                                                lpvBuffer,
                                                paBuffer,
                                                lpvCancelId,
                                                adwIsochErrors,
                                                adwIsochLengths,
                                                lpfComplete,
                                                lpdwBytesTransfered,
                                                lpdwError ) );
   }

   Unlock();
   DEBUGMSG( ZONE_UHCD | ZONE_TRANSFER, (TEXT("-CHcd::IssueTransfer - returing BOOL %d\n"), fSuccess ) );
   return fSuccess;
}


// ******************************************************************
BOOL CHcd::AbortTransfer( IN UINT address,
                           IN UINT pipeIndex,
                           IN LPTRANSFER_NOTIFY_ROUTINE lpCancelAddress,
                           IN LPVOID lpvNotifyParameter,
                           IN LPCVOID lpvCancelId )
//
// Purpose: Abort a previously issued transfer
//
// Parameters:  address - address of device on which transfer was issued
//
//              pipeIndex - index of pipe on which transfer was issued
//
//              lpCancelAddress - function to callback when this transfer has aborted
//
//              lpvNotifyParameter - parameter to callback lpCancelAddress
//
//              lpvCancelId - used to identify the transfer to abort. This was passed
//                            in when IssueTransfer was called
//
// Returns: TRUE if call to m_pCRootHub succeeds, else FALSE
//
// Notes: This needs to be implemented for HCDI
// ******************************************************************
{
    DEBUGMSG( ZONE_UHCD | ZONE_TRANSFER, (TEXT("+CHcd::AbortTransfer - address = %d, pipeIndex = %d, lpvCancelId = 0x%x\n"), address, pipeIndex, lpvCancelId) );
    BOOL fSuccess = FALSE;

    Lock();
    CRootHub *pRoot = m_pCRootHub;

    if (pRoot != NULL)
        fSuccess = (requestOK == pRoot->AbortTransfer( address,
                                                       pipeIndex,
                                                       lpCancelAddress,
                                                       lpvNotifyParameter,
                                                       lpvCancelId ) );

    Unlock();
    DEBUGMSG( ZONE_UHCD | ZONE_TRANSFER, (TEXT("-CHcd::AbortTransfer - address = %d, pipeIndex = %d, returning BOOL %d\n"), address, pipeIndex, fSuccess ) );
    return fSuccess;
}

// ******************************************************************
BOOL CHcd::IsPipeHalted( IN UINT address,
                          IN UINT pipeIndex,
                          OUT LPBOOL lpbHalted )
//
// Purpose: Check whether the pipe indicated by address/pipeIndex is
//          halted (stalled) and return result in *lpbHalted
//
// Parameters:  address - address of device to check pipe for
//
//              pipeIndex - indicating index of pipe to check
//
//              lpbHalted - out param, indicating TRUE if pipe is halted,
//                          else FALSE
//
// Returns: TRUE if correct status placed in *lpbHalted, else FALSE
//
// Notes: This needs to be implemented for HCDI
// ******************************************************************
{
    DEBUGMSG(ZONE_UHCD,(TEXT("+CHcd::IsPipeHalted - address = %d, pipeIndex = %d\n"), address, pipeIndex ));
    BOOL retval = FALSE;

    Lock();
    CRootHub *pRoot = m_pCRootHub;

    if ( pRoot != NULL && lpbHalted != NULL ) {
        retval = ( requestOK == pRoot->IsPipeHalted( address,
                                                     pipeIndex,
                                                     lpbHalted ) );
    }
    Unlock();
    DEBUGMSG(ZONE_UHCD,(TEXT("-CHcd::IsPipeHalted - address = %d, pipeIndex = %d, *lpbHalted = %d, retval = %d\n"), address, pipeIndex, ((lpbHalted) ? *lpbHalted : -1), retval ));
    return retval;
}

// ******************************************************************
BOOL CHcd::ResetPipe( IN UINT address,
                       IN UINT pipeIndex )
//
// Purpose: Reset a stalled pipe on device at address "address"
//
// Parameters:  address - address of device to reset pipe for
//
//              pipeIndex - indicating index of pipe to check
//
//              lpbHalted - out param, indicating TRUE if pipe is halted,
//                          else FALSE
//
// Returns: TRUE if correct status placed in *lpbHalted, else FALSE
//
// Notes: This needs to be implemented for HCDI
// ******************************************************************
{
    DEBUGMSG( ZONE_UHCD, (TEXT("+CHcd::ResetPipe - address = %d, pipeIndex = %d\n"), address, pipeIndex) );
    BOOL fSuccess = FALSE;

    Lock();
    CRootHub *pRoot = m_pCRootHub;

    if (pRoot != NULL)
        fSuccess = (requestOK == pRoot->ResetPipe( address, pipeIndex ) );

    Unlock();
    DEBUGMSG( ZONE_UHCD, (TEXT("-CHcd::ResetPipe - address = %d, pipeIndex = %d, returning BOOL %d\n"), address, pipeIndex, fSuccess) );
    return fSuccess;
}



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
92国产精品观看| 69p69国产精品| 蜜桃av一区二区三区电影| 国产日韩欧美亚洲| 日韩精品专区在线| 精品视频一区三区九区| 色综合色综合色综合色综合色综合| 麻豆精品精品国产自在97香蕉| 亚洲三级在线看| 亚洲精品日韩一| 国产精品女主播在线观看| 欧美videos大乳护士334| 欧美艳星brazzers| 色婷婷av一区二区三区之一色屋| 国产aⅴ精品一区二区三区色成熟| 激情图区综合网| 日韩国产成人精品| 日韩高清中文字幕一区| 日日夜夜精品免费视频| 日韩经典一区二区| 激情欧美日韩一区二区| 亚洲精品日韩一| 国产精品青草综合久久久久99| 精品美女一区二区三区| 日韩片之四级片| 精品日产卡一卡二卡麻豆| 日韩一区二区中文字幕| 欧美成人a∨高清免费观看| 精品国产乱码久久| 久久久噜噜噜久久中文字幕色伊伊| 欧美成人激情免费网| 2021久久国产精品不只是精品| 亚洲精品在线观看视频| 亚洲精品一线二线三线无人区| 久久精品夜色噜噜亚洲a∨| 久久久91精品国产一区二区三区| 国产欧美一区二区精品婷婷| 国产精品久久久久久久第一福利 | 成人免费视频视频在线观看免费 | 精品国产乱码久久久久久图片| 7777精品伊人久久久大香线蕉的| 日韩欧美综合一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 久久久久久电影| 国产精品美女久久久久久2018| 亚洲女同一区二区| 亚洲亚洲人成综合网络| 日韩电影在线观看一区| 狠狠色综合播放一区二区| 久久美女艺术照精彩视频福利播放| 日韩欧美国产午夜精品| 日韩视频在线一区二区| 国产日韩欧美高清| 一区二区三区中文字幕在线观看| 亚洲一区二区三区国产| 国产精品一区在线| 在线精品视频一区二区三四| 久久综合色综合88| 亚洲欧美经典视频| 韩国成人在线视频| 在线观看日韩一区| 久久久综合激的五月天| 国产色一区二区| 久久久精品免费观看| 亚洲欧洲成人av每日更新| 日韩高清不卡一区二区三区| 成a人片国产精品| 欧美tickling挠脚心丨vk| 91免费在线视频观看| 国产精品久久久久三级| 亚洲香肠在线观看| 丁香五精品蜜臀久久久久99网站 | 日韩亚洲欧美中文三级| 国产精品福利影院| 久久99精品国产.久久久久久| 91美女精品福利| 中文字幕av在线一区二区三区| 午夜精品福利久久久| 色综合欧美在线| 国产精品色噜噜| 国产乱码精品一区二区三| 4438x亚洲最大成人网| 亚洲乱码国产乱码精品精可以看 | 欧美v亚洲v综合ⅴ国产v| 亚洲午夜免费视频| 91欧美一区二区| 国产精品久久久久9999吃药| 激情五月婷婷综合| 欧美大度的电影原声| 日韩av电影免费观看高清完整版| 一本大道久久a久久精品综合| 欧美不卡视频一区| 亚洲综合在线五月| av一区二区久久| 一色屋精品亚洲香蕉网站| 国产精品资源网站| 久久婷婷色综合| 国产一区二区福利视频| 欧美精品一区二区精品网| 亚洲国产成人高清精品| 欧美在线不卡视频| 亚洲高清免费在线| 欧美视频自拍偷拍| 婷婷综合久久一区二区三区| 欧美另类久久久品| 首页国产欧美日韩丝袜| 日韩免费视频线观看| 久久精品国产在热久久| 欧美日韩精品三区| 日韩国产高清影视| 日韩欧美第一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美大片一区二区三区| 国产福利一区二区三区| 亚洲私人黄色宅男| 欧美男人的天堂一二区| 麻豆91在线观看| 国产精品久久久久久一区二区三区| 国产成人激情av| 亚洲一区欧美一区| 日韩美女天天操| 成人av在线播放网站| 亚洲风情在线资源站| 精品国产一区二区三区忘忧草| 国产一区二区在线观看免费| 亚洲国产岛国毛片在线| 在线视频你懂得一区| 亚洲色欲色欲www| 亚洲动漫第一页| 欧美福利电影网| 国产乱码一区二区三区| 91免费国产在线观看| 偷拍与自拍一区| 国产亚洲一区二区三区在线观看 | 国产精品一区二区免费不卡| 国产精品九色蝌蚪自拍| 91麻豆精品国产自产在线| 国产成人av电影免费在线观看| 亚洲精品网站在线观看| 2023国产精华国产精品| 欧美影院一区二区| 国产91精品露脸国语对白| 亚洲国产精品视频| 国产精品美女一区二区| 欧美电影免费观看高清完整版在线 | 欧美一区二区三区色| 国产精品一区免费在线观看| 亚洲成精国产精品女| 国产精品卡一卡二| 日韩视频永久免费| 欧美日韩一卡二卡三卡| 成人免费高清在线| 麻豆传媒一区二区三区| 亚洲国产精品一区二区久久恐怖片| 精品国产免费人成在线观看| 91麻豆国产在线观看| 精品在线播放免费| 丝袜亚洲另类丝袜在线| 亚洲欧美aⅴ...| 综合久久久久综合| 国产精品全国免费观看高清 | 久久精品噜噜噜成人av农村| 亚洲成人一区二区| 亚洲女同ⅹxx女同tv| 国产精品无遮挡| 欧美激情综合网| 中文字幕欧美激情| 久久精品人人做| 国产欧美日韩综合| 久久婷婷久久一区二区三区| 日韩一区二区在线观看| 欧美日韩免费观看一区二区三区| 色综合天天综合狠狠| 本田岬高潮一区二区三区| 成人一区二区三区中文字幕| 成人精品视频网站| 久久er99热精品一区二区| 国产制服丝袜一区| 91片在线免费观看| 在线不卡欧美精品一区二区三区| 精品免费国产二区三区| 国产精品入口麻豆原神| 亚洲va欧美va人人爽| 国内精品伊人久久久久av一坑| 成人av在线资源网站| 欧美三级视频在线| 久久婷婷色综合| 亚洲福利电影网| 国产精品一区二区不卡| 欧美三级电影精品| 国产午夜精品在线观看| 一区二区三区日本| 国产精品亚洲第一区在线暖暖韩国 | 国产欧美1区2区3区| 亚洲一二三专区| 成人在线一区二区三区| 4438x成人网最大色成网站| 中文字幕视频一区二区三区久| 久久精品99久久久| 在线亚洲人成电影网站色www|