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

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

?? chw.cpp

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
            DEBUGCHK( oldValue );
        }
    }
#endif //JEFFRO
    return fSuccess;
}

// ******************************************************************
BOOL CHW::StopAdjustingFrame( void )
//
// Purpose: Stop modifying the host controller frame length
//
// Parameters: None
//
// Returns: TRUE
//
// Notes:
// ******************************************************************
{
    InterlockedExchange( &m_fStopAdjustingFrameLength, TRUE );
    return TRUE;
}
DWORD CHW::UsbAdjustFrameLengthThreadStub(PVOID context)
{
    return ((CHW *)context)->UsbAdjustFrameLengthThread( );
}

// ******************************************************************
DWORD CHW::UsbAdjustFrameLengthThread( )
//
// Purpose: Worker thread to handle frame length adjustment
//
// Parameters: context - parameter passed in when starting thread,
//                       (currently unused)
//
// Returns: 0 on thread exit.
//
// Notes:
//
//        This function is private
// ******************************************************************
{
    DEBUGMSG(ZONE_REGISTERS && ZONE_VERBOSE, (TEXT("+CHW::Entered UsbAdjustFrameLengthThread\n")));

#ifdef JEFFRO

    DEBUGCHK( m_fFrameLengthIsBeingAdjusted &&
              !m_fStopAdjustingFrameLength &&
              m_hAdjustDoneCallbackEvent != NULL &&
              m_uNewFrameLength >= UHCD_SOFMOD_MINIMUM_LENGTH &&
              m_uNewFrameLength <= UHCD_SOFMOD_MAXIMUM_LENGTH );

    const UCHAR uRequiredSOFMOD = UCHAR( m_uNewFrameLength - UHCD_SOFMOD_MINIMUM_LENGTH );

    // if the interrupt thread is closing, or we're signaled
    // to stop adjusting the frame length, stop!
    while ( !m_fStopAdjustingFrameLength &&
            !m_fUsbInterruptThreadClosing ) {

        UCHAR uCurrentSOFMOD = Read_SOFMOD() & UHCD_SOFMOD_MASK;
        DEBUGMSG(ZONE_REGISTERS, (TEXT("CHW::UsbAdjustFrameLengthThread, current length = %d, required = %d\n"), UHCD_SOFMOD_MINIMUM_LENGTH + uCurrentSOFMOD, UHCD_SOFMOD_MINIMUM_LENGTH + uRequiredSOFMOD ));
        if ( uCurrentSOFMOD == uRequiredSOFMOD ) {
            // ok, we're done
            __try {
                SetEvent( m_hAdjustDoneCallbackEvent );
            } __except(EXCEPTION_EXECUTE_HANDLER) {
            }
            break;
        } else if ( uCurrentSOFMOD > uRequiredSOFMOD ) {
            uCurrentSOFMOD--;
        } else {
            DEBUGCHK( uCurrentSOFMOD < uRequiredSOFMOD );
            uCurrentSOFMOD++;
        }
        // USB spec 1.1, section 7.1.12 says we can't adjust
        // the frame length by more than 1 bit every 6 frames.
        // Assuming a maximum frame length of 12063 bits, plus
        // 15 bits error, that totals 6.039ms. So, just to
        // be safe, we'll sleep 7 ms before adjusting the length.
        Sleep( 7 );

        Write_SOFMOD( uCurrentSOFMOD );
    }
    // set m_fFrameLengthIsBeingAdjusted to FALSE
    InterlockedExchange( &m_fFrameLengthIsBeingAdjusted, FALSE );

    DEBUGMSG(ZONE_REGISTERS, (TEXT("-CHW::UsbAdjustFrameLengthThread\n")));
#endif //JEFFRO

    return (0);
}

// ******************************************************************
BOOL CHW::DidPortStatusChange( IN const UCHAR port )
//
// Purpose: Determine whether the status of root hub port # "port" changed
//
// Parameters: port - 0 for the hub itself, otherwise the hub port number
//
// Returns: TRUE if status changed, else FALSE
//
// Notes:
// ******************************************************************
{
    USB_HUB_AND_PORT_STATUS s;
    CHW::GetPortStatus(port, s);
    return s.change.word ? TRUE : FALSE;
}

// ******************************************************************
BOOL CHW::GetPortStatus( IN const UCHAR port,
                         OUT USB_HUB_AND_PORT_STATUS& rStatus )
//
// Purpose: This function will return the current root hub port
//          status in a non-hardware specific format
//
// Parameters: port - 0 for the hub itself, otherwise the hub port number
//
//             rStatus - reference to USB_HUB_AND_PORT_STATUS to get the
//                       status
//
// Returns: TRUE
//
// Notes:
// ******************************************************************
{
    memset( &rStatus, 0, sizeof( USB_HUB_AND_PORT_STATUS ) );
    if ( port > 0 ) {
        // request refers to a root hub port
        DEBUGCHK ( port <= m_portBase->HcRhDescriptorA.NDP );

        // read the port status register (compiler complains when we do it the easy way)
        union HcRegisters::HcRhPortStatus sr;
        sr.reg = m_portBase->HcRhPortStatus[port-1].reg;

        // Now fill in the USB_HUB_AND_PORT_STATUS structure
        rStatus.change.port.ConnectStatusChange = sr.CSC;
        rStatus.change.port.PortEnableChange = sr.PESC;
        rStatus.change.port.OverCurrentChange = sr.OCIC;
        rStatus.change.port.SuspendChange = sr.PSSC;
        rStatus.change.port.ResetChange = sr.PRSC;
        rStatus.status.port.DeviceIsLowSpeed = sr.LSDA;
        rStatus.status.port.PortConnected = sr.CCS;
        rStatus.status.port.PortEnabled = sr.PES;
        rStatus.status.port.PortOverCurrent = sr.POCI;
        // we assume root hub ports are always powered, but believe the HW.
        rStatus.status.port.PortPower = sr.PPS;
        rStatus.status.port.PortReset = sr.PRS;
        rStatus.status.port.PortSuspended = sr.PSS;
    }
#ifdef DEBUG // these are available in OHCI but this driver doesn't use them
    else {
        // request is to Hub. rStatus was already memset to 0 above.
        DEBUGCHK( port == 0 );
        // local power supply good
        DEBUGCHK( rStatus.status.hub.LocalPowerStatus == 0 );
        // no over current condition
        DEBUGCHK( rStatus.status.hub.OverCurrentIndicator == 0 );
        // no change in power supply status
        DEBUGCHK( rStatus.change.hub.LocalPowerChange == 0 );
        // no change in over current status
        DEBUGCHK( rStatus.change.hub.OverCurrentIndicatorChange == 0 );
    }
#endif // DEBUG

    return TRUE;
}

// ******************************************************************
void CHW::GetRootHubDescriptor( OUT USB_HUB_DESCRIPTOR &descriptor )
//
// Purpose: Calculate and return a hub descriptor for the root hub so
//          that the upper-level code can pretend it's an external hub.
//
// Parameters: a reference to a descriptor to fill in.
//
// Returns: nothing
//
// Notes: assumes the hardware is sufficiently initialized.
// ******************************************************************
{
    DEBUGCHK ( m_portBase != 0 );
    
    descriptor.bNumberOfPorts = m_portBase->HcRhDescriptorA.NDP;
    DEBUGCHK( descriptor.bNumberOfPorts >= 1 && descriptor.bNumberOfPorts <= 15 );

    // root hub is not part of a compound device (per OHCI 7.4.1)
    DEBUGCHK( m_portBase->HcRhDescriptorA.DT == 0 );
    descriptor.wHubCharacteristics =
        (m_portBase->HcRhDescriptorA.NPS
         ? USB_HUB_CHARACTERISTIC_NO_POWER_SWITCHING
         : m_portBase->HcRhDescriptorA.PSM
         ? USB_HUB_CHARACTERISTIC_INDIVIDUAL_POWER_SWITCHING
         : USB_HUB_CHARACTERISTIC_GANGED_POWER_SWITCHING) |
        USB_HUB_CHARACTERISTIC_NOT_PART_OF_COMPOUND_DEVICE |
        (m_portBase->HcRhDescriptorA.NOCP
         ? USB_HUB_CHARACTERISTIC_NO_OVER_CURRENT_PROTECTION
         : m_portBase->HcRhDescriptorA.OCPM
         ? USB_HUB_CHARACTERISTIC_INDIVIDUAL_OVER_CURRENT_PROTECTION
         : USB_HUB_CHARACTERISTIC_GLOBAL_OVER_CURRENT_PROTECTION);
    
    descriptor.bPowerOnToPowerGood = m_portBase->HcRhDescriptorA.POTPGT;
    descriptor.bHubControlCurrent = 0;

    int bmsize = 1 + descriptor.bNumberOfPorts / 8; // bytes to represent nports+1 bits
    for (int i=0; i<bmsize; ++i) {
        descriptor.bRemoveAndPowerMask[i] = (UCHAR) (m_portBase->HcRhDescriptorB.DR >> i) & 0xFF;
        descriptor.bRemoveAndPowerMask[i+bmsize] = 0xFF; // must be 0xFF, USB spec 1.1, table 11-8
    }

    // min size assumes seven or fewer ports so we must account for more.
    descriptor.bDescriptorLength = USB_HUB_DESCRIPTOR_MINIMUM_SIZE + (bmsize-1)*2;
    descriptor.bDescriptorType = USB_HUB_DESCRIPTOR_TYPE;
}

// ******************************************************************
BOOL CHW::RootHubFeature( IN const UCHAR port,
                          IN const UCHAR setOrClearFeature,
                          IN const USHORT feature )
//
// Purpose: This function clears all the status change bits associated with
//          the specified root hub port.
//
// Parameters: port - 0 for the hub itself, otherwise the hub port number
//
// Returns: TRUE iff the requested operation is valid, FALSE otherwise.
//
// Notes: Assume that caller has already verified the parameters from a USB
//        perspective. The HC hardware may only support a subset of that
//        (which is indeed the case for UHCI).
// ******************************************************************
{
    if (port == 0) {
        // request is to Hub
        return FALSE;
    }
    DEBUGCHK( port >= 1 && port <= m_portBase->HcRhDescriptorA.NDP );

    DWORD dwPortStatus = 0;
    if (setOrClearFeature == USB_REQUEST_SET_FEATURE)
        switch (feature) {
          case USB_HUB_FEATURE_PORT_RESET:              dwPortStatus = HcRegisters::HcRhPortStatus::SPR; break;
          case USB_HUB_FEATURE_PORT_SUSPEND:            dwPortStatus = HcRegisters::HcRhPortStatus::SPS; break;
          case USB_HUB_FEATURE_PORT_POWER:              dwPortStatus = HcRegisters::HcRhPortStatus::SPP; break;
          case USB_HUB_FEATURE_PORT_ENABLE:             dwPortStatus = HcRegisters::HcRhPortStatus::SPE; break;
          default: return FALSE;
        }
    else
        switch (feature) {
          case USB_HUB_FEATURE_PORT_ENABLE:             dwPortStatus = HcRegisters::HcRhPortStatus::CPE; break;
          case USB_HUB_FEATURE_PORT_SUSPEND:            dwPortStatus = HcRegisters::HcRhPortStatus::CPS; break;
          case USB_HUB_FEATURE_C_PORT_CONNECTION:       dwPortStatus = HcRegisters::HcRhPortStatus::CCSC; break;
          case USB_HUB_FEATURE_C_PORT_ENABLE:           dwPortStatus = HcRegisters::HcRhPortStatus::CPESC; break;
          case USB_HUB_FEATURE_C_PORT_RESET:            dwPortStatus = HcRegisters::HcRhPortStatus::CPRSC; break;
          case USB_HUB_FEATURE_C_PORT_SUSPEND:          dwPortStatus = HcRegisters::HcRhPortStatus::CPSSC; break;
          case USB_HUB_FEATURE_C_PORT_OVER_CURRENT:     dwPortStatus = HcRegisters::HcRhPortStatus::COCIC; break;
          case USB_HUB_FEATURE_PORT_POWER:              dwPortStatus = HcRegisters::HcRhPortStatus::CPP; break;
          default: return FALSE;
        }

    m_portBase->HcRhPortStatus[port-1].reg = dwPortStatus;

    return TRUE;
}

// ******************************************************************
BOOL CHW::ResetAndEnablePort( IN const UCHAR port )
//
// Purpose: reset/enable device on the given port so that when this
//          function completes, the device is listening on address 0
//
// Parameters: port - root hub port # to reset/enable
//
// Returns: TRUE if port reset and enabled, else FALSE
//
// Notes: This function takes approx 60 ms to complete, and assumes
//        that the caller is handling any critical section issues
//        so that two different ports (i.e. root hub or otherwise)
//        are not reset at the same time.
// ******************************************************************
{
    BOOL fSuccess = TRUE;

    DEBUGCHK( port >= 1 && port <= m_portBase->HcRhDescriptorA.NDP );

    // turn on reset bit
    RootHubFeature(port, USB_REQUEST_SET_FEATURE, USB_HUB_FEATURE_PORT_RESET);
    
    // USB 1.1 spec section 7.1.7.3 recommends 50ms for root hub ports
    // but OHCI hardware clears reset after only 10ms.
    Sleep( 10 );
    while (m_portBase->HcRhPortStatus[port-1].PRS) Sleep( 1 );

    // Verify that the port has finished resetting and enabling itself
    DEBUGCHK ( m_portBase->HcRhPortStatus[port-1].PRS == 0 );
    DEBUGCHK ( m_portBase->HcRhPortStatus[port-1].PRSC == 1 );
    RootHubFeature(port, USB_REQUEST_CLEAR_FEATURE, USB_HUB_FEATURE_C_PORT_RESET);
    DEBUGCHK ( m_portBase->HcRhPortStatus[port-1].PRSC == 0 );
    RootHubFeature(port, USB_REQUEST_SET_FEATURE, USB_HUB_FEATURE_PORT_ENABLE);
    DEBUGCHK ( m_portBase->HcRhPortStatus[port-1].PES == 1 );

    // USB 1.1 spec, 7.1.7.3 - device may take up to 10 ms
    // to recover after reset is removed
    Sleep( 10 );

    DEBUGMSG( ZONE_REGISTERS, (TEXT("Root hub, after reset & enable, port %d \n"), port) );
    return fSuccess;
}

// ******************************************************************
void CHW::DisablePort( IN const UCHAR port )
//
// Purpose: disable the given root hub port
//
// Parameters: port - port # to disable
//
// Returns: nothing
//
// Notes: This function will take about 10ms to complete
// ******************************************************************
{
    RootHubFeature(port, USB_REQUEST_CLEAR_FEATURE, USB_HUB_FEATURE_PORT_ENABLE);
}

#ifdef DEBUG
// ******************************************************************
void CHW::DumpAllRegisters( void )
//
// Purpose: Queries Host Controller for all registers, and prints
//          them to DEBUG output. Register definitions are in UHCI spec 2.1
//
// Parameters: None
//
// Returns: Nothing
//
// Notes: used in DEBUG mode only
//
//        This function is static
// ******************************************************************
{
    DEBUGMSG(ZONE_REGISTERS, (TEXT("CHW - DUMP REGISTERS BEGIN\n")));
    for ( USHORT port = 1; port <= UHCD_NUM_ROOT_HUB_PORTS; port++ ) {
        ;
    }
    DEBUGMSG(ZONE_REGISTERS, (TEXT("CHW - DUMP REGISTERS DONE\n")));
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青草av.久久免费一区| 成人黄色a**站在线观看| 色综合亚洲欧洲| 精品国产免费人成电影在线观看四季| 日韩毛片一二三区| 成人性色生活片| 亚洲国产精品久久不卡毛片| 久久午夜老司机| 色综合婷婷久久| 国产资源在线一区| 欧美人体做爰大胆视频| 欧美一卡二卡三卡| 美女视频黄 久久| 欧美丰满一区二区免费视频| 日韩精品电影一区亚洲| 91.xcao| 久久福利资源站| 国产欧美一区二区三区沐欲| 国产专区欧美精品| 国产精品久久久久国产精品日日| 国产一区二区毛片| 国产精品理论在线观看| 色www精品视频在线观看| 午夜视频在线观看一区| 精品理论电影在线| 99re热视频精品| 日本视频免费一区| 国产精品素人视频| 欧美性一二三区| 日韩国产成人精品| 国产日韩欧美精品综合| 在线一区二区三区| 麻豆高清免费国产一区| 久久久久久久久一| 欧美性欧美巨大黑白大战| 国内精品嫩模私拍在线| 尤物视频一区二区| 久久精品网站免费观看| 欧洲精品视频在线观看| 国产精品一线二线三线精华| 亚洲精品国产a久久久久久| 久久尤物电影视频在线观看| 欧美日韩一区二区三区免费看| 国产一区二区三区四区五区美女| 一区二区三区欧美| 亚洲三级在线免费| 国产精品国产三级国产| 精品日韩99亚洲| 日韩三级视频中文字幕| 欧美日韩国产美女| 91福利精品第一导航| 大陆成人av片| 成人高清视频免费观看| 国产福利一区二区三区| 国产精品一二一区| 国产成人精品综合在线观看 | 国产高清不卡一区| 久久精品国产精品亚洲精品| 天天操天天干天天综合网| 亚洲国产精品综合小说图片区| 亚洲免费在线播放| 亚洲另类中文字| 日韩综合在线视频| 久久国产精品露脸对白| 国产综合色视频| av资源网一区| 国产成人在线视频免费播放| 99久久精品99国产精品| 欧美性视频一区二区三区| 欧美精品久久一区二区三区| 欧美一卡二卡在线观看| 久久久久国产成人精品亚洲午夜| 亚洲欧美在线另类| 日韩和欧美一区二区三区| 久久99深爱久久99精品| 成人免费视频caoporn| 色综合视频一区二区三区高清| 国产一本一道久久香蕉| 国产成人自拍高清视频在线免费播放 | 国产美女一区二区| 色吧成人激情小说| 欧美激情一区不卡| 亚洲一区二区视频| jlzzjlzz国产精品久久| 91精品国产一区二区人妖| 综合久久综合久久| 国产精品911| 久久久久国产精品人| 一区二区三区国产精华| 国产福利一区在线| 欧美电影免费观看高清完整版在线 | 国产女人18毛片水真多成人如厕| 一区二区激情小说| av成人免费在线| 国产精品视频免费看| 国产精品一区在线| 亚洲免费色视频| 国产一区二区精品久久99| 91精品国产入口在线| 一个色妞综合视频在线观看| 94色蜜桃网一区二区三区| 欧美激情一区在线| 国产精华液一区二区三区| 4438x亚洲最大成人网| 一区二区免费在线| 91在线云播放| 亚洲欧美电影院| 91黄色小视频| 偷拍亚洲欧洲综合| 日韩午夜在线影院| 精品影视av免费| 国产日产精品1区| 91蝌蚪porny| 日韩成人一区二区三区在线观看| 欧美精品tushy高清| 麻豆精品在线视频| 中文字幕欧美激情| 欧美日本韩国一区二区三区视频| 日韩av电影免费观看高清完整版 | 91精选在线观看| 日韩高清中文字幕一区| 精品国产乱码久久久久久蜜臀| 久久99热狠狠色一区二区| 国产欧美1区2区3区| 在线观看日韩毛片| 国产精品一级在线| 亚洲成人av电影| 中文字幕二三区不卡| 欧美日韩国产一二三| 成人中文字幕在线| 三级久久三级久久| 最近日韩中文字幕| 精品粉嫩aⅴ一区二区三区四区| 91在线porny国产在线看| 亚洲国产欧美在线| 国产亚洲福利社区一区| 777奇米成人网| 99久久综合精品| 久久国产精品99久久人人澡| 一区视频在线播放| 日本一区二区在线不卡| 日韩欧美色电影| 欧美一级淫片007| 欧美日韩一区二区三区在线看| 91在线播放网址| 99re热这里只有精品视频| 国产高清久久久久| 国产成人综合视频| 成人免费视频国产在线观看| 国产伦精品一区二区三区在线观看| 日韩va亚洲va欧美va久久| 亚洲成国产人片在线观看| 亚洲国产视频在线| 亚洲国产一区二区三区青草影视| 一区二区久久久久久| 一区二区三区在线观看视频| 一区二区三区精品在线| 一区二区在线电影| 亚洲国产视频一区二区| 美女网站一区二区| 国产一二精品视频| 99久久久精品| 欧美日韩一区三区四区| 欧美一级理论片| 欧美高清一级片在线观看| 一二三四区精品视频| 美国一区二区三区在线播放| 国内精品嫩模私拍在线| 91亚洲永久精品| 欧美一区二区在线播放| 久久久一区二区三区捆绑**| 亚洲免费观看高清完整版在线观看| 亚洲h精品动漫在线观看| 国产成人精品亚洲777人妖| 91久久精品一区二区二区| 91精品福利在线一区二区三区| 久久一区二区视频| 亚洲激情图片qvod| 国产精品亚洲а∨天堂免在线| 91久久香蕉国产日韩欧美9色| 欧美一卡2卡3卡4卡| 一区二区在线观看不卡| 久久成人免费电影| 欧美视频精品在线| 欧美国产1区2区| 激情综合网激情| 欧美一区二区三区免费| 亚洲乱码国产乱码精品精小说 | 9i看片成人免费高清| 91精品国产一区二区人妖| 亚洲欧美激情在线| 成人国产精品免费网站| xnxx国产精品| 免费视频最近日韩| 欧美丰满美乳xxx高潮www| 中文字幕中文字幕一区二区 | 狠狠网亚洲精品| 日韩视频免费直播| 蜜桃一区二区三区在线观看| 在线播放日韩导航|