diff --git a/ampmanager.cpp b/ampmanager.cpp index 735ad02..780b44f 100644 --- a/ampmanager.cpp +++ b/ampmanager.cpp @@ -2,21 +2,56 @@ AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber) { - QAudioFormat format; - format.setSampleRate(8000); - format.setChannelCount(1); - format.setSampleSize(8); - format.setCodec("audio/pcm"); - format.setByteOrder(QAudioFormat::LittleEndian); - format.setSampleType(QAudioFormat::UnSignedInt); + /* Open PCM device for recording (capture). */ + rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0); + if (rc < 0) { + fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc)); + exit(1); + } - _audioDevice = new QAudioInput(device/*, format*/); + /* Allocate a hardware parameters object. */ + snd_pcm_hw_params_alloca(¶ms); + + /* Fill it in with default values. */ + snd_pcm_hw_params_any(handle, params); + + /* Set the desired hardware parameters. */ + + /* Interleaved mode */ + snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED); + + /* Signed 16-bit little-endian format */ + snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE); +s + /* One channel (mono) */ + snd_pcm_hw_params_set_channels(handle, params, 1); + + /* 16000 bits/second sampling rate */ + val = 16000; + snd_pcm_hw_params_set_rate_near(handle, params, &val, &dir); + + /* Set period size to 2048 frames. */ + frames = 2048; + snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir); + + /* Write the parameters to the driver */ + rc = snd_pcm_hw_params(handle, params); + if (rc < 0) { + fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc)); + exit(1); + } + + /* Use a buffer large enough to hold one period */ + snd_pcm_hw_params_get_period_size(params, &frames, &dir); + size = frames * 2; /* 2 bytes/sample, 1 channels */ + char* buffer = new char[size](); } AmpManager::~AmpManager() { abort(); - delete _audioDevice; + snd_pcm_drain(handle); + snd_pcm_close(handle); } void AmpManager::run() diff --git a/ampmanager.h b/ampmanager.h index 5536c81..9f036a7 100644 --- a/ampmanager.h +++ b/ampmanager.h @@ -10,9 +10,9 @@ #include #include #include -#include #include -#include +#include + #include "microcontroller.h" @@ -38,8 +38,12 @@ private: Microcontroller *_micro; int _relayNumber; - QAudioInput* _audioDevice; - QIODevice* _ioDevice = nullptr; + char* _buffer; + + snd_pcm_t *handle; + snd_pcm_hw_params_t *params; + snd_pcm_uframes_t frames; + char *buffer; bool relayState = false; diff --git a/main.cpp b/main.cpp index 44bc000..683cd9c 100644 --- a/main.cpp +++ b/main.cpp @@ -94,7 +94,7 @@ int main(int argc, char *argv[]) - AmpManager amp(µ, 0, QAudioDeviceInfo::defaultInputDevice()); + AmpManager amp(µ, 0); MainWindow w(&settings, µ, parser.isSet(secondaryOption)); QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString))); diff --git a/mainwindow.cpp b/mainwindow.cpp index 1f8fc12..549845b 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -143,6 +143,11 @@ void MainWindow::slotBSpeakerAutoToggle(int state) ui->checkBox_bspeaker->setEnabled(!state); } +void MainWindow::slotDoorOpenTimeout() +{ + ui->checkBox_doorOpen->setChecked(true); +} + void MainWindow::slotInfMirrorAutoToggle(int state) { ui->checkBox_inf->setEnabled(!state); diff --git a/mainwindow.h b/mainwindow.h index 64d242f..23140a2 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -77,6 +77,8 @@ private slots: //Night void slotChangedNightTime(const QTime time); + //door + void slotDoorOpenTimeout(); public slots: diff --git a/mainwindow.ui b/mainwindow.ui index ae9e9cd..817d3dd 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 859 - 549 + 862 + 570 @@ -502,6 +502,20 @@ + + + + + + CheckBox + + + false + + + + + diff --git a/microcontroller.cpp b/microcontroller.cpp index 39e5bdd..4cc1643 100644 --- a/microcontroller.cpp +++ b/microcontroller.cpp @@ -116,22 +116,35 @@ void Microcontroller::processMicroReturn() { QString workbuff = _buffer; - workbuff.remove(0, 2); - QStringList workbufList = workbuff.split(','); - int numberOfRelays = workbufList[0].toInt(); - if(workbufList.size() >= numberOfRelays+1) + if(_buffer.size() > 2 && _buffer[0] == "S" && _buffer[1] == "T") { - bool hasChanged = false; - _relayStates.resize(numberOfRelays, false); - for(int i = 0; i < numberOfRelays; i++) + + workbuff.remove(0, 2); + QStringList workbufList = workbuff.split(','); + int numberOfRelays = workbufList[0].toInt(); + if(workbufList.size() >= numberOfRelays+1) { - if(_relayStates[i] != (bool)workbufList[i+1].toInt()) + bool hasChanged = false; + _relayStates.resize(numberOfRelays, false); + for(int i = 0; i < numberOfRelays; i++) { - _relayStates[i] = (bool)workbufList[i+1].toInt(); - hasChanged = true; + if(_relayStates[i] != (bool)workbufList[i+1].toInt()) + { + _relayStates[i] = (bool)workbufList[i+1].toInt(); + hasChanged = true; + } } + if(hasChanged)relayStateChanged(_relayStates); } - if(hasChanged)relayStateChanged(_relayStates); + } + else if(workbuff.contains("Door Open Warning")) + { + doorOpenTimeout(); + } + else if(workbuff.size() > 2 && workbuff[0]=='D' && workbuff[1]=='2') + { + if(workbuff[3] == 'O') doorOpen(1); + else if(workbuff[3] == 'C') doorClosed(1); } } @@ -145,10 +158,7 @@ void Microcontroller::doTick() _buffer.push_back(charBuf); if( _buffer.endsWith('\n') ) { - if(_buffer.size() > 2 && _buffer[0] == "S" && _buffer[1] == "T") - { - processMicroReturn(); - } + processMicroReturn(); textRecived(_buffer); _buffer.clear(); } diff --git a/microcontroller.h b/microcontroller.h index cd3273e..8b383af 100644 --- a/microcontroller.h +++ b/microcontroller.h @@ -53,7 +53,9 @@ public slots: signals: void textRecived(const QString string); void relayStateChanged(std::vector relayStates); - + void doorOpenTimeout(); + void doorOpened(int id); + void doorClosed(int id); }; #endif // MICROCONTROLLER_H diff --git a/relaydialog.ui b/relaydialog.ui index 26a3806..fbdede4 100644 --- a/relaydialog.ui +++ b/relaydialog.ui @@ -7,7 +7,7 @@ 0 0 358 - 279 + 320 @@ -25,7 +25,7 @@ - Night Relays + Soldering iron