From cbed84e0c7b3776b4c8480754d1fd37bbf5fb0eb Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Tue, 23 Jul 2013 17:32:59 +0000 Subject: [PATCH] 1. Full control of DTR and RTS on serial port used for CAT control -- patch submitted by G4WJS. 2. Improved(???) means of multiple tries when polling radio for frequency. 3. Minor tweaks to widget sizes on devsetup screen. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3500 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- devsetup.cpp | 26 +++++++++--- devsetup.h | 7 ++- devsetup.ui | 113 +++++++++++++++++++++++++++++-------------------- mainwindow.cpp | 72 +++++++++++++++++-------------- mainwindow.h | 5 ++- rigclass.cpp | 46 +++++++++++--------- rigclass.h | 2 +- wsjtx.iss | 2 +- 8 files changed, 161 insertions(+), 112 deletions(-) diff --git a/devsetup.cpp b/devsetup.cpp index 240317410..8d1e61a39 100644 --- a/devsetup.cpp +++ b/devsetup.cpp @@ -489,6 +489,11 @@ void DevSetup::on_handshakeComboBox_activated(int index) m_handshake=ui.handshakeComboBox->itemText(index); } +void DevSetup::on_handshakeComboBox_currentIndexChanged(int index) +{ + ui.RTSCheckBox->setEnabled(index != 2); +} + void DevSetup::on_dataBitsComboBox_activated(int index) { m_dataBitsIndex=index; @@ -567,9 +572,9 @@ void DevSetup::openRig() sprintf(buf,"%d",m_stopBits); rig->setConf("stop_bits",buf); rig->setConf("serial_handshake",m_handshake.toLatin1().data()); - if(m_bDTRoff) { - rig->setConf("rts_state","OFF"); - rig->setConf("dtr_state","OFF"); + rig->setConf("dtr_state",m_bDTR ? "ON" : "OFF"); + if(ui.RTSCheckBox->isEnabled()) { + rig->setConf("rts_state",m_bRTS ? "ON" : "OFF"); } } @@ -604,9 +609,14 @@ void DevSetup::on_testPTTButton_clicked() } } -void DevSetup::on_cbDTRoff_toggled(bool checked) +void DevSetup::on_DTRCheckBox_toggled(bool checked) { - m_bDTRoff=checked; + m_bDTR=checked; +} + +void DevSetup::on_RTSCheckBox_toggled(bool checked) +{ + m_bRTS=checked; } void DevSetup::on_rbData_toggled(bool checked) @@ -635,7 +645,6 @@ void DevSetup::on_pttMethodComboBox_currentIndexChanged(int index) void DevSetup::enableWidgets() { ui.cbEnableCAT->setChecked(m_catEnabled); - ui.cbDTRoff->setChecked(m_bDTRoff); ui.rigComboBox->setEnabled(m_catEnabled); ui.testCATButton->setEnabled(m_catEnabled); ui.label_4->setEnabled(m_catEnabled); @@ -653,7 +662,10 @@ void DevSetup::enableWidgets() ui.dataBitsComboBox->setEnabled(bSerial); ui.stopBitsComboBox->setEnabled(bSerial); ui.handshakeComboBox->setEnabled(bSerial); - ui.cbDTRoff->setEnabled(bSerial); + ui.DTRCheckBox->setEnabled(bSerial); + ui.DTRCheckBox->setChecked(m_bDTR); + ui.RTSCheckBox->setEnabled(bSerial && m_handshakeIndex != 2); + ui.RTSCheckBox->setChecked(m_bRTS); ui.rbData->setEnabled(bSerial); ui.rbMic->setEnabled(bSerial); ui.label_21->setEnabled(bSerial); diff --git a/devsetup.h b/devsetup.h index 838371a35..9bf129532 100644 --- a/devsetup.h +++ b/devsetup.h @@ -46,7 +46,8 @@ public: bool m_catEnabled; bool m_After73; bool m_bRigOpen; - bool m_bDTRoff; + bool m_bDTR; + bool m_bRTS; bool m_pttData; bool m_bSplit; bool m_bXIT; @@ -82,13 +83,15 @@ private slots: void on_cbEnableCAT_toggled(bool checked); void on_serialRateComboBox_activated(int index); void on_handshakeComboBox_activated(int index); + void on_handshakeComboBox_currentIndexChanged(int index); void on_dataBitsComboBox_activated(int index); void on_stopBitsComboBox_activated(int index); void on_rigComboBox_activated(int index); void on_cbID73_toggled(bool checked); void on_testCATButton_clicked(); void on_testPTTButton_clicked(); - void on_cbDTRoff_toggled(bool checked); + void on_DTRCheckBox_toggled(bool checked); + void on_RTSCheckBox_toggled(bool checked); void on_rbData_toggled(bool checked); void on_pollSpinBox_valueChanged(int n); void on_pttComboBox_currentIndexChanged(int index); diff --git a/devsetup.ui b/devsetup.ui index 857ab809b..049324c74 100644 --- a/devsetup.ui +++ b/devsetup.ui @@ -6,8 +6,8 @@ 0 0 - 588 - 557 + 570 + 465 @@ -594,9 +594,22 @@ - + + + false + - RTS/DTR OFF + DTR + + + + + + + false + + + RTS @@ -931,7 +944,7 @@ - XonXoff + XONXOFF @@ -1839,8 +1852,8 @@ 0 0 - 527 - 554 + 308 + 505 @@ -1863,13 +1876,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -1885,7 +1898,7 @@ 90 - 27 + 20 @@ -1898,7 +1911,7 @@ 90 - 27 + 20 @@ -1917,7 +1930,7 @@ 90 - 16777215 + 20 @@ -1939,13 +1952,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -1961,7 +1974,7 @@ 90 - 27 + 20 @@ -1977,7 +1990,7 @@ 90 - 27 + 20 @@ -2006,13 +2019,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -2034,13 +2047,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -2062,13 +2075,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -2081,10 +2094,16 @@ + + + 0 + 20 + + 90 - 27 + 20 @@ -2097,7 +2116,7 @@ 90 - 16777215 + 20 @@ -2110,7 +2129,7 @@ 90 - 16777215 + 20 @@ -2123,7 +2142,7 @@ 90 - 16777215 + 20 @@ -2139,7 +2158,7 @@ 90 - 16777215 + 20 @@ -2155,7 +2174,7 @@ 90 - 27 + 20 @@ -2174,13 +2193,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -2205,13 +2224,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -2230,7 +2249,7 @@ 90 - 27 + 20 @@ -2243,7 +2262,7 @@ 90 - 27 + 20 @@ -2256,7 +2275,7 @@ 90 - 16777215 + 20 @@ -2275,13 +2294,13 @@ 90 - 27 + 20 90 - 16777215 + 20 @@ -2300,7 +2319,7 @@ 90 - 16777215 + 20 @@ -2343,7 +2362,7 @@ 90 - 27 + 20 @@ -2356,7 +2375,7 @@ 90 - 16777215 + 20 @@ -2369,7 +2388,7 @@ 90 - 16777215 + 20 @@ -2382,7 +2401,7 @@ 90 - 16777215 + 20 @@ -2395,7 +2414,7 @@ 90 - 16777215 + 20 @@ -2408,7 +2427,7 @@ 90 - 16777215 + 20 @@ -2421,7 +2440,7 @@ 90 - 16777215 + 20 @@ -2434,7 +2453,7 @@ 90 - 16777215 + 20 @@ -2447,7 +2466,7 @@ 90 - 16777215 + 20 diff --git a/mainwindow.cpp b/mainwindow.cpp index a3f9445b1..eeb2390a1 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -32,7 +32,7 @@ WideGraph* g_pWideGraph = NULL; LogQSO* logDlg = NULL; Rig* rig = NULL; QTextEdit* pShortcuts; -QTcpSocket* socket = new QTcpSocket(0); +QTcpSocket* commanderSocket = new QTcpSocket(0); QString rev="$Rev$"; QString Program_Title_Version=" WSJT-X v1.1, r" + rev.mid(6,4) + @@ -466,8 +466,8 @@ void MainWindow::writeSettings() settings.setValue("Runaway",m_runaway); settings.setValue("Tx2QSO",m_tx2QSO); settings.setValue("MultipleOK",m_bMultipleOK); - settings.setValue("DTRoff",m_bDTRoff); - settings.setValue("pttData",m_pttData); + settings.setValue("DTR",m_bDTR); + settings.setValue("RTS",m_bRTS); settings.setValue("pttData",m_pttData); settings.setValue("LogQSOgeom",m_logQSOgeom); settings.setValue("Polling",m_poll); settings.setValue("OutBufSize",outBufSize); @@ -615,8 +615,8 @@ void MainWindow::readSettings() ui->actionTx2QSO->setChecked(m_tx2QSO); m_bMultipleOK=settings.value("MultipleOK",false).toBool(); ui->actionAllow_multiple_instances->setChecked(m_bMultipleOK); - m_bDTRoff=settings.value("DTRoff",false).toBool(); - m_pttData=settings.value("pttData",false).toBool(); + m_bDTR=settings.value("DTR",false).toBool(); + m_bRTS=settings.value("RTS",false).toBool(); m_pttData=settings.value("pttData",false).toBool(); m_poll=settings.value("Polling",0).toInt(); m_logQSOgeom=settings.value("LogQSOgeom",QRect(500,400,424,283)).toRect(); outBufSize=settings.value("OutBufSize",4096).toInt(); @@ -737,8 +737,8 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog dlg.m_stopBitsIndex=m_stopBitsIndex; dlg.m_handshake=m_handshake; dlg.m_handshakeIndex=m_handshakeIndex; - dlg.m_bDTRoff=m_bDTRoff; - dlg.m_pttData=m_pttData; + dlg.m_bDTR=m_bDTR; + dlg.m_bRTS=m_bRTS; dlg.m_pttData=m_pttData; dlg.m_poll=m_poll; dlg.m_bSplit=m_bSplit; dlg.m_bXIT=m_bXIT; @@ -780,7 +780,8 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog m_stopBitsIndex=dlg.m_stopBitsIndex; m_handshake=dlg.m_handshake; m_handshakeIndex=dlg.m_handshakeIndex; - m_bDTRoff=dlg.m_bDTRoff; + m_bDTR=dlg.m_bDTR; + m_bRTS=dlg.m_bRTS; m_pttData=dlg.m_pttData; m_poll=dlg.m_poll; @@ -1841,27 +1842,8 @@ void MainWindow::guiUpdate() signalMeter->setValue(0); } - if(m_catEnabled and m_poll>0 and (nsec%m_poll)==0 and !m_decoderBusy) { - double fMHz; - if(m_dontReadFreq) { - m_dontReadFreq=false; - } else if(!m_transmitting) { - for(int iter=0; iter<3; iter++) { - fMHz=rig->getFreq(RIG_VFO_CURR)/1000000.0; - if(fMHz<0.0 and iter>=2) { - rt.sprintf("Rig control error %d\nFailed to read frequency.", - int(1000000.0*fMHz)); - msgBox(rt); - m_catEnabled=false; - ui->readFreq->setStyleSheet("QPushButton{background-color: red; \ - border-width: 0px; border-radius: 5px;}"); - } - } - int ndiff=1000000.0*(fMHz-m_dialFreq); - if(ndiff!=0) dialFreqChanged2(fMHz); - } - } - + if(m_catEnabled and m_poll>0 and (nsec%m_poll)==0 and + !m_decoderBusy) pollRigFreq(); m_sec0=nsec; } @@ -2952,15 +2934,16 @@ void MainWindow::rigOpen() sprintf(buf,"%d",m_stopBits); rig->setConf("stop_bits",buf); rig->setConf("serial_handshake",m_handshake.toLatin1().data()); - if(m_bDTRoff) { - rig->setConf("rts_state","OFF"); - rig->setConf("dtr_state","OFF"); + if(m_handshakeIndex != 2) { + rig->setConf("rts_state",m_bRTS ? "ON" : "OFF"); + rig->setConf("dtr_state",m_bDTR ? "ON" : "OFF"); } } ret=rig->open(m_rig); if(ret==RIG_OK) { m_bRigOpen=true; + m_bad=0; if(m_poll==0) ui->readFreq->setEnabled(true); m_CATerror=false; } else { @@ -3084,3 +3067,28 @@ void MainWindow::on_cbPlus2kHz_toggled(bool checked) m_plus2kHz=checked; on_bandComboBox_activated(m_band); } + +void MainWindow::pollRigFreq() +{ + double fMHz; + if(m_dontReadFreq) { + m_dontReadFreq=false; + } else if(!m_transmitting) { + fMHz=rig->getFreq(RIG_VFO_CURR)/1000000.0; + if(fMHz<0.0) { + m_bad++; + if(m_bad>=20) { + QString rt; + rt.sprintf("Rig control error %d\nFailed to read frequency.", + int(1000000.0*fMHz)); + msgBox(rt); + m_catEnabled=false; + ui->readFreq->setStyleSheet("QPushButton{background-color: red; \ + border-width: 0px; border-radius: 5px;}"); + } + } else { + int ndiff=1000000.0*(fMHz-m_dialFreq); + if(ndiff!=0) dialFreqChanged2(fMHz); + } +} +} diff --git a/mainwindow.h b/mainwindow.h index 62c787b5b..939c310dd 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -210,6 +210,7 @@ private: qint32 m_poll; qint32 m_fMin; qint32 m_fMax; + qint32 m_bad; bool m_monitoring; bool m_transmitting; @@ -249,7 +250,8 @@ private: bool m_tune; bool m_bRigOpen; bool m_bMultipleOK; - bool m_bDTRoff; + bool m_bDTR; + bool m_bRTS; bool m_pttData; bool m_dontReadFreq; bool m_lockTxFreq; @@ -355,6 +357,7 @@ private: void freeText(); void displayTxMsg(QString t); void rigOpen(); + void pollRigFreq(); bool gridOK(QString g); QString baseCall(QString t); }; diff --git a/rigclass.cpp b/rigclass.cpp index 3f61e0373..4c7df4f31 100644 --- a/rigclass.cpp +++ b/rigclass.cpp @@ -38,6 +38,8 @@ #include #include +#define NUMTRIES 5 + static int hamlibpp_freq_event(RIG *rig, vfo_t vfo, freq_t freq, rig_ptr_t arg); static int hamlibpp_freq_event(RIG *rig, vfo_t vfo, freq_t freq, rig_ptr_t arg) @@ -101,13 +103,13 @@ int Rig::open(int n) { } } if(n==9998) { - if(socket->state()==QAbstractSocket::ConnectedState) { - socket->abort(); + if(commanderSocket->state()==QAbstractSocket::ConnectedState) { + commanderSocket->abort(); } - if(socket->state()==QAbstractSocket::UnconnectedState) { - socket->connectToHost(QHostAddress::LocalHost, 52002); - if(!socket->waitForConnected(1000)) { + if(commanderSocket->state()==QAbstractSocket::UnconnectedState) { + commanderSocket->connectToHost(QHostAddress::LocalHost, 52002); + if(!commanderSocket->waitForConnected(1000)) { return -1; } } @@ -115,9 +117,9 @@ int Rig::open(int n) { t="CmdGetFreq"; QByteArray ba = t.toLocal8Bit(); const char* buf=ba.data(); - socket->write(buf); - socket->waitForReadyRead(1000); - QByteArray reply=socket->read(128); + commanderSocket->write(buf); + commanderSocket->waitForReadyRead(1000); + QByteArray reply=commanderSocket->read(128); if(reply.indexOf("close(); + commanderSocket->close(); return 0; } else #endif @@ -168,8 +170,8 @@ int Rig::setFreq(freq_t freq, vfo_t vfo) { t.sprintf("CmdSetFreq%10.3f",f); QByteArray ba = t.toLocal8Bit(); const char* buf=ba.data(); - socket->write(buf); - socket->waitForBytesWritten(1000); + commanderSocket->write(buf); + commanderSocket->waitForBytesWritten(1000); return 0; } else #endif @@ -216,8 +218,8 @@ int Rig::setSplitFreq(freq_t tx_freq, vfo_t vfo) { t.sprintf("CmdSetTxFreq%10.3f",f); QByteArray ba = t.toLocal8Bit(); const char* buf=ba.data(); - socket->write(buf); - socket->waitForBytesWritten(1000); + commanderSocket->write(buf); + commanderSocket->waitForBytesWritten(1000); return 0; } else #endif @@ -242,9 +244,9 @@ freq_t Rig::getFreq(vfo_t vfo) t="CmdGetFreq"; QByteArray ba = t.toLocal8Bit(); const char* buf=ba.data(); - socket->write(buf); - socket->waitForReadyRead(1000); - QByteArray reply=socket->read(128); + commanderSocket->write(buf); + commanderSocket->waitForReadyRead(1000); + QByteArray reply=commanderSocket->read(128); QString t2(reply); if(t2.indexOf(""); @@ -257,9 +259,11 @@ freq_t Rig::getFreq(vfo_t vfo) } else #endif { - int iret=rig_get_freq(theRig, vfo, &freq); -// iret should be 0. Negative values mean rig_get_freq() failed. - if(iret<0) freq=-1.0; + freq=-1.0; + for(int i=0; i0) t="CmdTX"; QByteArray ba = t.toLocal8Bit(); const char* buf=ba.data(); - socket->write(buf); - socket->waitForBytesWritten(1000); + commanderSocket->write(buf); + commanderSocket->waitForBytesWritten(1000); return 0; } else #endif diff --git a/rigclass.h b/rigclass.h index 9c933e715..77522129e 100644 --- a/rigclass.h +++ b/rigclass.h @@ -27,7 +27,7 @@ #include #include -extern QTcpSocket* socket; +extern QTcpSocket* commanderSocket; class BACKEND_IMPEXP Rig { private: diff --git a/wsjtx.iss b/wsjtx.iss index 8d550fabc..bfaf5dd75 100644 --- a/wsjtx.iss +++ b/wsjtx.iss @@ -1,6 +1,6 @@ [Setup] AppName=wsjtx -AppVerName=wsjtx Version 1.1.0 r3488 +AppVerName=wsjtx Version 1.1.0 r3496 AppCopyright=Copyright (C) 2001-2013 by Joe Taylor, K1JT DefaultDirName=c:\wsjtx2 DefaultGroupName=wsjtx2