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

📄 cnova.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************//*  CNova.c : Implementation of the AnalogOverlay 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:/******************************************************************************//****h* HwLib/CNova_implementation * NAME *	CNova_implementation * DESCRIPTION *	CNova_implementation of IAnalogOverlay interface *	Nova or Nova1 is the name of EM9010. * COPYRIGHT *  Copyright Sigma Designs Inc *  Sigma Designs Proprietary and confidential/******************************************************************************/#include "pch.h"#if defined NOVA_OBJECT#include "ci2c.h"#include "cnovbase.h"#include "cnova.h"void CNova__InitVtable(IAnalogOverlay* pIAnalogOverlay){	CNova* this = (CNova*) pIAnalogOverlay;	this->VTable.Delete					= CNova__Delete;	this->VTable.Init					= CNova__Init;	this->VTable.SetRegistry			= CNova__SetRegistry;	this->VTable.Write					= CNovaBase__Write;	this->VTable.Read					= CNovaBase__Read;	this->VTable.WriteREG12				= CNova__WriteREG12;	this->VTable.ReadREG12				= CNova__ReadREG12;	this->VTable.ProgramPLL				= CNova__ProgramPLL;	this->VTable.SetDVCLKFrequency		= CNova__SetDVCLKFrequency;	this->VTable.IsVGAConnected			= CNova__IsVGAConnected;	this->VTable.GetHFreq				= CNova__GetHFreq;	this->VTable.GetDefaultCorrection	= CNova__GetDefaultCorrection;	this->VTable.InitAnalogMux			= CNova__InitAnalogMux;	this->VTable.SetVGA					= CNova__SetVGA;	this->VTable.SetTv					= CNova__SetTv;	this->VTable.SlaveShowAll			= CNova__SlaveShowAll;	this->VTable.SetVrdyDelay			= CNova__SetVrdyDelay;	this->VTable.GetVrdyDelay			= CNova__GetVrdyDelay;	this->VTable.SetJitterAdjustment	= CNova__SetJitterAdjustment;	this->VTable.GetJitterAdjustment	= CNova__GetJitterAdjustment;	this->VTable.MakeMask				= CNova__MakeMask;	this->VTable.Hide					= CNova__Hide;	this->VTable.SetChromaKey			= CNova__SetChromaKey;	this->VTable.ShowAll				= CNova__ShowAll;	this->VTable.StartAutoCalibration	= CNova__StartAutoCalibration;	this->VTable.StopAutoCalibration	= CNova__StopAutoCalibration;	this->VTable.ClearPulse				= CNova__ClearPulse;	this->VTable.DetectPulse			= CNova__DetectPulse;	this->VTable.UpperLower				= CNova__UpperLower;	this->VTable.UpdateColorKey			= CNova__UpdateColorKey;	this->VTable.SetMode				= CNova__SetMode;	this->VTable.SetVgaResolution		= CNova__SetVgaResolution;	this->VTable.SetVgaKey				= CNova__SetVgaKey;	this->VTable.GetVgaKey				= CNova__GetVgaKey;	this->VTable.SetVgaKey2				= CNova__SetVgaKey2;	this->VTable.SetColorCalibration	= CNova__SetColorCalibration;	this->VTable.SetOverrideRedUpper	= CNova__SetOverrideRedUpper;	this->VTable.GetOverrideRedUpper	= CNova__GetOverrideRedUpper;	this->VTable.SetOverrideRedLower	= CNova__SetOverrideRedLower;	this->VTable.GetOverrideRedLower	= CNova__GetOverrideRedLower;	this->VTable.SetOverrideGreenUpper	= CNova__SetOverrideGreenUpper;	this->VTable.GetOverrideGreenUpper	= CNova__GetOverrideGreenUpper;	this->VTable.SetOverrideGreenLower	= CNova__SetOverrideGreenLower;	this->VTable.GetOverrideGreenLower	= CNova__GetOverrideGreenLower;	this->VTable.SetOverrideBlueUpper	= CNova__SetOverrideBlueUpper;	this->VTable.GetOverrideBlueUpper	= CNova__GetOverrideBlueUpper;	this->VTable.SetOverrideBlueLower	= CNova__SetOverrideBlueLower;	this->VTable.GetOverrideBlueLower	= CNova__GetOverrideBlueLower;	this->VTable.Test					= CNova__Test;	this->lpVtbl = &this->VTable;}/****f* HwLib/CNova__CreateInstance * USAGE *	NOT PRESENT in IAnalogOverlay interface *	void CNova__CreateInstance(void **pv, DWORD dwInstance) * DESCRIPTION *	CNova__CreateInstance - allocates memory for a new overlay object * 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 *   CNova__CreateInstance/******************************************************************************/void CNova__CreateInstance(void **pv, DWORD dwInstance){    CNova__New((CNova **)pv, TEXT("Nova1"), TRUE, dwInstance);}/****f* HwLib/CNova__New * USAGE *	NOT PRESENT in IAnalogOverlay interface *	void CNova__New(CNova** ppCNova, TCHAR *pName, BOOL bAllocate, DWORD dwInstance) * DESCRIPTION *	CNova__New - allocates memory for a new overlay object and plays the role of *	the constructor in C++. * PARAMETERS *	OUT CNova** ppCNova - 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 ppCNova should point to an object already created. *	IN DWORD dwInstance - instance passed down by CreateInstance. * SEE ALSO *   IAnalogOverlay_Delete/******************************************************************************/void CNova__New(CNova** ppCNova, TCHAR *pName, BOOL bAllocate, DWORD dwInstance){	CNova* this = *ppCNova;	if (bAllocate)	{		// Allocate CNova		*ppCNova = OSmalloc(sizeof(CNova));		this = (CNova*) *ppCNova;		if(this == NULL)			return;		OSmemset(this, 0, sizeof(CNova));	}	// Call CObject constructor with bAllocate = FALSE	CObject__New ((CObject**)ppCNova, pName, FALSE, dwInstance);	CNova__InitVtable((IAnalogOverlay*)this);}/****f* HwLib/IAnalogOverlay_Delete * USAGE *	IAnalogOverlay_Delete(IAnalogOverlay* pIAnalogOverlay, BOOL bDeleteObject) *	CNova__Delete(IAnalogOverlay* pIAnalogOverlay, BOOL bDeleteObject) * DESCRIPTION *	IAnalogOverlay_Delete - frees memory for the specified overlay object. *	IAnalogOverlay_Delete plays the role of the destructor in C++. * PARAMETERS *	IN IAnalogOverlay* pIAnalogOverlay - pointer to the object created by a previous *		call to CNova__CreateInstance or CNova__New. *	BOOL bDeleteObject - usually called with TRUE to free memory for object. *				   - if FALSE doesn't free any memory. * SEE ALSO *   CNova__CreateInstance, CNova__New/******************************************************************************/void CNova__Delete(IAnalogOverlay* pIAnalogOverlay, BOOL bDeleteObject){	CNova *this = (CNova*) pIAnalogOverlay ;	if (this == NULL)		return;	// do this for Nova1 to initialize DVClk according to registry	this->m_HFreq = 2000;	if(this->pRegistry)		IAnalogOverlay_InitAnalogMux(pIAnalogOverlay, this->pRegistry->MaximumDvclk);	// Call CObject Destructor	CObject__Delete ((IObject*)this, FALSE);	if (bDeleteObject)		OSfree(pIAnalogOverlay);}/****f* HwLib/IAnalogOverlay_Init * USAGE *	void IAnalogOverlay_Init(IAnalogOverlay* pIAnalogOverlay, DWORD* pAnalogOverlayId) *	void CNova__Init(IAnalogOverlay* pIAnalogOverlay, DWORD* pAnalogOverlayId) * DESCRIPTION *	IAnalogOverlay_Init - initialize the overlay object. *	It is called by CreateInstance. * PARAMETERS *	IN IAnalogOverlay* pIAnalogOverlay - pointer to the overlay object *	IN DWORD* pAnalogOverlayId - pointer to the overlay identifier, not used/******************************************************************************/void CNova__Init(IAnalogOverlay* pIAnalogOverlay, DWORD* pAnalogOverlayId){	CNova *this = (CNova*) pIAnalogOverlay;	I2CPARAMS* pI2Cparams;	QueryInterface(this->m_dwInstance, IID_ISETI2CPIO, (void**)&(this->pISetI2CpIO));	ISetI2CpIO_GetI2C_params(this->pISetI2CpIO, (void**)&pI2Cparams);	this->m_dwData0 = pI2Cparams->m_dwData0;	this->m_dwData1 = pI2Cparams->m_dwData1;	this->m_dwDataIN = pI2Cparams->m_dwDataIN;	this->m_dwDataOUT = pI2Cparams->m_dwDataOUT;	this->m_dwClock0 = pI2Cparams->m_dwClock0;	this->m_dwClock1 = pI2Cparams->m_dwClock1;	this->m_dwClkIN = pI2Cparams->m_dwClkIN;	this->m_dwClkOUT = pI2Cparams->m_dwClkOUT;	this->m_HFreq = 2000;	this->BlackLevelUpper = 0x08;	this->DeltaLevel = 0x28;	this->DeltaUpperLevel = 0x14;	this->m_bUse_Gamma = 0x00;	this->Calibration.UpperFF = 0xd0d0d0;	this->Calibration.LowerFF = 0xa0a0a0;	this->Calibration.Upper80 = 0x686868;	this->Calibration.Lower80 = 0x383838;	this->Calibration.Upper00 = 0x101010;	this->Calibration.Lower00 = 0x000000;	this->PLL1_FreqLim = MAXIMUM_PLL1;	// Limit of NOVA's PLL frequency in KHz}/****f* HwLib/IAnalogOverlay_SetRegistry * USAGE *	void IAnalogOverlay_SetRegistry(IAnalogOverlay* pIAnalogOverlay, REGISTRY_TABLE* pRegistry) *	void CNova__SetRegistry(IAnalogOverlay* pIAnalogOverlay, REGISTRY_TABLE* pRegistry) * DESCRIPTION *	IAnalogOverlay_ - initialize HFreq. *	It is called by CreateInstance. * PARAMETERS *	IN IAnalogOverlay* pIAnalogOverlay - pointer to the overlay object *	IN REGISTRY_TABLE* pRegistry - pointer to a table containing initial values for EM8400./******************************************************************************/void CNova__SetRegistry(IAnalogOverlay* pIAnalogOverlay, REGISTRY_TABLE* pRegistry){	CNova *this = (CNova*) pIAnalogOverlay ;	this->pRegistry = pRegistry;}/****f* HwLib/IAnalogOverlay_WriteREG12 * USAGE *	void IAnalogOverlay_WriteREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select, BYTE REG1_msb, BYTE REG2_lsb) *	void CNovaLite__WriteREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select, BYTE REG1_msb, BYTE REG2_lsb) *	void CNova__WriteREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select, BYTE REG1_msb, BYTE REG2_lsb) * DESCRIPTION *	IAnalogOverlay_WriteREG12 has different implementation for Nova(EM9010) and NovaLite(EM9038). *	Both chips have 8 bit registers accessible through Sigma Serial Interface. *	To set some parameters (PLL, key color) more than one byte is needed to be written *	simultaneously, that is why register 1 and 2 are used like a pair. *	IAnalogOverlay_WriteREG12 use a specific procedure to program register 1 and 2: *	 - it selects the required function "Select" in register 3 *	 - then writes register 2 with the less significant byte *	 - then writes register 1; this will latch both register1 and 2 values. *	IAnalogOverlay_WriteREG12 is called by IAnalogOverlay_ProgramPLL, IAnalogOverlay_Test, *	IAnalogOverlay_SetDVCLKFrequency, IAnalogOverlay_Hide, IAnalogOverlay_SetChromaKey, *	IAnalogOverlay_StartAutoCalibration, IAnalogOverlay_StopAutoCalibration, *	IAnalogOverlay_Upper, IAnalogOverlay_Lower * PARAMETERS *	IN IAnalogOverlay* pIAnalogOverlay - pointer to the overlay object *	IN WORD Select - it should be PLL3 for NovaLite  *	               - one of PLL1, PLL2, PLL3, RLIMIT, GLIMIT, BLIMIT, GAMMA,RD_PIX, RD_HS for Nova *	IN BYTE REG1_msb - byte to program in register 1 *	IN BYTE REG2_lsb - byte to program in register 2/******************************************************************************/void CNova__WriteREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select, BYTE REG1_msb, BYTE REG2_lsb){	// Select can be PLL1, PLL2, PLL3, RLIMIT, GLIMIT, BLIMIT, GAMMA,RD_PIX, RD_HS	if(Select>0x80)	{		CNovaBase__Write( pIAnalogOverlay, 3, 0 );		CNovaBase__Write( pIAnalogOverlay, 4, (BYTE)(Select | MAIN_CK14) );	}	else	{		CNovaBase__Write( pIAnalogOverlay, 4, MAIN_CK14 );		CNovaBase__Write( pIAnalogOverlay, 3, (BYTE)Select );	}	CNovaBase__Write( pIAnalogOverlay, 2, REG2_lsb );	CNovaBase__Write( pIAnalogOverlay, 1, REG1_msb );}/****f* HwLib/IAnalogOverlay_ReadREG12 * USAGE *	WORD IAnalogOverlay_ReadREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select) *	WORD CNovaLite__ReadREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select) *	WORD CNova__ReadREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select) * DESCRIPTION *	IAnalogOverlay_WriteREG12 has different implementation for Nova(EM9010) and NovaLite(EM9038). *	Both chips have 8 bit registers accessible through Sigma Serial Interface. *	IAnalogOverlay_WriteREG12 use a specific procedure to read register 1 and 2: *	 - it writes the required function "Select" in register 3 *	 - then reads register 2, *	 - then reads register 1. *	It is called by IAnalogOverlay_Test. * PARAMETERS *	IN IAnalogOverlay* pIAnalogOverlay - pointer to the overlay object *	IN WORD Select - it should be PLL3 for NovaLite  *	               - one of PLL1, PLL2, PLL3, RLIMIT, GLIMIT, BLIMIT, GAMMA,RD_PIX, RD_HS for Nova * RETURN VALUE *	It returns register 1 on MSB and register 2 on LSB/******************************************************************************/WORD CNova__ReadREG12(IAnalogOverlay* pIAnalogOverlay, WORD Select){

⌨️ 快捷键说明

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