kopia lustrzana https://gitlab.com/eliggett/wfview
Merge remote-tracking branch 'origin/sequence' into opus
commit
9323c2bab4
|
@ -118,8 +118,16 @@ void commHandler::receiveDataIn()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(inPortData.startsWith("\xFE\xFE"))
|
if(inPortData.startsWith("\xFE\xFE"))
|
||||||
{
|
{
|
||||||
|
if(inPortData.contains("\xFC"))
|
||||||
|
{
|
||||||
|
//qInfo(logSerial()) << "Transaction contains collision data. Dumping.";
|
||||||
|
//printHex(inPortData, false, true);
|
||||||
|
port->commitTransaction();
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(inPortData.endsWith("\xFD"))
|
if(inPortData.endsWith("\xFD"))
|
||||||
{
|
{
|
||||||
// good!
|
// good!
|
||||||
|
|
|
@ -1090,6 +1090,12 @@ void rigCommander::parseData(QByteArray dataInput)
|
||||||
// payload = getpayload(data); // or something
|
// payload = getpayload(data); // or something
|
||||||
// parse (payload); // recursive ok?
|
// parse (payload); // recursive ok?
|
||||||
payloadIn = data.right(data.length() - 4);
|
payloadIn = data.right(data.length() - 4);
|
||||||
|
if(payloadIn.contains("\xFE"))
|
||||||
|
{
|
||||||
|
//qDebug(logRig()) << "Corrupted data contains FE within message body: ";
|
||||||
|
//printHex(payloadIn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
parseCommand();
|
parseCommand();
|
||||||
break;
|
break;
|
||||||
case '\x00':
|
case '\x00':
|
||||||
|
@ -1100,9 +1106,15 @@ void rigCommander::parseData(QByteArray dataInput)
|
||||||
// This is an echo of our own broadcast request.
|
// This is an echo of our own broadcast request.
|
||||||
// The data are "to 00" and "from E1"
|
// The data are "to 00" and "from E1"
|
||||||
// Don't use it!
|
// Don't use it!
|
||||||
qDebug(logRig()) << "Caught it! Found the echo'd broadcast request from us!";
|
qDebug(logRig()) << "Caught it! Found the echo'd broadcast request from us! Rig has not responded to broadcast query yet.";
|
||||||
} else {
|
} else {
|
||||||
payloadIn = data.right(data.length() - 4);
|
payloadIn = data.right(data.length() - 4); // Removes FE FE E0 94 part
|
||||||
|
if(payloadIn.contains("\xFE"))
|
||||||
|
{
|
||||||
|
//qDebug(logRig()) << "Corrupted data contains FE within message body: ";
|
||||||
|
//printHex(payloadIn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
parseCommand();
|
parseCommand();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1320,9 +1332,9 @@ void rigCommander::parseLevels()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
qInfo(logRig()) << "Unknown control level (0x14) received at register " << payloadIn[1] << " with level " << level;
|
qInfo(logRig()) << "Unknown control level (0x14) received at register " << QString("0x%1").arg((int)payloadIn[1],2,16) << " with level " << QString("0x%1").arg((int)level,2,16) << ", int=" << (int)level;
|
||||||
|
printHex(payloadIn);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2586,6 +2598,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.spectAmpMax = 0;
|
rigCaps.spectAmpMax = 0;
|
||||||
rigCaps.spectLenMax = 0;
|
rigCaps.spectLenMax = 0;
|
||||||
|
|
||||||
|
rigCaps.hasFDcomms = true; // false for older radios
|
||||||
|
|
||||||
// Clear inputs/preamps/attenuators lists in case we have re-connected.
|
// Clear inputs/preamps/attenuators lists in case we have re-connected.
|
||||||
rigCaps.preamps.clear();
|
rigCaps.preamps.clear();
|
||||||
|
@ -2717,6 +2730,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasDD = false;
|
rigCaps.hasDD = false;
|
||||||
rigCaps.hasDV = false;
|
rigCaps.hasDV = false;
|
||||||
rigCaps.hasCTCSS = true;
|
rigCaps.hasCTCSS = true;
|
||||||
|
@ -2832,6 +2846,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.hasCTCSS = true;
|
rigCaps.hasCTCSS = true;
|
||||||
rigCaps.hasDTCS = true;
|
rigCaps.hasDTCS = true;
|
||||||
|
@ -2852,6 +2867,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = true;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.hasCTCSS = true;
|
rigCaps.hasCTCSS = true;
|
||||||
rigCaps.hasDTCS = true;
|
rigCaps.hasDTCS = true;
|
||||||
|
@ -2872,6 +2888,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.hasCTCSS = true;
|
rigCaps.hasCTCSS = true;
|
||||||
rigCaps.hasDTCS = true;
|
rigCaps.hasDTCS = true;
|
||||||
|
@ -2897,6 +2914,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.hasCTCSS = true;
|
rigCaps.hasCTCSS = true;
|
||||||
rigCaps.hasDTCS = true;
|
rigCaps.hasDTCS = true;
|
||||||
|
@ -2939,6 +2957,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.attenuators.push_back('\x20');
|
rigCaps.attenuators.push_back('\x20');
|
||||||
rigCaps.bands = standardHF;
|
rigCaps.bands = standardHF;
|
||||||
|
@ -2947,6 +2966,26 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.modes = commonModes;
|
rigCaps.modes = commonModes;
|
||||||
rigCaps.modes.insert(rigCaps.modes.end(), createMode(modeWFM, 0x06, "WFM"));
|
rigCaps.modes.insert(rigCaps.modes.end(), createMode(modeWFM, 0x06, "WFM"));
|
||||||
break;
|
break;
|
||||||
|
case model718:
|
||||||
|
rigCaps.modelName = QString("IC-718");
|
||||||
|
rigCaps.hasSpectrum = false;
|
||||||
|
rigCaps.inputs.clear();
|
||||||
|
rigCaps.hasLan = false;
|
||||||
|
rigCaps.hasEthernet = false;
|
||||||
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
|
rigCaps.hasATU = false;
|
||||||
|
rigCaps.attenuators.push_back('\x20');
|
||||||
|
rigCaps.preamps.push_back('\x01');
|
||||||
|
rigCaps.bands = {band10m, band10m, band12m,
|
||||||
|
band15m, band17m, band20m, band30m,
|
||||||
|
band40m, band60m, band80m, band160m, bandGen};
|
||||||
|
rigCaps.modes = { createMode(modeLSB, 0x00, "LSB"), createMode(modeUSB, 0x01, "USB"),
|
||||||
|
createMode(modeAM, 0x02, "AM"),
|
||||||
|
createMode(modeCW, 0x03, "CW"), createMode(modeCW_R, 0x07, "CW-R"),
|
||||||
|
createMode(modeRTTY, 0x04, "RTTY"), createMode(modeRTTY_R, 0x08, "RTTY-R")
|
||||||
|
};
|
||||||
|
break;
|
||||||
case model756pro:
|
case model756pro:
|
||||||
rigCaps.modelName = QString("IC-756 Pro");
|
rigCaps.modelName = QString("IC-756 Pro");
|
||||||
rigCaps.hasSpectrum = false;
|
rigCaps.hasSpectrum = false;
|
||||||
|
@ -2954,6 +2993,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.preamps.push_back('\x01');
|
rigCaps.preamps.push_back('\x01');
|
||||||
rigCaps.preamps.push_back('\x02');
|
rigCaps.preamps.push_back('\x02');
|
||||||
|
@ -2971,6 +3011,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.preamps.push_back('\x01');
|
rigCaps.preamps.push_back('\x01');
|
||||||
rigCaps.preamps.push_back('\x02');
|
rigCaps.preamps.push_back('\x02');
|
||||||
|
@ -2988,6 +3029,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasATU = true;
|
rigCaps.hasATU = true;
|
||||||
rigCaps.preamps.push_back('\x01');
|
rigCaps.preamps.push_back('\x01');
|
||||||
rigCaps.preamps.push_back('\x02');
|
rigCaps.preamps.push_back('\x02');
|
||||||
|
@ -3008,6 +3050,7 @@ void rigCommander::determineRigCaps()
|
||||||
rigCaps.hasLan = false;
|
rigCaps.hasLan = false;
|
||||||
rigCaps.hasEthernet = false;
|
rigCaps.hasEthernet = false;
|
||||||
rigCaps.hasWiFi = false;
|
rigCaps.hasWiFi = false;
|
||||||
|
rigCaps.hasFDcomms = false;
|
||||||
rigCaps.hasPreamp = false;
|
rigCaps.hasPreamp = false;
|
||||||
rigCaps.hasAntennaSel = false;
|
rigCaps.hasAntennaSel = false;
|
||||||
rigCaps.attenuators.push_back('\x10');
|
rigCaps.attenuators.push_back('\x10');
|
||||||
|
|
|
@ -52,6 +52,9 @@ model_kind determineRadioModel(unsigned char rigID)
|
||||||
case model705:
|
case model705:
|
||||||
rig = model705;
|
rig = model705;
|
||||||
break;
|
break;
|
||||||
|
case model718:
|
||||||
|
rig = model718;
|
||||||
|
break;
|
||||||
case model756proiii:
|
case model756proiii:
|
||||||
rig = model756proiii;
|
rig = model756proiii;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -28,6 +28,7 @@ enum model_kind {
|
||||||
model9700 = 0xA2,
|
model9700 = 0xA2,
|
||||||
model705 = 0xA4,
|
model705 = 0xA4,
|
||||||
model706 = 0x58,
|
model706 = 0x58,
|
||||||
|
model718 = 0x5E,
|
||||||
model756pro = 0x5C,
|
model756pro = 0x5C,
|
||||||
model756proii = 0x64,
|
model756proii = 0x64,
|
||||||
model756proiii = 0x6E,
|
model756proiii = 0x6E,
|
||||||
|
@ -80,6 +81,7 @@ struct rigCapabilities {
|
||||||
bool hasLan; // OEM ethernet or wifi connection
|
bool hasLan; // OEM ethernet or wifi connection
|
||||||
bool hasEthernet;
|
bool hasEthernet;
|
||||||
bool hasWiFi;
|
bool hasWiFi;
|
||||||
|
bool hasFDcomms;
|
||||||
|
|
||||||
QVector<rigInput> inputs;
|
QVector<rigInput> inputs;
|
||||||
|
|
||||||
|
|
158
wfmain.cpp
158
wfmain.cpp
|
@ -160,6 +160,7 @@ void wfmain::openRig()
|
||||||
if (prefs.enableLAN)
|
if (prefs.enableLAN)
|
||||||
{
|
{
|
||||||
ui->lanEnableBtn->setChecked(true);
|
ui->lanEnableBtn->setChecked(true);
|
||||||
|
usingLAN = true;
|
||||||
// We need to setup the tx/rx audio:
|
// We need to setup the tx/rx audio:
|
||||||
emit sendCommSetup(prefs.radioCIVAddr, udpPrefs, rxSetup, txSetup, prefs.virtualSerialPort);
|
emit sendCommSetup(prefs.radioCIVAddr, udpPrefs, rxSetup, txSetup, prefs.virtualSerialPort);
|
||||||
} else {
|
} else {
|
||||||
|
@ -176,10 +177,7 @@ void wfmain::openRig()
|
||||||
serialPortRig = serialPortCL;
|
serialPortRig = serialPortCL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
usingLAN = false;
|
||||||
// Here, the radioCIVAddr is being set from a default preference, which is for the 7300.
|
|
||||||
// However, we will not use it initially. OTOH, if it is set explicitedly to a value in the prefs,
|
|
||||||
// then we skip auto detection.
|
|
||||||
emit sendCommSetup(prefs.radioCIVAddr, serialPortRig, prefs.serialPortBaud,prefs.virtualSerialPort);
|
emit sendCommSetup(prefs.radioCIVAddr, serialPortRig, prefs.serialPortBaud,prefs.virtualSerialPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +453,13 @@ void wfmain::findSerialPort()
|
||||||
void wfmain::receiveCommReady()
|
void wfmain::receiveCommReady()
|
||||||
{
|
{
|
||||||
qInfo(logSystem()) << "Received CommReady!! ";
|
qInfo(logSystem()) << "Received CommReady!! ";
|
||||||
// taken from above:
|
if(!usingLAN)
|
||||||
|
{
|
||||||
|
// usingLAN gets set when we emit the sendCommSetup signal.
|
||||||
|
// If we're not using the LAN, then we're on serial, and
|
||||||
|
// we already know the baud rate and can calculate the timing parameters.
|
||||||
|
calculateTimingParameters();
|
||||||
|
}
|
||||||
if(prefs.radioCIVAddr == 0)
|
if(prefs.radioCIVAddr == 0)
|
||||||
{
|
{
|
||||||
// tell rigCommander to broadcast a request for all rig IDs.
|
// tell rigCommander to broadcast a request for all rig IDs.
|
||||||
|
@ -484,7 +488,6 @@ void wfmain::receiveFoundRigID(rigCapabilities rigCaps)
|
||||||
if(rig->usingLAN())
|
if(rig->usingLAN())
|
||||||
{
|
{
|
||||||
usingLAN = true;
|
usingLAN = true;
|
||||||
//delayedCommand->setInterval(delayedCmdIntervalLAN_ms);
|
|
||||||
} else {
|
} else {
|
||||||
usingLAN = false;
|
usingLAN = false;
|
||||||
}
|
}
|
||||||
|
@ -693,6 +696,54 @@ void wfmain::setupMainUI()
|
||||||
|
|
||||||
ui->tuneLockChk->setChecked(false);
|
ui->tuneLockChk->setChecked(false);
|
||||||
freqLock = false;
|
freqLock = false;
|
||||||
|
|
||||||
|
connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(updateSizes(int)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void wfmain::updateSizes(int tabIndex)
|
||||||
|
{
|
||||||
|
// This function does nothing unless you are using a rig without spectrum.
|
||||||
|
// This is a hack. It is not great, but it seems to work ok.
|
||||||
|
if(!rigCaps.hasSpectrum)
|
||||||
|
{
|
||||||
|
// Set "ignore" size policy for non-selected tabs:
|
||||||
|
for(int i=0;i<ui->tabWidget->count();i++)
|
||||||
|
if((i!=tabIndex) && tabIndex != 0)
|
||||||
|
ui->tabWidget->widget(i)->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); // allows size to be any size that fits the tab bar
|
||||||
|
|
||||||
|
if(tabIndex==0 && !rigCaps.hasSpectrum)
|
||||||
|
{
|
||||||
|
|
||||||
|
ui->tabWidget->widget(0)->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||||
|
ui->tabWidget->widget(0)->setMaximumSize(ui->tabWidget->widget(0)->minimumSizeHint());
|
||||||
|
ui->tabWidget->widget(0)->adjustSize(); // tab
|
||||||
|
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||||
|
this->setMaximumSize(QSize(929, 270));
|
||||||
|
this->setMinimumSize(QSize(929, 270));
|
||||||
|
|
||||||
|
resize(minimumSize());
|
||||||
|
adjustSize(); // main window
|
||||||
|
adjustSize();
|
||||||
|
|
||||||
|
} else if(tabIndex==0 && rigCaps.hasSpectrum) {
|
||||||
|
// At main tab (0) and we have spectrum:
|
||||||
|
ui->tabWidget->widget(0)->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||||
|
|
||||||
|
resize(minimumSizeHint());
|
||||||
|
adjustSize(); // Without this call, the window retains the size of the previous tab.
|
||||||
|
} else {
|
||||||
|
// At some other tab, with or without spectrum:
|
||||||
|
ui->tabWidget->widget(tabIndex)->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||||
|
this->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||||
|
this->setMinimumSize(QSize(994, 455)); // not large enough for settings tab
|
||||||
|
this->setMaximumSize(QSize(65535,65535));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ui->tabWidget->widget(tabIndex)->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||||
|
ui->tabWidget->widget(tabIndex)->setMaximumSize(65535,65535);
|
||||||
|
//ui->tabWidget->widget(0)->setMinimumSize();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wfmain::getSettingsFilePath(QString settingsFile)
|
void wfmain::getSettingsFilePath(QString settingsFile)
|
||||||
|
@ -724,7 +775,7 @@ void wfmain::getSettingsFilePath(QString settingsFile)
|
||||||
|
|
||||||
void wfmain::setInitialTiming()
|
void wfmain::setInitialTiming()
|
||||||
{
|
{
|
||||||
delayedCmdIntervalLAN_ms = 10; // interval for regular delayed commands, including initial rig/UI state queries
|
delayedCmdIntervalLAN_ms = 70; // interval for regular delayed commands, including initial rig/UI state queries
|
||||||
delayedCmdIntervalSerial_ms = 100; // interval for regular delayed commands, including initial rig/UI state queries
|
delayedCmdIntervalSerial_ms = 100; // interval for regular delayed commands, including initial rig/UI state queries
|
||||||
delayedCmdStartupInterval_ms = 250; // interval for rigID polling
|
delayedCmdStartupInterval_ms = 250; // interval for rigID polling
|
||||||
delayedCommand = new QTimer(this);
|
delayedCommand = new QTimer(this);
|
||||||
|
@ -1036,6 +1087,10 @@ void wfmain::setupKeyShortcuts()
|
||||||
keyM = new QShortcut(this);
|
keyM = new QShortcut(this);
|
||||||
keyM->setKey(Qt::Key_M);
|
keyM->setKey(Qt::Key_M);
|
||||||
connect(keyM, SIGNAL(activated()), this, SLOT(shortcutM()));
|
connect(keyM, SIGNAL(activated()), this, SLOT(shortcutM()));
|
||||||
|
|
||||||
|
keyDebug = new QShortcut(this);
|
||||||
|
keyDebug->setKey(Qt::CTRL + Qt::SHIFT + Qt::Key_D);
|
||||||
|
connect(keyDebug, SIGNAL(activated()), this, SLOT(on_debugBtn_clicked()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wfmain::setDefPrefs()
|
void wfmain::setDefPrefs()
|
||||||
|
@ -1494,6 +1549,48 @@ void wfmain::saveSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wfmain::showHideSpectrum(bool show)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(show)
|
||||||
|
{
|
||||||
|
wf->show();
|
||||||
|
plot->show();
|
||||||
|
} else {
|
||||||
|
wf->hide();
|
||||||
|
plot->hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Controls:
|
||||||
|
ui->spectrumGroupBox->setVisible(show);
|
||||||
|
ui->spectrumModeCombo->setVisible(show);
|
||||||
|
ui->scopeBWCombo->setVisible(show);
|
||||||
|
ui->scopeEdgeCombo->setVisible(show);
|
||||||
|
ui->scopeEnableWFBtn->setVisible(show);
|
||||||
|
ui->scopeRefLevelSlider->setEnabled(show);
|
||||||
|
ui->wfLengthSlider->setEnabled(show);
|
||||||
|
ui->wfthemeCombo->setVisible(show);
|
||||||
|
ui->toFixedBtn->setVisible(show);
|
||||||
|
ui->clearPeakBtn->setVisible(show);
|
||||||
|
|
||||||
|
// And the labels:
|
||||||
|
ui->specEdgeLabel->setVisible(show);
|
||||||
|
ui->specModeLabel->setVisible(show);
|
||||||
|
ui->specSpanLabel->setVisible(show);
|
||||||
|
ui->specThemeLabel->setVisible(show);
|
||||||
|
|
||||||
|
// And the layout for space:
|
||||||
|
ui->specControlsHorizLayout->setEnabled(show);
|
||||||
|
ui->splitter->setVisible(show);
|
||||||
|
ui->plot->setVisible(show);
|
||||||
|
ui->waterfall->setVisible(show);
|
||||||
|
ui->spectrumGroupBox->setEnabled(show);
|
||||||
|
|
||||||
|
// Window resize:
|
||||||
|
updateSizes(ui->tabWidget->currentIndex());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void wfmain::prepareWf()
|
void wfmain::prepareWf()
|
||||||
{
|
{
|
||||||
prepareWf(160);
|
prepareWf(160);
|
||||||
|
@ -1505,10 +1602,17 @@ void wfmain::prepareWf(unsigned int wfLength)
|
||||||
|
|
||||||
if(haveRigCaps)
|
if(haveRigCaps)
|
||||||
{
|
{
|
||||||
|
showHideSpectrum(rigCaps.hasSpectrum);
|
||||||
|
if(!rigCaps.hasSpectrum)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
// TODO: Lock the function that draws on the spectrum while we are updating.
|
// TODO: Lock the function that draws on the spectrum while we are updating.
|
||||||
spectrumDrawLock = true;
|
spectrumDrawLock = true;
|
||||||
|
|
||||||
spectWidth = rigCaps.spectLenMax;
|
spectWidth = rigCaps.spectLenMax;
|
||||||
|
wfLengthMax = 1024;
|
||||||
|
|
||||||
this->wfLength = wfLength; // fixed for now, time-length of waterfall
|
this->wfLength = wfLength; // fixed for now, time-length of waterfall
|
||||||
|
|
||||||
// Initialize before use!
|
// Initialize before use!
|
||||||
|
@ -1516,17 +1620,21 @@ void wfmain::prepareWf(unsigned int wfLength)
|
||||||
QByteArray empty((int)spectWidth, '\x01');
|
QByteArray empty((int)spectWidth, '\x01');
|
||||||
spectrumPeaks = QByteArray( (int)spectWidth, '\x01' );
|
spectrumPeaks = QByteArray( (int)spectWidth, '\x01' );
|
||||||
|
|
||||||
if((unsigned int)wfimage.size() < wfLength)
|
//wfimage.resize(wfLengthMax);
|
||||||
|
|
||||||
|
if((unsigned int)wfimage.size() < wfLengthMax)
|
||||||
{
|
{
|
||||||
unsigned int i=0;
|
unsigned int i=0;
|
||||||
unsigned int oldSize = wfimage.size();
|
unsigned int oldSize = wfimage.size();
|
||||||
for(i=oldSize; i<(wfLength); i++)
|
for(i=oldSize; i<(wfLengthMax); i++)
|
||||||
{
|
{
|
||||||
wfimage.append(empty);
|
wfimage.append(empty);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wfimage.remove(wfLength, wfimage.size()-wfLength);
|
// Keep wfimage, do not trim, no performance impact.
|
||||||
|
//wfimage.remove(wfLength, wfimage.size()-wfLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
wfimage.squeeze();
|
wfimage.squeeze();
|
||||||
//colorMap->clearData();
|
//colorMap->clearData();
|
||||||
colorMap->data()->clear();
|
colorMap->data()->clear();
|
||||||
|
@ -1547,7 +1655,6 @@ void wfmain::prepareWf(unsigned int wfLength)
|
||||||
|
|
||||||
wf->yAxis->setRangeReversed(true);
|
wf->yAxis->setRangeReversed(true);
|
||||||
wf->xAxis->setVisible(false);
|
wf->xAxis->setVisible(false);
|
||||||
rigName->setText(rigCaps.modelName);
|
|
||||||
|
|
||||||
spectrumDrawLock = false;
|
spectrumDrawLock = false;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2432,6 +2539,7 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
|
||||||
qDebug(logSystem()) << "Rig ID received into wfmain: hasSpectrum: " << rigCaps.hasSpectrum;
|
qDebug(logSystem()) << "Rig ID received into wfmain: hasSpectrum: " << rigCaps.hasSpectrum;
|
||||||
|
|
||||||
this->rigCaps = rigCaps;
|
this->rigCaps = rigCaps;
|
||||||
|
rigName->setText(rigCaps.modelName);
|
||||||
this->spectWidth = rigCaps.spectLenMax; // used once haveRigCaps is true.
|
this->spectWidth = rigCaps.spectLenMax; // used once haveRigCaps is true.
|
||||||
haveRigCaps = true;
|
haveRigCaps = true;
|
||||||
// Added so that server receives rig capabilities.
|
// Added so that server receives rig capabilities.
|
||||||
|
@ -2551,6 +2659,8 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
|
||||||
// do all the initial grabs. For now, this hack of adding them here and there:
|
// do all the initial grabs. For now, this hack of adding them here and there:
|
||||||
cmdOutQue.append(cmdGetFreq);
|
cmdOutQue.append(cmdGetFreq);
|
||||||
cmdOutQue.append(cmdGetMode);
|
cmdOutQue.append(cmdGetMode);
|
||||||
|
// recalculate command timing now that we know the rig better:
|
||||||
|
calculateTimingParameters();
|
||||||
initPeriodicCommands();
|
initPeriodicCommands();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2690,10 +2800,8 @@ void wfmain::receiveSpectrumData(QByteArray spectrum, double startFreq, double e
|
||||||
if(specLen == spectWidth)
|
if(specLen == spectWidth)
|
||||||
{
|
{
|
||||||
wfimage.prepend(spectrum);
|
wfimage.prepend(spectrum);
|
||||||
if(wfimage.length() > wfLength)
|
wfimage.resize(wfLengthMax);
|
||||||
{
|
wfimage.squeeze();
|
||||||
wfimage.remove(wfLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Waterfall:
|
// Waterfall:
|
||||||
for(int row = 0; row < wfLength; row++)
|
for(int row = 0; row < wfLength; row++)
|
||||||
|
@ -3786,6 +3894,7 @@ void wfmain::on_connectBtn_clicked()
|
||||||
emit sendCloseComm();
|
emit sendCloseComm();
|
||||||
ui->connectBtn->setText("Connect");
|
ui->connectBtn->setText("Connect");
|
||||||
haveRigCaps = false;
|
haveRigCaps = false;
|
||||||
|
rigName->setText("NONE");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -4349,14 +4458,21 @@ void wfmain::calculateTimingParameters()
|
||||||
|
|
||||||
unsigned int usPerByte = 9600*1000 / prefs.serialPortBaud;
|
unsigned int usPerByte = 9600*1000 / prefs.serialPortBaud;
|
||||||
unsigned int msMinTiming=usPerByte * 10*2/1000;
|
unsigned int msMinTiming=usPerByte * 10*2/1000;
|
||||||
if(msMinTiming < 35)
|
if(msMinTiming < 25)
|
||||||
msMinTiming = 35;
|
msMinTiming = 25;
|
||||||
|
|
||||||
delayedCommand->setInterval( msMinTiming * 2); // 20 byte message
|
delayedCommand->setInterval( msMinTiming * 2); // 20 byte message
|
||||||
periodicPollingTimer->setInterval( msMinTiming ); // slower for s-meter poll
|
|
||||||
|
|
||||||
qInfo(logSystem()) << "Delay command interval timing: " << msMinTiming * 2 << "ms";
|
if(haveRigCaps && rigCaps.hasFDcomms)
|
||||||
qInfo(logSystem()) << "Periodic polling timer: " << msMinTiming << "ms";
|
{
|
||||||
|
periodicPollingTimer->setInterval( msMinTiming ); // quicker for s-meter poll
|
||||||
|
} else {
|
||||||
|
periodicPollingTimer->setInterval( msMinTiming * 5); // slower for s-meter poll
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
qInfo(logSystem()) << "Delay command interval timing: " << delayedCommand->interval() << "ms";
|
||||||
|
qInfo(logSystem()) << "Periodic polling timer: " << periodicPollingTimer->interval() << "ms";
|
||||||
|
|
||||||
// Normal:
|
// Normal:
|
||||||
delayedCmdIntervalLAN_ms = msMinTiming * 2;
|
delayedCmdIntervalLAN_ms = msMinTiming * 2;
|
||||||
|
@ -4608,6 +4724,6 @@ void wfmain::on_wfLengthSlider_valueChanged(int value)
|
||||||
void wfmain::on_debugBtn_clicked()
|
void wfmain::on_debugBtn_clicked()
|
||||||
{
|
{
|
||||||
qInfo(logSystem()) << "Debug button pressed.";
|
qInfo(logSystem()) << "Debug button pressed.";
|
||||||
prepareWf(160);
|
emit getFrequency();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
5
wfmain.h
5
wfmain.h
|
@ -144,6 +144,7 @@ signals:
|
||||||
void sendRigCaps(rigCapabilities caps);
|
void sendRigCaps(rigCapabilities caps);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateSizes(int tabIndex);
|
||||||
void shortcutF1();
|
void shortcutF1();
|
||||||
void shortcutF2();
|
void shortcutF2();
|
||||||
void shortcutF3();
|
void shortcutF3();
|
||||||
|
@ -462,6 +463,7 @@ private:
|
||||||
void setPlotTheme(QCustomPlot *plot, bool isDark);
|
void setPlotTheme(QCustomPlot *plot, bool isDark);
|
||||||
void prepareWf();
|
void prepareWf();
|
||||||
void prepareWf(unsigned int wfLength);
|
void prepareWf(unsigned int wfLength);
|
||||||
|
void showHideSpectrum(bool show);
|
||||||
void getInitialRigState();
|
void getInitialRigState();
|
||||||
void setBandButtons();
|
void setBandButtons();
|
||||||
void showButton(QPushButton *btn);
|
void showButton(QPushButton *btn);
|
||||||
|
@ -509,6 +511,8 @@ private:
|
||||||
QShortcut *keyF;
|
QShortcut *keyF;
|
||||||
QShortcut *keyM;
|
QShortcut *keyM;
|
||||||
|
|
||||||
|
QShortcut *keyDebug;
|
||||||
|
|
||||||
|
|
||||||
rigCommander * rig=Q_NULLPTR;
|
rigCommander * rig=Q_NULLPTR;
|
||||||
QThread* rigThread = Q_NULLPTR;
|
QThread* rigThread = Q_NULLPTR;
|
||||||
|
@ -557,6 +561,7 @@ private:
|
||||||
int smeterPos=0;
|
int smeterPos=0;
|
||||||
|
|
||||||
QVector <QByteArray> wfimage;
|
QVector <QByteArray> wfimage;
|
||||||
|
unsigned int wfLengthMax;
|
||||||
|
|
||||||
bool onFullscreen;
|
bool onFullscreen;
|
||||||
bool drawPeaks;
|
bool drawPeaks;
|
||||||
|
|
14
wfmain.ui
14
wfmain.ui
|
@ -26,7 +26,7 @@
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="spectrumGroupBox">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Spectrum</string>
|
<string>Spectrum</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -44,12 +44,12 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
<layout class="QHBoxLayout" name="specControlsHorizLayout">
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_26">
|
<widget class="QLabel" name="specModeLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Spectrum Mode: </string>
|
<string>Spectrum Mode: </string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_6">
|
<widget class="QLabel" name="specSpanLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Span:</string>
|
<string>Span:</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_7">
|
<widget class="QLabel" name="specEdgeLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Edge</string>
|
<string>Edge</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_31">
|
<widget class="QLabel" name="specThemeLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Theme:</string>
|
<string>Theme:</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="specHorizSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
|
Ładowanie…
Reference in New Issue