📄 mmi.c
字号:
/*****************************************************************************
*
* $Log: D:\VM700\software\power.c $
*
* 1 03-11-17 19:51 Wang Guanping
* Begin to edit the source code.
*****************************************************************************/
#define GLOBALS_MMI
#include "include.h"
//static void Enter_Menu(void);
//static void Exit_Menu(void);
//static void Exit_Testmode(void);
//static int8u password_index;
/*
static void PostKeyMessage(MSG_MODULE p,MESSAGE_ID nMsg)
{
PostMessage(p,nMsg,0);
return;
}
void Send_Power_On(void)
{
PostKeyMessage(PwrMsgQueue,MSG_POWER_ON);
ActiveValue=NO_KEY;
}
void Send_Power_Off(void)
{
PostKeyMessage(PwrMsgQueue,MSG_POWER_OFF);
if(ValBit(Sys_Flag,F_Test))
{
Exit_Testmode();
}
PowerOffSource=KEY_POWER_OFF;
SaveSetting();
}
*/
/*
static void Exit_Testmode(void)
{
ClrBit(Sys_Flag,F_Test);
PostOsdMsg(MSG_OSD_TEST_EXIT,(int16u)nTest_Setp);
Save_RB5_Data();
RB5_Init();
SaveSetting();
return;
}
*/
/*
static int8u KeySource(int8u action)
{
int8u source=0;
//Determine key source
for(;;)
{
if(ValBit(action,0))break;
source++;
action>>=1;
}
return source;
}
static void CheckRepeat(int8u source)
{
static int16u nTimeMem[NUMOFKEYSOURCE];
int16u i;
if(ValBit(Key_Status,source)==0)
{
g_Key[source].Time=0;
return;
}
if(g_Key[source].Time<T_RPT_DELAY)
{
nTimeMem[source]=0;
return;
}
if(nTimeMem[source])
{
i=g_Key[source].Time-nTimeMem[source];
if(i<T_RPT_CYCLE)return;
//防止按键时间无限自增而导致计数器溢出
if(g_Key[source].Time>=MAXKEYTIME)
g_Key[source].Time-=T_RPT_CYCLE;
}
nTimeMem[source]=g_Key[source].Time;
SetBit(Repeat,source);
return;
}
#define F_Press 0
#define F_Release 1
#define F_LongPress 2
#define F_Repeat 3
#define F_LP_Status 4
#define bPress ValBit(action,F_Press)
#define bRelease ValBit(action,F_Release) //按键释放
#define bLongPress ValBit(action,F_LongPress)
#define bRepeat ValBit(action,F_Repeat)
#define bLP_Status ValBit(action,F_LP_Status)
static int8u GetEvent(void)
{
int8u action;
action=0;
if(ValBit(Press,ActiveSource))
{
SetBit(action,F_Press); //F_Press/F_Release/F_LongPress是
}
if(ValBit(Release,ActiveSource))
{
SetBit(action,F_Release); //按键释放
}
if(ValBit(LongPress,ActiveSource))
{
SetBit(action,F_LongPress);
}
if(ValBit(Repeat,ActiveSource))
{
SetBit(action,F_Repeat);
}
if(action==0)
return 0;
if(ValBit(LongPress_StatusMem,ActiveSource)
||ValBit(LongPress_Status,ActiveSource))
{
SetBit(action,F_LP_Status);
}
return action;
}
static int8u nWatch_OSD_Timer;
static void Enter_Menu()
{
nWatch_OSD_Timer=0;
SetBit(Video_Flag,F_SysMenu); //在菜单状态
Setup_Index=SETUP_SCREEN_SELECT;
PostOsdMsg(MSG_OSD_MENU_PRO,WORD(Setup_Index,0));
return;
}
#define OSD_TIMEOUT_INTERVAL T100_25S
extern void Watch_Menu() //菜单的有效时间控制
{
if(ValBit(Video_Flag,F_SysMenu)==0)
{
nWatch_OSD_Timer=0;
return;
}
nWatch_OSD_Timer++;
if(nWatch_OSD_Timer>=OSD_TIMEOUT_INTERVAL)
{
Exit_Menu();
}
return;
}
static void Exit_Menu()
{
#if 0
{//zyq.
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Clr_Character();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Exit_MenuWin();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Delay_us();
Clr_Character();
}
#endif
nWatch_OSD_Timer=0;
ClrBit(Video_Flag,F_SysMenu); //没有在菜单状态
PostOsdMsg(MSG_OSD_SYS_SETUP_CLR,0); //清屏上所有显示
SaveSetting();
return;
}
*/
/*
//关机后只检测Power和Mute两个按键的按下
static void CtrlMainPower(void)
{
int8u action;
if(F_PowerStatus_Val()==0)return;
action=GetEvent();
if(action==0)return;
if(ActiveValue==K_POWER&&ActiveSource==PANEL_POWER)
{
//关机后不需要判断长按、短按
if(Machine_Power()==0)
{
if(bPress)
{
//Printf_Debug(11,13,6);//debug;
//return;//debug;
PostKeyMessage(PwrMsgQueue,MSG_POWER_ON);
ActiveValue=NO_KEY;
//nVideoSw_Flag=0xaa;//0112.Power On;
}
return;
}
if(bLongPress) //LongPress进入关机状态
{
Printf_Debug(11,12,0x55);//debug;
//return;//debug;
PostKeyMessage(PwrMsgQueue,MSG_POWER_OFF);
//ActiveValue=NO_KEY;//???
//Printf_Debug(1,1,'!');//debug;
if(ValBit(Sys_Flag,F_Test))
{
Exit_Testmode();
}
PowerOffSource=KEY_POWER_OFF;
//nVideoSw_Flag=0x55;//0112.Power off
SaveSetting();
return;
}
if(bRelease)//短按进入MUTE状态
{
if(Mute_Audio_Val)
{
Mute_Audio_Clr
}
else
{
Mute_Audio_Set
}
return;
}
return;
}
return;
}*/
/*
//extern unsigned char main_key_message;
static void Video_Sw_Setup()
{
int8u action;
if(!Machine_Power())
{
PostOsdMsg(MSG_OSD_RGB_ON,0); //关机要清屏顶的OSD显示
return;
}
action=GetEvent();
if(action==0)return;
switch(ActiveValue)
{
case K_MENU:
#if 0
main_key_message=1;
if(ValBit(Video_Flag,F_Video_Sw))//在菜单模式下按MENU键
{
if(bLP_Status==false)
{
if(bRelease)
{
PostOsdMsg(MSG_OSD_VOFF_ON,0);
ClrBit(Video_Flag,F_Video_Sw);
//nVideoSw_Flag=0xaa;
break;
}
}
}
if(bLongPress) //长按MENU是video off
{
if(CCFL_EN_Val==0)return;
if(ValBit(Video_Flag,F_SysMenu))
{
Exit_Menu();
}
PostOsdMsg(MSG_OSD_VOFF_OFF,0);
SetBit(Video_Flag,F_Video_Sw); //在菜单状态
//nVideoSw_Flag=0x55;
break;
}
#endif
break;
case K_LEFT:
#if 0
main_key_message=2;
#endif
break;
case K_RIGHT:
#if 0
main_key_message=3;
#endif
break;
case K_POWER:
if(ValBit(Video_Flag,F_Video_Sw))//在菜单模式下按MENU键
{
if(bLP_Status==false)
{
if(bRelease)
{
PostOsdMsg(MSG_OSD_VOFF_ON,0);
ClrBit(Video_Flag,F_Video_Sw);
//nVideoSw_Flag=0xaa;
break;
}
}
}
break;
case K_MODE:
#if 0
if(ValBit(Video_Flag,F_Video_Sw))//在菜单模式下按MENU键
{
if(bLP_Status==false)
{
if(bRelease)
{
PostOsdMsg(MSG_OSD_VOFF_ON,0);
ClrBit(Video_Flag,F_Video_Sw);
//nVideoSw_Flag=0xaa;
break;
}
}
if(bLongPress) //长按MENU是video off
{
if(CCFL_EN_Val==0)return;
SetBit(Video_Flag,F_SysAvOut);
nAvOut_Flag=~nAvOut_Flag;
//zyq.if(nAvOut_Flag==0x55){Sel_AV_OUTPUT2};
//zyq.if(nAvOut_Flag==0xaa){Sel_AV_OUTPUT1};
if(nAvOut_Flag==0x55){//zyq.
Set_Mute_B //BOX Mute
Delay_ms(20);
Sel_AV_OUTPUT2
Delay_ms(20);
Clr_Mute_B //Clear BOX Mute
};
if(nAvOut_Flag==0xaa){//zyq.
Set_Mute_B //BOX Mute
Delay_ms(20);
Sel_AV_OUTPUT1
Delay_ms(20);
Clr_Mute_B //Clear BOX Mute
};
PostOsdMsg(MSG_OSD_TOP_AVOUT,(int16u)nAvOut_Flag);
Tip_Timer=150;
SaveSetting();
}
}
#endif
break;
}
return;
}
//--------------------------------------
#pragma CONST_SEG DEFAULT
const int8u PasswordTable[6]=
{
K_RIGHT,
K_LEFT,
K_RIGHT,
K_RIGHT,
K_LEFT,
K_LEFT
};
#pragma CODE_SEG DEFAULT
static void Enter_Testmode(void)
{
SetBit(Sys_Flag,F_Test);
password_index=0;
DefaultPictureSetting();//进入工厂设定模式后,自动调为默认参数?
RB5_Init();
PostOsdMsg(MSG_OSD_TEST_ENTER,0);
return;
}
*/
/*
static void CheckTestKey()
{
if(password_index>5)
password_index=0;
if(ActiveValue==PasswordTable[password_index])
{
password_index++;
if(password_index==6)
{
Enter_Testmode();
}
}
else
{
password_index=0;
}
}
static void Key_Test_Setup()
{
int8u action;
int8u Msg_ID;
Msg_ID=ActiveValue;
//int8u test_key_val;
if(!Machine_Power())
{
PostOsdMsg(MSG_OSD_TEST_EXIT,(int16u)nTest_Setp); //关机要清屏顶的OSD显示
return;
}
if(Msg_ID==NO_KEY)return;
action=GetEvent();
if(action==0)return;
if(action==1)return;
if(ValBit(Video_Flag,F_SysMenu))return; //在MENU操作时,不允许进入TEST MODE
if(ValBit(Video_Flag,F_SysAvOut))return;
if(ValBit(Video_Flag,F_SysAvIn))return;
if(ValBit(Video_Flag,F_SysMode))return;
if(ValBit(Video_Flag,F_Video_Sw))return;
if(!ValBit(Sys_Flag,F_Test)) //没有在测试模式下
{
if(Msg_ID==K_LEFT||Msg_ID==K_RIGHT)
{
CheckTestKey();
}
else
{
Prepare_TestMode();
}
return;
}
if(Msg_ID==K_LEFT)
{
if(bLP_Status==false)
{
if(bRelease)
{
if(ValBit(Sys_Flag,F_Test))
{
PostOsdMsg(MSG_OSD_TEST_PRO,(int16u)nTest_Setp);
RB5_Adjust_Reg(nTest_Setp,false);
}
}
}
if(bLongPress)
{
if(ValBit(Sys_Flag,F_Test))
{
Exit_Testmode();
}
}
return;
}
if(Msg_ID==K_RIGHT)
{
if(bLP_Status==false)
{
if(bRelease)
{
if(ValBit(Sys_Flag,F_Test))
{
PostOsdMsg(MSG_OSD_TEST_PRO,(int16u)nTest_Setp);
RB5_Adjust_Reg(nTest_Setp,true);
}
}
}
return;
}
if(Msg_ID==K_MODE)
{
if(bLP_Status==false)
{
if(Release)
{
if(ValBit(Sys_Flag,F_Test))
{
nTest_Setp++;
if(nTest_Setp>TEST_TINT)
nTest_Setp=TEST_COLOR;//TEST_PICTURE;
PostOsdMsg(MSG_OSD_TEST_PRO,(int16u)nTest_Setp);
}
}
}
return;
}
return;
}
*/
/*
//-------------------------------------
static void Key_Top_Setup()
{
int8u action;
if(!Machine_Power())
{
PostOsdMsg(MSG_OSD_TOP_CLR,0); //关机要清屏顶的OSD显示
return;
}
action=GetEvent();
if(action==0)return;
switch(ActiveValue)
{
case K_MODE:
break;
case K_POWER:
if(ValBit(Video_Flag,F_SysMenu)==0&&ValBit(Video_Flag,F_Video_Sw)==0) //不是在菜单模式下,是快捷键操作
{
if(bLP_Status==false) //不要该条件可不可以???
{
if(bRelease) //短按POWER是V.SEL的AV-IN切换
{
if(CCFL_EN_Val==0)return;
SetBit(Video_Flag,F_SysAvOut);
nAvIn_Flag=~nAvIn_Flag;
if(nAvIn_Flag==0x55)
{
//Sel_AV_INPUT1
avv=AV1;
}
if(nAvIn_Flag==0xaa)
{
//Sel_AV_INPUT2
avv=AV2;
}
//TFT_Device_Init();
//PostOsdMsg(MSG_OSD_MUTE,0);
//PostOsdMsg(MSG_OSD_UNMUTE,0);
Clr_CCFL_EN
V_RGB_BLANK_OFF();
Video_Soft_Mute();
Set_IR_SW //zyq.IR headphone off
PostOsdMsg(MSG_OSD_TOP_AVIN,(int16u)nAvIn_Flag);
Tip_Timer=150;
SaveSetting();
}
break;
}
}
break;
default:
break;
}
return;
}
static void CtrlMenuSetup(void)
{
int8u action;//,disp_prm;
if(!Machine_Power())//关机要退出菜单
{
Exit_Menu();
return;
}
action=GetEvent();
if(action==1)return; //Press把按键按下动作拿掉,按键释放有效
if(action==0)return;
switch(ActiveValue)
{
case K_MENU:
break;
case K_LEFT:
break;
case K_RIGHT:
break;
case K_POWER: //在菜单模式下按短按K_POWER或者K_MODE退出菜单
break;
case K_MODE:
break;
default:
break;
}
//PostOsdMsg(MSG_OSD_MENU_PRO,WORD(Setup_Index,disp_prm));
return;
}
*/
/*
void DispatchMessage()
{
int8u source;
//按键测试模式下,不响应任何按键
if(ValBit(Sys_Flag,F_Test))
{
;
//if(Get_OSD_Test_State()!=OSD_TEST_KEYVALUE)
// bKeyTest=false;
//if(bKeyTest) 暂时没有做上去
// Key_Status=0;
}
//计算按键状态的上升沿和下降沿
//If Key_Status is also set at IR interrupt
//Then IR interrupt must be disabled during operation of Key_Status and Key_StatusMem
Press=((~Key_StatusMem)&Key_Status);
Release=(Key_StatusMem&(~Key_Status));
Key_StatusMem=Key_Status;
//计算长按状态的上升沿
LongPress_Status=0;
for(source=0;source<NUMOFKEYSOURCE;source++)
{
if(ValBit(Key_Status,source))
{
if(g_Key[source].Time>=T_LONG_PRESS)
SetBit(LongPress_Status,source);
}
}
LongPress=((~LongPress_StatusMem)&LongPress_Status);
//计算重复状态的上升沿
Repeat=0;
for(source=0;source<NUMOFKEYSOURCE;source++)CheckRepeat(source);
//Process the new pressed key.
if(Press)
{
ActiveSource=KeySource(Press);
ActiveValue=g_Key[ActiveSource].Value;
}
CtrlMainPower();
Key_Test_Setup();
if(Machine_Power()&&(ValBit(Sys_Flag,F_Test)==0))
{
//debug;Key_Top_Setup(); //快揭键下的关机在Key_Power_Setup()里
CtrlMenuSetup(); //菜单下的关机也在Key_Power_Setup()里
Video_Sw_Setup();
}
ClrBit(Press,ActiveSource);
ClrBit(Release,ActiveSource);
ClrBit(LongPress,ActiveSource);
ClrBit(Repeat,ActiveSource);
LongPress_StatusMem=LongPress_Status;
for(source=0;source<NUMOFKEYSOURCE;source++)
{
if(ValBit(Key_Status,source)==0)
{
ClrBit(Press,source);
ClrBit(Release,source);
ClrBit(LongPress,source);
ClrBit(Repeat,source);
}
}
return;
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -