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

📄 csii168.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
字号:
/********************************************************************************************//*  Csii168.c : Implementation of DVI transmitter interface*  REALmagic Quasar Hardware Library*  Created by Aurelia Popa-Radu*  Copyright Sigma Designs Inc*  Sigma Designs Proprietary and confidential*  Created on 5/14/01*  Description:/********************************************************************************************//****h* HwLib/IDviTransmitter_implementation * NAME *	IDviTransmitter_implementation * DESCRIPTION *  Csii168 implementation of the IDviTransmitter interface. * COPYRIGHT *  Copyright Sigma Designs Inc *  Sigma Designs Proprietary and confidential/********************************************************************************************/#include "pch.h"#if defined SII168_OBJECT#include "ci2c.h"#include "csii168.h"////////////////////////////////////////////////////////////////////////////****f* HwLib/Csii168__CreateInstance * USAGE *	NOT PRESENT in IDviTransmitter interface *	void Csii168__CreateInstance(void **pv, DWORD dwInstance) * DESCRIPTION *	Csii168__CreateInstance allocates memory for DviTransmitter object, specific in *	this code SiImage 168 * PARAMETERS *	IN DWORD dwInstance - instance passed down by CreateInstance. *	OUT void** pv - Points to a 32-bit variable that receives the pointer to object *SEE ALSO *	Csii168__CreateInstance/********************************************************************************************/void Csii168__CreateInstance(void **pv, DWORD dwInstance){	Csii168__New((Csii168 **)pv, TEXT("Sii168"), TRUE, dwInstance);}/****f* HwLib/Csii168__New * USAGE *	NOT PRESENT in IDviTransmitter interface *	void Csii168__New(Csii168** ppCsii168, TCHAR *pName, BOOL bAllocate, DWORD dwInstance) * DESCRIPTION *	Csii168__New - allocates memory for a new DviTransmitter object and plays the role of *	the constructor in C++. * PARAMETERS *	OUT Csii168** ppCsii168 - Points to a 32-bit variable that receives the pointer to object *	IN TCHAR *pName - pointer to string containing the name of the object - debug purposes. *	BOOL bAllocate - usually called with TRUE to allocate memory for object. *		- if FALSE ppCsii168 should point to an object already created. *	IN DWORD dwInstance - instance passed down by CreateInstance. * SEE ALSO *	IDviTransmitter_Delete/********************************************************************************************/void Csii168__New (Csii168** ppCsii168, TCHAR *pName, BOOL bAllocate, DWORD dwInstance){	Csii168* this = *ppCsii168;	if (bAllocate)	{		// Allocate Csii168		*ppCsii168 = OSmalloc(sizeof(Csii168));		this = (Csii168*) *ppCsii168;		if(this == NULL)			return;		OSmemset(this, 0, sizeof(Csii168));	}	// Call CObject constructor with bAllocate = FALSE	CObject__New ((CObject**)ppCsii168, pName, FALSE, dwInstance);	// Call CI2C constructor	CI2C__New ( (CI2C**)(&this->m_pII2C), pName, TRUE, dwInstance );	if(this->m_pII2C == NULL)	{		if (bAllocate)			OSfree(*ppCsii168);		*ppCsii168 = NULL;		return;	}	// Initialize virtual table	this->VTable.Delete					= Csii168__Delete;	this->VTable.Init					= Csii168__Init;	this->VTable.Write					= Csii168__Write;	this->VTable.Read					= Csii168__Read;	this->VTable.SetState				= Csii168__SetState;	this->VTable.HwReset				= Csii168__HwReset;	this->VTable.InitPropertySet		= Csii168__InitPropertySet;	this->VTable.SetProperty			= Csii168__SetProperty;	this->VTable.GetProperty			= Csii168__GetProperty;	this->VTable.Test					= Csii168__Test;	this->lpVtbl = &this->VTable;}/****f* HwLib/IDviTransmitter_Delete * USAGE *	IDviTransmitter_Delete(IDviTransmitter* pIDviTransmitter, BOOL bDeleteObject) *	Csii168__Delete(IDviTransmitter* pIDviTransmitter, BOOL bDeleteObject) * DESCRIPTION *	IDviTransmitter_Delete - frees memory for the specified DviTransmitter object. *	IDviTransmitter_Delete plays the role of the destructor in C++. * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the object created by a previous *		call to Csii168__CreateInstance or Csii168__New. *	BOOL bDeleteObject - usually called with TRUE to free memory for object. *		- if FALSE doesn't free any memory. * SEE ALSO *   Csii168__CreateInstance, Csii168__New/********************************************************************************************/void Csii168__Delete (IDviTransmitter* pIDviTransmitter, BOOL bDeleteObject){	Csii168* this = (Csii168*) pIDviTransmitter ;	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 Csii168		OSfree(pIDviTransmitter);	}}/****f* HwLib/IDviTransmitter_Init * USAGE *	void IDviTransmitter_Init(IDviTransmitter* pIDviTransmitter) *	void Csii168__Init(IDviTransmitter* pIDviTransmitter) * DESCRIPTION *	IDviTransmitter_Init - initialize the DviTransmitter object *	It is called by CreateInstance. * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/void Csii168__Init(IDviTransmitter* pIDviTransmitter){	Csii168* this = (Csii168*) pIDviTransmitter;	II2C_SetI2CAddress( this->m_pII2C, SII168_WRITE_ADDR,  SII168_READ_ADDR, 2);	II2C_Init( this->m_pII2C );}/****f* HwLib/IDviTransmitter_Write * USAGE *	BOOL IDviTransmitter_Write(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) *	BOOL Csii168__Write(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object *	IN DWORD Address - address of the register to write *	IN BYTE* pData - pointer to the BYTE data to write/********************************************************************************************/BOOL Csii168__Write(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData){	Csii168* this = (Csii168*) pIDviTransmitter;	BOOL bRet;	bRet = II2C_Write(this->m_pII2C, (BYTE)Address, pData, 1);	QDbgLog((QLOG_TRACE, QDebugLevelWarning,		TEXT("   Write168 at %x = %x"), Address, *pData));	return bRet;}/****f* HwLib/IDviTransmitter_Read * USAGE *	BOOL IDviTransmitter_Read(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) *	BOOL Csii168__Read(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData) * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object *	IN BYTE Address - address of the I2C register to read *	IN BYTE* pData - pointer where the BYTE data is read/********************************************************************************************/BOOL Csii168__Read(IDviTransmitter* pIDviTransmitter, DWORD Address, BYTE* pData){	Csii168* this = (Csii168*) pIDviTransmitter;	BOOL bRet;	bRet = II2C_Read(this->m_pII2C, (BYTE)Address, pData, 1);	QDbgLog((QLOG_TRACE, QDebugLevelWarning,		TEXT("   Read168 at %x = %x"), Address, *pData));	return bRet;}/****f* HwLib/IDviTransmitter_HwReset * USAGE *	QRESULT IDviTransmitter_HwReset(IDviTransmitter* pIDviTransmitter) *	QRESULT Csii168__HwReset(IDviTransmitter* pIDviTransmitter) * DESCRIPTION *	IDviTransmitter_HwReset - reset the hardware * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__HwReset(IDviTransmitter* pIDviTransmitter){	//	Csii168* this = (Csii168*) pIDviTransmitter;	BYTE Byte = 0x06;	IDviTransmitter_Write(pIDviTransmitter, 0x08, &Byte);// power off	Byte = 0x0A;	IDviTransmitter_Write(pIDviTransmitter, 0x0c, &Byte);// PLL filter disable	Byte = 0x01;	IDviTransmitter_Write(pIDviTransmitter, 0x33, &Byte);// DE enable	return Q_OK;}/****f* HwLib/IDviTransmitter_SetState * USAGE *	QRESULT IDviTransmitter_SetState(IDviTransmitter* pIDviTransmitter, DWORD State) *	QRESULT Csii168__SetState(IDviTransmitter* pIDviTransmitter, DWORD State) * DESCRIPTION *	IDviTransmitter_SetState - On or off * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__SetState(IDviTransmitter* pIDviTransmitter, DWORD State){	//	Csii168* this = (Csii168*) pIDviTransmitter;	BYTE Byte;	if( !State )	// OFF		return Csii168__HwReset(pIDviTransmitter);	Byte = 0x37;	IDviTransmitter_Write(pIDviTransmitter, 0x08, &Byte);// power on, 24 bits, Input H,VSync enable	Byte = 0x00;	IDviTransmitter_Write(pIDviTransmitter, 0x09, &Byte);	Byte = 0xf0;	IDviTransmitter_Write(pIDviTransmitter, 0x0a, &Byte);	Byte = 0x89;	IDviTransmitter_Write(pIDviTransmitter, 0x0c, &Byte);	Byte = 0x00;	IDviTransmitter_Write(pIDviTransmitter, 0x0d, &Byte);	Byte = 0x00;	IDviTransmitter_Write(pIDviTransmitter, 0x0e, &Byte);	Byte = 0x00;	IDviTransmitter_Write(pIDviTransmitter, 0x0f, &Byte);	return Q_OK;}void Csii168__InitPropertySet(IDviTransmitter* pIDviTransmitter, void* pPropSet, DWORD dwSize){	Csii168* this = (Csii168*) pIDviTransmitter;	if(dwSize != sizeof(PROPERTY_SET_ITEM))		return;	InitPropSet(pIDviTransmitter, pPropSet, DVI_TRANSMITTER_SET, edtMax,\		this->DviTransmitterPropertyList, Csii168__SetProperty, Csii168__GetProperty)}/****f* HwLib/IDviTransmitter_SetProperty * USAGE *	QRESULT IDviTransmitter_SetProperty(IDviTransmitter* pIDviTransmitter, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) *	QRESULT Csii168__SetProperty(IDviTransmitter* pIDviTransmitter, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__SetProperty( IDviTransmitter* pIDviTransmitter,	DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){	// DVI_TRANSMITTER_SET use DWORD for changing information and size condition is already checked	DWORD Value = *(DWORD*)pData;	QDbgLog((QLOG_TRACE, QDebugLevelTrace,		TEXT("   --> Csii168__SetProperty: set=%x id=%x flags=%x sz=%x value=%x"),		PropSet, PropId, Flags, dwSizeIn, Value));	switch(PropId)	{	case edtAccessRegister:		if(pdwSizeOut)			*pdwSizeOut = sizeof(ADDR_DATA);		if( dwSizeIn < sizeof(ADDR_DATA) )			return E_INVALID_PROPERTY_BUFFER;		IDviTransmitter_Write(pIDviTransmitter,			((ADDR_DATA*)pData)->Addr,			(BYTE*)&((ADDR_DATA*)pData)->Data);		return Q_OK;	case edtOutputEnable:		Csii168__SetState(pIDviTransmitter, Value);		break;	default:		return E_NOT_SUPPORTED;	}	return Q_OK;}/****f* HwLib/IDviTransmitter_GetProperty  * USAGE *	QRESULT IDviTransmitter_GetProperty(IDviTransmitter* pIDviTransmitter, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) *	QRESULT Csii168__GetProperty(IDviTransmitter* pIDviTransmitter, *		DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut) * PARAMETERS *	IN IDviTransmitter* pIDviTransmitter - pointer to the DviTransmitter object/********************************************************************************************/QRESULT Csii168__GetProperty( IDviTransmitter* pIDviTransmitter,	DWORD PropSet, DWORD PropId, DWORD Flags, void* pData, DWORD dwSizeIn, DWORD* pdwSizeOut){	// DVI_TRANSMITTER_SET use DWORD for changing information and size condition is already checked	DWORD Value;	switch(PropId)	{	case edtAccessRegister:		if(pdwSizeOut)			*pdwSizeOut = sizeof(ADDR_DATA);		if( dwSizeIn < sizeof(ADDR_DATA) )			return E_INVALID_PROPERTY_BUFFER;		IDviTransmitter_Read(pIDviTransmitter,			((ADDR_DATA*)pData)->Addr, (BYTE*)&((ADDR_DATA*)pData)->Data);		return Q_OK;	default:		return E_NOT_SUPPORTED;	}	*(DWORD*)pData = Value;	QDbgLog((QLOG_TRACE, QDebugLevelTrace,		TEXT("   <-- Csii168__GetProperty: set=%x id=%x flags=%x sz=%x value=%x"),		PropSet, PropId, Flags, dwSizeIn, Value));	return Q_OK;}QRESULT Csii168__Test(IDviTransmitter* pIDviTransmitter){	//	Csii168* this = (Csii168*) pIDviTransmitter;	int Error = 0;	if (Error)		OSsprintf(g_InfoError, TEXT("Sii168 Write/Read Error") );	return Error ? E_TEST_DVI_TRANSMITTER_FAILED : Q_OK;}#else	// ! SII168_OBJECTvoid Csii168__CreateInstance(void **ppv, DWORD dwInstance){	*ppv = NULL;}#endif	// SII168_OBJECT

⌨️ 快捷键说明

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