Merge latest settings changes

half-duplex
Phil Taylor 2021-12-31 00:02:47 +00:00
commit 7d95f2d863
20 zmienionych plików z 3402 dodań i 1881 usunięć

119
CHANGELOG
Wyświetl plik

@ -1,5 +1,124 @@
# CHANGELOG
- 20211201
Another "minor" update for RX only rigs
Disable certain TX commands for RX only rigs
- 20211222
Add mutex within rigState to protect access
- 20211119
Add more version info
Add --version command line argument and WFVIEW_VERSION #define
- 20211118
A little less green in our gray.
Added size rules for audio source combo boxes.
Fix silly bug in retransmit code
Remove some extra logging from audio
- 20211115
Add mutex for incoming audio on udp and server
Force PA to use 48K Sample Rate if default is 44.1K
Try using slot for audio again
- 20211110
Server only tries mutex lock for 10ms before giving up.
Check number of samples in opus packet before attempting decode
- 20211109
Small changes to audio handler
- 20211107
Add SSE2 enhancements to resampler
Update audiohandler.h
Enable SSE or NEON enhancements for resampler
Fix resample ratio for input and output (hopefully!)
Create resampleRatio
Close PA stream after stopping it!
Fix Linux rtaudio build
Pulled out some debug code that isn't needed.
Fixed manual rig ID issue with uninitialized variable.
- 20211106
Added override allowing the user-specified CI-V address to also be used
as the Rig ID (model). This is useful for older radios that do not reply
to Rig ID queries. For radios using the default CI-V address, it should
"just work".
Added PTT "snooping" to the commHandler, such that radios needing RTS
set for PTT will work. Includes replying to PTT queries with the RTS
status. There is currently no UI to manually select radios that need
RTS.
deleted a lingering swapfile from one of my vim sessions
- 20211105
Added RTS PTT support commHandler and rigCommander. RTS is only sent
from rigCommander at this time, the pty is not parsed.
Added geometry constraints to the transceiver adjustments window, and
disable controls which do not function except for debug builds.
Changed IF/TPBF commands to be "unique priority" inserts. Added "more"
button for extended transceiver controls.
Added an IF Shift-like control for radios with Twin PBF.
Added support for IF Shift and Twin Pass-Band Filters. Currently
accessable only via the debug button.
- 20211104
Added IC-736 FM mode
Added code to force IC-736 to rigID
- 20211101
Use QT Audio by default
remove unneeded audio signal handler
Add portaudio support
Make switching between audio apis easier (and tidy .pro file)
Use buffered audio for Linux (was just Mac only)
Adjust buffer size depending on latency setting
- 20211031
Stuff audio buffer directly rather than signal/slot
- 20211022
Don't block until audio buffer has space

Wyświetl plik

@ -10,10 +10,13 @@ The following highlights are in this 1.x-release:
rigctl basic split support
rigctl prevents switching off civ transceive
added 25 kHz step
as a temporary measure sending multiple TX/FREQ change commands to the rig
when we use rigctld.
people should use "fake it" in wsjtx as the split code is not reliable.
tidied up udp server function for better reliability
added some IC736 stuff
added portaudio (you need t change wfview.pro to select
and that lowers the latency to maybe less than 50 ms
added PBT and IF-shift
several bugs fixed
RTS as PTT for several radios like the 706/718/736…

Wyświetl plik

@ -19,10 +19,16 @@ aboutbox::aboutbox(QWidget *parent) :
QString nacode = QString("<br/><br/>Networking, audio, rigctl server, and much more written by Phil Taylor, M0VSE");
QString doctest = QString("<br/><br/>Testing, documentation, bug fixes, and development mentorship from<br/>Roeland Jansen, PA3MET, and Jim Nijkamp, PA8E.");
#if defined(Q_OS_LINUX)
QString ssCredit = QString("<br/><br/>Stylesheet <a href=\"https://github.com/ColinDuquesnoy/QDarkStyleSheet/tree/master/qdarkstyle\" style=\"color: cyan;\">qdarkstyle</a> used under MIT license, stored in /usr/share/wfview/stylesheets/.");
#else
QString ssCredit = QString("<br/><br/>Stylesheet <a href=\"https://github.com/ColinDuquesnoy/QDarkStyleSheet/tree/master/qdarkstyle\" style=\"color: cyan;\">qdarkstyle</a> used under MIT license.");
#endif
QString website = QString("<br/><br/>Please visit <a href=\"https://wfview.org/\" style=\"color: cyan;\">https://wfview.org/</a> for the latest information.");
QString donate = QString("<br/><br/>Join us on <a href=\"https://www.patreon.com/wfview\">Patreon</a> for a behind-the-scenes look at wfview development, nightly builds, and to support the software you love.");
QString docs = QString("<br/><br/>Be sure to check the <a href=\"https://wfview.org/wfview-user-manual/\" style=\"color: cyan;\">User Manual</a> and <a href=\"https://forum.wfview.org/\" style=\"color: cyan;\">the Forum</a> if you have any questions.");
QString support = QString("<br/><br/>For support, please visit <a href=\"https://forum.wfview.org/\">the official wfview support forum</a>.");
QString gitcodelink = QString("<a href=\"https://gitlab.com/eliggett/wfview/-/tree/%1\" style=\"color: cyan;\">").arg(GITSHORT);
@ -78,7 +84,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.");
// String it all together:
QString aboutText = head + copyright + "\n" + nacode + "\n" + doctest + wfviewcommunityack;
aboutText.append(website + "\n"+ docs + support + contact +"\n");
aboutText.append(website + "\n" + donate + "\n"+ docs + support + contact +"\n");
aboutText.append("\n" + ssCredit + "\n" + rsCredit + "\n");
#if defined(RTAUDIO)

Plik diff jest za duży Load Diff

Wyświetl plik

@ -2,10 +2,10 @@
#define RIGCOMMANDER_H
#include <QObject>
#include <QMutex>
#include <QMutexLocker>
#include <QDebug>
#include "commhandler.h"
#include "pttyhandler.h"
#include "udphandler.h"
@ -13,6 +13,8 @@
#include "repeaterattributes.h"
#include "freqmemory.h"
#include "rigstate.h"
// This file figures out what to send to the comm and also
// parses returns into useful things.
@ -61,78 +63,6 @@ struct timekind {
bool isMinus;
};
struct rigStateStruct {
QMutex *mutex;
freqt vfoAFreq;
freqt vfoBFreq;
unsigned char currentVfo;
bool ptt;
unsigned char mode;
unsigned char filter;
duplexMode duplex;
bool datamode;
unsigned char antenna;
bool rxAntenna;
// Tones
quint16 ctcss;
quint16 tsql;
quint16 dtcs;
quint16 csql;
// Levels
unsigned char preamp;
unsigned char attenuator;
unsigned char modInput;
unsigned char afGain;
unsigned char rfGain;
unsigned char squelch;
unsigned char txPower;
unsigned char micGain;
unsigned char compLevel;
unsigned char monitorLevel;
unsigned char voxGain;
unsigned char antiVoxGain;
// Meters
unsigned char sMeter;
unsigned char powerMeter;
unsigned char swrMeter;
unsigned char alcMeter;
unsigned char compMeter;
unsigned char voltageMeter;
unsigned char currentMeter;
// Functions
bool fagcFunc=false;
bool nbFunc=false;
bool compFunc=false;
bool voxFunc = false;
bool toneFunc = false;
bool tsqlFunc = false;
bool sbkinFunc = false;
bool fbkinFunc = false;
bool anfFunc = false;
bool nrFunc = false;
bool aipFunc = false;
bool apfFunc = false;
bool monFunc = false;
bool mnFunc = false;
bool rfFunc = false;
bool aroFunc = false;
bool muteFunc = false;
bool vscFunc = false;
bool revFunc = false;
bool sqlFunc = false;
bool abmFunc = false;
bool bcFunc = false;
bool mbcFunc = false;
bool ritFunc = false;
bool afcFunc = false;
bool satmodeFunc = false;
bool scopeFunc = false;
bool resumeFunc = false;
bool tburstFunc = false;
bool tunerFunc = false;
bool lockFunc = false;
};
class rigCommander : public QObject
{
Q_OBJECT
@ -148,6 +78,8 @@ public slots:
void commSetup(unsigned char rigCivAddr, QString rigSerialPort, quint32 rigBaudRate,QString vsp);
void commSetup(unsigned char rigCivAddr, udpPreferences prefs, audioSetup rxSetup, audioSetup txSetup, QString vsp);
void closeComm();
void stateUpdated();
void setRTSforPTT(bool enabled);
// Power:
void powerOn();
@ -199,6 +131,26 @@ public slots:
void setAttenuator(unsigned char att);
void setPreamp(unsigned char pre);
void setAntenna(unsigned char ant, bool rx);
void setNb(bool enabled);
void getNb();
void setNr(bool enabled);
void getNr();
void setAutoNotch(bool enabled);
void getAutoNotch();
void setToneEnabled(bool enabled);
void getToneEnabled();
void setToneSql(bool enabled);
void getToneSql();
void setCompressor(bool enabled);
void getCompressor();
void setMonitor(bool enabled);
void getMonitor();
void setVox(bool enabled);
void getVox();
void setBreakIn(unsigned char type);
void getBreakIn();
void setManualNotch(bool enabled);
void getManualNotch();
// Repeater:
void setDuplexMode(duplexMode dm);
@ -233,6 +185,8 @@ public slots:
void getACCGain(unsigned char ab);
void getModInput(bool dataOn);
void getModInputLevel(rigInput input);
void getAfMute();
void getDialLock();
// Set Levels:
void setSquelch(unsigned char level);
@ -253,6 +207,8 @@ public slots:
void setAntiVoxGain(unsigned char gain);
void setModInput(rigInput input, bool dataOn);
void setModInputLevel(rigInput input, unsigned char level);
void setAfMute(bool muteOn);
void setDialLock(bool lockOn);
// NB, NR, IP+:
void setIPP(bool enabled);
@ -406,7 +362,7 @@ signals:
void haveAntenna(unsigned char ant,bool rx);
// Rig State
void stateInfo(rigStateStruct* state);
void stateInfo(rigstate* state);
// Housekeeping:
void getMoreDebug();
@ -480,7 +436,7 @@ private:
struct rigCapabilities rigCaps;
rigStateStruct rigState;
rigstate state;
bool haveRigCaps;
model_kind model;
@ -497,6 +453,9 @@ private:
unsigned char civAddr;
unsigned char incomingCIVAddr; // place to store the incoming CIV.
bool pttAllowed;
bool useRTSforPTT_isSet = false;
bool useRTSforPTT_manual = false;
QString rigSerialPort;
quint32 rigBaudRate;
@ -509,6 +468,7 @@ private:
QString password;
QString serialPortError;
unsigned char localVolume=0;
};

Plik diff jest za duży Load Diff

Wyświetl plik

@ -19,6 +19,7 @@
#include <typeindex>
#include "rigcommander.h"
#include "rigstate.h"
#define CONSTANT_64BIT_FLAG(BIT) (1ull << (BIT))
@ -343,7 +344,7 @@ signals:
void setVFO(unsigned char vfo);
void setSplit(unsigned char split);
void setDuplexMode(duplexMode dm);
void stateUpdated();
// Power
void sendPowerOn();
void sendPowerOff();
@ -368,11 +369,11 @@ signals:
public slots:
virtual void incomingConnection(qintptr socketDescriptor);
void receiveRigCaps(rigCapabilities caps);
void receiveStateInfo(rigStateStruct* state);
void receiveStateInfo(rigstate* state);
// void receiveFrequency(freqt freq);
private:
rigStateStruct* rigState = Q_NULLPTR;
rigstate* rigState = Q_NULLPTR;
};
@ -382,7 +383,7 @@ class rigCtlClient : public QObject
public:
explicit rigCtlClient(int socket, rigCapabilities caps, rigStateStruct *state, rigCtlD* parent = Q_NULLPTR);
explicit rigCtlClient(int socket, rigCapabilities caps, rigstate *state, rigCtlD* parent = Q_NULLPTR);
int getSocketId();
@ -399,8 +400,9 @@ protected:
private:
rigCapabilities rigCaps;
rigStateStruct* rigState = Q_NULLPTR;
rigstate* rigState = Q_NULLPTR;
rigCtlD* parent;
bool chkVfoEecuted=false;
QString getMode(unsigned char mode, bool datamode);
unsigned char getMode(QString modeString);
QString getFilter(unsigned char mode, unsigned char filter);
@ -408,6 +410,7 @@ private:
unsigned char getAntennas();
quint64 getRadioModes();
QString getAntName(unsigned char ant);
unsigned char antFromName(QString name);
int getCalibratedValue(unsigned char meter,cal_table_t cal);
};

127
rigstate.h 100644
Wyświetl plik

@ -0,0 +1,127 @@
#ifndef RIGSTATEH
#define RIGSTATEH
#include <QObject>
#include <QMutex>
#include <QDateTime>
#include <QVariant>
#include <QMap>
#include <QCache>
#include "rigcommander.h"
#include "rigidentities.h"
// Meters at the end as they are ALWAYS updated from the rig!
enum stateTypes { VFOAFREQ, VFOBFREQ, CURRENTVFO, PTT, MODE, FILTER, DUPLEX, DATAMODE, ANTENNA, RXANTENNA, CTCSS, TSQL, DTCS, CSQL,
PREAMP, AGC, ATTENUATOR, MODINPUT, AFGAIN, RFGAIN, SQUELCH, TXPOWER, MICGAIN, COMPLEVEL, MONITORLEVEL, VOXGAIN, ANTIVOXGAIN,
FAGCFUNC, NBFUNC, COMPFUNC, VOXFUNC, TONEFUNC, TSQLFUNC, SBKINFUNC, FBKINFUNC, ANFFUNC, NRFUNC, AIPFUNC, APFFUNC, MONFUNC, MNFUNC,RFFUNC,
AROFUNC, MUTEFUNC, VSCFUNC, REVFUNC, SQLFUNC, ABMFUNC, BCFUNC, MBCFUNC, RITFUNC, AFCFUNC, SATMODEFUNC, SCOPEFUNC,
NBLEVEL, NBDEPTH, NBWIDTH, NRLEVEL, RIGINPUT, POWERONOFF, RITVALUE,
RESUMEFUNC, TBURSTFUNC, TUNERFUNC, LOCKFUNC, SMETER, POWERMETER, SWRMETER, ALCMETER, COMPMETER, VOLTAGEMETER, CURRENTMETER
};
struct value {
quint64 _value=0;
bool _valid = false;
bool _updated = false;
QDateTime _dateUpdated;
};
class rigstate
{
public:
void invalidate(stateTypes s) { map[s]._valid = false; }
bool isValid(stateTypes s) { return map[s]._valid; }
bool isUpdated(stateTypes s) { return map[s]._updated; }
QDateTime whenUpdated(stateTypes s) { return map[s]._dateUpdated; }
void set(stateTypes s, quint64 x, bool u) {
if (x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
void set(stateTypes s, qint32 x, bool u) {
if ((quint64)x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
void set(stateTypes s, quint16 x, bool u) {
if ((quint64)x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
void set(stateTypes s, quint8 x, bool u) {
if ((quint64)x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
void set(stateTypes s, bool x, bool u) {
if ((quint64)x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
void set(stateTypes s, duplexMode x, bool u) {
if ((quint64)x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
void set(stateTypes s, rigInput x, bool u) {
if ((quint64)x != map[s]._value) {
_mutex.lock();
map[s]._value = (quint64)x;
map[s]._valid = true;
map[s]._updated = u;
map[s]._dateUpdated = QDateTime::currentDateTime();
_mutex.unlock();
}
}
bool getBool(stateTypes s) { return map[s]._value != 0; }
quint8 getChar(stateTypes s) { return (quint8)map[s]._value; }
quint16 getInt16(stateTypes s) { return (qint16)map[s]._value; }
qint32 getInt32(stateTypes s) { return (qint32)map[s]._value; }
quint64 getInt64(stateTypes s) { return map[s]._value; }
duplexMode getDuplex(stateTypes s) { return(duplexMode)map[s]._value; }
rigInput getInput(stateTypes s) { return(rigInput)map[s]._value; }
QMap<stateTypes, value> map;
private:
//std::map<stateTypes, std::unique_ptr<valueBase> > values;
QMutex _mutex;
};
#endif

Wyświetl plik

@ -99,6 +99,8 @@ udpServer::~udpServer()
udpAudio->close();
delete udpAudio;
}
emit haveNetworkStatus(QString(""));
}

Wyświetl plik

@ -19,7 +19,6 @@
#include <QDebug>
#include <udpserversetup.h>
#include "packettypes.h"
#include "rigidentities.h"
#include "audiohandler.h"
@ -34,6 +33,28 @@ struct SEQBUFENTRY {
quint8 retransmitCount;
};
struct SERVERUSER {
QString username;
QString password;
quint8 userType;
};
struct SERVERCONFIG {
bool enabled;
bool lan;
quint16 controlPort;
quint16 civPort;
quint16 audioPort;
int audioOutput;
int audioInput;
quint8 resampleQuality;
quint32 baudRate;
QList <SERVERUSER> users;
};
class udpServer : public QObject
{
Q_OBJECT

Wyświetl plik

@ -1,127 +0,0 @@
#include "udpserversetup.h"
#include "ui_udpserversetup.h"
#include "logcategories.h"
extern void passcode(QString in,QByteArray& out);
udpServerSetup::udpServerSetup(QWidget* parent) :
QDialog(parent),
ui(new Ui::udpServerSetup)
{
ui->setupUi(this);
addUserLine("", "", 0); // Create a blank row if we never receive config.
// Get any stored config information from the main form.
SERVERCONFIG config;
emit serverConfig(config,false); // Just send blank server config.
}
udpServerSetup::~udpServerSetup()
{
delete ui;
}
// Slot to receive config.
void udpServerSetup::receiveServerConfig(SERVERCONFIG conf)
{
qInfo() << "Getting server config";
ui->enableCheckbox->setChecked(conf.enabled);
ui->controlPortText->setText(QString::number(conf.controlPort));
ui->civPortText->setText(QString::number(conf.civPort));
ui->audioPortText->setText(QString::number(conf.audioPort));
int row = 0;
for (int i = 0; i < ui->usersTable->rowCount(); i++)
{
ui->usersTable->removeRow(i);
}
foreach (SERVERUSER user, conf.users)
{
if (user.username != "" && user.password != "")
{
addUserLine(user.username, user.password, user.userType);
row++;
}
}
if (row == 0) {
addUserLine("", "", 0);
}
}
void udpServerSetup::accept()
{
qInfo() << "Server config stored";
SERVERCONFIG config;
config.enabled = ui->enableCheckbox->isChecked();
config.controlPort = ui->controlPortText->text().toInt();
config.civPort = ui->civPortText->text().toInt();
config.audioPort = ui->audioPortText->text().toInt();
config.users.clear();
for (int row = 0; row < ui->usersTable->model()->rowCount(); row++)
{
if (ui->usersTable->item(row, 0) != NULL)
{
SERVERUSER user;
user.username = ui->usersTable->item(row, 0)->text();
QLineEdit* password = (QLineEdit*)ui->usersTable->cellWidget(row, 1);
user.password = password->text();
QComboBox* comboBox = (QComboBox*)ui->usersTable->cellWidget(row, 2);
user.userType = comboBox->currentIndex();
config.users.append(user);
}
else {
ui->usersTable->removeRow(row);
}
}
emit serverConfig(config,true);
this->hide();
}
void udpServerSetup::on_usersTable_cellClicked(int row, int col)
{
qInfo() << "Clicked on " << row << "," << col;
if (row == ui->usersTable->model()->rowCount() - 1 && ui->usersTable->item(row, 0) != NULL) {
addUserLine("", "", 0);
}
}
void udpServerSetup::onPasswordChanged()
{
int row = sender()->property("row").toInt();
QLineEdit* password = (QLineEdit*)ui->usersTable->cellWidget(row, 1);
QByteArray pass;
passcode(password->text(), pass);
password->setText(pass);
qInfo() << "password row" << row << "changed";
}
void udpServerSetup::addUserLine(const QString& user, const QString& pass, const int& type)
{
ui->usersTable->insertRow(ui->usersTable->rowCount());
ui->usersTable->setItem(ui->usersTable->rowCount() - 1, 0, new QTableWidgetItem(user));
ui->usersTable->setItem(ui->usersTable->rowCount() - 1, 1, new QTableWidgetItem());
ui->usersTable->setItem(ui->usersTable->rowCount() - 1, 2, new QTableWidgetItem());
QLineEdit* password = new QLineEdit();
password->setProperty("row", (int)ui->usersTable->rowCount() - 1);
password->setEchoMode(QLineEdit::PasswordEchoOnEdit);
password->setText(pass);
connect(password, SIGNAL(editingFinished()), this, SLOT(onPasswordChanged()));
ui->usersTable->setCellWidget(ui->usersTable->rowCount() - 1, 1, password);
QComboBox* comboBox = new QComboBox();
comboBox->insertItems(0, { "Full User","Full with no TX","Monitor only" });
comboBox->setCurrentIndex(type);
ui->usersTable->setCellWidget(ui->usersTable->rowCount() - 1, 2, comboBox);
}

Wyświetl plik

@ -1,60 +0,0 @@
#ifndef UDPSERVERSETUP_H
#define UDPSERVERSETUP_H
#include <QDialog>
#include <QComboBox>
#include <QList>
#include <QDebug>
struct SERVERUSER {
QString username;
QString password;
quint8 userType;
};
struct SERVERCONFIG {
bool enabled;
bool lan;
quint16 controlPort;
quint16 civPort;
quint16 audioPort;
int audioOutput;
int audioInput;
quint8 resampleQuality;
quint32 baudRate;
QList <SERVERUSER> users;
};
namespace Ui {
class udpServerSetup;
}
class udpServerSetup : public QDialog
{
Q_OBJECT
public:
explicit udpServerSetup(QWidget* parent = 0);
~udpServerSetup();
private slots:
void on_usersTable_cellClicked(int row, int col);
void onPasswordChanged();
public slots:
void receiveServerConfig(SERVERCONFIG conf);
signals:
void serverConfig(SERVERCONFIG conf, bool store);
private:
Ui::udpServerSetup* ui;
void accept();
QList<QComboBox*> userTypes;
void addUserLine(const QString &user, const QString &pass, const int &type);
};
#endif // UDPSERVER_H

Wyświetl plik

@ -27,12 +27,8 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, const QString s
rpt = new repeaterSetup();
sat = new satelliteSetup();
trxadj = new transceiverAdjustments();
srv = new udpServerSetup();
abtBox = new aboutbox();
connect(this, SIGNAL(sendServerConfig(SERVERCONFIG)), srv, SLOT(receiveServerConfig(SERVERCONFIG)));
connect(srv, SIGNAL(serverConfig(SERVERCONFIG, bool)), this, SLOT(serverConfigRequested(SERVERCONFIG, bool)));
qRegisterMetaType<udpPreferences>(); // Needs to be registered early.
qRegisterMetaType<rigCapabilities>();
qRegisterMetaType<duplexMode>();
@ -46,6 +42,7 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, const QString s
qRegisterMetaType <audioSetup>();
qRegisterMetaType <timekind>();
qRegisterMetaType <datekind>();
qRegisterMetaType<rigstate*>();
haveRigCaps = false;
@ -217,6 +214,31 @@ void wfmain::openRig()
}
void wfmain::createSettingsListItems()
{
// Add items to the settings tab list widget
ui->settingsList->addItem("Radio Access"); // 0
ui->settingsList->addItem("User Interface"); // 1
ui->settingsList->addItem("Radio Settings"); // 2
ui->settingsList->addItem("Radio Server"); // 3
ui->settingsList->addItem("External Control"); // 4
ui->settingsList->addItem("Experimental"); // 5
//ui->settingsList->addItem("Audio Processing"); // 6
ui->settingsStack->setCurrentIndex(0);
}
void wfmain::on_settingsList_currentRowChanged(int currentRow)
{
ui->settingsStack->setCurrentIndex(currentRow);
}
void wfmain::connectSettingsList()
{
}
void wfmain::rigConnections()
{
connect(this, SIGNAL(setCIVAddr(unsigned char)), rig, SLOT(setCIVAddr(unsigned char)));
@ -406,7 +428,7 @@ void wfmain::makeRig()
// Rig comm setup:
connect(this, SIGNAL(sendCommSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)), rig, SLOT(commSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)));
connect(this, SIGNAL(sendCommSetup(unsigned char, QString, quint32,QString)), rig, SLOT(commSetup(unsigned char, QString, quint32,QString)));
connect(this, SIGNAL(setRTSforPTT(bool)), rig, SLOT(setRTSforPTT(bool)));
connect(rig, SIGNAL(haveBaudRate(quint32)), this, SLOT(receiveBaudRate(quint32)));
@ -417,31 +439,12 @@ void wfmain::makeRig()
connect(rig, SIGNAL(discoveredRigID(rigCapabilities)), this, SLOT(receiveFoundRigID(rigCapabilities)));
connect(rig, SIGNAL(commReady()), this, SLOT(receiveCommReady()));
connect(this, SIGNAL(requestRigState()), rig, SLOT(sendState()));
connect(this, SIGNAL(stateUpdated()), rig, SLOT(stateUpdated()));
connect(rig, SIGNAL(stateInfo(rigstate*)), this, SLOT(receiveStateInfo(rigstate*)));
if (rigCtl != Q_NULLPTR) {
connect(rig, SIGNAL(stateInfo(rigStateStruct*)), rigCtl, SLOT(receiveStateInfo(rigStateStruct*)));
connect(this, SIGNAL(requestRigState()), rig, SLOT(sendState()));
connect(rigCtl, SIGNAL(setFrequency(unsigned char, freqt)), rig, SLOT(setFrequency(unsigned char, freqt)));
connect(rigCtl, SIGNAL(setMode(unsigned char, unsigned char)), rig, SLOT(setMode(unsigned char, unsigned char)));
connect(rigCtl, SIGNAL(setDataMode(bool, unsigned char)), rig, SLOT(setDataMode(bool, unsigned char)));
connect(rigCtl, SIGNAL(setPTT(bool)), rig, SLOT(setPTT(bool)));
connect(rigCtl, SIGNAL(sendPowerOn()), rig, SLOT(powerOn()));
connect(rigCtl, SIGNAL(sendPowerOff()), rig, SLOT(powerOff()));
connect(rigCtl, SIGNAL(setAttenuator(unsigned char)), rig, SLOT(setAttenuator(unsigned char)));
connect(rigCtl, SIGNAL(setPreamp(unsigned char)), rig, SLOT(setPreamp(unsigned char)));
connect(rigCtl, SIGNAL(setDuplexMode(duplexMode)), rig, SLOT(setDuplexMode(duplexMode)));
// Levels: Set:
connect(rigCtl, SIGNAL(setRfGain(unsigned char)), rig, SLOT(setRfGain(unsigned char)));
connect(rigCtl, SIGNAL(setAfGain(unsigned char)), rig, SLOT(setAfGain(unsigned char)));
connect(rigCtl, SIGNAL(setSql(unsigned char)), rig, SLOT(setSquelch(unsigned char)));
connect(rigCtl, SIGNAL(setTxPower(unsigned char)), rig, SLOT(setTxPower(unsigned char)));
connect(rigCtl, SIGNAL(setMicGain(unsigned char)), rig, SLOT(setMicGain(unsigned char)));
connect(rigCtl, SIGNAL(setMonitorLevel(unsigned char)), rig, SLOT(setMonitorLevel(unsigned char)));
connect(rigCtl, SIGNAL(setVoxGain(unsigned char)), rig, SLOT(setVoxGain(unsigned char)));
connect(rigCtl, SIGNAL(setAntiVoxGain(unsigned char)), rig, SLOT(setAntiVoxGain(unsigned char)));
connect(rigCtl, SIGNAL(setSpectrumRefLevel(int)), rig, SLOT(setSpectrumRefLevel(int)));
connect(rig, SIGNAL(stateInfo(rigstate*)), rigCtl, SLOT(receiveStateInfo(rigstate*)));
connect(rigCtl, SIGNAL(stateUpdated()), rig, SLOT(stateUpdated()));
}
}
}
@ -631,6 +634,8 @@ void wfmain::setupPlots()
void wfmain::setupMainUI()
{
createSettingsListItems();
ui->bandStkLastUsedBtn->setVisible(false);
ui->bandStkVoiceBtn->setVisible(false);
ui->bandStkDataBtn->setVisible(false);
@ -672,6 +677,7 @@ void wfmain::setupMainUI()
ui->tuningStepCombo->addItem("1 Hz", (unsigned int) 1);
ui->tuningStepCombo->addItem("10 Hz", (unsigned int) 10);
ui->tuningStepCombo->addItem("100 Hz", (unsigned int) 100);
ui->tuningStepCombo->addItem("500 Hz", (unsigned int) 500);
ui->tuningStepCombo->addItem("1 kHz", (unsigned int) 1000);
ui->tuningStepCombo->addItem("2.5 kHz", (unsigned int) 2500);
ui->tuningStepCombo->addItem("5 kHz", (unsigned int) 5000);
@ -951,10 +957,19 @@ void wfmain::setServerToPrefs()
{
// Start server if enabled in config
ui->serverSetupGroup->setEnabled(serverConfig.enabled);
if (serverThread != Q_NULLPTR) {
serverThread->quit();
serverThread->wait();
serverThread = Q_NULLPTR;
udp = Q_NULLPTR;
ui->statusBar->showMessage(QString("Server disabled"), 1000);
}
if (serverConfig.enabled) {
serverConfig.lan = prefs.enableLAN;
udp = new udpServer(serverConfig,rxSetup,txSetup);
udp = new udpServer(serverConfig,serverTxSetup,serverRxSetup);
serverThread = new QThread(this);
@ -972,6 +987,7 @@ void wfmain::setServerToPrefs()
emit initServer();
connect(this, SIGNAL(sendRigCaps(rigCapabilities)), udp, SLOT(receiveRigCaps(rigCapabilities)));
ui->statusBar->showMessage(QString("Server enabled"), 1000);
}
}
@ -1056,10 +1072,12 @@ void wfmain::setAudioDevicesUI()
if (info.outputChannels > 0) {
qInfo(logAudio()) << (info.isDefaultOutput ? "*" : " ") << "(" << i << ") Output Device : " << QString::fromStdString(info.name);
ui->audioOutputCombo->addItem(QString::fromStdString(info.name), i);
ui->serverTXAudioOutputCombo->addItem(QString::fromStdString(info.name), i);
}
if (info.inputChannels > 0) {
qInfo(logAudio()) << (info.isDefaultInput ? "*" : " ") << "(" << i << ") Input Device : " << QString::fromStdString(info.name);
ui->audioInputCombo->addItem(QString::fromStdString(info.name), i);
ui->serverRXAudioInputCombo->addItem(QString::fromStdString(info.name), i);
}
}
@ -1090,11 +1108,13 @@ void wfmain::setAudioDevicesUI()
if (info->maxInputChannels > 0) {
qInfo(logAudio()) << (i == Pa_GetDefaultInputDevice() ? "*" : " ") << "(" << i << ") Output Device : " << info->name;
ui->audioInputCombo->addItem(info->name, i);
ui->serverRXAudioInputCombo->addItem(info->name, i);
}
if (info->maxOutputChannels > 0) {
qInfo(logAudio()) << (i == Pa_GetDefaultOutputDevice() ? "*" : " ") << "(" << i << ") Input Device : " << info->name;
ui->audioOutputCombo->addItem(info->name, i);
}
ui->serverTXAudioOutputCombo->addItem(info->name, i);
}
}
#else
@ -1104,15 +1124,19 @@ void wfmain::setAudioDevicesUI()
const auto audioOutputs = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
for (const QAudioDeviceInfo& deviceInfo : audioOutputs) {
ui->audioOutputCombo->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
ui->serverTXAudioOutputCombo->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
}
const auto audioInputs = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
for (const QAudioDeviceInfo& deviceInfo : audioInputs) {
ui->audioInputCombo->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
ui->serverRXAudioInputCombo->addItem(deviceInfo.deviceName(), QVariant::fromValue(deviceInfo));
}
// Set these to default audio devices initially.
rxSetup.port = QAudioDeviceInfo::defaultOutputDevice();
txSetup.port = QAudioDeviceInfo::defaultInputDevice();
serverRxSetup.port = QAudioDeviceInfo::defaultOutputDevice();
serverTxSetup.port = QAudioDeviceInfo::defaultInputDevice();
#else
// If no external library is configured, use QTMultimedia
@ -1322,6 +1346,7 @@ void wfmain::setDefPrefs()
defPrefs.stylesheetPath = QString("qdarkstyle/style.qss");
defPrefs.radioCIVAddr = 0x00; // previously was 0x94 for 7300.
defPrefs.CIVisRadioModel = false;
defPrefs.forceRTSasPTT = false;
defPrefs.serialPortRadio = QString("auto");
defPrefs.serialPortBaud = 115200;
defPrefs.enablePTT = false;
@ -1359,7 +1384,7 @@ void wfmain::loadSettings()
prefs.drawPeaks = settings->value("DrawPeaks", defPrefs.drawPeaks).toBool();
prefs.wfAntiAlias = settings->value("WFAntiAlias", defPrefs.wfAntiAlias).toBool();
prefs.wfInterpolate = settings->value("WFInterpolate", defPrefs.wfInterpolate).toBool();
prefs.wflength = (unsigned int) settings->value("WFLength", defPrefs.wflength).toInt();
prefs.wflength = (unsigned int)settings->value("WFLength", defPrefs.wflength).toInt();
prefs.stylesheetPath = settings->value("StylesheetPath", defPrefs.stylesheetPath).toString();
ui->splitter->restoreState(settings->value("splitter").toByteArray());
@ -1407,20 +1432,23 @@ void wfmain::loadSettings()
// Radio and Comms: C-IV addr, port to use
settings->beginGroup("Radio");
prefs.radioCIVAddr = (unsigned char) settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt();
if(prefs.radioCIVAddr!=0)
prefs.radioCIVAddr = (unsigned char)settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt();
if (prefs.radioCIVAddr != 0)
{
ui->rigCIVManualAddrChk->setChecked(true);
ui->rigCIVaddrHexLine->blockSignals(true);
ui->rigCIVaddrHexLine->setText(QString("%1").arg(prefs.radioCIVAddr, 2, 16));
ui->rigCIVaddrHexLine->setEnabled(true);
ui->rigCIVaddrHexLine->blockSignals(false);
} else {
}
else {
ui->rigCIVManualAddrChk->setChecked(false);
ui->rigCIVaddrHexLine->setEnabled(false);
}
prefs.CIVisRadioModel = (bool)settings->value("CIVisRadioModel", defPrefs.CIVisRadioModel).toBool();
prefs.forceRTSasPTT = (bool)settings->value("ForceRTSasPTT", defPrefs.forceRTSasPTT).toBool();
ui->useRTSforPTTchk->setChecked(prefs.forceRTSasPTT);
prefs.serialPortRadio = settings->value("SerialPortRadio", defPrefs.serialPortRadio).toString();
int serialIndex = ui->serialDeviceListCombo->findText(prefs.serialPortRadio);
@ -1428,9 +1456,9 @@ void wfmain::loadSettings()
ui->serialDeviceListCombo->setCurrentIndex(serialIndex);
}
prefs.serialPortBaud = (quint32) settings->value("SerialPortBaud", defPrefs.serialPortBaud).toInt();
prefs.serialPortBaud = (quint32)settings->value("SerialPortBaud", defPrefs.serialPortBaud).toInt();
ui->baudRateCombo->blockSignals(true);
ui->baudRateCombo->setCurrentIndex( ui->baudRateCombo->findData(prefs.serialPortBaud) );
ui->baudRateCombo->setCurrentIndex(ui->baudRateCombo->findData(prefs.serialPortBaud));
ui->baudRateCombo->blockSignals(false);
if (prefs.serialPortBaud > 0)
@ -1446,10 +1474,10 @@ void wfmain::loadSettings()
else
{
ui->vspCombo->addItem(prefs.virtualSerialPort);
ui->vspCombo->setCurrentIndex(ui->vspCombo->count()-1);
ui->vspCombo->setCurrentIndex(ui->vspCombo->count() - 1);
}
prefs.localAFgain = (unsigned char) settings->value("localAFgain", defPrefs.localAFgain).toUInt();
prefs.localAFgain = (unsigned char)settings->value("localAFgain", defPrefs.localAFgain).toUInt();
rxSetup.localAFgain = prefs.localAFgain;
settings->endGroup();
@ -1463,15 +1491,14 @@ void wfmain::loadSettings()
settings->beginGroup("LAN");
prefs.enableLAN = settings->value("EnableLAN", defPrefs.enableLAN).toBool();
if(prefs.enableLAN)
if (prefs.enableLAN)
{
ui->baudRateCombo->setEnabled(false);
ui->serialDeviceListCombo->setEnabled(false);
//ui->udpServerSetupBtn->setEnabled(false);
} else {
}
else {
ui->baudRateCombo->setEnabled(true);
ui->serialDeviceListCombo->setEnabled(true);
//ui->udpServerSetupBtn->setEnabled(true);
}
ui->lanEnableBtn->setChecked(prefs.enableLAN);
@ -1487,15 +1514,15 @@ void wfmain::loadSettings()
udpPrefs.ipAddress = settings->value("IPAddress", udpDefPrefs.ipAddress).toString();
ui->ipAddressTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->ipAddressTxt->setText(udpPrefs.ipAddress);
udpPrefs.controlLANPort = settings->value("ControlLANPort", udpDefPrefs.controlLANPort).toInt();
ui->controlPortTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->controlPortTxt->setText(QString("%1").arg(udpPrefs.controlLANPort));
udpPrefs.username = settings->value("Username", udpDefPrefs.username).toString();
ui->usernameTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->usernameTxt->setText(QString("%1").arg(udpPrefs.username));
udpPrefs.password = settings->value("Password", udpDefPrefs.password).toString();
ui->passwordTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->passwordTxt->setText(QString("%1").arg(udpPrefs.password));
@ -1611,6 +1638,70 @@ void wfmain::loadSettings()
serverConfig.users.append(user);
}
ui->serverEnableCheckbox->setChecked(serverConfig.enabled);
ui->serverControlPortText->setText(QString::number(serverConfig.controlPort));
ui->serverCivPortText->setText(QString::number(serverConfig.civPort));
ui->serverAudioPortText->setText(QString::number(serverConfig.audioPort));
serverRxSetup.isinput = true;
serverTxSetup.isinput = false;
ui->serverRXAudioInputCombo->blockSignals(true);
serverRxSetup.name = settings->value("ServerAudioInput", "").toString();
qInfo(logGui()) << "Got Server Audio Input: " << serverRxSetup.name;
int serverAudioInputIndex = ui->serverRXAudioInputCombo->findText(serverRxSetup.name);
if (serverAudioInputIndex != -1) {
ui->serverRXAudioInputCombo->setCurrentIndex(serverAudioInputIndex);
#if defined(RTAUDIO)
serverRxSetup.port = ui->serverRXAudioInputCombo->itemData(serverAudioInputIndex).toInt();
#elif defined(PORTAUDIO)
serverRxSetup.port = ui->audioOutputCombo->itemData(serverAudioInputIndex).toInt();
#else
QVariant v = ui->serverRXAudioInputCombo->currentData();
serverRxSetup.port = v.value<QAudioDeviceInfo>();
#endif
}
ui->serverRXAudioInputCombo->blockSignals(false);
serverRxSetup.resampleQuality = settings->value("ResampleQuality", "4").toInt();
serverRxSetup.resampleQuality = rxSetup.resampleQuality;
ui->serverTXAudioOutputCombo->blockSignals(true);
serverTxSetup.name = settings->value("ServerAudioOutput", "").toString();
qInfo(logGui()) << "Got Server Audio Output: " << serverTxSetup.name;
int serverAudioOutputIndex = ui->serverTXAudioOutputCombo->findText(serverTxSetup.name);
if (serverAudioOutputIndex != -1) {
ui->serverTXAudioOutputCombo->setCurrentIndex(serverAudioOutputIndex);
#if defined(RTAUDIO)
serverTxSetup.port = ui->serverTXAudioOutputCombo->itemData(serverAudioOutputIndex).toInt();
#elif defined(PORTAUDIO)
serverTxSetup.port = ui->serverTXAudioOutputCombo->itemData(serverAudioOutputIndex).toInt();
#else
QVariant v = ui->serverTXAudioOutputCombo->currentData();
serverRxSetup.port = v.value<QAudioDeviceInfo>();
#endif
}
ui->serverTXAudioOutputCombo->blockSignals(false);
serverTxSetup.resampleQuality = settings->value("ResampleQuality", "4").toInt();
serverTxSetup.resampleQuality = rxSetup.resampleQuality;
int row = 0;
ui->serverUsersTable->setRowCount(0);
foreach(SERVERUSER user, serverConfig.users)
{
if (user.username != "" && user.password != "")
{
serverAddUserLine(user.username, user.password, user.userType);
row++;
}
}
if (row == 0) {
serverAddUserLine("", "", 0);
}
settings->endGroup();
// Memory channels
@ -1630,7 +1721,7 @@ void wfmain::loadSettings()
// Also annoying that the preference groups are not written in
// the order they are specified here.
for(int i=0; i < size; i++)
for (int i = 0; i < size; i++)
{
settings->setArrayIndex(i);
chan = settings->value("chan", 0).toInt();
@ -1638,7 +1729,7 @@ void wfmain::loadSettings()
mode = settings->value("mode", 0).toInt();
isSet = settings->value("isSet", false).toBool();
if(isSet)
if (isSet)
{
mem.setPreset(chan, freq, (mode_kind)mode);
}
@ -1647,10 +1738,140 @@ void wfmain::loadSettings()
settings->endArray();
settings->endGroup();
emit sendServerConfig(serverConfig);
}
void wfmain::serverAddUserLine(const QString& user, const QString& pass, const int& type)
{
ui->serverUsersTable->blockSignals(true);
ui->serverUsersTable->insertRow(ui->serverUsersTable->rowCount());
ui->serverUsersTable->setItem(ui->serverUsersTable->rowCount() - 1, 0, new QTableWidgetItem(user));
ui->serverUsersTable->setItem(ui->serverUsersTable->rowCount() - 1, 1, new QTableWidgetItem());
ui->serverUsersTable->setItem(ui->serverUsersTable->rowCount() - 1, 2, new QTableWidgetItem());
QLineEdit* password = new QLineEdit();
password->setProperty("row", (int)ui->serverUsersTable->rowCount() - 1);
password->setEchoMode(QLineEdit::PasswordEchoOnEdit);
password->setText(pass);
connect(password, SIGNAL(editingFinished()), this, SLOT(onServerPasswordChanged()));
ui->serverUsersTable->setCellWidget(ui->serverUsersTable->rowCount() - 1, 1, password);
QComboBox* comboBox = new QComboBox();
comboBox->insertItems(0, { "Full User","Full with no TX","Monitor only" });
comboBox->setCurrentIndex(type);
ui->serverUsersTable->setCellWidget(ui->serverUsersTable->rowCount() - 1, 2, comboBox);
ui->serverUsersTable->blockSignals(false);
}
void wfmain::onServerPasswordChanged()
{
int row = sender()->property("row").toInt();
QLineEdit* password = (QLineEdit*)ui->serverUsersTable->cellWidget(row, 1);
QByteArray pass;
passcode(password->text(), pass);
password->setText(pass);
qInfo() << "password row" << row << "changed";
serverConfig.users.clear();
for (int rows = 0; rows < ui->serverUsersTable->model()->rowCount(); rows++)
{
if (ui->serverUsersTable->item(rows, 0) != NULL)
{
SERVERUSER user;
user.username = ui->serverUsersTable->item(rows, 0)->text();
QLineEdit* password = (QLineEdit*)ui->serverUsersTable->cellWidget(rows, 1);
user.password = password->text();
QComboBox* comboBox = (QComboBox*)ui->serverUsersTable->cellWidget(rows, 2);
user.userType = comboBox->currentIndex();
serverConfig.users.append(user);
}
else {
ui->serverUsersTable->removeRow(rows);
}
}
}
void wfmain::on_serverUsersTable_cellClicked(int row, int col)
{
qInfo() << "Clicked on " << row << "," << col;
if (row == ui->serverUsersTable->model()->rowCount() - 1 && ui->serverUsersTable->item(row, 0) != NULL) {
serverAddUserLine("", "", 0);
}
}
void wfmain::on_serverEnableCheckbox_clicked(bool checked)
{
ui->serverSetupGroup->setEnabled(checked);
serverConfig.enabled = checked;
setServerToPrefs();
}
void wfmain::on_serverControlPortText_textChanged(QString text)
{
serverConfig.controlPort = ui->serverControlPortText->text().toInt();
}
void wfmain::on_serverCivPortText_textChanged(QString text)
{
serverConfig.civPort = ui->serverCivPortText->text().toInt();
}
void wfmain::on_serverAudioPortText_textChanged(QString text)
{
serverConfig.audioPort = ui->serverAudioPortText->text().toInt();
}
void wfmain::on_serverRXAudioInputCombo_currentIndexChanged(int value)
{
#if defined(RTAUDIO)
serverRxSetup.port = ui->serverRXAudioInputCombo->itemData(value).toInt();
#elif defined(PORTAUDIO)
serverRxSetup.port = ui->serverRXAudioInputCombo->itemData(value).toInt();
#else
QVariant v = ui->serverRXAudioInputCombo->itemData(value);
serverRxSetup.port = v.value<QAudioDeviceInfo>();
#endif
serverRxSetup.name = ui->serverRXAudioInputCombo->itemText(value);
qDebug(logGui()) << "Changed default server audio input to:" << serverRxSetup.name;
}
void wfmain::on_serverTXAudioOutputCombo_currentIndexChanged(int value)
{
#if defined(RTAUDIO)
serverTxSetup.port = ui->serverTXAudioOutputCombo->itemData(value).toInt();
#elif defined(PORTAUDIO)
serverTxSetup.port = ui->serverTXAudioOutputCombo->itemData(value).toInt();
#else
QVariant v = ui->serverTXAudioOutputCombo->itemData(value);
serverTxSetup.port = v.value<QAudioDeviceInfo>();
#endif
serverTxSetup.name = ui->serverTXAudioOutputCombo->itemText(value);
qDebug(logGui()) << "Changed default server audio output to:" << serverTxSetup.name;
}
void wfmain::on_serverUsersTable_cellChanged(int row, int column)
{
qInfo() << "Cell Changed:" << row << "," << column;
serverConfig.users.clear();
for (int rows = 0; rows < ui->serverUsersTable->model()->rowCount(); rows++)
{
if (ui->serverUsersTable->item(rows, 0) != NULL)
{
SERVERUSER user;
user.username = ui->serverUsersTable->item(rows, 0)->text();
QLineEdit* password = (QLineEdit*)ui->serverUsersTable->cellWidget(rows, 1);
user.password = password->text();
QComboBox* comboBox = (QComboBox*)ui->serverUsersTable->cellWidget(rows, 2);
user.userType = comboBox->currentIndex();
serverConfig.users.append(user);
}
else {
ui->serverUsersTable->removeRow(rows);
}
}
}
void wfmain::saveSettings()
@ -1681,6 +1902,7 @@ void wfmain::saveSettings()
settings->beginGroup("Radio");
settings->setValue("RigCIVuInt", prefs.radioCIVAddr);
settings->setValue("CIVisRadioModel", prefs.CIVisRadioModel);
settings->setValue("ForceRTSasPTT", prefs.forceRTSasPTT);
settings->setValue("SerialPortRadio", prefs.serialPortRadio);
settings->setValue("SerialPortBaud", prefs.serialPortBaud);
settings->setValue("VirtualSerialPort", prefs.virtualSerialPort);
@ -1786,6 +2008,10 @@ void wfmain::saveSettings()
settings->setValue("ServerCivPort", serverConfig.civPort);
settings->setValue("ServerAudioPort", serverConfig.audioPort);
settings->setValue("ServerNumUsers", serverConfig.users.count());
settings->setValue("ServerAudioOutput", serverTxSetup.name);
settings->setValue("ServerAudioInput", serverRxSetup.name);
for (int f = 0; f < serverConfig.users.count(); f++)
{
settings->setValue("ServerUsername_" + QString::number(f), serverConfig.users[f].username);
@ -1793,6 +2019,8 @@ void wfmain::saveSettings()
settings->setValue("ServerUserType_" + QString::number(f), serverConfig.users[f].userType);
}
qInfo() << "Server config stored";
settings->endGroup();
@ -3143,6 +3371,10 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
ui->tuneEnableChk->setEnabled(rigCaps.hasATU);
ui->tuneNowBtn->setEnabled(rigCaps.hasATU);
ui->useRTSforPTTchk->blockSignals(true);
ui->useRTSforPTTchk->setChecked(rigCaps.useRTSforPTT);
ui->useRTSforPTTchk->blockSignals(false);
ui->connectBtn->setText("Disconnect"); // We must be connected now.
prepareWf(ui->wfLengthSlider->value());
if(usingLAN)
@ -4345,9 +4577,10 @@ void wfmain::on_serialEnableBtn_clicked(bool checked)
ui->txLatencySlider->setEnabled(!checked);
ui->rxLatencyValue->setEnabled(!checked);
ui->txLatencyValue->setEnabled(!checked);
ui->audioOutputCombo->setEnabled(!checked);
ui->audioInputCombo->setEnabled(!checked);
ui->baudRateCombo->setEnabled(checked);
ui->serialDeviceListCombo->setEnabled(checked);
//ui->udpServerSetupBtn->setEnabled(true);
}
void wfmain::on_lanEnableBtn_clicked(bool checked)
@ -4358,9 +4591,17 @@ void wfmain::on_lanEnableBtn_clicked(bool checked)
ui->controlPortTxt->setEnabled(checked);
ui->usernameTxt->setEnabled(checked);
ui->passwordTxt->setEnabled(checked);
ui->audioRXCodecCombo->setEnabled(checked);
ui->audioTXCodecCombo->setEnabled(checked);
ui->audioSampleRateCombo->setEnabled(checked);
ui->rxLatencySlider->setEnabled(checked);
ui->txLatencySlider->setEnabled(checked);
ui->rxLatencyValue->setEnabled(checked);
ui->txLatencyValue->setEnabled(checked);
ui->audioOutputCombo->setEnabled(checked);
ui->audioInputCombo->setEnabled(checked);
ui->baudRateCombo->setEnabled(!checked);
ui->serialDeviceListCombo->setEnabled(!checked);
//ui->udpServerSetupBtn->setEnabled(false);
if(checked)
{
showStatusBarText("After filling in values, press Save Settings.");
@ -4477,10 +4718,6 @@ void wfmain::on_connectBtn_clicked()
}
}
void wfmain::on_udpServerSetupBtn_clicked()
{
srv->show();
}
void wfmain::on_sqlSlider_valueChanged(int value)
{
issueCmd(cmdSetSql, (unsigned char)value);
@ -4581,8 +4818,15 @@ void wfmain::setRadioTimeDatePrep()
if(!waitingToSetTimeDate)
{
// 1: Find the current time and date
QDateTime now = QDateTime::currentDateTime();
now.setTime(QTime::currentTime());
QDateTime now;
if(ui->useUTCChk->isChecked())
{
now = QDateTime::currentDateTimeUtc();
now.setTime(QTime::currentTime());
} else {
now = QDateTime::currentDateTime();
now.setTime(QTime::currentTime());
}
int second = now.time().second();
@ -4829,22 +5073,6 @@ void wfmain::receiveSpectrumRefLevel(int level)
changeSliderQuietly(ui->scopeRefLevelSlider, level);
}
// Slot to send/receive server config.
// If store is true then write to config otherwise send current config by signal
void wfmain::serverConfigRequested(SERVERCONFIG conf, bool store)
{
if (!store) {
emit sendServerConfig(serverConfig);
}
else {
// Store config in file!
qInfo(logSystem()) << "Storing server config";
serverConfig = conf;
}
}
void wfmain::on_modInputCombo_activated(int index)
{
emit setModInput( (rigInput)ui->modInputCombo->currentData().toInt(), false );
@ -5353,6 +5581,7 @@ void wfmain::on_rigCIVaddrHexLine_editingFinished()
}
}
void wfmain::on_baudRateCombo_activated(int index)
{
bool ok = false;
@ -5366,6 +5595,12 @@ void wfmain::on_baudRateCombo_activated(int index)
(void)index;
}
void wfmain::on_useRTSforPTTchk_clicked(bool checked)
{
emit setRTSforPTT(checked);
prefs.forceRTSasPTT = checked;
}
void wfmain::on_wfLengthSlider_valueChanged(int value)
{
prefs.wflength = (unsigned int)(value);
@ -5483,28 +5718,8 @@ void wfmain::on_enableRigctldChk_clicked(bool checked)
connect(this, SIGNAL(sendRigCaps(rigCapabilities)), rigCtl, SLOT(receiveRigCaps(rigCapabilities)));
if (rig != Q_NULLPTR) {
// We are already connected to a rig.
connect(rig, SIGNAL(stateInfo(rigStateStruct*)), rigCtl, SLOT(receiveStateInfo(rigStateStruct*)));
connect(rigCtl, SIGNAL(setFrequency(unsigned char, freqt)), rig, SLOT(setFrequency(unsigned char, freqt)));
connect(rigCtl, SIGNAL(setMode(unsigned char, unsigned char)), rig, SLOT(setMode(unsigned char, unsigned char)));
connect(rigCtl, SIGNAL(setDataMode(bool, unsigned char)), rig, SLOT(setDataMode(bool, unsigned char)));
connect(rigCtl, SIGNAL(setPTT(bool)), rig, SLOT(setPTT(bool)));
connect(rigCtl, SIGNAL(sendPowerOn()), rig, SLOT(powerOn()));
connect(rigCtl, SIGNAL(sendPowerOff()), rig, SLOT(powerOff()));
connect(rigCtl, SIGNAL(setAttenuator(unsigned char)), rig, SLOT(setAttenuator(unsigned char)));
connect(rigCtl, SIGNAL(setPreamp(unsigned char)), rig, SLOT(setPreamp(unsigned char)));
connect(rigCtl, SIGNAL(setDuplexMode(duplexMode)), rig, SLOT(setDuplexMode(duplexMode)));
// Levels: Set:
connect(rigCtl, SIGNAL(setRfGain(unsigned char)), rig, SLOT(setRfGain(unsigned char)));
connect(rigCtl, SIGNAL(setAfGain(unsigned char)), rig, SLOT(setAfGain(unsigned char)));
connect(rigCtl, SIGNAL(setSql(unsigned char)), rig, SLOT(setSquelch(unsigned char)));
connect(rigCtl, SIGNAL(setTxPower(unsigned char)), rig, SLOT(setTxPower(unsigned char)));
connect(rigCtl, SIGNAL(setMicGain(unsigned char)), rig, SLOT(setMicGain(unsigned char)));
connect(rigCtl, SIGNAL(setMonitorLevel(unsigned char)), rig, SLOT(setMonitorLevel(unsigned char)));
connect(rigCtl, SIGNAL(setVoxGain(unsigned char)), rig, SLOT(setVoxGain(unsigned char)));
connect(rigCtl, SIGNAL(setAntiVoxGain(unsigned char)), rig, SLOT(setAntiVoxGain(unsigned char)));
connect(rigCtl, SIGNAL(setSpectrumRefLevel(int)), rig, SLOT(setSpectrumRefLevel(int)));
connect(rig, SIGNAL(stateInfo(rigstate*)), rigCtl, SLOT(receiveStateInfo(rigstate*)));
connect(rigCtl, SIGNAL(stateUpdated()), rig, SLOT(stateUpdated()));
emit sendRigCaps(rigCaps);
emit requestRigState();
@ -5534,6 +5749,17 @@ void wfmain::on_useCIVasRigIDChk_clicked(bool checked)
prefs.CIVisRadioModel = checked;
}
void wfmain::receiveStateInfo(rigstate* state)
{
qInfo("Setting rig state for wfmain");
rigState = state;
}
void wfmain::on_setClockBtn_clicked()
{
setRadioTimeDatePrep();
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
{

Wyświetl plik

@ -14,6 +14,7 @@
#include "logcategories.h"
#include "commhandler.h"
#include "rigcommander.h"
#include "rigstate.h"
#include "freqmemory.h"
#include "rigidentities.h"
#include "repeaterattributes.h"
@ -22,7 +23,6 @@
#include "repeatersetup.h"
#include "satellitesetup.h"
#include "transceiveradjustments.h"
#include "udpserversetup.h"
#include "udpserver.h"
#include "qledlabel.h"
#include "rigctld.h"
@ -52,6 +52,7 @@ signals:
// Basic to rig:
void setCIVAddr(unsigned char newRigCIVAddr);
void setRigID(unsigned char rigID);
void setRTSforPTT(bool enabled);
// Power
void sendPowerOn();
@ -162,9 +163,9 @@ signals:
void sendCloseComm();
void sendChangeLatency(quint16 latency);
void initServer();
void sendServerConfig(SERVERCONFIG conf);
void sendRigCaps(rigCapabilities caps);
void requestRigState();
void stateUpdated();
private slots:
void updateSizes(int tabIndex);
@ -266,7 +267,6 @@ private slots:
void handlePlotScroll(QWheelEvent *);
void sendRadioCommandLoop();
void showStatusBarText(QString text);
void serverConfigRequested(SERVERCONFIG conf, bool store);
void receiveBaudRate(quint32 baudrate);
void setRadioTimeDateSend();
@ -409,7 +409,6 @@ private slots:
void on_dataModeBtn_toggled(bool checked);
void on_udpServerSetupBtn_clicked();
void on_transmitBtn_clicked();
@ -501,12 +500,34 @@ private slots:
void on_useCIVasRigIDChk_clicked(bool checked);
void receiveStateInfo(rigstate* state);
void on_settingsList_currentRowChanged(int currentRow);
void on_setClockBtn_clicked();
void on_serverEnableCheckbox_clicked(bool checked);
void on_serverUsersTable_cellClicked(int row, int col);
void on_serverControlPortText_textChanged(QString text);
void on_serverCivPortText_textChanged(QString text);
void on_serverAudioPortText_textChanged(QString text);
void on_serverTXAudioOutputCombo_currentIndexChanged(int value);
void on_serverRXAudioInputCombo_currentIndexChanged(int value);
void onServerPasswordChanged();
void on_serverUsersTable_cellChanged(int row, int column);
void on_useRTSforPTTchk_clicked(bool checked);
private:
Ui::wfmain *ui;
void closeEvent(QCloseEvent *event);
QSettings *settings=Q_NULLPTR;
void loadSettings();
void saveSettings();
void createSettingsListItems();
void connectSettingsList();
QCustomPlot *plot; // line plot
QCustomPlot *wf; // waterfall image
QCPItemLine * freqIndicatorLine;
@ -718,6 +739,7 @@ private:
QString stylesheetPath;
unsigned char radioCIVAddr;
bool CIVisRadioModel;
bool forceRTSasPTT;
QString serialPortRadio;
quint32 serialPortBaud;
bool enablePTT;
@ -744,6 +766,9 @@ private:
audioSetup rxSetup;
audioSetup txSetup;
audioSetup serverRxSetup;
audioSetup serverTxSetup;
colors defaultColors;
void setDefaultColors(); // populate with default values
@ -812,7 +837,6 @@ private:
repeaterSetup *rpt;
satelliteSetup *sat;
transceiverAdjustments *trxadj;
udpServerSetup *srv;
aboutbox *abtBox;
@ -842,16 +866,18 @@ private:
unsigned int tsWfScrollHz;
unsigned int tsKnobHz;
rigstate* rigState = Q_NULLPTR;
QMediaDevices mediaDevices;
SERVERCONFIG serverConfig;
void serverAddUserLine(const QString& user, const QString& pass, const int& type);
};
Q_DECLARE_METATYPE(struct rigCapabilities)
Q_DECLARE_METATYPE(struct freqt)
Q_DECLARE_METATYPE(struct mode_info)
Q_DECLARE_METATYPE(struct udpPreferences)
Q_DECLARE_METATYPE(struct rigStateStruct)
Q_DECLARE_METATYPE(struct audioPacket)
Q_DECLARE_METATYPE(struct audioSetup)
Q_DECLARE_METATYPE(struct timekind)
@ -859,6 +885,7 @@ Q_DECLARE_METATYPE(struct datekind)
Q_DECLARE_METATYPE(enum rigInput)
Q_DECLARE_METATYPE(enum meterKind)
Q_DECLARE_METATYPE(enum spectrumMode)
Q_DECLARE_METATYPE(rigstate*)
#endif // WFMAIN_H

2385
wfmain.ui

Plik diff jest za duży Load Diff

Wyświetl plik

@ -156,7 +156,6 @@ SOURCES += main.cpp\
audiohandler.cpp \
calibrationwindow.cpp \
satellitesetup.cpp \
udpserversetup.cpp \
udpserver.cpp \
meter.cpp \
qledlabel.cpp \
@ -178,7 +177,6 @@ HEADERS += wfmain.h \
audiohandler.h \
calibrationwindow.h \
satellitesetup.h \
udpserversetup.h \
udpserver.h \
packettypes.h \
meter.h \

Wyświetl plik

@ -7,18 +7,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wfview", "wfview.vcxproj",
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x64.ActiveCfg = Debug|x64
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x64.Build.0 = Debug|x64
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x86.ActiveCfg = Debug|Win32
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x86.Build.0 = Debug|Win32
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x64.ActiveCfg = Release|x64
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x64.Build.0 = Release|x64
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x86.ActiveCfg = Release|Win32
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x86.Build.0 = Release|Win32
EndGlobalSection

Wyświetl plik

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|x64">
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
@ -16,9 +16,10 @@
<Keyword>QtVS_v304</Keyword>
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild></PropertyGroup>
<QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PlatformToolset>v142</PlatformToolset>
<OutputDirectory>release\</OutputDirectory>
<ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage>
@ -27,7 +28,7 @@
<IntermediateDirectory>release\</IntermediateDirectory>
<PrimaryOutput>wfview</PrimaryOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<PlatformToolset>v142</PlatformToolset>
<OutputDirectory>debug\</OutputDirectory>
<ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage>
@ -36,42 +37,71 @@
<IntermediateDirectory>debug\</IntermediateDirectory>
<PrimaryOutput>wfview</PrimaryOutput>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /><Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"><Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." /></Target>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
</Target>
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /><ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"><Import Project="$(QtMsBuild)\qt_defaults.props" /></ImportGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"><OutDir>debug\</OutDir><IntDir>debug\</IntDir><TargetName>wfview</TargetName><IgnoreImportLibrary>true</IgnoreImportLibrary><PreLinkEventUseInBuild>true</PreLinkEventUseInBuild></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"><OutDir>release\</OutDir><IntDir>release\</IntDir><TargetName>wfview</TargetName><IgnoreImportLibrary>true</IgnoreImportLibrary><LinkIncremental>false</LinkIncremental><PreLinkEventUseInBuild>true</PreLinkEventUseInBuild></PropertyGroup><PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"><QtInstall>msvc2019_64_v62</QtInstall><QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules></PropertyGroup><PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"><QtInstall>msvc2019_64_v62</QtInstall><QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules></PropertyGroup><ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"><Import Project="$(QtMsBuild)\qt.props" /></ImportGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<PropertyGroup Label="UserMacros" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
<Import Project="$(QtMsBuild)\qt_defaults.props" />
</ImportGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>debug\</OutDir>
<IntDir>debug\</IntDir>
<TargetName>wfview</TargetName>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>release\</OutDir>
<IntDir>release\</IntDir>
<TargetName>wfview</TargetName>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<QtInstall>msvc2019</QtInstall>
<QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<QtInstall>msvc2019</QtInstall>
<QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules>
</PropertyGroup>
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')">
<Import Project="$(QtMsBuild)\qt.props" />
</ImportGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.;..\qcustomplot;..\opus\include;resampler;release;/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -utf-8 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions>
<AssemblerListingLocation>release\</AssemblerListingLocation>
<BrowseInformation>false</BrowseInformation>
<DebugInformationFormat>None</DebugInformationFormat>
<DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<ExceptionHandling>Sync</ExceptionHandling>
<LanguageStandard>stdcpp17</LanguageStandard>
<ObjectFileName>release\</ObjectFileName>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_USE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="395469d";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="62771f6";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<ProgramDataBaseFileName></ProgramDataBaseFileName>
<ProgramDataBaseFileName>
</ProgramDataBaseFileName>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation></ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>..\qcustomplot\qcustomplot2.lib;..\opus\win32\VS2015\x64\Release\opus.lib;$(QTDIR)\lib\Qt6Multimedia.lib;$(QTDIR)\lib\Qt6PrintSupport.lib;$(QTDIR)\lib\Qt6Widgets.lib;$(QTDIR)\lib\Qt6Gui.lib;$(QTDIR)\lib\Qt6SerialPort.lib;$(QTDIR)\lib\Qt6Network.lib;$(QTDIR)\lib\Qt6Core.lib;$(QTDIR)\lib\Qt6EntryPoint.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\opus\win32\VS2015\x64\Release;..\qcustomplot;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>..\opus\win32\VS2015\Win32\Release\opus.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\opus\win32\VS2015\Win32\Release;C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<GenerateDebugInformation>false</GenerateDebugInformation>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
@ -87,35 +117,50 @@
<WarningLevel>0</WarningLevel>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_USE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"395469d\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"62771f6\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<PreLinkEvent>
<Command>copy /Y ..\qcustomplot\qcustomplot2.dll release</Command>
<Message>copy /Y ..\qcustomplot\qcustomplot2.dll release</Message>
</PreLinkEvent>
<QtMoc><CompilerFlavor>msvc</CompilerFlavor><Include>./$(Configuration)/moc_predefs.h</Include><ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription><DynamicSource>output</DynamicSource><QtMocDir>$(Configuration)</QtMocDir><QtMocFileName>moc_%(Filename).cpp</QtMocFileName></QtMoc><QtRcc><Compression>default</Compression><ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription><QtRccDir>$(Configuration)</QtRccDir><QtRccFileName>qrc_%(Filename).cpp</QtRccFileName></QtRcc><QtUic><ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription><QtUicDir>$(ProjectDir)</QtUicDir><QtUicFileName>ui_%(Filename).h</QtUicFileName></QtUic></ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<QtMoc>
<CompilerFlavor>msvc</CompilerFlavor>
<Include>./$(Configuration)/moc_predefs.h</Include>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<DynamicSource>output</DynamicSource>
<QtMocDir>$(Configuration)</QtMocDir>
<QtMocFileName>moc_%(Filename).cpp</QtMocFileName>
</QtMoc>
<QtRcc>
<Compression>default</Compression>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<QtRccDir>$(Configuration)</QtRccDir>
<QtRccFileName>qrc_%(Filename).cpp</QtRccFileName>
</QtRcc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<QtUicDir>$(ProjectDir)</QtUicDir>
<QtUicFileName>ui_%(Filename).h</QtUicFileName>
</QtUic>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.;..\qcustomplot;..\opus\include;resampler;debug;/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -utf-8 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions>
<AssemblerListingLocation>debug\</AssemblerListingLocation>
<BrowseInformation>false</BrowseInformation>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<ExceptionHandling>Sync</ExceptionHandling>
<LanguageStandard>stdcpp17</LanguageStandard>
<ObjectFileName>debug\</ObjectFileName>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_USE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="395469d";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="62771f6";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation></ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>..\qcustomplot\qcustomplotd2.lib;..\opus\win32\VS2015\x64\Debug\opus.lib;$(QTDIR)\lib\Qt6Multimediad.lib;$(QTDIR)\lib\Qt6PrintSupportd.lib;$(QTDIR)\lib\Qt6Widgetsd.lib;$(QTDIR)\lib\Qt6Guid.lib;$(QTDIR)\lib\Qt6SerialPortd.lib;$(QTDIR)\lib\Qt6Networkd.lib;$(QTDIR)\lib\Qt6Cored.lib;$(QTDIR)\lib\Qt6EntryPointd.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\opus\win32\VS2015\x64\Debug;..\qcustomplot;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>..\opus\win32\VS2015\Win32\Debug\opus.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\opus\win32\VS2015\Win32\Debug;C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions>
<DataExecutionPrevention>true</DataExecutionPrevention>
<GenerateDebugInformation>true</GenerateDebugInformation>
@ -131,13 +176,28 @@
<WarningLevel>0</WarningLevel>
</Midl>
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WIN64;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_USE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"395469d\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"62771f6\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<PreLinkEvent>
<Command>copy /Y ..\qcustomplot\qcustomplotd2.dll debug</Command>
<Message>copy /Y ..\qcustomplot\qcustomplotd2.dll debug</Message>
</PreLinkEvent>
<QtMoc><CompilerFlavor>msvc</CompilerFlavor><Include>./$(Configuration)/moc_predefs.h</Include><ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription><DynamicSource>output</DynamicSource><QtMocDir>$(Configuration)</QtMocDir><QtMocFileName>moc_%(Filename).cpp</QtMocFileName></QtMoc><QtRcc><Compression>default</Compression><ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription><QtRccDir>$(Configuration)</QtRccDir><QtRccFileName>qrc_%(Filename).cpp</QtRccFileName></QtRcc><QtUic><ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription><QtUicDir>$(ProjectDir)</QtUicDir><QtUicFileName>ui_%(Filename).h</QtUicFileName></QtUic></ItemDefinitionGroup>
<QtMoc>
<CompilerFlavor>msvc</CompilerFlavor>
<Include>./$(Configuration)/moc_predefs.h</Include>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<DynamicSource>output</DynamicSource>
<QtMocDir>$(Configuration)</QtMocDir>
<QtMocFileName>moc_%(Filename).cpp</QtMocFileName>
</QtMoc>
<QtRcc>
<Compression>default</Compression>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<QtRccDir>$(Configuration)</QtRccDir>
<QtRccFileName>qrc_%(Filename).cpp</QtRccFileName>
</QtRcc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<QtUicDir>$(ProjectDir)</QtUicDir>
<QtUicFileName>ui_%(Filename).h</QtUicFileName>
</QtUic>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="aboutbox.cpp" />
<ClCompile Include="audiohandler.cpp" />
@ -148,6 +208,7 @@
<ClCompile Include="main.cpp" />
<ClCompile Include="meter.cpp" />
<ClCompile Include="pttyhandler.cpp" />
<ClCompile Include="..\qcustomplot\qcustomplot.cpp" />
<ClCompile Include="qledlabel.cpp" />
<ClCompile Include="repeatersetup.cpp" />
<ClCompile Include="resampler\resample.c" />
@ -164,315 +225,84 @@
</ItemGroup>
<ItemGroup>
<QtMoc Include="aboutbox.h">
</QtMoc>
<ClInclude Include="resampler\arch.h" />
<QtMoc Include="audiohandler.h">
</QtMoc>
<ClInclude Include="audiotaper.h" />
<QtMoc Include="calibrationwindow.h">
</QtMoc>
<QtMoc Include="commhandler.h">
</QtMoc>
<ClInclude Include="freqmemory.h" />
<ClInclude Include="logcategories.h" />
<QtMoc Include="meter.h">
</QtMoc>
<ClInclude Include="packettypes.h" />
<QtMoc Include="pttyhandler.h">
</QtMoc>
<QtMoc Include="..\qcustomplot\qcustomplot.h">
</QtMoc>
<QtMoc Include="qledlabel.h">
</QtMoc>
<ClInclude Include="repeaterattributes.h" />
<QtMoc Include="repeatersetup.h">
</QtMoc>
<ClInclude Include="resampler\resample_sse.h" />
<QtMoc Include="rigcommander.h">
</QtMoc>
<QtMoc Include="rigctld.h">
</QtMoc>
<ClInclude Include="rigidentities.h" />
<ClInclude Include="rigstate.h" />
<ClInclude Include="ring\ring.h" />
<QtMoc Include="satellitesetup.h">
</QtMoc>
<ClInclude Include="resampler\speex_resampler.h" />
<QtMoc Include="transceiveradjustments.h">
</QtMoc>
<QtMoc Include="udphandler.h">
</QtMoc>
<QtMoc Include="udpserver.h">
</QtMoc>
<QtMoc Include="udpserversetup.h">
</QtMoc>
<ClInclude Include="ulaw.h" />
<QtMoc Include="wfmain.h">
</QtMoc>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -faligned-new -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;debug\moc_predefs.h</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Generate moc_predefs.h</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">debug\moc_predefs.h;%(Outputs)</Outputs>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -faligned-new -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;debug\moc_predefs.h</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generate moc_predefs.h</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\moc_predefs.h;%(Outputs)</Outputs>
</CustomBuild>
<CustomBuild Include="release\moc_predefs.h.cbt">
<FileType>Document</FileType>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -permissive- -Zc:__cplusplus -Zc:externConstexpr -fvisibility=hidden -fvisibility-inlines-hidden -faligned-new -O2 -MD -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;release\moc_predefs.h</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Generate moc_predefs.h</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">release\moc_predefs.h;%(Outputs)</Outputs>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -fvisibility=hidden -fvisibility-inlines-hidden -faligned-new -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2&gt;NUL &gt;release\moc_predefs.h</Command>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generate moc_predefs.h</Message>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\moc_predefs.h;%(Outputs)</Outputs>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<QtUic Include="aboutbox.ui">
</QtUic>
<QtUic Include="calibrationwindow.ui">
</QtUic>
<QtUic Include="repeatersetup.ui">
</QtUic>
<QtUic Include="satellitesetup.ui">
</QtUic>
<QtUic Include="transceiveradjustments.ui">
</QtUic>
<QtUic Include="udpserversetup.ui">
</QtUic>
<QtUic Include="wfmain.ui">
</QtUic>
</ItemGroup>
<ItemGroup>
@ -506,30 +336,16 @@
<None Include="qdarkstyle\rc\radio_unchecked_disabled.png" />
<None Include="qdarkstyle\rc\radio_unchecked_focus.png" />
<QtRcc Include="resources\resources.qrc">
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">resources</InitFuncName><InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">resources</InitFuncName></QtRcc>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">resources</InitFuncName>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">resources</InitFuncName>
</QtRcc>
<None Include="qdarkstyle\rc\right_arrow.png" />
<None Include="qdarkstyle\rc\right_arrow_disabled.png" />
<None Include="qdarkstyle\rc\sizegrip.png" />
<QtRcc Include="qdarkstyle\style.qrc">
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">style</InitFuncName><InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">style</InitFuncName></QtRcc>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">style</InitFuncName>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">style</InitFuncName>
</QtRcc>
<None Include="qdarkstyle\style.qss" />
<None Include="qdarkstyle\rc\stylesheet-branch-end.png" />
<None Include="qdarkstyle\rc\stylesheet-branch-more.png" />
@ -548,6 +364,9 @@
<ItemGroup>
<ResourceCompile Include=".\wfview_resource.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /><ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')"><Import Project="$(QtMsBuild)\qt.targets" /></ImportGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
<Import Project="$(QtMsBuild)\qt.targets" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets" />
</Project>

Wyświetl plik

@ -117,9 +117,6 @@
<ClCompile Include="udpserver.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="udpserversetup.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="wfmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@ -197,9 +194,6 @@
<QtMoc Include="udpserver.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="udpserversetup.h">
<Filter>Header Files</Filter>
</QtMoc>
<ClInclude Include="ulaw.h">
<Filter>Header Files</Filter>
</ClInclude>

Wyświetl plik

@ -3,16 +3,13 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(QTDIR)\bin%3bC:\QT\5.15.2\MSVC2019\bin%3b$(PATH)</LocalDebuggerEnvironment>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<QtLastBackgroundBuild>2021-11-18T12:40:24.8966742Z</QtLastBackgroundBuild>
<QtLastBackgroundBuild>2021-11-22T18:24:33.3752914Z</QtLastBackgroundBuild>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<QtLastBackgroundBuild>2021-11-22T18:24:41.6960953Z</QtLastBackgroundBuild>
</PropertyGroup>
</Project>