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