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

📄 osdmenu.c

📁 此程序为twell8806驱动程序
💻 C
📖 第 1 页 / 共 4 页
字号:
									ClearAutoAdjust();
									LCDPowerON(0);	//HHY 1.63*/
									break;
		/*case AUTOADJUST2:			ret = DetectAndSetForVGAInput(2);
									LCDPowerON(0);	//HHY 1.63
									SetOSDLastKeyInTime();
									ClearCursor();
									cursor_item = 0;
									DisplayCursor();		
									break;*/
		case RESET_PCVALUE:			ClearOSDInfo();
									ResetPanelAttributeValue();
									ResetPCValue();
									ResetOSDValue();
									ResetAudioValue();
									break;
	
		case PCCOLORADJUST:			//AutoColorAdjust(1);
									break;
		#endif
		
		
		case RESET_VIDEOVALUE:		ClearOSDInfo();
									ResetVideoValue();
									ResetOSDValue();
									ResetAudioValue();
									break;
		#ifdef SUPPORT_TV
		case SCAN_CHANNEL:			ClearOSDInfo();
									DisplayScanTV();		
									delay(50);				//protect for repeat key
									ScanTVChannel();
									ClearScanTV();			
									break;
	
		#ifdef PAL_TV
		case EDIT_CHANNEL:			ChannelEdit_Window();
									ChannelEdit_Flag = 1;
									break;
		#endif
	
	/*	case MTS_STEREO:
		case MTS_MONO:				SetMTSType(id);
									break;
		case CHANGEINPUTSTD:			
									i = GetInputSelection();
									if( i==TV ) 
										ChangeVInputStdDetectMode(val);
	*/
		
		#endif
	
	//----
		#ifdef SUPPORT_CCD_VCHIP
		case TV_GUIDE:				val_index=0x80; // xxxxx xxx : ALL(1)/FV(0)/V(0)/S(0)/L(0)/D(0)  level:0
									Display_TVGuide_Window();
									VchipWindow_On = 1;
									break;
		#endif
		case DISP_INFO:				DisplayInfo_OSD();	
									displayOnValueWindow = 1;
									break;
	
		case TOHIGHMENU:			OSDHighMenu_sub();						
									break;
	
		case EXITMENU:				CloseOSDMenu();	
									if( DisplayInputHold ) DisplayInput();
									else if( IsAudioMuteOn() ) DisplayMuteInfo();
									#ifdef SUPPORT_CCD_VCHIP
									else if( IsBlock_On() ) DisplayBlockedTVRating();
									else	
										InitClosedCaption();
									#endif
									break;
		}
		return ret;
}


BYTE GetNextCursorMenuItem( CODE_P struct DefineMenu *DMp, BYTE itemno, BYTE flag)
{
	BYTE new_cursor;

	switch( flag ) 
	{
	case UP:	new_cursor = GetUpperMenuItem( /*DMp,*/ itemno );		break;
	case DN:	new_cursor = GetLowerMenuItem( DMp, itemno );		break;
	}
	return new_cursor;
}

//============== Public functions =================================================
//CODE BYTE TryAgainMsg[]={ "Try again."};

BYTE SaveValue1(void)
{


	switch( MenuChild[cursor_item].Type )	
	{
	
		/*	case TIME:
							#ifdef SUPPORT_TV
							switch ( MenuChild[cursor_item].Id ) {
							case SYSTEM_CLOCK:		RestartSystemClock(OSDItemValue);	
													SetOSDLastKeyInTime();
													return 1;	//break;
							case WAKEUP_TIME:		SetWakeupTime(OSDItemValue);	
													return 1;	//break;
							case OFF_TIME:			SetOffTime(OSDItemValue);		
													return 1;	//break;
				
							}
							#endif			// SUPPORT_TV 
							//ret = 1;
							break;
		*/	
			case NUMBER:
					       	switch ( MenuChild[cursor_item].Id ) 
							{
				
							case SLEEP_TIMER:		SetSleepTimer( OSDItemValue );	
													return 1;	//break;
				
					       	 /*#ifdef SUPPORT_TV
				
							case WAKEUP_PR:			SetWakeupPR( OSDItemValue );	
													return 1;	//break;
				
				             */
							//#endif
							}
							//ret = 1;
							break;
			
			#ifdef SUPPORT_CCD_VCHIP
			case NUMBER_STRING:
							switch ( MenuChild[cursor_item].Id ) 
							{
							case NEW_PASSWORD:	SetNewPassword(OSDNumberString, val_index);	
												ClearDataCnt( OSDMENU_SUBADDR + 4*MENU_WIDTH,  MENU_WIDTH);
												return 1;
							}
							break;
			#endif // SUPPORT_CCD_VCHIP
			default:	break;
	}

	return 0;	
}

void ClearValueWin(void)
{
	SaveValue1();
	//ShowOSDWindow(OSDBARWINDOW, FALSE);
	val_osdwin = 0xff;
	OnChangingValue = 0;
}

void OSDCursorMove(BYTE flag )
{
	BYTE new_cursor, old_cursor;
	WORD dat;


		if(displayOnValueWindow == 1) return; 
		#ifdef SUPPORT_CCD_VCHIP
		if(VchipWindow_On==1) return;
		if(VchipCheckingOnPass_Flag == 1 ) return;
		#endif

		#ifdef PAL_TV
		if( ChannelEdit_Flag ) return;
		#endif
		if( MenuChild[ cursor_item ].Id == PC_COLOR_TEMP && GetPCColorTempModeEE() != 3 ) return; // User
		if( MenuChild[ cursor_item ].Id == VIDEO_MODE && GetVideoModeEE() != 3 ) return; // User

		new_cursor = GetNextCursorMenuItem( MenuChild, cursor_item, flag );	// Get item to move
		
		if( new_cursor ==NIL ) 
		{		
			BYTE i;
			if( flag == UP )
				for(i=0; i<8; )
				{
					new_cursor=i;
					if( (i=GetLowerMenuItem(MenuChild, i) ) == NIL) break;
					
				}
				//new_cursor = MenuFormat->height - 1;
			else
				new_cursor = 0;
		}

		if( OnChangingValue )	
		{
			ClearValueWin();
		}
		if( OSDMenuLevel != 1) ClearCursor();

		old_cursor = cursor_item;
		cursor_item = new_cursor;
		if(OSDMenuLevel == 1)
		{ 
			WaitEndofDisplayArea();	
			dat = GetOSDWindowY(OSDCURSORWINDOW);
			dat += (cursor_item-old_cursor)*(0x0a);
			SetOSDWindowY_TW88(OSDCURSORWINDOW,dat);
			WriteDecoder(TW88_WINNUM, OSDCURSORWINDOW-1);
			WriteDecoder(TW88_WINSADDRLO, cursor_item*2);	

			DisplayOSDMenu();

		}
		else 	
		{
	
		if( MenuChild[ old_cursor ].Id == OSDLANG)
				DrawMenulist(0); //		Recover Attr. and menu Data list
			DisplayCursor();
		}
}

void OSDValueUpDn(BYTE flag)
{
	CODE_P BYTE *ptr;
	WORD val;
	WORD addr;
//	BYTE len1;

	addr = OSDMENU_SUBADDR;
	addr = addr + MAX_DESC + (cursor_item+1)*MenuFormat->width;

	switch ( MenuChild[cursor_item].Type ) 
	{
	
	case BAR:	
				val = SetItemValue(MenuChild[cursor_item].Id, flag );
				DisplayViewBar( addr, val);
				break;
	
	case NUMBER:
				ptr = MenuChild[cursor_item].TypeData;
				switch ( MenuChild[cursor_item].Id )
				 {

					#ifdef PAL_TV	//-----------------------------------------------
					case MANUAL_TUNE_CHANNEL:
							ManualTune(flag);
							break;
					#endif					//-----------------------------------------------
					default:
							val = SetItemValue(MenuChild[cursor_item].Id, flag);
							DrawNum( addr, (CODE_P struct NumType *)ptr, val );
							break;
				}
				
				break;
	/*case TIME:
				//tptr = (CODE_P struct TimeType *)MenuChild[cursor_item].TypeData;
				//val = SetItemValue( (val_index==HOUR ? MenuChild[cursor_item].Id + 1 : MenuChild[cursor_item].Id ) , flag);
				//if( val_index == HOUR )
				//	DrawTime( val, tptr->CursorColor, tptr->TimeColor);
				//else
				//	DrawTime( val, tptr->TimeColor,   tptr->CursorColor);

				
				ptr = MenuChild[cursor_item].TypeData;
				val = SetItemValue( (val_index==HOUR ? MenuChild[cursor_item].Id + 1 : MenuChild[cursor_item].Id ) , flag);
				if( val_index == HOUR )
					DrawTime( val, 
					((CODE_P struct TimeType *)ptr)->CursorColor, 
					((CODE_P struct TimeType *)ptr)->TimeColor);
				else
					DrawTime( val, 
					((CODE_P struct TimeType *)ptr)->TimeColor,   
					((CODE_P struct TimeType *)ptr)->CursorColor);
				break;
	*/
	case ENUM_STRING:
				ptr = MenuChild[cursor_item].TypeData;
				val = SetItemValue( MenuChild[cursor_item].Id , flag);
				DrawStringByLang( addr, (CODE_P struct EnumType *)ptr, val );
				break;
	
	default:	break;
	}
}

BYTE CloseOSDMenu(void)
{
	BYTE i;
	extern CODE BYTE *OutOfRangeStr[] ;
	extern IDATA BYTE PcMode;

	ShowOSDWindowAll(0);  // TW8806B

	//ClearOSD();
	WaitEndofDisplayArea();	
	for (i=OSDCURSORWINDOW; i<=OSDMENU_TITLEWIN ;i++ )
	{
		SetOSDWindowNum(i);
		WriteDecoder(TW88_WINATTR, 0x00);
	}

	ClearDisplayedOSD (MENU);
	#ifdef SUPPORT_CCD_VCHIP
	VchipWindow_On = 0;
	#endif

#ifdef SUPPORT_PC
	// If PC mode is unknown, display outof range	// HHY 7/25/05
	if( GetInputSelection()==PC || GetInputSelection()==DTV )
	 {
		if( PcMode==EE_PC_UNKNOWN ) 
		{
			//DisplayPCInfo(OutOfRangeStr[GetOSDLang()]);
			ShowOSDWindow(PCINFO_OSDWIN,TRUE);
			ShowOSDWindowAll(1);
			SetDisplayedOSD(PCINFO);
		}
	}
#endif //

	return 1;
}
#ifdef SUPPORT_OSDPOSITIONMOVE
void InitOSDMenuXY(void)
{
	int val, addx, addy;
	BYTE winno;

	addx = OSDMenuX - OSDMenuXRange.Default;
	addy = OSDMenuY - OSDMenuYRange.Default;

	for( winno=OSDCURSORWINDOW; winno<=OSDMENU_TITLEWIN; winno++) 
	{

		val = GetOSDWindowX( winno );
		SetOSDWindowX(winno,val+addx);

		val = GetOSDWindowY( winno );
		SetOSDWindowY(winno,val+addy);
	}
}
#endif
void OpenOSDMenu(void)
{
	BYTE i;

	ClearOSDInfo();
	#ifdef SUPPORT_CCD_VCHIP
	if(( GetDisplayedOSD() & CC )||( GetDisplayedOSD() & RATINGINFO))
	{
		ClearBlockedInput();
		ClearClosedCaption();
	}
	else
	#endif
	{ // TW8806 
		InitOSDMenu();		// reset OSD window and prepare menu
		Change_OSDColorLookup();
	}

	for(i=OSDCURSORWINDOW; i<=OSDMENU_TITLEWIN; i++) 
	{
		ShowOSDWindow_TW88(i,TRUE);
	}

	ShowOSDWindowAll(1);
	SetDisplayedOSD( MENU );

}

void InitOSDMenu()
{
	extern CODE BYTE OSDPOSITIONMODE_TABLE[][2] ;
	BYTE i=0;

	OSDLang = GetOSDLangEE();

	switch( GetInputSelection() ) 
	{
		#ifdef SUPPORT_TV
		case TV:	MenuTitle = DefaultMenu;	break;
		#endif
	
		#ifdef SUPPORT_PC
		case PC:	MenuTitle = PCMenu;			break;
		#endif
	
		//#ifdef SUPPORT_DTV
		//case DTV:	MenuTitle = DTVMenu;		break;
		//#endif 
	
		default:	MenuTitle = DefaultMenu;	break;
	}

	MenuSP = 0;								// Clear stack of menu.
	title_item = 0;
	MenuFormat = ( CODE_P struct MenuType *) MenuTitle[title_item].TypeData;

	OSDMenuLevel = 1; // OSD menu tree level
	cur_osdwin = OSDMENU_TOPWIN;

	MenuChild = MenuTitle[title_item].Child;
	cursor_item = 0;
	
	val_osdwin = 0xff;
	val_index = 0;
	OnChangingValue = 0;

	//--- OSD Window Initialization
	#ifdef ADD_ANALOGPANEL
	if(IsAnalogOn())
		InitOSDWindow(Init_Osd_MainMenu_A);
	else	
	#endif
	InitOSDWindow(Init_Osd_MainMenu);  // Define Window Top(4), Sub(3), Bar(2), Cursor(1) 

	//--- Positioning 
	#ifdef SUPPORT_OSDPOSITIONMOVE
	i = GetOSDPositionModeEE();

	OSDMenuX = OSDPOSITIONMODE_TABLE[i][0];
	OSDMenuY = OSDPOSITIONMODE_TABLE[i][1];

	InitOSDMenuXY();	 // Default + Saved OSD Position
	#endif

	//--- Display OSD Menu
	DisplayOSDMenu(); 
}


void OSDHighMenu(void)
{
	if( OnChangingValue )
	{
		//OnChangingValue = 0;
		ClearValueWin();
//		DisplayCursor();
		DrawMenulist(0); //		Recover Attr. and menu Data list
		DisplayCursor();

		return;
	}

	//if( displayOnValueWindow == 1)
	//{ 
		displayOnValueWindow = 0;
		#ifdef SUPPORT_CCD_VCHIP
		if( VchipWindow_On )
		{
			VchipWindow_On = 0;
			DrawAttrCnt(OSDMENU_SUBADDR+TITLE_MAX_DESC, DEFAULT_COLOR, MENU_HEIGHT*MENU_WIDTH );	// Clear color
			DisplayOSDMenu();

		}
		VchipCheckingOnPass_Flag = 0;
		#endif

		#ifdef PAL_TV
		if( ChannelEdit_Flag == 1 )
		{	// Recover Menu from Channel Edit 
			BYTE i;
			CODE_P BYTE *Str ;

			DrawAttrCnt(OSDMENU_SUBADDR+MENU_WIDTH, DEFAULT_COLOR, MENU_HEIGHT*MENU_WIDTH );	// Clear color
			ChannelEdit_Flag = 0;
			ChannelEdit_on = 0;

			Str = Str_Comments[OSDLang];
			i=strlen(Str);
			WriteStringToAddr(OSDMENU_SUBADDR+TITLE_MAX_DESC*8, Str, i);
			DrawAttrCnt(OSDMENU_SUBADDR+TITLE_MAX_DESC*8, COMMENT_COLOR, MENU_HEIGHT );	// Clear color
		}
		#endif
	//	DisplayOSDMenu();
	//	return;
	//}

	DoAction(MenuChild[cursor_item].PostFnId); // When exiting from the previous menu, Use to need some of action.

	if( OSDMenuLevel != 1) ClearCursor();
	OSDHighMenu_sub();
	
}


void OSDSelect(void)
{
	BYTE ret;
	WORD addr;

	if( cursor_item==NIL )			return;
	if( MenuChild[ cursor_item ].Id == TVINSTALL && GetInputSelection()!= TV )return;

	if( MenuChild[ cursor_item ].Id == VIDEO_HUE && ReadVInputSTD()!= NTSC && ReadVInputSTD()!= NTSC4 )  		return;
	//if( MenuChild[ cursor_item ].Id == VIDEO_SHARPNESS && GetInputSelection()== SCART )  		return;

	//do  {
		ret = DoAction(MenuChild[cursor_item].PreFnId);
		if(!ret) return;

		switch ( MenuChild[ cursor_item ].Type ) 
		{
				case ACTION:
								DoAction(MenuChild[cursor_item].Id); // Action.
								return;
		
				case ENUM_STRING:		
				case BAR:
								OnChangingValue = 1; // Value changable label on 				
								DisplayCursor();	//Display Setect Item cursor
								GetItemValue(MenuChild[cursor_item].Id);
								return;
								
				case NUMBER:	
								OnChangingValue = 1;
		
								switch ( MenuChild[cursor_item].Id ) {
		#ifdef SUPPORT_TV
								#if defined( PAL_TV )
								case MANUAL_TUNE_CHANNEL:
										ShowOSDWindow(OSDMENU_TOPWIN, FALSE); // Top(4)/Menu(3)/Top_Cursor(1) Window Off
										ShowOSDWindow(OSDMENUWINDOW, FALSE);
										ShowOSDWindow(OSDCURSORWINDOW, FALSE);
										ShowOSDWindow(OSDMENU_TITLEWIN, FALSE) ;
										DisplayScanTV();		
								//delay(50);				
								break;
								#endif

⌨️ 快捷键说明

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