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

📄 menu.c

📁 LCD OSD 程序用於8051 開發lcd
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -