📄 bul_usbotg.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(®, 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(®, 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 + -