📄 power.c
字号:
#include "types.h"
#include "board.h"
#include "global.h"
#include "ms_reg.h"
#include "panel.h"
#include "misc.h"
#include "ms_rwreg.h"
#include "mstar.h"
#include "debug.h"
#include "msOsd.h"
#include "adjust.h"
#define TurnOffOSD 0
void Power_TurnOffLed(void);
void Power_TurnOffPanel(void);
void Power_PowerOffSystem(void);
void Power_TurnOffGreenLed(void);
void Power_TurnOnAmberLed(void);
//=============================================
// Control system power status
// caller : main()
void Power_PowerHandler(void)
{
if (ForcePowerSavingFlag)
{
Clr_ForcePowerSavingFlag(); // clear force power saving flag
if (!PowerSavingFlag)
{
printMsg("enter power saving");
Power_PowerOffSystem();
if (!PowerOnFlag) // system is on power-off status
{ Power_TurnOffLed();
}
else
{ Power_TurnOffGreenLed(); // turn off green led //
Power_TurnOnAmberLed(); // turn on amber led //
}
}
}
}
void Power_PowerOnSystem(void)
{
Power_TurnOffPanel();
mStar_PowerUp();
FlgPowerOnOpenAudio=1;
hw_ClrStandby();
Clr_PowerSavingFlag();
Set_InputTimingChangeFlag();
SrcFlags|=SyncLoss;
}
void Power_PowerOffSystem(void)
{
VolumeToPowerSaving();
Power_TurnOffPanel();
mStar_PowerDown();
Set_PowerSavingFlag();
Clr_InputTimingChangeFlag();
}
void Power_TurnOffLed(void)
{
hw_ClrGreenLed();
hw_ClrAmberLed();
}
void Power_TurnOnGreenLed(void)
{
hw_SetGreenLed();
}
void Power_TurnOffGreenLed(void)
{
hw_ClrGreenLed();
}
void Power_TurnOnAmberLed(void)
{
hw_SetAmberLed();
}
void Power_TurnOffAmberLed(void)
{
hw_ClrAmberLed();
}
#if PanelRSDS // only for Hannstar 15" RSDS panel
void sMute(BYTE on)
{
// for Hannstar TCON panel :
mStar_WriteByte(REGBK, REGBANKTCON);
if (on)
{ mStar_WriteByte(IFCTRL, OuputFormat|PUA_B); // turn off OE
Delay1ms(40);
mStar_WriteWord(G4VST_H, GPO4_VStart); // turn OE
mStar_WriteWord(G4VEND_H, GPO4_VEnd);
mStar_WriteWord(G4HST_H, GPO4_HStart);
mStar_WriteWord(G4HEND_H, GPO4_HEnd);
mStar_WriteByte(G4CTRL, GPO4_Control);
}
else
{ mStar_WriteByte(IFCTRL, OuputFormat);
mStar_WriteWord(G4VST_H, 0); // turn OE
mStar_WriteWord(G4VEND_H, 0);
mStar_WriteWord(G4HST_H, 0);
mStar_WriteWord(G4HEND_H, 0);
mStar_WriteByte(G4CTRL, 1); // Active low
}
mStar_WriteByte(REGBK, REGBANKSCALER);
}
#endif
void Power_TurnOnPanel(void)
{
// mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)|BLKS_B); // for background black
hw_SetPanel();
ForceDelay1ms(PanelOnTiming1);
//jon add
#if PanelQDI17L
mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)&~WHTS_B);
ForceDelay1ms(10);
#endif
#if PanelRSDS
sMute(1);
#endif
#if PanelRSDS
mStar_WriteByte(OCTRL3, 0x1F); // RSDS output with all GPO
#elif PanelLVDS
mStar_WriteByte(OCTRL3, ENRT_B); // LVDS output
#endif
mStar_WriteByte(TRISTATE, 0);
//mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)&~BLKS_B);
ForceDelay1ms(PanelOnTiming2);
hw_SetBlacklit();
}
void Power_TurnOffPanel(void)
{
#if TurnOffOSD
mStar_WriteOSDByte(OSDDBC, 0x0); // disable osd double buffer
mStar_WriteOSDByte(IOSDC1, 0);
// mStar_WriteOSDByte(DBFC, 0x0); // disable double buffer
// mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)|BLKS_B);
Delay4us();
#endif
hw_ClrBlacklit();
ForceDelay1ms(PanelOffTiming1);
//jon add
#if PanelQDI17L
mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)|WHTS_B);//barry0319 QDIXL02 normal white panel
ForceDelay1ms(140); //jon change 40 to 140 modify change timing monitor flicker(3~5senconds)
#endif
#if PanelRSDS
sMute(0);
#endif
mStar_WriteByte(TRISTATE, 0xFF);
#if !PanelTTL
mStar_WriteByte(OCTRL3, 0);
#endif
ForceDelay1ms(PanelOffTiming2);
hw_ClrPanel();
#if TurnOffOSD
mStar_WriteOSDByte(OSDDBC, 0x5); // enable double
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -