📄 stpmain.c
字号:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 07/06/04 8:00p $ ****************/
/*************** $Revision:: 8 $ ****************/
/*************** ****************/
/*************** Description : Setup State ****************/
/*************** Machine ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : Peter Huang ****************/
/**********************************************************************/
#define _SETUP_C
#include "general.h"
#include "stposdfn.h"
#include "stppass.h"
#ifdef SIMPLE_MENU
#include "stpmenu1.h"
#else
#include "stpmenu.h"
#endif
#include "stpmain.h"
#ifdef PANEL_FACTORY_SETTING
extern BYTE xdata _fgVcomUpdate;
#endif
#define STP_STICK_DATA 0
#define STP_POPUP_DATA 1
#define SETUP_MENU_DATA_STYLE STP_STICK_DATA
#pragma NOAREGS
#define MSG_X_IN_CENTER 0xFFFF
#define INVALID_MENU 0xFF
#define INVALID_ENTRY 0xFF
#define INVALID_DATA 0xFF
#define HEAD_MSG_X 20
#define HEAD_MSG_Y 0
/*
Modify it from 212 to 230 by Bright_liu 2005/08/31, for CQ(PL00101095)
Setup menu OSD overflow bug.
*/
#define DATA_LEN 230 // 212 //[runma]240 -> 220 ->212
#define MSG_X_ST 10
//extern void DRS232LogS(char *pcStr);
//extern void DRS232LogB(BYTE bV1, BYTE bV2, BYTE bV3, BYTE bV4);
// *********************************************************************
// Local Define
// *********************************************************************
static void vShowMenu(sMenu *prMenu) large;
static void vDrawMenu(sMenu *prMenu) large;
BOOL fgSetupState(void) large;
void vSetupInitState(void) large;
void vSetupDummy(void) large;
static BOOL fgMainMenuPrev(sMenu *prMenu) large;
static BOOL fgMainMenuNext(sMenu *prMenu) large;
static BOOL fgEntryPrev(sMenu *prMenu) large;
static BOOL fgEntryNext(sMenu *prMenu) large;
static void vEntryAct(void) large;
static BOOL fgDataPrev(sEntry *prEntry) large;
static BOOL fgDataNext(sEntry *prEntry) large;
static void vItemValueCtrl(sEntry *prEntry,BOOL fgIfInc) large;
static void vCtrlDraw(BYTE bCtrlType, BYTE bIndex) large;
static BOOL fgProcCtrl(BYTE bCtrlType, sEntry *prEntry, BOOL fgInc) large;
static void vCtrlAct(void) large;
//static void vCtrlDeact(void) large;
static void vCtrlMove(BYTE bCtrlType, BYTE bIndex) large;
static void vCtrlClear(BYTE bCtrlType, BYTE bIndex) large;
static void vSetItemPos(BYTE bIndex, BYTE bOffset) large;
static void vSetDataPos(BYTE bIndex, BYTE bOffset) large;
static void vCalSliderPos(BYTE bIndex) large;
static void vSetSpkConfigPos(BYTE bIndex) large;
static void vPasteSpkBmp(BYTE bIndex,BOOL fgIfOn) large;
static BOOL fgCalEntryShowRange(BYTE bTotalEntry, BYTE bTotalLine) large;
static BOOL fgCalDataShowRange(BYTE bTotal, BYTE bLength) large;
static void vShowRelatedMsg(sMenu *prMenu) large;
static void vShowMenuRoot(sMenu *prMenu) large;
static void vDrawMenuBtn(sMenu *prMenu, BYTE bIndex, BOOL fgEnable) large;
void vSyncInternalState(void) large;
//static void vSetDefColor(void) large;
static void vSetWbCol(void) large;
static void vDrawDialog(sMenu *prMenu) large;
static void vDialogInit(sMenu *prMenu) large;
static void vDialogDrawEntry(sMenu *prMenu) large;
static void vGetDlgParent(BYTE bDlg) large;
static void vDataInput(sMenu *prMenu) large;
static void vCheckLangCode(void) large;
static void vResetVdoQlty(void) large;
static void vEnRegCodeChg(void) large;
static void vEnVerMenu(void) large;
#ifdef MIC_ON_KEYSHIFT_FORCING_DOWNMIX_2CH
BYTE xdata _bDownMixTmp = 5;
BYTE xdata _bProLogic2Tmp;
#endif
xdata BYTE _bMaxData;
xdata BYTE _bMinShowData;
xdata BYTE _bMaxShowData;
xdata BYTE _bMinShowDat;
//code BYTE _ShowVerMenu[] = { IR_NUM1, IR_NUM3, IR_NUM7, IR_NUM9, IR_LEFT, IR_LEFT, IR_LEFT, IR_RIGHT };
static code BYTE _pbEnRegChg[] = { IR_NUM1, IR_NUM3, IR_NUM7, IR_NUM9 };
static code BYTE _pbEnVerMenu[] = { IR_NUM1, IR_NUM3, IR_NUM7, IR_NUM9 };
//static code BYTE _pbRegCodeChgPass[] = { IR_NUM1, IR_NUM3, IR_NUM6, IR_NUM9, IR_LEFT, IR_LEFT, IR_LEFT, IR_RIGHT };
static code BYTE _pbVcdEnPass[] = { IR_NUM1, IR_NUM2, IR_NUM3, IR_NUM4, IR_LEFT, IR_LEFT, IR_LEFT, IR_RIGHT };
//xdata BYTE _bShowIdx;
#ifdef PANEL_FACTORY_SETTING
static code BYTE _pbEnPanelFactoryMenu[] = { IR_NUM9, IR_NUM9, IR_NUM9, IR_NUM9 };
#endif
#ifdef SRV_SHOW_ERROR_COUNTER
static code BYTE _SrvShowErr[] = { IR_NUM4, IR_NUM5, IR_NUM7, IR_NUM8 };
void vCheckShowErrKey(void) large;
#endif
BYTE bGetOptFromDefault(sEntry *prEntry) large
{
BYTE bTemp;
BYTE bDefVal;
if (prEntry->wType != ENTRY_TYPE_GROUPBUTTON)
{
return (prEntry->wDefault);
}
bDefVal = prEntry->wDefault;
for (bTemp=0; bTemp<=prEntry->wMaxOpt; bTemp++)
{
if (prEntry->prData[bTemp]->bVal == bDefVal)
{
break;
}
}
return (bTemp);
}
BYTE bGetOptFromEeprom(sEntry *prEntry) large
{
BYTE bTemp;
BYTE bStoredVal;
#if 0
if(prEntry->wType == TYPE_SPK_CONFIG)
{
for(bTemp=0;bTemp<6;bTemp++)
{
if(_rMenuRoot.prMenu[prEntry->wEEPos].prEntry[bTemp]!=NULL)
break;
}
return(bTemp);
}
#else
if(prEntry->wType == TYPE_SPK_CONFIG)
return(1);
#endif
if (prEntry->wType != ENTRY_TYPE_GROUPBUTTON)
{
if((prEntry->wType == ENTRY_TYPE_V_SLIDER_SIGNED) || (prEntry->wType == ENTRY_TYPE_V_SLIDER) ||
(prEntry->wType == ENTRY_TYPE_H_SLIDER_SIGNED) || (prEntry->wType == ENTRY_TYPE_H_SLIDER) ||
(bEepromReadByte(prEntry->wEEPos) <= prEntry->wMaxOpt))
{
return (bEepromReadByte(prEntry->wEEPos));
}
else if ((prEntry->wType == ENTRY_TYPE_EDITBOX) || (prEntry->wType == ENTRY_TYPE_EDITBOX_ORDERED))
{
return 0;
}
else // (bEepromReadByte(prEntry->wEEPos) > prEntry->wMaxOpt)
{
return (prEntry->wDefault);
}
}
bStoredVal = bEepromReadByte(prEntry->wEEPos);
for (bTemp=0; bTemp<=prEntry->wMaxOpt; bTemp++)
{
if (prEntry->prData[bTemp]->bVal == bStoredVal)
{
break;
}
}
if (bTemp > prEntry->wMaxOpt)
{
// not found
bTemp = bGetOptFromDefault(prEntry);
}
return (bTemp);
}
#if 0
BYTE bGetItemIdx(BYTE bEntry) large
{
BYTE i, bIdx;
bIdx = bEntry;
for (i=0; i<bEntry; i++)
{
if (!(_wHidden & (0x1 << i)))
bIdx--;
}
return bIdx;
}
BYTE bGetTrueItem(BYTE bEntry) large
{
BYTE i, bIdx;
bIdx = 0;
for (i=0; (i<16) && bEntry; i++)
{
if (!(_wHidden & (0x1 << i)))
{
bIdx++;
bEntry--;
}
}
return bIdx;
}
#endif
// *********************************************************************
// Function : void vInitEntry(BYTE bMenuNum, BYTE bReset)
// Description :
// Parameter : None
// Return : None
// Note : reset should note if some function can not execute !!!
// *********************************************************************
void vInitEntry(BYTE bMenuNum, BYTE bReset) large
{
BYTE bTmp;
WORD wEEPos;
sEntry *prEntry;
BYTE (code *bDeal)(WORD wEEPos, BYTE bValue) large;
for(_bEntry=1; _bEntry<=_rMenuRoot.prMenu[bMenuNum]->bTotalEntry; _bEntry++)
{
// if no EE entry, then no init
prEntry = _rMenuRoot.prMenu[bMenuNum]->prEntry[_bEntry-1];
if ((prEntry == NULL) || (prEntry->wType == ENTRY_TYPE_SUBMENU) ||
(prEntry->wType == TYPE_SPK_CONFIG) || (prEntry->wEEPos == NULL_EE_ITEM))
{
continue;
}
switch(prEntry->wType)
{
case TYPE_MAINMENU:
case TYPE_PAGE:
case TYPE_CLOSE:
case ENTRY_TYPE_STATIC:
case ENTRY_TYPE_RETURN: //[runma] add line.
case ENTRY_TYPE_SUBMENU: //[runma] add line.
case ENTRY_TYPE_DIALOG:
continue;
default:
break;
}
if ((bReset == MENU_ITEM_DEFAULT) || (bReset == MENU_ITEM_INIT))
{
//if reset is needed, write default to EE
if (bReset == MENU_ITEM_DEFAULT)
{
switch(prEntry->wEEPos)
{
// no reset item
case PTL_LEVEL_POSITION:
case REGION_CODE_POSITION:
//if (bGetOptFromEeprom(prEntry) > prEntry->wMaxOpt)
//{
_bDataCur = _bDataSel = bGetOptFromEeprom(prEntry);
// fgEepromWriteByte(PTL_LEVEL_POSITION, _bDataCur);
//}
case PASS_SW_POSITION:
continue;
default:
break;
}
}
_bDataCur = _bDataSel = bGetOptFromDefault(prEntry);
if (prEntry->wEEPos)
{
fgEepromWriteByte(prEntry->wEEPos, prEntry->wDefault);
}
}
else
{
//if init, read from EE
//_bDataCur = _bDataSel = bEepromReadByte(prEntry->wEEPos);
_bDataCur = _bDataSel = bGetOptFromEeprom(prEntry);
}
switch(prEntry->wType)
{
//case TYPE_SLIDE:
case ENTRY_TYPE_STATIC:
case ENTRY_TYPE_V_SLIDER_SIGNED: //[runma] add line
case ENTRY_TYPE_H_SLIDER_SIGNED: //[runma] add line
// slide could be negative
if (((char)_bDataCur > (BYTE)bOptMaxEntryNum(_rMenuRoot, bMenuNum, _bEntry) ||
((char)_bDataCur < (char)(0 - bOptMaxEntryNum(_rMenuRoot, bMenuNum, _bEntry)))))
{
_bDataCur = _bDataSel = bGetOptFromDefault(prEntry);
fgEepromWriteByte(prEntry->wEEPos, _bDataCur);
}
break;
default:
if (_bDataCur > bOptMaxEntryNum(_rMenuRoot, bMenuNum, _bEntry))
{
_bDataCur = _bDataSel = bGetOptFromDefault(prEntry);
fgEepromWriteByte(prEntry->wEEPos, _bDataCur);
}
break;
}
// reset should note if some function can not execute
switch (prEntry->wEEPos)
{
case PTL_LEVEL_POSITION:
//vSetSharedInfo(SI_PTL_LV, _bDataCur);
vSystemParentalLevel(_rMenuRoot.prMenu[bMenuNum]->prEntry[_bEntry-1]->prData[_bDataCur]->bVal);
continue;
case REGION_CODE_POSITION:
vSetSharedInfo(SI_REGION, bEepromReadByte(prEntry->wEEPos) << 4);
continue;
case AUDIO_LCD_POSITION:
case SP_LCD_POSITION:
case MENU_LCD_POSITION:
if((prEntry->prData[_bDataCur]->bVal == EV_OTHER)) //[runma] add line
{
switch (prEntry->wEEPos)
{
case AUDIO_LCD_POSITION:
vSystemPrefAuLang('a'-'A'+bEepromReadByte(AUDIO_LCD_POSITION_0),
'a'-'A'+bEepromReadByte(AUDIO_LCD_POSITION_1));
break;
case SP_LCD_POSITION:
vSystemPrefSpLang('a'-'A'+bEepromReadByte(SP_LCD_POSITION_0),
'a'-'A'+bEepromReadByte(SP_LCD_POSITION_1));
break;
case MENU_LCD_POSITION:
vSystemPrefMenuLang('a'-'A'+bEepromReadByte(MENU_LCD_POSITION_0),
'a'-'A'+bEepromReadByte(MENU_LCD_POSITION_1));
break;
}
continue;
}
// continue;
}
// execute the function, item point to
bDeal = prEntry->bFun;
if (bDeal && (bDeal != bResetDefault) && (bDeal != bSetVdoQlty) && (bDeal != bNormalVdo)) //r /*&& (prEntry->wSIPos != SI_LUMINANCE)&& (prEntry->wSIPos != SI_SHARPNESS)*/)
{
if ((_fgReset == TRUE) && (_fgNotify == TRUE) && (prEntry->wSIPos != NULL_SI))
{
while (bSharedInfo(SI_SHI_NS) >= bSharedInfo(SI_SHI_SZ)-1);
}
bTmp = bDeal(prEntry->wEEPos, prEntry->prData[_bDataSel]->bVal);
if (!_fgReset)
vRedrawMenu(bTmp);
}
// call audio dsp releative routine
vSetADsp(TRUE);
// call video releative routine
//[runma] add block
if(bDeal == bSetVdoQlty)
bSetVdoQlty(prEntry->wEEPos, _bDataSel);
if (bDeal == bNormalVdo)
{
if (prEntry->wEEPos == GAMMA_POS)
{
bNormalVdo(prEntry->wEEPos, prEntry->prData[_bDataSel]->bVal);
}
else
{
bNormalVdo(prEntry->wEEPos, _bDataSel);
}
}
//[runma] end of block
// vSetVdo(TRUE);
} // End for j
}
#ifdef POWER_ON_RESET_VDO
// *********************************************************************
// Function : void vResetVdoPage(void) large
// Description :
// Parameter : None
// Return : None
// *********************************************************************
void vResetVdoPage(void) large
{
#ifndef SIMPLE_MENU
BYTE bTmpPage;
bTmpPage = _bMenu;
_bMenu = VDO_PAGE;
vInitMenuEntry(VDO_PAGE, MENU_ITEM_DEFAULT); //[runma] DEFAULT); -> eeprom for fixing p/n tray out problem.
_bMenu = bTmpPage;
#endif
}
#endif
// *********************************************************************
// Function : void vInitMenuEntry(BOOL fgReset) large
// Description : 1.init all item
// 2.if needed, set to factory setting
// Parameter : fgReset - 2, set to default value, include protected item
// - 1, set to default value, not include protected item
// - 0, get from SEEPROM
// Return : None
// *********************************************************************
void vInitMenuEntry(BYTE bReset) large
{
// check all menu to init all entry
for(_bMenu=0; _bMenu<MAX_PAGE; _bMenu++) //[runma] change to this. MAX_PAGE
{
if ((_bMenu == PASS_CHG_PAGE) || (_bMenu == PASS_CON_PAGE) ||
#if (defined(PTL_PWD_MODE_SW) || defined(SET_PTL_NEED_PWD))
(_bMenu == PASS_PAGE))
#endif
continue;
vInitEntry(_bMenu, bReset);
} // End for i
#ifdef POWER_ON_RESET_VDO
vResetVdoPage();
#endif
}
// *********************************************************************
// Function : void vRedrawMenu(void) large
// Description : redraw a setup menu page
// Parameter : None
// Return : None
// *********************************************************************
void vRedrawMenu(BYTE bType) large
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -