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

📄 ceeprom.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
字号:
/*----------------------------------------------------------------------------*  CEeprom.c : Implementation of EEPROM interface*  REALmagic Quasar Hardware Library*  Created by Aurelia Popa-Radu*  Copyright Sigma Designs Inc*  Sigma Designs Proprietary and confidential*  Created on 8/27/99*  Description:----------------------------------------------------------------------------*/#include "pch.h"#include "ci2c.h"#include "ceeprom.h"IEepromVtbl g_CEepromVtbl =	{								CEeprom__Delete,								CEeprom__Init,								CEeprom__InitPropertySet,								CEeprom__SetProperty,								CEeprom__GetProperty,								CEeprom__Write,								CEeprom__Read,								CEeprom__CheckPresence,								CEeprom__GetPresence,								CEeprom__Program							};///////////////////////////////////////////////////////////////////////////// CreateInstancevoid CEeprom__CreateInstance(void **pv, DWORD dwInstance){    CEeprom__New((CEeprom**)pv, TEXT("Eeprom"), TRUE, dwInstance);}// constructionvoid CEeprom__New ( CEeprom** ppCEeprom, TCHAR *pName, BOOL bAllocate, DWORD dwInstance){	CEeprom* this = *ppCEeprom;	if (bAllocate)	{		// Allocate CEeprom		*ppCEeprom = OSmalloc(sizeof(CEeprom));		this = (CEeprom*) *ppCEeprom;		if(this == NULL)			return;		OSmemset(this, 0, sizeof(CEeprom));	}	// Call CObject constructor with bAllocate = FALSE	CObject__New ((CObject**)ppCEeprom, pName, FALSE, dwInstance);	// Call CI2C constructor	CI2C__New ( (CI2C**)(&this->m_pII2C), pName, TRUE, dwInstance );	if(this->m_pII2C == NULL)	{		if (bAllocate)			OSfree(*ppCEeprom);		*ppCEeprom = NULL;	}	// Initialize members	this->lpVtbl = &g_CEepromVtbl ;}// destructionvoid CEeprom__Delete ( IEeprom* pIEeprom, BOOL bDeleteObject ){	CEeprom* this = (CEeprom*) pIEeprom ;	if (this == NULL)		return;    // Release what we were using	// Call CI2C Destructor	II2C_Delete ( this->m_pII2C, bDeleteObject );	// Call CObject Destructor	CObject__Delete ((IObject*)this, FALSE);	if (bDeleteObject)	{		// Delete CEeprom		OSfree(pIEeprom);	}}void CEeprom__Init ( IEeprom* pIEeprom ){	CEeprom* this = (CEeprom*) pIEeprom ;	II2C_SetI2CAddress( this->m_pII2C, EEPROM_WRITE_ADDR,  EEPROM_READ_ADDR, 1);	// WriteAddr=0xA0, ReadAddr=0xA1, it needs delay	II2C_Init( this->m_pII2C );	// XXX vincent: initialize this to TRUE, because we will not call 	// CheckPresense for em85xx, we just assume the eeprom is always there			this->m_bEEPROMPresent = TRUE;}void CEeprom__InitPropertySet(IEeprom* pIEeprom, void* pPropSet, DWORD dwSize){	CEeprom* this = (CEeprom*) pIEeprom;	if(dwSize != sizeof(PROPERTY_SET_ITEM))		return;	InitPropSet(pIEeprom, pPropSet, EEPROM_SET, eEepromMax,\		this->EepromPropertyList, CEeprom__SetProperty, CEeprom__GetProperty)}/****f* HwLib/IEeprom_SetProperty * USAGE *	QRESULT IEeprom_SetProperty(IEeprom* pIEeprom, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) *	QRESULT CEeprom__SetProperty(IEeprom* pIEeprom, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * PARAMETERS *	IN IEeprom* pIEeprom - pointer to the Eeprom object/********************************************************************************************/QRESULT CEeprom__SetProperty( IEeprom* pIEeprom,	DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){	CEeprom* this = (CEeprom*) pIEeprom;	DWORD Value = *(DWORD*)pData;	QDbgLog((QLOG_TRACE, QDebugLevelTrace,		TEXT("   --> CEeprom__SetProperty: set=%x id=%x flags=%x sz=%x value=%x"),		PropSet, PropId, Flags, dwSizeIn, Value));	switch(PropId)	{	case eEepromAccess:		CHECK_SIZE(genericReg)		IEeprom_Write(pIEeprom,	((genericReg_type*)pData)->Addr,			(BYTE*)&((genericReg_type*)pData)->Data);		break;	case eEepromI2cInit:		{		I2cDeviceInit_type* pDevI2c = (I2cDeviceInit_type*)pData;		CHECK_SIZE(I2cDeviceInit)		II2C_SetI2CAddress( this->m_pII2C, (BYTE)pDevI2c->I2c_WriteAddress,			(BYTE)pDevI2c->I2c_ReadAddress, (BYTE)pDevI2c->I2c_usDelay );		}		break;	default:		return E_NOT_SUPPORTED;	}	return Q_OK;}/****f* HwLib/IEeprom_GetProperty  * USAGE *	QRESULT IEeprom_GetProperty(IEeprom* pIEeprom, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) *	QRESULT CEeprom__GetProperty(IEeprom* pIEeprom, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * PARAMETERS *	IN IEeprom* pIEeprom - pointer to the Eeprom object/********************************************************************************************/QRESULT CEeprom__GetProperty( IEeprom* pIEeprom,	DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){	//	CEeprom* this = (CEeprom*) pIEeprom;	DWORD Value;	QRESULT qr = Q_OK;	switch(PropId)	{	case eEepromAccess:		CHECK_SIZE(genericReg)		IEeprom_Read(pIEeprom, ((genericReg_type*)pData)->Addr,			(BYTE*)&((genericReg_type*)pData)->Data);		return qr;	default:		return E_NOT_SUPPORTED;	}	*(DWORD*)pData = Value;	QDbgLog((QLOG_TRACE, QDebugLevelTrace,		TEXT("   <-- CEeprom__GetProperty: set=%x id=%x flags=%x sz=%x value=%x"),		PropSet, PropId, Flags, dwSizeIn, Value));	return Q_OK;}////////////////////////////////////////////////////////////////////////////////////////////// Eeprom functionsBOOL CEeprom__CheckPresence( IEeprom* pIEeprom ){	CEeprom* this = (CEeprom*) pIEeprom;	BYTE byte;	byte = 0x55;	II2C_Write(this->m_pII2C, 0x7f, &byte, 1);	OSTimeDelay(20 * 1000);	// necessary delay for writing the data in EEPROM	byte = 0xAA;	II2C_Read(this->m_pII2C, 0x7f, &byte, 1);	if(byte == 0x55)	{		QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("OK")));		this->m_bEEPROMPresent = TRUE;	}	else	{		this->m_bEEPROMPresent = FALSE;	}	return this->m_bEEPROMPresent;}BOOL CEeprom__GetPresence( IEeprom* pIEeprom ){	CEeprom* this = (CEeprom*) pIEeprom;	return this->m_bEEPROMPresent;}BOOL CEeprom__Write( IEeprom* pIEeprom, DWORD Address, BYTE* pData ){	CEeprom* this = (CEeprom*) pIEeprom;	if (this->m_bEEPROMPresent == 0)		return FALSE;	II2C_Write(this->m_pII2C, (BYTE)Address, pData, 1);	OSTimeDelay (20 * 1000);	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("WriteEEPROM at %x = %x"), Address, *pData));	return TRUE;}BOOL CEeprom__Read( IEeprom* pIEeprom, DWORD Address, BYTE* pData ){	CEeprom* this = (CEeprom*) pIEeprom;	if (this->m_bEEPROMPresent == 0)		return FALSE;	II2C_Read(this->m_pII2C, (BYTE)Address, pData, 1);	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT("ReadEEPROM at %x = %x"), Address, *pData));	return TRUE;}QRESULT CEeprom__Program( IEeprom* pIEeprom, BYTE* pData, DWORD nBytes){	CEeprom* this = (CEeprom*) pIEeprom;	DWORD i;	BYTE byte;	if (this->m_bEEPROMPresent == 0)	{		QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("ProgramEEPROM - NO EEPROM ")));		return E_EEPROM_NOT_PRESENT;	}	for(i=0;i<nBytes;i++)	{		byte = pData[i];		CEeprom__Write(pIEeprom, i, &byte);		OSTimeDelay(20 * 1000);	// necessary delay for writing the data in EEPROM	}	for(i=0;i<nBytes;i++)	{		CEeprom__Read(pIEeprom, i, &byte);		if(byte != pData[i])		{			QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("EEPROM ERROR: write %02x read %02x"), pData[i], byte));			OSsprintf(g_InfoError, TEXT("Program EEPROM ERROR: write %02x read %02x\n"), pData[i], byte);			return E_PROGRAM_EEPROM_FAILED;		}	}	QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("Program EEPROM END") ));	return Q_OK;}

⌨️ 快捷键说明

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