From 4b62ead3668822377ece569ae2c08b1cc5961425 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 18 Dec 2020 22:14:39 +0100 Subject: [PATCH] Make the screen helper more generic --- nymea-app/nymea-app.pro | 4 +- .../generic/platformhelpergeneric.cpp | 2 +- .../generic/platformhelpergeneric.h | 4 +- ...raspberrypihelper.cpp => screenhelper.cpp} | 69 +++++++++++++------ .../{raspberrypihelper.h => screenhelper.h} | 5 +- 5 files changed, 55 insertions(+), 29 deletions(-) rename nymea-app/platformintegration/generic/{raspberrypihelper.cpp => screenhelper.cpp} (67%) rename nymea-app/platformintegration/generic/{raspberrypihelper.h => screenhelper.h} (94%) diff --git a/nymea-app/nymea-app.pro b/nymea-app/nymea-app.pro index a1f7fb36..8bd3c03d 100644 --- a/nymea-app/nymea-app.pro +++ b/nymea-app/nymea-app.pro @@ -16,7 +16,7 @@ HEADERS += \ mainmenumodel.h \ nfchelper.h \ nfcthingactionwriter.h \ - platformintegration/generic/raspberrypihelper.h \ + platformintegration/generic/screenhelper.h \ stylecontroller.h \ pushnotifications.h \ platformhelper.h \ @@ -28,7 +28,7 @@ SOURCES += main.cpp \ mainmenumodel.cpp \ nfchelper.cpp \ nfcthingactionwriter.cpp \ - platformintegration/generic/raspberrypihelper.cpp \ + platformintegration/generic/screenhelper.cpp \ stylecontroller.cpp \ pushnotifications.cpp \ platformhelper.cpp \ diff --git a/nymea-app/platformintegration/generic/platformhelpergeneric.cpp b/nymea-app/platformintegration/generic/platformhelpergeneric.cpp index 85e11fe7..a63417b5 100644 --- a/nymea-app/platformintegration/generic/platformhelpergeneric.cpp +++ b/nymea-app/platformintegration/generic/platformhelpergeneric.cpp @@ -32,7 +32,7 @@ PlatformHelperGeneric::PlatformHelperGeneric(QObject *parent) : PlatformHelper(parent) { - m_piHelper = new RaspberryPiHelper(this); + m_piHelper = new ScreenHelper(this); } void PlatformHelperGeneric::requestPermissions() diff --git a/nymea-app/platformintegration/generic/platformhelpergeneric.h b/nymea-app/platformintegration/generic/platformhelpergeneric.h index 47514e0f..0d95720d 100644 --- a/nymea-app/platformintegration/generic/platformhelpergeneric.h +++ b/nymea-app/platformintegration/generic/platformhelpergeneric.h @@ -33,7 +33,7 @@ #include #include "platformhelper.h" -#include "raspberrypihelper.h" +#include "screenhelper.h" class PlatformHelperGeneric : public PlatformHelper { @@ -61,7 +61,7 @@ public: Q_INVOKABLE virtual void vibrate(HapticsFeedback feedbyckType) override; private: - RaspberryPiHelper *m_piHelper = nullptr; + ScreenHelper *m_piHelper = nullptr; }; #endif // PLATFORMHELPERGENERIC_H diff --git a/nymea-app/platformintegration/generic/raspberrypihelper.cpp b/nymea-app/platformintegration/generic/screenhelper.cpp similarity index 67% rename from nymea-app/platformintegration/generic/raspberrypihelper.cpp rename to nymea-app/platformintegration/generic/screenhelper.cpp index 99f9eace..9d535ba5 100644 --- a/nymea-app/platformintegration/generic/raspberrypihelper.cpp +++ b/nymea-app/platformintegration/generic/screenhelper.cpp @@ -28,31 +28,56 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -#include "raspberrypihelper.h" +#include "screenhelper.h" #include #include #include #include +#include +#include -RaspberryPiHelper::RaspberryPiHelper(QObject *parent) : QObject(parent) +ScreenHelper::ScreenHelper(QObject *parent) : QObject(parent) { - m_powerFile.setFileName("/sys/class/backlight/rpi_backlight/bl_power"); - bool available = m_powerFile.open(QFile::ReadWrite | QFile::Text); + // Try generic backlight + QDir backlightDir("/sys/class/backlight"); + foreach (const QFileInfo &fi, backlightDir.entryInfoList({"*_backlight"}, QDir::Dirs)) { + qDebug() << "Checking backlight directory:" << fi.absoluteFilePath(); + m_powerFile.setFileName(fi.absoluteFilePath() + "/bl_power"); + m_brightnessFile.setFileName(fi.absoluteFilePath() + "/brightness"); + if (!m_powerFile.open(QFile::ReadWrite | QFile::Text)) { + qWarning() << "Cannot open" << m_powerFile.fileName() << "for writing"; + continue; + } + if (!m_brightnessFile.open(QFile::ReadWrite | QFile::Text)) { + qWarning() << "Cannot open" << m_brightnessFile.fileName() << "for writing"; + continue; + } + QFile maxBrightnessFile(fi.absoluteFilePath() + "/max_brightness"); + if (!maxBrightnessFile.open(QFile::ReadOnly)) { + qWarning() << "Cannot open" << m_brightnessFile.fileName() << "for reading"; + continue; + } + bool ok; + m_maxBrightness = maxBrightnessFile.readAll().toInt(&ok); + if (!ok) { + qWarning() << "Error reading max brightness value from" << maxBrightnessFile.fileName(); + m_maxBrightness = -1; + continue; + } + // All good. Let's use this and not check more files + break; + } - if (!available) { + if (!m_powerFile.isOpen() || !m_brightnessFile.isOpen()) { + qWarning() << "No backlight support on this platform"; return; } + qDebug() << "Backlight control enabled on" << m_powerFile.fileName(); - qDebug() << "Raspberry Pi detected. Enabling backlight control"; - - m_brightnessFile.setFileName("/sys/class/backlight/rpi_backlight/brightness"); - if (!m_brightnessFile.open(QFile::ReadWrite | QFile::Text)) { - qWarning() << "Failed to open brightness file"; - } QByteArray currentBrightness = m_brightnessFile.readLine(); - m_currentBrightness = currentBrightness.trimmed().toInt() * 100 / 255; - qDebug() << "Current brightness is:" << currentBrightness << m_currentBrightness; + m_currentBrightness = currentBrightness.trimmed().toInt() * 100 / m_maxBrightness; + qDebug() << "Current brightness is: Absolute:" << currentBrightness << "Percentage:" << m_currentBrightness; screenOn(); @@ -63,7 +88,7 @@ RaspberryPiHelper::RaspberryPiHelper(QObject *parent) : QObject(parent) QSettings settings; m_screenOffTimer.setInterval(settings.value("screenOffTimeout", 15000).toInt()); m_screenOffTimer.setSingleShot(true); - connect(&m_screenOffTimer, &QTimer::timeout, this, &RaspberryPiHelper::screenOff); + connect(&m_screenOffTimer, &QTimer::timeout, this, &ScreenHelper::screenOff); if (m_screenOffTimer.interval() > 0) { m_screenOffTimer.start(); } @@ -73,17 +98,17 @@ RaspberryPiHelper::RaspberryPiHelper(QObject *parent) : QObject(parent) m_cursorHidden = true; } -bool RaspberryPiHelper::active() const +bool ScreenHelper::active() const { return m_powerFile.isOpen(); } -int RaspberryPiHelper::screenTimeout() const +int ScreenHelper::screenTimeout() const { return m_screenOffTimer.interval(); } -void RaspberryPiHelper::setScreenTimeout(int timeout) +void ScreenHelper::setScreenTimeout(int timeout) { m_screenOffTimer.setInterval(timeout); QSettings settings; @@ -95,19 +120,19 @@ void RaspberryPiHelper::setScreenTimeout(int timeout) } } -int RaspberryPiHelper::screenBrightness() const +int ScreenHelper::screenBrightness() const { return m_currentBrightness; } -void RaspberryPiHelper::setScreenBrightness(int percent) +void ScreenHelper::setScreenBrightness(int percent) { m_currentBrightness = percent; m_brightnessFile.write(QString("%1\n").arg(percent * 255 / 100).toUtf8()); m_brightnessFile.flush(); } -bool RaspberryPiHelper::eventFilter(QObject *watched, QEvent *event) +bool ScreenHelper::eventFilter(QObject *watched, QEvent *event) { if (m_screenOffTimer.interval() == 0) { return QObject::eventFilter(watched, event); @@ -162,7 +187,7 @@ bool RaspberryPiHelper::eventFilter(QObject *watched, QEvent *event) return QObject::eventFilter(watched, event); } -void RaspberryPiHelper::screenOn() +void ScreenHelper::screenOn() { qDebug() << "Turning screen on"; int ret = m_powerFile.write("0\n"); @@ -172,7 +197,7 @@ void RaspberryPiHelper::screenOn() } } -void RaspberryPiHelper::screenOff() +void ScreenHelper::screenOff() { qDebug() << "Turning screen off"; int ret = m_powerFile.write("1\n"); diff --git a/nymea-app/platformintegration/generic/raspberrypihelper.h b/nymea-app/platformintegration/generic/screenhelper.h similarity index 94% rename from nymea-app/platformintegration/generic/raspberrypihelper.h rename to nymea-app/platformintegration/generic/screenhelper.h index 6b90a2c6..138bdec5 100644 --- a/nymea-app/platformintegration/generic/raspberrypihelper.h +++ b/nymea-app/platformintegration/generic/screenhelper.h @@ -35,11 +35,11 @@ #include #include -class RaspberryPiHelper : public QObject +class ScreenHelper : public QObject { Q_OBJECT public: - explicit RaspberryPiHelper(QObject *parent = nullptr); + explicit ScreenHelper(QObject *parent = nullptr); bool active() const; int screenTimeout() const; @@ -61,6 +61,7 @@ private: bool m_cursorHidden = false; + int m_maxBrightness = -1; int m_currentBrightness = 255; };