Broken alsalib record
This commit is contained in:
@ -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(¶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()
|
AmpManager::~AmpManager()
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
delete _audioDevice;
|
snd_pcm_drain(handle);
|
||||||
|
snd_pcm_close(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AmpManager::run()
|
void AmpManager::run()
|
||||||
|
12
ampmanager.h
12
ampmanager.h
@ -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;
|
||||||
|
|
||||||
|
2
main.cpp
2
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));
|
MainWindow w(&settings, µ, parser.isSet(secondaryOption));
|
||||||
QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString)));
|
QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString)));
|
||||||
|
@ -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);
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
@ -116,6 +116,9 @@ void Microcontroller::processMicroReturn()
|
|||||||
{
|
{
|
||||||
QString workbuff = _buffer;
|
QString workbuff = _buffer;
|
||||||
|
|
||||||
|
if(_buffer.size() > 2 && _buffer[0] == "S" && _buffer[1] == "T")
|
||||||
|
{
|
||||||
|
|
||||||
workbuff.remove(0, 2);
|
workbuff.remove(0, 2);
|
||||||
QStringList workbufList = workbuff.split(',');
|
QStringList workbufList = workbuff.split(',');
|
||||||
int numberOfRelays = workbufList[0].toInt();
|
int numberOfRelays = workbufList[0].toInt();
|
||||||
@ -133,6 +136,16 @@ void Microcontroller::processMicroReturn()
|
|||||||
}
|
}
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Microcontroller::doTick()
|
void Microcontroller::doTick()
|
||||||
@ -144,11 +157,8 @@ 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();
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
Reference in New Issue
Block a user