📄 tidtv_guiapi.c
字号:
/*******************************************************************************
* @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 + -