kopia lustrzana https://gitlab.com/eliggett/wfview
Merge remote-tracking branch 'origin/master' into rigs
commit
c3bdcf2287
|
@ -1,6 +0,0 @@
|
|||
[submodule "opus-tools"]
|
||||
path = opus-tools
|
||||
url = https://github.com/xiph/opus-tools.git
|
||||
[submodule "rtaudio"]
|
||||
path = rtaudio
|
||||
url = https://github.com/thestk/rtaudio.git
|
Plik binarny nie jest wyświetlany.
128
CHANGELOG
128
CHANGELOG
|
@ -1,5 +1,133 @@
|
|||
# CHANGELOG
|
||||
|
||||
- 20211022
|
||||
|
||||
Don't block until audio buffer has space
|
||||
|
||||
Bit of tidying
|
||||
|
||||
- 20211020
|
||||
|
||||
Tidy-up server shutdown
|
||||
|
||||
Trying to find cause of lockup when client disappears
|
||||
|
||||
- 20211006
|
||||
|
||||
Send TX/Freq changes multiple times with rigctld
|
||||
|
||||
bumped to 1.2d hopefully last testversion before 1.20
|
||||
- 202109022
|
||||
|
||||
Remove duplicate setPriority()
|
||||
|
||||
Fix typo
|
||||
|
||||
Add keepalive for linux/mac pty
|
||||
|
||||
Fix alignment of rigname in taskbar
|
||||
|
||||
Only send RX antenna byte to rig when it has an RX antenna option in rigCaps
|
||||
|
||||
|
||||
- 20210907
|
||||
|
||||
Make rigctld state work for USB connected rigs
|
||||
|
||||
- 20210831
|
||||
|
||||
added 25 kHz step for tuning
|
||||
|
||||
- 20210829
|
||||
|
||||
Experimental support for split mode in rigctld
|
||||
|
||||
Ignore control levels that we don't currently support
|
||||
|
||||
Add better detection of ci-v transceive disable
|
||||
|
||||
- 20210827
|
||||
|
||||
Add saving of meter2 state
|
||||
|
||||
- 20210823
|
||||
|
||||
Set audio thread priority in the correct place!
|
||||
|
||||
Now with dual meters for everyone!
|
||||
|
||||
- 20210820
|
||||
|
||||
Clear Center readout as well.
|
||||
|
||||
Fixed issue where the "none" selection didn't work quite right. Also
|
||||
fixed the T/R meter switching to clear out invalid readings.
|
||||
|
||||
|
||||
Set audio threads to be realtime priority
|
||||
|
||||
- 20210817
|
||||
|
||||
dual meter support/WHATSNEW
|
||||
|
||||
Current scale tic marks on both sides now!
|
||||
|
||||
More meter work, fixed some scales and added labels.
|
||||
|
||||
Better meter fonts
|
||||
|
||||
- 20210815
|
||||
|
||||
Fix for left over CIV client on server
|
||||
|
||||
Improve detection of unsupported codec.
|
||||
|
||||
- 20210814
|
||||
|
||||
Fix for Opus TX audio
|
||||
|
||||
txrate logging wrong
|
||||
|
||||
More warning removal!
|
||||
|
||||
More commenting in rigctld.h
|
||||
|
||||
Is this going to fix 8 bit audio?
|
||||
|
||||
Comment unused structs from rigctld
|
||||
|
||||
All audio codecs now work in both directions!
|
||||
|
||||
Update audiohandler.cpp
|
||||
|
||||
more 8bit fixes!
|
||||
|
||||
ulaw encoding test
|
||||
|
||||
8 bit encoding fix
|
||||
|
||||
Another issue with 8 bit audio
|
||||
|
||||
Try again to remove debugging!
|
||||
|
||||
Revert "Remove extra opus debugging" This reverts commit da53f5371bbeb35b10cbb831b83b74e1bdd771f9.
|
||||
|
||||
Remove extra opus debugging
|
||||
|
||||
Move opus init
|
||||
|
||||
Add some debugging for decoder
|
||||
|
||||
Use radio samplerate for opus
|
||||
|
||||
Remove big/little endian conversion
|
||||
|
||||
More Opus fixes
|
||||
|
||||
Update audiohandler.cpp
|
||||
|
||||
Try to fix Opus 2-channel
|
||||
|
||||
- 20210809
|
||||
|
||||
Add constants to make parsing (hopefully) easier
|
||||
|
|
9
WHATSNEW
9
WHATSNEW
|
@ -7,4 +7,13 @@ The following highlights are in this 1.x-release:
|
|||
added "do not ask again" for switching off rig and exiting wfview
|
||||
added opus as audio transport
|
||||
dual meter support
|
||||
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
|
||||
|
|
|
@ -12,7 +12,7 @@ aboutbox::aboutbox(QWidget *parent) :
|
|||
ui->logoBtn->setIcon(QIcon(":resources/wfview.png"));
|
||||
ui->logoBtn->setStyleSheet("Text-align:left");
|
||||
|
||||
ui->topText->setText("wfview version 1.1");
|
||||
ui->topText->setText("wfview version 1.2d");
|
||||
|
||||
QString head = QString("<html><head></head><body>");
|
||||
QString copyright = QString("Copyright 2017-2021 Elliott H. Liggett, W6EL. All rights reserved. wfview source code is <a href=\"https://gitlab.com/eliggett/wfview/-/blob/master/LICENSE\">licensed</a> under the GNU GPLv3.");
|
||||
|
|
|
@ -451,13 +451,13 @@ qint64 audioHandler::writeData(const char* data, qint64 nBytes)
|
|||
tempBuf.sent = tempBuf.sent + send;
|
||||
}
|
||||
else {
|
||||
ringBuf->write(tempBuf);
|
||||
/*
|
||||
//ringBuf->write(tempBuf);
|
||||
|
||||
if (!ringBuf->try_write(tempBuf))
|
||||
{
|
||||
qDebug(logAudio()) << "outgoing audio buffer full!";
|
||||
break;
|
||||
} */
|
||||
}
|
||||
tempBuf.data.clear();
|
||||
tempBuf.sent = 0;
|
||||
}
|
||||
|
|
34
meter.cpp
34
meter.cpp
|
@ -48,13 +48,24 @@ meter::meter(QWidget *parent) : QWidget(parent)
|
|||
|
||||
}
|
||||
|
||||
void meter::setMeterType(meterKind type)
|
||||
void meter::clearMeterOnPTTtoggle()
|
||||
{
|
||||
if(type == meterType)
|
||||
return;
|
||||
// When a meter changes type, such as the fixed S -- TxPo meter,
|
||||
// there is automatic clearing. However, some meters do not switch on thier own,
|
||||
// and thus we are providing this clearing method. We are careful
|
||||
// not to clear meters that don't make sense to clear (such as Vd and Id)
|
||||
|
||||
meterType = type;
|
||||
// clear average and peak vectors:
|
||||
|
||||
if( (meterType == meterALC) || (meterType == meterSWR)
|
||||
|| (meterType == meterComp) || (meterType == meterTxMod)
|
||||
|| (meterType == meterCenter ))
|
||||
{
|
||||
clearMeter();
|
||||
}
|
||||
}
|
||||
|
||||
void meter::clearMeter()
|
||||
{
|
||||
current = 0;
|
||||
average = 0;
|
||||
peak = 0;
|
||||
|
@ -70,6 +81,16 @@ void meter::setMeterType(meterKind type)
|
|||
update();
|
||||
}
|
||||
|
||||
void meter::setMeterType(meterKind type)
|
||||
{
|
||||
if(type == meterType)
|
||||
return;
|
||||
|
||||
meterType = type;
|
||||
// clear average and peak vectors:
|
||||
this->clearMeter();
|
||||
}
|
||||
|
||||
meterKind meter::getMeterType()
|
||||
{
|
||||
return meterType;
|
||||
|
@ -140,6 +161,9 @@ void meter::paintEvent(QPaintEvent *)
|
|||
peakRedLevel = 100;
|
||||
drawScaleComp(&painter);
|
||||
break;
|
||||
case meterNone:
|
||||
return;
|
||||
break;
|
||||
default:
|
||||
label = "DN";
|
||||
peakRedLevel = 241;
|
||||
|
|
4
meter.h
4
meter.h
|
@ -24,6 +24,8 @@ public slots:
|
|||
void updateDrawing(int num);
|
||||
void setLevels(int current, int peak, int average);
|
||||
void setLevel(int current);
|
||||
void clearMeterOnPTTtoggle();
|
||||
void clearMeter();
|
||||
void setMeterType(meterKind type);
|
||||
void setMeterShortString(QString);
|
||||
QString getMeterShortString();
|
||||
|
@ -47,8 +49,6 @@ private:
|
|||
std::vector<unsigned char> avgLevels;
|
||||
std::vector<unsigned char> peakLevels;
|
||||
|
||||
|
||||
|
||||
int peakRedLevel=0;
|
||||
bool drawLabels = true;
|
||||
int mXstart = 0; // Starting point for S=0.
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
Subproject commit ae5d6d59e82ef40300a4dece7897499685f87184
|
|
@ -8,6 +8,7 @@
|
|||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
// Copyright 2017-2021 Elliott H. Liggett & Phil Taylor
|
||||
|
@ -72,6 +73,9 @@ void pttyHandler::openPort()
|
|||
// we're good!
|
||||
qInfo(logSerial()) << "Opened pseudoterminal, slave name :" << ptsname(ptfd);
|
||||
|
||||
// Open the slave device to keep alive.
|
||||
ptKeepAlive = open(ptsname(ptfd), O_RDONLY);
|
||||
|
||||
ptReader = new QSocketNotifier(ptfd, QSocketNotifier::Read, this);
|
||||
connect(ptReader, &QSocketNotifier::activated,
|
||||
this, &pttyHandler::receiveDataIn);
|
||||
|
@ -217,9 +221,8 @@ void pttyHandler::receiveDataIn(int fd) {
|
|||
civId = (quint8)inPortData[lastFE + 2];
|
||||
qInfo(logSerial()) << "pty remote CI-V changed:" << hex << (quint8)civId;
|
||||
}
|
||||
|
||||
// filter 1A 05 01 12/27 = C-IV transceive command before forwarding on.
|
||||
if (inPortData.contains(QByteArrayLiteral("\x1a\x05\x01\x12")) || inPortData.contains(QByteArrayLiteral("\x1a\x05\x01\x27")))
|
||||
// filter C-IV transceive command before forwarding on.
|
||||
if (inPortData.contains(rigCaps.transceiveCommand))
|
||||
{
|
||||
//qInfo(logSerial()) << "Filtered transceive command";
|
||||
//printHex(inPortData, false, true);
|
||||
|
@ -283,6 +286,10 @@ void pttyHandler::closePort()
|
|||
{
|
||||
QFile::remove(portName);
|
||||
}
|
||||
|
||||
if (ptKeepAlive > 0) {
|
||||
close(ptKeepAlive);
|
||||
}
|
||||
#endif
|
||||
isConnected = false;
|
||||
}
|
||||
|
@ -330,4 +337,10 @@ void pttyHandler::printHex(const QByteArray& pdata, bool printVert, bool printHo
|
|||
qDebug(logSerial()) << "----- End hex dump -----";
|
||||
}
|
||||
|
||||
void pttyHandler::receiveFoundRigID(rigCapabilities rigCaps) {
|
||||
this->rigCaps = rigCaps;
|
||||
qInfo(logSerial) << "Received rigCapabilities for" << rigCaps.modelName;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#include <QSocketNotifier>
|
||||
#include <QtSerialPort/QSerialPort>
|
||||
|
||||
#include "rigidentities.h"
|
||||
|
||||
// This class abstracts the comm port in a useful way and connects to
|
||||
// the command creator and command parser.
|
||||
|
||||
|
@ -27,6 +29,7 @@ private slots:
|
|||
void receiveDataIn(int fd); // from physical port
|
||||
void receiveDataFromRigToPtty(const QByteArray& data);
|
||||
void debugThis();
|
||||
void receiveFoundRigID(rigCapabilities rigCaps);
|
||||
|
||||
signals:
|
||||
void haveTextMessage(QString message); // status, debug only
|
||||
|
@ -59,6 +62,7 @@ private:
|
|||
bool rolledBack;
|
||||
|
||||
int ptfd; // pseudo-terminal file desc.
|
||||
int ptKeepAlive=0; // Used to keep the pty alive after client disconects.
|
||||
bool havePt;
|
||||
QString ptDevSlave;
|
||||
|
||||
|
@ -66,8 +70,9 @@ private:
|
|||
mutable QMutex mutex;
|
||||
void printHex(const QByteArray& pdata, bool printVert, bool printHoriz);
|
||||
bool disableTransceive = false;
|
||||
QSocketNotifier *ptReader = nullptr;
|
||||
QSocketNotifier *ptReader = Q_NULLPTR;
|
||||
quint8 civId=0;
|
||||
rigCapabilities rigCaps;
|
||||
};
|
||||
|
||||
#endif // PTTYHANDLER_H
|
||||
|
|
|
@ -61,7 +61,6 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu
|
|||
|
||||
// data from the ptty to the rig:
|
||||
connect(ptty, SIGNAL(haveDataFromPort(QByteArray)), comm, SLOT(receiveDataFromUserToRig(QByteArray)));
|
||||
|
||||
// data from the program to the comm port:
|
||||
connect(this, SIGNAL(dataForComm(QByteArray)), comm, SLOT(receiveDataFromUserToRig(QByteArray)));
|
||||
|
||||
|
@ -73,7 +72,11 @@ void rigCommander::commSetup(unsigned char rigCivAddr, QString rigSerialPort, qu
|
|||
|
||||
connect(this, SIGNAL(getMoreDebug()), comm, SLOT(debugThis()));
|
||||
connect(this, SIGNAL(getMoreDebug()), ptty, SLOT(debugThis()));
|
||||
|
||||
connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities)));
|
||||
|
||||
emit commReady();
|
||||
sendState(); // Send current rig state to rigctld
|
||||
|
||||
}
|
||||
|
||||
|
@ -137,6 +140,8 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, aud
|
|||
connect(ptty, SIGNAL(haveSerialPortError(QString, QString)), this, SLOT(handleSerialPortError(QString, QString)));
|
||||
connect(this, SIGNAL(getMoreDebug()), ptty, SLOT(debugThis()));
|
||||
|
||||
connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities)));
|
||||
|
||||
emit haveAfGain(rxSetup.localAFgain);
|
||||
}
|
||||
|
||||
|
@ -556,18 +561,24 @@ void rigCommander::getSpectrumMode()
|
|||
prepDataAndSend(specModePayload);
|
||||
}
|
||||
|
||||
void rigCommander::setFrequency(freqt freq)
|
||||
void rigCommander::setFrequency(unsigned char vfo, freqt freq)
|
||||
{
|
||||
//QByteArray freqPayload = makeFreqPayload(freq);
|
||||
QByteArray freqPayload = makeFreqPayload(freq);
|
||||
QByteArray cmdPayload;
|
||||
|
||||
cmdPayload.append(freqPayload);
|
||||
cmdPayload.prepend('\x00');
|
||||
|
||||
if (vfo == 0) {
|
||||
rigState.vfoAFreq = freq;
|
||||
cmdPayload.prepend('\x00');
|
||||
}
|
||||
else
|
||||
{
|
||||
rigState.vfoBFreq = freq;
|
||||
cmdPayload.prepend(vfo);
|
||||
cmdPayload.prepend('\x25');
|
||||
}
|
||||
//printHex(cmdPayload, false, true);
|
||||
prepDataAndSend(cmdPayload);
|
||||
rigState.vfoAFreq = freq;
|
||||
}
|
||||
|
||||
QByteArray rigCommander::makeFreqPayload(freqt freq)
|
||||
|
@ -1351,6 +1362,9 @@ void rigCommander::parseLevels()
|
|||
emit haveSql(level);
|
||||
rigState.squelch = level;
|
||||
break;
|
||||
case '\x09':
|
||||
// CW Pitch - ignore for now
|
||||
break;
|
||||
case '\x0A':
|
||||
// TX RF level
|
||||
emit haveTxPower(level);
|
||||
|
@ -1361,11 +1375,20 @@ void rigCommander::parseLevels()
|
|||
emit haveMicGain(level);
|
||||
rigState.micGain = level;
|
||||
break;
|
||||
case '\x0C':
|
||||
// CW Keying Speed - ignore for now
|
||||
break;
|
||||
case '\x0D':
|
||||
// Notch filder setting - ignore for now
|
||||
break;
|
||||
case '\x0E':
|
||||
// compressor level
|
||||
emit haveCompLevel(level);
|
||||
rigState.compLevel = level;
|
||||
break;
|
||||
case '\x12':
|
||||
// NB level - ignore for now
|
||||
break;
|
||||
case '\x15':
|
||||
// monitor level
|
||||
emit haveMonitorLevel(level);
|
||||
|
@ -2883,6 +2906,8 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(band630m);
|
||||
rigCaps.bands.push_back(band2200m);
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x71");
|
||||
|
||||
break;
|
||||
case modelR8600:
|
||||
rigCaps.modelName = QString("IC-R8600");
|
||||
|
@ -2918,6 +2943,7 @@ void rigCommander::determineRigCaps()
|
|||
createMode(modeNXDN_VN, 0x19, "NXDN-VN"), createMode(modeNXDN_N, 0x20, "NXDN-N"),
|
||||
createMode(modeDCR, 0x21, "DCR")});
|
||||
rigCaps.scopeCenterSpans.insert(rigCaps.scopeCenterSpans.end(), {createScopeCenter(cs1M, "±1M"), createScopeCenter(cs2p5M, "±2.5M")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x92");
|
||||
break;
|
||||
case model9700:
|
||||
rigCaps.modelName = QString("IC-9700");
|
||||
|
@ -2946,6 +2972,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeDV, 0x17, "DV"),
|
||||
createMode(modeDD, 0x22, "DD")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x27");
|
||||
break;
|
||||
case model910h:
|
||||
rigCaps.modelName = QString("IC-910H");
|
||||
|
@ -2968,6 +2995,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bsr[band70cm] = 0x02;
|
||||
rigCaps.bsr[band2m] = 0x01;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x58");
|
||||
break;
|
||||
case model7600:
|
||||
rigCaps.modelName = QString("IC-7600");
|
||||
|
@ -2992,6 +3020,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"),
|
||||
createMode(modePSK_R, 0x13, "PSK-R")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x97");
|
||||
break;
|
||||
case model7610:
|
||||
rigCaps.modelName = QString("IC-7610");
|
||||
|
@ -3023,6 +3052,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(band2200m);
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.hasRXAntenna = true;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x12");
|
||||
break;
|
||||
case model7850:
|
||||
rigCaps.modelName = QString("IC-785x");
|
||||
|
@ -3055,6 +3085,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"),
|
||||
createMode(modePSK_R, 0x13, "PSK-R")});
|
||||
rigCaps.hasRXAntenna = true;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x55");
|
||||
break;
|
||||
case model705:
|
||||
rigCaps.modelName = QString("IC-705");
|
||||
|
@ -3091,6 +3122,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeWFM, 0x06, "WFM"),
|
||||
createMode(modeDV, 0x17, "DV")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x31");
|
||||
break;
|
||||
case model7000:
|
||||
rigCaps.modelName = QString("IC-7000");
|
||||
|
@ -3113,6 +3145,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bsr[band70cm] = 0x12;
|
||||
rigCaps.bsr[bandGen] = 0x13;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x92");
|
||||
break;
|
||||
case model7410:
|
||||
rigCaps.modelName = QString("IC-7410");
|
||||
|
@ -3134,6 +3167,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(bandGen);
|
||||
rigCaps.bsr[bandGen] = 0x11;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x40");
|
||||
break;
|
||||
case model7100:
|
||||
rigCaps.modelName = QString("IC-7100");
|
||||
|
@ -3161,6 +3195,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeWFM, 0x06, "WFM"),
|
||||
createMode(modeDV, 0x17, "DV")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x95");
|
||||
break;
|
||||
case model7200:
|
||||
rigCaps.modelName = QString("IC-7200");
|
||||
|
@ -3181,7 +3216,8 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(bandGen);
|
||||
rigCaps.bsr[bandGen] = 0x11;
|
||||
rigCaps.modes = commonModes;
|
||||
break;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x03\x48");
|
||||
break;
|
||||
case model7700:
|
||||
rigCaps.modelName = QString("IC-7700");
|
||||
rigCaps.rigctlModel = 3062;
|
||||
|
@ -3207,6 +3243,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"),
|
||||
createMode(modePSK_R, 0x13, "PSK-R")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x95");
|
||||
break;
|
||||
case model706:
|
||||
rigCaps.modelName = QString("IC-706");
|
||||
|
@ -3226,6 +3263,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(bandGen);
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), createMode(modeWFM, 0x06, "WFM"));
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
|
||||
break;
|
||||
case model718:
|
||||
rigCaps.modelName = QString("IC-718");
|
||||
|
@ -3249,6 +3287,7 @@ void rigCommander::determineRigCaps()
|
|||
createMode(modeCW, 0x03, "CW"), createMode(modeCW_R, 0x07, "CW-R"),
|
||||
createMode(modeRTTY, 0x04, "RTTY"), createMode(modeRTTY_R, 0x08, "RTTY-R")
|
||||
};
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
|
||||
break;
|
||||
case model736:
|
||||
rigCaps.modelName = QString("IC-736");
|
||||
|
@ -3288,6 +3327,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(bandGen);
|
||||
rigCaps.bsr[bandGen] = 0x11;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
|
||||
break;
|
||||
case model756proii:
|
||||
rigCaps.modelName = QString("IC-756 Pro II");
|
||||
|
@ -3307,6 +3347,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(bandGen);
|
||||
rigCaps.bsr[bandGen] = 0x11;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
|
||||
break;
|
||||
case model756proiii:
|
||||
rigCaps.modelName = QString("IC-756 Pro III");
|
||||
|
@ -3326,6 +3367,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.push_back(bandGen);
|
||||
rigCaps.bsr[bandGen] = 0x11;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
|
||||
break;
|
||||
case model9100:
|
||||
rigCaps.modelName = QString("IC-9100");
|
||||
|
@ -3374,6 +3416,7 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
|
||||
rigCaps.bands.insert(rigCaps.bands.end(), {band23cm, band4m, band630m, band2200m, bandGen});
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x00\x00");
|
||||
qInfo(logRig()) << "Found unknown rig: 0x" << QString("%1").arg(rigCaps.modelID, 2, 16);
|
||||
break;
|
||||
}
|
||||
|
@ -3809,7 +3852,9 @@ void rigCommander::setAntenna(unsigned char ant, bool rx)
|
|||
{
|
||||
QByteArray payload("\x12");
|
||||
payload.append(ant);
|
||||
payload.append((unsigned char)rx); // 0x00 = use for TX and RX
|
||||
if (rigCaps.hasRXAntenna) {
|
||||
payload.append((unsigned char)rx); // 0x00 = use for TX and RX
|
||||
}
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
|
|
|
@ -171,7 +171,7 @@ public slots:
|
|||
void getScopeMode();
|
||||
|
||||
// Frequency, Mode, BSR:
|
||||
void setFrequency(freqt freq);
|
||||
void setFrequency(unsigned char vfo, freqt freq);
|
||||
void getFrequency();
|
||||
void setMode(unsigned char mode, unsigned char modeFilter);
|
||||
void setMode(mode_info);
|
||||
|
|
86
rigctld.cpp
86
rigctld.cpp
|
@ -55,10 +55,11 @@ rigCtlD::~rigCtlD()
|
|||
qInfo(logRigCtlD()) << "closing rigctld";
|
||||
}
|
||||
|
||||
void rigCtlD::receiveFrequency(freqt freq)
|
||||
{
|
||||
emit setFrequency(freq);
|
||||
}
|
||||
//void rigCtlD::receiveFrequency(freqt freq)
|
||||
//{
|
||||
// emit setFrequency(0, freq);
|
||||
// emit setFrequency(0, freq);
|
||||
//}
|
||||
|
||||
void rigCtlD::receiveStateInfo(rigStateStruct* state)
|
||||
{
|
||||
|
@ -287,7 +288,7 @@ void rigCtlClient::socketReadyRead()
|
|||
freqt freq;
|
||||
bool ok=false;
|
||||
double newFreq=0.0f;
|
||||
QString vfo = "VFOA";
|
||||
unsigned char vfo=0;
|
||||
if (command.length() == 2)
|
||||
{
|
||||
newFreq = command[1].toDouble(&ok);
|
||||
|
@ -295,13 +296,20 @@ void rigCtlClient::socketReadyRead()
|
|||
else if (command.length() == 3) // Includes VFO
|
||||
{
|
||||
newFreq = command[2].toDouble(&ok);
|
||||
vfo = command[1];
|
||||
if (command[1] == "VFOB")
|
||||
{
|
||||
vfo = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (ok) {
|
||||
freq.Hz = static_cast<int>(newFreq);
|
||||
qDebug(logRigCtlD()) << QString("Set frequency: %1 (%2)").arg(freq.Hz).arg(command[1]);
|
||||
emit parent->setFrequency(freq);
|
||||
emit parent->setFrequency(vfo, freq);
|
||||
emit parent->setFrequency(vfo, freq);
|
||||
emit parent->setFrequency(vfo, freq);
|
||||
emit parent->setFrequency(vfo, freq);
|
||||
emit parent->setFrequency(vfo, freq);
|
||||
}
|
||||
}
|
||||
else if (command[0] == "1" || command[0] == "dump_caps")
|
||||
|
@ -343,12 +351,11 @@ void rigCtlClient::socketReadyRead()
|
|||
{
|
||||
setCommand = true;
|
||||
if (rigCaps.hasPTTCommand) {
|
||||
if (command[1] == "0") {
|
||||
emit parent->setPTT(false);
|
||||
}
|
||||
else {
|
||||
emit parent->setPTT(true);
|
||||
}
|
||||
emit parent->setPTT(bool(command[1].toInt()));
|
||||
emit parent->setPTT(bool(command[1].toInt()));
|
||||
emit parent->setPTT(bool(command[1].toInt()));
|
||||
emit parent->setPTT(bool(command[1].toInt()));
|
||||
emit parent->setPTT(bool(command[1].toInt()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -465,21 +472,50 @@ void rigCtlClient::socketReadyRead()
|
|||
}
|
||||
response.append(resp);
|
||||
}
|
||||
else if (command[0] == "I" || command[0] == "set_split_freq")
|
||||
else if (command.length() > 1 && (command[0] == "I" || command[0] == "set_split_freq"))
|
||||
{
|
||||
setCommand = true;
|
||||
freqt freq;
|
||||
bool ok = false;
|
||||
double newFreq = 0.0f;
|
||||
newFreq = command[1].toDouble(&ok);
|
||||
if (ok) {
|
||||
freq.Hz = static_cast<int>(newFreq);
|
||||
qDebug(logRigCtlD()) << QString("set_split_freq: %1 (%2)").arg(freq.Hz).arg(command[1]);
|
||||
emit parent->setFrequency(1, freq);
|
||||
emit parent->setFrequency(1, freq);
|
||||
emit parent->setFrequency(1, freq);
|
||||
emit parent->setFrequency(1, freq);
|
||||
emit parent->setFrequency(1, freq);
|
||||
}
|
||||
}
|
||||
else if (command[0] == "m" || command[0] == "get_mode")
|
||||
else if (command.length() > 2 && (command[0] == "X" || command[0] == "set_split_mode"))
|
||||
{
|
||||
setCommand = true;
|
||||
}
|
||||
else if (command.length() > 0 && (command[0] == "x" || command[0] == "get_split_mode"))
|
||||
{
|
||||
if (longReply) {
|
||||
response.append(QString("Mode: %1").arg(getMode(rigState->mode, rigState->datamode)));
|
||||
response.append(QString("Passband: %1").arg(getFilter(rigState->mode, rigState->filter)));
|
||||
response.append(QString("TX Mode: %1").arg(getMode(rigState->mode, rigState->datamode)));
|
||||
response.append(QString("TX Passband: %1").arg(getFilter(rigState->mode, rigState->filter)));
|
||||
}
|
||||
else {
|
||||
response.append(QString("%1").arg(getMode(rigState->mode, rigState->datamode)));
|
||||
response.append(QString("%1").arg(getFilter(rigState->mode, rigState->filter)));
|
||||
}
|
||||
}
|
||||
|
||||
else if (command[0] == "m" || command[0] == "get_mode")
|
||||
{
|
||||
if (longReply) {
|
||||
response.append(QString("Mode: %1").arg(getMode(rigState->mode, rigState->datamode)));
|
||||
response.append(QString("Passband: %1").arg(getFilter(rigState->mode, rigState->filter)));
|
||||
}
|
||||
else {
|
||||
response.append(QString("%1").arg(getMode(rigState->mode, rigState->datamode)));
|
||||
response.append(QString("%1").arg(getFilter(rigState->mode, rigState->filter)));
|
||||
}
|
||||
}
|
||||
else if (command[0] == "M" || command[0] == "set_mode")
|
||||
{
|
||||
// Set mode
|
||||
|
@ -506,21 +542,23 @@ void rigCtlClient::socketReadyRead()
|
|||
emit parent->setMode(getMode(mode), width);
|
||||
if (mode.mid(0, 3) == "PKT") {
|
||||
emit parent->setDataMode(true, width);
|
||||
emit parent->setDataMode(true, width);
|
||||
}
|
||||
else {
|
||||
emit parent->setDataMode(false, width);
|
||||
emit parent->setDataMode(false, width);
|
||||
}
|
||||
}
|
||||
else if (command[0] == "s" || command[0] == "get_split_vfo")
|
||||
{
|
||||
if (longReply) {
|
||||
response.append(QString("Split: 0"));
|
||||
response.append(QString("TX VFO: VFOA"));
|
||||
response.append(QString("Split: 1"));
|
||||
response.append(QString("TX VFO: VFOB"));
|
||||
}
|
||||
else
|
||||
{
|
||||
response.append("0");
|
||||
response.append("VFOA");
|
||||
response.append("1");
|
||||
response.append("VFOb");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -973,8 +1011,8 @@ void rigCtlClient::socketReadyRead()
|
|||
}
|
||||
else if (command.length() > 1 && (command[0] == 0x87 || command[0] == "set_powerstat"))
|
||||
{
|
||||
setCommand = true;
|
||||
if (command[1] == "0")
|
||||
setCommand = true;
|
||||
if (command[1] == "0")
|
||||
{
|
||||
emit parent->sendPowerOff();
|
||||
}
|
||||
|
@ -1370,4 +1408,4 @@ int rigCtlClient::getCalibratedValue(unsigned char meter,cal_table_t cal) {
|
|||
/ (cal.table[i].raw - cal.table[i - 1].raw);
|
||||
|
||||
return cal.table[i].val - interp;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -336,7 +336,7 @@ signals:
|
|||
void onStarted();
|
||||
void onStopped();
|
||||
void sendData(QString data);
|
||||
void setFrequency(freqt freq);
|
||||
void setFrequency(unsigned char vfo, freqt freq);
|
||||
void setPTT(bool state);
|
||||
void setMode(unsigned char mode, unsigned char modeFilter);
|
||||
void setDataMode(bool dataOn, unsigned char modeFilter);
|
||||
|
@ -369,7 +369,7 @@ public slots:
|
|||
virtual void incomingConnection(qintptr socketDescriptor);
|
||||
void receiveRigCaps(rigCapabilities caps);
|
||||
void receiveStateInfo(rigStateStruct* state);
|
||||
void receiveFrequency(freqt freq);
|
||||
// void receiveFrequency(freqt freq);
|
||||
|
||||
private:
|
||||
rigStateStruct* rigState = Q_NULLPTR;
|
||||
|
|
|
@ -133,6 +133,8 @@ struct rigCapabilities {
|
|||
unsigned char bsr[20] = {0};
|
||||
|
||||
std::vector <mode_info> modes;
|
||||
|
||||
QByteArray transceiveCommand;
|
||||
};
|
||||
|
||||
|
||||
|
|
1
rtaudio
1
rtaudio
|
@ -1 +0,0 @@
|
|||
Subproject commit c9bf99d414cf81d19ef0ddd00212a4a58ccd99c6
|
|
@ -735,7 +735,7 @@ udpAudio::udpAudio(QHostAddress local, QHostAddress ip, quint16 audioPort, audio
|
|||
|
||||
rxaudio->moveToThread(rxAudioThread);
|
||||
|
||||
rxAudioThread->start();
|
||||
rxAudioThread->start(QThread::TimeCriticalPriority);
|
||||
|
||||
connect(this, SIGNAL(setupRxAudio(audioSetup)), rxaudio, SLOT(init(audioSetup)));
|
||||
|
||||
|
@ -752,8 +752,8 @@ udpAudio::udpAudio(QHostAddress local, QHostAddress ip, quint16 audioPort, audio
|
|||
|
||||
txaudio->moveToThread(txAudioThread);
|
||||
|
||||
txAudioThread->start();
|
||||
|
||||
txAudioThread->start(QThread::TimeCriticalPriority);
|
||||
|
||||
connect(this, SIGNAL(setupTxAudio(audioSetup)), txaudio, SLOT(init(audioSetup)));
|
||||
|
||||
connect(txAudioThread, SIGNAL(finished()), txaudio, SLOT(deleteLater()));
|
||||
|
|
|
@ -67,81 +67,22 @@ udpServer::~udpServer()
|
|||
{
|
||||
qInfo(logUdpServer()) << "Closing udpServer";
|
||||
|
||||
connMutex.lock();
|
||||
|
||||
foreach(CLIENT * client, controlClients)
|
||||
{
|
||||
if (client->idleTimer != Q_NULLPTR)
|
||||
{
|
||||
client->idleTimer->stop();
|
||||
delete client->idleTimer;
|
||||
}
|
||||
if (client->pingTimer != Q_NULLPTR) {
|
||||
client->pingTimer->stop();
|
||||
delete client->pingTimer;
|
||||
}
|
||||
deleteConnection(&controlClients, client);
|
||||
|
||||
if (client->retransmitTimer != Q_NULLPTR) {
|
||||
client->retransmitTimer->stop();
|
||||
delete client->retransmitTimer;
|
||||
}
|
||||
|
||||
delete client;
|
||||
controlClients.removeAll(client);
|
||||
}
|
||||
foreach(CLIENT * client, civClients)
|
||||
{
|
||||
if (client->idleTimer != Q_NULLPTR)
|
||||
{
|
||||
client->idleTimer->stop();
|
||||
delete client->idleTimer;
|
||||
}
|
||||
if (client->pingTimer != Q_NULLPTR) {
|
||||
client->pingTimer->stop();
|
||||
delete client->pingTimer;
|
||||
}
|
||||
if (client->retransmitTimer != Q_NULLPTR) {
|
||||
client->retransmitTimer->stop();
|
||||
delete client->retransmitTimer;
|
||||
}
|
||||
delete client;
|
||||
civClients.removeAll(client);
|
||||
deleteConnection(&civClients, client);
|
||||
}
|
||||
|
||||
foreach(CLIENT * client, audioClients)
|
||||
{
|
||||
if (client->idleTimer != Q_NULLPTR)
|
||||
{
|
||||
client->idleTimer->stop();
|
||||
delete client->idleTimer;
|
||||
}
|
||||
if (client->pingTimer != Q_NULLPTR) {
|
||||
client->pingTimer->stop();
|
||||
delete client->pingTimer;
|
||||
}
|
||||
if (client->retransmitTimer != Q_NULLPTR) {
|
||||
client->retransmitTimer->stop();
|
||||
delete client->retransmitTimer;
|
||||
}
|
||||
delete client;
|
||||
audioClients.removeAll(client);
|
||||
}
|
||||
|
||||
if (rxAudioTimer != Q_NULLPTR) {
|
||||
rxAudioTimer->stop();
|
||||
delete rxAudioTimer;
|
||||
rxAudioTimer = Q_NULLPTR;
|
||||
}
|
||||
|
||||
if (rxAudioThread != Q_NULLPTR) {
|
||||
rxAudioThread->quit();
|
||||
rxAudioThread->wait();
|
||||
}
|
||||
|
||||
if (txAudioThread != Q_NULLPTR) {
|
||||
txAudioThread->quit();
|
||||
txAudioThread->wait();
|
||||
deleteConnection(&audioClients, client);
|
||||
}
|
||||
|
||||
// Now all connections are deleted, close and delete the sockets.
|
||||
if (udpControl != Q_NULLPTR) {
|
||||
udpControl->close();
|
||||
delete udpControl;
|
||||
|
@ -154,10 +95,6 @@ udpServer::~udpServer()
|
|||
udpAudio->close();
|
||||
delete udpAudio;
|
||||
}
|
||||
|
||||
connMutex.unlock();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -335,13 +272,11 @@ void udpServer::controlReceived()
|
|||
|
||||
if (current->isAuthenticated) {
|
||||
qInfo(logUdpServer()) << current->ipAddress.toString() << ": User " << current->user.username << " login OK";
|
||||
sendLoginResponse(current, true);
|
||||
}
|
||||
else {
|
||||
qInfo(logUdpServer()) << current->ipAddress.toString() << ": Incorrect username/password";
|
||||
|
||||
sendLoginResponse(current, false);
|
||||
}
|
||||
sendLoginResponse(current, current->isAuthenticated);
|
||||
break;
|
||||
}
|
||||
case (CONNINFO_SIZE):
|
||||
|
@ -382,9 +317,10 @@ void udpServer::controlReceived()
|
|||
|
||||
txaudio = new audioHandler();
|
||||
txAudioThread = new QThread(this);
|
||||
|
||||
txaudio->moveToThread(txAudioThread);
|
||||
|
||||
txAudioThread->start();
|
||||
txAudioThread->start(QThread::TimeCriticalPriority);
|
||||
|
||||
connect(this, SIGNAL(setupTxAudio(audioSetup)), txaudio, SLOT(init(audioSetup)));
|
||||
connect(txAudioThread, SIGNAL(finished()), txaudio, SLOT(deleteLater()));
|
||||
|
@ -401,9 +337,12 @@ void udpServer::controlReceived()
|
|||
inAudio.samplerate = current->rxSampleRate;
|
||||
|
||||
rxaudio = new audioHandler();
|
||||
|
||||
rxAudioThread = new QThread(this);
|
||||
rxaudio->moveToThread(rxAudioThread);
|
||||
rxAudioThread->start();
|
||||
|
||||
rxaudio->moveToThread(rxAudioThread);
|
||||
|
||||
rxAudioThread->start(QThread::TimeCriticalPriority);
|
||||
|
||||
connect(this, SIGNAL(setupRxAudio(audioSetup)), rxaudio, SLOT(init(audioSetup)));
|
||||
connect(rxAudioThread, SIGNAL(finished()), rxaudio, SLOT(deleteLater()));
|
||||
|
@ -1515,7 +1454,6 @@ void udpServer::sendRetransmitRequest(CLIENT* c)
|
|||
it.value()++;
|
||||
}
|
||||
}
|
||||
c->missMutex.unlock();
|
||||
|
||||
if (missingSeqs.length() != 0)
|
||||
{
|
||||
|
@ -1544,6 +1482,7 @@ void udpServer::sendRetransmitRequest(CLIENT* c)
|
|||
udpMutex.unlock();
|
||||
}
|
||||
}
|
||||
c->missMutex.unlock();
|
||||
|
||||
|
||||
}
|
||||
|
|
81
wfmain.cpp
81
wfmain.cpp
|
@ -273,7 +273,7 @@ void wfmain::rigConnections()
|
|||
connect(this, SIGNAL(setScopeMode(spectrumMode)), rig, SLOT(setSpectrumMode(spectrumMode)));
|
||||
connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode()));
|
||||
|
||||
connect(this, SIGNAL(setFrequency(freqt)), rig, SLOT(setFrequency(freqt)));
|
||||
connect(this, SIGNAL(setFrequency(unsigned char, freqt)), rig, SLOT(setFrequency(unsigned char, freqt)));
|
||||
connect(this, SIGNAL(setScopeEdge(char)), rig, SLOT(setScopeEdge(char)));
|
||||
connect(this, SIGNAL(setScopeSpan(char)), rig, SLOT(setScopeSpan(char)));
|
||||
//connect(this, SIGNAL(getScopeMode()), rig, SLOT(getScopeMode()));
|
||||
|
@ -400,7 +400,7 @@ void wfmain::makeRig()
|
|||
if (rigCtl != Q_NULLPTR) {
|
||||
connect(rig, SIGNAL(stateInfo(rigStateStruct*)), rigCtl, SLOT(receiveStateInfo(rigStateStruct*)));
|
||||
connect(this, SIGNAL(requestRigState()), rig, SLOT(sendState()));
|
||||
connect(rigCtl, SIGNAL(setFrequency(freqt)), rig, SLOT(setFrequency(freqt)));
|
||||
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)));
|
||||
|
@ -654,6 +654,7 @@ void wfmain::setupMainUI()
|
|||
ui->tuningStepCombo->addItem("9 kHz", (unsigned int) 9000); // European medium wave stepsize
|
||||
ui->tuningStepCombo->addItem("10 kHz", (unsigned int) 10000);
|
||||
ui->tuningStepCombo->addItem("12.5 kHz", (unsigned int) 12500);
|
||||
ui->tuningStepCombo->addItem("25 kHz", (unsigned int) 25000);
|
||||
ui->tuningStepCombo->addItem("100 kHz", (unsigned int) 100000);
|
||||
ui->tuningStepCombo->addItem("250 kHz", (unsigned int) 250000);
|
||||
ui->tuningStepCombo->addItem("1 MHz", (unsigned int) 1000000); //for 23 cm and HF
|
||||
|
@ -684,14 +685,11 @@ void wfmain::setupMainUI()
|
|||
ui->meter2selectionCombo->addItem("Center", meterCenter);
|
||||
ui->meter2Widget->hide();
|
||||
|
||||
#ifdef QT_DEBUG
|
||||
// Experimental feature:
|
||||
ui->meter2selectionCombo->show();
|
||||
ui->meter2selectionCombo->setCurrentIndex((int)prefs.meter2Type);
|
||||
|
||||
ui->secondaryMeterSelectionLabel->show();
|
||||
#else
|
||||
ui->meter2selectionCombo->hide();
|
||||
ui->secondaryMeterSelectionLabel->hide();
|
||||
#endif
|
||||
|
||||
|
||||
// Future ideas:
|
||||
//ui->meter2selectionCombo->addItem("Transmit Audio", meterTxMod);
|
||||
|
@ -754,9 +752,10 @@ void wfmain::setupMainUI()
|
|||
ui->statusBar->addPermanentWidget(connectedLed);
|
||||
|
||||
rigName = new QLabel(this);
|
||||
rigName->setAlignment(Qt::AlignRight);
|
||||
ui->statusBar->addPermanentWidget(rigName);
|
||||
rigName->setText("NONE");
|
||||
rigName->setFixedWidth(50);
|
||||
rigName->setFixedWidth(60);
|
||||
|
||||
freq.MHzDouble = 0.0;
|
||||
freq.Hz = 0;
|
||||
|
@ -1241,6 +1240,7 @@ void wfmain::setDefPrefs()
|
|||
defPrefs.wftheme = static_cast<int>(QCPColorGradient::gpJet);
|
||||
defPrefs.confirmExit = true;
|
||||
defPrefs.confirmPowerOff = true;
|
||||
defPrefs.meter2Type = meterNone;
|
||||
|
||||
udpDefPrefs.ipAddress = QString("");
|
||||
udpDefPrefs.controlLANPort = 50001;
|
||||
|
@ -1274,7 +1274,7 @@ void wfmain::loadSettings()
|
|||
setWindowState(Qt::WindowActive); // Works around QT bug to returns window+keyboard focus.
|
||||
prefs.confirmExit = settings->value("ConfirmExit", defPrefs.confirmExit).toBool();
|
||||
prefs.confirmPowerOff = settings->value("ConfirmPowerOff", defPrefs.confirmPowerOff).toBool();
|
||||
|
||||
prefs.meter2Type = static_cast<meterKind>(settings->value("Meter2Type", defPrefs.meter2Type).toInt());
|
||||
settings->endGroup();
|
||||
|
||||
// Load color schemes:
|
||||
|
@ -1575,6 +1575,7 @@ void wfmain::saveSettings()
|
|||
settings->setValue("WFLength", prefs.wflength);
|
||||
settings->setValue("ConfirmExit", prefs.confirmExit);
|
||||
settings->setValue("ConfirmPowerOff", prefs.confirmPowerOff);
|
||||
settings->setValue("Meter2Type", (int)prefs.meter2Type);
|
||||
settings->endGroup();
|
||||
|
||||
// Radio and Comms: C-IV addr, port to use
|
||||
|
@ -2012,7 +2013,7 @@ void wfmain::shortcutMinus()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2026,7 +2027,7 @@ void wfmain::shortcutPlus()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2040,7 +2041,7 @@ void wfmain::shortcutShiftMinus()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2054,7 +2055,7 @@ void wfmain::shortcutShiftPlus()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2068,7 +2069,7 @@ void wfmain::shortcutControlMinus()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2082,7 +2083,7 @@ void wfmain::shortcutControlPlus()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2096,7 +2097,7 @@ void wfmain::shortcutPageUp()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2110,7 +2111,7 @@ void wfmain::shortcutPageDown()
|
|||
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
setUIFreq();
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
}
|
||||
|
@ -2351,7 +2352,7 @@ void wfmain::doCmd(commandtype cmddata)
|
|||
{
|
||||
lastFreqCmdTime_ms = QDateTime::currentMSecsSinceEpoch();
|
||||
freqt f = (*std::static_pointer_cast<freqt>(data));
|
||||
emit setFrequency(f);
|
||||
emit setFrequency(0,f);
|
||||
break;
|
||||
}
|
||||
case cmdSetMode:
|
||||
|
@ -2407,6 +2408,7 @@ void wfmain::doCmd(commandtype cmddata)
|
|||
{
|
||||
bool pttrequest = (*std::static_pointer_cast<bool>(data));
|
||||
emit setPTT(pttrequest);
|
||||
ui->meter2Widget->clearMeterOnPTTtoggle();
|
||||
if(pttrequest)
|
||||
{
|
||||
ui->meterSPoWidget->setMeterType(meterPower);
|
||||
|
@ -3007,6 +3009,18 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
|
|||
// recalculate command timing now that we know the rig better:
|
||||
calculateTimingParameters();
|
||||
initPeriodicCommands();
|
||||
|
||||
// Set the second meter here as I suspect we need to be connected for it to work?
|
||||
for (int i = 0; i < ui->meter2selectionCombo->count(); i++)
|
||||
{
|
||||
if (static_cast<meterKind>(ui->meter2selectionCombo->itemData(i).toInt()) == prefs.meter2Type)
|
||||
{
|
||||
// I thought that setCurrentIndex() would call the activated() function for the combobox
|
||||
// but it doesn't, so call it manually.
|
||||
ui->meter2selectionCombo->setCurrentIndex(i);
|
||||
on_meter2selectionCombo_activated(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3029,6 +3043,7 @@ void wfmain::initPeriodicCommands()
|
|||
if (rigCaps.hasRXAntenna) {
|
||||
insertSlowPeriodicCommand(cmdGetAntenna, 128);
|
||||
}
|
||||
insertSlowPeriodicCommand(cmdGetDuplexMode, 128);
|
||||
}
|
||||
|
||||
void wfmain::insertPeriodicCommand(cmds cmd, unsigned char priority)
|
||||
|
@ -3222,9 +3237,9 @@ void wfmain::receiveSpectrumData(QByteArray spectrum, double startFreq, double e
|
|||
|
||||
void wfmain::receiveSpectrumMode(spectrumMode spectMode)
|
||||
{
|
||||
for(int i=0; i < ui->spectrumModeCombo->count(); i++)
|
||||
for (int i = 0; i < ui->spectrumModeCombo->count(); i++)
|
||||
{
|
||||
if(static_cast<spectrumMode>(ui->spectrumModeCombo->itemData(i).toInt()) == spectMode)
|
||||
if (static_cast<spectrumMode>(ui->spectrumModeCombo->itemData(i).toInt()) == spectMode)
|
||||
{
|
||||
ui->spectrumModeCombo->blockSignals(true);
|
||||
ui->spectrumModeCombo->setCurrentIndex(i);
|
||||
|
@ -3249,7 +3264,7 @@ void wfmain::handlePlotDoubleClick(QMouseEvent *me)
|
|||
freqGo.Hz = roundFrequency(freqGo.Hz, tsWfScrollHz);
|
||||
freqGo.MHzDouble = (float)freqGo.Hz / 1E6;
|
||||
|
||||
//emit setFrequency(freq);
|
||||
//emit setFrequency(0,freq);
|
||||
issueCmd(cmdSetFreq, freqGo);
|
||||
freq = freqGo;
|
||||
setUIFreq();
|
||||
|
@ -3274,7 +3289,7 @@ void wfmain::handleWFDoubleClick(QMouseEvent *me)
|
|||
freqGo.Hz = roundFrequency(freqGo.Hz, tsWfScrollHz);
|
||||
freqGo.MHzDouble = (float)freqGo.Hz / 1E6;
|
||||
|
||||
//emit setFrequency(freq);
|
||||
//emit setFrequency(0,freq);
|
||||
issueCmd(cmdSetFreq, freqGo);
|
||||
freq = freqGo;
|
||||
setUIFreq();
|
||||
|
@ -3329,7 +3344,7 @@ void wfmain::handleWFScroll(QWheelEvent *we)
|
|||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
freq = f;
|
||||
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmdUniquePriority(cmdSetFreq, f);
|
||||
ui->freqLabel->setText(QString("%1").arg(f.MHzDouble, 0, 'f'));
|
||||
//issueDelayedCommandUnique(cmdGetFreq);
|
||||
|
@ -3746,7 +3761,7 @@ void wfmain::on_freqDial_valueChanged(int value)
|
|||
|
||||
ui->freqLabel->setText(QString("%1").arg(f.MHzDouble, 0, 'f'));
|
||||
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmdUniquePriority(cmdSetFreq, f);
|
||||
} else {
|
||||
ui->freqDial->blockSignals(true);
|
||||
|
@ -3761,7 +3776,7 @@ void wfmain::receiveBandStackReg(freqt freqGo, char mode, char filter, bool data
|
|||
// read the band stack and apply by sending out commands
|
||||
|
||||
qInfo(logSystem()) << __func__ << "BSR received into main: Freq: " << freqGo.Hz << ", mode: " << (unsigned int)mode << ", filter: " << (unsigned int)filter << ", data mode: " << dataOn;
|
||||
//emit setFrequency(freq);
|
||||
//emit setFrequency(0,freq);
|
||||
issueCmd(cmdSetFreq, freqGo);
|
||||
setModeVal = (unsigned char) mode;
|
||||
setFilterVal = (unsigned char) filter;
|
||||
|
@ -3831,7 +3846,7 @@ void wfmain::on_band4mbtn_clicked()
|
|||
f.Hz = (70.200) * 1E6;
|
||||
}
|
||||
issueCmd(cmdSetFreq, f);
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
ui->tabWidget->setCurrentIndex(0);
|
||||
}
|
||||
|
@ -3898,7 +3913,7 @@ void wfmain::on_band60mbtn_clicked()
|
|||
freqt f;
|
||||
f.Hz = (5.3305) * 1E6;
|
||||
issueCmd(cmdSetFreq, f);
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
ui->tabWidget->setCurrentIndex(0);
|
||||
}
|
||||
|
@ -3919,7 +3934,7 @@ void wfmain::on_band630mbtn_clicked()
|
|||
{
|
||||
freqt f;
|
||||
f.Hz = 475 * 1E3;
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
ui->tabWidget->setCurrentIndex(0);
|
||||
|
@ -3929,7 +3944,7 @@ void wfmain::on_band2200mbtn_clicked()
|
|||
{
|
||||
freqt f;
|
||||
f.Hz = 136 * 1E3;
|
||||
//emit setFrequency(f);
|
||||
//emit setFrequency(0,f);
|
||||
issueCmd(cmdSetFreq, f);
|
||||
issueDelayedCommandUnique(cmdGetFreq);
|
||||
ui->tabWidget->setCurrentIndex(0);
|
||||
|
@ -5245,7 +5260,6 @@ void wfmain::on_meter2selectionCombo_activated(int index)
|
|||
meterKind oldMeterType;
|
||||
newMeterType = static_cast<meterKind>(ui->meter2selectionCombo->currentData().toInt());
|
||||
oldMeterType = ui->meter2Widget->getMeterType();
|
||||
|
||||
if(newMeterType == oldMeterType)
|
||||
return;
|
||||
|
||||
|
@ -5257,11 +5271,14 @@ void wfmain::on_meter2selectionCombo_activated(int index)
|
|||
if(newMeterType==meterNone)
|
||||
{
|
||||
ui->meter2Widget->hide();
|
||||
ui->meter2Widget->setMeterType(newMeterType);
|
||||
} else {
|
||||
ui->meter2Widget->show();
|
||||
ui->meter2Widget->setMeterType(newMeterType);
|
||||
insertPeriodicCommandUnique(newCmd);
|
||||
}
|
||||
prefs.meter2Type = newMeterType;
|
||||
|
||||
(void)index;
|
||||
}
|
||||
|
||||
|
@ -5282,7 +5299,7 @@ void wfmain::on_enableRigctldChk_clicked(bool checked)
|
|||
if (rig != Q_NULLPTR) {
|
||||
// We are already connected to a rig.
|
||||
connect(rig, SIGNAL(stateInfo(rigStateStruct*)), rigCtl, SLOT(receiveStateInfo(rigStateStruct*)));
|
||||
connect(rigCtl, SIGNAL(setFrequency(freqt)), rig, SLOT(setFrequency(freqt)));
|
||||
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)));
|
||||
|
|
4
wfmain.h
4
wfmain.h
|
@ -58,7 +58,7 @@ signals:
|
|||
|
||||
// Frequency, mode, band:
|
||||
void getFrequency();
|
||||
void setFrequency(freqt freq);
|
||||
void setFrequency(unsigned char vfo, freqt freq);
|
||||
void getMode();
|
||||
void setMode(unsigned char modeIndex, unsigned char modeFilter);
|
||||
void setMode(mode_info);
|
||||
|
@ -477,6 +477,7 @@ private slots:
|
|||
|
||||
void on_rigctldPortTxt_editingFinished();
|
||||
|
||||
|
||||
private:
|
||||
Ui::wfmain *ui;
|
||||
void closeEvent(QCloseEvent *event);
|
||||
|
@ -703,6 +704,7 @@ private:
|
|||
int wftheme;
|
||||
bool confirmExit;
|
||||
bool confirmPowerOff;
|
||||
meterKind meter2Type;
|
||||
// plot scheme
|
||||
} prefs;
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<ObjectFileName>release\</ObjectFileName>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";__WINDOWS_WASAPI__;GITSHORT="eb2f897";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";__WINDOWS_WASAPI__;GITSHORT="66912e1";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessToFile>false</PreprocessToFile>
|
||||
<ProgramDataBaseFileName></ProgramDataBaseFileName>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
|
@ -85,7 +85,7 @@
|
|||
<WarningLevel>0</WarningLevel>
|
||||
</Midl>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";__WINDOWS_WASAPI__;GITSHORT=\"eb2f897\";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;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";__WINDOWS_WASAPI__;GITSHORT=\"66912e1\";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>
|
||||
<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'">
|
||||
|
@ -99,7 +99,7 @@
|
|||
<ExceptionHandling>Sync</ExceptionHandling>
|
||||
<ObjectFileName>debug\</ObjectFileName>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";__WINDOWS_WASAPI__;GITSHORT="eb2f897";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";__WINDOWS_WASAPI__;GITSHORT="66912e1";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessToFile>false</PreprocessToFile>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
|
@ -124,7 +124,7 @@
|
|||
<WarningLevel>0</WarningLevel>
|
||||
</Midl>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";__WINDOWS_WASAPI__;GITSHORT=\"eb2f897\";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;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";__WINDOWS_WASAPI__;GITSHORT=\"66912e1\";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>
|
||||
<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>
|
||||
|
|
Ładowanie…
Reference in New Issue