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

📄 power.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	#ifdef PORT_IR_USED		IRInit(gmc_T_CLK_KHZ * 1000UL);	#endif	}	// reset Power On flag to indicate power off state	PowerUpFlag.PowerOnState = gmd_FALSE;// YuriG PDR 8946 08-06-2004// turn off LEN only if soft power off mode	if ((UserPrefSwitches & PowerOn) == 0)   {   	LedOff();	// Turn off LED   }	// Run keypad scanning from ISR	// if when powering down, OCM is running at under TCLK, don't use the ISR	// it takes too much processor time.#if ((OCM_CLK_PWRDOWN_KHZ < T_CLK_KHZ) && (GET_KEY_TIMER_ISR == TIMER2_VECTOR))	StopGetKeyISR();#else	StartGetKeyISR();#endif}// Power Management Handler implementation code//******************************************************************// DESCRIPTION 	:	Power handler from the sync signals//					It checks the input sync signals every 20 mSec,//					then passes the sync state to the OSD handler.//					The OSD handler will display the "NO SYNC" osd message//					on the screen few seconds if it is no sync,//					then calls the proper gsel functions to turn off/on power.//					In this way, the OSD handler keeps track of the power//					states from the sync signals and the power key.// SYNTEX		:	void PowerMgmt_Handler(void)// PARAMETERS	:// RETURN		://******************************************************************void PowerMgmt_Handler(void){   BYTE SyncState;	if (gm_TimerCheck(PowerHandler_10ms_TMR)  == gmd_TMR_ACTIVE)		return;	Msg = GetMsg( &PowerHandlerQ );#if DEBUG_PH && DEBUG_MSG	if( Msg != QUEUE_EMPTY ) msg( "Message %d", Msg);#endif   SyncState = B_SyncState;   // Copy the global sync state variable.   if( (Msg == MTP_SOFTKEY_OFF) && (PowerHandlerState != PWR_KEY_OFF_STATE) )   {#ifdef PHOENIX_U   	gm_SetRegBitsByte(DISPLAY_CONTROL1, FORCE_BKGND);	// Test 1112   	gm_SyncUpdate();#endif      #if Enable_AOC		// Louis 0822         // DisableAOCMain();         EnableDontUpdateAOCMain();      #endif       msg("Power Saving - Soft key off", 0);		 PowerUpFlag.ReqPowerOff_Key = gmd_TRUE;	    PowerHandlerState = PWR_KEY_OFF_STATE;		 SystemFlags.SystemNormal = gmd_FALSE;		 SystemFlags.PowerSaving = gmd_TRUE;		 SystemFlags.ModeHandlerOff = gmd_TRUE;	#if USE_AUDIO && USE_GSEL_DRVR_MODEL    // Mute audio when Power Key off 		gm_CallDriver(DEV_AUDIO_DECODER, gmd_AUD_SET_OUTPUT_MUTE, AUDIO_MUTE_ON, NULL_PTR);	#endif		    }   switch (PowerHandlerState)   {	   case PWR_KEY_OFF_STATE:		   if(Msg == MTP_SOFTKEY_ON)         {            msg("Power On - Soft key On", 0);			   PowerUpFlag.ReqPowerOn_Key = gmd_TRUE;			   PowerHandlerState = PWR_ON_STATE;            SystemFlags.SystemNormal = gmd_TRUE;            SystemFlags.PowerSaving = gmd_FALSE;            SystemFlags.ModeHandlerOff = gmd_FALSE;            FirstPowerUp = 0;         }			else if (Msg != MTP_SOFTKEY_OFF)			{#if USE_POWERDOWN_ROM_CE				ExecuteFromRAM( 0 );#endif /* USE_POWERDOWN_ROM_CE */			}		   break;	   case PWR_ON_STATE:			if((SystemFlags.SyncDetect == gmd_FALSE) &&				(SystemFlags.TestPatternRunning == gmd_FALSE))			{				if(InputCableDetect() == gmd_TRUE)					msg("Syncs Lost", 0);				PowerHandlerState = DetNewPwrState(SyncState);			}			break;      case PWR_STANDBY_STATE:	   case PWR_SUSPEND_STATE:		   if ( SystemFlags.SyncDetect == gmd_TRUE )			{            msg("Power On - Syncs Found", 0);            PowerHandlerState = PWR_ON_STATE;         }		   else         {            PowerHandlerState = DetNewPwrState(SyncState);			}		   break;		case PWR_DOWN_WAIT_STATE:			if(UserPrefMHAutoScanMode == gmd_FALSE)			{// if UserPrefMHAutoScanMode is disabled, and the port changes, then			 // someone has manually changed the port, reset the PowerDownWait			 // timer to give more time to find syncs.				static BYTE oldPort = 0xff;				if(oldPort != B_SyncStatePort)				{					msg("Port Changed, Reset timer",0);					gm_TimerStart(PowerDownWait_10ms_TMR, POWER_DOWN_WAIT_TIMEOUT);					oldPort = B_SyncStatePort;				}			}			if((SystemFlags.SyncDetect == gmd_TRUE ) ||				(SystemFlags.TestPatternRunning == gmd_TRUE))			{				msg("Power On - Syncs Found", 0);            PowerHandlerState = PWR_ON_STATE;         }		   else if( ( Msg == MTP_POWER_DOWN ) ||						( gm_TimerCheck(PowerDownWait_10ms_TMR) == gmd_TMR_TIMED_OUT ) )         {            msg( "Osd Acknowledged or Wait Timed Out", 0);			   gm_TimerStop(PowerDownWait_10ms_TMR);			   PowerUpFlag.ReqPowerOff_Sync = gmd_TRUE;			   PowerHandlerState = PWR_DOWN_STATE;            SendMsg( &OsdQ, MTO_POWER_DOWN );            SystemFlags.PowerSaving = gmd_TRUE;            OsdNoticed = gmd_FALSE;         }         else         {            if( (gm_TimerRead(PowerDownWait_10ms_TMR) < PWRDWN_OSDACK_TIMEOUT) &&                (!OsdNoticed) )            {               msg("Send Power Down Notice to OSD", 0);               SendMsg( &OsdQ, MTO_POWER_DOWN_NOTICE );               OsdNoticed = gmd_TRUE;            }			   PowerHandlerState = DetNewPwrState(SyncState);         }         break;	   case PWR_DOWN_STATE:		   if (SystemFlags.SyncDetect == gmd_TRUE)			{				   			#ifdef PHOENIX_U				// Test 1110				gm_WriteRegByte(DISPLAY_CONTROL1, 1);				gm_ForceUpdate();            #endif            msg("Power On - Syncs Found", 0);			   PowerUpFlag.ReqPowerOn_Sync = gmd_TRUE;            //SendMsg( &OsdQ, MTO_POWER_ON );            PowerHandlerState = PWR_ON_STATE;            SystemFlags.PowerSaving = gmd_FALSE;#if defined(PHOENIX_U) && ((defined(EV_BD_B_57XX) && ( BOARD == EV_BD_B_57XX )) || (defined(RD3_57XX) && ( BOARD == RD3_57XX )))//Video and Component port will not scan during power saving mode. As a result, //System can be forced wake_up by receving a MTP_SOFTKEY_ON event (User press KeyPad "Right" key.)//(P.S OSD project need to modify to generate MTP_SOFTKEY_ON event)         	}     		   	else if (Msg == MTP_SOFTKEY_ON)		   	{            msg("Force Power On For Port Searching", 0);		    PowerUpFlag.ReqPowerOn_Key = gmd_TRUE;			PowerHandlerState = PWR_ON_STATE;            SystemFlags.SystemNormal = gmd_TRUE;            SystemFlags.PowerSaving = gmd_FALSE;            SystemFlags.ModeHandlerOff = gmd_FALSE;            FirstPowerUp = 0;			SendMsg( &OsdQ, MTO_MODE_CHANGE);			#if (BOARD == RD3_57XX )						ChangeToPort(3);  //To scan video port first			#elif (BOARD == EV_BD_B_57XX )						ChangeToPort(2);  //To scan video port first			#endif			#endif		   	}         break;      default:         break;   }   if( PowerUpFlag.ReqPowerOn_Key == gmd_TRUE )   {	   PowerUp();	   PowerUpFlag.ReqPowerOn_Key = gmd_FALSE;	   PowerUpFlag.SoftPowerOnState = gmd_TRUE;		InitModeHandler();                        // Initialize Mode Handler.		SoftPowerReInitforTestPattern=1;#if (USE_ACC_ACM || USE_ACM_3D)      if (UserPrefThemeMode != ACM_MODE_NORMAL)         AdjustHightlightWindow();#endif#ifdef PHOENIX_U			if (!SystemFlags.TestPatternRunning)     //When testpattern running, don't enable output to avoid garbage flashing.//		  gm_WriteRegByte(OP_ENABLE, 0x1f);          //to enable No signal/ No cable OSD when poweron  //sweng0307		  gm_PowerUpPanel();          #endif   }   else if ( PowerUpFlag.ReqPowerOn_Sync == gmd_TRUE )   {	   PowerUp();	   PowerUpFlag.ReqPowerOn_Sync = gmd_FALSE;	   PowerUpFlag.SyncPowerOnState = gmd_TRUE;#if USE_VPORT && USE_GSEL_DRVR_MODEL		gm_CallDriver(DEV_VIDEO_DECODER, gmd_VID_SET_MODE, VDD_MODE_INIT, NULL_PTR);#endif		   }   else if( PowerUpFlag.ReqPowerOff_Key == gmd_TRUE )   {      msg("Power Off Key Req", 0);	   PowerDown();	   PowerUpFlag.ReqPowerOff_Key = gmd_FALSE;	   PowerUpFlag.SoftPowerOnState = gmd_FALSE;#if USE_POWERDOWN_ROM_CE		// At this point, we execute from RAM. The ROM power		// is cycled with the ON and OFF time controlled in		// RAM code.	   msg("Executing from RAM - Soft power off",0); 		InitXROMStateMachineSettleCount();	   ExecuteFromRAM( 0 );#endif // USE_POWERDOWN_ROM_CE   }	else if( PowerUpFlag.ReqPowerOff_Sync == gmd_TRUE )   {      msg("Power Off Sync Req", 0);	   PowerDown();	   PowerUpFlag.ReqPowerOff_Sync = gmd_FALSE;		PowerUpFlag.SyncPowerOnState = gmd_FALSE;		if(UserPrefMHAutoScanMode == gmd_FALSE)		{// if autoscan disabled, we have to make sure we leave power on		 // to the port we're monitoring.			PowerUpDevice(InputPortArray[gmvb_CurrentPortMain].PowerDev);		}	}	gm_TimerStart(PowerHandler_10ms_TMR, 0x02); // start 20ms timer.}// Power Management Handler implementation code//******************************************************************// DESCRIPTION 	:	Power handler from the sync signals//					It checks the input sync signals every 20 mSec,//					then passes the sync state to the OSD handler.//					The OSD handler will display the "NO SYNC" osd message//					on the screen few seconds if it is no sync,//					then calls the proper gsel functions to turn off/on power.//					In this way, the OSD handler keeps track of the power//					states from the sync signals and the power key.// SYNTEX		:	void PowerMgmt_Handler(void)// PARAMETERS	:// RETURN		://******************************************************************static PwrHandlerStates __near DetNewPwrState( BYTE SyncState ){   switch (SyncState)   {		case gmd_HOFFVON:			#if ALT_PWR_HANDLER_MTO_MESSAGE				if( PowerHandlerState != PWR_STANDBY_STATE )				{					msg("No H Sync - Power StandBy ", 0);					SendMsg( &OsdQ, MTO_POWER_STANDBY );					ExtPowerStandBy();					return PWR_STANDBY_STATE;				}			#else				if(InputCableDetect() == gmd_TRUE)		// 1124				{				if( PowerHandlerState != PWR_DOWN_WAIT_STATE )				{					msg("No H Sync - Power Down Wait ", 0);					gm_TimerStart(PowerDownWait_10ms_TMR, POWER_DOWN_WAIT_TIMEOUT);					return PWR_DOWN_WAIT_STATE;				}				}				else					gm_TimerStop(PowerDownWait_10ms_TMR);								#endif			break;		case gmd_HONVOFF:			#if ALT_PWR_HANDLER_MTO_MESSAGE				if( PowerHandlerState != PWR_SUSPEND_STATE )				{					msg("No V Sync - Power Suspend ", 0);					SendMsg( &OsdQ, MTO_POWER_SUSPEND );					ExtPowerSuspend();					return PWR_SUSPEND_STATE;				}			#else				if(InputCableDetect() == gmd_TRUE)		// 1124				{				if( PowerHandlerState != PWR_DOWN_WAIT_STATE )				{					msg("No V Sync - Power Down Wait ", 0);					gm_TimerStart(PowerDownWait_10ms_TMR, POWER_DOWN_WAIT_TIMEOUT);					return PWR_DOWN_WAIT_STATE;				}				}				else					gm_TimerStop(PowerDownWait_10ms_TMR);			#endif			break;		case gmd_HOFFVOFF:			if(InputCableDetect() == gmd_TRUE)			{				if( PowerHandlerState != PWR_DOWN_WAIT_STATE )				{					msg("No H Sync and V Sync - Power Down Wait ", 0);					gm_TimerStart(PowerDownWait_10ms_TMR, POWER_DOWN_WAIT_TIMEOUT);					return PWR_DOWN_WAIT_STATE;				}			}			else				gm_TimerStop(PowerDownWait_10ms_TMR);			break;		default:         break;   }   return PowerHandlerState; // No change in State}//******************************************************************************// FUNCTION     :   void ExtPowerUp (void)//// USAGE        ://// INPUT        :// OUTPUT       :// GLOBALS      :// USED_REGS    ://******************************************************************************void ExtPowerUp (void){#if USE_VPORT && defined(VPORT_CTRL)	gm_WriteRegByte(VPORT_CTRL, VPORT_EN);#endif //USE_VPORT}//******************************************************************************// FUNCTION     :   void ExtPowerDown (void)//// USAGE        ://// INPUT        :// OUTPUT       :// GLOBALS      :// USED_REGS    ://******************************************************************************void ExtPowerDown (void){#if USE_VPORT && defined(VPORT_CTRL)	gm_WriteRegByte(VPORT_CTRL, (gm_ReadRegByte(VPORT_CTRL) & ~VPORT_EN));#endif //USE_VPORT	}//******************************************************************************// FUNCTION     :   void ExtPowerStandBy (void)//// USAGE        ://// INPUT        :// OUTPUT       :// GLOBALS      :// USED_REGS    ://******************************************************************************void ExtPowerStandBy( void ){}//******************************************************************************// FUNCTION     :   void ExtPowerSuspend (void)//// USAGE        ://// INPUT        :// OUTPUT       :// GLOBALS      :// USED_REGS    ://******************************************************************************void ExtPowerSuspend( void ){}

⌨️ 快捷键说明

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