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

📄 cnec.c

📁 这是一个SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的参考价值.
💻 C
字号:
/******************************************************************************//*  cnec.c : specific code for NEC board*  REALmagic Quasar Hardware Library*  Created by Aurelia Popa-Radu*  Copyright Sigma Designs Inc*  Sigma Designs Proprietary and confidential*  Created on 03/06/01*  Description:/******************************************************************************//****h* HwLib/CNec_Implementation * DESCRIPTION *  CNec implementation of the IDecoderBoard interface. * NEC uses EM8470, EEPROM components to implement TV output, HDTV output. * NO VCXO and NO Videoin. * Identified by HwLib reading PciSubsystemID = 0x0002 and SubsystemVendorID = 0x1033. * PIO0	- IIC Clock for Eeprom * PIO1	- IIC Data for Eeprom * PIO5 - audio dac DZF pin - input for HwLib * PIO6 - Spdif enable  - output for HwLib * PIO7 - audio dac PDN pin (powerdown) - output for HwLib * Implementation based on CVE2000. * Specific implementation: * QRESULT CNec__AudioSetSampleRate(IDecoderBoard* pIDecoderBoard, DWORD Rate)/******************************************************************************/#include "pch.h"#if defined NEC_BRD#include "cqsrbrd.h"// use predefined PIO0 and PIO1 for I2C_CLK_PIO, I2C_DATA_PIO#define AUDIO_SPDIF_ENABLE_PIO		PIO6#define AUDIO_POWERDOWN_PIO			PIO7QRESULT CNec__AudioSetSampleRate(IDecoderBoard* pIDecoderBoard, DWORD Rate){	CQuasarBoard *this = (CQuasarBoard*) pIDecoderBoard;	if( (!(this->BoardAudioRate & FORCED_HW_UPDATE)) && (this->BoardAudioRate == Rate) )		return Q_OK;	this->BoardAudioRate = Rate & ~FORCED_HW_UPDATE;	// use most significant bit to force programming	QDbgLog((QLOG_TRACE, QDebugLevelTrace, TEXT(" CNec__AudioSetSampleRate= %d"), this->BoardAudioRate));	IDecoder_SetAudioSampleRate(this->m_pIDecoder, this->BoardAudioRate);	IDecoder_WritePIO(this->m_pIDecoder, AUDIO_SPDIF_ENABLE_PIO, 1);	IDecoder_WritePIO(this->m_pIDecoder, AUDIO_POWERDOWN_PIO, 1);	{	// we need reset for changing the sample rate	BYTE AK4363_0 = 0x0B;	BYTE AK4363_1 = 0x00;	BYTE AK4363_2 = 0x05;	II2C_Write(this->m_pII2C, 2, &AK4363_2, 1 );    // Set MUTE	AK4363_1 |= ( (this->BoardAudioRate==32000) ? 0x80 : ((this->BoardAudioRate==44100)? 0x00 : 0x40) );	II2C_Write(this->m_pII2C, 1, &AK4363_1, 1 );    // Set audio sampling rate & reset on second register	II2C_Write(this->m_pII2C, 0, &AK4363_0, 1 );    // Cancel reset on first register!	AK4363_2 = 0x94;	II2C_Write(this->m_pII2C, 2, &AK4363_2, 1 );    // Cancel MUTE	}	return Q_OK;}QRESULT CNec__HwReset(IDecoderBoard* pIDecoderBoard){	CQuasarBoard *this = (CQuasarBoard*) pIDecoderBoard;	QRESULT qr = Q_OK;	BYTE AK4363[5] = {0x0b, 0x01, 0x94, 0xff, 0xff};	// normal LR//	BYTE AK4363[5] = {0x0b, 0x01, 0x64, 0xff, 0xff};	// reverse LR	int i;	qr = CVE2000__HwReset(pIDecoderBoard);	IDecoder_WritePIO(this->m_pIDecoder, AUDIO_SPDIF_ENABLE_PIO, 1);	IDecoder_WritePIO(this->m_pIDecoder, AUDIO_POWERDOWN_PIO, 1);	for( i=0; i< sizeof(AK4363); i++)		II2C_Write(this->m_pII2C, (BYTE)i, &AK4363[i], 1 );	return qr;}void CNec__InitVtable(IDecoderBoard* pIDecoderBoard){	CQuasarBoard* this = (CQuasarBoard*) pIDecoderBoard;	this->lpVtbl->HwReset					= CNec__HwReset;	this->lpVtbl->UpdateOverlay				= CVE2000__UpdateOverlay;	this->lpVtbl->SetCustomTvHdtv			= CVE2000__SetCustomTvHdtv;	this->lpVtbl->SelectVClk				= C847xBrd__SelectVClk;	this->lpVtbl->AudioSetSampleRate		= CNec__AudioSetSampleRate;	this->lpVtbl->VidSetVGATV				= C847xDigBrd__VidSetVGATV;}QRESULT CNec__SpecificCreateInstance(IDecoderBoard* pIDecoderBoard, DWORD dwInstance){	CQuasarBoard* this = (CQuasarBoard*) pIDecoderBoard;	this->BoardCapabilities |= (		MPEG_CAPABILITY_TV_YUV_COMPONENT |		MPEG_CAPABILITY_TV_RGB_COMPONENT |		MPEG_CAPABILITY_HDTV_OUTPUT		);	this->pRegistry->Ccir_656 = CCIR_656;	this->pRegistry->SyncEnable = 0;	// by default disable VS,HS,VVLD for 656	this->pRegistry->TvOut = SET_TV | SET_NTSC | SET_ONETOONE;	this->TvOut = SET_TV;	// overwrite necessary values	CNec__InitVtable(pIDecoderBoard);	this->DeviceId = VENTURA2000_DEVICEID;	this->BoardVersion = NEC;	this->SubId = (this->BoardVersion>>8);	if( (this->PciSubsystemID != 0x02) && (this->PciSubsystemVendorID != 0x1033) )		QDbgLog((QLOG_TRACE, QDebugLevelWarning, TEXT("\n\nERROR: Create NEC is FORCED !") ));	{	DWORD Value = I2S_SCkinSCIN_Jda1CkinGCK_ScinIN_DamckIN;	IDecoder_SetProperty(this->m_pIDecoder,		DECODER_SET, edecAudioInOutConfig, 0, &Value, sizeof(DWORD), NULL);	Value = 24;	IDecoder_SetProperty(this->m_pIDecoder,		DECODER_SET, edecAudioDacBitsPerSample, 0, &Value, sizeof(DWORD), NULL);	}	//VG (10/30/2002 6:39:12 PM)	// updated on NEC request. originally was ( this->m_pII2C, 0x20,  0x21, 1)	//	II2C_SetI2CAddress( this->m_pII2C, 0x20,  0x21, 100);	return Q_OK;}#endif	// NEC_BRD#if defined NEC_BRD && !defined ANY_BRDQRESULT CreateInstance(DWORD* pInstance, void* pHwLibConf){	QRESULT qr = CommonCreateInstance(pInstance, pHwLibConf);	if( QSUCCEEDED(qr) )		qr = CNec__SpecificCreateInstance(g_pIDecoderBoard[*pInstance], *pInstance);	if( QFAILED(qr) )	{		CQuasarBoard__DeleteObjects(g_pIDecoderBoard[*pInstance]);		g_pIDecoderBoard[*pInstance] = 0;		return E_CREATE_INSTANCE_FAILED;	}	return Q_OK;}#endif	// NEC_BRD && !ANY_BRD

⌨️ 快捷键说明

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