Merge from master

merge-requests/5/head
Phil Taylor 2021-05-27 14:20:53 +01:00
rodzic 85762365ba
commit 142c8a24ff
10 zmienionych plików z 181 dodań i 47 usunięć

Wyświetl plik

@ -1,7 +1,23 @@
# CHANGELOG
- 20210521
Add baud rate detection for remote rigs
Correct propCIVAddr to work if less than 0xe0
Change audiohandler to use latency for tx audio
- 20210520
Added IC-756 Pro. Tested UI and back-end response with 7300 and fake
RigID reply.
Added additional support for the IC-756 Pro III. Essentially untested.
Cleaned up warning and UI help text.
Add more features to rigstate
- 20210519

Wyświetl plik

@ -29,13 +29,13 @@ Ubuntu 20.04.2
~~~
### for all, the following is appicable:
### for all, the following is applicable:
~~~
download the tar.gz file here: https://wfview.org/download/test-linux-build/
the file below will unpack in ./dist
tar zxvf wfview-linux.tar.gz
tar zxvf wfview-linux.tar.gz (change the filename accordingly)
cd dist
sudo ./install.sh
~~~
@ -48,34 +48,34 @@ Now for the system specifics; pick your version:
~~~
sudo apt install libqcustomplot2.0 libqt5multimedia5 libqt5serialport5
sudo ln -s /usr/lib/x86_64-linux-gnu/libqcustomplot.so.2.0.1 /usr/lib/x86_64-linux-gnu/libqcustomplot.so.2
start wfview
wfview
~~~
### Fedora 33/34:
~~~
sudo dnf install qcustomplot-qt5 qt5-qtmultimedia qt5-qtserialport
sudo ln -s /usr/lib64/libqcustomplot-qt5.so.2 /usr/lib64/libqcustomplot.so.2
start wfview
wfview
~~~
### Mint 20.1
~~~
sudo apt install libqcustomplot2.0 libqt5multimedia5 libqt5serialport5
sudo ln -s /usr/lib64/libqcustomplot-qt5.so.2 /usr/lib64/libqcustomplot.so.2
start wfview
wfview
~~~
### openSUSE/Tumbleweed/SLES:
~~~
sudo zypper in libqcustomplot2 libQt5SerialPort5
start wfview
wfview
~~~
### UBUNTU:
~~~
sudo apt install libqcustomplot2.0 libqt5multimedia5 libqt5serialport5
sudo ln -s /usr/lib/x86_64-linux-gnu/libqcustomplot.so.2.0.1 /usr/lib/x86_64-linux-gnu/libqcustomplot.so.2
start wfview
wfview
~~~

Wyświetl plik

@ -20,7 +20,24 @@ enum mode_kind {
modeLSB_D=0x80,
modeUSB_D=0x81,
modeDV=0x17,
modeDD=0x27
modeDD=0x27,
modeWFM,
modeS_AMD,
modeS_AML,
modeS_AMU,
modeP25,
modedPMR,
modeNXDN_VN,
modeNXDN_N,
modeDCR,
modePSK,
modePSK_R
};
struct mode_info {
mode_kind mk;
unsigned char reg;
QString name;
};
struct preset_kind {

Wyświetl plik

@ -147,6 +147,7 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, QSt
void rigCommander::closeComm()
{
qDebug(logRig()) << "Closing rig comms";
if (comm != Q_NULLPTR) {
delete comm;
}
@ -2265,7 +2266,7 @@ void rigCommander::parseDetailedRegisters1A05()
default:
break;
}
return;
break;
case model7850:
switch(subcmd)
{
@ -2332,6 +2333,7 @@ void rigCommander::parseDetailedRegisters1A05()
default:
break;
}
break;
case model7610:
switch(subcmd)
{
@ -2407,6 +2409,7 @@ void rigCommander::parseDetailedRegisters1A05()
default:
break;
}
break;
case model705:
switch(subcmd)
{
@ -2525,6 +2528,16 @@ void rigCommander::parseWFData()
}
}
mode_info rigCommander::createMode(mode_kind m, unsigned char reg, QString name)
{
mode_info mode;
mode.mk = m;
mode.reg = reg;
mode.name = name;
return mode;
}
void rigCommander::determineRigCaps()
{
//TODO: Determine available bands (low priority, rig will reject out of band requests anyway)
@ -2539,6 +2552,14 @@ void rigCommander::determineRigCaps()
standardVU = {band70cm, band2m};
std::vector <mode_info> commonModes;
commonModes = { createMode(modeLSB, 0x00, "LSB"), createMode(modeUSB, 0x01, "USB"),
createMode(modeFM, 0x05, "FM"), createMode(modeAM, 0x02, "AM"),
createMode(modeCW, 0x03, "CW"), createMode(modeCW_R, 0x07, "CW-R"),
createMode(modeRTTY, 0x04, "RTTY"), createMode(modeRTTY_R, 0x08, "RTTY-R")
};
rigCaps.model = model;
rigCaps.civ = incomingCIVAddr;
@ -2618,6 +2639,7 @@ void rigCommander::determineRigCaps()
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.modes = commonModes;
break;
case modelR8600:
rigCaps.modelName = QString("IC-R8600");
@ -2643,6 +2665,13 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
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.modes.insert(rigCaps.modes.end(), {
createMode(modeWFM, 0x06, "WFM"), createMode(modeS_AMD, 0x11, "S-AM (D)"),
createMode(modeS_AML, 0x14, "S-AM(L)"), createMode(modeS_AMU, 0x15, "S-AM(U)"),
createMode(modeP25, 0x16, "P25"), createMode(modedPMR, 0x18, "dPMR"),
createMode(modeNXDN_VN, 0x19, "NXDN-VN"), createMode(modeNXDN_N, 0x20, "NXDN-N"),
createMode(modeDCR, 0x21, "DCR")});
break;
case model9700:
rigCaps.modelName = QString("IC-9700");
@ -2667,6 +2696,9 @@ void rigCommander::determineRigCaps()
rigCaps.bsr[band23cm] = 0x03;
rigCaps.bsr[band70cm] = 0x02;
rigCaps.bsr[band2m] = 0x01;
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeDV, 0x17, "DV"),
createMode(modeDD, 0x22, "DD")});
break;
case model910h:
rigCaps.modelName = QString("IC-910H");
@ -2686,6 +2718,7 @@ void rigCommander::determineRigCaps()
rigCaps.bsr[band23cm] = 0x03;
rigCaps.bsr[band70cm] = 0x02;
rigCaps.bsr[band2m] = 0x01;
rigCaps.modes = commonModes;
break;
case model7610:
rigCaps.modelName = QString("IC-7610");
@ -2714,6 +2747,7 @@ void rigCommander::determineRigCaps()
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.modes = commonModes;
break;
case model7850:
rigCaps.modelName = QString("IC-785x");
@ -2741,6 +2775,9 @@ void rigCommander::determineRigCaps()
rigCaps.bands.push_back(bandGen);
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modePSK, 0x12, "PSK"),
createMode(modePSK_R, 0x13, "PSK-R")});
break;
case model705:
rigCaps.modelName = QString("IC-705");
@ -2773,6 +2810,9 @@ void rigCommander::determineRigCaps()
rigCaps.bsr[bandGen] = 0x15;
rigCaps.bands.push_back(band630m);
rigCaps.bands.push_back(band2200m);
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeWFM, 0x06, "WFM"),
createMode(modeDV, 0x17, "DV")});
break;
case model7000:
rigCaps.modelName = QString("IC-7000");
@ -2792,6 +2832,7 @@ void rigCommander::determineRigCaps()
rigCaps.bsr[band2m] = 0x11;
rigCaps.bsr[band70cm] = 0x12;
rigCaps.bsr[bandGen] = 0x13;
rigCaps.modes = commonModes;
break;
case model7410:
rigCaps.modelName = QString("IC-7410");
@ -2810,6 +2851,7 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
break;
case model7100:
rigCaps.modelName = QString("IC-7100");
@ -2832,6 +2874,9 @@ void rigCommander::determineRigCaps()
rigCaps.bsr[band2m] = 0x11;
rigCaps.bsr[band70cm] = 0x12;
rigCaps.bsr[bandGen] = 0x13;
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeWFM, 0x06, "WFM"),
createMode(modeDV, 0x17, "DV")});
break;
case model7200:
rigCaps.modelName = QString("IC-7200");
@ -2849,6 +2894,7 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
break;
case model706:
rigCaps.modelName = QString("IC-706");
@ -2862,6 +2908,8 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.push_back(bandGen);
rigCaps.modes = commonModes;
rigCaps.modes.insert(rigCaps.modes.end(), createMode(modeWFM, 0x06, "WFM"));
break;
case model756pro:
rigCaps.modelName = QString("IC-756 Pro");
@ -2878,6 +2926,24 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
break;
case model756proii:
rigCaps.modelName = QString("IC-756 Pro II");
rigCaps.hasSpectrum = false;
rigCaps.inputs.clear();
rigCaps.hasLan = false;
rigCaps.hasEthernet = false;
rigCaps.hasWiFi = false;
rigCaps.hasATU = true;
rigCaps.preamps.push_back('\x01');
rigCaps.preamps.push_back('\x02');
rigCaps.attenuators.insert(rigCaps.attenuators.end(),{ '\x06' , '\x12', '\x18'});
rigCaps.antennas = {0x00, 0x01};
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
break;
case model756proiii:
rigCaps.modelName = QString("IC-756 Pro III");
@ -2894,6 +2960,7 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
rigCaps.bands.push_back(bandGen);
rigCaps.bsr[bandGen] = 0x11;
rigCaps.modes = commonModes;
break;
default:
rigCaps.modelName = QString("IC-0x%1").arg(rigCaps.modelID, 2, 16);
@ -2913,7 +2980,8 @@ void rigCommander::determineRigCaps()
rigCaps.bands = standardHF;
rigCaps.bands.insert(rigCaps.bands.end(), standardVU.begin(), standardVU.end());
rigCaps.bands.insert(rigCaps.bands.end(), {band23cm, band4m, band630m, band2200m, bandGen});
qInfo(logRig()) << "Found unknown rig: " << rigCaps.modelID;
rigCaps.modes = commonModes;
qInfo(logRig()) << "Found unknown rig: 0x" << QString("%1").arg(rigCaps.modelID, 2, 16);
break;
}
haveRigCaps = true;

Wyświetl plik

@ -9,6 +9,7 @@
#include "udphandler.h"
#include "rigidentities.h"
#include "repeaterattributes.h"
#include "freqmemory.h"
// This file figures out what to send to the comm and also
// parses returns into useful things.
@ -375,6 +376,7 @@ private:
void debugMe();
void printHex(const QByteArray &pdata);
void printHex(const QByteArray &pdata, bool printVert, bool printHoriz);
mode_info createMode(mode_kind m, unsigned char reg, QString name);
commHandler* comm = Q_NULLPTR;
pttyHandler* ptty = Q_NULLPTR;

Wyświetl plik

@ -58,6 +58,9 @@ model_kind determineRadioModel(unsigned char rigID)
case model756pro:
rig = model756pro;
break;
case model756proii:
rig = model756proii;
break;
default:
rig = modelUnknown;
break;

Wyświetl plik

@ -6,6 +6,8 @@
#include <QList>
#include <vector>
#include "freqmemory.h"
// Credit for parts of CIV list:
// http://www.docksideradio.com/Icom%20Radio%20Hex%20Addresses.htm
@ -27,6 +29,7 @@ enum model_kind {
model705 = 0xA4,
model706 = 0x58,
model756pro = 0x5C,
model756proii = 0x64,
model756proiii = 0x6E,
model910h = 0x60,
modelUnknown = 0xFF
@ -102,6 +105,8 @@ struct rigCapabilities {
std::vector <unsigned char> antennas;
std::vector <bandType> bands;
unsigned char bsr[20] = {0};
std::vector <mode_info> modes;
};

Wyświetl plik

@ -341,6 +341,13 @@
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="label_5">
<property name="text">
<string>Note: This allows other computers to connect to this computer's radio</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>

Wyświetl plik

@ -895,6 +895,9 @@ void wfmain::receiveFoundRigID(rigCapabilities rigCaps)
delayedCommand->setInterval( msMinTiming * 2); // 20 byte message
periodicPollingTimer->setInterval( msMinTiming ); // slower for s-meter poll
qInfo(logSystem()) << "Delay command interval timing: " << msMinTiming * 2 << "ms";
qInfo(logSystem()) << "Periodic polling timer: " << msMinTiming << "ms";
// Normal:
delayedCmdIntervalLAN_ms = msMinTiming * 2;
delayedCmdIntervalSerial_ms = msMinTiming * 2;
@ -1070,11 +1073,11 @@ void wfmain::loadSettings()
{
ui->baudRateCombo->setEnabled(false);
ui->serialDeviceListCombo->setEnabled(false);
ui->udpServerSetupBtn->setEnabled(false);
//ui->udpServerSetupBtn->setEnabled(false);
} else {
ui->baudRateCombo->setEnabled(true);
ui->serialDeviceListCombo->setEnabled(true);
ui->udpServerSetupBtn->setEnabled(true);
//ui->udpServerSetupBtn->setEnabled(true);
}
ui->lanEnableBtn->setChecked(prefs.enableLAN);
@ -2276,40 +2279,19 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
// Added so that server receives rig capabilities.
emit sendRigCaps(rigCaps);
rpt->setRig(rigCaps);
if(rigCaps.model==model7850)
// Set the mode combo box up:
ui->modeSelectCombo->blockSignals(true);
ui->modeSelectCombo->clear();
for(unsigned int i=0; i < rigCaps.modes.size(); i++)
{
ui->modeSelectCombo->addItem("PSK", 0x12);
ui->modeSelectCombo->addItem("PSK-R", 0x13);
ui->modeSelectCombo->addItem(rigCaps.modes.at(i).name,
rigCaps.modes.at(i).reg);
}
if(rigCaps.hasDV)
{
ui->modeSelectCombo->addItem("DV", 0x17);
}
if(rigCaps.hasDD)
{
ui->modeSelectCombo->addItem("DD", 0x22);
}
if(rigCaps.model==modelR8600)
{
ui->modeSelectCombo->addItem("WFM", 0x06);
ui->modeSelectCombo->addItem("FSK-R", 0x08);
ui->modeSelectCombo->addItem("S-AM (D)", 0x11);
ui->modeSelectCombo->addItem("S-AM (L)", 0x14);
ui->modeSelectCombo->addItem("S-AM (U)", 0x15);
ui->modeSelectCombo->addItem("P25", 0x16);
ui->modeSelectCombo->addItem("dPMR", 0x18);
ui->modeSelectCombo->addItem("NXDN-VN", 0x19);
ui->modeSelectCombo->addItem("NXDN-N", 0x20);
ui->modeSelectCombo->addItem("DCR", 0x21);
}
if (rigCaps.model == model705)
{
ui->modeSelectCombo->addItem("WFM", 0x06);
}
ui->modeSelectCombo->blockSignals(false);
if(rigCaps.model == model9700)
{
@ -3525,7 +3507,7 @@ void wfmain::on_serialEnableBtn_clicked(bool checked)
ui->txLatencyValue->setEnabled(!checked);
ui->baudRateCombo->setEnabled(checked);
ui->serialDeviceListCombo->setEnabled(checked);
ui->udpServerSetupBtn->setEnabled(true);
//ui->udpServerSetupBtn->setEnabled(true);
}
void wfmain::on_lanEnableBtn_clicked(bool checked)
@ -3538,7 +3520,7 @@ void wfmain::on_lanEnableBtn_clicked(bool checked)
ui->passwordTxt->setEnabled(checked);
ui->baudRateCombo->setEnabled(!checked);
ui->serialDeviceListCombo->setEnabled(!checked);
ui->udpServerSetupBtn->setEnabled(false);
//ui->udpServerSetupBtn->setEnabled(false);
if(checked)
{
showStatusBarText("After filling in values, press Save Settings and re-start wfview.");
@ -4387,7 +4369,7 @@ void wfmain::on_rigCIVaddrHexLine_editingFinished()
prefs.radioCIVAddr = propCIVAddr;
showStatusBarText(QString("Setting radio CI-V address to: 0x%1. Press Save Settings to retain.").arg(propCIVAddr, 2, 16));
} else {
showStatusBarText(QString("Could not use provided CI-V address. Address must be < 0x7E"));
showStatusBarText(QString("Could not use provided CI-V address. Address must be < 0xE0"));
}
}

Wyświetl plik

@ -18,7 +18,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<widget class="QWidget" name="mainTab">
<attribute name="title">
@ -2600,6 +2600,40 @@
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_28">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_33">
<property name="text">
<string>Please note: Changing CI-V Address, Serial Device, and Baud rate requires pressing &quot;Save Settings&quot;, closing wfview, and re-opening. </string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_29">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_34">
<property name="text">
<string>&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Please see the &lt;a href=&quot;https://wfview.org/wfview-user-manual/settings-tab/&quot;&gt;User Manual&lt;/a&gt; for more information. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">