- if (!slurp_battery_info(&batt_info, json_gen, buffer, number, path, format_down, last_full_capacity))
+ if (number < 0) {
+ if (!slurp_all_batteries(&batt_info, json_gen, buffer, path, format_down))
+ return;
+ } else {
+ if (!slurp_battery_info(&batt_info, json_gen, buffer, number, path, format_down))
+ return;
+ }
+
+ // *Choose* a measure of the 'full' battery. It is whichever is better of
+ // the battery's (hardware-given) design capacity (batt_info.full_design)
+ // and the battery's last known good charge (batt_info.full_last).
+ // We prefer the design capacity, but use the last capacity if we don't have it,
+ // or if we are asked to (last_full_capacity == true); but similarly we use
+ // the design capacity if we don't have the last capacity.
+ // If we don't have either then both full_design and full_last <= 0,
+ // which implies full <= 0, which bails out on the following line.
+ int full = batt_info.full_design;
+ if (full <= 0 || (last_full_capacity && batt_info.full_last > 0)) {
+ full = batt_info.full_last;
+ }
+ if (full <= 0 && batt_info.remaining < 0 && batt_info.percentage_remaining < 0) {
+ /* We have no physical measurements and no estimates. Nothing
+ * much we can report, then. */
+ OUTPUT_FULL_TEXT(format_down);