/**
* Battery Buddy, a Sailfish application to prolong battery lifetime
*
* Copyright (C) 2019-2025 Matti Viljanen
*
* Battery Buddy is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Battery Buddy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* See the GNU General Public License for more details. You should have received a copy of the GNU
* General Public License along with Battery Buddy. If not, see .
*
* Author: Matti Viljanen
*/
#ifndef BATTERYBASE_H
#define BATTERYBASE_H
#include
#include
#include
#include
#include
#include "logger.h"
class BatteryBase : public QObject
{
Q_OBJECT
public:
BatteryBase(Logger *newLogger, QObject *parent = nullptr);
~BatteryBase();
protected:
QFile *acConnectedFile = nullptr;
QFile *chargeFile = nullptr;
QFile *controlFile = nullptr;
QFile *currentFile = nullptr;
QFile *healthFile = nullptr;
QFile *maxCurrentFile = nullptr;
QFile *statusFile = nullptr;
QFile *temperatureFile = nullptr;
QFile *usbConnectedFile = nullptr;
Logger *logger = nullptr;
// Number: 0 or 1
const QStringList acConnectedFiles = {
QStringLiteral("/sys/class/power_supply/ac/present"),
QStringLiteral("/sys/class/power_supply/axp813-ac/present")};
// Battery charge percentage, number, e.g. 42
const QStringList chargeFiles = {
QStringLiteral("/sys/class/power_supply/battery/capacity"),
QStringLiteral("/sys/class/power_supply/dollar_cove_battery/capacity"),
QStringLiteral("/sys/class/power_supply/axp20x-battery/capacity")};
// Charger control file
const QStringList controlFiles = {
// e.g. Sony Xperia XA2
QStringLiteral("/sys/class/power_supply/battery/input_suspend"),
// e.g. for Sony Xperia Z3 Compact Tablet
QStringLiteral("/sys/class/power_supply/battery/charging_enabled"),
// e.g. for Jolla Phone
QStringLiteral("/sys/class/power_supply/usb/charger_disable"),
// e.g. for Jolla Tablet
QStringLiteral("/sys/class/power_supply/dollar_cove_battery/enable_charging"),
// e.g. Jolla C2
QStringLiteral("/sys/class/power_supply/battery/charger.0/stop_charge")
};
// Charging/discharging current in microamps, e.g. -1450000 (-145mA)
const QStringList currentFiles = {
QStringLiteral("/sys/class/power_supply/battery/current_now"),
QStringLiteral("/sys/class/power_supply/dollar_cove_battery/current_now"),
QStringLiteral("/sys/class/power_supply/axp20x-battery/current_now")};
// String: health state
const QStringList healthFiles = {
QStringLiteral("/sys/class/power_supply/battery/health"),
QStringLiteral("/sys/class/power_supply/dollar_cove_battery/health"),
QStringLiteral("/sys/class/power_supply/axp20x-battery/health")};
// Maximum charge current in microamps, e.g. 3500000 (3500mA)
const QStringList maxCurrentFiles = {
QStringLiteral("/sys/class/power_supply/battery/constant_charge_current_max"),
QStringLiteral("/sys/class/power_supply/axp20x-battery/constant_charge_current_max")};
// Battery/charging status: charging, discharging, full, empty, unknown (others?)
const QStringList statusFiles = {
QStringLiteral("/sys/class/power_supply/battery/status"),
QStringLiteral("/sys/class/power_supply/dollar_cove_battery/status"),
QStringLiteral("/sys/class/power_supply/axp20x-battery/status")};
// Number: temperature
const QStringList temperatureFiles = {
QStringLiteral("/sys/class/power_supply/battery/temp"),
QStringLiteral("/sys/class/power_supply/dollar_cove_battery/temp"),
QStringLiteral("/sys/class/power_supply/axp20x-battery/hwmon0/in0_input")};
// Number: 0 or 1
const QStringList usbConnectedFiles = {
QStringLiteral("/sys/class/power_supply/usb/present"),
QStringLiteral("/sys/class/power_supply/dollar_cove_charger/present"),
QStringLiteral("/sys/class/power_supply/axp20x-usb/present"),
QStringLiteral("/sys/class/power_supply/usb/online")};
// Default values:
int charge = 100; // Charge percentage, 0..100
int current = 0; // Charging/discharging current in microamps
bool usbConnected = false; // USB charger plugged in
bool acConnected = false; // AC plugged in
QString state = "idle"; // Charger/battery status string: charging, disaharging, not charging, idle, unknown
bool chargingEnabled = true; // Is charging currently enabled or disabled by the service
int maxChargeCurrent = 0; // Charge current limit in microamps
QString health = "unknown"; // Battery health string: hot, warm, good, cool, cold, overheat, overvoltage
int temperature = 0x7FFFFFFF; // Temperature in centi-celcius. INT32_MAX means "unknown"
float tempCorrectionFactor = 1.0; // PineTab outputs an integer in centi-centigrade
int enableChargingValue = 0;
int disableChargingValue = 1;
bool chargerIsEnabled = true;
int nextCharge = charge;
int invertSign = 1;
bool invertDecided = false;
bool nextUsbConnected = false;
bool nextAcConnected = false;
QString nextState = "idle";
bool nextChargingEnabled = false;
QString nextHealth = health;
int nextTemperature = temperature;
int maxSupportedCurrent = -1;
int getCharge();
int getCurrent();
int getMaxChargeCurrent();
bool getCharging();
bool getUsbConnected();
bool getAcConnected();
QString getState();
QString getHealth();
int getTemperature();
bool getChargingEnabled();
void updateBaseData();
signals:
void _chargeChanged(int);
void _currentChanged(int);
void _stateChanged(QString);
void _chargingEnabledChanged(bool);
void _chargerConnectedChanged(bool);
void _acConnectedChanged(bool);
void _healthChanged(QString);
void _temperatureChanged(int);
};
#endif // BATTERYBASE_H