Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PineTab] add device file paths #60

Merged
merged 13 commits into from Apr 17, 2023
2 changes: 1 addition & 1 deletion application/qml/pages/MainPage.qml
Expand Up @@ -137,7 +137,7 @@ Page {
if ( battery.chargerConnected && !battery.acConnected) { return qsTr("USB") }
else if (!battery.chargerConnected && battery.acConnected) { return qsTr("AC") }
else if ( battery.chargerConnected && battery.acConnected) { return qsTr("USB") + "/" + qsTr("AC") }
return "unknown power source"
return qsTr("unknown", "Charger not detected, or faulty, or something")
}
label: qsTr("Charger connected:")
value: connected ? (qsTr("yes") + " (" + chargerType + ")") : qsTr("no")
Expand Down
1 change: 1 addition & 0 deletions application/service/restore-write-permissions.sh
Expand Up @@ -21,4 +21,5 @@ chmod 644 /sys/class/power_supply/battery/charging_enabled 2>/dev/null
chmod 644 /sys/class/power_supply/battery/constant_charge_current_max 2>/dev/null
chmod 644 /sys/class/power_supply/usb/charger_disable 2>/dev/null
chmod 644 /sys/class/power_supply/dollar_cove_battery/enable_charging 2>/dev/null
chmod 644 /sys/class/power_supply/axp-20x-battery/constant_charge_current_max 2>/dev/null
exit 0
1 change: 1 addition & 0 deletions application/service/set-write-permissions.sh
Expand Up @@ -21,4 +21,5 @@ chmod 666 /sys/class/power_supply/battery/charging_enabled 2>/dev/null
chmod 666 /sys/class/power_supply/battery/constant_charge_current_max 2>/dev/null
chmod 666 /sys/class/power_supply/usb/charger_disable 2>/dev/null
chmod 666 /sys/class/power_supply/dollar_cove_battery/enable_charging 2>/dev/null
chmod 666 /sys/class/power_supply/axp-20x-battery/constant_charge_current_max 2>/dev/null
exit 0
29 changes: 21 additions & 8 deletions application/src/battery.cpp
Expand Up @@ -26,7 +26,8 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO
// Battery charge percentage, number, e.g. 42
const QStringList batteryFiles = {
"/sys/class/power_supply/battery/capacity",
"/sys/class/power_supply/dollar_cove_battery/capacity"
"/sys/class/power_supply/dollar_cove_battery/capacity",
"/sys/class/power_supply/axp20x-battery/capacity"
};

foreach(const QString& file, batteryFiles) {
Expand All @@ -41,7 +42,8 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO
// Number: battery/charging current, e.g. -1450000 (-145mA)
const QStringList currentFiles = {
"/sys/class/power_supply/battery/current_now",
"/sys/class/power_supply/dollar_cove_battery/current_now"
"/sys/class/power_supply/dollar_cove_battery/current_now",
"/sys/class/power_supply/axp20x-battery/current_now"
};

foreach(const QString& file, currentFiles) {
Expand All @@ -56,7 +58,8 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO
// String: charging, discharging, full, empty, unknown (others?)
const QStringList stateFiles = {
"/sys/class/power_supply/battery/status",
"/sys/class/power_supply/dollar_cove_battery/status"
"/sys/class/power_supply/dollar_cove_battery/status",
"/sys/class/power_supply/axp20x-battery/status"
};

foreach(const QString& file, stateFiles) {
Expand All @@ -71,7 +74,8 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO
// Number: 0 or 1
const QStringList usbPresentFiles = {
"/sys/class/power_supply/usb/present",
"/sys/class/power_supply/dollar_cove_charger/present"
"/sys/class/power_supply/dollar_cove_charger/present",
"/sys/class/power_supply/axp20x-usb/present"
};

foreach(const QString& file, usbPresentFiles) {
Expand All @@ -85,7 +89,8 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO

// Number: 0 or 1
const QStringList acPresentFiles = {
"/sys/class/power_supply/ac/present"
"/sys/class/power_supply/ac/present",
"/sys/class/power_supply/axp813-ac/present"
};

foreach(const QString& file, acPresentFiles) {
Expand All @@ -100,7 +105,8 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO
// Number: temperature
const QStringList tempFiles = {
"/sys/class/power_supply/battery/temp",
"/sys/class/power_supply/dollar_cove_battery/temp"
"/sys/class/power_supply/dollar_cove_battery/temp",
"/sys/class/power_supply/axp20x-battery/hwmon0/in0_input"
};

foreach(const QString& file, tempFiles) {
Expand All @@ -109,14 +115,21 @@ Battery::Battery(Settings* newSettings, Logger* newLogger, QObject* parent) : QO
break;
}
}
// e.g. PineTab outputs an integer in centi-centigrade
// Note that the formatter in the QML page, and the logger divide by 10 again!
if(temperatureFile->fileName().contains(QStringLiteral("xp20x-battery"))) {
tempCorrectionFactor = 10.0;
}

logL("Battery temperature file: " + (temperatureFile ? temperatureFile->fileName() : notFound));

// String: health state
const QStringList healthFiles = {
"/sys/class/power_supply/battery/health",
"/sys/class/power_supply/dollar_cove_battery/health"
"/sys/class/power_supply/dollar_cove_battery/health",
"/sys/class/power_supply/axp20x-battery/health"
};

foreach(const QString& file, healthFiles) {
if(!healthFile && QFile::exists(file)) {
healthFile = new QFile(file, this);
Expand Down Expand Up @@ -236,7 +249,7 @@ void Battery::updateData()
}

if(temperatureFile && temperatureFile->open(QIODevice::ReadOnly)) {
nextTemperature = temperatureFile->readLine().trimmed().toInt();
nextTemperature = temperatureFile->readLine().trimmed().toInt() / tempCorrectionFactor;
if(nextTemperature != temperature) {
temperature = nextTemperature;
emit temperatureChanged(temperature);
Expand Down
2 changes: 1 addition & 1 deletion application/src/battery.h
Expand Up @@ -85,6 +85,7 @@ public slots:

QString health = "unknown"; // Good, warm, overheat. Might have Cold or Overvoltage depending on driver
int temperature = 0x7FFFFFFF; // This value means "unknown" (32-bit INT_MAX)
float tempCorrectionFactor = 1.0; // PineTab outputs an integer in centi-centigrade

int enableChargingValue = 1;
int disableChargingValue = 0;
Expand All @@ -99,7 +100,6 @@ public slots:
QString nextState = state;
bool nextChargingEnabled = chargingEnabled;


QString nextHealth = health;
int nextTemperature = temperature;

Expand Down
30 changes: 22 additions & 8 deletions service/src/battery.cpp
Expand Up @@ -37,7 +37,8 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
// Battery charge percentage, number, e.g. 42
const QStringList capacityFiles = {
"/sys/class/power_supply/battery/capacity",
"/sys/class/power_supply/dollar_cove_battery/capacity"
"/sys/class/power_supply/dollar_cove_battery/capacity",
"/sys/class/power_supply/axp20x-battery/capacity"
};

foreach(const QString& file, capacityFiles) {
Expand All @@ -52,7 +53,8 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
// Charging/discharging current in microamps, e.g. -1450000 (-145mA)
const QStringList currentFiles = {
"/sys/class/power_supply/battery/current_now",
"/sys/class/power_supply/dollar_cove_battery/current_now"
"/sys/class/power_supply/dollar_cove_battery/current_now",
"/sys/class/power_supply/axp20x-battery/current_now"
};

foreach(const QString& file, currentFiles) {
Expand All @@ -67,6 +69,7 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
// Maximum charge current in microamps, e.g. 3500000 (3500mA)
const QStringList maxCurrentFiles = {
"/sys/class/power_supply/battery/constant_charge_current_max"
"/sys/class/power_supply/axp20x-battery/constant_charge_current_max"
};

foreach(const QString& file, maxCurrentFiles) {
Expand Down Expand Up @@ -108,7 +111,8 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
// Battery/charging status: charging, discharging, full, empty, unknown (others?)
const QStringList statusFiles = {
"/sys/class/power_supply/battery/status",
"/sys/class/power_supply/dollar_cove_battery/status"
"/sys/class/power_supply/dollar_cove_battery/status",
"/sys/class/power_supply/axp20x-battery/status"
};

foreach(const QString& file, statusFiles) {
Expand All @@ -123,7 +127,8 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
// Charger connected, bool (number): 0 or 1
const QStringList chargerFiles = {
"/sys/class/power_supply/usb/present",
"/sys/class/power_supply/dollar_cove_charger/present"
"/sys/class/power_supply/dollar_cove_charger/present",
"/sys/class/power_supply/axp20x-usb/present"
};

foreach(const QString& file, chargerFiles) {
Expand All @@ -137,7 +142,8 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb

// Charger connected, bool (number): 0 or 1
const QStringList acFiles = {
"/sys/class/power_supply/ac/present"
"/sys/class/power_supply/ac/present",
"/sys/class/power_supply/axp813-ac/present"
};

foreach(const QString& file, acFiles) {
Expand All @@ -152,7 +158,8 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
// Number: temperature
const QStringList tempFiles = {
"/sys/class/power_supply/battery/temp",
"/sys/class/power_supply/dollar_cove_battery/temp"
"/sys/class/power_supply/dollar_cove_battery/temp",
"/sys/class/power_supply/axp20x-battery/hwmon0/in0_input"
};

foreach(const QString& file, tempFiles) {
Expand All @@ -162,12 +169,19 @@ Battery::Battery(Logger* newLogger, bool loglevelSet, QCoreApplication *app, QOb
}
}

// e.g. PineTab outputs an integer in centi-centigrade
// Note that the formatter in the QML page, and the logger divide by 10 again!
if(temperatureFile->fileName().contains(QStringLiteral("xp20x-battery"))) {
tempCorrectionFactor = 10.0;
}

logL("Battery temperature file: " + (temperatureFile ? temperatureFile->fileName() : notFound));

// String: health state
const QStringList healthFiles = {
"/sys/class/power_supply/battery/health",
"/sys/class/power_supply/dollar_cove_battery/health"
"/sys/class/power_supply/dollar_cove_battery/health",
"/sys/class/power_supply/axp20x-battery/health"
};
foreach(const QString& file, healthFiles) {
if(!healthFile && QFile::exists(file)) {
Expand Down Expand Up @@ -317,7 +331,7 @@ void Battery::updateData()
}

if(temperatureFile && temperatureFile->open(QIODevice::ReadOnly)) {
nextTemperature = temperatureFile->readLine().trimmed().toInt();
nextTemperature = temperatureFile->readLine().trimmed().toInt() / tempCorrectionFactor;
if(nextTemperature != temperature) {
if((nextTemperature / 10) != (temperature / 10)) {
logM(QString("Temperature: %1°C").arg(nextTemperature / 10));
Expand Down
1 change: 1 addition & 0 deletions service/src/battery.h
Expand Up @@ -121,6 +121,7 @@ public slots:
QString nextState = state;
bool nextChargingEnabled = chargingEnabled;
int nextTemperature = temperature;
float tempCorrectionFactor = 1.0;
QString nextHealth = health;

QFileDevice::Permissions originalPerms; // Updated in constructor
Expand Down