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

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

?? usbfndrv.cpp

?? 2440 CE500BSP包, EBOOT可用DEBUG版調試
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    else
        ASSERT(FALSE);
    if (pBuffLen)
        *pBuffLen -= dwLeft;
    Unlock();
    DEBUGMSG (ZONE_WRITE,(TEXT("-CUsbFuncPipe::WriteData (0x%x,0x%x)\r\n"), pTxBuffer,pBuffLen?*pBuffLen:0));

}
BOOL  CUsbFuncPipe::CancelTransfer()
{
    Lock();
    if (m_fRead) {
        while (m_pTransferArray[m_dwCompleteIndex] && !m_pTransferArray[m_dwCompleteIndex]->IsTransferClosed() &&
                m_pTransferArray[m_dwCompleteIndex]->IsTransferComplete()) {
            m_pTransferArray[m_dwCompleteIndex]->CloseTransfer();
            m_pTransferArray[m_dwCompleteIndex]->IssueTransfer();
            // Advance to next one.
            m_dwCompleteIndex = IncIndex(m_dwCompleteIndex);
            m_dwCurPosition = 0;
        }
    }
    else {
        while (m_pTransferArray[m_dwCompleteIndex] && !m_pTransferArray[m_dwCompleteIndex]->IsTransferClosed()) {
            if (!m_pTransferArray[m_dwCompleteIndex]->IsTransferComplete())
                m_pTransferArray[m_dwCompleteIndex]->AbortTransfer();
            m_pTransferArray[m_dwCompleteIndex]->CloseTransfer();
            m_dwCompleteIndex = IncIndex(m_dwCompleteIndex);
        }
    }
    SetEvent(m_TerminateEvent);
    Unlock();
    return TRUE;
}

BOOL CUsbFuncPipe::IsAnySpaceAvailable()
{
    BOOL fReturn = FALSE;
    if (!m_fRead) {
        Lock();
        fReturn =(m_pTransferArray[m_dwWriteIndex]!=NULL 
                    && m_pTransferArray[m_dwWriteIndex]->IsTransferComplete());
        Unlock();
    }
    return fReturn;
}

DWORD CUsbFuncPipe::ThreadRun()
{
    while (m_TerminateEvent && ! IsTerminated()) {
        Lock();
        if (m_pTransferArray[m_dwCompleteIndex] && !m_pTransferArray[m_dwCompleteIndex]->IsTransferClosed()) {
            HANDLE rgh[2];
            rgh[0] = m_pTransferArray[m_dwCompleteIndex]->GetCompleteEventHandle();
            rgh[1] = m_TerminateEvent;
            Unlock();
            WaitForMultipleObjects(dim(rgh),rgh,FALSE,INFINITE);
            Lock();
        }
        else {
            Unlock();
            WaitForSingleObject(m_TerminateEvent,INFINITE);
            Lock();
        }
        if (m_pTransferArray[m_dwCompleteIndex] && !IsTerminated()) {
            DWORD dwCurIndex = m_dwCompleteIndex;
            if (!m_pTransferArray[dwCurIndex]->IsTransferClosed() && 
                    m_pTransferArray[dwCurIndex]->IsTransferComplete()) {
                Unlock();
                if (m_pSerialFn)
                    m_pSerialFn->EndpointNotification(this);                    
                Lock();
            }            
        }
        Unlock();
    }
    return (1);
}
//--------------------------USB FN Serial Driver -------------------------------------------
USBSerialFn::USBSerialFn(LPTSTR lpActivePath, PVOID pMdd, PHWOBJ pHwObj )
:   CSerialPDD(lpActivePath, pMdd,  pHwObj  )
,   CUsbFn (lpActivePath)
{
    PREFAST_ASSERT(lpActivePath!=NULL);
    m_pBulkIn = NULL;
    m_pBulkOut = NULL;
    m_pInterruptIn = NULL;
    m_bOldHostModemStatus = m_curHostModemStatus = 0;
    m_bModemSetState[0]=m_bModemSetState[1]=0;
}
USBSerialFn::~USBSerialFn()
{
    if ( m_pBulkIn) {
//        ASSERT(FALSE);
        delete m_pBulkIn;
    }
    if ( m_pBulkOut ) {
//        ASSERT(FALSE);
        delete m_pBulkOut;
    }
    if (m_pInterruptIn ) {
//        ASSERT(FALSE);
        delete m_pInterruptIn;
            
    }
}
BOOL USBSerialFn::Init()
{
    BOOL fReturn = TRUE;
    fReturn = (CUsbFn::Init() && CSerialPDD::Init());
    ASSERT(fReturn);
    return fReturn;
};
BOOL USBSerialFn::EndpointNotification(CUsbFuncPipe * pPipe)
{
    if (pPipe!=NULL) {
        DWORD interruptType =  INTR_NONE;
        m_HardwareLock.Lock();
        if ( pPipe == m_pBulkIn) { // Device to Host.
            interruptType |= INTR_TX;
        }
        else 
        if ( pPipe == m_pBulkOut){ // Host to Device.
            interruptType |= INTR_RX;
        }
        if (pPipe == m_pInterruptIn) {
            if ( m_pInterruptIn->IsAnySpaceAvailable()) {
                if (m_bOldModemState !=m_bModemSetState[0]) {
                    DWORD dwLength = sizeof(m_bModemSetState);
                    m_bModemSetState [0] |= USBFN_SERIAL_DATA_AVAILABLE; // Always set data available.
                    m_pInterruptIn->WriteData(m_bModemSetState,&dwLength);
                    m_bOldModemState =  m_bModemSetState[0];
                }
                else
                    m_pInterruptIn->WriteData(NULL,NULL);
            }
            else
                ASSERT(FALSE);
            
        }
        m_HardwareLock.Unlock(); 
        return NotifyPDDInterrupt((INTERRUPT_TYPE)interruptType);
    }
    return FALSE;
}
/*BOOL USBSerialFn::InitXmit(BOOL bInit) 
{
    m_HardwareLock.Lock();
    BOOL bReturn = FALSE;
    if (m_pBulkIn) {
        if (bInit)
            bReturn = m_pBulkIn->OpenPipe();
        else {
            m_pBulkIn->ClosePipe();
            bReturn = TRUE;
        }
        ASSERT(bReturn);
    }
    m_HardwareLock.Unlock();
    return bReturn;
};
*/
void    USBSerialFn::XmitInterruptHandler(PUCHAR pTxBuffer, ULONG *pBuffLen)
{
    m_HardwareLock.Lock();
    if (m_pBulkIn) {
        if ((m_DCB.fOutxCtsFlow && IsCTSOff()) ||(m_DCB.fOutxDsrFlow && IsDSROff())) { // We are in flow off
            DEBUGMSG(ZONE_THREAD|ZONE_WRITE,(TEXT("USBSerialFn::XmitInterruptHandler! Flow Off, Data Discard.\r\n")));
            if (pBuffLen)
                *pBuffLen= 0;
        }
        else
            m_pBulkIn->WriteData(pTxBuffer,pBuffLen);
    }
    m_HardwareLock.Unlock();
};
void    USBSerialFn::XmitComChar(UCHAR ComChar) 
{
    DWORD dwLength = 1; // We can not do special.
    BOOL fReturn = FALSE;
    while (fReturn) {
        m_HardwareLock.Lock();
        if (m_pBulkIn) {
            if (m_pBulkIn->IsAnySpaceAvailable()) {
                m_pBulkIn->WriteData(&ComChar,&dwLength);
                fReturn = FALSE;
            }
        }
        else 
            fReturn = FALSE;
        m_HardwareLock.Unlock();
        if (!fReturn)
            Sleep(10);
    }    
}
BOOL USBSerialFn::CancelXmit()
{
    m_HardwareLock.Lock();
     if (m_pBulkIn) {
        m_pBulkIn->CancelTransfer();
    }
    m_HardwareLock.Unlock();
    return TRUE;
}

/*BOOL    USBSerialFn::InitReceive(BOOL bInit)
{
    m_HardwareLock.Lock();
    BOOL bReturn = FALSE;
    if (m_pBulkOut) {
        if (bInit)
            bReturn = m_pBulkOut->OpenPipe();
        else {
            m_pBulkOut->ClosePipe();
            bReturn = TRUE;
        }
        ASSERT(bReturn);
    }
    m_HardwareLock.Unlock();
    return bReturn;
}
*/
ULONG   USBSerialFn::ReceiveInterruptHandler(PUCHAR pRxBuffer,ULONG *pBufflen)
{
    DWORD dwReturn = 0;
    m_HardwareLock.Lock();
    if (m_pBulkOut) {
        dwReturn = m_pBulkOut->ReadData(pRxBuffer,pBufflen);
    }
    m_HardwareLock.Unlock();
    return dwReturn;
}
ULONG   USBSerialFn::CancelReceive()
{
    m_HardwareLock.Lock();
     if (m_pBulkIn) {
        m_pBulkIn->CancelTransfer();
    }
    m_HardwareLock.Unlock();
    return TRUE;
}

/*BOOL    USBSerialFn::InitModem(BOOL bInit)
{
    m_HardwareLock.Lock();
    BOOL bReturn = FALSE;
    if (m_pInterruptIn) {
        if (bInit)
            bReturn = m_pInterruptIn->OpenPipe();
        else{
            m_pInterruptIn->ClosePipe();
            bReturn = TRUE;
        }
    }
    m_bOldModemState = m_bModemSetState[0]= m_bModemSetState[1] = USBFN_SERIAL_DATA_AVAILABLE;
    m_HardwareLock.Unlock();
    return bReturn;
}
*/
void USBSerialFn::SetModemSignal(BOOL bSet, BYTE bBitSet)
{
    m_HardwareLock.Lock();
    if (bSet)
        m_bModemSetState[0] |= bBitSet;
    else
        m_bModemSetState[0] &= ~bBitSet;
    
    if (m_pInterruptIn && m_bOldModemState !=m_bModemSetState[0] && m_pInterruptIn->IsAnySpaceAvailable()) {
        DWORD dwLength = sizeof(m_bModemSetState);
        m_bModemSetState [0] |= USBFN_SERIAL_DATA_AVAILABLE;
        m_pInterruptIn->WriteData(m_bModemSetState,&dwLength);
        m_bOldModemState =  m_bModemSetState[0];
    }
    m_HardwareLock.Unlock();

}
ULONG   USBSerialFn::GetModemStatus() 
{ 
    m_HardwareLock.Lock();
    ULONG Events = 0;
    m_bOldHostModemStatus ^= m_curHostModemStatus; 
    if ( m_bOldHostModemStatus & MS_DSR_ON)
        Events |= EV_DSR;
    if ( m_bOldHostModemStatus & MS_RLSD_ON)
        Events |= EV_RLSD;
    if ( m_bOldHostModemStatus & MS_CTS_ON)
        Events |= EV_CTS;
    m_bOldHostModemStatus = m_curHostModemStatus;
    m_HardwareLock.Unlock();
    if (Events)
        EventCallback(Events,m_curHostModemStatus);        
    return m_curHostModemStatus;
};

//
// D A T A / M A C R O S
//
#define MAX_INTERRUPT_ENDPOINT_PACKET_SIZE 8
#define CB_CONFIG_DESCRIPTOR  (sizeof(USB_CONFIGURATION_DESCRIPTOR)+sizeof(USB_INTERFACE_DESCRIPTOR)+3*sizeof(USB_ENDPOINT_DESCRIPTOR))
//  definitions
#define COMMAND_PASSED                      0x00
#define COMMAND_FAILED                      0x01
#define PHASE_ERROR                         0x02

#define EP0_PACKET_SIZE                     USB_FULL_HIGH_SPEED_CONTROL_MAX_PACKET_SIZE
#define HIGH_SPEED_BULK_PACKET_SIZES        USB_HIGH_SPEED_BULK_MAX_PACKET_SIZE
#define FULL_SPEED_BULK_PACKET_SIZES        USB_FULL_SPEED_BULK_MAX_PACKET_SIZE 
#define USB_VERSION                         0x200


static USB_DEVICE_DESCRIPTOR                g_HighSpeedDeviceDesc = {
    sizeof(USB_DEVICE_DESCRIPTOR),          // bLength
    USB_DEVICE_DESCRIPTOR_TYPE,             // bDescriptorType
    USB_VERSION,                            // bcdUSB
    0x00,                                   // bDeviceClass
    0x00,                                   // bDeviceSubClass
    0x00,                                   // bDeviceProtocol
    EP0_PACKET_SIZE,                        // bMaxPacketSize0
    0,                                      // idVendor
    0,                                      // idProduct
    0x0000,                                 // bcdDevice
    0x01,                                   // iManufacturer
    0x02,                                   // iProduct
    0x00,                                   // iSerialNumber
    0x01                                    // bNumConfigurations
};


static USB_DEVICE_DESCRIPTOR                g_FullSpeedDeviceDesc = {
    sizeof(USB_DEVICE_DESCRIPTOR),          // bLength
    USB_DEVICE_DESCRIPTOR_TYPE,             // bDescriptorType
    USB_VERSION,                            // bcdUSB
    0x00,                                   // bDeviceClass
    0x00,                                   // bDeviceSubClass
    0x00,                                   // bDeviceProtocol
    EP0_PACKET_SIZE,                        // bMaxPacketSize0
    0,                                      // idVendor
    0,                                      // idProduct
    0x0000,                                 // bcdDevice
    0x01,                                   // iManufacturer
    0x02,                                   // iProduct
    0x00,                                   // iSerialNumber
    0x01                                    // bNumConfigurations
};

#define BULK_IN_ENDPOINT_ADDRESS  0x81
#define BULK_OUT_ENDPOINT_ADDRESS 0x02

#define INTERRUPT_IN_ENDPOINT_ADDRESS 0x83  // Optional

#define BULK_IN_DESCRIPTOR_INDEX    0
#define BULK_OUT_DESCRIPTOR_INDEX   1
#define INTERRUPT_IN_DESCRIPTOR_INDEX 2

static UFN_ENDPOINT                         g_HighSpeedEndpoints[] = {
    {
        sizeof(UFN_ENDPOINT),
        {
            sizeof(USB_ENDPOINT_DESCRIPTOR),// bLength
            USB_ENDPOINT_DESCRIPTOR_TYPE,   // bDescriptorType
            BULK_IN_ENDPOINT_ADDRESS,       // bEndpointAddress (endpoint 1, in)
            USB_ENDPOINT_TYPE_BULK,         // bmAttributes
            HIGH_SPEED_BULK_PACKET_SIZES,	// wMaxPacketSize
            0x00                            // bInterval (interrupt only)
        },
        NULL
    },
    {
        sizeof(UFN_ENDPOINT),
        {
            sizeof(USB_ENDPOINT_DESCRIPTOR),// bLength
            USB_ENDPOINT_DESCRIPTOR_TYPE,   // bDescriptorType
            BULK_OUT_ENDPOINT_ADDRESS,      // bEndpointAddress (endpoint 2, out)
            USB_ENDPOINT_TYPE_BULK,         // bmAttributes
            HIGH_SPEED_BULK_PACKET_SIZES,	// wMaxPacketSize
            0x00                            // bInterval (interrupt only)
        },
        NULL
    },
    {
        sizeof(UFN_ENDPOINT),
        {
            sizeof(USB_ENDPOINT_DESCRIPTOR),// bLength
            USB_ENDPOINT_DESCRIPTOR_TYPE,   // bDescriptorType
            INTERRUPT_IN_ENDPOINT_ADDRESS,  // bEndpointAddress (endpoint 2, out)
            USB_ENDPOINT_TYPE_INTERRUPT,    // bmAttributes
            MAX_INTERRUPT_ENDPOINT_PACKET_SIZE,   // wMaxPacketSize
            0xc                            // bInterval (interrupt only)
        },
        NULL
    }
};

static UFN_ENDPOINT                         g_FullSpeedEndpoints[] = {
    {
        sizeof(UFN_ENDPOINT),
        {
            sizeof(USB_ENDPOINT_DESCRIPTOR),// bLength
            USB_ENDPOINT_DESCRIPTOR_TYPE,   // bDescriptorType
            BULK_IN_ENDPOINT_ADDRESS,       // bEndpointAddress (endpoint 1, in)
            USB_ENDPOINT_TYPE_BULK,         // bmAttributes
            FULL_SPEED_BULK_PACKET_SIZES,	// wMaxPacketSize
            0x00                            // bInterval (interrupt only)
        },
        NULL
    },
    {
        sizeof(UFN_ENDPOINT),
        {
            sizeof(USB_ENDPOINT_DESCRIPTOR),// bLength
            USB_ENDPOINT_DESCRIPTOR_TYPE,   // bDescriptorType
            BULK_OUT_ENDPOINT_ADDRESS,      // bEndpointAddress (endpoint 2, out)
            USB_ENDPOINT_TYPE_BULK,         // bmAttributes
            FULL_SPEED_BULK_PACKET_SIZES,	// wMaxPacketSize
            0x00                            // bInterval (interrupt only)
        },
        NULL
    },
    {
        sizeof(UFN_ENDPOINT),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡的av| 国产喷白浆一区二区三区| 精品一区中文字幕| 国产精品国产精品国产专区不片| 欧美亚洲日本一区| 不卡高清视频专区| 麻豆精品一区二区三区| 亚洲精品午夜久久久| 精品国产乱码久久久久久久| 欧美视频一区二区在线观看| 成人免费看视频| 久久99精品一区二区三区三区| 亚洲精品伦理在线| 国产视频一区不卡| 日韩一级大片在线观看| 欧美性感一类影片在线播放| 高清av一区二区| 麻豆专区一区二区三区四区五区| 亚洲免费三区一区二区| 国产日韩欧美精品一区| 精品国产乱码久久久久久闺蜜| 欧美性大战久久久久久久| 91丨porny丨蝌蚪视频| 国产黄色91视频| 国产在线一区二区综合免费视频| 亚洲成人动漫一区| 悠悠色在线精品| 中文字幕视频一区| 国产精品美女久久久久久久网站| 久久中文字幕电影| 精品sm捆绑视频| 精品乱人伦小说| 日韩美一区二区三区| 欧美一区二区观看视频| 91麻豆精品国产91久久久久久 | 一区二区欧美视频| 中文字幕一区二区三区不卡在线| 日本一区二区久久| 久久久久久久综合日本| 国产欧美日本一区视频| 欧美激情在线观看视频免费| 国产午夜精品一区二区三区视频 | 成人av网址在线| 国产传媒久久文化传媒| 国产精品一区专区| 国产99久久久精品| 高清beeg欧美| 色综合色综合色综合| 日本久久电影网| 欧美日韩中文字幕一区| 51精品秘密在线观看| 欧美一区二区三区四区久久| 这里只有精品99re| 精品国产成人系列| 久久嫩草精品久久久精品| 久久久久国产精品厨房| 国产精品女同一区二区三区| 中文字幕一区av| 亚洲va国产va欧美va观看| 婷婷中文字幕一区三区| 久久不见久久见免费视频7| 国产剧情在线观看一区二区| av一区二区三区| 欧美在线观看一区| 91精品国产色综合久久不卡电影 | 亚洲乱码一区二区三区在线观看| 一区二区日韩av| 麻豆精品视频在线观看| 成人免费观看视频| 欧美三级在线看| 欧美成人video| 国产精品灌醉下药二区| 亚洲6080在线| 国产夫妻精品视频| 在线看国产一区| 日韩欧美国产小视频| 国产精品网曝门| 亚洲6080在线| 成人在线视频首页| 欧美日韩和欧美的一区二区| 精品88久久久久88久久久| 日韩毛片高清在线播放| 免费看黄色91| 91在线观看免费视频| 欧美一区二区三区日韩| 国产精品日韩精品欧美在线| 午夜不卡av在线| 高清国产午夜精品久久久久久| 欧美性猛交xxxx乱大交退制版| 久久青草欧美一区二区三区| 亚洲午夜久久久久久久久电影院| 美洲天堂一区二卡三卡四卡视频| 99久久国产综合色|国产精品| 欧美一级欧美一级在线播放| 国产精品乱码一区二区三区软件| 爽爽淫人综合网网站| 成人精品免费看| 日韩一区二区三区三四区视频在线观看 | 久久青草国产手机看片福利盒子| 亚洲人成伊人成综合网小说| 国产综合色在线视频区| 欧美日韩一卡二卡| 国产精品美女视频| 国内精品嫩模私拍在线| 欧美视频中文字幕| 亚洲色欲色欲www| 国产精品123区| 欧美大片一区二区三区| 亚洲成a人片在线不卡一二三区| 成人在线视频首页| www国产成人| 日韩 欧美一区二区三区| 色偷偷88欧美精品久久久| 国产日韩欧美制服另类| 九九在线精品视频| 91精品国产色综合久久ai换脸| 亚洲人成亚洲人成在线观看图片 | 日日夜夜免费精品| 欧美在线制服丝袜| 国产精品成人免费| 岛国精品在线播放| 国产三区在线成人av| 黄色精品一二区| 欧美mv和日韩mv的网站| 日本vs亚洲vs韩国一区三区 | 久久www免费人成看片高清| 欧美午夜精品久久久久久超碰| 亚洲视频一区在线| 99久久免费精品| 日韩久久一区二区| 97久久精品人人爽人人爽蜜臀| 亚洲国产精品成人久久综合一区| 狠狠色狠狠色综合日日91app| 69堂成人精品免费视频| 日本免费在线视频不卡一不卡二| 欧美日韩免费不卡视频一区二区三区| 亚洲精品成人少妇| 91九色最新地址| 亚洲综合色自拍一区| 欧美无砖砖区免费| 亚洲h动漫在线| 欧美猛男超大videosgay| 奇米色一区二区三区四区| 欧美一区三区四区| 久久电影国产免费久久电影| 精品国精品国产| 国产精品18久久久久久久网站| 国产欧美日韩在线看| 成人av在线网| 一级精品视频在线观看宜春院| 97成人超碰视| 亚洲蜜臀av乱码久久精品| 欧美影院精品一区| 蜜桃免费网站一区二区三区| 久久嫩草精品久久久精品| 成人深夜在线观看| 亚洲精品国产精华液| 欧美日韩精品一区视频| 免费看精品久久片| 国产亚洲综合色| 99re免费视频精品全部| 无码av免费一区二区三区试看 | 一区二区三区中文免费| 欧美片网站yy| 国产精品一区二区三区乱码| 一区在线中文字幕| 欧美日韩国产免费一区二区| 精品亚洲免费视频| 亚洲视频资源在线| 欧美一区二区视频观看视频| 大陆成人av片| 亚洲国产中文字幕在线视频综合| 欧美成人一区二区三区| 国产白丝精品91爽爽久久| 亚洲男帅同性gay1069| 91精品国产手机| av在线一区二区| 日本vs亚洲vs韩国一区三区| 国产精品久久久久久亚洲伦| 欧美日韩一区二区欧美激情| 国产剧情一区二区| 亚洲 欧美综合在线网络| 国产婷婷一区二区| 欧美老年两性高潮| 高清不卡一区二区在线| 偷窥少妇高潮呻吟av久久免费| 国产免费观看久久| 日韩一区二区在线观看视频播放| 成人晚上爱看视频| 麻豆91在线播放| 一区二区三区视频在线看| 久久综合色婷婷| 欧美久久久久久蜜桃| 92精品国产成人观看免费| 久久精工是国产品牌吗| 亚洲一区二区在线免费观看视频 | 中文字幕一区二区三区精华液| 日韩午夜电影av| 欧美色手机在线观看| 成人免费看视频|