📄 ui_flow_ctrl.c
字号:
#include "..\INC\SYS_DECLARE.H"
#include "..\INC\SYS_GLOBAL.H"
#include "..\INC\SYS_KEY.H"
#include "INC\UI_OSD.H"
#include "INC\UI_FLOW_CTRL.H"
EN_FLOW_STATE enFlowState = FS_NORMAL_PLAY;
EN_FLOW_STATE enLast1FlowState = FS_NORMAL_PLAY;
EN_FLOW_STATE enLast2FlowState = FS_NORMAL_PLAY;
EN_FLOW_STATE enLast3FlowState = FS_NORMAL_PLAY;
/****************************************************************************
* Flow & related function table
***************************************************************************/
ST_STATE_ITEM code stStateTable[] =
{
// Normal state
{1, FS_NORMAL_PLAY, UI_FL_NormalPlayInit, UI_FL_NormalPlayProc},
// Main menu
{0, FS_MENU_MAIN, UI_FL_MainInit, UI_FL_MainProc},
{0, FS_MENU_PICTURE, UI_FL_PictureInit, UI_FL_PictureProc},
{0, FS_MENU_INPUT, UI_FL_InputInit, UI_FL_InputProc},
//{0, FS_MENU_TV, UI_FL_TvInit, UI_FL_TvProc},
{0, FS_MENU_FACTORY, UI_FL_FacInit, UI_FL_FacProc},
// Picture sub-menu
{0, FS_PICTURE_BRIGHTNESS, UI_FL_PicBrightnessInit, UI_FL_PicBrightnessProc},
{0, FS_PICTURE_CONTRAST, UI_FL_PicContrastInit, UI_FL_PicContrastProc},
{0, FS_PICTURE_HUE, UI_FL_PicHueInit, UI_FL_PicHueProc},
{0, FS_PICTURE_SATURATION, UI_FL_PicSaturationInit, UI_FL_PicSaturationProc},
{0, FS_PICTURE_SHARPNESS, UI_FL_PicSharpnessInit, UI_FL_PicSharpnessProc},
{0, FS_PICTURE_ZOOM, UI_FL_PicZoomInit, UI_FL_PicZoomProc},
{0, FS_PICTURE_FLIP, UI_FL_PicFlipInit, UI_FL_PicFlipProc},
// Input source sub-menu
{0, FS_INPUT_CVBS, UI_FL_InputSourceSwitch, UI_FL_DoNothing},
{0, FS_INPUT_SVIDEO, UI_FL_InputSourceSwitch, UI_FL_DoNothing},
//{0, FS_INPUT_TV, UI_FL_InputSourceSwitch, UI_FL_DoNothing},
//{0, FS_INPUT_CCIR656, UI_FL_InputSourceSwitch, UI_FL_DoNothing},
// TV sub-menu
//{0, FS_TV_AUTOSCAN, UI_FL_TvAutoscanInit, UI_FL_TvAutoscanProc},
// Factory mode sub-menu
{0, FS_FACTORY_BATTERY, UI_FL_FacBatteryInit, UI_FL_FacBatteryProc},
{0, FS_FACTORY_ENVDETECT, UI_FL_FacEnvDetectInit, UI_FL_FacEnvDetectProc},
{0, FS_FACTORY_GAMMA, UI_FL_FacGammaInit, UI_FL_FacGammaProc},
{1, FS_FACTORY_SAR_ADC, UI_FL_FacSarAdcInit, UI_FL_FacSarAdcProc},
// Dummy end condition
{0, FS_END, 0, 0}
};
/****************************************************************************
* Menu function
***************************************************************************/
void UI_FLC_Initial(void)
{
UI_OSD_Initial();
UI_FLC_Reset();
UI_FLC_EnterNewState(FS_NORMAL_PLAY);
}
//--------------------------------------------------------------------------
void UI_FLC_NewStateInitial(EN_FLOW_STATE enState)
{
if( enState < FS_END && enState >= FS_NORMAL_PLAY)
stStateTable[enState].fpInit();
else
stStateTable[FS_NORMAL_PLAY].fpInit();
}
/****************************************************************************
* Function : UI_FLC_Reset
* Description : Reset the flow state queue to normal play.
* Argument : none
* Return : none
***************************************************************************/
void UI_FLC_Reset(void)
{
enFlowState = FS_NORMAL_PLAY;
enLast1FlowState = FS_NORMAL_PLAY;
enLast2FlowState = FS_NORMAL_PLAY;
enLast3FlowState = FS_NORMAL_PLAY;
gbFocusItemIdx = 0;
}
/****************************************************************************
* Function : UI_FLC_GetCurrentState
* Description : Get the current state.
* Argument : none
* Return : the current state
***************************************************************************/
EN_FLOW_STATE UI_FLC_GetCurrentState(void)
{
return enFlowState;
}
/****************************************************************************
* Function : UI_FLC_EnterNewState
* Description : Push a new state to state queue, the oldest state will be discard
* Argument : the new state
* Return : none
***************************************************************************/
void UI_FLC_EnterNewState(EN_FLOW_STATE enState)
{
enLast3FlowState = enLast2FlowState;
enLast2FlowState = enLast1FlowState;
enLast1FlowState = enFlowState;
enFlowState = enState;
UI_FLC_NewStateInitial(enState);
}
/****************************************************************************
* Function : UI_FLC_ReturnLastState
* Description : Pop a old state from state queue.
* Argument : none
* Return : the current state
***************************************************************************/
EN_FLOW_STATE UI_FLC_ReturnLastState(void)
{
enFlowState = enLast1FlowState;
enLast1FlowState = enLast2FlowState;
enLast2FlowState = enLast3FlowState;
enLast3FlowState = FS_NORMAL_PLAY;
UI_FLC_NewStateInitial(enFlowState);
return enFlowState;
}
/****************************************************************************
* Function : UI_FLC_PassKey
* Description : AP flow control
* Argument : none
* Return : none
***************************************************************************/
void UI_FLC_PassKey(BYTE bKey)
{
EN_FLOW_STATE enState;
enState = UI_FLC_GetCurrentState();
if(enState == FS_MENU_INPUT)
gSysInfo.fStopPolling = 1;
else
gSysInfo.fStopPolling = 0;
if((enState < FS_END) && (enState >= FS_NORMAL_PLAY))
{
if(stStateTable[enState].fRealtimeResponse)
gbKeyRepeatCnt++;
if(gbKeyRepeatCnt > 0xF0 || bKey != KEY_NO_KEY)
{
stStateTable[enState].fpProc(bKey);
gbKeyRepeatCnt = 0;
}
}
}
#if 0
/****************************************************************************
* Function : UI_FLC_GetLastState
* Description : Get a old state from state queue.
* Argument : none
* Return : the current state
***************************************************************************/
EN_FLOW_STATE UI_FLC_GetLastState(void)
{
return enLast1FlowState;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -