device_notify(DEVICE_NOTIFIER_BATTERY_CHARGING, &battery.charge_now);
}
-static void battery_state(struct battery_info *info)
+static int battery_state(struct battery_info *info)
{
- if (!info)
- return;
+ static struct battery_status prev_status;
- _I("status=%s(%s) power_source=%s(%d) capa=%d health=%s present=%d current=%d(%d) volt=%d(%d) temp=%d",
- info->status,
- battery.charge_now == CHARGER_CHARGING ? "Charging"
- : (battery.charge_now == CHARGER_DISCHARGING ? "Discharging" : "Abnormal"),
- info->power_source,
- info->online,
- info->capacity,
- info->health,
- info->present,
- info->current_now,
- info->current_average,
- info->voltage_now,
- info->voltage_average,
- info->temperature);
+ if (!info) {
+ memcpy(&prev_status, &battery, sizeof(battery));
+ return 0;
+ }
+
+ if (prev_status.capacity == battery.capacity &&
+ prev_status.charge_status == battery.charge_status &&
+ prev_status.charge_full == battery.charge_full &&
+ prev_status.charge_now == battery.charge_now &&
+ prev_status.health == battery.health &&
+ prev_status.present == battery.present &&
+ prev_status.online == battery.online)
+ return 0;
+
+ prev_status.capacity = battery.capacity;
+ prev_status.charge_status = battery.charge_status;
+ prev_status.charge_full = battery.charge_full;
+ prev_status.charge_now = battery.charge_now;
+ prev_status.health = battery.health;
+ prev_status.present = battery.present;
+ prev_status.online = battery.online;
+
+ return 1;
}
static void battery_changed(struct battery_info *info, void *data)
{
int ret;
- if (!info)
+ if (!info) {
+ (void)battery_state(NULL);
return;
+ }
if (info->status) {
snprintf(battery.status_s, sizeof(battery.status_s),
battery.voltage_average = info->voltage_average;
battery.temperature = info->temperature;
- battery_state(info);
+ ret = battery_state(info);
+ if (ret != 1)
+ return;
ret = booting_done(NULL);
if (ret) {