66 lines
1.4 KiB
C++
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 ++;
|
|
}
|
|
}
|