📄 menu.c
字号:
#define _MENU_C_
#include <stdlib.h>
#include <string.h>
#include "types.h"
#include "board.h"
#include "global.h"
#include "keypaddef.h"
#include "menu.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 "ir.h"
#include "tv.h"
#include "power.h"
#include "tda7052.h"
#include "panel.h"
#include "mstar.h"
#include "DevVD.h"
#include "menufunc.h"
#include "irfunc.h"
#define CurrentMenu tblMenus[g_ucMenuPageIndex]
#define PrevMenuPage CurrentMenu.PrevPage
#define CurrentMenuItems CurrentMenu.MenuItems
#define MenuItemCount CurrentMenu.ItemCount
#define CurrentMenuTimeOut CurrentMenu.TimeOut
#define CurrentMenuItem CurrentMenu.MenuItems[g_ucMenuItemIndex]
#define NextMenuPage CurrentMenuItem.NextPage
#define CurrentMenuItemFunc CurrentMenuItem.KeyFunction
//#define KeyEvent CurrentMenuItem.KeyEvents[KeypadButton]
//========================================================================
BOOL ResetOsdTimer(void)
{
BYTE tempValue=g_VideoSetting.OsdTime;
if (!FactoryModeFlag)
{
if (tempValue==0)
g_ucOsdCounter=5;
else if (tempValue==1)
g_ucOsdCounter=10;
else if (tempValue==2)
g_ucOsdCounter=30;
else
g_ucOsdCounter=60;
}
if(CurrentMenuTimeOut & mtbIndividualTimeOut)
g_ucOsdCounter = CurrentMenuTimeOut& ~mtbIndividualTimeOut;//Vick :Disable OSD timer out
Clr_OsdTimeoutFlag();
return TRUE;
}
void Menu_InitVariable(void)
{
if (PowerOnFlag)
g_ucMenuPageIndex=RootMenu;
else
g_ucMenuPageIndex=PowerOffMenu;
g_ucMenuItemIndex=0;
g_ucOsdCounter=0;
}
void Menu_OsdHandler(void)
{
#ifdef IR_DEBUG_EN
DebugIRHandler();
#endif
Key_ScanKeypad();
irDecodeCommand();
#if TV_ENABLE
irDecodeNumKey();
#endif
if (OsdTimeoutFlag)
{
Clr_OsdTimeoutFlag();
if (g_ucMenuPageIndex>RootMenu)
{
g_ucMenuPageIndex=RootMenu;
g_ucMenuItemIndex=0;
ExecuteKeyEvent(MIA_RedrawMenu);
}
SaveUserPref();
}
}
#define ucHoldCount 10
#define ucRptCount 1
void EventProcess(BYTE ucKeyCode)
{
BYTE ucEvent = MIA_Nothing;
g_ucKeyRptCount = 0;
g_ucNextRptCount = ucHoldCount ;
if ((CurrentMenuItem.KeyEvents[ucKeyCode].cConditions & INPUT_PRESS)&&(CurrentMenuItem.KeyEvents[ucKeyCode].InputType&1<<g_VideoSetting.InputType))
{
ucEvent = CurrentMenuItem.KeyEvents[ucKeyCode].PressKeyEvent;
}
MenuProcessKey(ucEvent);
}
void EventRepeatProcess(BYTE ucKeyCode, BYTE ucTicks)
{
BYTE ucEvent = MIA_Nothing;
if ((CurrentMenuItem.KeyEvents[ucKeyCode].cConditions & INPUT_HOLD)&&(CurrentMenuItem.KeyEvents[ucKeyCode].InputType&1<<g_VideoSetting.InputType))
{
g_ucKeyRptCount++;
if (g_ucKeyRptCount >= (g_ucNextRptCount * ucTicks))
{
ucEvent = CurrentMenuItem.KeyEvents[ucKeyCode].PressKeyEvent;
g_ucKeyRptCount = 0;
g_ucNextRptCount = ucRptCount;
}
}
MenuProcessKey(ucEvent);
}
void MenuProcessKey(BYTE menuAction)
{
if (menuAction)
{
if(!PowerOnFlag)
{
if (menuAction!=MIA_Power)
menuAction=MIA_Nothing;
}
if (ExecuteKeyEvent(menuAction))
{
ResetOsdTimer();
Clr_OsdTimeoutFlag();
}
}
}
#if TV_ENABLE
void irAdjustNumKey(BYTE ucPressNum)
{
if (g_bIrNumKeyStart == 0)
{
g_ucIrNumKey = ucPressNum;
g_bIrNumKeyStart = 1;
g_bIrKeyNumEnd = 0;
if (g_ucIr100Key==1)
{
g_IrCodeParam[0] = ' ';
g_IrCodeParam[1] = ucPressNum + OSD_0_INDEX;
g_IrCodeParam[2] = '-';
g_IrCodeParam[3] = '\0';
}
#if TV_SYSTEM==TV_NTSC
else if (g_ucIr100Key==2)
{
g_IrCodeParam[0] = '1';
g_IrCodeParam[1] = ucPressNum + OSD_0_INDEX;
g_IrCodeParam[2] = '-';
g_IrCodeParam[3] = '\0';
}
#endif
else
{
g_IrCodeParam[0] = ' ';
g_IrCodeParam[1] = ' ';
g_IrCodeParam[2] = ucPressNum + OSD_0_INDEX;
g_IrCodeParam[3] = '\0';
g_bIrKeyNumEnd = 1;
g_bIrNumKeyStart = 0;
}
g_ucMenuPageIndex = TVInputNumMenu;
g_ucMenuItemIndex = 0;
g_ucOsdCounter = 5;
}
else
{
#if TV_SYSTEM==TV_NTSC
if(g_ucIr100Key==2)
g_ucIrNumKey = 100+(g_ucIrNumKey * 10) + ucPressNum; // calculate key number
else
#endif
g_ucIrNumKey = (g_ucIrNumKey * 10) + ucPressNum; // calculate key number
g_ucMenuPageIndex = TVInputNumMenu;
g_ucMenuItemIndex = 0;
g_ucOsdCounter = 5;
g_bIrNumKeyStart = 0;
g_bIrKeyNumEnd = 1; // ready to change channel
}
}
void irNumInputMode(void)
{
if (g_ucIr100Key == 0)
{
g_ucIr100Key = 1;
g_ucIrNumKey = 0; // clear IR key
g_IrCodeParam[0] = ' ';
g_IrCodeParam[1] = '-';
g_IrCodeParam[2] = '-';
g_IrCodeParam[3] = '\0';
g_ucMenuPageIndex = TVInputNumMenu;
g_ucMenuItemIndex = 0;
Osd_Hide();
g_ucOsdCounter = 5;
}
#if TV_SYSTEM==TV_NTSC
else if(g_ucIr100Key == 1&&(g_TVChSetting.ucTVSource==NTSC_CTV))
{
g_ucIr100Key = 2;
g_ucIrNumKey = 0; // clear IR key
g_IrCodeParam[0] = '1';
g_IrCodeParam[1] = '-';
g_IrCodeParam[2] = '-';
g_IrCodeParam[3] = '\0';
g_ucMenuPageIndex = TVInputNumMenu;
g_ucMenuItemIndex = 0;
Osd_Hide();
g_ucOsdCounter = 5;
}
#endif
else
{
g_ucIr100Key = 0;
g_ucIrNumKey = 0; // clear IR key
g_IrCodeParam[0] = ' ';
g_IrCodeParam[1] = '-';
g_IrCodeParam[2] = ' ';
g_IrCodeParam[3] = '\0';
g_ucMenuPageIndex = TVInputNumMenu;
g_ucMenuItemIndex = 0;
Osd_Hide();
g_ucOsdCounter = 5;
}
}
BYTE IRKeyToNumber( MenuItemActionType ucCode )
{
switch( ucCode )
{
case MIA_IRKEY_0: return 0;
case MIA_IRKEY_1: return 1;
case MIA_IRKEY_2: return 2;
case MIA_IRKEY_3: return 3;
case MIA_IRKEY_4: return 4;
case MIA_IRKEY_5: return 5;
case MIA_IRKEY_6: return 6;
case MIA_IRKEY_7: return 7;
case MIA_IRKEY_8: return 8;
case MIA_IRKEY_9: return 9;
default: break;
}
return 0xFF;
}
#endif
BOOL ExecuteKeyEvent(MenuItemActionType menuAction)
{ BOOL processEvent=TRUE;
BYTE tempValue;
while (processEvent)
{
processEvent=FALSE;
//printMsg("keypress");
if (g_bTVAutoScanChannelEnable || g_bTVManualSearchEnable)
{
g_bTVAutoScanChannelBreak = TRUE;
g_bTVManualScanChannelBreak= TRUE;
return TRUE;
}
switch (menuAction)
{
case MIA_IncValue:
case MIA_DecValue:
case MIA_CalendarmonthIncValue:
case MIA_CalendarmonthDecValue:
if (CurrentMenuItemFunc.AdjustFunction)
{ if (CurrentMenuItemFunc.AdjustFunction(menuAction))
{ DrawOsdMenuItemValue(g_ucMenuItemIndex, CurrentMenuItem.DisplayValue);
Set_SaveSettingFlag();
}
}
break;
case MIA_NextItem:
case MIA_PrevItem:
tempValue=g_ucMenuItemIndex;
if (menuAction==MIA_NextItem)
g_ucMenuItemIndex=GetNextItem(CurrentMenuItems);
else
g_ucMenuItemIndex=GetPrevItem(CurrentMenuItems);
/********************************zwtan for ********************************************/
#if TV_ENABLE
if(g_ucMenuPageIndex==SystemMenu)
{
if((tempValue==1&&g_ucMenuItemIndex==2)||(tempValue==3&&g_ucMenuItemIndex==2))
{
Osd_SetTextColor(CP_WhiteColor, CP_GrayColor);
Osd_DrawNum(12, 5, g_TVChSetting.ucCurChannelNO);
}
if((tempValue==4&&g_ucMenuItemIndex==3)||(tempValue==2&&g_ucMenuItemIndex==3))
{
Osd_SetTextColor(CP_RedColor, CP_GrayColor);
Osd_DrawNum(12, 5, g_TVChSetting.ucCurChannelNO);
}
if((tempValue==2&&g_ucMenuItemIndex==1)||(tempValue==3&&g_ucMenuItemIndex==4))
{
Osd_SetTextColor(CP_WhiteColor, CP_GrayColor);
Osd_DrawStr(13, 5, " - ");
}
if((tempValue==3&&g_ucMenuItemIndex==4)||(tempValue==5&&g_ucMenuItemIndex==4))
{
Osd_SetTextColor(CP_WhiteColor, CP_GrayColor);
Osd_DrawNum(12, 6, g_TVChSetting.ucCurChannelNO);
}
if((tempValue==0&&g_ucMenuItemIndex==5)||(tempValue==4&&g_ucMenuItemIndex==5))
{
Osd_SetTextColor(CP_RedColor, CP_GrayColor);
Osd_DrawNum(12, 6, g_TVChSetting.ucCurChannelNO);
}
if((tempValue==4&&g_ucMenuItemIndex==3)||(tempValue==5&&g_ucMenuItemIndex==0))
{
Osd_SetTextColor(CP_WhiteColor, CP_GrayColor);
Osd_DrawStr(13, 6, " - ");
}
}
#endif
/********************************************************************************/
if (tempValue!=g_ucMenuItemIndex)
{
DrawOsdMenuItem(tempValue, &CurrentMenuItems[tempValue]);
DrawOsdMenuItem(g_ucMenuItemIndex, &CurrentMenuItem);
SystemDelay_translate_To_Dsp_Processor(5);
}
break;
case MIA_JumpAdjustItem:
case MIA_JumpNaviItem:
tempValue=g_ucMenuItemIndex;
g_ucMenuItemIndex+=((menuAction==MIA_JumpAdjustItem)?(1):(-1));
DrawOsdMenuItem(tempValue, &CurrentMenuItems[tempValue]);
DrawOsdMenuItem(g_ucMenuItemIndex, &CurrentMenuItem);
//Delay1ms(300);
break;
case MIA_GotoNext:
case MIA_GotoPrev:
tempValue=g_ucMenuPageIndex;
g_ucMenuPageIndex=(menuAction==MIA_GotoNext)?(NextMenuPage):(PrevMenuPage);
g_ucMenuItemIndex=GetMenuItemIndex(tempValue);
if(g_ucMenuPageIndex==RootMenu)
SaveUserPref();
//Delay1ms(150);
/********************************zwtan for ********************************************/
#if TV_ENABLE
if (g_ucMenuPageIndex==PresetMenu&&!IsTVInUse())
g_ucMenuPageIndex=ClockMenu;
if(g_ucMenuPageIndex==AudioMenu||g_ucMenuPageIndex==FunctionMenu||g_ucMenuPageIndex==SystemMenu
||g_ucMenuPageIndex==PresetMenu||g_ucMenuPageIndex==ClockMenu)
#else
if(g_ucMenuPageIndex==AudioMenu||g_ucMenuPageIndex==FunctionMenu||g_ucMenuPageIndex==SystemMenu
||g_ucMenuPageIndex==ClockMenu)
#endif
{
BYTE kk;
Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
for (kk=3;kk<=9;kk++)
Osd_DrawStr(0, kk, " ");
}
/********************************zwtan for end********************************************/
case MIA_RedrawMenu:
DrawOsdMenu();
if (CurrentMenu.ExecFunction)
{ tempValue=CurrentMenu.ExecFunction();
}
if (!(CurrentMenu.Flags&mpbStay))
{ processEvent=TRUE;
menuAction=MIA_GotoPrev;
}
break;
case MIA_ExecFunc:
if (CurrentMenuItemFunc.ExecFunction)
{
tempValue=0;
tempValue=CurrentMenuItemFunc.ExecFunction();
if(tempValue)
{
}
processEvent=FALSE;
#if VGA_ENABLE
if(CurrentMenuItemFunc.ExecFunction==AutoColor)
{
if (tempValue)
{
Osd_SetTextColor(CP_YellowColor, CP_GrayColor);
Osd_DrawStr(24, 5, PassText());
}
else
{
Osd_SetTextColor(CP_RedColor, CP_GrayColor);
Osd_DrawStr(24, 5, FailText());
}
menuAction=MIA_RedrawMenu;
processEvent=TRUE;
}
#endif
}
break;
case MIA_Power:
if (PowerOnFlag)
g_ucMenuPageIndex=PowerOffMenu;
else
g_ucMenuPageIndex=PowerOnMenu;
g_ucMenuItemIndex=0;
menuAction=MIA_RedrawMenu;
processEvent=TRUE;
break;
//=============================IR Event======================================
case MIA_Source:
case MIA_IR_SourceSwitch:
AdjustSource();
break;
case MIA_IncVolume:
case MIA_DecVolume:
case MIA_IR_IncVolume:
case MIA_IR_DecVolume:
if(g_ucMenuPageIndex!=VolumeMenu)
{
menuAction=MIA_RedrawMenu;
g_ucMenuPageIndex=VolumeMenu;
g_ucMenuItemIndex=0;
processEvent=TRUE;
}
else
{
if(menuAction==MIA_IR_IncVolume)
menuAction=MIA_IncValue;
if(menuAction==MIA_IR_DecVolume)
menuAction=MIA_DecValue;
processEvent=TRUE;
}
break;
case MIA_IR_ShowINFO:
if(IsSVideoInUse()||IsAVInUse())
{
if(g_ucMenuPageIndex!=ShowSourceMenu)
g_ucMenuPageIndex=ShowSourceMenu;
else
g_ucMenuPageIndex=RootMenu;
}
#if TV_ENABLE
else
{
if(g_ucMenuPageIndex!=ShowTVChannelMenu)
g_ucMenuPageIndex=ShowTVChannelMenu;
else
g_ucMenuPageIndex=RootMenu;
}
menuAction=MIA_RedrawMenu;
g_ucMenuItemIndex=0;
processEvent=TRUE;
break;
#endif
case MIA_IR_Mute:
AdjustMuteStatusValue(MIA_IncValue);
menuAction=MIA_RedrawMenu;
g_ucMenuPageIndex=MuteMenu;
g_ucMenuItemIndex=0;
processEvent=TRUE;
break;
#if CALENDAR_ENABLE
case MIA_IR_Calendar:
if (g_ucMenuPageIndex==CalendarMenu)
break;
menuAction=MIA_RedrawMenu;
g_ucMenuPageIndex=CalendarMenu;
g_ucMenuItemIndex=0;
processEvent=TRUE;
break;
#endif
#if GAME_ENABLE
case MIA_IR_Game:
if (g_ucMenuPageIndex==GameMenu)
break;
SetAudioMute();
msSetBlueScreen( _ENABLE, FR_BLUE);
menuAction=MIA_RedrawMenu;
g_ucMenuPageIndex=GameMenu;
g_ucMenuItemIndex=0;
processEvent=TRUE;
break;
case MIA_BlockTurn:
g_ucGameKeyControlStatus=GK_GameKeyTurn;
break;
case MIA_BlockDown:
g_ucGameKeyControlStatus=GK_GameKeyDown;
break;
case MIA_BlockExit:
g_ucGameStatus=GS_GameExit;
break;
case MIA_GameRestart:
g_ucGameStatus=GS_GameReStart;
break;
case MIA_BlockLeft:
g_ucGameKeyControlStatus=GK_GameKeyLeft;
break;
case MIA_BlockRight:
g_ucGameKeyControlStatus=GK_GameKeyRight;
break;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -