Files
UvosSmartHomeInterface/ampmanager.cpp
2017-12-30 21:07:30 +01:00

66 lines
1.4 KiB
C++

#include "ampmanager.h"
AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber)
{
silenceCount = 0;
}
AmpManager::~AmpManager()
{
abort();
}
void AmpManager::run()
{
abort();
arecord.start( "arecord -D front -" );
loop.reset(new QEventLoop);
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
timer.setInterval(500);
timer.start();
qDebug()<<"Start Auto Amp Manager\n";
_micro->relayOn(_relayNumber);
relayState = true;
loop->exec();
}
void AmpManager::abort()
{
if (!loop.isNull()){
loop->quit();
}
if(arecord.state() == QProcess::Running)arecord.close();
qDebug()<<"Stop Auto Amp Manager\n";
}
void AmpManager::doTick()
{
if(arecord.state() == QProcess::Running)
{
QByteArray buffer = arecord.readAllStandardOutput();
for(long i = 0; i < buffer.size(); i++)
{
if((uint8_t) buffer.at(i) != 128)
{
silenceCount = 0;
}
}
if(silenceCount > 40 && relayState)
{
std::cout<<"Auto off Amp\n";
_micro->relayOff(_relayNumber);
relayState = false;
}
else if(silenceCount == 0 && !relayState)
{
std::cout<<"Auto on Amp\n";
_micro->relayOn(_relayNumber);
relayState = true;
}
silenceCount ++;
}
}