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

📄 power.c

📁 完整的软件学习--显示器驱动视频软件
💻 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"

#define TurnOffOSD		1

void Power_TurnOffLed(void);
void Power_TurnOffPanel(void);
void Power_PowerOffSystem(void);
extern void InitialVolume(void);
#if NewEA03
void SetRSDSOffsetZeroLevel(BYTE On);
#endif

//=============================================
void Power_TurnOffLed(void)
{
  hw_ClrGreenLed();
  hw_ClrAmberLed();
}
#if 1//EnableFactoryDefine
void Power_TurnOnGreenLed(void)
{ 
 
  	hw_SetGreenLed();
 
}
void Power_TurnOffGreenLed(void)
{
 
  	hw_ClrGreenLed();
 
}
void Power_TurnOnAmberLed(void)
{ 
 
  	hw_SetAmberLed();
  
}
void Power_TurnOffAmberLed(void)
{
 
  	hw_ClrAmberLed();

}
#endif

//=============================================
// Control system power status
// caller : main()
void Power_PowerHandler(void)
{ if (ForcePowerSavingFlag)
    { 
        Clr_ForcePowerSavingFlag(); // clear force power saving flag
        if (!PowerSavingFlag)
      	     {
#if DEBUG_ENABLE
      	     printMsg("enter power saving");
#endif
      	     Power_TurnOffGreenLed(); // turn off green led
      	     if (PowerOnFlag)
                Power_TurnOnAmberLed(); // turn on amber led
      	     Power_PowerOffSystem();
      	     if (!PowerOnFlag) // system is on power-off status
                Power_TurnOffLed();
      	     }
    }
}

void Power_PowerOnSystem(void)
{   
  Clr_PowerSavingFlag();
#if Dual_Input_Icon_Enable
  Set_DrawSourceTypeFlag();
#endif
  Set_InitVolumeFlag();
  InitialVolume();//yurian add 20050124
  Power_TurnOffPanel();
  mStar_PowerUp();
  Set_InputTimingChangeFlag();
  SrcFlags|=SyncLoss;  
}

void Power_PowerOffSystem(void)
{ 
  Set_PowerSavingFlag();
  Clr_InitVolumeFlag();	
  SetAudio(0);  
  Power_TurnOffPanel();
  mStar_PowerDown();
  Clr_InputTimingChangeFlag();
}


#if (PanelRSDS&&!PanelOff1Sec) // 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);
#if NewEA03
      mStar_WriteWord(G4VST_H, 0);
      mStar_WriteWord(G4VEND_H, 0);
      mStar_WriteWord(G4HST_H, 0);
      mStar_WriteWord(G4HEND_H, 0);      
      mStar_WriteByte(G4CTRL, 0); // Active high
      ForceDelay1ms(40);
#endif	  
      mStar_WriteWord(G4VST_H, GPO4_VStart);
      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);
      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

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
#if (!PanelOff1Sec)
void Power_TurnOnPanel(void)
{
#if NewEA03
	SetRSDSOffsetZeroLevel(0);
#endif

#if (PanelAUEN05|PanelAUEG01|PanelAUEG01_v2) //xxxx 20031121
  mStar_WriteByte(OCTRL2,mStar_ReadByte(OCTRL2)|WHTS_B);
  Delay1ms(100);  
  mStar_WriteByte(OCTRL2,mStar_ReadByte(OCTRL2)&(~WHTS_B));
#endif

//---------------------------------
#if 0//NewEA03
  hw_SetPanel12V();
  ForceDelay1ms(PanelOnTiming0);
  hw_SetPanel();
#else
  hw_SetPanel();
#if PanelRSDS
  ForceDelay1ms(PanelOnTiming0); //delay between 3.3V On - 12V On
  hw_SetPanel12V(); //Set 12V Panel Power
#endif  
#endif
//---------------------------------
  Delay1ms(PanelOnTiming1);

#if PanelRSDS
  sMute(1);
#endif

#if PanelRSDS
  mStar_WriteByte(OCTRL3, 0x1F); // RSDS output with all GPO
  mStar_WriteByte(TRISTATE, 0);
#elif PanelLVDS
  mStar_WriteByte(OCTRL3, ENRT_B); // LVDS output
  mStar_WriteByte(TRISTATE, 0xff); 
#elif PanelTTL
  mStar_WriteByte(TRISTATE, 0);
#endif

  Delay1ms(PanelOnTiming2);
  if (InputTimingChangeFlag)
  	Power_TurnOffPanel();
  else 
  	hw_SetBackLit();
}

void Power_TurnOffPanel(void)
{
#if NewEA03
	SetRSDSOffsetZeroLevel(1);
#endif

#if TurnOffOSD
  mStar_WriteOSDByte(OSDDBC, 0x0); // disable osd double buffer
  mStar_WriteOSDByte(IOSDC1, 0);
  Delay4us();
#endif

  hw_ClrBackLit();
#if (PanelCPTEA03|PanelCPTXG08|PanelHstSX84|PanelHanStarSXA1|PanelHstSX84_F|PanelCPTXP02)//tony 23/12/03 
  mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)|BLKS_B);
#endif

  Delay1ms(PanelOffTiming1);

#if (PanelAUEN05|PanelAUEG01|PanelAUEG01_v2) //xxxx 20031121 
  mStar_WriteByte(OCTRL2,mStar_ReadByte(OCTRL2)|WHTS_B);
#endif

#if PanelRSDS
  sMute(0);
#endif

  mStar_WriteByte(TRISTATE, 0xFF);
#if !PanelTTL
  mStar_WriteByte(OCTRL3, 0);
#endif
  Delay1ms(PanelOffTiming2);

//-------------------------
#if NewEA03
  hw_ClrPanel();
  Delay1ms(PanelOffTiming0);  	
  hw_ClrPanel12V();
  mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)&(~BLKS_B));  
#else
#if PanelRSDS
  hw_ClrPanel12V();
  Delay1ms(PanelOffTiming0);  	
#endif
#if (PanelAUEN05|PanelAUEG01|PanelAUEG01_v2) //xxxx 20031121
  mStar_WriteByte(OCTRL2,mStar_ReadByte(OCTRL2)&(~WHTS_B));
#endif

#if (PanelCPTEA03|PanelCPTXG08|PanelHstSX84|PanelHanStarSXA1|PanelHstSX84_F|PanelCPTXP02)//tony 23/12/03 
  mStar_WriteByte(OCTRL2, mStar_ReadByte(OCTRL2)&(~BLKS_B));
#endif
  hw_ClrPanel();
#endif
//-------------------------

#if TurnOffOSD
  mStar_WriteOSDByte(OSDDBC, 0x5); // enable double
#endif

}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
 
#else //turn on/off for Panel AUES05
void Power_TurnOnPanel(void)
{
  while(DisablePanelOnFlag)
  	ForceDelay1ms(50);
  
  hw_SetPanel();
  #if DEBUG_ENABLE
  printMsg("on panel power");
  #endif
  
  Delay1ms(PanelOnTiming1);

  mStar_WriteByte(OCTRL3, 0x1F);
  mStar_WriteByte(TRISTATE, 0);

  Delay1ms(PanelOnTiming2);
  if (InputTimingChangeFlag)
  	Power_TurnOffPanel();
  else 
  	hw_SetBackLit();
}

void Power_TurnOffPanel(void)
{
#if TurnOffOSD
  mStar_WriteOSDByte(OSDDBC, 0x0); // disable osd double buffer
  mStar_WriteOSDByte(IOSDC1, 0);
  Delay4us();
#endif

  hw_ClrBackLit();
  Delay1ms(PanelOffTiming1);
  
  mStar_WriteByte(TRISTATE, 0xFF);
  mStar_WriteByte(OCTRL3, 0);
  Delay1ms(PanelOffTiming2);

  hw_ClrPanel();
  #if DEBUG_ENABLE
  printMsg("off panel power");
  #endif

  Set_DisablePanelOnFlag();
  PanelOffTimeCounter=5;
	
#if TurnOffOSD
  mStar_WriteOSDByte(OSDDBC, 0x5); // enable double
#endif
}
#endif


//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  

#if NewEA03
void SetRSDSOffsetZeroLevel(BYTE On)
{
    mStar_WriteByte(REGBK,REGBANKADC);
	mStar_WriteByte(TESTEN,0x80);

	if(On)
		mStar_WriteByte(TST_REG,0x80);
	else
		mStar_WriteByte(TST_REG,0x8b);	
	
	mStar_WriteByte(TESTEN,0x00);
	mStar_WriteByte(REGBK,REGBANKSCALER);
	Delay1ms(1);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -