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

📄 mst705Ȧ

📁 MST705源代码
💻
📖 第 1 页 / 共 3 页
字号:
#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 0//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));

⌨️ 快捷键说明

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