72 lines
1.4 KiB
C++
72 lines
1.4 KiB
C++
#include "EnergySaver.h"
|
|
|
|
#include <QDebug>
|
|
#include <QProcess>
|
|
#include <iostream>
|
|
|
|
EnergySaver::EnergySaver(QObject *parent) : QObject(parent)
|
|
{
|
|
|
|
}
|
|
|
|
/**
|
|
* @brief Create instance if necessary and set timeout interval.
|
|
* @param interval Timer interval in seconds
|
|
* @see EnergySaver::instance
|
|
*/
|
|
void EnergySaver::init(int interval)
|
|
{
|
|
EnergySaver* saver = instance();
|
|
saver->initTimer(interval*1000);
|
|
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()
|
|
{
|
|
std::cout << "Shutting down.";
|
|
#ifndef _DEBUG
|
|
QProcess p;
|
|
p.start("/usr/local/sbin/do_shutdown.sh");
|
|
p.waitForFinished();
|
|
#endif
|
|
}
|