added EnergySaver intended to handle shutdown.
Moved timer from MouseEventSpy to EnergySaver. Connected MouseEventSpy and MusicController to EnergySaver.
This commit is contained in:
parent
ce8ea8f582
commit
8a8abd6c76
7 changed files with 132 additions and 53 deletions
60
LenaPi/EnergySaver.cpp
Normal file
60
LenaPi/EnergySaver.cpp
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
#include "EnergySaver.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
EnergySaver::EnergySaver(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergySaver::init(int interval)
|
||||||
|
{
|
||||||
|
EnergySaver* saver = instance();
|
||||||
|
saver->initTimer(interval);
|
||||||
|
saver->restartTimer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Implements the singleton pattern.
|
||||||
|
* @return Instance
|
||||||
|
*
|
||||||
|
* If no instance has been created yet, create new instance.
|
||||||
|
*/
|
||||||
|
EnergySaver *EnergySaver::instance()
|
||||||
|
{
|
||||||
|
static EnergySaver* inst;
|
||||||
|
if (inst == nullptr)
|
||||||
|
{
|
||||||
|
inst = new EnergySaver();
|
||||||
|
}
|
||||||
|
return inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnergySaver::restartTimer()
|
||||||
|
{
|
||||||
|
if(mTimer.isActive()){
|
||||||
|
mTimer.stop();
|
||||||
|
}
|
||||||
|
mTimer.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize and connect timer.
|
||||||
|
* @param interval Timeout interval in millisecond.
|
||||||
|
*/
|
||||||
|
void EnergySaver::initTimer(int interval)
|
||||||
|
{
|
||||||
|
connect(&mTimer, &QTimer::timeout, this, &EnergySaver::onTimeout);
|
||||||
|
mTimer.setInterval(interval);
|
||||||
|
mTimer.setSingleShot(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Behavior on timeout: shut down RaspberryPi.
|
||||||
|
* @todo Call shutdown script.
|
||||||
|
*/
|
||||||
|
void EnergySaver::onTimeout()
|
||||||
|
{
|
||||||
|
qDebug() << "shutting down.";
|
||||||
|
}
|
||||||
30
LenaPi/EnergySaver.h
Normal file
30
LenaPi/EnergySaver.h
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef ENERGYSAVER_H
|
||||||
|
#define ENERGYSAVER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
class EnergySaver : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
protected:
|
||||||
|
EnergySaver(QObject *parent = 0);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void init(int intervall);
|
||||||
|
static EnergySaver *instance();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void restartTimer();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void initTimer(int interval);
|
||||||
|
QTimer mTimer;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onTimeout();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ENERGYSAVER_H
|
||||||
|
|
@ -11,7 +11,8 @@ SOURCES += main.cpp \
|
||||||
models/UiStateModel.cpp \
|
models/UiStateModel.cpp \
|
||||||
controllers/MusicController.cpp \
|
controllers/MusicController.cpp \
|
||||||
models/MusicModel.cpp \
|
models/MusicModel.cpp \
|
||||||
MouseEventSpy.cpp
|
MouseEventSpy.cpp \
|
||||||
|
EnergySaver.cpp
|
||||||
|
|
||||||
RESOURCES += qml.qrc \
|
RESOURCES += qml.qrc \
|
||||||
lenapi.qrc
|
lenapi.qrc
|
||||||
|
|
@ -45,6 +46,7 @@ HEADERS += \
|
||||||
models/UiStateModel.h \
|
models/UiStateModel.h \
|
||||||
controllers/MusicController.h \
|
controllers/MusicController.h \
|
||||||
models/MusicModel.h \
|
models/MusicModel.h \
|
||||||
MouseEventSpy.h
|
MouseEventSpy.h \
|
||||||
|
EnergySaver.h
|
||||||
|
|
||||||
INCLUDEPATH+=/usr/local/include
|
INCLUDEPATH+=/usr/local/include
|
||||||
|
|
|
||||||
|
|
@ -3,18 +3,26 @@
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Initialize timer.
|
|
||||||
* @param parent Parent object
|
|
||||||
*/
|
|
||||||
MouseEventSpy::MouseEventSpy(QObject *parent) : QObject(parent)
|
MouseEventSpy::MouseEventSpy(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
initTimer(10000);
|
|
||||||
mTimer.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Implements the singleton pattern
|
* @brief Create instance if necessary.
|
||||||
|
*
|
||||||
|
* If no instance has been created yet, create new instance and install it as event filter
|
||||||
|
* in QGuiApplication.
|
||||||
|
*
|
||||||
|
* @see MouseEventSpy::instance()
|
||||||
|
*/
|
||||||
|
void MouseEventSpy::init()
|
||||||
|
{
|
||||||
|
instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Implements the singleton pattern.
|
||||||
|
* @return Instance
|
||||||
*
|
*
|
||||||
* If no instance has been created yet, create new instance and install it as event filter
|
* If no instance has been created yet, create new instance and install it as event filter
|
||||||
* in QGuiApplication.
|
* in QGuiApplication.
|
||||||
|
|
@ -45,24 +53,7 @@ bool MouseEventSpy::eventFilter(QObject* watched, QEvent* event)
|
||||||
{
|
{
|
||||||
emit mouseEventDetected();
|
emit mouseEventDetected();
|
||||||
}
|
}
|
||||||
|
return QObject::eventFilter(watched, event);
|
||||||
if(mTimer.isActive()){
|
|
||||||
mTimer.stop();
|
|
||||||
}
|
|
||||||
mTimer.start();
|
|
||||||
|
|
||||||
return QObject::eventFilter(watched, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Initialize and connect timer.
|
|
||||||
* @param interval Timeout interval in millisecond.
|
|
||||||
*/
|
|
||||||
void MouseEventSpy::initTimer(int interval)
|
|
||||||
{
|
|
||||||
connect(&mTimer, &QTimer::timeout, this, &MouseEventSpy::onTimeout);
|
|
||||||
mTimer.setInterval(interval);
|
|
||||||
mTimer.setSingleShot(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -77,12 +68,3 @@ bool MouseEventSpy::isMouseEvent(QEvent::Type t)
|
||||||
|| t == QEvent::MouseButtonRelease
|
|| t == QEvent::MouseButtonRelease
|
||||||
|| t == QEvent::MouseMove);
|
|| t == QEvent::MouseMove);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Behavior on timeout: shut down RaspberryPi.
|
|
||||||
* @todo Call shutdown script.
|
|
||||||
*/
|
|
||||||
void MouseEventSpy::onTimeout()
|
|
||||||
{
|
|
||||||
qDebug() << "shutting down.";
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -2,36 +2,34 @@
|
||||||
#define MOUSEEVENTSPY_H
|
#define MOUSEEVENTSPY_H
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QTimer>
|
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Catches all mouse event and starts timer -- basically behaves like a screensaver.
|
* @brief Catches all mouse event and reports them via signal.
|
||||||
* Based on
|
*
|
||||||
* https://stackoverflow.com/questions/46173105/how-can-i-reset-a-timer-every-time-i-receive-a-touch-event-from-a-qml-page
|
* Based on
|
||||||
*
|
* https://stackoverflow.com/questions/46173105/how-can-i-reset-a-timer-every-time-i-receive-a-touch-event-from-a-qml-page
|
||||||
* @todo implement timer and behavior on timeout.
|
*/
|
||||||
*/
|
|
||||||
class MouseEventSpy : public QObject
|
class MouseEventSpy : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
|
||||||
|
protected:
|
||||||
explicit MouseEventSpy(QObject *parent = 0);
|
explicit MouseEventSpy(QObject *parent = 0);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void mouseEventDetected();
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void init();
|
||||||
static MouseEventSpy* instance();
|
static MouseEventSpy* instance();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool eventFilter(QObject* watched, QEvent* event);
|
bool eventFilter(QObject* watched, QEvent* event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initTimer(int interval);
|
|
||||||
bool isMouseEvent(QEvent::Type t);
|
bool isMouseEvent(QEvent::Type t);
|
||||||
QTimer mTimer;
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onTimeout();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void mouseEventDetected();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MOUSEEVENTSPY_H
|
#endif // MOUSEEVENTSPY_H
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <models/MusicModel.h>
|
#include <models/MusicModel.h>
|
||||||
#include <VLCQtCore/MediaPlayer.h>
|
#include <VLCQtCore/MediaPlayer.h>
|
||||||
|
#include "EnergySaver.h"
|
||||||
|
|
||||||
MusicController::MusicController(QObject *parent) : QObject(parent)
|
MusicController::MusicController(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
@ -24,6 +25,8 @@ MusicController::MusicController(QObject *parent) : QObject(parent)
|
||||||
connect(mPlayer, SIGNAL(nextItemSet(VlcMedia*)), mModel, SLOT(onNextMediaSet(VlcMedia*)));
|
connect(mPlayer, SIGNAL(nextItemSet(VlcMedia*)), mModel, SLOT(onNextMediaSet(VlcMedia*)));
|
||||||
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::lengthChanged, mModel, &MusicModel::onLengthChanged);
|
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::lengthChanged, mModel, &MusicModel::onLengthChanged);
|
||||||
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, mModel, &MusicModel::onTimeChanged);
|
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, mModel, &MusicModel::onTimeChanged);
|
||||||
|
|
||||||
|
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, EnergySaver::instance(), &EnergySaver::restartTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
MusicController::~MusicController()
|
MusicController::~MusicController()
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
#include "controllers/NavigationController.h"
|
#include "controllers/NavigationController.h"
|
||||||
#include "MouseEventSpy.h"
|
#include "MouseEventSpy.h"
|
||||||
|
#include "EnergySaver.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
@ -29,8 +30,11 @@ int main(int argc, char *argv[])
|
||||||
navController.setContext(engine.rootContext());
|
navController.setContext(engine.rootContext());
|
||||||
navController.init("/home/ar/source/lenaMusic/");
|
navController.init("/home/ar/source/lenaMusic/");
|
||||||
|
|
||||||
// install MouseEventSpy used for auto shut down of RaspberryPi if not used for a predefined time.
|
// install MouseEventSpy and energy saver used for auto
|
||||||
MouseEventSpy::instance();
|
// shut down of RaspberryPi if not used for a predefined time.
|
||||||
|
MouseEventSpy::init();
|
||||||
|
EnergySaver::init(10000);
|
||||||
|
QObject::connect(MouseEventSpy::instance(), &MouseEventSpy::mouseEventDetected, EnergySaver::instance(), &EnergySaver::restartTimer);
|
||||||
engine.load(QUrl("qrc:/main.qml"));
|
engine.load(QUrl("qrc:/main.qml"));
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue