+
+ if (battery_dir)
+ g_free(battery_dir);
+}
+
+
+void update_battery() {
+ FILE *fp;
+ char tmp[25];
+ int64_t energy_now = 0, energy_full = 0, current_now = 0;
+ int seconds = 0;
+ int8_t new_percentage = 0;
+
+ fp = fopen(path_energy_now, "r");
+ if(fp != NULL) {
+ fgets(tmp, sizeof tmp, fp);
+ energy_now = atoi(tmp);
+ fclose(fp);
+ }
+
+ fp = fopen(path_energy_full, "r");
+ if(fp != NULL) {
+ fgets(tmp, sizeof tmp, fp);
+ energy_full = atoi(tmp);
+ fclose(fp);
+ }
+
+ fp = fopen(path_current_now, "r");
+ if(fp != NULL) {
+ fgets(tmp, sizeof tmp, fp);
+ current_now = atoi(tmp);
+ fclose(fp);
+ }
+
+ fp = fopen(path_status, "r");
+ if(fp != NULL) {
+ fgets(tmp, sizeof tmp, fp);
+ fclose(fp);
+ }
+
+ battery_state.state = BATTERY_UNKNOWN;
+ if(strcasecmp(tmp, "Charging\n")==0) battery_state.state = BATTERY_CHARGING;
+ if(strcasecmp(tmp, "Discharging\n")==0) battery_state.state = BATTERY_DISCHARGING;
+
+ if(current_now > 0) {
+ switch(battery_state.state) {
+ case BATTERY_CHARGING:
+ seconds = 3600 * (energy_full - energy_now) / current_now;
+ break;
+ case BATTERY_DISCHARGING:
+ seconds = 3600 * energy_now / current_now;
+ break;
+ default:
+ seconds = 0;
+ break;
+ }
+ } else seconds = 0;
+
+ battery_state.time.hours = seconds / 3600;
+ seconds -= 3600 * battery_state.time.hours;
+ battery_state.time.minutes = seconds / 60;
+ seconds -= 60 * battery_state.time.minutes;
+ battery_state.time.seconds = seconds;
+
+ if(energy_full > 0)
+ new_percentage = (energy_now*100)/energy_full;
+
+ if(battery_low_status != 0 && battery_low_status == new_percentage && battery_state.percentage > new_percentage) {
+ //printf("battery low, executing: %s\n", battery_low_cmd);
+ if (battery_low_cmd) system(battery_low_cmd);
+ }
+
+ battery_state.percentage = new_percentage;