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)
|
||||
{
|
||||
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()
|
||||
|
12
ampmanager.h
12
ampmanager.h
@ -10,9 +10,9 @@
|
||||
#include <QTimer>
|
||||
#include <QByteArray>
|
||||
#include <QtDebug>
|
||||
#include <QAudioInput>
|
||||
#include <QAudioDeviceInfo>
|
||||
#include <QIODevice>
|
||||
#include <alsa/asoundlib.h>
|
||||
|
||||
|
||||
#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;
|
||||
|
||||
|
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));
|
||||
QObject::connect(µ, SIGNAL(textRecived(QString)), &w, SLOT(changeHeaderLableText(QString)));
|
||||
|
@ -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);
|
||||
|
@ -77,6 +77,8 @@ private slots:
|
||||
//Night
|
||||
void slotChangedNightTime(const QTime time);
|
||||
|
||||
//door
|
||||
void slotDoorOpenTimeout();
|
||||
|
||||
public slots:
|
||||
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>859</width>
|
||||
<height>549</height>
|
||||
<width>862</width>
|
||||
<height>570</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@ -502,6 +502,20 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</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>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -53,7 +53,9 @@ public slots:
|
||||
signals:
|
||||
void textRecived(const QString string);
|
||||
void relayStateChanged(std::vector<bool> relayStates);
|
||||
|
||||
void doorOpenTimeout();
|
||||
void doorOpened(int id);
|
||||
void doorClosed(int id);
|
||||
};
|
||||
|
||||
#endif // MICROCONTROLLER_H
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>358</width>
|
||||
<height>279</height>
|
||||
<height>320</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -25,7 +25,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Night Relays</string>
|
||||
<string>Soldering iron</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
Reference in New Issue
Block a user