static void battery_status_update(void)
{
    int level = voltage_to_battery_level(battery_millivolts);

#ifdef CURRENT_NORMAL  /*don't try to estimate run or charge
                        time without normal current defined*/
    /* calculate estimated remaining running time */
#if CONFIG_CHARGING >= CHARGING_MONITOR
    if (charging_state()) {
        /* charging: remaining charging time */
        powermgmt_est_runningtime_min = (100 - level)*battery_capacity*60
                                        / 100 / (CURRENT_MAX_CHG - runcurrent());
    }
    else
#endif

        /* discharging: remaining running time */
        if (battery_millivolts > percent_to_volt_discharge[0][0]) {
            /* linear extrapolation */
            powermgmt_est_runningtime_min = (level + battery_percent)*60
                                            * battery_capacity / 200 / runcurrent();
        }
    if (0 > powermgmt_est_runningtime_min) {
        powermgmt_est_runningtime_min = 0;
    }
#else
    powermgmt_est_runningtime_min=-1;
#endif

    battery_percent = level;
    send_battery_level_event();
}
void battery_read_info(int *voltage, int *level)
{
    int millivolts = battery_adc_voltage();

    if (voltage)
        *voltage = millivolts;

    if (level)
        *level = voltage_to_battery_level(millivolts);
}
Exemplo n.º 3
0
void battery_read_info(int *voltage, int *level)
{
    int millivolts = _battery_voltage();
    int percent;

    if (voltage)
        *voltage = millivolts;

    if (level)  {
        percent = voltage_to_battery_level(millivolts);
        if (percent < 0)
            percent = _battery_level();
        *level = percent;
    }
}