Working on command dialog

Add RIG pointer to rigdaemon functions
1.3.0
PianetaRadio 2022-11-20 21:48:13 +01:00 zatwierdzone przez GitHub
rodzic 1273184597
commit bf2b4455ae
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
8 zmienionych plików z 227 dodań i 37 usunięć

50
dialogcommand.cpp 100644
Wyświetl plik

@ -0,0 +1,50 @@
/**
** This file is part of the CatRadio project.
** Copyright 2022 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
#include "dialogcommand.h"
#include "ui_dialogcommand.h"
#include "rig.h"
DialogCommand::DialogCommand(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogCommand)
{
ui->setupUi(this);
}
DialogCommand::~DialogCommand()
{
delete ui;
}
void DialogCommand::on_pushButton_send_clicked()
{
//int rig_send_raw(rig, unsigned char *send, int send_len, unsigned char *reply, int reply_len, unsigned char term);
//send contains the raw command data
//send_len is the # of bytes to send
//If reply is NULL no answer is expected
//reply should be as long as need for any reply
//term is the command termination char -- could be semicolon, CR, or 0xfd for Icom rigs
}
void DialogCommand::on_pushButton_close_clicked()
{
this->close();
}

46
dialogcommand.h 100644
Wyświetl plik

@ -0,0 +1,46 @@
/**
** This file is part of the CatRadio project.
** Copyright 2022 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
#ifndef DIALOGCOMMAND_H
#define DIALOGCOMMAND_H
#include <QDialog>
namespace Ui {
class DialogCommand;
}
class DialogCommand : public QDialog
{
Q_OBJECT
public:
explicit DialogCommand(QWidget *parent = nullptr);
~DialogCommand();
private slots:
void on_pushButton_close_clicked();
void on_pushButton_send_clicked();
private:
Ui::DialogCommand *ui;
};
#endif // DIALOGCOMMAND_H

66
dialogcommand.ui 100644
Wyświetl plik

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogCommand</class>
<widget class="QDialog" name="DialogCommand">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>140</height>
</rect>
</property>
<property name="windowTitle">
<string>Command</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_commandSend">
<property name="text">
<string>Command Send</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit_commandSend"/>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="pushButton_send">
<property name="text">
<string>Send</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_receive">
<property name="text">
<string>Receive</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_receive">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QCheckBox" name="checkBox_icom">
<property name="text">
<string>Icom</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="pushButton_close">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

Wyświetl plik

@ -21,6 +21,7 @@
#include "ui_mainwindow.h"
#include "dialogconfig.h"
#include "dialogsetup.h"
#include "dialogcommand.h"
#include "rigdaemon.h"
#include "rigdata.h"
#include "guidata.h"
@ -40,7 +41,7 @@
#include <rig.h> //Hamlib
extern RIG *my_rig; //Defined in rigdaemon.cpp
RIG *my_rig;
extern rigConnect rigCom;
extern rigSettings rigGet;
@ -61,6 +62,8 @@ FILE* debugFile;
QThread workerThread; //
RigDaemon *rigDaemon = new RigDaemon;
QDialog *command = nullptr;
//***** MainWindow *****
@ -99,7 +102,7 @@ MainWindow::MainWindow(QWidget *parent)
//* Thread for RigDaemon
rigDaemon->moveToThread(&workerThread); //
connect(&workerThread, &QThread::finished, rigDaemon, &QObject::deleteLater);
connect(timer, &QTimer::timeout, rigDaemon, &RigDaemon::rigUpdate);
connect(timer, &QTimer::timeout, this, &MainWindow::rigUpdate);
connect(rigDaemon, &RigDaemon::resultReady, this, &MainWindow::on_rigDaemonResultReady);
workerThread.start();
@ -604,6 +607,10 @@ void MainWindow::guiUpdate()
else if (rigGet.toneType == 4) ui->comboBox_toneFreq->setCurrentText(QString::number(rigGet.tone)); //DCS
}
void MainWindow::rigUpdate()
{
rigDaemon->rigUpdate(my_rig);
}
//* RigDaemon handle results
void MainWindow::on_rigDaemonResultReady()
@ -678,23 +685,25 @@ void MainWindow::on_pushButton_Connect_toggled(bool checked)
if (checked && rigCom.connected == 0)
{
retcode = rigDaemon->rigConnect(); //Open Rig connection
int retcode;
if (retcode != RIG_OK) //Connection error
{
rigCom.connected = 0;
connectMsg = "Connection error: ";
connectMsg.append(rigerror(retcode));
ui->pushButton_Connect->setChecked(false); //Uncheck the button
}
else //Rig connected
{
rigCom.connected = 1;
guiInit();
connectMsg = "Connected to ";
connectMsg.append(my_rig->caps->model_name);
if (rigCap.onoff == 0 || rigGet.onoff == RIG_POWER_ON || rigGet.onoff == RIG_POWER_UNKNOWN) timer->start(rigCom.rigRefresh);
}
my_rig = rigDaemon->rigConnect(&retcode); //Open Rig connection
if (retcode != RIG_OK) //Connection error
{
rigCom.connected = 0;
connectMsg = "Connection error: ";
connectMsg.append(rigerror(retcode));
ui->pushButton_Connect->setChecked(false); //Uncheck the button
}
else //Rig connected
{
rigCom.connected = 1;
guiInit();
connectMsg = "Connected to ";
connectMsg.append(my_rig->caps->model_name);
if (rigCap.onoff == 0 || rigGet.onoff == RIG_POWER_ON || rigGet.onoff == RIG_POWER_UNKNOWN) timer->start(rigCom.rigRefresh);
}
}
else if (rigCom.connected) //Button unchecked
{
@ -1432,6 +1441,22 @@ void MainWindow::on_action_Setup_triggered()
ui->lineEdit_vfoSub->setMode(guiConf.vfoDisplayMode);
}
void MainWindow::on_actionCommand_triggered()
{
//DialogCommand command;
//command.setModal(true);
//command.exec();
if (!command)
{
command = new DialogCommand(this);
}
command->setModal(false);
command->show();
command->raise();
command->activateWindow();
}
void MainWindow::on_action_AboutCatRadio_triggered()
{
QMessageBox msgBox;

Wyświetl plik

@ -44,6 +44,7 @@ public:
public slots:
void guiUpdate();
void rigUpdate(); //Slot for QTimer
void on_rigDaemonResultReady(); //Slot for rigDaemon resultReady
void on_vfoDisplayMainValueChanged(int value); //Slot for vfoDisplay Main valueChanged
void on_vfoDisplaySubValueChanged(int value); //Slot for vfoDisplay Sub valueChanged
@ -203,6 +204,8 @@ private slots:
void on_checkBox_micMonitor_toggled(bool checked);
void on_actionCommand_triggered();
private:
Ui::MainWindow *ui;
QTimer *timer;

Wyświetl plik

@ -2058,13 +2058,19 @@
</property>
<addaction name="action_CatRadioHomepage"/>
<addaction name="separator"/>
<addaction name="action_RadioInfo"/>
<addaction name="separator"/>
<addaction name="action_AboutCatRadio"/>
<addaction name="action_AboutHamLib"/>
<addaction name="action_AboutQT"/>
</widget>
<widget class="QMenu" name="menuUtility">
<property name="title">
<string>Utility</string>
</property>
<addaction name="actionCommand"/>
</widget>
<addaction name="menu_Config"/>
<addaction name="menuUtility"/>
<addaction name="menu_Help"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
@ -2098,9 +2104,9 @@
<string>CatRadio homepage</string>
</property>
</action>
<action name="action_RadioInfo">
<action name="actionCommand">
<property name="text">
<string>Radio Info</string>
<string>Command</string>
</property>
</action>
</widget>

Wyświetl plik

@ -28,9 +28,6 @@
#include <rig.h>
RIG *my_rig;
extern rigConnect rigCom;
extern rigSettings rigGet;
extern rigSettings rigSet;
@ -46,11 +43,9 @@ RigDaemon::RigDaemon(QObject *parent) : QObject(parent)
}
int RigDaemon::rigConnect()
RIG *RigDaemon::rigConnect(int *retcode)
{
int retcode;
my_rig = rig_init(rigCom.rigModel); //Allocate rig handle
RIG *my_rig = rig_init(rigCom.rigModel); //Allocate rig handle
if (!my_rig) //Wrong Rig number
{
@ -61,7 +56,8 @@ int RigDaemon::rigConnect()
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
return -1; //RIG_EINVAL, Invalid parameter
*retcode = RIG_EINVAL; //RIG_EINVAL, Invalid parameter
return nullptr;
}
else
{
@ -89,20 +85,19 @@ int RigDaemon::rigConnect()
}
}
retcode = rig_open(my_rig);
*retcode = rig_open(my_rig);
if (retcode != RIG_OK) return retcode; //Rig not connected
if (*retcode != RIG_OK) return nullptr; //Rig not connected
else //Rig connected
{
if (my_rig->caps->get_powerstat != NULL) rig_get_powerstat(my_rig, &rigGet.onoff);
else rigGet.onoff = RIG_POWER_UNKNOWN;
return 0;
return my_rig;
}
}
}
void RigDaemon::rigUpdate()
void RigDaemon::rigUpdate(RIG *my_rig)
{
int retcode;
value_t retvalue;
@ -305,7 +300,6 @@ void RigDaemon::rigUpdate()
if (retcode == RIG_OK)
{
rigGet.band = rigSet.band;
indexCmd = 21;
}
}

Wyświetl plik

@ -29,10 +29,10 @@ class RigDaemon : public QObject
public:
explicit RigDaemon(QObject *parent = nullptr);
int rigConnect();
RIG *rigConnect(int *retcode);
void rigUpdate(RIG *my_rig);
public slots:
void rigUpdate();
signals:
void resultReady();