solid: generalize USB batteries and add enum for fully charged battery

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-04-22 15:35:17 +03:00
parent 74944b18f7
commit 649dcbd2a0
6 changed files with 32 additions and 60 deletions

View file

@ -41,33 +41,17 @@ Solid::Battery::BatteryType FakeBattery::type() const
{ {
QString name = fakeDevice()->property("batteryType").toString(); QString name = fakeDevice()->property("batteryType").toString();
if (name == "pda") if (name == "primary")
{ {
return Solid::Battery::PdaBattery; return Solid::Battery::PrimaryBattery;
} }
else if (name == "ups") else if (name == "ups")
{ {
return Solid::Battery::UpsBattery; return Solid::Battery::UpsBattery;
} }
else if (name == "primary") else if (name == "usb")
{ {
return Solid::Battery::PrimaryBattery; return Solid::Battery::UsbBattery;
}
else if (name == "mouse")
{
return Solid::Battery::MouseBattery;
}
else if (name == "keyboard")
{
return Solid::Battery::KeyboardBattery;
}
else if (name == "keyboard_mouse")
{
return Solid::Battery::KeyboardMouseBattery;
}
else if (name == "camera")
{
return Solid::Battery::CameraBattery;
} }
else else
{ {
@ -117,9 +101,13 @@ Solid::Battery::ChargeState FakeBattery::chargeState() const
{ {
return Solid::Battery::Discharging; return Solid::Battery::Discharging;
} }
else if (state == "full")
{
return Solid::Battery::FullCharge;
}
else else
{ {
return Solid::Battery::NoCharge; return Solid::Battery::UnknownCharge;
} }
} }
@ -135,8 +123,11 @@ void FakeBattery::setChargeState(Solid::Battery::ChargeState newState)
case Solid::Battery::Discharging: case Solid::Battery::Discharging:
name = "discharging"; name = "discharging";
break; break;
case Solid::Battery::NoCharge: case Solid::Battery::FullCharge:
name = "noCharge"; name = "full";
break;
case Solid::Battery::UnknownCharge:
name = "unknown";
break; break;
} }

View file

@ -41,7 +41,7 @@
<property key="interfaces">Battery</property> <property key="interfaces">Battery</property>
<property key="parent">/org/kde/solid/fakehw/computer</property> <property key="parent">/org/kde/solid/fakehw/computer</property>
<property key="isPluged">false</property> <property key="isPluged">false</property>
<property key="batteryType">mouse</property> <property key="batteryType">usb</property>
<!-- Battery properties beyond charge percentage are only reported by UPower <!-- Battery properties beyond charge percentage are only reported by UPower
for primary batteries, not for other batteries like this mouse --> for primary batteries, not for other batteries like this mouse -->
<property key="isRechargeable">true</property> <property key="isRechargeable">true</property>

View file

@ -23,6 +23,7 @@
using namespace Solid::Backends::UDev; using namespace Solid::Backends::UDev;
// for reference: // for reference:
// https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-class-power
// linux/drivers/power/supply/power_supply_sysfs.c // linux/drivers/power/supply/power_supply_sysfs.c
// include/linux/power_supply.h // include/linux/power_supply.h
@ -33,7 +34,7 @@ Battery::Battery(UDevDevice *device)
m_client(new UdevQt::Client(powersupplysubsystems)), m_client(new UdevQt::Client(powersupplysubsystems)),
m_chargepercent(0), m_chargepercent(0),
m_capacity(0), m_capacity(0),
m_chargestate(Solid::Battery::NoCharge), m_chargestate(Solid::Battery::UnknownCharge),
m_ispowersupply(false), m_ispowersupply(false),
m_isplugged(false) m_isplugged(false)
{ {
@ -65,25 +66,15 @@ Solid::Battery::BatteryType Battery::type() const
return Solid::Battery::PrimaryBattery; return Solid::Battery::PrimaryBattery;
} else if (powersupplytype == QLatin1String("ups")) { } else if (powersupplytype == QLatin1String("ups")) {
return Solid::Battery::UpsBattery; return Solid::Battery::UpsBattery;
} else if (powersupplytype == QLatin1String("usb_aca")) { } else if (powersupplytype.contains(QLatin1String("usb"))) {
// one of: return Solid::Battery::UsbBattery;
// Solid::Battery::MouseBattery
// Solid::Battery::KeyboardBattery
// Solid::Battery::KeyboardMouseBattery
// Solid::Battery::CameraBattery
return Solid::Battery::KeyboardMouseBattery;
} else if (powersupplytype == QLatin1String("usb_pd")) {
return Solid::Battery::MonitorBattery;
} else if (powersupplytype == QLatin1String("usb_pd_drp")) {
// one of:
// Solid::Battery::PdaBattery
return Solid::Battery::PhoneBattery;
} }
return Solid::Battery::UnknownBattery; return Solid::Battery::UnknownBattery;
} }
int Battery::chargePercent() const int Battery::chargePercent() const
{ {
// yes, it is POWER_SUPPLY_CAPACITY
return m_device->deviceProperty("POWER_SUPPLY_CAPACITY").toInt(); return m_device->deviceProperty("POWER_SUPPLY_CAPACITY").toInt();
} }
@ -122,9 +113,11 @@ Solid::Battery::ChargeState Battery::chargeState() const
return Solid::Battery::Charging; return Solid::Battery::Charging;
} else if (powersupplystatus == QLatin1String("discharging")) { } else if (powersupplystatus == QLatin1String("discharging")) {
return Solid::Battery::Discharging; return Solid::Battery::Discharging;
} else if (powersupplystatus == QLatin1String("full")) {
return Solid::Battery::FullCharge;
} }
return Solid::Battery::NoCharge; // stable or unknown return Solid::Battery::UnknownCharge;
} }
void Battery::slotEmitSignals(const UdevQt::Device &device) void Battery::slotEmitSignals(const UdevQt::Device &device)

View file

@ -87,7 +87,7 @@ bool Solid::Battery::isRechargeable() const
Solid::Battery::ChargeState Solid::Battery::chargeState() const Solid::Battery::ChargeState Solid::Battery::chargeState() const
{ {
Q_D(const Battery); Q_D(const Battery);
return_SOLID_CALL(Ifaces::Battery *, d->backendObject(), NoCharge, chargeState()); return_SOLID_CALL(Ifaces::Battery *, d->backendObject(), UnknownCharge, chargeState());
} }
#include "moc_battery.cpp" #include "moc_battery.cpp"

View file

@ -51,31 +51,23 @@ namespace Solid
/** /**
* This enum type defines the type of the device holding the battery * This enum type defines the type of the device holding the battery
* *
* - PdaBattery : A battery in a Personal Digital Assistant
* - UpsBattery : A battery in an Uninterruptible Power Supply
* - PrimaryBattery : A primary battery for the system (for example laptop battery)
* - MouseBattery : A battery in a mouse
* - KeyboardBattery : A battery in a keyboard
* - KeyboardMouseBattery : A battery in a combined keyboard and mouse
* - CameraBattery : A battery in a camera
* - PhoneBattery : A battery in a phone
* - MonitorBattery : A battery in a monitor
* - UnknownBattery : A battery in an unknown device * - UnknownBattery : A battery in an unknown device
* - PrimaryBattery : A primary battery for the system (for example laptop battery)
* - UpsBattery : A battery in an Uninterruptible Power Supply
* - UsbBattery : A battery in a is of USB device (for example mouse battery)
*/ */
enum BatteryType { UnknownBattery, PdaBattery, UpsBattery, enum BatteryType { UnknownBattery, PrimaryBattery, UpsBattery,
PrimaryBattery, MouseBattery, KeyboardBattery, UsbBattery };
KeyboardMouseBattery, CameraBattery,
PhoneBattery, MonitorBattery };
/** /**
* This enum type defines charge state of a battery * This enum type defines charge state of a battery
* *
* - NoCharge : Battery charge is stable, not charging or discharging or * - UnknownCharge : Battery state is Unknown
* the state is Unknown
* - Charging : Battery is charging * - Charging : Battery is charging
* - Discharging : Battery is discharging * - Discharging : Battery is discharging
* - FullCharge : Battery is fully charged
*/ */
enum ChargeState { NoCharge, Charging, Discharging }; enum ChargeState { UnknownCharge, Charging, Discharging, FullCharge };
private: private:
@ -127,8 +119,6 @@ namespace Solid
*/ */
BatteryType type() const; BatteryType type() const;
/** /**
* Retrieves the current charge level of the battery normalised * Retrieves the current charge level of the battery normalised
* to percent. * to percent.

View file

@ -56,8 +56,6 @@ namespace Ifaces
*/ */
virtual Solid::Battery::BatteryType type() const = 0; virtual Solid::Battery::BatteryType type() const = 0;
/** /**
* Retrieves the current charge level of the battery normalised * Retrieves the current charge level of the battery normalised
* to percent. * to percent.