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

📄 power.c

📁 MMI层OBJ不能完全编译
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif

#ifndef _WINDOWS
   ffs_exit ();
#endif  // _WINDOWS
   rvf_send_trace("Power off button", 16, NULL_PARAM, RV_TRACE_LEVEL_ERROR, LCC_USE_ID);
#ifndef _WINDOWS
  #if (OP_WCP == 0)

   (Kp.pressed)(KPD_PWR);  /* tell key is pressed */
   rvf_delay(5);
   (Kp.released)();        /* tell key is released */

  #endif
#endif  // _WINDOWS

#if (ANLG_FAM!=11)
   SPI_GBL_INFO_PTR->is_gsm_on = FALSE;
#else
//   power_state=POWER_OFF;
#endif
}


/**
 * @brief Sets the cause of the swith ON event.
 *
 * This function get the ABB status register and stores it into the
 * global variable Power_abb_status.
 *
 * @noparam
 *
 * @noreturn
 */
void Set_Switch_ON_Cause(void)
{
#if (CHIPSET!=15)
   Power_abb_status = ABB_Read_Status();
#else
   SYS_UWORD8 status;
   bspTwl3029_Power_SwitchOnStatus(&status);
   Power_abb_status = status;

   LCC_TRACE(TTrAll,"LCC: PWR : status=%x Ln:%d",status,__LINE__);

#endif
}


#if (ANLG_FAM==11)
// Added by jiangbo.2006/04/24
unsigned char pwr_read_status(void)
{
	SYS_UWORD8 status;
	bspTwl3029_Power_SwitchOnStatus(&status);
	return status;
}
#endif



void Sys_PowerOff()		// added by jiangbo.2006/01/10
{

	#if(ANLG_FAM == 11)
	bspTwl3029_Power_SwitchOff();
	#else
	Lcd_Power_Off();
	SIM_PowerOff();
	ABB_Power_Off();
	#endif
}

/*******************************************************************************
**
** Function      Switch_ON
**
** Description   This function is called by the spi task after the board is  
**               switched ON. It calls the appropriate function according
**               to the ABB status register.
**
** Warning       The Set_Switch_ON_Cause() function has to be called prior.
** edit by horace shi        06/09/01	
*******************************************************************************/
//char g_szBuff[40];
extern unsigned short dar_previous_status;
extern unsigned short dar_current_status;
extern unsigned short dar_lcd_sleep_flag;
extern unsigned char xdump_buffer[];
T_CHARG_HISR_INFOS bios_charg_hisr_infos = {0};
extern void bios_charg_hisr_entry(void);
#if 1
unsigned char  g_bios_charg_flag=0;
#endif
void Switch_ON(void)
{

	//SYS_UWORD16 abb_status;
	UINT16 loop_count;	
	 unsigned char status,rtc_state;
	T_DAR_RECOVERY_STATUS uWDStatus = 0;
	unsigned int flag_hi = 0;
	unsigned int flag_low = 0;
       unsigned short dar_lcd_flag = 0;
	// unsigned short dar_lcd_flag1 = 0;
	LCC_TRACE(TTrAll,"LCC: PWR: Switch_ON Ln:%d ",__LINE__);
	flag_hi = *((unsigned char *)xdump_buffer+150);
	flag_low = *((unsigned char *)xdump_buffer+151);
	
	dar_lcd_sleep_flag =( flag_hi<<8)+flag_low;
	LCC_TRACE(TTrAll,"LCC: PWR: dar_lcd_flag:%x ",flag_hi);
	LCC_TRACE(TTrAll,"LCC: PWR: dar_lcd_flag:%x ",flag_low);

	LCC_TRACE(TTrAll,"LCC: PWR: dar_lcd_flag:%x ",dar_lcd_sleep_flag);
	dar_previous_status = dar_current_status;//edit by horace
	dar_recovery_get_status(&uWDStatus);
	LCC_TRACE(TTrAll,"LCC: PWR: Switch_ON dar=0x%x  abb_status=0x%x Ln:%d",
					uWDStatus,Power_abb_status,__LINE__);
	//abb_status = Power_abb_status;
	//lcd_ms_delay(5000);

	//reset power on
	if(uWDStatus == DAR_WATCHDOG
					|| uWDStatus == DAR_NORMAL_SCUTTLING
						|| uWDStatus == DAR_EMERGENCY_SCUTTLING)
		{
			LCC_TRACE(TTrAll, "LCC: PWR: Start from reset Ln:%d",__LINE__);
			//rvf_send_trace("Start from reset",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); 
			power_state = POWER_ON;
			//g_bios_charg_flag=g_bios_charg_flag;//need think plug or unplug during dar reset

		}
	else//normal power on
		{
		#if 1
			g_bios_charg_flag=0;//inital
		#endif
			 status = pwr_read_status();//insteand Power_abb_status
			 BspTwl3029_I2c_ReadSingle(1,17,&rtc_state,NULL);
			if(  (status&(1<<BSP_TWL3029_POWER_PWON_OFFSET
         |1<<BSP_TWL3029_POWER_RPWON_OFFSET)) )//pwon
		       	{
		       		LCC_TRACE(TTrAll, "LCC: PWR: check power key");
					for (loop_count = 0; loop_count < 10; loop_count++)
				        {
					            status = pwr_read_status();

					            LCC_TRACE(TTrAll, "LCC: PWR: check power key%d  status=%x Ln:%d",
					            loop_count,status,__LINE__);

					            if ((status &  (1<<BSP_TWL3029_POWER_PWON_OFFSET
                       |1<<BSP_TWL3029_POWER_RPWON_OFFSET)) == 0)
					            {

					                LCC_TRACE(TTrAll, "LCC: PWR: check power off Ln:%d",__LINE__);
					                Sys_PowerOff();	 	
					            }
								
					            lcd_ms_delay(45);
				          }
					power_state = POWER_ON;
          pwron_way=0;
					
		       	}
			/*else if( (status&(1<<BSP_TWL3029_POWER_RPWON_OFFSET))  )//rpwon
				{
					//Switch on Condition on ON REM transition 0->1 
					LCC_TRACE(TTrAll, "LCC: PWR: ON Remote Ln:%d", __LINE__);
					Power_ON_Remote();
				}*/
			else if( (status&(1<<BSP_TWL3029_POWER_CHG_OFFSET)) )//charger charging
				{
					 // Switch on Condition on CHARGER IC PLUG 
			 		rvf_send_trace("CHGSTS --kathy",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID); 

					LCC_TRACE(TTrAll, "LCC: PWR: CHGSTS power on Ln:%d",__LINE__);
			          	pwron_way = 1 ;
					#if 1
					g_bios_charg_flag=1;
					#endif
				}
			else if( (status&(1<<BSP_TWL3029_POWER_USB_OFFSET)) )//usb charging
				{
					   //Switch on Condition on CHARGER IC PLUG 
			 		rvf_send_trace("CHGSTS --kathy",17, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, SPI_USE_ID); 

					LCC_TRACE(TTrAll, "LCC: PWR: USB CHGSTS power on Ln:%d",__LINE__);
			          	pwron_way = 1 ;
					//g_bios_charg_flag=1;//need edit later by horace
				}	
 			else if( (rtc_state&0x40)==0x40)//rtc power on
 				{
 					power_state = POWER_ON; 
          pwron_way = 2; // indicate the power way is through RTC 
          
 				}
			else//unkonw state
				{
					Sys_PowerOff();
				}
		}
	//-----------------------------------------------------//
/*  NU_Create_HISR(&bios_charg_hisr_infos.hisr,
                  "CHARG_HISR",
                  bios_charg_hisr_entry,
                  2,
                  bios_charg_hisr_infos.hisr_stack,
                  sizeof(bios_charg_hisr_infos.hisr_stack));*/

//--------------------------------------------------------//	
  bspTwl3029_IntC_setHandler(BSP_TWL3029_INTC_SOURCE_ID_PW_FALL_EDGE, Power_Key_Interrupt);
  bspTwl3029_IntC_enableSource(BSP_TWL3029_INTC_SOURCE_ID_PW_FALL_EDGE);
  /* wangwang : add for when using charger power on machine ,remote poweron can still
                be used to let the machine into normal idle MMI
     060826 */
   bspTwl3029_IntC_setHandler(BSP_TWL3029_INTC_SOURCE_ID_EVENT, Power_Key_Interrupt);
   bspTwl3029_IntC_enableSource(BSP_TWL3029_INTC_SOURCE_ID_EVENT);

}



/*******************************************************************************
**
** Function         Power_ON_Remote
**
** Description      
**
**
*******************************************************************************/
void Power_ON_Remote(void)
{
	/* FIXME: Patch for I-Sample 1.1 */
	rvf_send_trace("Start from Remote, Routing to Power ON",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); 
	Power_ON_Button();
}



/*******************************************************************************
**
** Function         Power_OFF_Remote
**
** Description      
**
**
*******************************************************************************/
void Power_OFF_Remote(void)
{
	/* FIXME: Patch for I-Sample 1.1 */
	rvf_send_trace("Stop from Remote, Routing to Power OFF",16, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID); 
	Power_OFF_Button();
}



/*******************************************************************************
**
** Function         Power_IT_WakeUp
**
** Description      
**
**
*******************************************************************************/
void Power_IT_WakeUp(void)
{
}



#ifdef RVM_PWR_SWE
/*******************************************************************************
**
** Function         PWR_Charger_Plug
**
** Description      
**
**
*******************************************************************************/
void PWR_Charger_Plug(void)
{

  /* Start the fast charging cycle */

  /* Since this function is called from the SPI task
   it can't be interrupt by another task
   so we can directly access the SPI through the low-level driver */

   if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */
   {
      rvf_delay(RVF_MS_TO_TICKS(2000));
   }

   rvf_stop_timer(SPI_TIMER3);

   /* informs the upper layer that the charger has been plugged */
   pwr_send_charger_plug_event();

   /* get the type of the battery */
   pwr_get_battery_type();
}



/*******************************************************************************
**
** Function         PWR_Charger_Unplug
**
** Description      
**
**
*******************************************************************************/
void PWR_Charger_Unplug(void)
{
   /* informs the upper layer that the charger has been unplugged */
   pwr_send_charger_unplug_event(); 

   rvf_send_trace("Charger unplug", 14, NULL_PARAM, RV_TRACE_LEVEL_DEBUG_LOW, LCC_USE_ID );
   pwr_stop_charging();
   if (SPI_GBL_INFO_PTR->is_gsm_on == FALSE) /* GSM OFF */
   {
    #ifndef _WINDOWS
      #if (ANLG_FAM == 1) 
      ABB_Write_Register_on_page(PAGE0, VRPCCTL2, 0x00EE);
      #elif ((ANLG_FAM == 2) || (ANLG_FAM == 3)|| (ANLG_FAM == 4))
      ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x0001);
      #endif
    #else
      ABB_Write_Register_on_page(PAGE0, VRPCDEV, 0x00EE);
    #endif  // _WINDOWS
   }
   else
   {
      pwr_handle_discharge();
   }
}
#endif /* #ifdef RVM_PWR_SWE */


//zhengyu add 2002-11-01
UINT16 charge_switch(void)
{
  return pwron_way;
}

void decide_whether_light_charger_led(void)
{
  if (charge_switch()==1) // charger power on
  {
     //wangwang : enalbe gpio12 output high to light on the 
    //           power indicate led
    // 070508
    GPIO_SET_OUTPUT(12);
    GPIO_DIRECTION_OUT(12);
    CONF_GPIO_12 = MUX_CFG(0,PULLUP);

  }

}
/*Lily Porting by he jun --- end*/

⌨️ 快捷键说明

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