Merge branch 'digitalOutputAbstraction'
This commit is contained in:
commit
d5585cda3f
@ -1,7 +1,7 @@
|
|||||||
#include "CArun.h"
|
#include "CArun.h"
|
||||||
#include "datei.h"
|
#include "datei.h"
|
||||||
|
|
||||||
#include "CCWakelineAbstraction.h"
|
#include "DigitalOutputAbstraction.h"
|
||||||
|
|
||||||
|
|
||||||
CArun::CArun(QObject *parent)
|
CArun::CArun(QObject *parent)
|
||||||
@ -20,7 +20,11 @@ CArun::CArun(QObject *parent)
|
|||||||
|
|
||||||
this->timerChainCtrl->start();
|
this->timerChainCtrl->start();
|
||||||
|
|
||||||
this->ccWakelineAbstraction = new CCWakelineAbstraction(this->HWaccess, this);
|
|
||||||
|
this->digitalOutputAbstraction = new DigitalOutputAbstraction(this->HWaccess, this);
|
||||||
|
this->digitalOutputAbstraction->addCCWake("/sys/class/leds/wakeupctrl_cc/brightness");
|
||||||
|
this->digitalOutputAbstraction->addCCPower("/run/powerctrl_cc");
|
||||||
|
this->digitalOutputAbstraction->addCCModem("/run/powerctrl_modem");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ enum class SETUP_STEP {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class CCWakelineAbstraction;
|
class DigitalOutputAbstraction;
|
||||||
|
|
||||||
class CArun : public QObject
|
class CArun : public QObject
|
||||||
{
|
{
|
||||||
@ -45,7 +45,7 @@ private:
|
|||||||
|
|
||||||
void openSerialPort();
|
void openSerialPort();
|
||||||
|
|
||||||
CCWakelineAbstraction* ccWakelineAbstraction;
|
DigitalOutputAbstraction* digitalOutputAbstraction;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
#include <QFileSystemWatcher>
|
|
||||||
#include <QFile>
|
|
||||||
|
|
||||||
#include <QDebug>
|
|
||||||
|
|
||||||
#include "CCWakelineAbstraction.h"
|
|
||||||
#include "plugin.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* this is based on a solution from:
|
|
||||||
* https://embeddeduse.com/2018/09/18/monitoring-sys-files-qfilesystemwatcher/
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
CCWakelineAbstraction::CCWakelineAbstraction(hwinf *dc, QObject *parent)
|
|
||||||
: QObject(parent)
|
|
||||||
, dc(dc)
|
|
||||||
{
|
|
||||||
auto ccWakeMonitor = new QFileSystemWatcher(this);
|
|
||||||
|
|
||||||
ccWakeMonitor->addPath("/sys/class/leds/wakeupctrl_cc/brightness");
|
|
||||||
connect(ccWakeMonitor, &QFileSystemWatcher::fileChanged,
|
|
||||||
this, &CCWakelineAbstraction::ccWakeChanged);
|
|
||||||
|
|
||||||
qCritical() << "... init CCWakelineAbstraction";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void CCWakelineAbstraction::ccWakeChanged(const QString &path)
|
|
||||||
{
|
|
||||||
QFile ccWakeFile(path);
|
|
||||||
if (!ccWakeFile.open(QIODevice::ReadOnly)) {
|
|
||||||
qWarning() << "ERROR: Could not open ccWakeFile file.";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto ccWake = ccWakeFile.readAll();
|
|
||||||
if (!ccWake.isEmpty()) {
|
|
||||||
int state = ccWake.at(0);
|
|
||||||
//qCritical() << "INFO: ccWake = " << state;
|
|
||||||
switch (state) {
|
|
||||||
case 0x30: // '1'
|
|
||||||
qCritical() << "INFO: ccWake -> sleep";
|
|
||||||
this->dc->credit_switchWake(true); // switch 'sleep'
|
|
||||||
break;
|
|
||||||
case 0x31: // '0'
|
|
||||||
qCritical() << "INFO: ccWake -> wake";
|
|
||||||
this->dc->credit_switchWake(false); // switch 'wake'
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
#ifndef CCWAKELINEABSTRACTION_H
|
|
||||||
#define CCWAKELINEABSTRACTION_H
|
|
||||||
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
|
|
||||||
class hwinf;
|
|
||||||
class QFileSystemWatcher;
|
|
||||||
|
|
||||||
|
|
||||||
class CCWakelineAbstraction : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
CCWakelineAbstraction(hwinf *dc, QObject *parent = nullptr);
|
|
||||||
|
|
||||||
private:
|
|
||||||
hwinf *dc;
|
|
||||||
QFileSystemWatcher *ccWakeMonitor;
|
|
||||||
|
|
||||||
void ccWakeChanged(const QString &path);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CCWAKELINEABSTRACTION_H
|
|
170
dCArun/DigitalOutputAbstraction.cpp
Normal file
170
dCArun/DigitalOutputAbstraction.cpp
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
#include <QFileSystemWatcher>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QFileInfo>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include "DigitalOutputAbstraction.h"
|
||||||
|
#include "plugin.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this is based on a solution from:
|
||||||
|
* https://embeddeduse.com/2018/09/18/monitoring-sys-files-qfilesystemwatcher/
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
DigitalOutputAbstraction::DigitalOutputAbstraction(hwinf *dc, QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
, dc(dc)
|
||||||
|
{
|
||||||
|
this->fileMonitor = new QFileSystemWatcher(this);
|
||||||
|
|
||||||
|
connect(this->fileMonitor, &QFileSystemWatcher::fileChanged,
|
||||||
|
this, &DigitalOutputAbstraction::fileChanged);
|
||||||
|
|
||||||
|
qCritical() << "... init DigitalOutputAbstraction";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool DigitalOutputAbstraction::addCCWake(const QString file)
|
||||||
|
{
|
||||||
|
// on PTU5: "/sys/class/leds/wakeupctrl_cc/brightness"
|
||||||
|
if (!QFileInfo::exists(file)) {
|
||||||
|
qCritical() << " ... create file: " << file;
|
||||||
|
QFile(file).open(QIODevice::ReadWrite | QIODevice::Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
qCritical() << " ... add file: " << file;
|
||||||
|
|
||||||
|
this->ccWakePath = file;
|
||||||
|
return this->fileMonitor->addPath(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DigitalOutputAbstraction::addCCPower(const QString file)
|
||||||
|
{
|
||||||
|
if (!QFileInfo::exists(file)) {
|
||||||
|
qCritical() << " ... create file: " << file;
|
||||||
|
QFile(file).open(QIODevice::ReadWrite | QIODevice::Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
qCritical() << " ... add file: " << file;
|
||||||
|
|
||||||
|
this->ccPowerPath = file;
|
||||||
|
return this->fileMonitor->addPath(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DigitalOutputAbstraction::addCCModem(const QString file)
|
||||||
|
{
|
||||||
|
if (!QFileInfo::exists(file)) {
|
||||||
|
qCritical() << " ... create file: " << file;
|
||||||
|
QFile(file).open(QIODevice::ReadWrite | QIODevice::Text);
|
||||||
|
}
|
||||||
|
|
||||||
|
qCritical() << " ... add file: " << file;
|
||||||
|
|
||||||
|
this->modemPowerPath = file;
|
||||||
|
return this->fileMonitor->addPath(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DigitalOutputAbstraction::fileChanged(const QString &path)
|
||||||
|
{
|
||||||
|
if (path == this->ccPowerPath) this->private_ccPowerChanged();
|
||||||
|
if (path == this->ccWakePath) this->private_ccWakeChanged();
|
||||||
|
if (path == this->modemPowerPath) this->private_modemPowerChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DigitalOutputAbstraction::private_modemPowerChanged()
|
||||||
|
{
|
||||||
|
QFile modemPowerFile(this->modemPowerPath);
|
||||||
|
if (!modemPowerFile.open(QIODevice::ReadOnly)) {
|
||||||
|
qWarning() << "ERROR: Could not open modemPowerFile " << this->modemPowerPath;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto modemPower = modemPowerFile.readAll();
|
||||||
|
if (!modemPower.isEmpty()) {
|
||||||
|
int state = modemPower.at(0);
|
||||||
|
// qCritical() << "INFO: modemPower = " << state;
|
||||||
|
switch (state) {
|
||||||
|
case 0x30: // '0'
|
||||||
|
qCritical() << "INFO: modemPower -> off";
|
||||||
|
this->dc->mod_switchWake(false);
|
||||||
|
this->dc->mod_switchPower(false);
|
||||||
|
break;
|
||||||
|
case 0x31: // '1'
|
||||||
|
qCritical() << "INFO: modemPower -> on";
|
||||||
|
this->dc->mod_switchWake(true);
|
||||||
|
this->dc->mod_switchPower(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DigitalOutputAbstraction::private_ccPowerChanged()
|
||||||
|
{
|
||||||
|
QFile ccPowerFile(this->ccPowerPath);
|
||||||
|
if (!ccPowerFile.open(QIODevice::ReadOnly)) {
|
||||||
|
qWarning() << "ERROR: Could not open ccPowerFile file.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto ccPower = ccPowerFile.readAll();
|
||||||
|
if (!ccPower.isEmpty()) {
|
||||||
|
int state = ccPower.at(0);
|
||||||
|
|
||||||
|
auto lambdaOn = [this]() -> void
|
||||||
|
{
|
||||||
|
this->dc->credit_switchPower(true);
|
||||||
|
this->dc->credit_switchWake(true);
|
||||||
|
};
|
||||||
|
auto lambdaOff = [this]() -> void
|
||||||
|
{
|
||||||
|
this->dc->credit_switchPower(false);
|
||||||
|
this->dc->credit_switchWake(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//qCritical() << "INFO: ccPower = " << state;
|
||||||
|
switch (state) {
|
||||||
|
case 0x30: // '0'
|
||||||
|
qCritical() << "INFO: ccPower -> off";
|
||||||
|
lambdaOff();
|
||||||
|
break;
|
||||||
|
case 0x31: // '1'
|
||||||
|
qCritical() << "INFO: ccPower -> on";
|
||||||
|
lambdaOn();
|
||||||
|
break;
|
||||||
|
case 0x32: // '2'
|
||||||
|
qCritical() << "INFO: ccPower -> on / off";
|
||||||
|
lambdaOff();
|
||||||
|
QTimer::singleShot(500, this, lambdaOn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DigitalOutputAbstraction::private_ccWakeChanged()
|
||||||
|
{
|
||||||
|
QFile ccWakeFile(this->ccWakePath);
|
||||||
|
if (!ccWakeFile.open(QIODevice::ReadOnly)) {
|
||||||
|
qWarning() << "ERROR: Could not open ccWakeFile " << this->ccWakePath;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto ccWake = ccWakeFile.readAll();
|
||||||
|
if (!ccWake.isEmpty()) {
|
||||||
|
int state = ccWake.at(0);
|
||||||
|
//qCritical() << "INFO: ccWake = " << state;
|
||||||
|
switch (state) {
|
||||||
|
case 0x30: // '0'
|
||||||
|
qCritical() << "INFO: ccWake -> sleep";
|
||||||
|
this->dc->credit_switchWake(true); // switch 'sleep'
|
||||||
|
break;
|
||||||
|
case 0x31: // '1'
|
||||||
|
qCritical() << "INFO: ccWake -> wake";
|
||||||
|
this->dc->credit_switchWake(false); // switch 'wake'
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
dCArun/DigitalOutputAbstraction.h
Normal file
37
dCArun/DigitalOutputAbstraction.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef DIGITALOUTPUTABSTRACTION_H
|
||||||
|
#define DIGITALOUTPUTABSTRACTION_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class hwinf;
|
||||||
|
class QFileSystemWatcher;
|
||||||
|
|
||||||
|
|
||||||
|
class DigitalOutputAbstraction : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
DigitalOutputAbstraction(hwinf *dc, QObject *parent = nullptr);
|
||||||
|
bool addCCWake(const QString file);
|
||||||
|
bool addCCPower(const QString file);
|
||||||
|
bool addCCModem(const QString file);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
hwinf *dc;
|
||||||
|
QFileSystemWatcher *fileMonitor;
|
||||||
|
|
||||||
|
QString modemPowerPath;
|
||||||
|
QString ccPowerPath;
|
||||||
|
QString ccWakePath;
|
||||||
|
|
||||||
|
void fileChanged(const QString &path);
|
||||||
|
|
||||||
|
void private_modemPowerChanged();
|
||||||
|
void private_ccPowerChanged();
|
||||||
|
void private_ccWakeChanged();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DIGITALOUTPUTABSTRACTION_H
|
@ -40,14 +40,14 @@ DEFINES+=APP_EXTENDED_VERSION=\\\"$$EXTENDED_VERSION\\\"
|
|||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
CArun.cpp \
|
CArun.cpp \
|
||||||
CCWakelineAbstraction.cpp \
|
DigitalOutputAbstraction.cpp \
|
||||||
main.cpp \
|
main.cpp \
|
||||||
tslib.cpp \
|
tslib.cpp \
|
||||||
datei.cpp
|
datei.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
CArun.h \
|
CArun.h \
|
||||||
CCWakelineAbstraction.h \
|
DigitalOutputAbstraction.h \
|
||||||
guidefs.h \
|
guidefs.h \
|
||||||
tslib.h \
|
tslib.h \
|
||||||
versionHistory.txt \
|
versionHistory.txt \
|
||||||
|
Loading…
Reference in New Issue
Block a user