예제 #1
0
static int battery_monitor_core( bool is_sleep )
// ----------------------------------------------------------------------------
// Description    : 
// Input Argument :  
// Return Value   :
{

	int charging_time;
	
	/*Monitoring the system temperature*/
	if ( sec_bci.battery.monitor_field_temp )
	{

		if ( sec_bci.battery.support_monitor_timeout )
		{
			/*Check charging time*/
			charging_time = get_elapsed_time_secs( &sec_bci.charger.charge_start_time );
			if ( charging_time >= sec_bci.charger.charging_timeout )
			{
				if ( is_sleep ) 
					sec_bci.charger.full_charge_dur_sleep = 0x2;
				else
					_battery_state_change_( STATUS_CATEGORY_CHARGING, 
								POWER_SUPPLY_STATUS_CHARGING_OVERTIME, 
								is_sleep );

				return -1;
			}
		}
		if ( sec_bci.battery.support_monitor_temp )
		{
			if ( sec_bci.battery.battery_health == POWER_SUPPLY_HEALTH_OVERHEAT 
				|| sec_bci.battery.battery_health == POWER_SUPPLY_HEALTH_COLD )
			{
				if ( sec_bci.battery.battery_temp <= CHARGE_RECOVER_TEMPERATURE_MAX 
					&& sec_bci.battery.battery_temp >= CHARGE_RECOVER_TEMPERATURE_MIN )
				{
					sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_GOOD;
					_battery_state_change_( STATUS_CATEGORY_TEMP, 
								BATTERY_TEMPERATURE_NORMAL, 
								is_sleep );
				}

			}
			else
			{
				if ( sec_bci.battery.monitor_duration > MONITOR_TEMP_DURATION )
					sec_bci.battery.monitor_duration = MONITOR_TEMP_DURATION;

				if ( sec_bci.battery.battery_temp >= CHARGE_STOP_TEMPERATURE_MAX )
				{
					if ( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_OVERHEAT )
					{
						sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_OVERHEAT;

						_battery_state_change_( STATUS_CATEGORY_TEMP, 
									BATTERY_TEMPERATURE_HIGH, 
									is_sleep );
					}
				}
				else if ( sec_bci.battery.battery_temp <= CHARGE_STOP_TEMPERATURE_MIN )
				{
					if ( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_COLD )
					{
						sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_COLD;

						_battery_state_change_( STATUS_CATEGORY_TEMP, 
									BATTERY_TEMPERATURE_LOW, 
									is_sleep );
					}
				}
				else
				{
					if ( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_GOOD )
					{
						sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_GOOD;
						_battery_state_change_( STATUS_CATEGORY_TEMP, 
									BATTERY_TEMPERATURE_NORMAL, 
									is_sleep );
					}
				}
			}
		}
	}

	/*Monitoring the battery level for Re-charging*/
	if ( sec_bci.battery.monitor_field_rechg_vol )
	{
		if ( sec_bci.battery.monitor_duration > MONITOR_RECHG_VOL_DURATION )
			sec_bci.battery.monitor_duration = MONITOR_RECHG_VOL_DURATION;

		if ( sec_bci.battery.battery_level_vol <= 4100 )
		{
			sec_bci.battery.confirm_recharge++;
			if ( sec_bci.battery.confirm_recharge >= 2 )
			{
				printk( "[TA] RE-charging vol\n" );
				sec_bci.battery.confirm_recharge = 0;	
				_battery_state_change_( STATUS_CATEGORY_CHARGING, 
							POWER_SUPPLY_STATUS_RECHARGING_FOR_FULL, 
							is_sleep );
			}

		}
		else
			sec_bci.battery.confirm_recharge = 0;
		
		

	}

	return 0;
	
}
예제 #2
0
static int battery_monitor_core( bool is_sleep )
{

    int charging_time;
	int rechg_voltage;

	if(event_logging)
	{
		stop_temperature_overheat = CHARGE_STOP_TEMPERATURE_EVENT;
		recover_temperature_overheat = CHARGE_RECOVER_TEMPERATURE_EVENT;
	}
	else
	{
		stop_temperature_overheat = CHARGE_STOP_TEMPERATURE_MAX;
		recover_temperature_overheat = CHARGE_RECOVER_TEMPERATURE_MAX;	
	}
	
    /*Monitoring the system temperature*/
    if ( sec_bci.battery.monitor_field_temp )
    {
        if ( sec_bci.battery.support_monitor_timeout )
        {
            /*Check charging time*/
            charging_time = get_elapsed_time_secs( &sec_bci.charger.charge_start_time );
            if ( charging_time >= sec_bci.charger.charging_timeout )
            {
                if ( is_sleep ) 
                    sec_bci.charger.full_charge_dur_sleep = 0x2;
                else
                    _battery_state_change_( STATUS_CATEGORY_CHARGING, 
                                POWER_SUPPLY_STATUS_CHARGING_OVERTIME, 
                                is_sleep );

                return -1;
            }
        }

        if ( sec_bci.battery.support_monitor_temp )
        {
            if ( sec_bci.battery.battery_health == POWER_SUPPLY_HEALTH_OVERHEAT 
                || sec_bci.battery.battery_health == POWER_SUPPLY_HEALTH_COLD )
            {
                if ( sec_bci.battery.battery_temp <= recover_temperature_overheat //CHARGE_RECOVER_TEMPERATURE_MAX 
                    && sec_bci.battery.battery_temp >= CHARGE_RECOVER_TEMPERATURE_MIN )
                {
                    sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_GOOD;
                    _battery_state_change_( STATUS_CATEGORY_TEMP, 
                                BATTERY_TEMPERATURE_NORMAL, 
                                is_sleep );
                }

            }
            else
            {
                if ( sec_bci.battery.monitor_duration > MONITOR_TEMP_DURATION )
                    sec_bci.battery.monitor_duration = MONITOR_TEMP_DURATION;

                if ( sec_bci.battery.battery_temp >= stop_temperature_overheat) //CHARGE_STOP_TEMPERATURE_MAX )
                {
                	printk("[TA] Temperature is high (%d*)\n", sec_bci.battery.battery_temp);
                    if ( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_OVERHEAT )
                    {
                        sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_OVERHEAT;

                        _battery_state_change_( STATUS_CATEGORY_TEMP, 
                                    BATTERY_TEMPERATURE_HIGH, 
                                    is_sleep );
                    }
                }
                else if ( sec_bci.battery.battery_temp <= CHARGE_STOP_TEMPERATURE_MIN )
                {
					printk("[TA] Temperature is low (%d*)\n", sec_bci.battery.battery_temp);
                    if ( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_COLD )
                    {
                        sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_COLD;

                        _battery_state_change_( STATUS_CATEGORY_TEMP, 
                                    BATTERY_TEMPERATURE_LOW, 
                                    is_sleep );
                    }
                }
                else
                {
                    if ( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_GOOD )
                    {
                        sec_bci.battery.battery_health = POWER_SUPPLY_HEALTH_GOOD;
                        _battery_state_change_( STATUS_CATEGORY_TEMP, 
                                    BATTERY_TEMPERATURE_NORMAL, 
                                    is_sleep );
                    }
                }
            }
        }
    }

    /*Monitoring the battery level for Re-charging*/
    if ( sec_bci.battery.monitor_field_rechg_vol && (sec_bci.charger.rechg_count <= 0 || is_sleep))
    {

        if ( sec_bci.battery.monitor_duration > MONITOR_RECHG_VOL_DURATION )
            sec_bci.battery.monitor_duration = MONITOR_RECHG_VOL_DURATION;

		if(sec_bootmode == 5) // offmode charging
			rechg_voltage = CHARGE_RECHG_VOLTAGE_OFFMODE;
		else
			rechg_voltage = CHARGE_RECHG_VOLTAGE;

        if (sec_bci.battery.battery_level_vol <= rechg_voltage )
        {
            sec_bci.battery.confirm_recharge++;
            if ( sec_bci.battery.confirm_recharge >= 2 )
            {
                printk( "[BM] RE-charging vol rechg_voltage = %d\n", rechg_voltage);
                sec_bci.battery.confirm_recharge = 0;   
                _battery_state_change_( STATUS_CATEGORY_CHARGING, 
                            POWER_SUPPLY_STATUS_RECHARGING_FOR_FULL, 
                            is_sleep );
            }
        }
        else
        {
            sec_bci.battery.confirm_recharge = 0;
        }
    }

    return 0;   
}