tdehwlib: Adjusted parsing of battery information

+ Added reading of estimated time to fully charged battery
  (time_to_full_now)
  The remaining time is calculated if the value is not provided
  in the battery information.
  If the battery does not provide charging current information,
  the estimated time to charge the battery cannot be calculated.

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
pull/65/head
Slávek Banko 4 years ago
parent c2adce2e13
commit ecd1e4bd40
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668

@ -3073,8 +3073,11 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist
valuesdir.setFilter(TQDir::All);
TQString nodename;
double bdevice_capacity = 0;
int bdevice_time_to_empty = 0;
int bdevice_time_to_full = 0;
bool bdevice_has_energy = false;
bool bdevice_has_time_to_empty = false;
bool bdevice_has_time_to_full = false;
const TQFileInfoList *dirlist = valuesdir.entryInfoList();
if (dirlist) {
TQFileInfoListIterator valuesdirit(*dirlist);
@ -3125,9 +3128,14 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist
}
else if (nodename == "time_to_empty_now") {
// Convert from minutes to seconds
bdevice->internalSetTimeRemaining(line.toDouble()*60);
bdevice_time_to_empty = line.toDouble()*60;
bdevice_has_time_to_empty = true;
}
else if (nodename == "time_to_full_now") {
// Convert from minutes to seconds
bdevice_time_to_full = line.toDouble()*60;
bdevice_has_time_to_full = true;
}
else if (nodename == "voltage_min_design") {
bdevice->internalSetMinimumVoltage(line.toDouble()/1000000.0);
}
@ -3146,17 +3154,25 @@ void TDEHardwareDevices::updateExistingDeviceInformation(TDEGenericDevice* exist
}
// Calculate time remaining
if (bdevice->dischargeRate() > 0) {
// Discharge/charge rate is in watt-hours
// Energy is in watt-hours
// Therefore, energy/rate = time in hours
// Convert to seconds...
if (bdevice->status() == TDEBatteryStatus::Charging) {
// Discharge/charge rate is in amper
// Energy is in amper-hours
// Therefore, energy/rate = time in hours
// Convert to seconds...
if (bdevice->status() == TDEBatteryStatus::Charging) {
if (!bdevice_has_time_to_full && bdevice->dischargeRate() > 0) {
bdevice->internalSetTimeRemaining(((bdevice->maximumEnergy()-bdevice->energy())/bdevice->dischargeRate())*60*60);
}
else if (!bdevice_has_time_to_empty) {
else {
bdevice->internalSetTimeRemaining(bdevice_time_to_full);
}
}
else {
if (!bdevice_has_time_to_empty && bdevice->dischargeRate() > 0) {
bdevice->internalSetTimeRemaining((bdevice->energy()/bdevice->dischargeRate())*60*60);
}
else {
bdevice->internalSetTimeRemaining(bdevice_time_to_empty);
}
}
}

Loading…
Cancel
Save