📄 menu.c
字号:
#include <stdlib.h>
#include <string.h>
#include "types.h"
#include "board.h"
#include "global.h"
#include "keypaddef.h"
#include "menudef.h"
#include "keypad.h"
#include "ms_rwreg.h"
#include "msosd.h"
#include "menufunc.h"
#include "menustr.h"
#include "menutbl.h"
#include "ms_reg.h"
#include "debug.h"
#include "misc.h"
#include "nvram.h"
#include "adjust.h"
#include "userpref.h"
#include "mstar.h"
#define menuDebug 1
#if menuDebug
#define Out_i printData
#define Out_s printMsg
#else
#define Out_i
#define Out_s
#endif
#define CurrentMenu tblMenus[MenuPageIndex]
#define PrevMenuPage CurrentMenu.PrevPage
#define CurrentMenuItems CurrentMenu.MenuItems
#define MenuItemCount CurrentMenu.ItemCount
#define CurrentMenuItem CurrentMenu.MenuItems[MenuItemIndex]
#define NextMenuPage CurrentMenuItem.NextPage
#define CurrentMenuItemFunc CurrentMenuItem.KeyFunction
#define KeyEvent CurrentMenuItem.KeyEvents[KeypadButton]
//========================================================================
//========================================================================
//========================================================================
//========================================================================
BYTE code tSpace13[]=
{//12345678901234567890
" "
};
BYTE code tSpace19[]=
{//123456789012345678901234567890
" "
};
BYTE code tSpace27[]=
{//123456789012345678901234567890
" "
};
BYTE code tSpace28[]=
{//123456789012345678901234567890
" "
};
BYTE code tSpace30[]=
{//123456789012345678901234567890
" "
};
BYTE code tSpace1[]=
{//12345678901234567890
" "
};
BYTE code tSpace2[]=
{//12345678901234567890
" "
};
BYTE code tSpace3[]=
{//12345678901234567890
" "
};
BYTE code tSpace6[]=
{//12345678901234567890
" "
};
BYTE code frame_up[]=
{"\xB1"
};
BYTE code frame_left[]=
{"\xB2"
};
BYTE code frame_down[]=
{"\xB3"
};
BYTE code frame_right[]=
{"\xB4"
};
BYTE code frame_up_left[]=
{"\xB5"
};
BYTE code frame_down_left[]=
{"\xB6"
};
BYTE code frame_down_right[]=
{"\xB7"
};
BYTE code frame_up_right[]=
{"\xB8"
};
//========================================================================
BYTE MenuPageIndex=0;
BYTE MenuItemIndex=0;
BYTE TurboKeyCounter=0;
BYTE MenuItemPrevIndex=0;
//========================================================================
void SaveUserPrefSetting(BYTE menuPageIndex);
BYTE GetMenuItemIndex(BYTE menuPageIndex);
BYTE GetPrevItem(MenuItemType *menuItem);
BYTE GetNextItem(MenuItemType *menuItem);
Bool ExecuteKeyEvent(MenuItemActionType menuAction);
void DrawOsdMenu(void);
void DrawOsdMenuItem(BYTE drawIndex, MenuItemType *menuItem);
void DrawOsdMenuItemText(BYTE itemIndex, MenuItemType *menuItem);
void DrawOsdMenuItemValue(BYTE itemIndex, DrawValueType *valueItem);
void DrawOsdMenuItemNumberGuage(BYTE itemIndex, DrawNumberType *mumberItem);
void DrawOsdMenuItemNumber(BYTE itemIndex, DrawNumberType *numberItem);
void DrawOsdMenuItemGuage(BYTE itemIndex, DrawGaugeType *guageItem);
void DrawOsdMenuItemRadioGroup(BYTE itemIndex, DrawRadioGroupType *RadioItem);
void DrawTimingInfo(void);
void DrawModeInfo(void);
void DrawOutOfRangeInfo(void);
void SaveFactorySetting(BYTE itemIndex);
extern void ShowBurninTime(void);
void Menu_InitVariable(void)
{ MenuPageIndex=RootMenu;
MenuItemIndex=0;
OsdCounter=0;
if (!PowerOnFlag)
MenuPageIndex=PowerOffMenu;
}
void Menu_InitAction(void)
{ MenuItemIndex=0;
/*
if (BurninModeFlag)
{
mStar_SetupFreeRunMode();
mStar_WriteByte(FWC, 1);
Set_BurninModeFlag();
}
*/
if (BurninModeFlag)
{
if(SyncLossState())
{
Osd_Hide();
mStar_SetupFreeRunMode();
mStar_WriteByte(FWC, 1);
Set_BurninModeFlag();
Set_DoBurninModeFlag();
G_BurninTimeHour=0;
G_BurninTimeMin=0;
Second=0;
}
else
{
Clr_BurninModeFlag();
NVRam_WriteByte(nvrMonitorAddr(MonitorFlag), MonitorFlags);
}
}
else if (SyncLossState())
{ HVSyncLoss=mStar_ReadByte(STATUS2);
Out_i("HVSyncLoss = %d", HVSyncLoss);
HVSyncLoss = HVSyncLoss & 0xC0;
if (!HVSyncLoss)//(CableNotConnectedFlag)
MenuPageIndex=CableNotConnectedMenu;
else
MenuPageIndex=StandbyMenu;
}
else if (UnsupportedModeFlag)
{ MenuPageIndex=UnsupportedModeMenu;
}
else if ((UserPrefAutoTimes==0)
&&(!((SrcModeIndex==2)||(SrcModeIndex==4)/*||(SrcModeIndex==0)*/) ) )
//barry1117 Dos Mode don't auto
MenuPageIndex=AutoMenu;
else
MenuPageIndex=RootMenu;
OsdCounter=0;
PowerDownCounter=0;
Clr_HighlightFlag();
ExecuteKeyEvent(MIA_RedrawMenu);
NVRam_WriteByte(nvrMonitorAddr(InputType), SrcInputType);
UserPrefInputType=SrcInputType;
if (ModeInfoOnFlag&&!UnsupportedModeFlag
&& (MenuPageIndex==RootMenu)
&& !BurninModeFlag
&& !FreeRunModeFlag )
{
MenuPageIndex=ModeInfoMenu;
MenuItemIndex=0;
OsdCounter=20;
ExecuteKeyEvent(MIA_RedrawMenu);
}
if (UnsupportedModeFlag)
{ if (!FreeRunModeFlag)
{ if (UserPrefAutoTimes==0)
AutoConfig();
}
}
//Osd_DynamicLoadFont(0xA0, &MenuPage6L1, 392);
}
void Menu_OsdHandler(void)
{
BYTE menuAction;
Key_ScanKeypad();
if( KeypadButton >= BTN_EndBTN )
menuAction=MIA_Nothing;
else if( CurrentMenuItem.KeyEvents )
menuAction = *(( CurrentMenuItem.KeyEvents ) + KeypadButton );
if( menuAction )
{ //printData("osd action %d", menuAction);
if( !InputTimingStableFlag ) // prevent osd action while mode changing
{
if( menuAction != MIA_Power )
menuAction = MIA_Nothing;
}
if( ExecuteKeyEvent( menuAction ))
{
ResetOsdTimer();
Clr_OsdTimeoutFlag();
}
if( menuAction >= MIA_IncValue || menuAction <= MIA_DecValue2 || menuAction == MIA_Auto )
{
if( TurboKeyCounter < 100 )
TurboKeyCounter++;
}
else if( menuAction == MIA_Exit )
{
Delay1ms( 150 );
KeypadButton = BTN_Repeat;
}
if(menuAction==MIA_IncValue2||menuAction==MIA_DecValue2) //barry1125 MIA_IncValue2MIA_DecValue2 do repeat
{KeypadButton = BTN_Nothing;
}
}
else
{
TurboKeyCounter = 0;
if( HighlightFlag )
{
Clr_HighlightFlag();
mStar_WriteOSDByte(SUBW3C, 0);
//DrawOsdMenuItemRadioGroup(0, CurrentMenuItem.DisplayValue.DrawRadioGroup);
}
} // end if ( menuAction )
if( OsdTimeoutFlag)
{
Clr_OsdTimeoutFlag();
MenuPageIndex=RootMenu;
MenuItemIndex=0;
ExecuteKeyEvent(MIA_RedrawMenu);
}
if( BurninModeFlag && ChangePatternFlag) // for burnin mode
{
Clr_ChangePatternFlag();
PatternNo=(PatternNo+1)%5;
mStar_AdjustBackgoundColor(PatternNo);
//ASW for Burnin mode show time
ShowBurninTime();
}
if(DoBurninModeFlag)
{
//draw burnin osd menu
Osd_Hide();
Clr_DoBurninModeFlag();
MenuPageIndex=BurninMenu;
MenuItemIndex=0;
ExecuteKeyEvent(MIA_RedrawMenu);
Osd_SetPosition(50,80);
Osd_Show();
}
if( ms500Flag ) // for moving osd position
{
Clr_ms500Flag();
#if 0//QuantaGateway
if (CurrentMenu.Flags&mpbMoving && !PowerSavingFlag && !FactoryModeFlag)// && FreeRunModeFlag) // for led flash
{
if (ReverseYFlag)
{
if (UserPrefOsdVStart==0)
Clr_ReverseYFlag();
else
UserPrefOsdVStart-=5;
}
else
UserPrefOsdVStart+=5;
if (UserPrefOsdVStart>=100)
Set_ReverseYFlag();
Osd_SetPosition(50, UserPrefOsdVStart);
// Osd_SetTextColor(CP_WhiteColor, CP_BlueColor);
// Osd_DrawNum(19, 8, PowerDownCounter);
}
else if (MenuPageIndex==UnsupportedModeMenu && !PowerSavingFlag)
{
Osd_SetTextColor(CP_WhiteColor, CP_BlueColor);
Osd_DrawNum(OSDStartPos+19, 8, PowerDownCounter);
}
#endif
}
}
BYTE code tHLArea1[4][4]=
{ { OSDStartPos+17, OSDStartPos+19, OSDStartPos+6, OSDStartPos+6}, // Plus
{ OSDStartPos+10, OSDStartPos+12, OSDStartPos+6, OSDStartPos+6}, // Minus
{ OSDStartPos+14, OSDStartPos+15, OSDStartPos+4, OSDStartPos+5}, // Up
{ OSDStartPos+14, OSDStartPos+15, OSDStartPos+7, OSDStartPos+8} //Down
};
BYTE code tHLArea2[4][4]=
{ { OSDStartPos+9, OSDStartPos+11, OSDStartPos+3, OSDStartPos+3}, // Plus
{ OSDStartPos+2, OSDStartPos+4,OSDStartPos+ 3, OSDStartPos+3}, // Minus
{ OSDStartPos+6, OSDStartPos+7, OSDStartPos+1, OSDStartPos+2}, // Up
{ OSDStartPos+6, OSDStartPos+7, OSDStartPos+4, OSDStartPos+5} //Down
};
void DrawHighlight(BYTE index, BYTE pos)
{ BYTE i;
mStar_WriteOSDByte(SUBW3A, (CP_CyanColor<<4)|CP_GrayColor);
if (index==0)
{ for (i=0; i<4; i++)
mStar_WriteOSDByte(SW3HST+i, tHLArea1[pos][i]);
}
else
{ for (i=0; i<4; i++)
mStar_WriteOSDByte(SW3HST+i, tHLArea2[pos][i]);
}
mStar_WriteOSDByte(SUBW3C, 1);
}
Bool ExecuteKeyEvent(MenuItemActionType menuAction)
{
Bool processEvent = TRUE;
BYTE tempValue;
while( processEvent )
{
processEvent=FALSE;
switch (menuAction)
{
case MIA_IncValue:
case MIA_DecValue:
case MIA_IncValue1:
case MIA_DecValue1:
case MIA_IncValue2:
case MIA_DecValue2:
if( CurrentMenuItemFunc.AdjustFunction)
{
if( MenuPageIndex == BriConMenu || MenuPageIndex==PositionMenu)
{
if( !HighlightFlag )
{
Set_HighlightFlag();
DrawHighlight(0, menuAction-MIA_IncValue1);
}
}
else if (MenuPageIndex==BriteMenu)
{
if (!HighlightFlag)
{
Set_HighlightFlag();
DrawHighlight( 1, menuAction - MIA_IncValue1 );
}
}
if (CurrentMenuItemFunc.AdjustFunction(menuAction))
{
DrawOsdMenuItemValue(MenuItemIndex, &CurrentMenuItem.DisplayValue);
Set_SaveSettingFlag();
if (TurboKeyCounter<7)
Delay1ms(100);
if( CurrentMenuItemFunc.AdjustFunction == AdjustBrightnessContrast ||
CurrentMenuItemFunc.AdjustFunction == AdjustClock||
CurrentMenuItemFunc.AdjustFunction == AdjustRedColor||
CurrentMenuItemFunc.AdjustFunction == AdjustGreenColor||
CurrentMenuItemFunc.AdjustFunction == AdjustBlueColor||
CurrentMenuItemFunc.AdjustFunction == AdjustPhase||
CurrentMenuItemFunc.AdjustFunction == AdjustHVPosition||
CurrentMenuItemFunc.AdjustFunction == AdjustVolume)
Delay1ms(50);
if( CurrentMenuItemFunc.AdjustFunction == AdjustLanguage ||
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -