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

📄 tidtv_guiapi.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*******************************************************************************
*	@ModuleName	::	TiDTV_GuiApi.c
*	
*	@Copyright	::	Copyright 2005- Texas Instruments, Inc.
*	
*	@Description::	TI DTV GUI APIs (Application Programmers Interface)
*	
*	@History	::
*---------------------------------------
*	04-16-2005	W.Shi	Created
*******************************************************************************/

#include	<stdio.h>
#include	<string.h>
#include	"ucos_ii.h"

#include	"TvpArch.h"
#include	"TvpDefs.h"
#include	"Tvp9000.h"
#include	"TvpError.h"
#include	"TvpInt.h"
#include	"TvpHdm.h"
#include	"TvpInt926.h"
#include	"TvpUarts.h"
#include	"TvpEbi.h"
#include	"TvpTpp.h"
#include	"TvpIrrf.h"
#include	"TvpGpio.h"
#include	"TvpVideo.h"
#include	"TvpAudio.h"
#include	"TvpEncoder.h"
#include	"TvpI2c.h"
#include	"TvpTimer.h"
#include	"TvpSdTables.h"
#include	"TvpSdram.h"
#include	"TvpSystem.h"
#include	"TvpCp15.h"
#include	"TvpMmu.h"

#include	"TiDTV_DataType.h"
#include	"TiDTV_SysCtrl.h"
#include	"TiDTV_Buffers.h"
#include	"TiDTV_PSIP.h"
#include	"TiDTV_UserApi.h"
#include	"TiDTV_GLib.h"
#include	"TiDTV_GUI.h"
#include	"TiDTV_McuComm.h"
#include	"TiDTV_IrKey.h"
#include	"TiDTV_GuiApi.h"
#include	"TiDTV_AvInput.h"
#include	"TiDTV_PictureCtrl.h"
#include	"TiDTV_Cc608Xds.h"
#include	"TiDTV_Cc608.h"
#include	"TiDTV_DTVCC.h"
#include	"TVP9K_NV_Def.h"
#include	"TiDTV_HDMI.h"

char *pTiDTV_AvInputMsg[] = {
	" D 12-34 ",		// Digital TV
	
	" A -TV- ",			// A-TV Tuner
	" Video ",			// Video (CVBS)
	" S-Video ",		// S-Video
	
	" YCbCr ",			// Component-1: YCbCr (TVP5160)
	" YPbPr ",			// Component-2: YPbPr
	" HDMI ",			// HDMI
	" DVI ",			// PC: VGA/DVI
};

UINT8 TiDTV_VbiDataCtrl = 0;

const char *pTiDTV_WeekDayName[] = {
	"Sunday",
	"Monday",
	"Tuesday",
	"Wednesday",
	"Thursday",
	"Friday",
	"Saturday"
};

const char *pTiDTV_GuiMsg[] = {
	" CC OFF ",			// Disable CC
	" CC ON ",			// Enabld CC
	" CC ON-MUTE ",		// CC ON Mute
	
	" MUTE ",
	"Digital",
	
	"sleep",
	"sec",
};

const char *pTiDTV_FrameRate[] = {
	"23.976",
	"24",
	"25",
	"29.97",
	"30",
	"50",
	"59.94",
	"60",
};

void TiDTV_AudioDecConfigDTV(void);
void TiDTV_AudioDecConfigATV(void);
void TiDTV_AudioDecConfigHDMI(void);
void TiDTV_DispChanInfo(void);

static void TiDTV_AudioVolumeCtrl(void);
static void TiDTV_ProcIrKeyCC(void);
static void TiDTV_ProcIrKeyChanUpDown(void);

/*******************************************************************************
*	@RoutineName:: TiDTV_VbiISR
*
*	@Description:: VBI ISR (for updating Audio/Video adjustments)
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_VbiISR(void)
{
	if (TiDTV_VbiDataCtrl & TI_DTV_VBI_BACK_LUT_UPDATE) {
		tvpBckLutWrite();		// update Background LUT
		TiDTV_VbiDataCtrl &= ~TI_DTV_VBI_BACK_LUT_UPDATE;
	}
	
	if (TiDTV_VbiDataCtrl != 0) {
		if (--TiDTV_VbiDataCtrl == 0)
			TiDTV_AudioAmpCtrl(1);	// turn ON Audio AMP
	}
	
	//------------------------------------------------------
	tvpVidVbiFunc();
	
//	tvpIntMaskSet(TVP_INT_VBI_STRT);	// Mask (disable) the interrupt
}

/*******************************************************************************
*	@RoutineName:: TiDTV_DispPromptMsg
*
*	@Description:: Display the Prompt Message
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_DispPromptMsg(void)
{
	INT8U uCosRetStatus;
	
	switch (TiDTV_KeyBuf.CurKeyCode) {
		case TI_DTV_IR_KEY_INPUT:		// TV/Video Input Selection
			if (++TiDTV_SysCtrl.AvInput >= TI_DTV_AV_INPUT_MAX_NUM_PORT)
				TiDTV_SysCtrl.AvInput = 0;
			
			TiDTV_SwitchAvInput();
			break;
			
		case TI_DTV_IR_KEY_CC:			// CC Contrl: Diable/Enable/On-Mute
			TiDTV_ProcIrKeyCC();
			break;
			
		case TI_DTV_IR_KEY_MUTE:		// Mute/Unmute
			TiDTV_SysCtrl.AudioVolume ^= 0x80;	// Toggle Mute Flag
			if (TiDTV_SysCtrl.AudioVolume & 0x80) {
				tvpAudCommand(TVP_AUD_PLAY, TVP_AUD_MUTE);
				
				// use Bottom Window
				TiDTV_OsdClearWindow(&TiDTV_OsdScreenAux, TiDTV_OsdScreenAux.pCurDrawWindow, 0);
				TiDTV_OsdSetDrawWindow(&TiDTV_OsdScreenAux, &TiDTV_OsdScreenAux.pOsdWindows[1]);
				TiDTV_OsdMove(&TiDTV_OsdScreenAux, TI_DTV_AUDIO_CTRL_X - TI_DTV_AUDIO_CTRL_H * 2, TI_DTV_AUDIO_CTRL_Y);
				TiDTV_OsdSetCharColor(&TiDTV_OsdScreenAux, TI_DTV_COLOR_BRIGHT_RED, TI_DTV_COLOR_BLEND_BLACK);
				TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, (char *) pTiDTV_GuiMsg[3]);
			}
			
			if (TiDTV_CcCtrl.DispCtrl == TI_DTV_CC_ON_MUTE) {	// On-mute
				// CC Service control: Enable/Disable/On-Mute
				TiDTV_CcServiceCtrl();
			}
			
			if (TiDTV_SysCtrl.AudioVolume & 0x80)
				break;
			
			tvpAudCommand(TVP_AUD_PLAY, TVP_AUD_UNMUTE);
			TiDTV_AudioVolumeCtrl();
			break;
			
		case TI_DTV_IR_KEY_VOL_UP:		// Volume Up (++)
		case TI_DTV_IR_KEY_VOL_DOWN:	// Volume Down (--)
			if (TiDTV_SysCtrl.AudioVolume & 0x80) {
				TiDTV_SysCtrl.AudioVolume &= 0x7f;
				tvpAudCommand(TVP_AUD_PLAY, TVP_AUD_UNMUTE);
			}
			
			// Enable repeat Scan Key through (uC/OS-II tick timer)
			TiDTV_KeyRptScan(OS_TICKS_PER_SEC, OS_TICKS_PER_SEC / 10);
			
			TiDTV_AudioVolumeCtrl();
			break;
			
		case TI_DTV_IR_KEY_CH_UP:		// Channel Up (++)
		case TI_DTV_IR_KEY_CH_DOWN:		// Channel Down (--)
			TiDTV_ProcIrKeyChanUpDown();
			break;
			
		case TI_DTV_IR_KEY_DISP_INF:	// Display Channel Information
			TiDTV_DispChanInfo();
			break;
			
		default:	// Digits Keys
			if (TiDTV_MenuTaskStatus() == OS_NO_ERR) {
				// Menu task is running
			} else if (TiDTV_KeyBuf.CurKeyCode != TI_DTV_IR_KEY_SELECT) {
				if (TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_10)
					TiDTV_KeyBuf.DigitKeyBuf[TiDTV_KeyBuf.NumDigitKey] = '-';
				else
					TiDTV_KeyBuf.DigitKeyBuf[TiDTV_KeyBuf.NumDigitKey] = '1' + TiDTV_KeyBuf.CurKeyCode - TI_DTV_IR_KEY_1;
				TiDTV_KeyBuf.DigitKeyBuf[++TiDTV_KeyBuf.NumDigitKey] = '\0';
				
				// use Top Window
				TiDTV_OsdSetDrawWindow(&TiDTV_OsdScreenAux, &TiDTV_OsdScreenAux.pOsdWindows[0]);
				TiDTV_OsdClearWindow(&TiDTV_OsdScreenAux, TiDTV_OsdScreenAux.pCurDrawWindow, 0);
				TiDTV_OsdSetDrawWindow(&TiDTV_OsdScreenAux, &TiDTV_OsdScreenAux.pOsdWindows[0]);
				TiDTV_OsdSetCharColor(&TiDTV_OsdScreenAux, TI_DTV_COLOR_BRIGHT_YELLOW, TI_DTV_COLOR_BLEND_BLACK);
				
				TiDTV_OsdMove(&TiDTV_OsdScreenAux, TI_DTV_DISPLAY_SAFE_WIDTH -
							TI_DTV_AV_INPUT_CTRL_STRIDE * 8, TI_DTV_AV_INPUT_CTRL_Y);
				TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, TiDTV_KeyBuf.DigitKeyBuf);
			}
			
			TiDTV_CheckDigitKeyBuf(1);	// Check Digits Key Buffer
			break;
	}
	
	TiDTV_KeyBuf.CurKeyCodePromptMsg = TiDTV_KeyBuf.CurKeyCode;
	
	if (TiDTV_KeyBuf.CurKeyCodePromptMsg == TI_DTV_IR_KEY_DISP_INF) {
		if (OSFlagPend(pTiDTV_SysFLAG, TI_DTV_PROMPT_MSG_KEY_READY, OS_FLAG_WAIT_SET_ANY,
					16 * OS_TICKS_PER_SEC, &uCosRetStatus) != 0 &&
					uCosRetStatus == OS_NO_ERR)
		{
			if (TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_DISP_INF) {
				TiDTV_OsdClearWindow(&TiDTV_OsdScreenAux, TiDTV_OsdScreenAux.pCurDrawWindow, 0);
				TiDTV_KeyBuf.CurKeyCode = 0;
				OSFlagAccept(pTiDTV_SysFLAG, TI_DTV_PROMPT_MSG_KEY_READY,
						OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME, &uCosRetStatus);
			}
		}
	}
}

/*******************************************************************************
*	@RoutineName:: TiDTV_AudioDecConfigDTV
*
*	@Description:: Configure Audio Decoder for DTV
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_AudioDecConfigDTV(void)
{
	TiDTV_AudioAmpCtrl(0);	// turn OFF Audio AMP
	
	// stop Audio Decoder
	tvpAudCommand(TVP_AUD_HALT, TVP_AUD_MUTE);
	
	// Download the AC3 algorithm
	tvpAudAlgorithmDownload(TVP_AUD_AC3,
					tvpAudDefaultUCodeAddrGet(TVP_AUD_AC3_UCODE),
					tvpAudDefaultUCodeSizeGet(TVP_AUD_AC3_UCODE),
					tvpAudDefaultUCodeAddrGet(TVP_AUD_AC3_COEFFICIENT),
					tvpAudDefaultUCodeSizeGet(TVP_AUD_AC3_COEFFICIENT));
	
	// Configure the AC3 stream
#ifdef	PG1_0
	// for PG 1.0
	tvpAudConfigAC3((TvpAudDualMode)0, TVP_DISABLE, TVP_AUD_LO_RO_DNMIX, TVP_ENABLE,
					TVP_ENABLE, TVP_DISABLE, TVP_DISABLE, TVP_DISABLE);
#else
	// for PG 2.0
	tvpAudConfigAC3(TVP_AUD_STEREO, TVP_DISABLE, TVP_AUD_LT_RT_DNMIX, TVP_ENABLE,
					TVP_DISABLE, TVP_DISABLE, TVP_DISABLE, TVP_DISABLE);
#endif	/* PG1_0 */
	
	// Configure the audio PCM
	tvpAudConfigPcm(TVP_AUD_PCM_24_BIT_SAMPLES, TVP_AUD_PCM_I2S_PATTERN,
					TVP_AUD_SPDIF_AS_PCM_MUTE, TVP_DISABLE, TVP_DISABLE,
					TVP_ENABLE, TVP_AUD_CLOCK_NO_DIV);
	
	tvpAudMicrophoneCtrl(TVP_DISABLE, TVP_DISABLE, TVP_DISABLE, TVP_ENABLE,
					TVP_DISABLE, 1, TVP_AUD_TONE_SF_48, 0, 0);
	
	//--------------------------------------------------
	// followings are some Magic Codes for Sundial Module
	//
	*(volatile ULONG *) 0x110008 = 0x31881808;
	//--------------------------------------------------
}

/*******************************************************************************
*	@RoutineName:: TiDTV_AudioDecConfigATV
*
*	@Description:: Configure Audio Decoder for ATV
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_AudioDecConfigATV(void)
{
	TiDTV_AudioAmpCtrl(0);	// turn OFF Audio AMP

⌨️ 快捷键说明

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