⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bul_usbotg.h

📁 Windows CE 6.0 BSP for VOIPAC Board (PXA270) Version 2b.
💻 H
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
/*++

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: 

        bul_usbotg.h

Abstract:

        Bulverde USB OTG Driver Header.

--*/

#pragma once

#include <xllp_i2c.h>
#include <xllp_gpio.h>
#include <xllp_clkmgr.h>
#include <xllp_ost.h>

#include <usbotg.hpp>
#include <usbotgxr.hpp>
#include <ist.hpp>
#include <bulverde_usbd.h>
#include <mainstoneii.h>
//#include <xllp_bcr.h>

#define OTG_I2C_ADDR 0x2d

class CBulverdeI2COTG {
private:
    volatile P_XLLP_I2C_T    v_pI2C;
    volatile P_XLLP_GPIO_T   v_pGPIORegs;
    volatile P_XLLP_CLKMGR_T v_pClkRegs;
    volatile P_XLLP_OST_T    v_pOSTRegs;
//    volatile PMAINSTONEII_BLR_REGS m_pBCRReg;
public:
    CBulverdeI2COTG ();
    ~CBulverdeI2COTG();
    BOOL    Init();
    VOID    ReInit();
    BOOL    I2CWrite( const XLLP_UINT8_T * bytesBuf, int bytesCount){
        return (XllpI2CWrite((P_XLLP_I2C_T)(v_pI2C), (P_XLLP_OST_T)(v_pOSTRegs), OTG_I2C_ADDR, bytesBuf, bytesCount, XLLP_TRUE)==XLLP_FALSE);
    }


    BOOL I2CRead(XLLP_UINT8_T * bytesBuf, int bufLen){
        return (XllpI2CRead((P_XLLP_I2C_T)(v_pI2C), (P_XLLP_OST_T)(v_pOSTRegs), OTG_I2C_ADDR, bytesBuf, bufLen, XLLP_TRUE)==XLLP_FALSE);
    }
        
};
class CBulverdeOTG :public USBOTG, public CIST {
public:
    CBulverdeOTG (LPCTSTR lpActivePath) ;
    ~CBulverdeOTG () ;
    BOOL Init() ;
    BOOL PostInit() ;
    BOOL MapHardware() ;
    BOOL ConfigurePinout();

    // Overwrite 
    virtual BOOL IOControl(DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut);
    virtual BOOL PowerUp() ;
    virtual BOOL PowerDown();
    
    // OTG PDD Function.
    BOOL    SessionRequest(BOOL fPulseLocConn, BOOL fPulseChrgVBus);
    BOOL    DischargVBus()  { return TRUE; };
    BOOL    NewStateAction(USBOTG_STATES usbOtgState , USBOTG_OUTPUT usbOtgOutput) ;
    BOOL    IsSE0();
    BOOL    UpdateInput() ;
    BOOL    StateChangeNotification (USBOTG_TRANSCEIVER_STATUS_CHANGE , USBOTG_TRANSCEIVER_STATUS);
    USBOTG_MODE UsbOtgConfigure(USBOTG_MODE usbOtgMode ) { return usbOtgMode; };

    BOOL ReadISP1301W(UCHAR reg, USHORT *pData) {
        m_SyncAccess.Lock();
        BOOL fRet = m_BulverdeI2COtg.I2CWrite(&reg, sizeof(reg));
        if (fRet)
            fRet = m_BulverdeI2COtg.I2CRead((PBYTE) pData, sizeof(*pData));
        m_SyncAccess.Unlock();
        return fRet;
    }
    BOOL ReadISP1301(UCHAR reg, BYTE *pData) {
        m_SyncAccess.Lock();
        BOOL fRet = m_BulverdeI2COtg.I2CWrite(&reg, sizeof(reg));
        if (fRet)
            fRet= m_BulverdeI2COtg.I2CRead( pData, sizeof(*pData));
        m_SyncAccess.Unlock();
        return fRet;
    }
    BOOL WriteISP1301(UCHAR reg, BYTE Data) {
        m_SyncAccess.Lock();
        UCHAR buffer[2];
        buffer[0] = reg;
        buffer[1] = Data;
        BOOL fRet = m_BulverdeI2COtg.I2CWrite( buffer, sizeof(buffer));
        m_SyncAccess.Unlock();
        return fRet;
    }
    
protected:
    HANDLE  m_hParent;
    HANDLE  m_hOTGFeatureEvent;
    USBOTGTransceiverISP1301 *m_pP1301Tranceiver; 
    LPTSTR  m_ActiveKeyPath;
    volatile PBULVERDE_USBD_REG m_pUSBDReg;
    PVOID       m_pUSBDStaticAddr; // Used by Installable ISR
    CBulverdeI2COTG m_BulverdeI2COtg;
    P_XLLP_GPIO_T v_pGPIORegs ;
    USBOTG_TRANSCEIVER_CTL SetupTransCtr(USBOTG_OUTPUT usbOtgOutput);
private:
    virtual BOOL    ISTProcess() ;
    virtual BOOL    ISTTimeout() ;
};

class BulverExternTranscever: public USBOTGTransceiverISP1301 {
public:
    BulverExternTranscever(LPCTSTR lpActivePath, CBulverdeOTG * pBulOtg)
    :   USBOTGTransceiverISP1301(lpActivePath)
    ,   m_pBulOtg(pBulOtg)
    {
    }
    BOOL Init() { return m_pBulOtg!=NULL && USBOTGTransceiverISP1301::Init(); };
    virtual BOOL StateChangeNotification ( USBOTG_TRANSCEIVER_STATUS_CHANGE usbStatusChange, USBOTG_TRANSCEIVER_STATUS usbTransceiverStatus ) {
        PREFAST_ASSERT(m_pBulOtg);
        return m_pBulOtg->StateChangeNotification(usbStatusChange, usbTransceiverStatus);
    }
private:
    virtual BOOL ReadISP1301W(UCHAR reg, USHORT *pData) {
        PREFAST_ASSERT(m_pBulOtg!=NULL);
        return m_pBulOtg->ReadISP1301W(reg,pData);
    }
    virtual BOOL ReadISP1301(UCHAR reg, BYTE *pData) {
        PREFAST_ASSERT(m_pBulOtg!=NULL);
        return m_pBulOtg->ReadISP1301(reg,pData);
    }
    virtual BOOL WriteISP1301(UCHAR reg, BYTE Data)  {
        PREFAST_ASSERT(m_pBulOtg!=NULL);
        return m_pBulOtg->WriteISP1301(reg, Data);
    };
    CBulverdeOTG * m_pBulOtg;

};



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -