Working in hamlib

This commit is contained in:
jaime 2019-04-14 18:44:21 +00:00
parent 91dfded1b0
commit 3019ac0f9b
10 changed files with 590 additions and 96 deletions

View File

@ -1,3 +1,6 @@
TBD - 0.9.8
- Working: Hamlib support!
TBD - 0.9.7.3
- TODO: Remove the band 0 / Light from the DB.
- UI: KLog warns the user if the frequency used is out of the hamradio bands.

View File

@ -102,7 +102,8 @@ HEADERS += setupdialog.h \
charts/statsqsosperbandbarchartwidget.h \
setuppagesats.h \
setuppagesatsnew.h \
setuppagehamlib.h
setuppagehamlib.h \
hamlibclass.h
SOURCES += main.cpp \
@ -168,7 +169,8 @@ SOURCES += main.cpp \
charts/statsqsosperbandbarchartwidget.cpp \
setuppagesats.cpp \
setuppagesatsnew.cpp \
setuppagehamlib.cpp
setuppagehamlib.cpp \
hamlibclass.cpp
OTHER_FILES += \

4
TODO
View File

@ -1,7 +1,11 @@
RC-BUGS:
TODO: Check if dxccStatusWidget in logwindow is useful and remove it if not.
NONE
TBD - 0.9.8
Hamlib: COMports in Windows must follow the format: \\.\com14 for ports highet than 9 but it works also for lower so ALL should be managed that way.
For next release:
TODO: - Some warnings removed from compilation time.
TODO: - The log can be now updated with a LoTW ADIF file import.

341
hamlibclass.cpp Normal file
View File

@ -0,0 +1,341 @@
#include "hamlibclass.h"
HamLibClass::HamLibClass(QObject *parent) : QObject(parent)
{
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(slotTimer()) );
//timer->start(1000);
clean();
}
void HamLibClass::slotTimer()
{
//freq_old = freq;
int retcode = rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
if (retcode == RIG_OK)
{
if (freq_old != freq)
{
emit freqChanged(freq/1000000);
freq_old = freq;
qDebug() << "HamLibClass::slotTimer EMITING; " << QString::number(freq) << endl;
}
//qDebug() << "HamLibClass::slotTimer read: " << QString::number(freq) << endl;
}
else
{
qDebug() << "HamLibClass::slotTimer Unable to read FREQ" << endl;
}
}
bool HamLibClass::stop()
{
qDebug() << "HamLibClass::stop" << endl;
int errorCode = rig_close(my_rig);
qDebug() << "HamLibClass::stop-1" << endl;
timer->stop();
if (errorCode == RIG_OK)
{
qDebug() << "HamLibClass::stop: rig_close OK" << endl;
errorCode = rig_cleanup(my_rig);
if (errorCode == RIG_OK)
{
qDebug() << "HamLibClass::stop: rig_cleanUp OK" << endl;
rigLaunched = false;
qDebug() << "HamLibClass::stop - true" << endl;
return true;
}
else
{
qDebug() << "HamLibClass::stop: rig_cleanup NOK: " << QString::number(errorCode) << endl;
}
}
else
{
qDebug() << "HamLibClass::stop: rig_close NOK: " << QString::number(errorCode) << endl;
}
qDebug() << "HamLibClass::stop - false" << endl;
return false;
}
void HamLibClass::clean()
{
myrig_model = 1; //Dummy equipment
rigLaunched = false;
parity = QSerialPort::NoParity;
flowControl = QSerialPort::NoFlowControl;
dataBits = QSerialPort::Data8;
stopBits = QSerialPort::OneStop;
bauds = QSerialPort::Baud9600;
}
HamLibClass::~HamLibClass()
{
if (rigLaunched)
{
rig_close(my_rig);
rig_cleanup(my_rig);
rigLaunched = false;
}
}
bool HamLibClass::isRunning()
{
return rigLaunched;
}
QStringList HamLibClass::getRigList ()
{
qDebug() << "HamLibClass::getRigList" << endl;
// Rutine to fill the rig combo boxes
// Do not display debug codes when load the rig's
rig_set_debug (RIG_DEBUG_NONE);
// and continue...
strings.clear();
rig_load_all_backends ();
rig_list_foreach (addRigToList, this);
strings.sort ();
return strings;
}
int HamLibClass::addRigToList (const struct rig_caps *caps, void *data)
{
qDebug() << "HamLibClass::addRigToList" << endl;
QString name;
HamLibClass *r = (HamLibClass *) data;
name = caps->model_name;
r->rigName2RigId[name] = caps->rig_model; // We fill the equivalences between name & Id
r->rigId2RigName[caps->rig_model] = name;
r->strings << name;
return -1; // not 0 --> we want all rigs
}
int HamLibClass::getModelIdFromName (const QString _name)
{
//HamLibClass *r (HamLibClass *) data;
int i = -1;
i = rigName2RigId[_name];
return i;
}
QString HamLibClass::getNameFromModelId(const int _id)
{
return rigId2RigName[_id];
}
void HamLibClass::setModelId(const int _id)
{
myrig_model = _id;
}
void HamLibClass::setPort(const QString _port)
{
serialPort = _port;
qstrncpy(myport.pathname, serialPort.toLocal8Bit().constData(), serialPort.length());
}
void HamLibClass::setSpeed(const int _speed)
{
bauds = _speed;
switch (_speed)
{
case QSerialPort::Baud1200:
myport.parm.serial.rate = 1200;
break;
case QSerialPort::Baud2400:
myport.parm.serial.rate = 2400;
break;
case QSerialPort::Baud4800:
myport.parm.serial.rate = 4800;
break;
case QSerialPort::Baud9600:
myport.parm.serial.rate = 9600;
break;
case QSerialPort::Baud19200:
myport.parm.serial.rate = 19200;
break;
case QSerialPort::Baud38400:
myport.parm.serial.rate = 38400;
break;
case QSerialPort::Baud57600:
myport.parm.serial.rate = 57600;
break;
case QSerialPort::Baud115200:
myport.parm.serial.rate = 115200;
break;
default:
myport.parm.serial.rate = 9600;
break;
}
}
void HamLibClass::setPatity(const int _parity)
{
parity = _parity;
switch (_parity)
{
case QSerialPort::NoParity:
myport.parm.serial.parity = RIG_PARITY_NONE;
break;
case QSerialPort::EvenParity:
myport.parm.serial.parity = RIG_PARITY_EVEN;
break;
case QSerialPort::OddParity:
myport.parm.serial.parity = RIG_PARITY_ODD;
break;
case QSerialPort::SpaceParity:
myport.parm.serial.parity = RIG_PARITY_SPACE;
break;
case QSerialPort::MarkParity:
myport.parm.serial.parity = RIG_PARITY_MARK;
break;
default:
myport.parm.serial.parity = RIG_PARITY_NONE;
break;
}
}
void HamLibClass::setFlow(const int _flow)
{
flowControl = _flow;
switch (_flow)
{
case QSerialPort::QSerialPort::NoFlowControl:
myport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
break;
case QSerialPort::HardwareControl:
myport.parm.serial.handshake = RIG_HANDSHAKE_HARDWARE;
break;
case QSerialPort::SoftwareControl:
myport.parm.serial.handshake = RIG_HANDSHAKE_XONXOFF;
break;
default:
myport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
break;
}
}
void HamLibClass::setStop(const int _stop)
{
stopBits = _stop;
if ((_stop >=1) || (_stop<=3))
{
myport.parm.serial.data_bits = _stop;
}
else
{
myport.parm.serial.data_bits = 1;
}
}
void HamLibClass::setData(const int _data)
{
dataBits = _data;
if ((_data >=5) || (_data<=8))
{
myport.parm.serial.data_bits = _data;
}
else
{
myport.parm.serial.data_bits = 8;
}
}
bool HamLibClass::init()
{
qDebug() << "HamLibClass::init: " << endl;
if (myrig_model == -1)
{
return false;
}
if (!rigLaunched)
{
rig_set_debug(RIG_DEBUG_NONE);
qDebug() << "HamLibClass::init: " << endl;
myport.type.rig = RIG_PORT_SERIAL;
qDebug() << "HamLibClass::init: 1" << endl;
//myport.parm.serial.rate = bauds;
//myport.parm.serial.data_bits = dataBits;
//myport.parm.serial.stop_bits = stopBits;
qDebug() << "HamLibClass::init: 2" << endl;
//TODO: CHECK PARITY
//myport.parm.serial.parity = RIG_PARITY_NONE;
//TODO: CHECK HANDSHAKE
//myport.parm.serial.handshake = RIG_HANDSHAKE_NONE;
//qstrncpy(myport.pathname, serialPort.toLocal8Bit().constData(), serialPort.length());
//serialPort = myport.pathname;
qDebug() << "HamLibClass::init: 3" << endl;
my_rig = rig_init((myrig_model));
if (!my_rig)
{
rigLaunched = false;
qDebug() << "HamLibClass::init: END FALSE1" << endl;
return false;
}
qDebug() << "HamLibClass::init: 4" << endl;
//qstrncpy(my_rig->state.rigport.pathname, serialPort.toLocal8Bit().constEnd(), serialPort.length());
//serialPort = my_rig->state.rigport.pathname;
int recode = rig_open(my_rig);
qDebug() << "HamLibClass::init: 5" << endl;
if (retcode != RIG_OK)
{
rigLaunched = false;
qDebug() << "HamLibClass::init: Error: " << QString::number(retcode) << "-" << rigerror(retcode);
qDebug() << "HamLibClass::init: END FALSE2" << endl;
return false;
}
rigLaunched = true;
timer->start(1000);
}
else
{
qDebug() << "HamLibClass::init: Rig was already launched" << endl;
}
qDebug() << "HamLibClass::init: END TRUE" << endl;
return true;
}
bool HamLibClass::setFreq(const double _fr)
{
qDebug() << "HamLibClass::setFreq: " << QString::number(_fr) << endl;
freq = _fr * 1000000;
int retcode = rig_set_freq(my_rig, RIG_VFO_CURR, freq);
if (retcode != RIG_OK)
{
qDebug() << "HamLibClass::setFreq NOK: " << endl;
return false;
}
else
{
qDebug() << "HamLibClass::setFreq OK: " << QString::number(freq) << endl;
retcode = rig_get_freq(my_rig, RIG_VFO_CURR, &freq);
if (retcode == RIG_OK)
{
qDebug() << "HamLibClass::setFreq read: " << QString::number(freq) << endl;
}
else
{
qDebug() << "HamLibClass::setFreq Unable to read FREQ" << endl;
}
return true;
}
}

71
hamlibclass.h Normal file
View File

@ -0,0 +1,71 @@
#ifndef HAMLIBCLASS_H
#define HAMLIBCLASS_H
#include <QObject>
#include <QTimer>
#include <QMap>
#include <QDebug>
#include <QSerialPort>
#include <hamlib/rig.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
class HamLibClass : public QObject
{
Q_OBJECT
public:
explicit HamLibClass(QObject *parent = nullptr);
~HamLibClass();
QStringList getRigList ();
int getModelIdFromName (const QString _name);
QString getNameFromModelId(const int _id);
void setModelId(const int _id);
void setPort(const QString _port);
void setSpeed(const int _speed);
void setPatity(const int _parity);
void setFlow(const int _flow);
void setStop(const int _stop);
void setData(const int _data);
bool setFreq(const double _fr);
bool init();
bool stop();
bool isRunning();
void clean();
signals:
void freqChanged(double newFreq);
public slots:
void slotTimer();
private:
static int addRigToList(const struct rig_caps* caps, void* data);
QStringList strings;
QTimer *timer;
QMap<QString, rig_model_t> rigName2RigId;
QMap<rig_model_t, QString> rigId2RigName;
RIG *my_rig; // handle to rig (instance)
freq_t freq, freq_old; // Radio freq
rmode_t rmode; // Radio mode
int retcode; // generic return code from functions
rig_model_t myrig_model; // Integer radio model
hamlib_port_t myport; // Hamlib port
int bauds; // default 9600
int dataBits; // default 8
int stopBits; // default 1
int flowControl; // default QSerialPort::NoFLowControl
int parity; // default QSerialPort::NoParity
QString serialPort;
bool rigLaunched;
};
#endif // HAMLIBCLASS_H

View File

@ -40,7 +40,6 @@
MainWindow::MainWindow(const QString _klogDir, const QString tversion)
{
//qDebug() << "MainWindow::MainWindow: "<< _klogDir << " Ver: " << tversion << endl;
//qDebug() << "MainWindow::MainWindow: Con func: "<< Q_FUNC_INFO << endl;
@ -49,13 +48,12 @@ MainWindow::MainWindow(const QString _klogDir, const QString tversion)
//qDebug() << "MainWindow::MainWindow: "<< (QTime::currentTime()).toString("hhmmsszzz")<< endl;
showErrorDialog = new ShowErrorDialog();
UDPLogServer = new UDPServer();
UDPLogServer = new UDPServer();
hamlib = new HamLibClass();
hamlibActive = false;
upAndRunning = false; // To define some actions that can only be run when starting the software
//connect(&manager, SIGNAL(finished(QNetworkReply*)), SLOT(slotDownloadFinished(QNetworkReply*))); // To download cty.csv
//flagIcon = new QPushButton; // To paint a flag of the worked entity
// <ui>
softwareVersion = tversion;
itIsANewversion = false;
dataProxy = new DataProxy_SQLite(softwareVersion, Q_FUNC_INFO);
@ -147,20 +145,7 @@ MainWindow::MainWindow(const QString _klogDir, const QString tversion)
infoLabel1T = QString();
infoLabel2T = QString();
/*
db = new DataBase(Q_FUNC_INFO, softwareVersion, util->getKLogDBFile());
if (!db->createConnection())
{
//qDebug() << "MainWindow::MainWindow: Conection not created" << endl;
return;
}
else
{
//db->updateIfNeeded(); // Check if we need to update the DB
//qDebug() << "MainWindow::MainWindow: DB updated was checked here" << endl;
}
*/
elogClublog = new eLogClubLog();
clublogAnswer = -1;
@ -269,6 +254,8 @@ MainWindow::MainWindow(const QString _klogDir, const QString tversion)
connect(satTabWidget, SIGNAL(satTxFreqChanged(double)), this, SLOT(slotSatChangeTXFreq(double)) );
connect(satTabWidget, SIGNAL(dxLocatorChanged(QString)), this, SLOT(slotUpdateLocator(QString)) );
connect(hamlib, SIGNAL(freqChanged(double)), this, SLOT(slotHamlibTXFreqChanged(double)) );
myDataTabWidget = new MainWindowMyDataTab();
commentTabWidget = new MainWindowInputComment();
othersTabWidget = new MainWindowInputOthers(dataProxy);
@ -748,7 +735,7 @@ void MainWindow::slotModeComboBoxChanged()
}
void MainWindow::slotBandComboBoxChanged(){
qDebug() << "MainWindow::slotBandComboBoxChanged: " << QString::number(bandComboBox->currentIndex()) << "/" << bandComboBox->currentText()<< endl;
//qDebug() << "MainWindow::slotBandComboBoxChanged: " << QString::number(bandComboBox->currentIndex()) << "/" << bandComboBox->currentText()<< endl;
/*
int i;
i = dataProxy->getIdFromBandName(bandComboBox->currentText());
@ -760,14 +747,14 @@ void MainWindow::slotBandComboBoxChanged(){
*/
if (txFreqBeingChanged)
{
qDebug() << "MainWindow::slotBandComboBoxChanged: txFreqBeingChanged" << endl;
//qDebug() << "MainWindow::slotBandComboBoxChanged: txFreqBeingChanged" << endl;
return;
}
bool isFRinBand = dataProxy->isThisFreqInBand(bandComboBox->currentText(), QString::number(txFreqSpinBox->value()));
if ((isFRinBand) && (txFreqSpinBox->value() >0 ))
{
qDebug() << "MainWindow::slotBandComboBoxChanged: idFRinBand and Freq >0" << endl;
//qDebug() << "MainWindow::slotBandComboBoxChanged: idFRinBand and Freq >0" << endl;
return;
}
@ -791,15 +778,15 @@ void MainWindow::slotBandComboBoxChanged(){
//qDebug() << "MainWindow::slotBandComboBoxChanged Freq in txFreqSpinBox" << QString::number(txFreqSpinBox->value()) << endl;
//qDebug() << "MainWindow::slotBandComboBoxChanged: Band Shown: " << dataProxy->getNameFromBandId(currentBandShown) << endl;
// bool isFRinBand = dataProxy->isThisFreqInBand((dataProxy->getNameFromBandId(currentBandShown)), QString::number(txFreqSpinBox->value()));
qDebug() << "MainWindow::MainWindow: Freq: " << QString::number(txFreqSpinBox->value()) << endl;
//qDebug() << "MainWindow::MainWindow: Freq: " << QString::number(txFreqSpinBox->value()) << endl;
if ((!isFRinBand) || (txFreqSpinBox->value()<=0))
{
double txFr = (dataProxy->getFreqFromBandId(currentBandShown)).toDouble();
//satTabWidget->setUpLinkFreq(txFr);
qDebug() << "MainWindow::slotBandComboBoxChanged updating txFreqSpinBox" << QString::number(txFr) << endl;
//qDebug() << "MainWindow::slotBandComboBoxChanged updating txFreqSpinBox" << QString::number(txFr) << endl;
txFreqSpinBox->setValue(txFr);
}
qDebug() << "MainWindow::MainWindow: Freq2: " << QString::number(txFreqSpinBox->value()) << endl;
//qDebug() << "MainWindow::MainWindow: Freq2: " << QString::number(txFreqSpinBox->value()) << endl;
//currentModeShown = modeComboBox->currentIndex();
checkIfWorkedB4(currentQrz);
@ -810,7 +797,7 @@ void MainWindow::slotBandComboBoxChanged(){
showStatusOfDXCC(_qs);
qDebug() << "MainWindow::slotBandComboBoxChanged: END" << endl;
//qDebug() << "MainWindow::slotBandComboBoxChanged: END" << endl;
}
@ -3294,7 +3281,7 @@ void MainWindow::slotClearButtonClicked()
void MainWindow::clearUIDX(bool full)
{
qDebug() << "MainWindow::clearUIDX" << endl;
//qDebug() << "MainWindow::clearUIDX" << endl;
SRXLineEdit->setText("59");
STXLineEdit->setText("59");
nameLineEdit->clear();
@ -4346,7 +4333,14 @@ void MainWindow::readConfigData()
//qDebug() << "MainWindow::readConfigData: UDP Log server already stopped no need to restop!" << endl;
}
}
if (hamlibActive)
{
hamlib->init();
}
else
{
hamlib->stop();
}
//qDebug() << "MainWindow::readConfigData - END" << endl;
@ -4614,6 +4608,22 @@ bool MainWindow::processConfigLine(const QString _line){
//UDPLogServer->setLogging(false);
}
}
else if (field == "HAMLIBRIGTYPE" )
{
hamlib->setModelId(value.toInt());
}
else if(field == "HAMLIBSERIALPORT")
{
hamlib->setPort(value);
}
else if (field == "HAMLIBSERIALBAUDS")
{
hamlib->setSpeed(value.toInt());
}
else if (field == "HAMLIB")
{
hamlibActive = true;
}
else if (field=="REALTIMEFROMWSJTX")
{
//qDebug() << "MainWindow::processConfigLine: REALTIMEFROMWSJTX: " << value << endl;
@ -7178,13 +7188,17 @@ void MainWindow::updateBandComboBox(const QString _band)
void MainWindow::slotFreqTXChanged()
{
//qDebug() << "MainWindow::slotFreqTXChanged" << QString::number(txFreqSpinBox->value()) << endl;
qDebug() << "MainWindow::slotFreqTXChanged" << QString::number(txFreqSpinBox->value()) << endl;
txFreqBeingChanged = true;
int bandId = dataProxy->getBandIdFromFreq(txFreqSpinBox->value());
if (bandId > 1)
{ // If the freq belongs to onne ham band
{ // If the freq belongs to one ham band
txFreqSpinBox->setPalette(palBlack);
txFreqSpinBox->setToolTip(tr("TX Frequency in MHz."));
if (hamlibActive)
{
hamlib->setFreq(txFreqSpinBox->value());
}
bool freqInBand = dataProxy->isThisFreqInBand(bandComboBox->currentText(), QString::number(txFreqSpinBox->value()));
if(!freqInBand)
@ -7193,6 +7207,7 @@ void MainWindow::slotFreqTXChanged()
QString _newBand = dataProxy->getBandNameFromFreq(txFreqSpinBox->value());
updateBandComboBox(_newBand);
bandComboBox->setCurrentIndex(bandComboBox->findText(_newBand, Qt::MatchCaseSensitive));
}
}
else
@ -7653,8 +7668,8 @@ void MainWindow::slotQueryErrorManagement(QString functionFailed, QString errorC
"<li><b>" + tr("Error code") +":</b> " + QString::number(errorCodeN) + "</li>" +
"<li><b>" + tr("Error text") + ":</b> " + errorCodeS + "</li>" +
"<li><b>" + tr("Failed query") + ":</b> " + queryFailed + "</li>" +
"</ul><br>"
"<b>Recomendation:</b> Export, periodically, your data to ADIF to prevent a potential data loss.<br>";
"</ul><br>" +
"<b>" + tr("Recomendation:") + "</b>" + tr("Export, periodically, your data to ADIF to prevent a potential data loss.") + "<br>";
showErrorDialog->setText(aux + errorMSG);
//showErrorDialog->setModal(true);
@ -7693,6 +7708,13 @@ void MainWindow::slotSatChangeTXFreq(const double _f)
txFreqSpinBox->setValue(_f);
}
void MainWindow::slotHamlibTXFreqChanged(const double _f)
{
txFreqSpinBox->setValue(_f);
}
void MainWindow::slotUpdateLocator(QString _loc)
{
locatorLineEdit->setText(_loc.toUpper());

View File

@ -66,8 +66,7 @@
#include "udpserver.h"
#include "statisticswidget.h"
#include "updatesatsdata.h"
#include "hamlibclass.h"
@ -155,14 +154,6 @@ private slots:
void slotToolLoTWMarkAllQueued();
void slotToolLoTWMarkAllYesThisLog();
void slotToolLoTWMarkAllYes();
//void slotSearchExportButtonClicked();
//void slotSearchBoxSelectAllButtonClicked();
//void slotSearchClearButtonClicked();
//void slotSearchBoxSelectionChanged();
//void slotSearchBoxReSearchButtonClicked();
//void showMenuRightButtonSearchCreateActions();
//void righButtonSearchMenu(const int trow);
void slotModeComboBoxChanged();
void slotBandComboBoxChanged();
@ -183,20 +174,6 @@ private slots:
void slotSetup(const int _page=0);
//void slotQsoDeleteFromSearch();
//void slotQSLSentViaBureauFromSearch();
//void slotQSLSentViaDirectFromSearch();
//void slotQSLSentViaDirectMarkDXReqFromSearch();
//void slotQSLSentViaBureuMarkDXReqFromSearch();
//void slotQSLRecViaDirectFromSearch();
//void slotQSLRecViaBureauFromSearch();
//void slotQSLRecViaDirectMarkReqFromSearch();
//void slotQSLRecViaBureauMarkReqFromSearch();
//void slotQSLSentMarkAsRequested();
//void slotQSLRecMarkAsRequested();
//void slotQSOToEditFromSearch();
void slotrstTXTextChanged();
void slotrstRXTextChanged();
void slotADIFExport();
@ -209,15 +186,6 @@ private slots:
//void slotQSLViaTextChanged();
void slotTimeOutInfoBars(); // Clears the infoLabels when the timeout emits the signal
//TODO: REMOVE EQSL
//void slotQSLRecvComboBoxChanged();
//void slotQSLSentComboBoxChanged();
//void sloteQSLRecvComboBoxChanged();
//void sloteQSLSentComboBoxChanged();
//void slotLotwRecvComboBoxChanged();
//void slotLotwSentComboBoxChanged();
void slotSetPropMode(const QString _p);
void slotFillEmptyDXCCInTheLog();
void slotUpdateCTYDAT();
@ -254,12 +222,6 @@ private slots:
//SEARCH
void slotShowSearchWidget(); // The SearchWidget request being shown
//void slotDoubleClickSearch( QTreeWidgetItem* item, int); // Double click on a QSO in the search box
//void slotRighButtonSearch(const QPoint& pos);
//void slotToolSearchNeededQSLToSend();
//void slotToolSearchNeededQSLPendingToReceive();
//void slotToolSearchNeededQSLRequested();
//void slotToolSearchQSL(const int actionQSL);
//SEARCH
// CLUSTER
@ -280,7 +242,10 @@ private slots:
void slotDefineNewBands(const QStringList _bands);
void slotSatChangeRXFreq(const double _f);
void slotSatChangeTXFreq(const double _f);
//HAMLIB
void slotHamlibTXFreqChanged(const double _f);
//DXCCWIDGET
void slotShowQSOFromDXCCWidget(const int _q);
void slotShowQSOsFromDXCCWidget(QList<int> _qsos);
@ -302,6 +267,8 @@ private:
UpdateSatsData *updateSatsData;
//UPDATE CTY.DAT
DownLoadCTY *downloadcty;
HamLibClass *hamlib;
bool hamlibActive;
//</UPDATE CTY.DAT>
void createStatusBar();

View File

@ -685,7 +685,8 @@ bool SetupDialog::processConfigLine(const QString _line)
value = value.left(value.length() - (value.length() - endValue));
}
value = checkAndFixASCIIinADIF(value); // Check whether the value is valid.
qDebug() << "SetupDialog::processConfigLine: TAB: " << tab << endl;
qDebug() << "SetupDialog::processConfigLine: VALUE: " << value << endl;
if (tab == "CALLSIGN"){
//qDebug() << "SetupDialog::processConfigLine: CALLSIGN: " << value << endl;
userDataPage->setStationQrz(value);
@ -868,6 +869,20 @@ bool SetupDialog::processConfigLine(const QString _line)
colorsPage->setConfirmedColor(value);
}else if(tab =="DEFAULTCOLOR"){
colorsPage->setDefaultColor(value);
qDebug() << "SetupDialog::processConfigLine: DEFAULTCOLOR: " << value << endl;
}else if(tab =="HAMLIBRIGTYPE"){
qDebug() << "SetupDialog::processConfigLine: HAMLIBRIGTYPE: " << value << endl;
hamlibPage->setRigType(value);
}else if(tab =="HAMLIBSERIALPORT"){
qDebug() << "SetupDialog::processConfigLine: HAMLIBSERIALPORT: " << value << endl;
hamlibPage->setSerialPort(value);
}else if(tab =="HAMLIBSERIALBAUDS"){
qDebug() << "SetupDialog::processConfigLine: HAMLIBSERIALBAUDS: " << value << endl;
hamlibPage->setSerialSpeed(value);
}else if(tab =="HAMLIB"){
qDebug() << "SetupDialog::processConfigLine: HAMLIB: " << value << endl;
hamlibPage->setActive(value);
}else if(tab =="SELECTEDLOG"){
//qDebug() << "SetupDialog::processConfigLine: SELECTEDLOG: " << value << endl;
i = value.toInt();

View File

@ -3,7 +3,8 @@
SetupPageHamLib::SetupPageHamLib(DataProxy *dp, QWidget *parent) : QWidget(parent)
{
//qDebug() << "SetupPageHamLib::SetupPageHamLib" << endl;
hamlib = new HamLibClass();
activateHamlibCheckBox = new QCheckBox();
rigTypeComboBox = new QComboBox();
serialBaudsComboBox = new QComboBox();
serialPortComboBox = new QComboBox();
@ -17,6 +18,7 @@ SetupPageHamLib::SetupPageHamLib(DataProxy *dp, QWidget *parent) : QWidget(paren
handshakeHCheckBox = new QCheckBox();
flowControlLinesDTRCheckBox = new QCheckBox();
flowControlLinesRTSCheckBox = new QCheckBox();
scanSerialPortButton = new QPushButton();
//serialBaudsSpinBox = new QSpinBox;
@ -33,12 +35,27 @@ SetupPageHamLib::SetupPageHamLib(DataProxy *dp, QWidget *parent) : QWidget(paren
qDebug() << "SetupPageHamLib::SetupPageHamLib END" << endl;
}
void SetupPageHamLib::fillSerialPortsComboBox()
{
qDebug() << "SetupPageHamLib::fillSerialPortsComboBox" << endl;
serialPortComboBox->clear();
serialPortComboBox->addItems(getAvailableSerialPorts());
//serialPortComboBox->setCurrentIndex(0);
}
void SetupPageHamLib::createUI()
{
connect(scanSerialPortButton, SIGNAL(clicked(bool)), this, SLOT(slotScanPorts()) );
activateHamlibCheckBox->setText(tr("Activate HamLib"));
activateHamlibCheckBox->setToolTip(tr("Activates the hamlib support that will enable the connection to a radio."));
rigTypeComboBox->clear();
strings.clear();
setRig();
serialPortComboBox->addItems(getAvailableSerialPorts());
//serialPortComboBox->addItems(getAvailableSerialPorts());
fillSerialPortsComboBox();
rigTypeComboBox->setCurrentIndex(0);
@ -55,6 +72,9 @@ void SetupPageHamLib::createUI()
serialPortLabel->setAlignment(Qt::AlignVCenter| Qt::AlignCenter);
serialPortLabel->setEnabled(true);
scanSerialPortButton->setText(tr("Scan"));;
scanSerialPortButton->setToolTip(tr("Click to identify the serial ports available in your computer."));
serialBaudsComboBox->addItems(baudSpeeds);
QLabel *serialBaudsLabel = new QLabel(tr("Bauds"));
serialBaudsLabel->setBuddy(serialBaudsComboBox);
@ -67,6 +87,7 @@ void SetupPageHamLib::createUI()
topData->addWidget(rigTypeComboBox, 0, 1);
topData->addWidget(serialPortLabel, 1, 0);
topData->addWidget(serialPortComboBox, 1, 1);
topData->addWidget(scanSerialPortButton, 1, 2);
topData->addWidget(serialBaudsLabel, 2, 0);
topData->addWidget(serialBaudsComboBox, 2, 1);
/*
@ -125,15 +146,21 @@ void SetupPageHamLib::createUI()
flowControlLineButtonsLayout->addWidget(flowControlLinesRTSCheckBox);
flowControlLineGroupBox->setLayout(flowControlLineButtonsLayout);
*/
QGridLayout *mainLayout = new QGridLayout;
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addLayout(topData, 0, 0);
//mainLayout->addWidget(dataBitsGroupBox, 1, 0);
//mainLayout->addWidget(stopBitsGroupBox, 1, 1);
//mainLayout->addWidget(handShakeGroupBox, 2, 0);
//mainLayout->addWidget(flowControlLineGroupBox, 2, 1);
setLayout(mainLayout);
QVBoxLayout *mLayout = new QVBoxLayout;
mLayout->addWidget(activateHamlibCheckBox);
mLayout->addLayout(mainLayout);
//mLayout->setAlignment(activateHamlibCheckBox, Qt::AlignHCenter | Qt::AlignTop);
setLayout(mLayout);
}
void SetupPageHamLib::setRig ()
@ -141,7 +168,10 @@ void SetupPageHamLib::setRig ()
qDebug() << "SetupPageHamLib::SetRig" << endl;
// Rutine to fill the rig combo boxes
// Do not display debug codes when load the rig's
rig_set_debug (RIG_DEBUG_NONE);
rigTypeComboBox->insertItems(0, hamlib->getRigList());
/*
rig_set_debug (RIG_DEBUG_NONE);
// and continue...
rig_load_all_backends ();
@ -149,8 +179,9 @@ void SetupPageHamLib::setRig ()
strings.sort ();
rigTypeComboBox->insertItems (0, strings);
strings.clear ();
*/
}
/*
int SetupPageHamLib::addRigToList (const struct rig_caps *caps, void *data)
{
qDebug() << "SetupPageHamLib::addRigToList" << endl;
@ -165,6 +196,7 @@ int SetupPageHamLib::addRigToList (const struct rig_caps *caps, void *data)
r->strings << name;
return -1; // not 0 --> we want all rigs
}
*/
QStringList SetupPageHamLib::getAvailableSerialPorts()
{
@ -199,6 +231,7 @@ QString SetupPageHamLib::getData()
_output.clear();
QString _rigType, _serialPort, _baudsSpeed;//, dataBits, stopBits, handshake, flowControlLine;
_rigType = rigTypeComboBox->currentText();
_serialPort = serialPortComboBox->currentText();
_baudsSpeed = serialBaudsComboBox->currentText();
@ -250,22 +283,34 @@ QString SetupPageHamLib::getData()
}
*/
_output.clear();
_output = _output + "HamLibRigType=" + _rigType + "\n";
_output = _output + "HamlibSerialPort=" + _serialPort + "\n";
_output = _output + "HamlibSerialBauds=" + _baudsSpeed + "\n";
if (activateHamlibCheckBox->isChecked())
{
_output = _output + "Hamlib=True;\n";
}
else
{
//_output + "SerialDataBits=" + dataBits + "\n";
//_output + "SerialStopBits=" + stopBits + "\n";
//_output + "SerialHandShake=" + handshake + "\n";
//_output + "SerialFlowControlLine=" + flowControlLine + "\n";
}
//qDebug() << "SetupPageHamLib::getData: " << QString::number(hamlib->getModelIdFromName(_rigType)) << endl;
_output = _output + "HamLibRigType=" + QString::number(hamlib->getModelIdFromName(_rigType)) + ";\n";
//_output = _output + "HamLibRigType=" + _rigType + "\n";
_output = _output + "HamlibSerialPort=" + _serialPort + ";\n";
_output = _output + "HamlibSerialBauds=" + _baudsSpeed + ";\n";
qDebug() << "SetupPageHamLib::getData: " << _output << endl;
//_output + "SerialDataBits=" + dataBits + ";\n";
//_output + "SerialStopBits=" + stopBits + ";\n";
//_output + "SerialHandShake=" + handshake + ";\n";
//_output + "SerialFlowControlLine=" + flowControlLine + ";\n";
//qDebug() << "SetupPageHamLib::getData: " << _output << endl;
return _output;
}
bool SetupPageHamLib::setRigType(const QString _radio)
{
int _index = rigTypeComboBox->findText(_radio, Qt::MatchFlag::MatchExactly);
qDebug() << "SetupPageHamLib::setRig: " << _radio << endl;
int _index = rigTypeComboBox->findText(hamlib->getNameFromModelId(_radio.toInt()), Qt::MatchFlag::MatchExactly);
if (_index >= 0)
{
rigTypeComboBox->setCurrentIndex(_index);
@ -307,3 +352,20 @@ bool SetupPageHamLib::setSerialSpeed(const QString _speed )
}
return false;
}
bool SetupPageHamLib::setActive(const QString _active)
{
if (_active.toUpper() == "TRUE")
{
activateHamlibCheckBox->setChecked(true);
}
else {
activateHamlibCheckBox->setChecked(false);
}
}
void SetupPageHamLib::slotScanPorts()
{
qDebug() << "SetupPageHamLib::slotScanPorts" << endl;
fillSerialPortsComboBox();
}

View File

@ -32,7 +32,7 @@
#include <QtWidgets>
//#include <QSerialPort>
#include <QSerialPortInfo>
#include "hamlibclass.h"
#include "dataproxy.h"
#include <hamlib/rig.h>
@ -46,31 +46,38 @@ public:
bool setRigType(const QString _radio);
bool setSerialPort(const QString _port);
bool setSerialSpeed(const QString _speed );
bool setActive(const QString _active);
signals:
public slots:
void slotScanPorts();
private:
void createUI();
void setRig();
void setDefaults();
static int addRigToList(const struct rig_caps* caps, void* data);
void fillSerialPortsComboBox();
//static int addRigToList(const struct rig_caps* caps, void* data);
QStringList getAvailableSerialPorts();
QButtonGroup *flowControlLineButtonGroup, *handshakeButtonGroup, *dataBitsGroupButton, *stopBitsButtonGroup;
QPushButton *scanSerialPortButton;
QComboBox *rigTypeComboBox, *serialBaudsComboBox, *serialPortComboBox;
//QSpinBox *serialBaudsSpinBox;
QLineEdit *serialPort;
RIG *my_rig; // handle to rig (instance)
freq_t freq;
rig_model_t myrig_model;
HamLibClass *hamlib;
//RIG *my_rig; // handle to rig (instance)
//freq_t freq;
//rig_model_t myrig_model;
QStringList strings, baudSpeeds, serialPorts;
QCheckBox *dataBits7CheckBox, *dataBits8CheckBox, *stopBits1CheckBox, *stopBits2CheckBox,
*handshakeNoneCheckBox, *handshakeXCheckBox, *handshakeHCheckBox,
*flowControlLinesDTRCheckBox, *flowControlLinesRTSCheckBox;
*flowControlLinesDTRCheckBox, *flowControlLinesRTSCheckBox,
*activateHamlibCheckBox;
//int defaultPortSpeed;