9#include "upowerbattery.h"
13using namespace Solid::Backends::UPower;
15Battery::Battery(UPowerDevice *device)
16 : DeviceInterface(device)
18 connect(device, &UPowerDevice::propertyChanged,
this, &Battery::slotChanged);
27bool Battery::isPresent()
const
29 return m_device.
data()->prop(QStringLiteral(
"IsPresent")).toBool();
35 const auto t =
static_cast<UpDeviceKind
>(m_device.
data()->prop(QStringLiteral(
"Type")).toUInt());
37 case UP_DEVICE_KIND_LINE_POWER:
39 case UP_DEVICE_KIND_BATTERY:
40 result = Solid::Battery::PrimaryBattery;
42 case UP_DEVICE_KIND_UPS:
43 result = Solid::Battery::UpsBattery;
45 case UP_DEVICE_KIND_MONITOR:
46 result = Solid::Battery::MonitorBattery;
48 case UP_DEVICE_KIND_MOUSE:
49 result = Solid::Battery::MouseBattery;
51 case UP_DEVICE_KIND_KEYBOARD:
52 result = Solid::Battery::KeyboardBattery;
54 case UP_DEVICE_KIND_PDA:
55 result = Solid::Battery::PdaBattery;
57 case UP_DEVICE_KIND_PHONE:
58 result = Solid::Battery::PhoneBattery;
60 case UP_DEVICE_KIND_TABLET:
61 result = Solid::Battery::TabletBattery;
63 case UP_DEVICE_KIND_GAMING_INPUT:
64 result = Solid::Battery::GamingInputBattery;
66 case UP_DEVICE_KIND_HEADPHONES:
67 result = Solid::Battery::HeadphoneBattery;
69 case UP_DEVICE_KIND_HEADSET:
70 result = Solid::Battery::HeadsetBattery;
72 case UP_DEVICE_KIND_TOUCHPAD:
73 result = Solid::Battery::TouchpadBattery;
75 case UP_DEVICE_KIND_BLUETOOTH_GENERIC:
76 result = Solid::Battery::BluetoothBattery;
78 case UP_DEVICE_KIND_UNKNOWN:
82 if (result == Solid::Battery::UnknownBattery) {
86 result = Solid::Battery::BluetoothBattery;
93int Battery::chargePercent()
const
95 return qRound(m_device.
data()->prop(QStringLiteral(
"Percentage")).toDouble());
98int Battery::capacity()
const
100 return qRound(m_device.
data()->prop(QStringLiteral(
"Capacity")).toDouble());
103bool Battery::isRechargeable()
const
105 return m_device.
data()->prop(QStringLiteral(
"IsRechargeable")).toBool();
108bool Battery::isPowerSupply()
const
110 return m_device.
data()->prop(QStringLiteral(
"PowerSupply")).toBool();
116 const UpDeviceState state =
static_cast<UpDeviceState
>(m_device.
data()->prop(QStringLiteral(
"State")).toUInt());
118 case UP_DEVICE_STATE_UNKNOWN:
119 result = Solid::Battery::NoCharge;
121 case UP_DEVICE_STATE_CHARGING:
122 result = Solid::Battery::Charging;
124 case UP_DEVICE_STATE_DISCHARGING:
125 result = Solid::Battery::Discharging;
127 case UP_DEVICE_STATE_EMPTY:
129 case UP_DEVICE_STATE_FULLY_CHARGED:
130 result = Solid::Battery::FullyCharged;
132 case UP_DEVICE_STATE_PENDING_CHARGE:
134 case UP_DEVICE_STATE_PENDING_DISCHARGE:
136 case UP_DEVICE_STATE_LAST:
142qlonglong Battery::timeToEmpty()
const
144 return m_device.
data()->prop(QStringLiteral(
"TimeToEmpty")).toLongLong();
147qlonglong Battery::timeToFull()
const
149 return m_device.
data()->prop(QStringLiteral(
"TimeToFull")).toLongLong();
154 const UpDeviceTechnology tech =
static_cast<UpDeviceTechnology
>(m_device.
data()->prop(QStringLiteral(
"Technology")).toUInt());
156 case UP_DEVICE_TECHNOLOGY_UNKNOWN:
157 return Solid::Battery::UnknownTechnology;
158 case UP_DEVICE_TECHNOLOGY_LITHIUM_ION:
159 return Solid::Battery::LithiumIon;
160 case UP_DEVICE_TECHNOLOGY_LITHIUM_POLYMER:
161 return Solid::Battery::LithiumPolymer;
162 case UP_DEVICE_TECHNOLOGY_LITHIUM_IRON_PHOSPHATE:
163 return Solid::Battery::LithiumIronPhosphate;
164 case UP_DEVICE_TECHNOLOGY_LEAD_ACID:
165 return Solid::Battery::LeadAcid;
166 case UP_DEVICE_TECHNOLOGY_NICKEL_CADMIUM:
167 return Solid::Battery::NickelCadmium;
168 case UP_DEVICE_TECHNOLOGY_NICKEL_METAL_HYDRIDE:
169 return Solid::Battery::NickelMetalHydride;
170 case UP_DEVICE_TECHNOLOGY_LAST:
171 return Solid::Battery::UnknownTechnology;
173 return Solid::Battery::UnknownTechnology;
176double Battery::energy()
const
178 return m_device.
data()->prop(QStringLiteral(
"Energy")).toDouble();
181double Battery::energyFull()
const
183 return m_device.
data()->prop(QStringLiteral(
"EnergyFull")).toDouble();
186double Battery::energyFullDesign()
const
188 return m_device.
data()->prop(QStringLiteral(
"EnergyFullDesign")).toDouble();
191double Battery::energyRate()
const
193 return m_device.
data()->prop(QStringLiteral(
"EnergyRate")).toDouble();
196double Battery::voltage()
const
198 return m_device.
data()->prop(QStringLiteral(
"Voltage")).toDouble();
201double Battery::temperature()
const
203 return m_device.
data()->prop(QStringLiteral(
"Temperature")).toDouble();
208 return m_device.
data()->prop(QStringLiteral(
"Serial")).toString();
211qlonglong Battery::remainingTime()
const
213 if (chargeState() == Solid::Battery::Charging) {
215 }
else if (chargeState() == Solid::Battery::Discharging) {
216 return timeToEmpty();
222void Battery::slotChanged()
225 const bool old_isPresent = m_isPresent;
226 const int old_chargePercent = m_chargePercent;
227 const int old_capacity = m_capacity;
228 const bool old_isPowerSupply = m_isPowerSupply;
230 const qlonglong old_timeToEmpty = m_timeToEmpty;
231 const qlonglong old_timeToFull = m_timeToFull;
232 const double old_energy = m_energy;
233 const double old_energyFull = m_energyFull;
234 const double old_energyFullDesign = m_energyFullDesign;
235 const double old_energyRate = m_energyRate;
236 const double old_voltage = m_voltage;
237 const double old_temperature = m_temperature;
240 if (old_isPresent != m_isPresent) {
241 Q_EMIT presentStateChanged(m_isPresent, m_device.
data()->udi());
244 if (old_chargePercent != m_chargePercent) {
245 Q_EMIT chargePercentChanged(m_chargePercent, m_device.
data()->udi());
248 if (old_capacity != m_capacity) {
249 Q_EMIT capacityChanged(m_capacity, m_device.
data()->udi());
252 if (old_isPowerSupply != m_isPowerSupply) {
253 Q_EMIT powerSupplyStateChanged(m_isPowerSupply, m_device.
data()->udi());
256 if (old_chargeState != m_chargeState) {
257 Q_EMIT chargeStateChanged(m_chargeState, m_device.
data()->udi());
260 if (old_timeToEmpty != m_timeToEmpty) {
261 Q_EMIT timeToEmptyChanged(m_timeToEmpty, m_device.
data()->udi());
264 if (old_timeToFull != m_timeToFull) {
265 Q_EMIT timeToFullChanged(m_timeToFull, m_device.
data()->udi());
268 if (old_energy != m_energy) {
269 Q_EMIT energyChanged(m_energy, m_device.
data()->udi());
272 if (old_energyFull != m_energyFull) {
273 Q_EMIT energyFullChanged(m_energyFull, m_device.
data()->udi());
276 if (old_energyFullDesign != m_energyFullDesign) {
277 Q_EMIT energyFullChanged(m_energyFullDesign, m_device.
data()->udi());
280 if (old_energyRate != m_energyRate) {
281 Q_EMIT energyRateChanged(m_energyRate, m_device.
data()->udi());
284 if (old_voltage != m_voltage) {
285 Q_EMIT voltageChanged(m_voltage, m_device.
data()->udi());
288 if (old_temperature != m_temperature) {
289 Q_EMIT temperatureChanged(m_temperature, m_device.
data()->udi());
292 if (old_timeToFull != m_timeToFull || old_timeToEmpty != m_timeToEmpty) {
293 Q_EMIT remainingTimeChanged(remainingTime(), m_device.
data()->udi());
298void Battery::updateCache()
300 m_isPresent = isPresent();
301 m_chargePercent = chargePercent();
302 m_capacity = capacity();
303 m_isPowerSupply = isPowerSupply();
304 m_chargeState = chargeState();
305 m_timeToEmpty = timeToEmpty();
306 m_timeToFull = timeToFull();
308 m_energyFull = energyFull();
309 m_energyFullDesign = energyFullDesign();
310 m_energyRate = energyRate();
311 m_voltage = voltage();
312 m_temperature = temperature();
315#include "moc_upowerbattery.cpp"
BatteryType
This enum type defines the type of the device holding the battery.
Technology
Technology used in the battery.
ChargeState
This enum type defines charge state of a battery.
char * toString(const EngineQuery &query)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)