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

📄 tidtv_guiapi.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	
	// stop Audio Decoder
	tvpAudCommand(TVP_AUD_HALT, TVP_AUD_MUTE);
	
	// Download the Tone algorithm for Analog Audio Input
	tvpAudAlgorithmDownload(TVP_AUD_TONE_GEN,
					tvpAudDefaultUCodeAddrGet(TVP_AUD_TONE_UCODE),
					tvpAudDefaultUCodeSizeGet(TVP_AUD_TONE_UCODE),
					tvpAudDefaultUCodeAddrGet(TVP_AUD_TONE_COEFFICIENT),
					tvpAudDefaultUCodeSizeGet(TVP_AUD_TONE_COEFFICIENT));
	
	// 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);
	
	tvpAudToneFrequency((TvpAudToneFreq) 0, TVP_AUD_TONE_SF_48);
	
#if	0
	#if	1
		tvpAudMicrophoneCtrl(TVP_ENABLE, TVP_DISABLE, TVP_DISABLE, TVP_ENABLE,
							TVP_DISABLE, 1, TVP_AUD_TONE_SF_48, 0, 8);
	#else
		tvpAudMicrophoneCtrl(TVP_ENABLE, TVP_DISABLE, TVP_DISABLE, TVP_ENABLE,
							TVP_DISABLE, 1, TVP_AUD_TONE_SF_48, 16, 32);
	#endif
#else
		//--------------------------------------------------
		// followings are some Magic Codes for Sundial Module
		//
		*(volatile ULONG *) 0x110008 = 0x10000000;
		
		*(volatile ULONG *) 0x110028 = 0x40;
		*(volatile ULONG *) 0x100058 = 0x8000;
		*(volatile ULONG *) 0x140030 = 0x10000000;	// was 0x04000000: max = 0x20000000
		*(volatile ULONG *) 0x14000C = 0x29;
		//--------------------------------------------------
#endif
}

/*******************************************************************************
*	@RoutineName:: TiDTV_AudioDecConfigHDMI
*
*	@Description:: Configure Audio Decoder for HDMI
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_AudioDecConfigHDMI(void)
{
	TiDTV_AudioAmpCtrl(0);	// turn OFF Audio AMP
	
	// stop Audio Decoder
	tvpAudCommand(TVP_AUD_HALT, TVP_AUD_MUTE);
	
	// Download the Tone algorithm for Analog Audio Input
	tvpAudAlgorithmDownload(TVP_AUD_TONE_GEN,
					tvpAudDefaultUCodeAddrGet(TVP_AUD_TONE_UCODE),
					tvpAudDefaultUCodeSizeGet(TVP_AUD_TONE_UCODE),
					tvpAudDefaultUCodeAddrGet(TVP_AUD_TONE_COEFFICIENT),
					tvpAudDefaultUCodeSizeGet(TVP_AUD_TONE_COEFFICIENT));
	
	tvpAudToneFrequency((TvpAudToneFreq) 0, TVP_AUD_TONE_SF_48);
	
	tvpAudCommand (TVP_AUD_PLAY, TVP_AUD_UNMUTE);
	
	//--------------------------------------------------
	// followings are some Magic Codes for Sundial Module
	//
//	*(volatile ULONG *) 0x110008 = 0x10000000;
	
	*(volatile ULONG *) 0x100058 = 0x8000;
//	*(volatile ULONG *) 0x140038 = 0x5000;
	*(volatile ULONG *) 0x14001C = 0xC00120;
	*(volatile ULONG *) 0x14000C = 0x29;
	
	*(volatile ULONG *) 0x140030 = 0x20400010;	// max = 0x20000000, 48KHz
//	*(volatile ULONG *) 0x140030 = 0x20410010;	// max = 0x20000000, 44.1KHz
//	*(volatile ULONG *) 0x140030 = 0x20420010;	// max = 0x20000000, 32KHz
}

/*******************************************************************************
*	@RoutineName:: TiDTV_SwitchAvInput
*
*	@Description:: switch TV Input: DTV/Tuner//Video/S-Video/Component
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_SwitchAvInput(void)
{
	int k;
	
	TiDTV_OsdVideoCtrl(0);	// disable Video Layer
	
	// DTVCC Initializations while TV Channel changed
	TiDTV_DtvCcChanChangeInit();
	
	TiDTV_DispCurTvChannel();	// Display current TV Channel
	
//----------------------------------------------------------
// Configure Audio/Video Processor
//
	switch (TiDTV_SysCtrl.AvInput) {
		case TI_DTV_AV_INPUT_DTV:	// D-TV
			// Configure Audio Decoder for DTV
			TiDTV_AudioDecConfigDTV();
			
			// Stop NTSC Video Module
			TiDTV_StopNV();
			
			// Change DTV RF Channel
			TiDTV_ChangeDtvRfChan(TiDTV_SysCtrl.CurPhyChanDTV, 0);
			break;
			
		case TI_DTV_AV_INPUT_A_VIDEO1:	// Analog TV Channels (Tuner)
			// Set to Analog TV Channel
			TiDTV_SetTunerPhyChan(TiDTV_SysCtrl.CurPhyChanATV);
			
		case TI_DTV_AV_INPUT_A_VIDEO2:	// Video (CVBS)
		case TI_DTV_AV_INPUT_A_SVIDEO:	// S-Video
		case TI_DTV_AV_INPUT_YPBPR1:	// Component-1
			// Configure Audio Decoder for ATV
			TiDTV_AudioDecConfigATV();
			
			TiDTV_ExtDvSel(TI_DTV_EXT_DV_TVP5160);	// select TVP5160
			
			// Video Decoder Channel selection
			TiDTV_VideoDecChanSel();
			
			// Start NTSC Video Module
			NvPictureFmtIdx = 0xff;
			TiDTV_ConfigNvIn(TI_DTV_NV_NTSC);
			
			switch (TiDTV_SysCtrl.AvInput) {
				case TI_DTV_AV_INPUT_A_VIDEO1:	// Analog TV Channels (Tuner)
					TiDTV_AudioSel(0);	// set Analog Switch for Audio
					break;
					
				case TI_DTV_AV_INPUT_A_VIDEO2:	// Video (CVBS)
				case TI_DTV_AV_INPUT_A_SVIDEO:	// S-Video
					TiDTV_AudioSel(1);	// set Analog Switch for Audio
					break;
					
				case TI_DTV_AV_INPUT_YPBPR1:	// Component-1
				default:
					TiDTV_AudioSel(2);	// set Analog Switch for Audio
					break;
			}
			break;
			
		case TI_DTV_AV_INPUT_HDMI:		// HDMI
			// Configure Audio Decoder for HDMI
			TiDTV_AudioDecConfigHDMI();
			
			TiDTV_ExtDvSel(TI_DTV_EXT_DV_HDMI);		// select HDMI
			
//			TiDTV_InitHDMI(TI_DTV_HDMI_YPBPR_1080I);
			TiDTV_InitHDMI(TI_DTV_HDMI_1080I);
			TiDTV_ConfigNvIn(TI_DTV_NV_1080I);
			break;
			
		case TI_DTV_AV_INPUT_YPBPR2:	// Component-2 (HDMI)
		case TI_DTV_AV_INPUT_VGA:		// VGA: PC
			break;
			
		default:
			break;
	}
	
	// Audio Volume Control
	k = TiDTV_SysCtrl.AudioVolume & 0x7f;	// k = 0 - 63
	tvpAudVolume(k, k, k, k, k, k);
	
	// start Audio Decoder
	tvpAudCommand(TVP_AUD_PLAY, TVP_AUD_UNMUTE);
	
	// CC Service control: Enable/Disable/On-Mute
	if (TiDTV_MenuTaskStatus() != OS_NO_ERR)
		TiDTV_CcServiceCtrl();
	
	if (TiDTV_SysCtrl.AvInput != TI_DTV_AV_INPUT_DTV)
		TiDTV_AudioAmpCtrl(1);	// turn ON Audio AMP
}

/*******************************************************************************
*	@RoutineName:: TiDTV_DispCurTvChannel
*
*	@Description:: Display current TV Channel
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_DispCurTvChannel(void)
{
	TI_DTV_PROGRAM_TABLE *pTiDTV_ProgTable;
	TI_DTV_PROGRAM_DEF	 *pProgDef;
	char *pWorkChar;
	
	// use Top Window
	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);
	switch (TiDTV_SysCtrl.AvInput) {
		case TI_DTV_AV_INPUT_DTV:		// Digital TV Channels
			pWorkChar = (char *) &(pTiDTV_AvInputMsg[TI_DTV_AV_INPUT_DTV][3]);
			
			pTiDTV_ProgTable = &TiDTV_ProgTable[TiDTV_SysCtrl.CurProgTableIdx];
			pProgDef = &(pTiDTV_ProgTable->ProgDef[TiDTV_SysCtrl.CurProgramIdx]);
			pWorkChar += TiDTV_MyInt2Str(pProgDef->MajorChanNo, pWorkChar, 0, 0);
			*pWorkChar++ = '-' ;
			pWorkChar += TiDTV_MyInt2Str(pProgDef->MinorChanNo, pWorkChar, 0, 0);
			*pWorkChar++ = ' ';
			*pWorkChar = '\0';
			
			TiDTV_OsdMove(&TiDTV_OsdScreenAux, TI_DTV_DISPLAY_SAFE_WIDTH -
						TI_DTV_AV_INPUT_CTRL_STRIDE * 8, TI_DTV_AV_INPUT_CTRL_Y);
			break;
			
		case TI_DTV_AV_INPUT_A_VIDEO1:	// Analog TV Channels
			pWorkChar = (char *) &(pTiDTV_AvInputMsg[TI_DTV_AV_INPUT_A_VIDEO1][3]);
			pWorkChar += TiDTV_MyInt2Str(TiDTV_SysCtrl.CurPhyChanATV, pWorkChar, 0, 0);
			*pWorkChar++ = ' ';
			*pWorkChar = '\0';
			
			TiDTV_OsdMove(&TiDTV_OsdScreenAux, TI_DTV_DISPLAY_SAFE_WIDTH -
						TI_DTV_AV_INPUT_CTRL_STRIDE * 8, TI_DTV_AV_INPUT_CTRL_Y);
			break;
			
		default:
			TiDTV_OsdMove(&TiDTV_OsdScreenAux, TI_DTV_DISPLAY_SAFE_WIDTH - TI_DTV_AV_INPUT_CTRL_STRIDE *
						strlen(pTiDTV_AvInputMsg[TiDTV_SysCtrl.AvInput]), TI_DTV_AV_INPUT_CTRL_Y);
			break;
	}
	
	TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, pTiDTV_AvInputMsg[TiDTV_SysCtrl.AvInput]);
}

/*******************************************************************************
*	@RoutineName:: TiDTV_DispChanInfo
*
*	@Description:: Display Channel Information
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_DispChanInfo(void)
{
	TI_DTV_PROGRAM_TABLE *pTiDTV_ProgTable;
	TI_DTV_PROGRAM_DEF	 *pProgDef;
	char *pWorkChar, WorkString[20];
	
	// use Top Window
	TiDTV_OsdClearWindow(&TiDTV_OsdScreenAux, TiDTV_OsdScreenAux.pCurDrawWindow, 0);
	TiDTV_OsdSetDrawWindow(&TiDTV_OsdScreenAux, &TiDTV_OsdScreenAux.pOsdWindows[0]);
	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenAux, TI_DTV_COLOR_BRIGHT_WHITE, 0);
	switch (TiDTV_SysCtrl.AvInput) {
		case TI_DTV_AV_INPUT_DTV:		// Digital TV Channels
			TiDTV_OsdRect(&TiDTV_OsdScreenAux, 10, 0, 650, 160, TI_DTV_G_BORDER | TI_DTV_G_OPAQUE,
						TI_DTV_COLOR_BRIGHT_WHITE, TI_DTV_COLOR_BLEND_BLUE, 0);
			
			TiDTV_OsdMove(&TiDTV_OsdScreenAux, 30, 20);		// the 1st Row
			TiDTV_GetLocalDateStr(WorkString, &TiDTV_SysDateTime);
			TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, WorkString);
			
			TiDTV_OsdMoveOffset(&TiDTV_OsdScreenAux, 30, 0);
			TiDTV_GetLocalTimeStr(WorkString, &TiDTV_SysDateTime);
			TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, WorkString);
			
			TiDTV_OsdMove(&TiDTV_OsdScreenAux, 30, 50);		// the 2nd Row
			TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, (char *) pTiDTV_GuiMsg[4]);
			
			TiDTV_OsdMoveOffset(&TiDTV_OsdScreenAux, 30, 0);
			pWorkChar = WorkString;
			pTiDTV_ProgTable = &TiDTV_ProgTable[TiDTV_SysCtrl.CurProgTableIdx];
			pProgDef = &(pTiDTV_ProgTable->ProgDef[TiDTV_SysCtrl.CurProgramIdx]);
			pWorkChar += TiDTV_MyInt2Str(pProgDef->MajorChanNo, pWorkChar, 0, 0);
			*pWorkChar++ = '-' ;
			pWorkChar += TiDTV_MyInt2Str(pProgDef->MinorChanNo, pWorkChar, 0, 0);
			*pWorkChar++ = ' ';
			strcpy(pWorkChar, (char *) pProgDef->ShortName);
			TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, WorkString);
			
			TiDTV_OsdMove(&TiDTV_OsdScreenAux, 30, 80);		// the 3rd Row
			pWorkChar = WorkString;
			pWorkChar += TiDTV_MyInt2Str(TiDTV_PictureInf.Width, pWorkChar, 0, 0);
			*pWorkChar++ = '*';
			pWorkChar += TiDTV_MyInt2Str(TiDTV_PictureInf.Height, pWorkChar, 0, 0);
			*pWorkChar++ = ' ';
			*pWorkChar++ = '(';
			strcpy(pWorkChar, pTiDTV_FrameRate[TiDTV_PictureInf.FrameRate - 1]);
			pWorkChar = WorkString + strlen(WorkString);
			if (TiDTV_PictureInf.ProgressiveFlag)
				*pWorkChar++ = 'p';
			else
				*pWorkChar++ = 'i';
			*pWorkChar++ = ')';
			*pWorkChar = '\0';
			TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, WorkString);
			
			TiDTV_OsdMoveOffset(&TiDTV_OsdScreenAux, 30, 0);
			pWorkChar = (char *) pProgDef->AudioDef[TiDTV_SysCtrl.CurAudioIdx].LanguageCode;
			TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, pWorkChar);
			break;
			
		default:
			break;
	}
}

/*******************************************************************************
*	@RoutineName:: TiDTV_AudioVolumeCtrl

⌨️ 快捷键说明

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