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

📄 tidtv_guiapi.c

📁 ti的数字电视芯片 tvp9000的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
*
*	@Description:: Audio Volume Control
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
static void TiDTV_AudioVolumeCtrl(void)
{
	UCHAR Color;
	short k = TiDTV_SysCtrl.AudioVolume;
	
	if (TiDTV_KeyBuf.CurKeyCodePromptMsg != TI_DTV_IR_KEY_VOL_UP &&
		TiDTV_KeyBuf.CurKeyCodePromptMsg != TI_DTV_IR_KEY_VOL_DOWN)
	{
		// 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_OsdDrawIcon(&TiDTV_OsdScreenAux, TI_DTV_CHAR_SET_ICON + 5);
		
		TiDTV_OsdRect(&TiDTV_OsdScreenAux, TI_DTV_AUDIO_CTRL_X - 10, TI_DTV_AUDIO_CTRL_Y - 5,
					TI_DTV_AUDIO_CTRL_W + 10 * 2, TI_DTV_AUDIO_CTRL_H + 5 * 2,
					TI_DTV_G_BORDER | TI_DTV_G_OPAQUE, TI_DTV_COLOR_BRIGHT_CYAN,
					TI_DTV_COLOR_BLEND_BLACK, 0);
		k = TiDTV_SysCtrl.AudioVolume & 0x7F;
		TiDTV_OsdSolidRect(&TiDTV_OsdScreenAux, TI_DTV_AUDIO_CTRL_X, TI_DTV_AUDIO_CTRL_Y,
					(TVP_AUD_MAX_ATTEN - k + 1) * TI_DTV_AUDIO_CTRL_STRIDE,
					TI_DTV_AUDIO_CTRL_H, TI_DTV_COLOR_BRIGHT_GREEN);
		return;
	}
	
	//----------------------------------------------------------
	// Enable repeat Scan Key through (uC/OS-II tick timer)
	//
	TiDTV_KeyRptScan(OS_TICKS_PER_SEC, OS_TICKS_PER_SEC / 10);
	
	if (TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_VOL_UP) {
		if (--k < 0)
			k = 0;
	} else {
		if (++k > TVP_AUD_MAX_ATTEN)
			k = TVP_AUD_MAX_ATTEN;
	}
	
	if (TiDTV_SysCtrl.AudioVolume != (UCHAR) k) {
		TiDTV_SysCtrl.AudioVolume = (UCHAR) k;
		tvpAudVolume(k, k, k, k, k, k);
		
		if (TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_VOL_UP) {
			Color = TI_DTV_COLOR_BRIGHT_GREEN;
		} else {
			Color = TI_DTV_COLOR_BLEND_BLACK;
			k--;
		}
		TiDTV_OsdSolidRect(&TiDTV_OsdScreenAux, TI_DTV_AUDIO_CTRL_X + (TVP_AUD_MAX_ATTEN - k) * TI_DTV_AUDIO_CTRL_STRIDE, TI_DTV_AUDIO_CTRL_Y,
					TI_DTV_AUDIO_CTRL_STRIDE, TI_DTV_AUDIO_CTRL_H, Color);
	}
}

/*******************************************************************************
*	@RoutineName:: TiDTV_ProcIrKeyCC
*
*	@Description:: Process IR Key - CC
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
static void TiDTV_ProcIrKeyCC(void)
{
	UCHAR Color;
	
	if (TiDTV_MenuTaskStatus() == OS_NO_ERR)
		return;	// if Menu Handling Task is Running, then ignore this Key Strobe
	
	if (++TiDTV_CcCtrl.DispCtrl >= TI_DTV_MAX_NUM_CC_CTRL)
		TiDTV_CcCtrl.DispCtrl = 0;
	
	// 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);
	
	if (TiDTV_CcCtrl.DispCtrl == TI_DTV_CC_DISABLE) {
		// CC is disabled
		Color = TI_DTV_COLOR_BRIGHT_RED;
	} else {
		// CC is enabled
		Color = TI_DTV_COLOR_BRIGHT_GREEN;
	}
	
	TiDTV_OsdSetCharColor(&TiDTV_OsdScreenAux, Color, TI_DTV_COLOR_BLEND_BLACK);
	TiDTV_OsdDrawAsciiStr(&TiDTV_OsdScreenAux, (char *) pTiDTV_GuiMsg[TiDTV_CcCtrl.DispCtrl]);
	
	// CC Service control: Enable/Disable/On-Mute
	TiDTV_CcServiceCtrl();
}

/*******************************************************************************
*	@RoutineName:: TiDTV_CcServiceCtrl
*
*	@Description:: CC Service control: Disable/Enable/On-Mute
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_CcServiceCtrl(void)
{
	switch (TiDTV_CcCtrl.DispCtrl) {
		case TI_DTV_CC_DISABLE:		// Disable
			TiDTV_SetCc608Service(0, 0);		// Disable CC608
			TiDTV_DtvCcSetService(0);			// Disable CC708
			break;
			
		case TI_DTV_CC_ON_MUTE:		// On-mute
			if ((TiDTV_SysCtrl.AudioVolume & 0x80) == 0) {
				TiDTV_SetCc608Service(0, 0);	// Disable CC608
				TiDTV_DtvCcSetService(0);		// Disable CC708
				break;
			}
			
		case TI_DTV_CC_ENABLE:		// Enable
			if (TiDTV_SysCtrl.AvInput == TI_DTV_AV_INPUT_DTV) {
				// D-TV: Enable DTV-CC and NTSC-CC
				TiDTV_SetCc608Service(0, 0);	// Disable CC608
				TiDTV_DtvCcSetService(TiDTV_CcCtrl.Cc708SvcNo);
			} else {
				// A-TV: Enable NTSC-CC and Disable DTV-CC
				TiDTV_DtvCcSetService(0);		// Disable CC708
				TiDTV_SetCc608Service(TiDTV_CcCtrl.Cc608SvcNo, 0);
			}
			break;
			
		default:
			break;	// error
	}
}

/*******************************************************************************
*	@RoutineName:: TiDTV_ProcIrKeyChanUpDown
*
*	@Description:: Process IR Key - Chan-up/Chan-down
*
*	@Input		:: none
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
static void TiDTV_ProcIrKeyChanUpDown(void)
{
	// Enable repeat Scan Key through (uC/OS-II tick timer)
	TiDTV_KeyRptScan(OS_TICKS_PER_SEC, OS_TICKS_PER_SEC / 5);
	
	// DTVCC Initializations while TV Channel changed
	TiDTV_DtvCcChanChangeInit();
	
	if (TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_CH_UP)
		TiDTV_TvChanUp();		// Channel Up (++)
	else
		TiDTV_TvChanDown();		// Channel Down (--)
	
	TiDTV_DispCurTvChannel();	// Display current TV Channel
}

/*******************************************************************************
*	@RoutineName:: TiDTV_GetLocalDateStr
*
*	@Description:: Get current local date string
*
*	@Input		::
*		char *pDateStr	: pointer to the Locate Date String (Friday, 07/15/2005)
*		TI_DTV_SYS_DATE_TIME *pSysDateTime	: pointer to Local Time
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_GetLocalDateStr(char *pDateStr, TI_DTV_SYS_DATE_TIME *pSysDateTime)
{
	char *pWorkChar = pDateStr;
	
	// Week day
	strcpy(pWorkChar, pTiDTV_WeekDayName[pSysDateTime->WeekDay]);
	pWorkChar += strlen(pWorkChar);
	*pWorkChar++ = ',';
	
	// Month
	pWorkChar += TiDTV_MyInt2Str(pSysDateTime->Month, pWorkChar, 2, '0');
	*pWorkChar++ = '/';
	
	// Day
	pWorkChar += TiDTV_MyInt2Str(pSysDateTime->Day, pWorkChar, 2, '0');
	*pWorkChar++ = '/';
	
	// Year
	pWorkChar += TiDTV_MyInt2Str(pSysDateTime->Year, pWorkChar, 4, '0');
	*pWorkChar = '\0';
}

/*******************************************************************************
*	@RoutineName:: TiDTV_GetLocalTimeStr
*
*	@Description:: Get current local dtime string
*
*	@Input		::
*		char *pTimeStr	: pointer to the Locate Time String (00:00:00)
*		TI_DTV_SYS_DATE_TIME *pSysDateTime	: pointer to Local Time
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_GetLocalTimeStr(char *pTimeStr, TI_DTV_SYS_DATE_TIME *pSysDateTime)
{
	char *pWorkChar = pTimeStr;
	
	// Hour
	pWorkChar += TiDTV_MyInt2Str(pSysDateTime->Hour, pWorkChar, 2, '0');
	*pWorkChar++ = ':';
	
	// Minute
	pWorkChar += TiDTV_MyInt2Str(pSysDateTime->Minute, pWorkChar, 2, '0');
	*pWorkChar++ = ':';
	
	// Second
	pWorkChar += TiDTV_MyInt2Str(pSysDateTime->Second, pWorkChar, 2, '0');
	*pWorkChar = '\0';
}

/*******************************************************************************
*	@RoutineName:: TiDTV_CheckDigitKeyBuf
*
*	@Description:: Check Digits Key Buffer
*
*	@Input		::
*		int Flag	: Flag for Checking Digits Key Buffer: 0 = Unconditional
*
*	@Output		:: none
*
*	@Return		:: none
*******************************************************************************/
void TiDTV_CheckDigitKeyBuf(int Flag)
{
	TI_DTV_PROGRAM_TABLE *pProgTable;
	TI_DTV_PROGRAM_DEF	 *pProgDef;
	UINT16 MajorChanNo, MinorChanNo;
	char *pWorkChar = TiDTV_KeyBuf.DigitKeyBuf;
	int i, ProgTableIndx;
	
	switch (TiDTV_SysCtrl.AvInput) {
		case TI_DTV_AV_INPUT_DTV:		// Digital TV Channels
			if ((Flag == 0 && TiDTV_KeyBuf.NumDigitKey > 0) ||
				TiDTV_KeyBuf.NumDigitKey == 6 ||
				(TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_SELECT &&
				TiDTV_KeyBuf.NumDigitKey > 0))
			{
				MajorChanNo = atoi(pWorkChar);
				pWorkChar = strchr(pWorkChar, '-');
				if (pWorkChar != NULL)
					MinorChanNo = atoi(pWorkChar + 1);
				else
					MinorChanNo = 0xffff;
				TiDTV_KeyBuf.NumDigitKey = 0;	// reset number of Digits Key
				
				ProgTableIndx = TiDTV_GetProgIndexViaMajorChanNo(MajorChanNo);
				if (ProgTableIndx < 0)
					break;
				
				pProgTable = &(TiDTV_ProgTable[ProgTableIndx]);
				pProgDef = pProgTable->ProgDef;
				for (i = 0; i < pProgTable->TotalNumProg; i++, pProgDef++) {
					if (MinorChanNo == pProgDef->MinorChanNo)
						break;
				}
				
				if (i >= pProgTable->TotalNumProg) {
					i = 0;
					pProgDef = pProgTable->ProgDef;
				}
				
				// save current Program Table Index, and set the new Index
				TiDTV_SysCtrl.PreviousProgTableIdx = TiDTV_SysCtrl.CurProgTableIdx;
				TiDTV_SysCtrl.CurProgTableIdx = ProgTableIndx;
				TiDTV_SysCtrl.PreviousProgramIdx = TiDTV_SysCtrl.CurProgramIdx;
				TiDTV_SysCtrl.CurProgramIdx = i;
				TiDTV_SysCtrl.CurPhyChanDTV = pProgTable->RfChanNo;		// Physical TV Channel number
				TiDTV_ChangeDtvRfChan(TiDTV_SysCtrl.CurPhyChanDTV, 0);
			}
			break;
			
		case TI_DTV_AV_INPUT_A_VIDEO1:	// Analog TV Channels
			if ((Flag == 0 && TiDTV_KeyBuf.NumDigitKey > 0) ||
				TiDTV_KeyBuf.NumDigitKey == 3 ||
				(TiDTV_KeyBuf.CurKeyCode == TI_DTV_IR_KEY_SELECT &&
				TiDTV_KeyBuf.NumDigitKey > 0))
			{
				MajorChanNo = atoi(pWorkChar);
				
				if (MajorChanNo >= TI_DTV_MIN_PHY_CHANNEL_NO &&
					MajorChanNo <= TI_DTV_MAX_PHY_CHANNEL_NO)
				{
					// Set to Analog TV Channel
					TiDTV_SysCtrl.PreviousPhyChanATV = TiDTV_SysCtrl.CurPhyChanATV;
					TiDTV_SysCtrl.CurPhyChanATV = MajorChanNo;
					TiDTV_SetTunerPhyChan(TiDTV_SysCtrl.CurPhyChanATV);
				}
			}
			break;
			
		default:
			break;
	}
}

⌨️ 快捷键说明

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