We can now set the modulation input and read the modulation input for

both data on and data off.

Next step is to change the "Mic" slider to adjust whatever input is
selected.
merge-requests/2/head
Elliott Liggett 2021-02-19 00:14:40 -08:00
rodzic 224e73ae3d
commit 3538e545d9
6 zmienionych plików z 163 dodań i 51 usunięć

Wyświetl plik

@ -1607,9 +1607,9 @@ void rigCommander::parseDetailedRegisters1A05()
// It is a work in progress.
// TODO: inputMod source and gain for models: 7700, and 7600
int level = bcdHexToUChar(payloadIn[4]) + (10*bcdHexToUChar(payloadIn[5]));
int level = bcdHexToUChar(payloadIn[4]) + (100*bcdHexToUChar(payloadIn[5]));
int subcmd = bcdHexToUChar(payloadIn[3]) + (10*bcdHexToUChar(payloadIn[2]));
int subcmd = bcdHexToUChar(payloadIn[3]) + (100*bcdHexToUChar(payloadIn[2]));
rigInput input;
input = (rigInput)bcdHexToUChar(payloadIn[4]);
@ -1620,6 +1620,7 @@ void rigCommander::parseDetailedRegisters1A05()
case model9700:
switch(subcmd)
{
case 72:
// course reference
emit haveRefAdjustCourse( bcdHexToUChar(payloadIn[5]) + (100*bcdHexToUChar(payloadIn[4])) );
@ -1915,6 +1916,8 @@ void rigCommander::determineRigCaps()
rigCaps.spectAmpMax = 0;
rigCaps.spectLenMax = 0;
rigCaps.inputs.append(inputMic);
rigCaps.hasTransmit = true;
@ -1925,6 +1928,8 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 11;
rigCaps.spectAmpMax = 160;
rigCaps.spectLenMax = 475;
rigCaps.inputs.append(inputUSB);
rigCaps.inputs.append(inputACC);
rigCaps.hasLan = false;
rigCaps.hasEthernet = false;
rigCaps.hasWiFi = false;
@ -1936,6 +1941,7 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 11;
rigCaps.spectAmpMax = 160;
rigCaps.spectLenMax = 475;
rigCaps.inputs.clear();
rigCaps.hasLan = true;
rigCaps.hasEthernet = true;
rigCaps.hasWiFi = false;
@ -1947,6 +1953,9 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 11;
rigCaps.spectAmpMax = 160;
rigCaps.spectLenMax = 475;
rigCaps.inputs.append(inputLAN);
rigCaps.inputs.append(inputUSB);
rigCaps.inputs.append(inputACC);
rigCaps.hasLan = true;
rigCaps.hasEthernet = true;
rigCaps.hasWiFi = false;
@ -1959,6 +1968,9 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 15;
rigCaps.spectAmpMax = 200;
rigCaps.spectLenMax = 689;
rigCaps.inputs.append(inputLAN);
rigCaps.inputs.append(inputUSB);
rigCaps.inputs.append(inputACC);
rigCaps.hasLan = true;
rigCaps.hasEthernet = true;
rigCaps.hasWiFi = false;
@ -1969,6 +1981,10 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 15;
rigCaps.spectAmpMax = 136;
rigCaps.spectLenMax = 689;
rigCaps.inputs.append(inputLAN);
rigCaps.inputs.append(inputUSB);
rigCaps.inputs.append(inputACCA);
rigCaps.inputs.append(inputACCB);
rigCaps.hasLan = true;
rigCaps.hasEthernet = true;
rigCaps.hasWiFi = false;
@ -1980,6 +1996,8 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 11;
rigCaps.spectAmpMax = 160;
rigCaps.spectLenMax = 475;
rigCaps.inputs.append(inputLAN);
rigCaps.inputs.append(inputUSB);
rigCaps.hasLan = true;
rigCaps.hasEthernet = false;
rigCaps.hasWiFi = true;
@ -1987,9 +2005,20 @@ void rigCommander::determineRigCaps()
rigCaps.hasDV = true;
rigCaps.hasATU = true;
break;
case model7100:
rigCaps.modelName = QString("IC-7100");
rigCaps.hasSpectrum = false;
rigCaps.inputs.append(inputUSB);
rigCaps.inputs.append(inputACC);
rigCaps.hasLan = false;
rigCaps.hasEthernet = false;
rigCaps.hasWiFi = false;
rigCaps.hasATU = true;
break;
case model706:
rigCaps.modelName = QString("IC-706");
rigCaps.hasSpectrum = false;
rigCaps.inputs.clear();
rigCaps.hasLan = false;
rigCaps.hasEthernet = false;
rigCaps.hasWiFi = false;
@ -2001,6 +2030,7 @@ void rigCommander::determineRigCaps()
rigCaps.spectSeqMax = 0;
rigCaps.spectAmpMax = 0;
rigCaps.spectLenMax = 0;
rigCaps.inputs.clear();
rigCaps.hasLan = false;
rigCaps.hasEthernet = false;
rigCaps.hasWiFi = false;

Wyświetl plik

@ -15,15 +15,6 @@
// note: using a define because switch case doesn't even work with const unsigned char. Surprised me.
#define compCivAddr 0xE1
enum rigInput{ inputMic=0,
inputACC=1,
inputUSB=3,
inputLAN=5,
inputACCA,
inputACCB,
inputUnknown=0xff
};
enum duplexMode{
dmSplitOff=0x00,
dmSplitOn=0x01,

Wyświetl plik

@ -3,8 +3,9 @@
#include <QtNumeric>
#include <QString>
#include <QList>
// Credit:
// Credit for parts of CIV list:
// http://www.docksideradio.com/Icom%20Radio%20Hex%20Addresses.htm
// 7850 and 7851 have the same commands and are essentially identical
@ -25,6 +26,15 @@ enum model_kind {
modelUnknown = 0xFF
};
enum rigInput{ inputMic=0,
inputACC=1,
inputUSB=3,
inputLAN=5,
inputACCA,
inputACCB,
inputNone,
inputUnknown=0xff
};
model_kind determineRadioModel(unsigned char rigID);
@ -40,6 +50,8 @@ struct rigCapabilities {
bool hasEthernet;
bool hasWiFi;
QVector<rigInput> inputs;
bool hasSpectrum;
quint8 spectSeqMax;
quint16 spectAmpMax;

Wyświetl plik

@ -301,6 +301,10 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
connect(this, SIGNAL(setDuplexMode(duplexMode)), rig, SLOT(setDuplexMode(duplexMode)));
connect(rig, SIGNAL(haveDuplexMode(duplexMode)), this, SLOT(receiveDuplexMode(duplexMode)));
connect(this, SIGNAL(getModInput(bool)), rig, SLOT(getModInput(bool)));
connect(rig, SIGNAL(haveModInput(rigInput,bool)), this, SLOT(receiveModInput(rigInput, bool)));
connect(this, SIGNAL(setModInput(rigInput, bool)), rig, SLOT(setModInput(rigInput,bool)));
connect(rig, SIGNAL(haveSpectrumData(QByteArray, double, double)), this, SLOT(receiveSpectrumData(QByteArray, double, double)));
connect(rig, SIGNAL(haveSpectrumFixedMode(bool)), this, SLOT(receiveSpectrumFixedMode(bool)));
connect(this, SIGNAL(setFrequency(double)), rig, SLOT(setFrequency(double)));
@ -630,23 +634,6 @@ void wfmain::receiveFoundRigID(rigCapabilities rigCaps)
//now we know what the rig ID is:
//qDebug() << "In wfview, we now have a reply to our request for rig identity sent to CIV BROADCAST.";
// We have to be careful here:
// If we enter this a second time, we will get two sets of DV and DD modes
// Also, if ever there is a rig with DV but without DV, we'll be off by one.
// A better solution is to translate the combo selection to a shared type
// such as an enum or even the actual CIV mode byte.
/*
if(rigCaps.hasDV)
{
ui->modeSelectCombo->addItem("DV");
}
if(rigCaps.hasDD)
{
ui->modeSelectCombo->addItem("DD");
}
*/
delayedCommand->setInterval(100); // faster polling is ok now.
receiveRigID(rigCaps);
getInitialRigState();
@ -1256,6 +1243,9 @@ void wfmain:: getInitialRigState()
cmdOutQue.append(cmdDispEnable);
cmdOutQue.append(cmdSpecOn);
cmdOutQue.append(cmdGetModInput);
cmdOutQue.append(cmdGetModDataInput);
cmdOutQue.append(cmdNone);
if(rigCaps.hasATU)
@ -1430,6 +1420,12 @@ void wfmain::runDelayedCommand()
case cmdSetDataModeOn:
emit setDataMode(true);
break;
case cmdGetModInput:
emit getModInput(false);
break;
case cmdGetModDataInput:
emit getModInput(true);
break;
case cmdGetDuplexMode:
emit getDuplexMode();
break;
@ -1547,6 +1543,42 @@ void wfmain::receiveRigID(rigCapabilities rigCaps)
ui->satOpsBtn->setDisabled(true);
ui->adjRefBtn->setDisabled(true);
}
QString inName;
for(int i=0; i < rigCaps.inputs.length(); i++)
{
switch(rigCaps.inputs.at(i))
{
case inputMic:
inName = "Mic";
break;
case inputLAN:
inName = "LAN";
break;
case inputUSB:
inName = "USB";
break;
case inputACC:
inName = "ACC";
break;
case inputACCA:
inName = "ACCA";
break;
case inputACCB:
inName = "ACCB";
break;
default:
inName = "Unknown";
break;
}
ui->modInputCombo->addItem(inName, rigCaps.inputs.at(i));
ui->modInputDataCombo->addItem(inName, rigCaps.inputs.at(i));
}
if(rigCaps.inputs.length() == 0)
{
ui->modInputCombo->addItem("None", inputNone);
ui->modInputDataCombo->addItem("None", inputNone);
}
ui->tuneEnableChk->setEnabled(rigCaps.hasATU);
ui->tuneNowBtn->setEnabled(rigCaps.hasATU);
@ -2701,9 +2733,30 @@ void wfmain::receiveMicGain(unsigned char gain)
changeSliderQuietly(ui->micGainSlider, gain);
}
void wfmain::receiveModInput(rigInput input)
void wfmain::receiveModInput(rigInput input, bool dataOn)
{
(void)input;
QComboBox *box;
bool found;
qDebug() << "Found rig input " << (int) input << " with data set to: " << dataOn;
if(dataOn)
{
box = ui->modInputDataCombo;
} else {
box = ui->modInputCombo;
}
for(int i=0; i < box->count(); i++)
{
if(box->itemData(i).toInt() == (int)input)
{
box->blockSignals(true);
box->setCurrentIndex(i);
box->blockSignals(false);
found = true;
}
}
if(!found)
qDebug() << "Could not find modulation input: " << (int)input;
}
void wfmain::receiveDuplexMode(duplexMode dm)
@ -2782,23 +2835,6 @@ void wfmain::receiveSpectrumRefLevel(int level)
changeSliderQuietly(ui->scopeRefLevelSlider, level);
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
{
qDebug() << "Debug button pressed.";
// TODO: Why don't these commands work?!
//emit getScopeMode();
//emit getScopeEdge(); // 1,2,3 only in "fixed" mode
//emit getScopeSpan(); // in khz, only in "center" mode
// emit getLevels();
// emit getMeters(amTransmitting);
//emit getSpectrumRefLevel();
emit getDuplexMode();
}
// Slot to send/receive server config.
// If store is true then write to config otherwise send current config by signal
void wfmain::serverConfigRequested(SERVERCONFIG conf, bool store)
@ -2844,4 +2880,32 @@ void wfmain::on_rptAutoBtn_clicked()
emit setDuplexMode(dmDupAutoOn);
}
void wfmain::on_modInputCombo_activated(int index)
{
emit setModInput( (rigInput)ui->modInputCombo->currentData().toInt(), false );
}
void wfmain::on_modInputDataCombo_activated(int index)
{
emit setModInput( (rigInput)ui->modInputDataCombo->currentData().toInt(), true );
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
{
qDebug() << "Debug button pressed.";
// TODO: Why don't these commands work?!
//emit getScopeMode();
//emit getScopeEdge(); // 1,2,3 only in "fixed" mode
//emit getScopeSpan(); // in khz, only in "center" mode
// emit getLevels();
// emit getMeters(amTransmitting);
// emit getTSQL();
emit getModInput(false);
emit getModInput(true);
}

Wyświetl plik

@ -47,7 +47,8 @@ signals:
void getDataMode();
void getDuplexMode();
void setDuplexMode(duplexMode dm);
void getModInput();
void getModInput(bool dataOn);
void setModInput(rigInput input, bool dataOn);
void getPTT();
void setPTT(bool pttOn);
void getBandStackReg(char band, char regCode);
@ -149,7 +150,7 @@ private slots:
void receivePTTstatus(bool pttOn);
void receiveDataModeStatus(bool dataOn);
void receiveBandStackReg(float freq, char mode, bool dataOn); // freq, mode, (filter,) datamode
void receiveModInput(rigInput input);
void receiveModInput(rigInput input, bool dataOn);
void receiveDuplexMode(duplexMode dm);
@ -356,6 +357,10 @@ private slots:
void on_useSystemThemeChk_clicked(bool checked);
void on_modInputCombo_activated(int index);
void on_modInputDataCombo_activated(int index);
private:
Ui::wfmain *ui;
QSettings settings;
@ -448,7 +453,7 @@ private:
enum cmds {cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdGetMode, cmdGetDataMode, cmdSetDataModeOn, cmdSetDataModeOff,
cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdGetAfGain,
cmdGetSql, cmdGetATUStatus, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT,
cmdGetTxPower, cmdGetMicGain, cmdGetSpectrumRefLevel, cmdGetDuplexMode};
cmdGetTxPower, cmdGetMicGain, cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput};
cmds cmdOut;
QVector <cmds> cmdOutQue;
freqMemory mem;

Wyświetl plik

@ -1511,6 +1511,16 @@
<item>
<widget class="QComboBox" name="modInputCombo"/>
</item>
<item>
<widget class="QLabel" name="label_29">
<property name="text">
<string>Data Mod Input:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="modInputDataCombo"/>
</item>
<item>
<widget class="QCheckBox" name="tuneEnableChk">
<property name="text">