mirror of
https://github.com/wf-group/wfview
synced 2026-08-13 17:32:59 -04:00
wfview has been tested with the following Icom radios over USB port: IC-7300, IC-7610, IC-7851 (and IC-7850), and IC-9700. It likely works fine with the IC-705 as well. At this time, the rig's CIV address must be changed in the preference file to indicate the rig you are using, and this must be in integer, not hex.
104 lines
3.6 KiB
C++
104 lines
3.6 KiB
C++
#include "rxaudiohandler.h"
|
|
|
|
rxAudioHandler::rxAudioHandler()
|
|
{
|
|
|
|
}
|
|
|
|
rxAudioHandler::~rxAudioHandler()
|
|
{
|
|
audio->stop();
|
|
delete audio;
|
|
}
|
|
|
|
void rxAudioHandler::process()
|
|
{
|
|
qDebug() << "rxAudio Handler created.";
|
|
}
|
|
|
|
void rxAudioHandler::setup(const QAudioFormat format, const quint16 bufferSize, const bool isUlaw)
|
|
{
|
|
this->format = format;
|
|
this->bufferSize = bufferSize;
|
|
this->isUlaw = isUlaw;
|
|
audio = new QAudioOutput(format);
|
|
audio->setBufferSize(bufferSize);
|
|
device = audio->start();
|
|
}
|
|
|
|
|
|
void rxAudioHandler::incomingAudio(const QByteArray data)
|
|
{
|
|
QMutexLocker locker(&mutex);
|
|
if (isUlaw) {
|
|
device->write(uLawDecode(data));
|
|
}
|
|
else {
|
|
device->write(data, data.length());
|
|
}
|
|
}
|
|
|
|
void rxAudioHandler::changeBufferSize(const quint16 newSize)
|
|
{
|
|
QMutexLocker locker(&mutex);
|
|
qDebug() << "Changing buffer size to: " << newSize << " from " << audio->bufferSize();
|
|
audio->stop();
|
|
audio->setBufferSize(newSize);
|
|
device = audio->start();
|
|
}
|
|
|
|
void rxAudioHandler::getBufferSize()
|
|
{
|
|
emit sendBufferSize(audio->bufferSize());
|
|
}
|
|
|
|
|
|
|
|
QByteArray rxAudioHandler::uLawDecode(const QByteArray in)
|
|
{
|
|
static const qint16 ulaw_decode[256] = {
|
|
-32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
|
|
-23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
|
|
-15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
|
|
-11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,
|
|
-7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
|
|
-5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
|
|
-3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
|
|
-2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
|
|
-1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
|
|
-1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
|
|
-876, -844, -812, -780, -748, -716, -684, -652,
|
|
-620, -588, -556, -524, -492, -460, -428, -396,
|
|
-372, -356, -340, -324, -308, -292, -276, -260,
|
|
-244, -228, -212, -196, -180, -164, -148, -132,
|
|
-120, -112, -104, -96, -88, -80, -72, -64,
|
|
-56, -48, -40, -32, -24, -16, -8, 0,
|
|
32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
|
|
23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
|
|
15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
|
|
11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,
|
|
7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,
|
|
5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,
|
|
3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,
|
|
2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,
|
|
1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,
|
|
1372, 1308, 1244, 1180, 1116, 1052, 988, 924,
|
|
876, 844, 812, 780, 748, 716, 684, 652,
|
|
620, 588, 556, 524, 492, 460, 428, 396,
|
|
372, 356, 340, 324, 308, 292, 276, 260,
|
|
244, 228, 212, 196, 180, 164, 148, 132,
|
|
120, 112, 104, 96, 88, 80, 72, 64,
|
|
56, 48, 40, 32, 24, 16, 8, 0 };
|
|
|
|
QByteArray out;
|
|
foreach(qint8 const temp, in)
|
|
{
|
|
qint16 decoded = ulaw_decode[0];
|
|
if (temp != 0) {
|
|
decoded = ulaw_decode[static_cast<quint8>(temp)];
|
|
}
|
|
out.append(static_cast<qint8>(decoded & 0xff));
|
|
out.append(static_cast<qint8>(decoded >> 8 & 0xff));
|
|
}
|
|
return out;
|
|
}
|