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