Broken alsalib record

This commit is contained in:
IMback
2017-12-30 20:53:12 +01:00
parent 1dd7aca03b
commit 2e79a898e8
9 changed files with 106 additions and 34 deletions

View File

@ -2,21 +2,56 @@
AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber) AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber)
{ {
QAudioFormat format; /* Open PCM device for recording (capture). */
format.setSampleRate(8000); rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0);
format.setChannelCount(1); if (rc < 0) {
format.setSampleSize(8); fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc));
format.setCodec("audio/pcm"); exit(1);
format.setByteOrder(QAudioFormat::LittleEndian); }
format.setSampleType(QAudioFormat::UnSignedInt);
_audioDevice = new QAudioInput(device/*, format*/); /* Allocate a hardware parameters object. */
snd_pcm_hw_params_alloca(&params);
/* 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() AmpManager::~AmpManager()
{ {
abort(); abort();
delete _audioDevice; snd_pcm_drain(handle);
snd_pcm_close(handle);
} }
void AmpManager::run() void AmpManager::run()

View File

@ -10,9 +10,9 @@
#include <QTimer> #include <QTimer>
#include <QByteArray> #include <QByteArray>
#include <QtDebug> #include <QtDebug>
#include <QAudioInput>
#include <QAudioDeviceInfo> #include <QAudioDeviceInfo>
#include <QIODevice> #include <alsa/asoundlib.h>
#include "microcontroller.h" #include "microcontroller.h"
@ -38,8 +38,12 @@ private:
Microcontroller *_micro; Microcontroller *_micro;
int _relayNumber; int _relayNumber;
QAudioInput* _audioDevice; char* _buffer;
QIODevice* _ioDevice = nullptr;
snd_pcm_t *handle;
snd_pcm_hw_params_t *params;
snd_pcm_uframes_t frames;
char *buffer;
bool relayState = false; bool relayState = false;

View File

@ -94,7 +94,7 @@ int main(int argc, char *argv[])
AmpManager amp(&micro, 0, QAudioDeviceInfo::defaultInputDevice()); AmpManager amp(&micro, 0);
MainWindow w(&settings, &micro, parser.isSet(secondaryOption)); MainWindow w(&settings, &micro, parser.isSet(secondaryOption));
QObject::connect(&micro, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString))); QObject::connect(&micro, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString)));

View File

@ -143,6 +143,11 @@ void MainWindow::slotBSpeakerAutoToggle(int state)
ui->checkBox_bspeaker->setEnabled(!state); ui->checkBox_bspeaker->setEnabled(!state);
} }
void MainWindow::slotDoorOpenTimeout()
{
ui->checkBox_doorOpen->setChecked(true);
}
void MainWindow::slotInfMirrorAutoToggle(int state) void MainWindow::slotInfMirrorAutoToggle(int state)
{ {
ui->checkBox_inf->setEnabled(!state); ui->checkBox_inf->setEnabled(!state);

View File

@ -77,6 +77,8 @@ private slots:
//Night //Night
void slotChangedNightTime(const QTime time); void slotChangedNightTime(const QTime time);
//door
void slotDoorOpenTimeout();
public slots: public slots:

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>859</width> <width>862</width>
<height>549</height> <height>570</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -502,6 +502,20 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QCheckBox" name="checkBox_doorOpen">
<property name="text">
<string>CheckBox</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_12"> <layout class="QHBoxLayout" name="horizontalLayout_12">
<item> <item>

View File

@ -116,22 +116,35 @@ void Microcontroller::processMicroReturn()
{ {
QString workbuff = _buffer; QString workbuff = _buffer;
workbuff.remove(0, 2); if(_buffer.size() > 2 && _buffer[0] == "S" && _buffer[1] == "T")
QStringList workbufList = workbuff.split(',');
int numberOfRelays = workbufList[0].toInt();
if(workbufList.size() >= numberOfRelays+1)
{ {
bool hasChanged = false;
_relayStates.resize(numberOfRelays, false); workbuff.remove(0, 2);
for(int i = 0; i < numberOfRelays; i++) 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(); if(_relayStates[i] != (bool)workbufList[i+1].toInt())
hasChanged = true; {
_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); _buffer.push_back(charBuf);
if( _buffer.endsWith('\n') ) if( _buffer.endsWith('\n') )
{ {
if(_buffer.size() > 2 && _buffer[0] == "S" && _buffer[1] == "T") processMicroReturn();
{
processMicroReturn();
}
textRecived(_buffer); textRecived(_buffer);
_buffer.clear(); _buffer.clear();
} }

View File

@ -53,7 +53,9 @@ public slots:
signals: signals:
void textRecived(const QString string); void textRecived(const QString string);
void relayStateChanged(std::vector<bool> relayStates); void relayStateChanged(std::vector<bool> relayStates);
void doorOpenTimeout();
void doorOpened(int id);
void doorClosed(int id);
}; };
#endif // MICROCONTROLLER_H #endif // MICROCONTROLLER_H

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>358</width> <width>358</width>
<height>279</height> <height>320</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -25,7 +25,7 @@
<item> <item>
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>Night Relays</string> <string>Soldering iron</string>
</property> </property>
</widget> </widget>
</item> </item>