diff --git a/ChangeLog.txt b/ChangeLog.txt index 438e922..1192dc9 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -8,6 +8,7 @@ CatRadio + High SWR indicator + Meter peak hold indicator + Debug mode + * Updated serial port configuration * Bug fix: NR level * Bug fix: Repeater shift * Bug fix: Power status diff --git a/dialogconfig.cpp b/dialogconfig.cpp index dc0dbf2..2676152 100644 --- a/dialogconfig.cpp +++ b/dialogconfig.cpp @@ -105,6 +105,7 @@ DialogConfig::DialogConfig(QWidget *parent) : ui->comboBox_comPort->setCurrentText(rigCom.rigPort); ui->comboBox_serialSpeed->setCurrentText(QString::number(rigCom.serialSpeed)); if (rigCom.civAddr) ui->lineEdit_civAddr->setText(QString::number(rigCom.civAddr,16)); + setDialogSerialConfig(rigCom.serialDataBits, rigCom.serialParity, rigCom.serialStopBits, rigCom.serialHandshake); } ui->spinBox_RefreshRate->setValue(rigCom.rigRefresh); ui->checkBox_fullPoll->setChecked(rigCom.fullPoll); @@ -117,6 +118,63 @@ DialogConfig::~DialogConfig() delete ui; } + +int DialogConfig::findRigModel(QString rigModel) +{ + QRegularExpression regexp("[0-9]+"); + QRegularExpressionMatch rigNumber = regexp.match(rigModel); + return rigNumber.captured(0).toInt(); +} + + +void DialogConfig::setDialogSerialConfig(int dataBits, int parity, int stopBits, int handshake) +{ + switch (dataBits) + { + case 7: ui->radioButton_dataBits7->setChecked(true); break; + case 8: ui->radioButton_dataBits8->setChecked(true); break; + } + + switch (parity) + { + case 0: ui->radioButton_parityNone->setChecked(true); break; + case 1: ui->radioButton_parityOdd->setChecked(true); break; + case 2: ui->radioButton_parityEven->setChecked(true); break; + } + + switch (stopBits) + { + case 1: ui->radioButton_stopBits1->setChecked(true); break; + case 2: ui->radioButton_stopBits2->setChecked(true); break; + } + + switch (handshake) + { + case 0: ui->radioButton_handshakeNone->setChecked(true); break; + case 1: ui->radioButton_handshakeXonXoff->setChecked(true); break; + case 2: ui->radioButton_handshakeHardware->setChecked(true); break; + } +} + + +void DialogConfig::setRigSerialConfigFromDialog() +{ + if (ui->radioButton_dataBits7->isChecked()) rigCom.serialDataBits = 7; + else rigCom.serialDataBits = 8; + + if (ui->radioButton_parityOdd->isChecked()) rigCom.serialParity = RIG_PARITY_ODD; + else if (ui->radioButton_parityEven->isChecked()) rigCom.serialParity = RIG_PARITY_EVEN; + else rigCom.serialParity = RIG_PARITY_NONE; + + if (ui->radioButton_stopBits1->isChecked()) rigCom.serialStopBits = 1; + else rigCom.serialStopBits = 2; + + if (ui->radioButton_handshakeXonXoff->isChecked()) rigCom.serialHandshake = RIG_HANDSHAKE_XONXOFF; + else if (ui->radioButton_handshakeHardware->isChecked()) rigCom.serialHandshake = RIG_HANDSHAKE_HARDWARE; + else rigCom.serialHandshake = RIG_HANDSHAKE_NONE; +} + + void DialogConfig::on_buttonBox_accepted() { bool civAddrConv; @@ -134,9 +192,10 @@ void DialogConfig::on_buttonBox_accepted() else { QString rigModel = ui->comboBox_rigModel->currentText(); - QRegularExpression regexp("[0-9]+"); - QRegularExpressionMatch rigNumber = regexp.match(rigModel); - rigCom.rigModel = rigNumber.captured(0).toInt(); + //QRegularExpression regexp("[0-9]+"); + //QRegularExpressionMatch rigNumber = regexp.match(rigModel); + //rigCom.rigModel = rigNumber.captured(0).toInt(); + rigCom.rigModel = findRigModel(rigModel); if (ui->checkBox_netRigctl->isChecked()) //TCP port { @@ -159,6 +218,7 @@ void DialogConfig::on_buttonBox_accepted() rigCom.rigPort = ui->comboBox_comPort->currentText(); rigCom.serialSpeed = ui->comboBox_serialSpeed->currentText().toInt(); rigCom.civAddr = ui->lineEdit_civAddr->text().toInt(&civAddrConv,16); + setRigSerialConfigFromDialog(); if (rigCom.rigPort == "" && rigCom.rigModel != 1 && rigCom.rigModel != 6) { @@ -183,6 +243,10 @@ void DialogConfig::on_buttonBox_accepted() configFile.setValue("rigPort", rigCom.rigPort); configFile.setValue("serialSpeed", ui->comboBox_serialSpeed->currentText()); configFile.setValue("civAddress", ui->lineEdit_civAddr->text().toInt(&civAddrConv,16)); + configFile.setValue("serialDataBits", rigCom.serialDataBits); + configFile.setValue("serialParity", rigCom.serialParity); + configFile.setValue("serialStopBits", rigCom.serialStopBits); + configFile.setValue("serialHandshake", rigCom.serialHandshake); configFile.setValue("netRigctl", ui->checkBox_netRigctl->isChecked()); configFile.setValue("rigRefresh", ui->spinBox_RefreshRate->value()); configFile.setValue("fullPolling", ui->checkBox_fullPoll->isChecked()); @@ -232,11 +296,43 @@ void DialogConfig::on_checkBox_netRigctl_toggled(bool checked) void DialogConfig::on_comboBox_rigModel_currentIndexChanged(int index) { - if (index == 2 || index == 3 || index == 4) + int currentRig = 0; + RIG *rig; + + if (index) { - ui->checkBox_netRigctl->setChecked(true); - ui->tabWidget_Config->setCurrentIndex(1); + QString rigModel = ui->comboBox_rigModel->currentText(); + currentRig = findRigModel(rigModel); } + + if (currentRig) + { + rig = rig_init(currentRig); + if (rig->caps->port_type == RIG_PORT_SERIAL) + { + ui->checkBox_netRigctl->setChecked(false); + ui->tabWidget_Config->setCurrentIndex(0); + setDialogSerialConfig(rig->caps->serial_data_bits, rig->caps->serial_parity, rig->caps->serial_stop_bits, rig->caps->serial_handshake); + //qDebug() << rig->caps->serial_data_bits << rig->caps->serial_parity << rig->caps->serial_stop_bits << rig->caps->serial_handshake; + } + else if (rig->caps->port_type == RIG_PORT_NETWORK) + { + ui->checkBox_netRigctl->setChecked(true); + ui->tabWidget_Config->setCurrentIndex(1); + } + else if (rig->caps->port_type == RIG_PORT_NONE) + { + ui->checkBox_netRigctl->setChecked(false); + ui->tabWidget_Config->setCurrentIndex(0); + ui->comboBox_comPort->clear(); + } + } + + //if (index == 2 || index == 3 || index == 4) + //{ + // ui->checkBox_netRigctl->setChecked(true); + // ui->tabWidget_Config->setCurrentIndex(1); + //} } void DialogConfig::on_comboBox_comPort_currentIndexChanged(int index) diff --git a/dialogconfig.h b/dialogconfig.h index 702cfb6..7a9e81a 100644 --- a/dialogconfig.h +++ b/dialogconfig.h @@ -45,6 +45,10 @@ private slots: private: Ui::DialogConfig *ui; + + int findRigModel(QString rigModel); //Find hamlib rig model from the rig selected in the comboBox_rigModel + void setDialogSerialConfig(int dataBits, int parity, int stopBits, int handshake); //Set the serial port configuration on the dialog + void setRigSerialConfigFromDialog(); //Set the rigConf serial config from dialog serial settings }; int printRigList(const struct rig_caps *rigCaps, void *data); //Retrives rig list from Hamlib and write to file diff --git a/dialogconfig.ui b/dialogconfig.ui index ae5ffe5..adc355a 100644 --- a/dialogconfig.ui +++ b/dialogconfig.ui @@ -7,7 +7,7 @@ 0 0 390 - 378 + 700 @@ -118,6 +118,124 @@ + + + + Data Bits + + + + + + 7 + + + + + + + 8 + + + true + + + + + + + + + + Stop Bits + + + + + + 1 + + + true + + + + + + + 2 + + + + + + + + + + Handshake + + + + + + XON/XOFF + + + + + + + Hardware + + + + + + + None + + + true + + + + + + + + + + Parity + + + + + + Odd + + + + + + + Even + + + + + + + None + + + true + + + + + + @@ -215,16 +333,6 @@ - - - - Auto power-on on startup - - - Auto power ON - - - @@ -235,6 +343,16 @@ + + + + Auto power-on on startup + + + Auto power ON + + + @@ -251,11 +369,25 @@ + comboBox_rigModel tabWidget_Config comboBox_comPort comboBox_serialSpeed lineEdit_civAddr + radioButton_dataBits7 + radioButton_dataBits8 + radioButton_parityNone + radioButton_parityOdd + radioButton_parityEven + radioButton_stopBits1 + radioButton_stopBits2 + radioButton_handshakeNone + radioButton_handshakeXonXoff + radioButton_handshakeHardware spinBox_RefreshRate + checkBox_fullPoll + checkBox_autoConnect + checkBox_autoPowerOn checkBox_netRigctl lineEdit_ip @@ -268,8 +400,8 @@ accept() - 259 - 324 + 270 + 688 157 @@ -284,8 +416,8 @@ reject() - 327 - 324 + 338 + 688 286 diff --git a/mainwindow.cpp b/mainwindow.cpp index a9d6da1..89e113d 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -106,10 +106,14 @@ MainWindow::MainWindow(QWidget *parent) //* Load settings from catradio.ini QSettings configFile(QString("catradio.ini"), QSettings::IniFormat); - rigCom.rigModel = configFile.value("rigModel", 0).toInt(); + rigCom.rigModel = configFile.value("rigModel", 0).toUInt(); rigCom.rigPort = configFile.value("rigPort").toString(); - rigCom.serialSpeed = configFile.value("serialSpeed", 9600).toInt(); + rigCom.serialSpeed = configFile.value("serialSpeed", 9600).toUInt(); rigCom.civAddr = configFile.value("civAddress", 0).toInt(); + rigCom.serialDataBits = configFile.value("serialDataBits", 8).toUInt(); + rigCom.serialParity = configFile.value("serialParity", 0).toUInt(); + rigCom.serialStopBits = configFile.value("serialStopBits", 2).toUInt(); + rigCom.serialHandshake = configFile.value("serialHandshake", 0).toUInt(); rigCom.netRigctl = configFile.value("netRigctl", false).toBool(); rigCom.rigRefresh = configFile.value("rigRefresh", 100).toInt(); rigCom.fullPoll = configFile.value("fullPolling", true).toBool(); diff --git a/rigdata.h b/rigdata.h index 4a2f792..6039552 100644 --- a/rigdata.h +++ b/rigdata.h @@ -30,6 +30,10 @@ typedef struct { unsigned rigModel; //Hamlib rig model QString rigPort; //COM port or IP address unsigned serialSpeed; //Serial port baud rate + unsigned serialDataBits; //Serial port data bit + unsigned serialParity; //Serial port parity (serial_parity_e RIG_PARITY_NONE = 0, RIG_PARITY_ODD, RIG_PARITY_EVEN) + unsigned serialStopBits; + unsigned serialHandshake; //Serial port handshake (serial_handshake_e RIG_HANDSHAKE_NONE = 0, RIG_HANDSHAKE_XONXOFF, RIG_HANDSHAKE_HARDWARE) int civAddr; //CI-V address (decimal, Icom radio) bool netRigctl; //TCP NET Rigctl unsigned rigRefresh; //GUI refresh interval (ms)