kopia lustrzana https://gitlab.com/eliggett/wfview
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
rodzic
224e73ae3d
commit
3538e545d9
|
@ -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;
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
136
wfmain.cpp
136
wfmain.cpp
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
11
wfmain.h
11
wfmain.h
|
@ -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;
|
||||
|
|
10
wfmain.ui
10
wfmain.ui
|
@ -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">
|
||||
|
|
Ładowanie…
Reference in New Issue