Add audio buffersize slider and ability to select samplerate and number of channels.

merge-requests/1/head
Phil Taylor 2021-02-08 16:53:26 +00:00
rodzic b6ad6218e1
commit 228fb07eed
9 zmienionych plików z 251 dodań i 47 usunięć

Wyświetl plik

@ -62,7 +62,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu
} }
void rigCommander::commSetup(unsigned char rigCivAddr, QString ip, int cport, int sport, int aport, QString username, QString password) void rigCommander::commSetup(unsigned char rigCivAddr, QString ip, quint16 cport, quint16 sport, quint16 aport, QString username, QString password, quint16 buffer, quint16 sample, quint8 channels)
{ {
// construct // construct
// TODO: Bring this parameter and the comm port from the UI. // TODO: Bring this parameter and the comm port from the UI.
@ -83,11 +83,12 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString ip, int cport, in
this->username = username; this->username = username;
this->password = password; this->password = password;
if (udp == Q_NULLPTR) { if (udp == Q_NULLPTR) {
udp = new udpHandler(ip, cport, sport, aport, username, password); udp = new udpHandler(ip, cport, sport, aport, username, password,buffer,sample,channels);
connect(udp, SIGNAL(haveDataFromPort(QByteArray)), this, SLOT(handleNewData(QByteArray))); connect(udp, SIGNAL(haveDataFromPort(QByteArray)), this, SLOT(handleNewData(QByteArray)));
// data from the program to the comm port: // data from the program to the comm port:
connect(this, SIGNAL(dataForComm(QByteArray)), udp, SLOT(receiveDataFromUserToRig(QByteArray))); connect(this, SIGNAL(dataForComm(QByteArray)), udp, SLOT(receiveDataFromUserToRig(QByteArray)));
connect(this, SIGNAL(haveChangeBufferSize(quint16)), udp, SLOT(changeBufferSize(quint16)));
// Connect for errors/alerts // Connect for errors/alerts
connect(udp, SIGNAL(haveNetworkError(QString, QString)), this, SLOT(handleSerialPortError(QString, QString))); connect(udp, SIGNAL(haveNetworkError(QString, QString)), this, SLOT(handleSerialPortError(QString, QString)));
@ -1414,6 +1415,11 @@ void rigCommander::getRigID()
prepDataAndSend(payload); prepDataAndSend(payload);
} }
void rigCommander::changeBufferSize(const quint16 value)
{
emit haveChangeBufferSize(value);
}
void rigCommander::sayAll() void rigCommander::sayAll()
{ {
QByteArray payload; QByteArray payload;

Wyświetl plik

@ -27,7 +27,7 @@ public:
public slots: public slots:
void process(); void process();
void commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate); void commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate);
void commSetup(unsigned char rigCivAddr, QString ip, int cport, int sport, int aport, QString username, QString password); void commSetup(unsigned char rigCivAddr, QString ip, quint16 cport, quint16 sport, quint16 aport, QString username, QString password, quint16 buffer, quint16 sample, quint8 channels);
void closeComm(); void closeComm();
void enableSpectOutput(); void enableSpectOutput();
@ -65,6 +65,7 @@ public slots:
void handleNewData(const QByteArray &data); void handleNewData(const QByteArray &data);
void handleSerialPortError(const QString port, const QString errorText); void handleSerialPortError(const QString port, const QString errorText);
void handleStatusUpdate(const QString text); void handleStatusUpdate(const QString text);
void changeBufferSize(const quint16 value);
void sayFrequency(); void sayFrequency();
void sayMode(); void sayMode();
void sayAll(); void sayAll();
@ -94,6 +95,7 @@ signals:
void finished(); void finished();
void havePTTStatus(bool pttOn); void havePTTStatus(bool pttOn);
void haveATUStatus(unsigned char status); void haveATUStatus(unsigned char status);
void haveChangeBufferSize(quint16 value);
private: private:

Wyświetl plik

@ -16,7 +16,7 @@ void rxAudioHandler::process()
qDebug() << "rxAudio Handler created."; qDebug() << "rxAudio Handler created.";
} }
void rxAudioHandler::setup(const QAudioFormat format, const int bufferSize) void rxAudioHandler::setup(const QAudioFormat format, const quint16 bufferSize)
{ {
this->format = format; this->format = format;
this->bufferSize = bufferSize; this->bufferSize = bufferSize;
@ -32,12 +32,13 @@ void rxAudioHandler::incomingAudio(const QByteArray data)
device->write(data,data.length()); device->write(data,data.length());
} }
void rxAudioHandler::changeBufferSize(const int newSize) void rxAudioHandler::changeBufferSize(const quint16 newSize)
{ {
// TODO: make a way to change the buffer size. QMutexLocker locker(&mutex);
// possibly deleting the buffer and re-creating qDebug() << "Changing buffer size to: " << newSize << " from " << audio->bufferSize();
audio->stop();
audio->setBufferSize(newSize); audio->setBufferSize(newSize);
device = audio->start();
} }
void rxAudioHandler::getBufferSize() void rxAudioHandler::getBufferSize()

Wyświetl plik

@ -20,16 +20,15 @@ public:
public slots: public slots:
void process(); void process();
void setup(const QAudioFormat format, const int bufferSize); void setup(const QAudioFormat format, const quint16 bufferSize);
void incomingAudio(const QByteArray data); void incomingAudio(const QByteArray data);
void changeBufferSize(const int newSize); void changeBufferSize(const quint16 newSize);
void getBufferSize(); void getBufferSize();
signals: signals:
void audioMessage(QString message); void audioMessage(QString message);
void sendBufferSize(int newSize); void sendBufferSize(quint16 newSize);
void sendAudioBufferSize(int newSize);
private: private:

Wyświetl plik

@ -4,9 +4,9 @@
#include "udphandler.h" #include "udphandler.h"
udpHandler::udpHandler(QString ip, int cport, int sport, int aport, QString username, QString password) udpHandler::udpHandler(QString ip, quint16 cport, quint16 sport, quint16 aport, QString username, QString password, quint16 buffer, quint16 sample,quint8 channels)
{ {
qDebug() << "Starting udpHandler"; qDebug() << "Starting udpHandler user:" << username << " buffer:" << buffer << " sample rate: " << sample << " channels: " << channels;
// Lookup IP address // Lookup IP address
@ -15,6 +15,9 @@ udpHandler::udpHandler(QString ip, int cport, int sport, int aport, QString user
this->sport = sport; this->sport = sport;
this->username = username; this->username = username;
this->password = password; this->password = password;
this->bufferSize = buffer;
this->sampleRate = sample;
this->channelCount = channels;
// Try to set the IP address, if it is a hostname then perform a DNS lookup. // Try to set the IP address, if it is a hostname then perform a DNS lookup.
if (!radioIP.setAddress(ip)) if (!radioIP.setAddress(ip))
@ -77,6 +80,11 @@ udpHandler::~udpHandler()
} }
} }
void udpHandler::changeBufferSize(quint16 value)
{
emit haveChangeBufferSize(value);
}
void udpHandler::ReAuth() void udpHandler::ReAuth()
{ {
qDebug() << "Performing ReAuth"; qDebug() << "Performing ReAuth";
@ -213,9 +221,10 @@ void udpHandler::DataReceived()
{ {
serial = new udpSerial(localIP, radioIP, sport); serial = new udpSerial(localIP, radioIP, sport);
audio = new udpAudio(localIP, radioIP, aport); audio = new udpAudio(localIP, radioIP, aport,bufferSize,sampleRate,channelCount);
QObject::connect(serial, SIGNAL(Receive(QByteArray)), this, SLOT(receiveFromSerialStream(QByteArray))); QObject::connect(serial, SIGNAL(Receive(QByteArray)), this, SLOT(receiveFromSerialStream(QByteArray)));
QObject::connect(this, SIGNAL(haveChangeBufferSize(quint16)), audio, SLOT(changeBufferSize(quint16)));
serialAndAudioOpened = true; serialAndAudioOpened = true;
@ -277,7 +286,6 @@ qint64 udpHandler::SendRequestSerialAndAudio()
unsigned char* usernameEncoded = Passcode(username); unsigned char* usernameEncoded = Passcode(username);
int txSeqBufLengthMs = 100; int txSeqBufLengthMs = 100;
int audioSampleRate = 48000;
const unsigned char p[] = { const unsigned char p[] = {
0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@ -300,8 +308,8 @@ qint64 udpHandler::SendRequestSerialAndAudio()
usernameEncoded[4], usernameEncoded[5], usernameEncoded[6], usernameEncoded[7], usernameEncoded[4], usernameEncoded[5], usernameEncoded[6], usernameEncoded[7],
usernameEncoded[8], usernameEncoded[9], usernameEncoded[10], usernameEncoded[11], usernameEncoded[8], usernameEncoded[9], usernameEncoded[10], usernameEncoded[11],
usernameEncoded[12], usernameEncoded[13], usernameEncoded[14], usernameEncoded[15], usernameEncoded[12], usernameEncoded[13], usernameEncoded[14], usernameEncoded[15],
0x01, 0x01, 0x04, 0x04, 0x00, 0x00, static_cast<unsigned char>(audioSampleRate >> 8 & 0xff), static_cast<unsigned char>(audioSampleRate & 0xff), 0x01, 0x01, 0x04, 0x04, 0x00, 0x00, static_cast<unsigned char>(sampleRate >> 8 & 0xff), static_cast<unsigned char>(sampleRate & 0xff),
0x00, 0x00, static_cast<unsigned char>(audioSampleRate >> 8 & 0xff), static_cast<unsigned char>(audioSampleRate & 0xff), 0x00, 0x00, static_cast<unsigned char>(sampleRate >> 8 & 0xff), static_cast<unsigned char>(sampleRate & 0xff),
0x00, 0x00, static_cast<unsigned char>(sport >> 8 & 0xff), static_cast<unsigned char>(sport & 0xff), 0x00, 0x00, static_cast<unsigned char>(sport >> 8 & 0xff), static_cast<unsigned char>(sport & 0xff),
0x00, 0x00, static_cast<unsigned char>(aport >> 8 & 0xff), static_cast<unsigned char>(aport & 0xff), 0x00, 0x00, 0x00, 0x00, static_cast<unsigned char>(aport >> 8 & 0xff), static_cast<unsigned char>(aport & 0xff), 0x00, 0x00,
static_cast<unsigned char>(txSeqBufLengthMs >> 8 & 0xff), static_cast<unsigned char>(txSeqBufLengthMs & 0xff), 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 static_cast<unsigned char>(txSeqBufLengthMs >> 8 & 0xff), static_cast<unsigned char>(txSeqBufLengthMs & 0xff), 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@ -377,7 +385,7 @@ qint64 udpHandler::SendPacketAuth(uint8_t magic)
// (pseudo) serial class // (pseudo) serial class
udpSerial::udpSerial(QHostAddress local, QHostAddress ip, int sport) udpSerial::udpSerial(QHostAddress local, QHostAddress ip, quint16 sport)
{ {
qDebug() << "Starting udpSerial"; qDebug() << "Starting udpSerial";
localIP = local; localIP = local;
@ -519,20 +527,23 @@ void udpSerial::DataReceived()
// Audio stream // Audio stream
udpAudio::udpAudio(QHostAddress local, QHostAddress ip, int aport) udpAudio::udpAudio(QHostAddress local, QHostAddress ip, quint16 aport, quint16 buffer, quint16 sample, quint8 channels)
{ {
qDebug() << "Starting udpAudio"; qDebug() << "Starting udpAudio";
localIP = local; localIP = local;
port = aport; port = aport;
radioIP = ip; radioIP = ip;
bufferSize = buffer;
sampleRate = sample;
channelCount = channels;
init(); // Perform connection init(); // Perform connection
QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpAudio::DataReceived); QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpAudio::DataReceived);
// Init audio // Init audio
format.setSampleRate(48000); format.setSampleRate(sampleRate);
format.setChannelCount(1); format.setChannelCount(channelCount);
format.setSampleSize(16); format.setSampleSize(16);
format.setCodec("audio/pcm"); format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian); format.setByteOrder(QAudioFormat::LittleEndian);
@ -581,12 +592,13 @@ udpAudio::udpAudio(QHostAddress local, QHostAddress ip, int aport)
rxaudio->moveToThread(rxAudioThread); rxaudio->moveToThread(rxAudioThread);
connect(this,SIGNAL(setupAudio(QAudioFormat,int)), rxaudio, SLOT(setup(QAudioFormat,int))); connect(this,SIGNAL(setupAudio(QAudioFormat,quint16)), rxaudio, SLOT(setup(QAudioFormat,quint16)));
connect(this, SIGNAL(haveAudioData(QByteArray)), rxaudio, SLOT(incomingAudio(QByteArray))); connect(this, SIGNAL(haveAudioData(QByteArray)), rxaudio, SLOT(incomingAudio(QByteArray)));
connect(this, SIGNAL(haveChangeBufferSize(quint16)), rxaudio, SLOT(changeBufferSize(quint16)));
connect(rxAudioThread, SIGNAL(finished()), rxaudio, SLOT(deleteLater())); connect(rxAudioThread, SIGNAL(finished()), rxaudio, SLOT(deleteLater()));
rxAudioThread->start(); rxAudioThread->start();
emit setupAudio(format, 12000); emit setupAudio(format, bufferSize);
SendPacketConnect(); // First connect packet, audio should start very soon after. SendPacketConnect(); // First connect packet, audio should start very soon after.
} }
@ -598,6 +610,11 @@ udpAudio::~udpAudio()
} }
} }
void udpAudio::changeBufferSize(quint16 value)
{
emit haveChangeBufferSize(value);
}
void udpAudio::DataReceived() void udpAudio::DataReceived()
{ {
while (udp->hasPendingDatagrams()) { while (udp->hasPendingDatagrams()) {

Wyświetl plik

@ -66,8 +66,8 @@ public:
QHostAddress radioIP; QHostAddress radioIP;
QHostAddress localIP; QHostAddress localIP;
bool isAuthenticated = false; bool isAuthenticated = false;
int localPort=0; quint16 localPort=0;
int port=0; quint16 port=0;
QTimer *pkt7Timer=Q_NULLPTR; // Send pkt7 packets every 3 seconds QTimer *pkt7Timer=Q_NULLPTR; // Send pkt7 packets every 3 seconds
QTimer *pkt0Timer=Q_NULLPTR; // Send pkt0 packets every 1000ms. QTimer *pkt0Timer=Q_NULLPTR; // Send pkt0 packets every 1000ms.
QTimer *periodic=Q_NULLPTR; // Send pkt0 packets every 1000ms. QTimer *periodic=Q_NULLPTR; // Send pkt0 packets every 1000ms.
@ -94,7 +94,7 @@ class udpSerial : public udpBase
Q_OBJECT Q_OBJECT
public: public:
udpSerial(QHostAddress local, QHostAddress ip, int sport); udpSerial(QHostAddress local, QHostAddress ip, quint16 sport);
QMutex serialmutex; QMutex serialmutex;
signals: signals:
@ -119,19 +119,26 @@ class udpAudio : public udpBase
Q_OBJECT Q_OBJECT
public: public:
udpAudio(QHostAddress local, QHostAddress ip, int aport); udpAudio(QHostAddress local, QHostAddress ip, quint16 aport, quint16 buffer, quint16 sample, quint8 channels);
~udpAudio(); ~udpAudio();
QAudioOutput* audio; QAudioOutput* audio;
signals: signals:
void haveAudioData(QByteArray data); void haveAudioData(QByteArray data);
void setupAudio(const QAudioFormat format, const int bufferSize); void setupAudio(const QAudioFormat format, const quint16 bufferSize);
void haveChangeBufferSize(quint16 value);
public slots:
void changeBufferSize(quint16 value);
private: private:
void DataReceived(); void DataReceived();
QBuffer* buffer;
QAudioFormat format; QAudioFormat format;
quint16 bufferSize;
quint16 sampleRate;
quint8 channelCount;
bool sentPacketConnect2 = false; bool sentPacketConnect2 = false;
uint16_t sendAudioSeq = 0; uint16_t sendAudioSeq = 0;
@ -150,7 +157,7 @@ class udpHandler: public udpBase
Q_OBJECT Q_OBJECT
public: public:
udpHandler(QString ip, int cport, int sport, int aport, QString username, QString password); udpHandler(QString ip, quint16 cport, quint16 sport, quint16 aport, QString username, QString password, quint16 buffer, quint16 sample,quint8 channels);
~udpHandler(); ~udpHandler();
udpSerial *serial=Q_NULLPTR; udpSerial *serial=Q_NULLPTR;
@ -163,6 +170,7 @@ public:
public slots: public slots:
void receiveDataFromUserToRig(QByteArray); // This slot will send data on to void receiveDataFromUserToRig(QByteArray); // This slot will send data on to
void receiveFromSerialStream(QByteArray); void receiveFromSerialStream(QByteArray);
void changeBufferSize(quint16 value);
signals: signals:
@ -170,6 +178,7 @@ signals:
void haveDataFromPort(QByteArray data); // emit this when we have data, connect to rigcommander void haveDataFromPort(QByteArray data); // emit this when we have data, connect to rigcommander
void haveNetworkError(QString, QString); void haveNetworkError(QString, QString);
void haveNetworkStatus(QString); void haveNetworkStatus(QString);
void haveChangeBufferSize(quint16 value);
private: private:
@ -187,9 +196,12 @@ private:
bool radioInUse = false; bool radioInUse = false;
int aport; quint16 aport;
int sport; quint16 sport;
int reauthInterval = 60000; quint16 sampleRate;
quint16 bufferSize;
quint8 channelCount;
quint16 reauthInterval = 60000;
QTimer reauthTimer; QTimer reauthTimer;
QByteArray devName; QByteArray devName;
QByteArray compName; QByteArray compName;

Wyświetl plik

@ -147,10 +147,15 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
connect(keyM, SIGNAL(activated()), this, SLOT(shortcutM())); connect(keyM, SIGNAL(activated()), this, SLOT(shortcutM()));
// Enumerate audio devices, need to do before settings are loaded. // Enumerate audio devices, need to do before settings are loaded.
const auto deviceInfos = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); const auto audioOutputs = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
for (const QAudioDeviceInfo& deviceInfo : deviceInfos) { for (const QAudioDeviceInfo& deviceInfo : audioOutputs) {
ui->audioOutputCombo->addItem(deviceInfo.deviceName()); ui->audioOutputCombo->addItem(deviceInfo.deviceName());
} }
const auto audioInputs = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
for (const QAudioDeviceInfo& deviceInfo : audioInputs) {
ui->audioInputCombo->addItem(deviceInfo.deviceName());
}
setDefaultColors(); // set of UI colors with defaults populated setDefaultColors(); // set of UI colors with defaults populated
setDefPrefs(); // other default options setDefPrefs(); // other default options
loadSettings(); // Look for saved preferences loadSettings(); // Look for saved preferences
@ -412,19 +417,20 @@ void wfmain::openRig()
connect(rig, SIGNAL(haveSerialPortError(QString, QString)), this, SLOT(receiveSerialPortError(QString, QString))); connect(rig, SIGNAL(haveSerialPortError(QString, QString)), this, SLOT(receiveSerialPortError(QString, QString)));
connect(rig, SIGNAL(haveStatusUpdate(QString)), this, SLOT(receiveStatusUpdate(QString))); connect(rig, SIGNAL(haveStatusUpdate(QString)), this, SLOT(receiveStatusUpdate(QString)));
connect(this, SIGNAL(sendCommSetup(unsigned char, QString, int, int, int, QString, QString)), rig, SLOT(commSetup(unsigned char, QString, int, int, int, QString, QString))); connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint16, quint16, quint16, QString, QString,quint16,quint16,quint8)), rig, SLOT(commSetup(unsigned char, QString, quint16, quint16, quint16, QString, QString,quint16,quint16,quint8)));
connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32)), rig, SLOT(commSetup(unsigned char, QString, quint32))); connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32)), rig, SLOT(commSetup(unsigned char, QString, quint32)));
connect(this, SIGNAL(sendCloseComm()), rig, SLOT(closeComm())); connect(this, SIGNAL(sendCloseComm()), rig, SLOT(closeComm()));
connect(this, SIGNAL(sendChangeBufferSize(quint16)), rig, SLOT(changeBufferSize(quint16)));
connect(this, SIGNAL(getRigCIV()), rig, SLOT(findRigs())); connect(this, SIGNAL(getRigCIV()), rig, SLOT(findRigs()));
connect(rig, SIGNAL(discoveredRigID(rigCapabilities)), this, SLOT(receiveFoundRigID(rigCapabilities))); connect(rig, SIGNAL(discoveredRigID(rigCapabilities)), this, SLOT(receiveFoundRigID(rigCapabilities)));
connect(rig, SIGNAL(commReady()), this, SLOT(receiveCommReady())); connect(rig, SIGNAL(commReady()), this, SLOT(receiveCommReady()));
} }
if (prefs.enableLAN) if (prefs.enableLAN)
{ {
emit sendCommSetup(prefs.radioCIVAddr, prefs.ipAddress, prefs.controlLANPort, prefs.serialLANPort, prefs.audioLANPort, prefs.username, prefs.password); emit sendCommSetup(prefs.radioCIVAddr, prefs.ipAddress, prefs.controlLANPort,
prefs.serialLANPort, prefs.audioLANPort, prefs.username, prefs.password,prefs.audioBufferSize,prefs.audioSampleRate,prefs.audioChannels);
} else { } else {
if( (prefs.serialPortRadio == QString("auto")) && (serialPortCL.isEmpty())) if( (prefs.serialPortRadio == QString("auto")) && (serialPortCL.isEmpty()))
@ -573,7 +579,11 @@ void wfmain::setDefPrefs()
defPrefs.audioLANPort = 50003; defPrefs.audioLANPort = 50003;
defPrefs.username = QString(""); defPrefs.username = QString("");
defPrefs.password = QString(""); defPrefs.password = QString("");
defPrefs.audioOutput = QString(""); defPrefs.audioOutput = QAudioDeviceInfo::defaultOutputDevice().deviceName();
defPrefs.audioInput = QAudioDeviceInfo::defaultInputDevice().deviceName();
defPrefs.audioBufferSize = 12000;
defPrefs.audioChannels = 1;
defPrefs.audioSampleRate = 48000;
} }
@ -612,15 +622,19 @@ void wfmain::loadSettings()
settings.beginGroup("LAN"); settings.beginGroup("LAN");
prefs.enableLAN = settings.value("EnableLAN", defPrefs.enableLAN).toBool(); prefs.enableLAN = settings.value("EnableLAN", defPrefs.enableLAN).toBool();
ui->lanEnableChk->setChecked(prefs.enableLAN); ui->lanEnableChk->setChecked(prefs.enableLAN);
prefs.ipAddress = settings.value("IPAddress", defPrefs.ipAddress).toString(); prefs.ipAddress = settings.value("IPAddress", defPrefs.ipAddress).toString();
ui->ipAddressTxt->setEnabled(ui->lanEnableChk->isChecked()); ui->ipAddressTxt->setEnabled(ui->lanEnableChk->isChecked());
ui->ipAddressTxt->setText(prefs.ipAddress); ui->ipAddressTxt->setText(prefs.ipAddress);
prefs.controlLANPort = settings.value("ControlLANPort", defPrefs.controlLANPort).toInt(); prefs.controlLANPort = settings.value("ControlLANPort", defPrefs.controlLANPort).toInt();
ui->controlPortTxt->setEnabled(ui->lanEnableChk->isChecked()); ui->controlPortTxt->setEnabled(ui->lanEnableChk->isChecked());
ui->controlPortTxt->setText(QString("%1").arg(prefs.controlLANPort)); ui->controlPortTxt->setText(QString("%1").arg(prefs.controlLANPort));
prefs.serialLANPort = settings.value("SerialLANPort", defPrefs.serialLANPort).toInt(); prefs.serialLANPort = settings.value("SerialLANPort", defPrefs.serialLANPort).toInt();
ui->serialPortTxt->setEnabled(ui->lanEnableChk->isChecked()); ui->serialPortTxt->setEnabled(ui->lanEnableChk->isChecked());
ui->serialPortTxt->setText(QString("%1").arg(prefs.serialLANPort)); ui->serialPortTxt->setText(QString("%1").arg(prefs.serialLANPort));
prefs.audioLANPort = settings.value("AudioLANPort", defPrefs.audioLANPort).toInt(); prefs.audioLANPort = settings.value("AudioLANPort", defPrefs.audioLANPort).toInt();
ui->audioPortTxt->setEnabled(ui->lanEnableChk->isChecked()); ui->audioPortTxt->setEnabled(ui->lanEnableChk->isChecked());
ui->audioPortTxt->setText(QString("%1").arg(prefs.audioLANPort)); ui->audioPortTxt->setText(QString("%1").arg(prefs.audioLANPort));
@ -628,15 +642,39 @@ void wfmain::loadSettings()
prefs.username = settings.value("Username", defPrefs.username).toString(); prefs.username = settings.value("Username", defPrefs.username).toString();
ui->usernameTxt->setEnabled(ui->lanEnableChk->isChecked()); ui->usernameTxt->setEnabled(ui->lanEnableChk->isChecked());
ui->usernameTxt->setText(QString("%1").arg(prefs.username)); ui->usernameTxt->setText(QString("%1").arg(prefs.username));
prefs.password = settings.value("Password", defPrefs.password).toString(); prefs.password = settings.value("Password", defPrefs.password).toString();
ui->passwordTxt->setEnabled(ui->lanEnableChk->isChecked()); ui->passwordTxt->setEnabled(ui->lanEnableChk->isChecked());
ui->passwordTxt->setText(QString("%1").arg(prefs.password)); ui->passwordTxt->setText(QString("%1").arg(prefs.password));
prefs.audioBufferSize = settings.value("AudioBufferSize", defPrefs.audioBufferSize).toInt();
ui->audioBufferSizeSlider->setEnabled(ui->lanEnableChk->isChecked());
ui->audioBufferSizeSlider->setValue(prefs.audioBufferSize);
ui->audioBufferSizeSlider->setTracking(false); // Stop it sending value on every change.
prefs.audioSampleRate = settings.value("AudioSampleRate", defPrefs.audioSampleRate).toInt();
ui->audioSampleRateCombo->setEnabled(ui->lanEnableChk->isChecked());
int audioSampleRateIndex = ui->audioSampleRateCombo->findText(QString::number(prefs.audioSampleRate));
if (audioSampleRateIndex != -1)
ui->audioOutputCombo->setCurrentIndex(audioSampleRateIndex);
prefs.audioChannels = settings.value("AudioNumChannels", defPrefs.audioChannels).toInt();
ui->audioChannelsCombo->setEnabled(ui->lanEnableChk->isChecked());
int audioChannelsIndex = ui->audioChannelsCombo->findText(QString::number(prefs.audioChannels));
if (audioChannelsIndex != -1)
ui->audioChannelsCombo->setCurrentIndex(audioChannelsIndex);
prefs.audioOutput = settings.value("AudioOutput", defPrefs.audioOutput).toString(); prefs.audioOutput = settings.value("AudioOutput", defPrefs.audioOutput).toString();
ui->audioOutputCombo->setEnabled(ui->lanEnableChk->isChecked()); ui->audioOutputCombo->setEnabled(ui->lanEnableChk->isChecked());
int audioIndex = ui->audioOutputCombo->findText("prefs.audioOutput"); int audioOutputIndex = ui->audioOutputCombo->findText(prefs.audioOutput);
if (audioIndex -1) if (audioOutputIndex != -1)
ui->audioOutputCombo->setCurrentIndex(audioIndex); ui->audioOutputCombo->setCurrentIndex(audioOutputIndex);
prefs.audioInput = settings.value("AudioInput", defPrefs.audioInput).toString();
ui->audioInputCombo->setEnabled(ui->lanEnableChk->isChecked());
int audioInputIndex = ui->audioInputCombo->findText(prefs.audioInput);
if (audioInputIndex != - 1)
ui->audioOutputCombo->setCurrentIndex(audioInputIndex);
settings.endGroup(); settings.endGroup();
// Memory channels // Memory channels
@ -713,7 +751,11 @@ void wfmain::saveSettings()
settings.setValue("AudioLANPort", prefs.audioLANPort); settings.setValue("AudioLANPort", prefs.audioLANPort);
settings.setValue("Username", prefs.username); settings.setValue("Username", prefs.username);
settings.setValue("Password", prefs.password); settings.setValue("Password", prefs.password);
settings.setValue("AudioBufferSize", prefs.audioBufferSize);
settings.setValue("AudioSampleRate", prefs.audioSampleRate);
settings.setValue("AudioNumChannels", prefs.audioChannels);
settings.setValue("AudioOutput", prefs.audioOutput); settings.setValue("AudioOutput", prefs.audioOutput);
settings.setValue("AudioInput", prefs.audioInput);
settings.endGroup(); settings.endGroup();
// Memory channels // Memory channels
@ -2238,6 +2280,28 @@ void wfmain::on_audioOutputCombo_currentIndexChanged(QString text)
prefs.audioOutput = text; prefs.audioOutput = text;
} }
void wfmain::on_audioInputCombo_currentIndexChanged(QString text)
{
prefs.audioInput = text;
}
void wfmain::on_audioSampleRateCombo_currentIndexChanged(QString text)
{
prefs.audioSampleRate = text.toInt();
}
void wfmain::on_audioChannelsCombo_currentIndexChanged(QString text)
{
prefs.audioChannels = text.toInt();
}
void wfmain::on_audioBufferSizeSlider_valueChanged(int value)
{
prefs.audioBufferSize = value;
ui->bufferValue->setText(QString::number(value));
emit sendChangeBufferSize(value);
}
void wfmain::on_toFixedBtn_clicked() void wfmain::on_toFixedBtn_clicked()
{ {
emit setScopeFixedEdge(oldLowerFreq, oldUpperFreq, ui->scopeEdgeCombo->currentIndex()+1); emit setScopeFixedEdge(oldLowerFreq, oldUpperFreq, ui->scopeEdgeCombo->currentIndex()+1);

Wyświetl plik

@ -69,8 +69,9 @@ signals:
void sayMode(); void sayMode();
void sayAll(); void sayAll();
void sendCommSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate); void sendCommSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate);
void sendCommSetup(unsigned char rigCivAddr, QString ip, int cport, int sport, int aport, QString username, QString password); void sendCommSetup(unsigned char rigCivAddr, QString ip, quint16 cport, quint16 sport, quint16 aport, QString username, QString password, quint16 buffer, quint16 sample, quint8 channels);
void sendCloseComm(); void sendCloseComm();
void sendChangeBufferSize(quint16 value);
private slots: private slots:
void shortcutF1(); void shortcutF1();
@ -259,10 +260,18 @@ private slots:
void on_audioOutputCombo_currentIndexChanged(QString text); void on_audioOutputCombo_currentIndexChanged(QString text);
void on_audioInputCombo_currentIndexChanged(QString text);
void on_toFixedBtn_clicked(); void on_toFixedBtn_clicked();
void on_connectBtn_clicked(); void on_connectBtn_clicked();
void on_audioBufferSizeSlider_valueChanged(int value);
void on_audioChannelsCombo_currentIndexChanged(QString text);
void on_audioSampleRateCombo_currentIndexChanged(QString text);
private: private:
Ui::wfmain *ui; Ui::wfmain *ui;
QSettings settings; QSettings settings;
@ -393,12 +402,16 @@ private:
bool niceTS; bool niceTS;
bool enableLAN; bool enableLAN;
QString ipAddress; QString ipAddress;
quint32 controlLANPort; quint16 controlLANPort;
quint32 serialLANPort; quint16 serialLANPort;
quint32 audioLANPort; quint16 audioLANPort;
QString username; QString username;
QString password; QString password;
QString audioOutput; QString audioOutput;
QString audioInput;
quint16 audioBufferSize;
quint16 audioSampleRate;
quint8 audioChannels;
} prefs; } prefs;
preferences defPrefs; preferences defPrefs;

Wyświetl plik

@ -1345,6 +1345,86 @@
</property> </property>
</widget> </widget>
</item> </item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
<widget class="QLabel" name="label_16">
<property name="text">
<string>Audio Buffer Size</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="audioBufferSizeSlider">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="maximum">
<number>65536</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="bufferValue">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="text">
<string>Channels</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="audioChannelsCombo">
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<widget class="QLabel" name="label_17">
<property name="text">
<string>Sample Rate</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="audioSampleRateCombo">
<item>
<property name="text">
<string>48000</string>
</property>
</item>
<item>
<property name="text">
<string>44100</string>
</property>
</item>
</widget>
</item>
<item> <item>
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="text"> <property name="text">
@ -1355,6 +1435,16 @@
<item> <item>
<widget class="QComboBox" name="audioOutputCombo"/> <widget class="QComboBox" name="audioOutputCombo"/>
</item> </item>
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Audio Input</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="audioInputCombo"/>
</item>
</layout> </layout>
</item> </item>
<item> <item>