mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-21 19:55:20 -05:00
Fix numerous memory leaks and uses of uninitialized variables
These were discovered when running under teh valgrind MemCheck tool. I have also checked in a suppressions file (wsjtx-valgrind.linux.supp) suitable for use on Linux when running the valgrind MemCheck tool. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6755 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
ad54035a53
commit
8e43af11e5
@ -21,7 +21,11 @@ namespace
|
|||||||
// chunk descriptor
|
// chunk descriptor
|
||||||
struct Desc
|
struct Desc
|
||||||
{
|
{
|
||||||
Desc () = default;
|
Desc ()
|
||||||
|
: size_ {0}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
explicit Desc (char const * id, quint32 size = 0)
|
explicit Desc (char const * id, quint32 size = 0)
|
||||||
: size_ {size}
|
: size_ {size}
|
||||||
{
|
{
|
||||||
|
@ -443,7 +443,7 @@ private:
|
|||||||
TransceiverFactory transceiver_factory_;
|
TransceiverFactory transceiver_factory_;
|
||||||
QList<QMetaObject::Connection> rig_connections_;
|
QList<QMetaObject::Connection> rig_connections_;
|
||||||
|
|
||||||
Ui::configuration_dialog * ui_;
|
QScopedPointer<Ui::configuration_dialog> ui_;
|
||||||
|
|
||||||
QSettings * settings_;
|
QSettings * settings_;
|
||||||
|
|
||||||
@ -2407,7 +2407,7 @@ void Configuration::impl::close_rig ()
|
|||||||
{
|
{
|
||||||
ui_->test_CAT_push_button->setStyleSheet ("QPushButton {background-color: red;}");
|
ui_->test_CAT_push_button->setStyleSheet ("QPushButton {background-color: red;}");
|
||||||
Q_EMIT stop_transceiver ();
|
Q_EMIT stop_transceiver ();
|
||||||
Q_FOREACH (auto const& connection, rig_connections_)
|
for (auto const& connection: rig_connections_)
|
||||||
{
|
{
|
||||||
disconnect (connection);
|
disconnect (connection);
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ namespace
|
|||||||
|
|
||||||
// callback function that receives transceiver capabilities from the
|
// callback function that receives transceiver capabilities from the
|
||||||
// hamlib libraries
|
// hamlib libraries
|
||||||
int rigCallback (rig_caps const * caps, void * callback_data)
|
int register_callback (rig_caps const * caps, void * callback_data)
|
||||||
{
|
{
|
||||||
TransceiverFactory::Transceivers * rigs = reinterpret_cast<TransceiverFactory::Transceivers *> (callback_data);
|
TransceiverFactory::Transceivers * rigs = reinterpret_cast<TransceiverFactory::Transceivers *> (callback_data);
|
||||||
|
|
||||||
@ -106,6 +106,12 @@ namespace
|
|||||||
return 1; // keep them coming
|
return 1; // keep them coming
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int unregister_callback (rig_caps const * caps, void *)
|
||||||
|
{
|
||||||
|
rig_unregister (caps->rig_model);
|
||||||
|
return 1; // keep them coming
|
||||||
|
}
|
||||||
|
|
||||||
// int frequency_change_callback (RIG * /* rig */, vfo_t vfo, freq_t f, rig_ptr_t arg)
|
// int frequency_change_callback (RIG * /* rig */, vfo_t vfo, freq_t f, rig_ptr_t arg)
|
||||||
// {
|
// {
|
||||||
// (void)vfo; // unused in release build
|
// (void)vfo; // unused in release build
|
||||||
@ -158,7 +164,12 @@ void HamlibTransceiver::register_transceivers (TransceiverFactory::Transceivers
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
rig_load_all_backends ();
|
rig_load_all_backends ();
|
||||||
rig_list_foreach (rigCallback, registry);
|
rig_list_foreach (register_callback, registry);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HamlibTransceiver::unregister_transceivers ()
|
||||||
|
{
|
||||||
|
rig_list_foreach (unregister_callback, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HamlibTransceiver::RIGDeleter::cleanup (RIG * rig)
|
void HamlibTransceiver::RIGDeleter::cleanup (RIG * rig)
|
||||||
|
@ -25,6 +25,7 @@ class HamlibTransceiver final
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static void register_transceivers (TransceiverFactory::Transceivers *);
|
static void register_transceivers (TransceiverFactory::Transceivers *);
|
||||||
|
static void unregister_transceivers ();
|
||||||
|
|
||||||
explicit HamlibTransceiver (int model_number, TransceiverFactory::ParameterPack const&,
|
explicit HamlibTransceiver (int model_number, TransceiverFactory::ParameterPack const&,
|
||||||
QObject * parent = nullptr);
|
QObject * parent = nullptr);
|
||||||
|
@ -43,6 +43,11 @@ TransceiverFactory::TransceiverFactory ()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TransceiverFactory::~TransceiverFactory ()
|
||||||
|
{
|
||||||
|
HamlibTransceiver::unregister_transceivers ();
|
||||||
|
}
|
||||||
|
|
||||||
auto TransceiverFactory::supported_transceivers () const -> Transceivers const&
|
auto TransceiverFactory::supported_transceivers () const -> Transceivers const&
|
||||||
{
|
{
|
||||||
return transceivers_;
|
return transceivers_;
|
||||||
|
@ -78,6 +78,7 @@ public:
|
|||||||
Q_ENUM (SplitMode)
|
Q_ENUM (SplitMode)
|
||||||
|
|
||||||
TransceiverFactory ();
|
TransceiverFactory ();
|
||||||
|
~TransceiverFactory ();
|
||||||
|
|
||||||
static char const * const basic_transceiver_name_; // dummy transceiver is basic model
|
static char const * const basic_transceiver_name_; // dummy transceiver is basic model
|
||||||
|
|
||||||
|
18
astro.cpp
18
astro.cpp
@ -107,12 +107,14 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
|
|||||||
int ndop;
|
int ndop;
|
||||||
int ndop00;
|
int ndop00;
|
||||||
|
|
||||||
astrosub_(&nyear, &month, &nday, &uth, &freq8, mygrid.toLatin1().constData(),
|
QString mygrid_padded {(mygrid + " ").left (6)};
|
||||||
hisgrid.toLatin1().constData(), &azsun, &elsun, &azmoon, &elmoon,
|
QString hisgrid_padded {(hisgrid + " ").left (6)};
|
||||||
&azmoondx, &elmoondx, &ntsky, &ndop, &ndop00, &ramoon, &decmoon,
|
astrosub_(&nyear, &month, &nday, &uth, &freq8, mygrid_padded.toLatin1().constData(),
|
||||||
&dgrd, &poloffset, &xnr, &techo, &width1, &width2, &bTx,
|
hisgrid_padded.toLatin1().constData(), &azsun, &elsun, &azmoon, &elmoon,
|
||||||
AzElFileName.toLatin1().constData(), jpleph.toLatin1().constData(), 6, 6,
|
&azmoondx, &elmoondx, &ntsky, &ndop, &ndop00, &ramoon, &decmoon,
|
||||||
AzElFileName.length(), jpleph.length());
|
&dgrd, &poloffset, &xnr, &techo, &width1, &width2, &bTx,
|
||||||
|
AzElFileName.toLatin1().constData(), jpleph.toLatin1().constData(), 6, 6,
|
||||||
|
AzElFileName.length(), jpleph.length());
|
||||||
|
|
||||||
QString message;
|
QString message;
|
||||||
{
|
{
|
||||||
@ -183,8 +185,8 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
|
|||||||
int nmin {target_date_time.time().minute()};
|
int nmin {target_date_time.time().minute()};
|
||||||
double sec {target_date_time.time().second() + 0.001*target_date_time.time().msec()};
|
double sec {target_date_time.time().second() + 0.001*target_date_time.time().msec()};
|
||||||
double uth {nhr + nmin/60.0 + sec/3600.0};
|
double uth {nhr + nmin/60.0 + sec/3600.0};
|
||||||
astrosub_(&nyear, &month, &nday, &uth, &freq8, mygrid.toLatin1().constData(),
|
astrosub_(&nyear, &month, &nday, &uth, &freq8, mygrid_padded.toLatin1().constData(),
|
||||||
hisgrid.toLatin1().constData(), &azsun, &elsun, &azmoon, &elmoon,
|
hisgrid_padded.toLatin1().constData(), &azsun, &elsun, &azmoon, &elmoon,
|
||||||
&azmoondx, &elmoondx, &ntsky, &ndop, &ndop00, &ramoon, &decmoon,
|
&azmoondx, &elmoondx, &ntsky, &ndop, &ndop00, &ramoon, &decmoon,
|
||||||
&dgrd, &poloffset, &xnr, &techo, &width1, &width2, &bTx,
|
&dgrd, &poloffset, &xnr, &techo, &width1, &width2, &bTx,
|
||||||
"", jpleph.toLatin1().constData(), 6, 6,
|
"", jpleph.toLatin1().constData(), 6, 6,
|
||||||
|
3
astro.h
3
astro.h
@ -3,6 +3,7 @@
|
|||||||
#define ASTRO_H
|
#define ASTRO_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
#include "Radio.hpp"
|
#include "Radio.hpp"
|
||||||
|
|
||||||
@ -67,7 +68,7 @@ private:
|
|||||||
|
|
||||||
QSettings * settings_;
|
QSettings * settings_;
|
||||||
Configuration const * configuration_;
|
Configuration const * configuration_;
|
||||||
Ui::Astro * ui_;
|
QScopedPointer<Ui::Astro> ui_;
|
||||||
|
|
||||||
qint32 m_DopplerMethod;
|
qint32 m_DopplerMethod;
|
||||||
};
|
};
|
||||||
|
@ -45,7 +45,6 @@ EchoGraph::EchoGraph(QSettings * settings, QWidget *parent) :
|
|||||||
EchoGraph::~EchoGraph()
|
EchoGraph::~EchoGraph()
|
||||||
{
|
{
|
||||||
saveSettings();
|
saveSettings();
|
||||||
delete ui;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EchoGraph::closeEvent (QCloseEvent * e)
|
void EchoGraph::closeEvent (QCloseEvent * e)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef ECHOGRAPH_H
|
#ifndef ECHOGRAPH_H
|
||||||
#define ECHOGRAPH_H
|
#define ECHOGRAPH_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class EchoGraph;
|
class EchoGraph;
|
||||||
@ -35,7 +37,7 @@ private:
|
|||||||
QSettings * m_settings;
|
QSettings * m_settings;
|
||||||
qint32 m_nColor;
|
qint32 m_nColor;
|
||||||
|
|
||||||
Ui::EchoGraph *ui;
|
QScopedPointer<Ui::EchoGraph> ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ECHOGRAPH_H
|
#endif // ECHOGRAPH_H
|
||||||
|
@ -39,7 +39,6 @@ FastGraph::FastGraph(QSettings * settings, QWidget *parent) :
|
|||||||
FastGraph::~FastGraph()
|
FastGraph::~FastGraph()
|
||||||
{
|
{
|
||||||
saveSettings();
|
saveSettings();
|
||||||
delete ui;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FastGraph::closeEvent (QCloseEvent * e)
|
void FastGraph::closeEvent (QCloseEvent * e)
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef FASTGRAPH_H
|
#ifndef FASTGRAPH_H
|
||||||
#define FASTGRAPH_H
|
#define FASTGRAPH_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class FastGraph;
|
class FastGraph;
|
||||||
@ -38,7 +40,7 @@ private:
|
|||||||
QSettings * m_settings;
|
QSettings * m_settings;
|
||||||
float m_ave;
|
float m_ave;
|
||||||
|
|
||||||
Ui::FastGraph *ui;
|
QScopedPointer<Ui::FastGraph> ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern float fast_green[703];
|
extern float fast_green[703];
|
||||||
|
29
fastplot.cpp
29
fastplot.cpp
@ -7,7 +7,21 @@
|
|||||||
#define MAX_SCREENSIZE 2048
|
#define MAX_SCREENSIZE 2048
|
||||||
|
|
||||||
FPlotter::FPlotter(QWidget *parent) : //FPlotter Constructor
|
FPlotter::FPlotter(QWidget *parent) : //FPlotter Constructor
|
||||||
QFrame(parent)
|
QFrame {parent},
|
||||||
|
m_w {703},
|
||||||
|
m_plotGain {0},
|
||||||
|
m_greenZero {0},
|
||||||
|
m_x0 {0},
|
||||||
|
m_x1 {0},
|
||||||
|
m_ScalePixmap {QPixmap {703, 20}},
|
||||||
|
m_pixPerSecond {12000.0/512.0},
|
||||||
|
m_hdivs {30},
|
||||||
|
m_h {220},
|
||||||
|
m_h1 {20},
|
||||||
|
m_h2 {m_h-m_h1},
|
||||||
|
m_HorizPixmap {QPixmap {m_w, m_h2}},
|
||||||
|
m_jh0 {9999},
|
||||||
|
m_bPaint2 {true}
|
||||||
{
|
{
|
||||||
setFocusPolicy(Qt::StrongFocus);
|
setFocusPolicy(Qt::StrongFocus);
|
||||||
setAttribute(Qt::WA_PaintOnScreen,false);
|
setAttribute(Qt::WA_PaintOnScreen,false);
|
||||||
@ -15,22 +29,9 @@ FPlotter::FPlotter(QWidget *parent) : //FPlotter Constructor
|
|||||||
setAttribute(Qt::WA_OpaquePaintEvent, false);
|
setAttribute(Qt::WA_OpaquePaintEvent, false);
|
||||||
setAttribute(Qt::WA_NoSystemBackground, true);
|
setAttribute(Qt::WA_NoSystemBackground, true);
|
||||||
|
|
||||||
m_pixPerSecond= 12000.0/512.0;
|
|
||||||
m_hdivs = 30;
|
|
||||||
m_jh0=9999;
|
|
||||||
m_HorizPixmap = QPixmap(703,200);
|
|
||||||
m_ScalePixmap = QPixmap(703,20);
|
|
||||||
m_w = 703;
|
|
||||||
m_h = 220;
|
|
||||||
m_h1=20;
|
|
||||||
m_h2=m_h-m_h1;
|
|
||||||
m_HorizPixmap = QPixmap(m_w, m_h2);
|
|
||||||
m_HorizPixmap.fill(Qt::black);
|
m_HorizPixmap.fill(Qt::black);
|
||||||
m_HorizPixmap.fill(Qt::black);
|
m_HorizPixmap.fill(Qt::black);
|
||||||
m_ScalePixmap.fill(Qt::white);
|
m_ScalePixmap.fill(Qt::white);
|
||||||
m_bPaint2=true;
|
|
||||||
m_x0=0;
|
|
||||||
m_x1=0;
|
|
||||||
drawScale();
|
drawScale();
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,6 @@ private:
|
|||||||
float TimefromX(int x);
|
float TimefromX(int x);
|
||||||
qint64 RoundFreq(qint64 freq, int resolution);
|
qint64 RoundFreq(qint64 freq, int resolution);
|
||||||
|
|
||||||
QPixmap m_HorizPixmap;
|
|
||||||
QPixmap m_ScalePixmap;
|
QPixmap m_ScalePixmap;
|
||||||
QString m_HDivText[483];
|
QString m_HDivText[483];
|
||||||
QString m_t;
|
QString m_t;
|
||||||
@ -64,6 +63,7 @@ private:
|
|||||||
qint32 m_h;
|
qint32 m_h;
|
||||||
qint32 m_h1;
|
qint32 m_h1;
|
||||||
qint32 m_h2;
|
qint32 m_h2;
|
||||||
|
QPixmap m_HorizPixmap;
|
||||||
qint32 m_jh0;
|
qint32 m_jh0;
|
||||||
|
|
||||||
bool m_bPaint2;
|
bool m_bPaint2;
|
||||||
|
491
mainwindow.cpp
491
mainwindow.cpp
@ -5,6 +5,8 @@
|
|||||||
#include <limits>
|
#include <limits>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
#include <fftw3.h>
|
||||||
|
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QRegExpValidator>
|
#include <QRegExpValidator>
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
@ -61,6 +63,8 @@ extern "C" {
|
|||||||
void symspec_(struct dec_data *, int* k, int* ntrperiod, int* nsps, int* ingain, int* minw,
|
void symspec_(struct dec_data *, int* k, int* ntrperiod, int* nsps, int* ingain, int* minw,
|
||||||
float* px, float s[], float* df3, int* nhsym, int* npts8);
|
float* px, float s[], float* df3, int* nhsym, int* npts8);
|
||||||
|
|
||||||
|
void four2a_(_Complex float *, int * nfft, int * ndim, int * isign, int * iform, int len);
|
||||||
|
|
||||||
void hspec_(short int d2[], int* k, int* ingain, float green[], float s[], int* jh);
|
void hspec_(short int d2[], int* k, int* ingain, float green[], float s[], int* jh);
|
||||||
|
|
||||||
void gen4_(char* msg, int* ichk, char* msgsent, int itone[],
|
void gen4_(char* msg, int* ichk, char* msgsent, int itone[],
|
||||||
@ -92,9 +96,6 @@ extern "C" {
|
|||||||
|
|
||||||
int ptt_(int nport, int ntx, int* iptt, int* nopen);
|
int ptt_(int nport, int ntx, int* iptt, int* nopen);
|
||||||
|
|
||||||
int fftwf_import_wisdom_from_filename(const char *);
|
|
||||||
int fftwf_export_wisdom_to_filename(const char *);
|
|
||||||
|
|
||||||
void wspr_downsample_(short int d2[], int* k);
|
void wspr_downsample_(short int d2[], int* k);
|
||||||
void savec2_(char* fname, int* TR_seconds, double* dial_freq, int len1);
|
void savec2_(char* fname, int* TR_seconds, double* dial_freq, int len1);
|
||||||
|
|
||||||
@ -117,14 +118,14 @@ struct dec_data dec_data; // for sharing with Fortran
|
|||||||
|
|
||||||
int outBufSize;
|
int outBufSize;
|
||||||
int rc;
|
int rc;
|
||||||
qint32 g_iptt;
|
qint32 g_iptt {0};
|
||||||
wchar_t buffer[256];
|
wchar_t buffer[256];
|
||||||
float fast_green[703];
|
float fast_green[703];
|
||||||
float fast_green2[703];
|
float fast_green2[703];
|
||||||
float fast_s[44992]; //44992=64*703
|
float fast_s[44992]; //44992=64*703
|
||||||
float fast_s2[44992];
|
float fast_s2[44992];
|
||||||
int fast_jh;
|
int fast_jh {0};
|
||||||
int fast_jh2;
|
int fast_jh2 {0};
|
||||||
int narg[15];
|
int narg[15];
|
||||||
QVector<QColor> g_ColorTbl;
|
QVector<QColor> g_ColorTbl;
|
||||||
bool g_single_decode;
|
bool g_single_decode;
|
||||||
@ -163,22 +164,72 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
m_fastGraph (new FastGraph(m_settings)),
|
m_fastGraph (new FastGraph(m_settings)),
|
||||||
m_logDlg (new LogQSO (program_title (), m_settings, this)),
|
m_logDlg (new LogQSO (program_title (), m_settings, this)),
|
||||||
m_lastDialFreq {0},
|
m_lastDialFreq {0},
|
||||||
//m_dialFreq {std::numeric_limits<Radio::Frequency>::max ()},
|
m_callingFrequency {0},
|
||||||
|
m_dialFreqRxWSPR {0},
|
||||||
m_detector {new Detector {RX_SAMPLE_RATE, NTMAX, 6912 / 2, downSampleFactor}},
|
m_detector {new Detector {RX_SAMPLE_RATE, NTMAX, 6912 / 2, downSampleFactor}},
|
||||||
m_soundInput {new SoundInput},
|
m_soundInput {new SoundInput},
|
||||||
m_modulator {new Modulator {TX_SAMPLE_RATE, NTMAX}},
|
m_modulator {new Modulator {TX_SAMPLE_RATE, NTMAX}},
|
||||||
m_soundOutput {new SoundOutput},
|
m_soundOutput {new SoundOutput},
|
||||||
|
m_msErase {0},
|
||||||
|
m_secBandChanged {0},
|
||||||
m_freqNominal {0},
|
m_freqNominal {0},
|
||||||
m_freqTxNominal {0},
|
m_freqTxNominal {0},
|
||||||
|
m_DTtol {3.0},
|
||||||
|
m_waterfallAvg {1},
|
||||||
|
m_ntx {1},
|
||||||
m_XIT {0},
|
m_XIT {0},
|
||||||
|
m_sec0 {-1},
|
||||||
|
m_RxLog {1}, //Write Date and Time to RxLog
|
||||||
|
m_nutc0 {9999},
|
||||||
|
m_ntr {0},
|
||||||
|
m_tx {0},
|
||||||
|
m_TRperiod {60},
|
||||||
|
m_inGain {0},
|
||||||
|
m_secID {0},
|
||||||
|
m_repeatMsg {0},
|
||||||
|
m_watchdogLimit {7},
|
||||||
|
m_nSubMode {0},
|
||||||
|
m_nclearave {1},
|
||||||
m_pctx {0},
|
m_pctx {0},
|
||||||
|
m_nseq {0},
|
||||||
|
m_nWSPRdecodes {0},
|
||||||
|
m_k0 {9999999},
|
||||||
|
m_nPick {0},
|
||||||
|
m_TRperiodFast {-1},
|
||||||
|
m_nTx73 {0},
|
||||||
|
m_freqCQ {0},
|
||||||
|
m_btxok {false},
|
||||||
m_diskData {false},
|
m_diskData {false},
|
||||||
|
m_loopall {false},
|
||||||
|
m_txFirst {false},
|
||||||
|
m_auto {false},
|
||||||
|
m_restart {false},
|
||||||
|
m_startAnother {false},
|
||||||
|
m_saveDecoded {false},
|
||||||
|
m_saveAll {false},
|
||||||
|
m_widebandDecode {false},
|
||||||
|
m_dataAvailable {false},
|
||||||
|
m_blankLine {false},
|
||||||
|
m_decodedText2 {false},
|
||||||
|
m_freeText {false},
|
||||||
m_sentFirst73 {false},
|
m_sentFirst73 {false},
|
||||||
m_currentMessageType {-1},
|
m_currentMessageType {-1},
|
||||||
m_lastMessageType {-1},
|
m_lastMessageType {-1},
|
||||||
|
m_lockTxFreq {false},
|
||||||
|
m_bShMsgs {false},
|
||||||
m_uploading {false},
|
m_uploading {false},
|
||||||
|
m_txNext {false},
|
||||||
|
m_grid6 {false},
|
||||||
m_tuneup {false},
|
m_tuneup {false},
|
||||||
|
m_bTxTime {false},
|
||||||
|
m_rxDone {false},
|
||||||
m_bSimplex {false},
|
m_bSimplex {false},
|
||||||
|
m_bEchoTxOK {false},
|
||||||
|
m_bTransmittedEcho {false},
|
||||||
|
m_bEchoTxed {false},
|
||||||
|
m_bFastDecodeCalled {false},
|
||||||
|
m_bDoubleClickAfterCQnnn {false},
|
||||||
|
m_bRefSpec {false},
|
||||||
m_ihsym {0},
|
m_ihsym {0},
|
||||||
m_nzap {0},
|
m_nzap {0},
|
||||||
m_px {0.0},
|
m_px {0.0},
|
||||||
@ -188,7 +239,69 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
m_nsendingsh {0},
|
m_nsendingsh {0},
|
||||||
m_onAirFreq0 {0.0},
|
m_onAirFreq0 {0.0},
|
||||||
m_first_error {true},
|
m_first_error {true},
|
||||||
|
tx_status_label {new QLabel {"Receiving"}},
|
||||||
|
mode_label {new QLabel {""}},
|
||||||
|
last_tx_label {new QLabel {""}},
|
||||||
|
auto_tx_label {new QLabel {""}},
|
||||||
|
progressBar {new QProgressBar},
|
||||||
|
wsprNet {new WSPRNet {network_manager, this}},
|
||||||
m_appDir {QApplication::applicationDirPath ()},
|
m_appDir {QApplication::applicationDirPath ()},
|
||||||
|
m_palette {"Linrad"},
|
||||||
|
m_mode {"JT9"},
|
||||||
|
m_rpt {"-15"},
|
||||||
|
m_pfx {
|
||||||
|
"1A", "1S",
|
||||||
|
"3A", "3B6", "3B8", "3B9", "3C", "3C0", "3D2", "3D2C",
|
||||||
|
"3D2R", "3DA", "3V", "3W", "3X", "3Y", "3YB", "3YP",
|
||||||
|
"4J", "4L", "4S", "4U1I", "4U1U", "4W", "4X",
|
||||||
|
"5A", "5B", "5H", "5N", "5R", "5T", "5U", "5V", "5W", "5X", "5Z",
|
||||||
|
"6W", "6Y",
|
||||||
|
"7O", "7P", "7Q", "7X",
|
||||||
|
"8P", "8Q", "8R",
|
||||||
|
"9A", "9G", "9H", "9J", "9K", "9L", "9M2", "9M6", "9N",
|
||||||
|
"9Q", "9U", "9V", "9X", "9Y",
|
||||||
|
"A2", "A3", "A4", "A5", "A6", "A7", "A9", "AP",
|
||||||
|
"BS7", "BV", "BV9", "BY",
|
||||||
|
"C2", "C3", "C5", "C6", "C9", "CE", "CE0X", "CE0Y",
|
||||||
|
"CE0Z", "CE9", "CM", "CN", "CP", "CT", "CT3", "CU",
|
||||||
|
"CX", "CY0", "CY9",
|
||||||
|
"D2", "D4", "D6", "DL", "DU",
|
||||||
|
"E3", "E4", "E5", "EA", "EA6", "EA8", "EA9", "EI", "EK",
|
||||||
|
"EL", "EP", "ER", "ES", "ET", "EU", "EX", "EY", "EZ",
|
||||||
|
"F", "FG", "FH", "FJ", "FK", "FKC", "FM", "FO", "FOA",
|
||||||
|
"FOC", "FOM", "FP", "FR", "FRG", "FRJ", "FRT", "FT5W",
|
||||||
|
"FT5X", "FT5Z", "FW", "FY",
|
||||||
|
"M", "MD", "MI", "MJ", "MM", "MU", "MW",
|
||||||
|
"H4", "H40", "HA", "HB", "HB0", "HC", "HC8", "HH",
|
||||||
|
"HI", "HK", "HK0", "HK0M", "HL", "HM", "HP", "HR",
|
||||||
|
"HS", "HV", "HZ",
|
||||||
|
"I", "IS", "IS0",
|
||||||
|
"J2", "J3", "J5", "J6", "J7", "J8", "JA", "JDM",
|
||||||
|
"JDO", "JT", "JW", "JX", "JY",
|
||||||
|
"K", "KC4", "KG4", "KH0", "KH1", "KH2", "KH3", "KH4", "KH5",
|
||||||
|
"KH5K", "KH6", "KH7", "KH8", "KH9", "KL", "KP1", "KP2",
|
||||||
|
"KP4", "KP5",
|
||||||
|
"LA", "LU", "LX", "LY", "LZ",
|
||||||
|
"OA", "OD", "OE", "OH", "OH0", "OJ0", "OK", "OM", "ON",
|
||||||
|
"OX", "OY", "OZ",
|
||||||
|
"P2", "P4", "PA", "PJ2", "PJ7", "PY", "PY0F", "PT0S", "PY0T", "PZ",
|
||||||
|
"R1F", "R1M",
|
||||||
|
"S0", "S2", "S5", "S7", "S9", "SM", "SP", "ST", "SU",
|
||||||
|
"SV", "SVA", "SV5", "SV9",
|
||||||
|
"T2", "T30", "T31", "T32", "T33", "T5", "T7", "T8", "T9", "TA",
|
||||||
|
"TF", "TG", "TI", "TI9", "TJ", "TK", "TL", "TN", "TR", "TT",
|
||||||
|
"TU", "TY", "TZ",
|
||||||
|
"UA", "UA2", "UA9", "UK", "UN", "UR",
|
||||||
|
"V2", "V3", "V4", "V5", "V6", "V7", "V8", "VE", "VK", "VK0H",
|
||||||
|
"VK0M", "VK9C", "VK9L", "VK9M", "VK9N", "VK9W", "VK9X", "VP2E",
|
||||||
|
"VP2M", "VP2V", "VP5", "VP6", "VP6D", "VP8", "VP8G", "VP8H",
|
||||||
|
"VP8O", "VP8S", "VP9", "VQ9", "VR", "VU", "VU4", "VU7",
|
||||||
|
"XE", "XF4", "XT", "XU", "XW", "XX9", "XZ",
|
||||||
|
"YA", "YB", "YI", "YJ", "YK", "YL", "YN", "YO", "YS", "YU", "YV", "YV0",
|
||||||
|
"Z2", "Z3", "ZA", "ZB", "ZC4", "ZD7", "ZD8", "ZD9", "ZF", "ZK1N",
|
||||||
|
"ZK1S", "ZK2", "ZK3", "ZL", "ZL7", "ZL8", "ZL9", "ZP", "ZS", "ZS8"
|
||||||
|
},
|
||||||
|
m_sfx {"P", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A"},
|
||||||
mem_jt9 {shdmem},
|
mem_jt9 {shdmem},
|
||||||
m_msAudioOutputBuffered (0u),
|
m_msAudioOutputBuffered (0u),
|
||||||
m_framesAudioInputBuffered (RX_SAMPLE_RATE / 10),
|
m_framesAudioInputBuffered (RX_SAMPLE_RATE / 10),
|
||||||
@ -216,6 +329,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
m_baseCall = Radio::base_callsign (m_config.my_callsign ());
|
||||||
|
|
||||||
m_optimizingProgress.setWindowModality (Qt::WindowModal);
|
m_optimizingProgress.setWindowModality (Qt::WindowModal);
|
||||||
m_optimizingProgress.setAutoReset (false);
|
m_optimizingProgress.setAutoReset (false);
|
||||||
m_optimizingProgress.setMinimumDuration (15000); // only show after 15s delay
|
m_optimizingProgress.setMinimumDuration (15000); // only show after 15s delay
|
||||||
@ -368,7 +483,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
m_sampleDownloader->show ();
|
m_sampleDownloader->show ();
|
||||||
});
|
});
|
||||||
|
|
||||||
QButtonGroup* txMsgButtonGroup = new QButtonGroup;
|
QButtonGroup* txMsgButtonGroup = new QButtonGroup {this};
|
||||||
txMsgButtonGroup->addButton(ui->txrb1,1);
|
txMsgButtonGroup->addButton(ui->txrb1,1);
|
||||||
txMsgButtonGroup->addButton(ui->txrb2,2);
|
txMsgButtonGroup->addButton(ui->txrb2,2);
|
||||||
txMsgButtonGroup->addButton(ui->txrb3,3);
|
txMsgButtonGroup->addButton(ui->txrb3,3);
|
||||||
@ -480,102 +595,37 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
connect(&m_guiTimer, &QTimer::timeout, this, &MainWindow::guiUpdate);
|
connect(&m_guiTimer, &QTimer::timeout, this, &MainWindow::guiUpdate);
|
||||||
m_guiTimer.start(100); //### Don't change the 100 ms! ###
|
m_guiTimer.start(100); //### Don't change the 100 ms! ###
|
||||||
|
|
||||||
ptt0Timer = new QTimer(this);
|
ptt0Timer.setSingleShot(true);
|
||||||
ptt0Timer->setSingleShot(true);
|
connect(&ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2);
|
||||||
connect(ptt0Timer, &QTimer::timeout, this, &MainWindow::stopTx2);
|
ptt1Timer.setSingleShot(true);
|
||||||
ptt1Timer = new QTimer(this);
|
connect(&ptt1Timer, &QTimer::timeout, this, &MainWindow::startTx2);
|
||||||
ptt1Timer->setSingleShot(true);
|
|
||||||
connect(ptt1Timer, &QTimer::timeout, this, &MainWindow::startTx2);
|
|
||||||
|
|
||||||
logQSOTimer = new QTimer(this);
|
logQSOTimer.setSingleShot(true);
|
||||||
logQSOTimer->setSingleShot(true);
|
connect(&logQSOTimer, &QTimer::timeout, this, &MainWindow::on_logQSOButton_clicked);
|
||||||
connect(logQSOTimer, &QTimer::timeout, this, &MainWindow::on_logQSOButton_clicked);
|
|
||||||
|
|
||||||
tuneButtonTimer= new QTimer(this);
|
tuneButtonTimer.setSingleShot(true);
|
||||||
tuneButtonTimer->setSingleShot(true);
|
connect(&tuneButtonTimer, &QTimer::timeout, this, &MainWindow::on_stopTxButton_clicked);
|
||||||
connect(tuneButtonTimer, &QTimer::timeout, this, &MainWindow::on_stopTxButton_clicked);
|
|
||||||
|
|
||||||
tuneATU_Timer= new QTimer(this);
|
tuneATU_Timer.setSingleShot(true);
|
||||||
tuneATU_Timer->setSingleShot(true);
|
connect(&tuneATU_Timer, &QTimer::timeout, this, &MainWindow::stopTuneATU);
|
||||||
connect(tuneATU_Timer, &QTimer::timeout, this, &MainWindow::stopTuneATU);
|
|
||||||
|
|
||||||
killFileTimer = new QTimer(this);
|
killFileTimer.setSingleShot(true);
|
||||||
killFileTimer->setSingleShot(true);
|
connect(&killFileTimer, &QTimer::timeout, this, &MainWindow::killFile);
|
||||||
connect(killFileTimer, &QTimer::timeout, this, &MainWindow::killFile);
|
|
||||||
|
|
||||||
uploadTimer = new QTimer(this);
|
uploadTimer.setSingleShot(true);
|
||||||
uploadTimer->setSingleShot(true);
|
connect(&uploadTimer, SIGNAL(timeout()), this, SLOT(uploadSpots()));
|
||||||
connect(uploadTimer, SIGNAL(timeout()), this, SLOT(uploadSpots()));
|
|
||||||
|
|
||||||
TxAgainTimer = new QTimer(this);
|
TxAgainTimer.setSingleShot(true);
|
||||||
TxAgainTimer->setSingleShot(true);
|
connect(&TxAgainTimer, SIGNAL(timeout()), this, SLOT(TxAgain()));
|
||||||
connect(TxAgainTimer, SIGNAL(timeout()), this, SLOT(TxAgain()));
|
|
||||||
|
|
||||||
RxQSYTimer = new QTimer(this);
|
RxQSYTimer.setSingleShot(true);
|
||||||
RxQSYTimer->setSingleShot(true);
|
connect(&RxQSYTimer, SIGNAL(timeout()), this, SLOT(RxQSY()));
|
||||||
connect(RxQSYTimer, SIGNAL(timeout()), this, SLOT(RxQSY()));
|
|
||||||
|
|
||||||
m_auto=false;
|
connect(m_wideGraph.data (), SIGNAL(setFreq3(int,int)),this,
|
||||||
m_waterfallAvg = 1;
|
SLOT(setFreq4(int,int)));
|
||||||
m_txFirst=false;
|
|
||||||
m_btxok=false;
|
|
||||||
m_restart=false;
|
|
||||||
m_widebandDecode=false;
|
|
||||||
m_ntx=1;
|
|
||||||
|
|
||||||
m_tx=0;
|
|
||||||
m_txNext=false;
|
|
||||||
m_grid6=false;
|
|
||||||
m_nseq=0;
|
|
||||||
m_ntr=0;
|
|
||||||
|
|
||||||
m_loopall=false;
|
|
||||||
m_startAnother=false;
|
|
||||||
m_saveDecoded=false;
|
|
||||||
m_saveAll=false;
|
|
||||||
m_sec0=-1;
|
|
||||||
m_palette="Linrad";
|
|
||||||
m_RxLog=1; //Write Date and Time to RxLog
|
|
||||||
m_nutc0=9999;
|
|
||||||
m_mode="JT9";
|
|
||||||
m_rpt="-15";
|
|
||||||
m_TRperiod=60;
|
|
||||||
m_inGain=0;
|
|
||||||
m_dataAvailable=false;
|
|
||||||
g_iptt=0;
|
|
||||||
m_secID=0;
|
|
||||||
m_blankLine=false;
|
|
||||||
m_decodedText2=false;
|
|
||||||
m_freeText=false;
|
|
||||||
m_msErase=0;
|
|
||||||
m_sentFirst73=false;
|
|
||||||
m_watchdogLimit=7;
|
|
||||||
m_repeatMsg=0;
|
|
||||||
m_secBandChanged=0;
|
|
||||||
m_lockTxFreq=false;
|
|
||||||
m_baseCall = Radio::base_callsign (m_config.my_callsign ());
|
|
||||||
m_QSOText.clear();
|
m_QSOText.clear();
|
||||||
decodeBusy(false);
|
decodeBusy(false);
|
||||||
m_nSubMode=0;
|
|
||||||
m_DTtol=0.5;
|
|
||||||
m_wideGraph->setTol(500);
|
|
||||||
m_bShMsgs=false;
|
|
||||||
m_bTxTime=false;
|
|
||||||
m_rxDone=false;
|
|
||||||
m_bEchoTxOK=false;
|
|
||||||
m_bTransmittedEcho=false;
|
|
||||||
m_bFastDecodeCalled=false;
|
|
||||||
m_bDoubleClickAfterCQnnn=false;
|
|
||||||
m_nclearave=1;
|
|
||||||
m_bEchoTxed=false;
|
|
||||||
m_nWSPRdecodes=0;
|
|
||||||
m_k0=9999999;
|
|
||||||
m_nPick=0;
|
|
||||||
m_DTtol=3.0;
|
|
||||||
m_TRperiodFast=-1;
|
|
||||||
m_nTx73=0;
|
|
||||||
m_freqCQ=0;
|
|
||||||
m_callingFrequency=0;
|
|
||||||
QString t1[28]={"1 uW","2 uW","5 uW","10 uW","20 uW","50 uW","100 uW","200 uW","500 uW",
|
QString t1[28]={"1 uW","2 uW","5 uW","10 uW","20 uW","50 uW","100 uW","200 uW","500 uW",
|
||||||
"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW",
|
"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW",
|
||||||
"1 W","2 W","5 W","10 W","20 W","50 W","100 W","200 W","500 W","1 kW"};
|
"1 W","2 W","5 W","10 W","20 W","50 W","100 W","200 W","500 W","1 kW"};
|
||||||
@ -662,23 +712,13 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
QByteArray cfname=fname.toLocal8Bit();
|
QByteArray cfname=fname.toLocal8Bit();
|
||||||
fftwf_import_wisdom_from_filename(cfname);
|
fftwf_import_wisdom_from_filename(cfname);
|
||||||
|
|
||||||
getpfx(); //Load the prefix/suffix dictionary
|
|
||||||
genStdMsgs(m_rpt);
|
genStdMsgs(m_rpt);
|
||||||
m_ntx=6;
|
m_ntx = 6;
|
||||||
ui->txrb6->setChecked(true);
|
ui->txrb6->setChecked(true);
|
||||||
if(m_mode=="") m_mode="JT9";
|
|
||||||
on_actionWide_Waterfall_triggered();
|
|
||||||
connect(m_wideGraph.data (), SIGNAL(setFreq3(int,int)),this,
|
|
||||||
SLOT(setFreq4(int,int)));
|
|
||||||
m_wideGraph->setLockTxFreq(m_lockTxFreq);
|
|
||||||
m_wideGraph->setMode(m_mode);
|
|
||||||
m_wideGraph->setModeTx(m_modeTx);
|
|
||||||
|
|
||||||
connect (&m_wav_future_watcher, &QFutureWatcher<void>::finished, this, &MainWindow::diskDat);
|
connect (&m_wav_future_watcher, &QFutureWatcher<void>::finished, this, &MainWindow::diskDat);
|
||||||
|
|
||||||
future3 = new QFuture<void>;
|
connect(&watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done()));
|
||||||
watcher3 = new QFutureWatcher<void>;
|
|
||||||
connect(watcher3, SIGNAL(finished()),this,SLOT(fast_decode_done()));
|
|
||||||
// Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ());
|
// Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ());
|
||||||
Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, m_detector, m_downSampleFactor, m_config.audio_input_channel ());
|
Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, m_detector, m_downSampleFactor, m_config.audio_input_channel ());
|
||||||
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered);
|
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered);
|
||||||
@ -711,7 +751,38 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
if(m_mode=="QRA") on_actionQRA_triggered();
|
if(m_mode=="QRA") on_actionQRA_triggered();
|
||||||
if(m_mode=="Echo") monitor(false); //Don't auto-start Monitor in Echo mode.
|
if(m_mode=="Echo") monitor(false); //Don't auto-start Monitor in Echo mode.
|
||||||
|
|
||||||
m_ntx=1;
|
ui->sbSubmode->setValue(m_nSubMode);
|
||||||
|
ui->txFirstCheckBox->setChecked(m_txFirst);
|
||||||
|
morse_(const_cast<char *> (m_config.my_callsign ().toLatin1().constData()),
|
||||||
|
const_cast<int *> (icw), &m_ncw, m_config.my_callsign ().length());
|
||||||
|
on_actionWide_Waterfall_triggered();
|
||||||
|
m_wideGraph->setTol(500);
|
||||||
|
m_wideGraph->setLockTxFreq(m_lockTxFreq);
|
||||||
|
m_wideGraph->setMode(m_mode);
|
||||||
|
m_wideGraph->setModeTx(m_modeTx);
|
||||||
|
ui->sbFtol->setValue(m_FtolIndex);
|
||||||
|
on_sbFtol_valueChanged(m_FtolIndex);
|
||||||
|
ui->cbEME->setChecked(m_bEME);
|
||||||
|
ui->cbFast9->setChecked(m_bFast9);
|
||||||
|
if(m_bFast9) m_bFastMode=true;
|
||||||
|
ui->sbTR->setValue(m_TRindex);
|
||||||
|
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
|
||||||
|
m_saveDecoded=ui->actionSave_decoded->isChecked();
|
||||||
|
m_saveAll=ui->actionSave_all->isChecked();
|
||||||
|
ui->inGain->setValue(m_inGain);
|
||||||
|
ui->sbTxPercent->setValue(m_pctx);
|
||||||
|
ui->TxPowerComboBox->setCurrentIndex(int(0.3*(m_dBm + 30.0)+0.2));
|
||||||
|
ui->cbUploadWSPR_Spots->setChecked(m_uploadSpots);
|
||||||
|
on_outAttenuation_valueChanged (ui->outAttenuation->value ());
|
||||||
|
ui->sbCQRxFreq->setValue(m_freqCQ);
|
||||||
|
ui->cbTxLock->setChecked(m_lockTxFreq);
|
||||||
|
if((m_ndepth&7)==1) ui->actionQuickDecode->setChecked(true);
|
||||||
|
if((m_ndepth&7)==2) ui->actionMediumDecode->setChecked(true);
|
||||||
|
if((m_ndepth&7)==3) ui->actionDeepestDecode->setChecked(true);
|
||||||
|
ui->actionInclude_averaging->setChecked((m_ndepth&16)>0);
|
||||||
|
ui->actionInclude_correlation->setChecked((m_ndepth&32)>0);
|
||||||
|
|
||||||
|
m_ntx = 1;
|
||||||
ui->txrb1->setChecked(true);
|
ui->txrb1->setChecked(true);
|
||||||
|
|
||||||
if(m_mode.startsWith ("WSPR") and m_pctx>0) {
|
if(m_mode.startsWith ("WSPR") and m_pctx>0) {
|
||||||
@ -731,12 +802,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
}
|
}
|
||||||
VHF_features_enabled(m_config.enable_VHF_features());
|
VHF_features_enabled(m_config.enable_VHF_features());
|
||||||
g_single_decode=m_config.single_decode();
|
g_single_decode=m_config.single_decode();
|
||||||
m_bRefSpec=false;
|
|
||||||
|
|
||||||
progressBar->setMaximum(m_TRperiod);
|
progressBar->setMaximum(m_TRperiod);
|
||||||
m_modulator->setPeriod(m_TRperiod); // TODO - not thread safe
|
m_modulator->setPeriod(m_TRperiod); // TODO - not thread safe
|
||||||
m_dialFreqRxWSPR=0;
|
|
||||||
wsprNet = new WSPRNet(network_manager, this);
|
|
||||||
connect( wsprNet, SIGNAL(uploadStatus(QString)), this, SLOT(uploadResponse(QString)));
|
connect( wsprNet, SIGNAL(uploadStatus(QString)), this, SLOT(uploadResponse(QString)));
|
||||||
if(m_bFastMode) {
|
if(m_bFastMode) {
|
||||||
int ntr[]={5,10,15,30};
|
int ntr[]={5,10,15,30};
|
||||||
@ -749,6 +817,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
if(i<pchkFile.length()) m_pchkFile[i]=ba[i];
|
if(i<pchkFile.length()) m_pchkFile[i]=ba[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
statusChanged();
|
||||||
|
|
||||||
// this must be the last statement of constructor
|
// this must be the last statement of constructor
|
||||||
if (!m_valid) throw std::runtime_error {"Fatal initialization exception"};
|
if (!m_valid) throw std::runtime_error {"Fatal initialization exception"};
|
||||||
}
|
}
|
||||||
@ -760,9 +830,18 @@ MainWindow::~MainWindow()
|
|||||||
QString fname {QDir::toNativeSeparators(m_dataDir.absoluteFilePath ("wsjtx_wisdom.dat"))};
|
QString fname {QDir::toNativeSeparators(m_dataDir.absoluteFilePath ("wsjtx_wisdom.dat"))};
|
||||||
QByteArray cfname=fname.toLocal8Bit();
|
QByteArray cfname=fname.toLocal8Bit();
|
||||||
fftwf_export_wisdom_to_filename(cfname);
|
fftwf_export_wisdom_to_filename(cfname);
|
||||||
|
{
|
||||||
|
int nfft {-1};
|
||||||
|
int ndim {1};
|
||||||
|
int isign {1};
|
||||||
|
int iform {1};
|
||||||
|
// free FFT plan resources
|
||||||
|
four2a_ (nullptr, &nfft, &ndim, &isign, &iform, 0);
|
||||||
|
}
|
||||||
|
fftwf_forget_wisdom ();
|
||||||
|
fftwf_cleanup ();
|
||||||
m_audioThread.quit ();
|
m_audioThread.quit ();
|
||||||
m_audioThread.wait ();
|
m_audioThread.wait ();
|
||||||
delete ui, ui = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------- writeSettings()
|
//-------------------------------------------------------- writeSettings()
|
||||||
@ -825,7 +904,6 @@ void MainWindow::readSettings()
|
|||||||
ui->dxGridEntry->setText(m_settings->value("DXgrid","").toString());
|
ui->dxGridEntry->setText(m_settings->value("DXgrid","").toString());
|
||||||
m_path = m_settings->value("MRUdir", m_config.save_directory ().absolutePath ()).toString ();
|
m_path = m_settings->value("MRUdir", m_config.save_directory ().absolutePath ()).toString ();
|
||||||
m_txFirst = m_settings->value("TxFirst",false).toBool();
|
m_txFirst = m_settings->value("TxFirst",false).toBool();
|
||||||
ui->txFirstCheckBox->setChecked(m_txFirst);
|
|
||||||
auto displayAstro = m_settings->value ("AstroDisplayed", false).toBool ();
|
auto displayAstro = m_settings->value ("AstroDisplayed", false).toBool ();
|
||||||
auto displayMsgAvg = m_settings->value ("MsgAvgDisplayed", false).toBool ();
|
auto displayMsgAvg = m_settings->value ("MsgAvgDisplayed", false).toBool ();
|
||||||
if (m_settings->contains ("FreeText")) ui->freeTextMsg->setCurrentText (
|
if (m_settings->contains ("FreeText")) ui->freeTextMsg->setCurrentText (
|
||||||
@ -834,11 +912,8 @@ void MainWindow::readSettings()
|
|||||||
|
|
||||||
// do this outside of settings group because it uses groups internally
|
// do this outside of settings group because it uses groups internally
|
||||||
ui->actionAstronomical_data->setChecked (displayAstro);
|
ui->actionAstronomical_data->setChecked (displayAstro);
|
||||||
if (displayMsgAvg) on_actionMessage_averaging_triggered();
|
|
||||||
|
|
||||||
m_settings->beginGroup("Common");
|
m_settings->beginGroup("Common");
|
||||||
morse_(const_cast<char *> (m_config.my_callsign ().toLatin1().constData()),
|
|
||||||
const_cast<int *> (icw), &m_ncw, m_config.my_callsign ().length());
|
|
||||||
m_mode=m_settings->value("Mode","JT9").toString();
|
m_mode=m_settings->value("Mode","JT9").toString();
|
||||||
m_modeTx=m_settings->value("ModeTx","JT9").toString();
|
m_modeTx=m_settings->value("ModeTx","JT9").toString();
|
||||||
if(m_modeTx.mid(0,3)=="JT9") ui->pbTxMode->setText("Tx JT9 @");
|
if(m_modeTx.mid(0,3)=="JT9") ui->pbTxMode->setText("Tx JT9 @");
|
||||||
@ -849,52 +924,35 @@ void MainWindow::readSettings()
|
|||||||
ui->RxFreqSpinBox->setValue(0); // ensure a change is signaled
|
ui->RxFreqSpinBox->setValue(0); // ensure a change is signaled
|
||||||
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt());
|
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt());
|
||||||
m_nSubMode=m_settings->value("SubMode",0).toInt();
|
m_nSubMode=m_settings->value("SubMode",0).toInt();
|
||||||
ui->sbSubmode->setValue(m_nSubMode);
|
|
||||||
m_FtolIndex=m_settings->value("FtolIndex",21).toInt();
|
m_FtolIndex=m_settings->value("FtolIndex",21).toInt();
|
||||||
ui->sbFtol->setValue(m_FtolIndex);
|
|
||||||
on_sbFtol_valueChanged(m_FtolIndex);
|
|
||||||
// ui->FTol_combo_box->setCurrentText(m_settings->value("FTol","500").toString ());
|
// ui->FTol_combo_box->setCurrentText(m_settings->value("FTol","500").toString ());
|
||||||
ui->syncSpinBox->setValue(m_settings->value("MinSync",0).toInt());
|
ui->syncSpinBox->setValue(m_settings->value("MinSync",0).toInt());
|
||||||
m_bEME=m_settings->value("EME",false).toBool();
|
m_bEME=m_settings->value("EME",false).toBool();
|
||||||
ui->cbEME->setChecked(m_bEME);
|
|
||||||
m_TRindex=m_settings->value("TRindex",0).toInt();
|
|
||||||
ui->sbTR->setValue(m_TRindex);
|
|
||||||
m_bFast9=m_settings->value("Fast9",false).toBool();
|
m_bFast9=m_settings->value("Fast9",false).toBool();
|
||||||
ui->cbFast9->setChecked(m_bFast9);
|
|
||||||
m_bFastMode=m_settings->value("FastMode",false).toBool();
|
m_bFastMode=m_settings->value("FastMode",false).toBool();
|
||||||
if(m_bFast9) m_bFastMode=true;
|
m_TRindex=m_settings->value("TRindex",0).toInt();
|
||||||
m_lastMonitoredFrequency = m_settings->value ("DialFreq",
|
m_lastMonitoredFrequency = m_settings->value ("DialFreq",
|
||||||
QVariant::fromValue<Frequency> (default_frequency)).value<Frequency> ();
|
QVariant::fromValue<Frequency> (default_frequency)).value<Frequency> ();
|
||||||
ui->WSPRfreqSpinBox->setValue(0); // ensure a change is signaled
|
ui->WSPRfreqSpinBox->setValue(0); // ensure a change is signaled
|
||||||
ui->WSPRfreqSpinBox->setValue(m_settings->value("WSPRfreq",1500).toInt());
|
ui->WSPRfreqSpinBox->setValue(m_settings->value("WSPRfreq",1500).toInt());
|
||||||
ui->TxFreqSpinBox->setValue(0); // ensure a change is signaled
|
ui->TxFreqSpinBox->setValue(0); // ensure a change is signaled
|
||||||
ui->TxFreqSpinBox->setValue(m_settings->value("TxFreq",1500).toInt());
|
ui->TxFreqSpinBox->setValue(m_settings->value("TxFreq",1500).toInt());
|
||||||
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
|
|
||||||
m_saveDecoded=ui->actionSave_decoded->isChecked();
|
|
||||||
m_saveAll=ui->actionSave_all->isChecked();
|
|
||||||
m_ndepth=m_settings->value("NDepth",3).toInt();
|
m_ndepth=m_settings->value("NDepth",3).toInt();
|
||||||
m_inGain=m_settings->value("InGain",0).toInt();
|
m_inGain=m_settings->value("InGain",0).toInt();
|
||||||
ui->inGain->setValue(m_inGain);
|
|
||||||
m_pctx=m_settings->value("PctTx",20).toInt();
|
m_pctx=m_settings->value("PctTx",20).toInt();
|
||||||
ui->sbTxPercent->setValue(m_pctx);
|
|
||||||
m_dBm=m_settings->value("dBm",37).toInt();
|
m_dBm=m_settings->value("dBm",37).toInt();
|
||||||
ui->TxPowerComboBox->setCurrentIndex(int(0.3*(m_dBm + 30.0)+0.2));
|
|
||||||
m_uploadSpots=m_settings->value("UploadSpots",false).toBool();
|
m_uploadSpots=m_settings->value("UploadSpots",false).toBool();
|
||||||
ui->cbUploadWSPR_Spots->setChecked(m_uploadSpots);
|
|
||||||
if(!m_uploadSpots) ui->cbUploadWSPR_Spots->setStyleSheet("QCheckBox{background-color: yellow}");
|
if(!m_uploadSpots) ui->cbUploadWSPR_Spots->setStyleSheet("QCheckBox{background-color: yellow}");
|
||||||
ui->band_hopping_group_box->setChecked (m_settings->value ("BandHopping", false).toBool());
|
ui->band_hopping_group_box->setChecked (m_settings->value ("BandHopping", false).toBool());
|
||||||
// setup initial value of tx attenuator
|
// setup initial value of tx attenuator
|
||||||
ui->outAttenuation->setValue (m_settings->value ("OutAttenuation", 0).toInt ());
|
ui->outAttenuation->setValue (m_settings->value ("OutAttenuation", 0).toInt ());
|
||||||
m_tune_attenuation = m_settings->value ("TuneAttenuation", 0).toInt ();
|
m_tune_attenuation = m_settings->value ("TuneAttenuation", 0).toInt ();
|
||||||
on_outAttenuation_valueChanged (ui->outAttenuation->value ());
|
|
||||||
m_freqCQ=m_settings->value("CQRxFreq",285).toInt();
|
m_freqCQ=m_settings->value("CQRxFreq",285).toInt();
|
||||||
ui->sbCQRxFreq->setValue(m_freqCQ);
|
|
||||||
m_noSuffix=m_settings->value("NoSuffix",false).toBool();
|
m_noSuffix=m_settings->value("NoSuffix",false).toBool();
|
||||||
int n=m_settings->value("GUItab",0).toInt();
|
int n=m_settings->value("GUItab",0).toInt();
|
||||||
ui->tabWidget->setCurrentIndex(n);
|
ui->tabWidget->setCurrentIndex(n);
|
||||||
outBufSize=m_settings->value("OutBufSize",4096).toInt();
|
outBufSize=m_settings->value("OutBufSize",4096).toInt();
|
||||||
m_lockTxFreq=m_settings->value("LockTxFreq",false).toBool();
|
m_lockTxFreq=m_settings->value("LockTxFreq",false).toBool();
|
||||||
ui->cbTxLock->setChecked(m_lockTxFreq);
|
|
||||||
m_TRindex=m_settings->value("TRindex",4).toInt();
|
m_TRindex=m_settings->value("TRindex",4).toInt();
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
|
|
||||||
@ -906,13 +964,7 @@ void MainWindow::readSettings()
|
|||||||
m_audioThreadPriority = static_cast<QThread::Priority> (m_settings->value ("Audio/ThreadPriority", QThread::HighPriority).toInt () % 8);
|
m_audioThreadPriority = static_cast<QThread::Priority> (m_settings->value ("Audio/ThreadPriority", QThread::HighPriority).toInt () % 8);
|
||||||
m_settings->endGroup ();
|
m_settings->endGroup ();
|
||||||
|
|
||||||
if((m_ndepth&7)==1) ui->actionQuickDecode->setChecked(true);
|
if (displayMsgAvg) on_actionMessage_averaging_triggered();
|
||||||
if((m_ndepth&7)==2) ui->actionMediumDecode->setChecked(true);
|
|
||||||
if((m_ndepth&7)==3) ui->actionDeepestDecode->setChecked(true);
|
|
||||||
ui->actionInclude_averaging->setChecked((m_ndepth&16)>0);
|
|
||||||
ui->actionInclude_correlation->setChecked((m_ndepth&32)>0);
|
|
||||||
|
|
||||||
statusChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::setDecodedTextFont (QFont const& font)
|
void MainWindow::setDecodedTextFont (QFont const& font)
|
||||||
@ -1047,10 +1099,10 @@ void MainWindow::dataSink(qint64 frames)
|
|||||||
, m_hisCall
|
, m_hisCall
|
||||||
, m_hisGrid)));
|
, m_hisGrid)));
|
||||||
if (m_mode.startsWith ("WSPR")) {
|
if (m_mode.startsWith ("WSPR")) {
|
||||||
m_c2name = m_fname + ".c2";
|
QString c2name_string {m_fname + ".c2"};
|
||||||
int len1=m_c2name.length();
|
int len1=c2name_string.length();
|
||||||
char c2name[80];
|
char c2name[80];
|
||||||
strcpy(c2name,m_c2name.toLatin1());
|
strcpy(c2name,c2name_string.toLatin1 ().constData ());
|
||||||
int nsec=120;
|
int nsec=120;
|
||||||
int nbfo=1500;
|
int nbfo=1500;
|
||||||
double f0m1500=m_freqNominal/1000000.0 + nbfo - 1500;
|
double f0m1500=m_freqNominal/1000000.0 + nbfo - 1500;
|
||||||
@ -1204,7 +1256,7 @@ void MainWindow::fastSink(qint64 frames)
|
|||||||
, m_hisCall
|
, m_hisCall
|
||||||
, m_hisGrid)));
|
, m_hisGrid)));
|
||||||
m_fileToKill=m_fname;
|
m_fileToKill=m_fname;
|
||||||
killFileTimer->start (3*1000*m_TRperiod/4); //Kill 3/4 period from now
|
killFileTimer.start (3*1000*m_TRperiod/4); //Kill 3/4 period from now
|
||||||
}
|
}
|
||||||
m_decodeEarly=false;
|
m_decodeEarly=false;
|
||||||
}
|
}
|
||||||
@ -1513,7 +1565,6 @@ bool MainWindow::eventFilter(QObject *object, QEvent *event) //eventFilter()
|
|||||||
|
|
||||||
void MainWindow::createStatusBar() //createStatusBar
|
void MainWindow::createStatusBar() //createStatusBar
|
||||||
{
|
{
|
||||||
tx_status_label = new QLabel("Receiving");
|
|
||||||
tx_status_label->setAlignment(Qt::AlignHCenter);
|
tx_status_label->setAlignment(Qt::AlignHCenter);
|
||||||
tx_status_label->setMinimumSize(QSize(150,18));
|
tx_status_label->setMinimumSize(QSize(150,18));
|
||||||
tx_status_label->setStyleSheet("QLabel{background-color: #00ff00}");
|
tx_status_label->setStyleSheet("QLabel{background-color: #00ff00}");
|
||||||
@ -1521,25 +1572,21 @@ void MainWindow::createStatusBar() //createStatusBar
|
|||||||
statusBar()->addWidget(tx_status_label);
|
statusBar()->addWidget(tx_status_label);
|
||||||
|
|
||||||
|
|
||||||
mode_label = new QLabel("");
|
|
||||||
mode_label->setAlignment(Qt::AlignHCenter);
|
mode_label->setAlignment(Qt::AlignHCenter);
|
||||||
mode_label->setMinimumSize(QSize(80,18));
|
mode_label->setMinimumSize(QSize(80,18));
|
||||||
mode_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
mode_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||||
statusBar()->addWidget(mode_label);
|
statusBar()->addWidget(mode_label);
|
||||||
|
|
||||||
last_tx_label = new QLabel("");
|
|
||||||
last_tx_label->setAlignment(Qt::AlignHCenter);
|
last_tx_label->setAlignment(Qt::AlignHCenter);
|
||||||
last_tx_label->setMinimumSize(QSize(150,18));
|
last_tx_label->setMinimumSize(QSize(150,18));
|
||||||
last_tx_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
last_tx_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||||
statusBar()->addWidget(last_tx_label);
|
statusBar()->addWidget(last_tx_label);
|
||||||
|
|
||||||
auto_tx_label = new QLabel("");
|
|
||||||
auto_tx_label->setAlignment(Qt::AlignHCenter);
|
auto_tx_label->setAlignment(Qt::AlignHCenter);
|
||||||
auto_tx_label->setMinimumSize(QSize(150,18));
|
auto_tx_label->setMinimumSize(QSize(150,18));
|
||||||
auto_tx_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
auto_tx_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||||
statusBar()->addWidget(auto_tx_label);
|
statusBar()->addWidget(auto_tx_label);
|
||||||
|
|
||||||
progressBar = new QProgressBar;
|
|
||||||
statusBar()->addWidget(progressBar);
|
statusBar()->addWidget(progressBar);
|
||||||
progressBar->setFormat("%v/%m");
|
progressBar->setFormat("%v/%m");
|
||||||
}
|
}
|
||||||
@ -1711,42 +1758,42 @@ void MainWindow::on_actionOpen_triggered() //Open File
|
|||||||
|
|
||||||
void MainWindow::read_wav_file (QString const& fname)
|
void MainWindow::read_wav_file (QString const& fname)
|
||||||
{
|
{
|
||||||
m_wav_future = QtConcurrent::run ([this, fname] {
|
// call diskDat() when done
|
||||||
auto basename = fname.mid (fname.lastIndexOf ('/') + 1);
|
m_wav_future_watcher.setFuture (QtConcurrent::run ([this, fname] {
|
||||||
auto pos = fname.indexOf (".wav", 0, Qt::CaseInsensitive);
|
auto basename = fname.mid (fname.lastIndexOf ('/') + 1);
|
||||||
// global variables and threads do not mix well, this needs changing
|
auto pos = fname.indexOf (".wav", 0, Qt::CaseInsensitive);
|
||||||
dec_data.params.nutc = 0;
|
// global variables and threads do not mix well, this needs changing
|
||||||
if (pos > 0)
|
dec_data.params.nutc = 0;
|
||||||
{
|
if (pos > 0)
|
||||||
if (pos == fname.indexOf ('_', -11) + 7)
|
{
|
||||||
{
|
if (pos == fname.indexOf ('_', -11) + 7)
|
||||||
dec_data.params.nutc = fname.mid (pos - 6, 6).toInt ();
|
{
|
||||||
}
|
dec_data.params.nutc = fname.mid (pos - 6, 6).toInt ();
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
dec_data.params.nutc = 100 * fname.mid (pos - 4, 4).toInt ();
|
{
|
||||||
}
|
dec_data.params.nutc = 100 * fname.mid (pos - 4, 4).toInt ();
|
||||||
}
|
}
|
||||||
BWFFile file {QAudioFormat {}, fname};
|
}
|
||||||
file.open (BWFFile::ReadOnly);
|
BWFFile file {QAudioFormat {}, fname};
|
||||||
auto bytes_per_frame = file.format ().bytesPerFrame ();
|
file.open (BWFFile::ReadOnly);
|
||||||
qint64 max_bytes = std::min (std::size_t (m_TRperiod * RX_SAMPLE_RATE),
|
auto bytes_per_frame = file.format ().bytesPerFrame ();
|
||||||
sizeof (dec_data.d2) / sizeof (dec_data.d2[0]))
|
qint64 max_bytes = std::min (std::size_t (m_TRperiod * RX_SAMPLE_RATE),
|
||||||
|
sizeof (dec_data.d2) / sizeof (dec_data.d2[0]))
|
||||||
* bytes_per_frame;
|
* bytes_per_frame;
|
||||||
auto n = file.read (reinterpret_cast<char *> (dec_data.d2),
|
auto n = file.read (reinterpret_cast<char *> (dec_data.d2),
|
||||||
std::min (max_bytes, file.size ()));
|
std::min (max_bytes, file.size ()));
|
||||||
int frames_read = n / bytes_per_frame;
|
int frames_read = n / bytes_per_frame;
|
||||||
// zero unfilled remaining sample space
|
// zero unfilled remaining sample space
|
||||||
std::memset (&dec_data.d2[0] + n, 0, max_bytes - n);
|
std::memset (&dec_data.d2[0] + n, 0, max_bytes - n);
|
||||||
if (11025 == file.format ().sampleRate ())
|
if (11025 == file.format ().sampleRate ())
|
||||||
{
|
{
|
||||||
short sample_size = file.format ().sampleSize ();
|
short sample_size = file.format ().sampleSize ();
|
||||||
wav12_ (dec_data.d2, dec_data.d2, &frames_read, &sample_size);
|
wav12_ (dec_data.d2, dec_data.d2, &frames_read, &sample_size);
|
||||||
}
|
}
|
||||||
dec_data.params.kin = frames_read;
|
dec_data.params.kin = frames_read;
|
||||||
dec_data.params.newdat = 1;
|
dec_data.params.newdat = 1;
|
||||||
});
|
}));
|
||||||
m_wav_future_watcher.setFuture(m_wav_future); // call diskDat() when done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionOpen_next_in_directory_triggered() //Open Next
|
void MainWindow::on_actionOpen_next_in_directory_triggered() //Open Next
|
||||||
@ -2023,9 +2070,8 @@ void MainWindow::decode() //decode()
|
|||||||
narg[13]=-1;
|
narg[13]=-1;
|
||||||
narg[14]=m_config.aggressive();
|
narg[14]=m_config.aggressive();
|
||||||
memcpy(d2b,dec_data.d2,2*360000);
|
memcpy(d2b,dec_data.d2,2*360000);
|
||||||
*future3 = QtConcurrent::run(std::bind(fast_decode_,&d2b[0],&narg[0],&m_msg[0][0],
|
watcher3.setFuture (QtConcurrent::run (std::bind (fast_decode_,&d2b[0],&narg[0],&m_msg[0][0],
|
||||||
&m_pchkFile[0],80,512));
|
&m_pchkFile[0],80,512)));
|
||||||
watcher3->setFuture(*future3);
|
|
||||||
} else {
|
} else {
|
||||||
memcpy(to, from, qMin(mem_jt9->size(), size));
|
memcpy(to, from, qMin(mem_jt9->size(), size));
|
||||||
QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.remove (); // Allow jt9 to start
|
QFile {m_config.temp_dir ().absoluteFilePath (".lock")}.remove (); // Allow jt9 to start
|
||||||
@ -2147,7 +2193,7 @@ void MainWindow::readFromStdout() //readFromStdout
|
|||||||
}
|
}
|
||||||
if(t.indexOf("<DecodeFinished>") >= 0) {
|
if(t.indexOf("<DecodeFinished>") >= 0) {
|
||||||
m_bDecoded = (t.mid(23,1).toInt()==1);
|
m_bDecoded = (t.mid(23,1).toInt()==1);
|
||||||
if(!m_diskData) killFileTimer->start (3*1000*m_TRperiod/4); //Kill in 45 s
|
if(!m_diskData) killFileTimer.start (3*1000*m_TRperiod/4); //Kill in 45 s
|
||||||
decodeDone ();
|
decodeDone ();
|
||||||
m_startAnother=m_loopall;
|
m_startAnother=m_loopall;
|
||||||
return;
|
return;
|
||||||
@ -2442,7 +2488,7 @@ void MainWindow::guiUpdate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT
|
Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT
|
||||||
ptt1Timer->start(200); //Sequencer delay
|
ptt1Timer.start(200); //Sequencer delay
|
||||||
}
|
}
|
||||||
if(!m_bTxTime and !m_tune) m_btxok=false; //Time to stop transmitting
|
if(!m_bTxTime and !m_tune) m_btxok=false; //Time to stop transmitting
|
||||||
}
|
}
|
||||||
@ -2577,7 +2623,7 @@ void MainWindow::guiUpdate()
|
|||||||
icw[0] = m_ncw;
|
icw[0] = m_ncw;
|
||||||
}
|
}
|
||||||
if (m_config.prompt_to_log () && !m_tune) {
|
if (m_config.prompt_to_log () && !m_tune) {
|
||||||
logQSOTimer->start (0);
|
logQSOTimer.start (0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_73 && m_config.disable_TX_on_73 ()) {
|
if (is_73 && m_config.disable_TX_on_73 ()) {
|
||||||
@ -2785,7 +2831,7 @@ void MainWindow::stopTx()
|
|||||||
g_iptt=0;
|
g_iptt=0;
|
||||||
tx_status_label->setStyleSheet("");
|
tx_status_label->setStyleSheet("");
|
||||||
tx_status_label->setText("");
|
tx_status_label->setText("");
|
||||||
ptt0Timer->start(200); //Sequencer delay
|
ptt0Timer.start(200); //Sequencer delay
|
||||||
monitor (true);
|
monitor (true);
|
||||||
statusUpdate ();
|
statusUpdate ();
|
||||||
}
|
}
|
||||||
@ -2810,7 +2856,7 @@ void MainWindow::stopTx2()
|
|||||||
}
|
}
|
||||||
if(m_config.offsetRxFreq() and ui->cbCQRx->isChecked()) {
|
if(m_config.offsetRxFreq() and ui->cbCQRx->isChecked()) {
|
||||||
// Q_EMIT m_config.transceiver_frequency(m_freqNominal);
|
// Q_EMIT m_config.transceiver_frequency(m_freqNominal);
|
||||||
RxQSYTimer->start(50);
|
RxQSYTimer.start(50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3139,7 +3185,7 @@ void MainWindow::processMessage(QString const& messages, int position, bool ctrl
|
|||||||
|
|
||||||
if(m_bDoubleClickAfterCQnnn and m_transmitting) {
|
if(m_bDoubleClickAfterCQnnn and m_transmitting) {
|
||||||
on_stopTxButton_clicked();
|
on_stopTxButton_clicked();
|
||||||
TxAgainTimer->start(1500);
|
TxAgainTimer.start(1500);
|
||||||
}
|
}
|
||||||
m_bDoubleClickAfterCQnnn=false;
|
m_bDoubleClickAfterCQnnn=false;
|
||||||
}
|
}
|
||||||
@ -4358,7 +4404,7 @@ void MainWindow::on_rptSpinBox_valueChanged(int n)
|
|||||||
void MainWindow::on_tuneButton_clicked (bool checked)
|
void MainWindow::on_tuneButton_clicked (bool checked)
|
||||||
{
|
{
|
||||||
if (m_tune) {
|
if (m_tune) {
|
||||||
tuneButtonTimer->start(250);
|
tuneButtonTimer.start(250);
|
||||||
} else {
|
} else {
|
||||||
m_sentFirst73=false;
|
m_sentFirst73=false;
|
||||||
m_repeatMsg=0;
|
m_repeatMsg=0;
|
||||||
@ -4768,63 +4814,6 @@ void MainWindow::on_actionShort_list_of_add_on_prefixes_and_suffixes_triggered()
|
|||||||
m_prefixes->raise ();
|
m_prefixes->raise ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::getpfx()
|
|
||||||
{
|
|
||||||
m_prefix <<"1A" <<"1S" <<"3A" <<"3B6" <<"3B8" <<"3B9" <<"3C" <<"3C0" \
|
|
||||||
<<"3D2" <<"3D2C" <<"3D2R" <<"3DA" <<"3V" <<"3W" <<"3X" <<"3Y" \
|
|
||||||
<<"3YB" <<"3YP" <<"4J" <<"4L" <<"4S" <<"4U1I" <<"4U1U" <<"4W" \
|
|
||||||
<<"4X" <<"5A" <<"5B" <<"5H" <<"5N" <<"5R" <<"5T" <<"5U" \
|
|
||||||
<<"5V" <<"5W" <<"5X" <<"5Z" <<"6W" <<"6Y" <<"7O" <<"7P" \
|
|
||||||
<<"7Q" <<"7X" <<"8P" <<"8Q" <<"8R" <<"9A" <<"9G" <<"9H" \
|
|
||||||
<<"9J" <<"9K" <<"9L" <<"9M2" <<"9M6" <<"9N" <<"9Q" <<"9U" \
|
|
||||||
<<"9V" <<"9X" <<"9Y" <<"A2" <<"A3" <<"A4" <<"A5" <<"A6" \
|
|
||||||
<<"A7" <<"A9" <<"AP" <<"BS7" <<"BV" <<"BV9" <<"BY" <<"C2" \
|
|
||||||
<<"C3" <<"C5" <<"C6" <<"C9" <<"CE" <<"CE0X" <<"CE0Y" <<"CE0Z" \
|
|
||||||
<<"CE9" <<"CM" <<"CN" <<"CP" <<"CT" <<"CT3" <<"CU" <<"CX" \
|
|
||||||
<<"CY0" <<"CY9" <<"D2" <<"D4" <<"D6" <<"DL" <<"DU" <<"E3" \
|
|
||||||
<<"E4" <<"EA" <<"EA6" <<"EA8" <<"EA9" <<"EI" <<"EK" <<"EL" \
|
|
||||||
<<"EP" <<"ER" <<"ES" <<"ET" <<"EU" <<"EX" <<"EY" <<"EZ" \
|
|
||||||
<<"F" <<"FG" <<"FH" <<"FJ" <<"FK" <<"FKC" <<"FM" <<"FO" \
|
|
||||||
<<"FOA" <<"FOC" <<"FOM" <<"FP" <<"FR" <<"FRG" <<"FRJ" <<"FRT" \
|
|
||||||
<<"FT5W" <<"FT5X" <<"FT5Z" <<"FW" <<"FY" <<"M" <<"MD" <<"MI" \
|
|
||||||
<<"MJ" <<"MM" <<"MU" <<"MW" <<"H4" <<"H40" <<"HA" \
|
|
||||||
<<"HB" <<"HB0" <<"HC" <<"HC8" <<"HH" <<"HI" <<"HK" <<"HK0" \
|
|
||||||
<<"HK0M" <<"HL" <<"HM" <<"HP" <<"HR" <<"HS" <<"HV" <<"HZ" \
|
|
||||||
<<"I" <<"IS" <<"IS0" <<"J2" <<"J3" <<"J5" <<"J6" \
|
|
||||||
<<"J7" <<"J8" <<"JA" <<"JDM" <<"JDO" <<"JT" <<"JW" \
|
|
||||||
<<"JX" <<"JY" <<"K" <<"KG4" <<"KH0" <<"KH1" <<"KH2" <<"KH3" \
|
|
||||||
<<"KH4" <<"KH5" <<"KH5K" <<"KH6" <<"KH7" <<"KH8" <<"KH9" <<"KL" \
|
|
||||||
<<"KP1" <<"KP2" <<"KP4" <<"KP5" <<"LA" <<"LU" <<"LX" <<"LY" \
|
|
||||||
<<"LZ" <<"OA" <<"OD" <<"OE" <<"OH" <<"OH0" <<"OJ0" <<"OK" \
|
|
||||||
<<"OM" <<"ON" <<"OX" <<"OY" <<"OZ" <<"P2" <<"P4" <<"PA" \
|
|
||||||
<<"PJ2" <<"PJ7" <<"PY" <<"PY0F" <<"PT0S" <<"PY0T" <<"PZ" <<"R1F" \
|
|
||||||
<<"R1M" <<"S0" <<"S2" <<"S5" <<"S7" <<"S9" <<"SM" <<"SP" \
|
|
||||||
<<"ST" <<"SU" <<"SV" <<"SVA" <<"SV5" <<"SV9" <<"T2" <<"T30" \
|
|
||||||
<<"T31" <<"T32" <<"T33" <<"T5" <<"T7" <<"T8" <<"T9" <<"TA" \
|
|
||||||
<<"TF" <<"TG" <<"TI" <<"TI9" <<"TJ" <<"TK" <<"TL" \
|
|
||||||
<<"TN" <<"TR" <<"TT" <<"TU" <<"TY" <<"TZ" <<"UA" <<"UA2" \
|
|
||||||
<<"UA9" <<"UK" <<"UN" <<"UR" <<"V2" <<"V3" <<"V4" <<"V5" \
|
|
||||||
<<"V6" <<"V7" <<"V8" <<"VE" <<"VK" <<"VK0H" <<"VK0M" <<"VK9C" \
|
|
||||||
<<"VK9L" <<"VK9M" <<"VK9N" <<"VK9W" <<"VK9X" <<"VP2E" <<"VP2M" <<"VP2V" \
|
|
||||||
<<"VP5" <<"VP6" <<"VP6D" <<"VP8" <<"VP8G" <<"VP8H" <<"VP8O" <<"VP8S" \
|
|
||||||
<<"VP9" <<"VQ9" <<"VR" <<"VU" <<"VU4" <<"VU7" <<"XE" <<"XF4" \
|
|
||||||
<<"XT" <<"XU" <<"XW" <<"XX9" <<"XZ" <<"YA" <<"YB" <<"YI" \
|
|
||||||
<<"YJ" <<"YK" <<"YL" <<"YN" <<"YO" <<"YS" <<"YU" <<"YV" \
|
|
||||||
<<"YV0" <<"Z2" <<"Z3" <<"ZA" <<"ZB" <<"ZC4" <<"ZD7" <<"ZD8" \
|
|
||||||
<<"ZD9" <<"ZF" <<"ZK1N" <<"ZK1S" <<"ZK2" <<"ZK3" <<"ZL" <<"ZL7" \
|
|
||||||
<<"ZL8" <<"ZL9" <<"ZP" <<"ZS" <<"ZS8" <<"KC4" <<"E5";
|
|
||||||
|
|
||||||
m_suffix << "P" << "0" << "1" << "2" << "3" << "4" << "5" << "6" \
|
|
||||||
<< "7" << "8" << "9" << "A";
|
|
||||||
|
|
||||||
for(int i=0; i<12; i++) {
|
|
||||||
m_sfx.insert(m_suffix[i],true);
|
|
||||||
}
|
|
||||||
for(int i=0; i<339; i++) {
|
|
||||||
m_pfx.insert(m_prefix[i],true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MainWindow::shortList(QString callsign)
|
bool MainWindow::shortList(QString callsign)
|
||||||
{
|
{
|
||||||
int n=callsign.length();
|
int n=callsign.length();
|
||||||
@ -5183,7 +5172,7 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
|
|||||||
t=WSPR_hhmm(-60) + ' ' + t.rightJustified (66, '-');
|
t=WSPR_hhmm(-60) + ' ' + t.rightJustified (66, '-');
|
||||||
ui->decodedTextBrowser->appendText(t);
|
ui->decodedTextBrowser->appendText(t);
|
||||||
}
|
}
|
||||||
killFileTimer->start (45*1000); //Kill in 45s
|
killFileTimer.start (45*1000); //Kill in 45s
|
||||||
}
|
}
|
||||||
m_nWSPRdecodes=0;
|
m_nWSPRdecodes=0;
|
||||||
ui->DecodeButton->setChecked (false);
|
ui->DecodeButton->setChecked (false);
|
||||||
@ -5191,7 +5180,7 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
|
|||||||
&& m_config.is_transceiver_online ()) { // need working rig control
|
&& m_config.is_transceiver_online ()) { // need working rig control
|
||||||
float x=qrand()/((double)RAND_MAX + 1.0);
|
float x=qrand()/((double)RAND_MAX + 1.0);
|
||||||
int msdelay=20000*x;
|
int msdelay=20000*x;
|
||||||
uploadTimer->start(msdelay); //Upload delay
|
uploadTimer.start(msdelay); //Upload delay
|
||||||
} else {
|
} else {
|
||||||
QFile f(QDir::toNativeSeparators(m_dataDir.absolutePath()) + "/wspr_spots.txt");
|
QFile f(QDir::toNativeSeparators(m_dataDir.absolutePath()) + "/wspr_spots.txt");
|
||||||
if(f.exists()) f.remove();
|
if(f.exists()) f.remove();
|
||||||
@ -5397,7 +5386,7 @@ void MainWindow::WSPR_scheduling ()
|
|||||||
if (hop_data.tune_required_) {
|
if (hop_data.tune_required_) {
|
||||||
m_tuneup = true;
|
m_tuneup = true;
|
||||||
on_tuneButton_clicked (true);
|
on_tuneButton_clicked (true);
|
||||||
tuneATU_Timer->start (2500);
|
tuneATU_Timer.start (2500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
64
mainwindow.h
64
mainwindow.h
@ -17,6 +17,9 @@
|
|||||||
#include <QAbstractSocket>
|
#include <QAbstractSocket>
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
#include <QSet>
|
||||||
|
#include <QFuture>
|
||||||
|
#include <QFutureWatcher>
|
||||||
|
|
||||||
#include "AudioDevice.hpp"
|
#include "AudioDevice.hpp"
|
||||||
#include "commons.h"
|
#include "commons.h"
|
||||||
@ -203,7 +206,6 @@ private slots:
|
|||||||
void handle_transceiver_failure (QString const& reason);
|
void handle_transceiver_failure (QString const& reason);
|
||||||
void on_actionAstronomical_data_toggled (bool);
|
void on_actionAstronomical_data_toggled (bool);
|
||||||
void on_actionShort_list_of_add_on_prefixes_and_suffixes_triggered();
|
void on_actionShort_list_of_add_on_prefixes_and_suffixes_triggered();
|
||||||
void getpfx();
|
|
||||||
void band_changed (Frequency);
|
void band_changed (Frequency);
|
||||||
void monitor (bool);
|
void monitor (bool);
|
||||||
void stop_tuning ();
|
void stop_tuning ();
|
||||||
@ -280,7 +282,7 @@ private:
|
|||||||
bool m_multiple;
|
bool m_multiple;
|
||||||
MultiSettings * m_multi_settings;
|
MultiSettings * m_multi_settings;
|
||||||
QSettings * m_settings;
|
QSettings * m_settings;
|
||||||
Ui::MainWindow * ui;
|
QScopedPointer<Ui::MainWindow> ui;
|
||||||
|
|
||||||
// other windows
|
// other windows
|
||||||
Configuration m_config;
|
Configuration m_config;
|
||||||
@ -342,13 +344,11 @@ private:
|
|||||||
qint32 m_TRperiod;
|
qint32 m_TRperiod;
|
||||||
qint32 m_nsps;
|
qint32 m_nsps;
|
||||||
qint32 m_hsymStop;
|
qint32 m_hsymStop;
|
||||||
qint32 m_len1;
|
|
||||||
qint32 m_inGain;
|
qint32 m_inGain;
|
||||||
qint32 m_ncw;
|
qint32 m_ncw;
|
||||||
qint32 m_secID;
|
qint32 m_secID;
|
||||||
qint32 m_repeatMsg;
|
qint32 m_repeatMsg;
|
||||||
qint32 m_watchdogLimit;
|
qint32 m_watchdogLimit;
|
||||||
qint32 m_astroFont;
|
|
||||||
qint32 m_nSubMode;
|
qint32 m_nSubMode;
|
||||||
qint32 m_nclearave;
|
qint32 m_nclearave;
|
||||||
qint32 m_minSync;
|
qint32 m_minSync;
|
||||||
@ -356,7 +356,6 @@ private:
|
|||||||
qint32 m_pctx;
|
qint32 m_pctx;
|
||||||
qint32 m_nseq;
|
qint32 m_nseq;
|
||||||
qint32 m_nWSPRdecodes;
|
qint32 m_nWSPRdecodes;
|
||||||
qint32 m_jh;
|
|
||||||
qint32 m_k0;
|
qint32 m_k0;
|
||||||
qint32 m_kdone;
|
qint32 m_kdone;
|
||||||
qint32 m_nPick;
|
qint32 m_nPick;
|
||||||
@ -381,31 +380,16 @@ private:
|
|||||||
bool m_call3Modified;
|
bool m_call3Modified;
|
||||||
bool m_dataAvailable;
|
bool m_dataAvailable;
|
||||||
bool m_bDecoded;
|
bool m_bDecoded;
|
||||||
bool m_monitorStartOFF;
|
|
||||||
bool m_pskReporterInit;
|
|
||||||
bool m_noSuffix;
|
bool m_noSuffix;
|
||||||
bool m_toRTTY;
|
|
||||||
bool m_dBtoComments;
|
|
||||||
bool m_promptToLog;
|
|
||||||
bool m_blankLine;
|
bool m_blankLine;
|
||||||
bool m_insertBlank;
|
|
||||||
bool m_displayDXCCEntity;
|
|
||||||
bool m_clearCallGrid;
|
|
||||||
bool m_bMiles;
|
|
||||||
bool m_decodedText2;
|
bool m_decodedText2;
|
||||||
bool m_freeText;
|
bool m_freeText;
|
||||||
bool m_quickCall;
|
|
||||||
bool m_73TxDisable;
|
|
||||||
bool m_sentFirst73;
|
bool m_sentFirst73;
|
||||||
int m_currentMessageType;
|
int m_currentMessageType;
|
||||||
QString m_currentMessage;
|
QString m_currentMessage;
|
||||||
int m_lastMessageType;
|
int m_lastMessageType;
|
||||||
QString m_lastMessageSent;
|
QString m_lastMessageSent;
|
||||||
bool m_bMultipleOK;
|
|
||||||
bool m_lockTxFreq;
|
bool m_lockTxFreq;
|
||||||
bool m_tx2QSO;
|
|
||||||
bool m_CATerror;
|
|
||||||
bool m_bAstroData;
|
|
||||||
bool m_bEME;
|
bool m_bEME;
|
||||||
bool m_bShMsgs;
|
bool m_bShMsgs;
|
||||||
bool m_uploadSpots;
|
bool m_uploadSpots;
|
||||||
@ -452,9 +436,8 @@ private:
|
|||||||
QMessageBox msgBox0;
|
QMessageBox msgBox0;
|
||||||
|
|
||||||
QFuture<void> m_wav_future;
|
QFuture<void> m_wav_future;
|
||||||
QFuture<void>* future3;
|
|
||||||
QFutureWatcher<void> m_wav_future_watcher;
|
QFutureWatcher<void> m_wav_future_watcher;
|
||||||
QFutureWatcher<void> * watcher3;
|
QFutureWatcher<void> watcher3;
|
||||||
QFutureWatcher<QString> m_saveWAVWatcher;
|
QFutureWatcher<QString> m_saveWAVWatcher;
|
||||||
|
|
||||||
QProcess proc_jt9;
|
QProcess proc_jt9;
|
||||||
@ -464,26 +447,21 @@ private:
|
|||||||
WSPRNet *wsprNet;
|
WSPRNet *wsprNet;
|
||||||
|
|
||||||
QTimer m_guiTimer;
|
QTimer m_guiTimer;
|
||||||
QTimer* ptt1Timer; //StartTx delay
|
QTimer ptt1Timer; //StartTx delay
|
||||||
QTimer* ptt0Timer; //StopTx delay
|
QTimer ptt0Timer; //StopTx delay
|
||||||
QTimer* logQSOTimer;
|
QTimer logQSOTimer;
|
||||||
QTimer* killFileTimer;
|
QTimer killFileTimer;
|
||||||
QTimer* tuneButtonTimer;
|
QTimer tuneButtonTimer;
|
||||||
QTimer* uploadTimer;
|
QTimer uploadTimer;
|
||||||
QTimer* tuneATU_Timer;
|
QTimer tuneATU_Timer;
|
||||||
QTimer* TxAgainTimer;
|
QTimer TxAgainTimer;
|
||||||
QTimer* RxQSYTimer;
|
QTimer RxQSYTimer;
|
||||||
|
|
||||||
QString m_path;
|
QString m_path;
|
||||||
QString m_pbdecoding_style1;
|
|
||||||
QString m_pbmonitor_style;
|
|
||||||
QString m_pbAutoOn_style;
|
|
||||||
QString m_pbTune_style;
|
|
||||||
QString m_baseCall;
|
QString m_baseCall;
|
||||||
QString m_hisCall;
|
QString m_hisCall;
|
||||||
QString m_hisGrid;
|
QString m_hisGrid;
|
||||||
QString m_appDir;
|
QString m_appDir;
|
||||||
QString m_dxccPfx;
|
|
||||||
QString m_palette;
|
QString m_palette;
|
||||||
QString m_dateTime;
|
QString m_dateTime;
|
||||||
QString m_mode;
|
QString m_mode;
|
||||||
@ -498,20 +476,10 @@ private:
|
|||||||
QString m_msgSent0;
|
QString m_msgSent0;
|
||||||
QString m_fileToKill;
|
QString m_fileToKill;
|
||||||
QString m_fileToSave;
|
QString m_fileToSave;
|
||||||
QString m_band;
|
|
||||||
QString m_c2name;
|
|
||||||
QString m_calls;
|
QString m_calls;
|
||||||
|
|
||||||
QStringList m_prefix;
|
QSet<QString> m_pfx;
|
||||||
QStringList m_suffix;
|
QSet<QString> m_sfx;
|
||||||
QStringList m_sunriseBands;
|
|
||||||
QStringList m_dayBands;
|
|
||||||
QStringList m_sunsetBands;
|
|
||||||
QStringList m_nightBands;
|
|
||||||
QStringList m_tuneBands;
|
|
||||||
|
|
||||||
QHash<QString,bool> m_pfx;
|
|
||||||
QHash<QString,bool> m_sfx;
|
|
||||||
|
|
||||||
QDateTime m_dateTimeQSO;
|
QDateTime m_dateTimeQSO;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "messageaveraging.h"
|
#include "messageaveraging.h"
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QTextCharFormat>
|
#include <QTextCharFormat>
|
||||||
@ -6,7 +7,6 @@
|
|||||||
#include "SettingsGroup.hpp"
|
#include "SettingsGroup.hpp"
|
||||||
#include "qt_helpers.hpp"
|
#include "qt_helpers.hpp"
|
||||||
#include "ui_messageaveraging.h"
|
#include "ui_messageaveraging.h"
|
||||||
#include "moc_messageaveraging.cpp"
|
|
||||||
|
|
||||||
MessageAveraging::MessageAveraging(QSettings * settings, QFont const& font, QWidget *parent) :
|
MessageAveraging::MessageAveraging(QSettings * settings, QFont const& font, QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
@ -23,7 +23,6 @@ MessageAveraging::MessageAveraging(QSettings * settings, QFont const& font, QWid
|
|||||||
MessageAveraging::~MessageAveraging()
|
MessageAveraging::~MessageAveraging()
|
||||||
{
|
{
|
||||||
if (isVisible ()) write_settings ();
|
if (isVisible ()) write_settings ();
|
||||||
delete ui;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageAveraging::changeFont (QFont const& font)
|
void MessageAveraging::changeFont (QFont const& font)
|
||||||
|
@ -2,22 +2,16 @@
|
|||||||
#define MESSAGEAVERAGING_H
|
#define MESSAGEAVERAGING_H
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QDebug>
|
|
||||||
#include <QCheckBox>
|
|
||||||
#include <QList>
|
|
||||||
#include <QLineEdit>
|
|
||||||
|
|
||||||
class QSettings;
|
class QSettings;
|
||||||
class QFont;
|
class QFont;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class MessageAveraging;
|
class MessageAveraging;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MessageAveraging : public QWidget
|
class MessageAveraging : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MessageAveraging(QSettings *, QFont const&, QWidget * parent = 0);
|
explicit MessageAveraging(QSettings *, QFont const&, QWidget * parent = 0);
|
||||||
~MessageAveraging();
|
~MessageAveraging();
|
||||||
@ -33,7 +27,7 @@ private:
|
|||||||
void setContentFont (QFont const&);
|
void setContentFont (QFont const&);
|
||||||
QSettings * settings_;
|
QSettings * settings_;
|
||||||
|
|
||||||
Ui::MessageAveraging *ui;
|
QScopedPointer<Ui::MessageAveraging> ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MESSAGEAVERAGING_H
|
#endif // MESSAGEAVERAGING_H
|
||||||
|
66
plotter.cpp
66
plotter.cpp
@ -7,7 +7,32 @@
|
|||||||
#define MAX_SCREENSIZE 2048
|
#define MAX_SCREENSIZE 2048
|
||||||
|
|
||||||
CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
|
CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
|
||||||
QFrame(parent)
|
QFrame {parent},
|
||||||
|
m_bScaleOK {false},
|
||||||
|
m_bReference {false},
|
||||||
|
m_bReference0 {false},
|
||||||
|
m_fSpan {2000.0},
|
||||||
|
m_plotZero {0},
|
||||||
|
m_plotGain {0},
|
||||||
|
m_plot2dGain {0},
|
||||||
|
m_plot2dZero {0},
|
||||||
|
m_nSubMode {0},
|
||||||
|
m_Running {false},
|
||||||
|
m_paintEventBusy {false},
|
||||||
|
m_fftBinWidth {1500.0/2048.0},
|
||||||
|
m_dialFreq {0.},
|
||||||
|
m_sum {},
|
||||||
|
m_dBStepSize {10},
|
||||||
|
m_FreqUnits {1},
|
||||||
|
m_hdivs {HORZ_DIVS},
|
||||||
|
m_line {0},
|
||||||
|
m_fSample {12000},
|
||||||
|
m_nsps {6912},
|
||||||
|
m_Percent2DScreen {30}, //percent of screen used for 2D display
|
||||||
|
m_Percent2DScreen0 {0},
|
||||||
|
m_rxFreq {1020},
|
||||||
|
m_txFreq {0},
|
||||||
|
m_startFreq {0}
|
||||||
{
|
{
|
||||||
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
setFocusPolicy(Qt::StrongFocus);
|
setFocusPolicy(Qt::StrongFocus);
|
||||||
@ -15,28 +40,6 @@ CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
|
|||||||
setAutoFillBackground(false);
|
setAutoFillBackground(false);
|
||||||
setAttribute(Qt::WA_OpaquePaintEvent, false);
|
setAttribute(Qt::WA_OpaquePaintEvent, false);
|
||||||
setAttribute(Qt::WA_NoSystemBackground, true);
|
setAttribute(Qt::WA_NoSystemBackground, true);
|
||||||
|
|
||||||
m_startFreq = 0;
|
|
||||||
m_fSpan=2000.0;
|
|
||||||
m_hdivs = HORZ_DIVS;
|
|
||||||
m_FreqUnits = 1;
|
|
||||||
m_Running = false;
|
|
||||||
m_paintEventBusy=false;
|
|
||||||
m_WaterfallPixmap = QPixmap(0,0);
|
|
||||||
m_2DPixmap = QPixmap(0,0);
|
|
||||||
m_ScalePixmap = QPixmap(0,0);
|
|
||||||
m_OverlayPixmap = QPixmap(0,0);
|
|
||||||
m_Size = QSize(0,0);
|
|
||||||
m_rxFreq = 1020;
|
|
||||||
m_line = 0;
|
|
||||||
m_fSample = 12000;
|
|
||||||
m_nsps=6912;
|
|
||||||
m_dBStepSize=10;
|
|
||||||
m_Percent2DScreen = 30; //percent of screen used for 2D display
|
|
||||||
m_Percent2DScreen0 = 0;
|
|
||||||
m_txFreq=0;
|
|
||||||
m_fftBinWidth=1500.0/2048.0;
|
|
||||||
m_bScaleOK=false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlotter::~CPlotter() { } // Destructor
|
CPlotter::~CPlotter() { } // Destructor
|
||||||
@ -245,6 +248,15 @@ void CPlotter::DrawOverlay() //DrawOverlay()
|
|||||||
painter.drawRect(0, 0, m_w, m_h2);
|
painter.drawRect(0, 0, m_w, m_h2);
|
||||||
painter.setBrush(Qt::SolidPattern);
|
painter.setBrush(Qt::SolidPattern);
|
||||||
|
|
||||||
|
m_fSpan = w*df;
|
||||||
|
// int n=m_fSpan/10;
|
||||||
|
m_freqPerDiv=10;
|
||||||
|
if(m_fSpan>100) m_freqPerDiv=20;
|
||||||
|
if(m_fSpan>250) m_freqPerDiv=50;
|
||||||
|
if(m_fSpan>500) m_freqPerDiv=100;
|
||||||
|
if(m_fSpan>1000) m_freqPerDiv=200;
|
||||||
|
if(m_fSpan>2500) m_freqPerDiv=500;
|
||||||
|
|
||||||
pixperdiv = m_freqPerDiv/df;
|
pixperdiv = m_freqPerDiv/df;
|
||||||
m_hdivs = w*df/m_freqPerDiv + 1.9999;
|
m_hdivs = w*df/m_freqPerDiv + 1.9999;
|
||||||
|
|
||||||
@ -278,14 +290,6 @@ void CPlotter::DrawOverlay() //DrawOverlay()
|
|||||||
painter0.setPen(Qt::black);
|
painter0.setPen(Qt::black);
|
||||||
|
|
||||||
if(m_binsPerPixel < 1) m_binsPerPixel=1;
|
if(m_binsPerPixel < 1) m_binsPerPixel=1;
|
||||||
m_fSpan = w*df;
|
|
||||||
// int n=m_fSpan/10;
|
|
||||||
m_freqPerDiv=10;
|
|
||||||
if(m_fSpan>100) m_freqPerDiv=20;
|
|
||||||
if(m_fSpan>250) m_freqPerDiv=50;
|
|
||||||
if(m_fSpan>500) m_freqPerDiv=100;
|
|
||||||
if(m_fSpan>1000) m_freqPerDiv=200;
|
|
||||||
if(m_fSpan>2500) m_freqPerDiv=500;
|
|
||||||
m_hdivs = w*df/m_freqPerDiv + 0.9999;
|
m_hdivs = w*df/m_freqPerDiv + 0.9999;
|
||||||
|
|
||||||
m_ScalePixmap.fill(Qt::white);
|
m_ScalePixmap.fill(Qt::white);
|
||||||
|
@ -18,6 +18,8 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
|
|||||||
ui(new Ui::WideGraph),
|
ui(new Ui::WideGraph),
|
||||||
m_settings (settings),
|
m_settings (settings),
|
||||||
m_palettes_path {":/Palettes"},
|
m_palettes_path {":/Palettes"},
|
||||||
|
m_ntr0 {0},
|
||||||
|
m_lockTxFreq {false},
|
||||||
m_n {0}
|
m_n {0}
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
@ -50,8 +52,8 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
|
|||||||
ui->zero2dSlider->setValue(ui->widePlot->plot2dZero());
|
ui->zero2dSlider->setValue(ui->widePlot->plot2dZero());
|
||||||
int n = m_settings->value("BinsPerPixel",2).toInt();
|
int n = m_settings->value("BinsPerPixel",2).toInt();
|
||||||
m_bFlatten=m_settings->value("Flatten",true).toBool();
|
m_bFlatten=m_settings->value("Flatten",true).toBool();
|
||||||
ui->cbFlatten->setChecked(m_bFlatten);
|
|
||||||
m_bRef=m_settings->value("UseRef",false).toBool();
|
m_bRef=m_settings->value("UseRef",false).toBool();
|
||||||
|
ui->cbFlatten->setChecked(m_bFlatten);
|
||||||
ui->widePlot->setFlatten(m_bFlatten,m_bRef);
|
ui->widePlot->setFlatten(m_bFlatten,m_bRef);
|
||||||
ui->cbRef->setChecked(m_bRef);
|
ui->cbRef->setChecked(m_bRef);
|
||||||
ui->widePlot->setBreadth(m_settings->value("PlotWidth",1000).toInt());
|
ui->widePlot->setBreadth(m_settings->value("PlotWidth",1000).toInt());
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// -*- Mode: C++ -*-
|
// -*- Mode: C++ -*-
|
||||||
#ifndef WIDEGRAPH_H
|
#ifndef WIDEGRAPH_H
|
||||||
#define WIDEGRAPH_H
|
#define WIDEGRAPH_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@ -81,15 +82,13 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
void readPalette();
|
void readPalette();
|
||||||
|
|
||||||
// QScopedPointer<Ui::WideGraph> ui;
|
QScopedPointer<Ui::WideGraph> ui;
|
||||||
Ui::WideGraph *ui;
|
|
||||||
|
|
||||||
QSettings * m_settings;
|
QSettings * m_settings;
|
||||||
QDir m_palettes_path;
|
QDir m_palettes_path;
|
||||||
WFPalette m_userPalette;
|
WFPalette m_userPalette;
|
||||||
|
|
||||||
qint32 m_waterfallAvg;
|
qint32 m_waterfallAvg;
|
||||||
qint32 m_fSample;
|
|
||||||
qint32 m_TRperiod;
|
qint32 m_TRperiod;
|
||||||
qint32 m_nsps;
|
qint32 m_nsps;
|
||||||
qint32 m_ntr0;
|
qint32 m_ntr0;
|
||||||
|
371
wsjtx-valgrind.linux.supp
Normal file
371
wsjtx-valgrind.linux.supp
Normal file
@ -0,0 +1,371 @@
|
|||||||
|
{
|
||||||
|
<QApplication>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
fun:_ZN19QApplicationPrivate9constructEv
|
||||||
|
fun:main
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<gtk::g_cclosure_marshal>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
fun:g_cclosure_marshal_VOID__OBJECTv
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QScrollBar::paintEvent>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
fun:_ZN10QScrollBar10paintEventEP11QPaintEvent
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QtWidgets>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
fun:gtk_adjustment_configure
|
||||||
|
obj:/usr/lib/*/libQt5Widgets*
|
||||||
|
obj:/usr/lib/*/libQt5Widgets*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QCoreApplication::exec>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
fun:_ZN16QCoreApplication4execEv
|
||||||
|
fun:main
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<ld>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/lib/*/ld-*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<gtk-theme-engine>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:gtk_theme_engine_get
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libgio>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libgio-*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<gtk-x11>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libgtk-x11-*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<gtk-x11>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libgtk-x11-*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QStyleFactory::create>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN13QStyleFactory6createERK7QString
|
||||||
|
fun:_ZN12QApplication5styleEv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<raico_blur_create>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:raico_blur_create
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<pango-leaks>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:pango*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<dbus>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:*dbus*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QtWidgets-leak>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:*QPaintEvent
|
||||||
|
fun:_ZN7QWidget5eventEP6QEvent
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libglib>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/lib/*/libglib-*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libpango>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libpango*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<gdk-x11>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libgdk-x11*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libpixbufloader-svg>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/gdk-pixbuf*/*/loaders/libpixbufloader-svg.so
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libdconfsettings>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/gio/modules/libdconfsettings.so
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libibus>
|
||||||
|
Memcheck:Leak
|
||||||
|
obj:/usr/lib/*/libibus-*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libpulse>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/pulseaudio/libpulse*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<Qt::start_thread>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:start_thread
|
||||||
|
fun:clone
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QCoreApplication>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN16QCoreApplicationC1ER23QCoreApplicationPrivate
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QFontMetrics>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZNK13QFontMetricsF7leadingEv
|
||||||
|
obj:/usr/lib/*/libQt5Gui*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QAudioDeviceInfo::defaultInputDevice>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN16QAudioDeviceInfo18defaultInputDeviceEv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libfontconfig>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libfontconfig*.so.1.8.0
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QFontDatabase::findFont>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN13QFontDatabase8findFontEiPK12QFontPrivateRK8QFontDefb
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QSerialPort::availablePorts>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN15QSerialPortInfo14availablePortsEv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<main_context_dispatch>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:g_main_context_dispatch
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<hb_shape_full>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:hb_shape_full
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QPlatformWindow>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN15QPlatformWindowC1EP7QWindow
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QSurfaceFormat>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN14QSurfaceFormatC1Ev
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QWindow::create>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN7QWindow6createEv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QWidgetPrivate::syncBackingStore>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN14QWidgetPrivate16syncBackingStoreEv
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QWindow::setVisible>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN7QWindow10setVisibleEb
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QMimData>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN9QMimeDataC1Ev
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QWindowPrivate::setCursor>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN14QWindowPrivate9setCursorEPK7QCursor
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libfreetype>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libfreetype*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libdbus>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:*/lib/*/libdbus*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libcairo-leak>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libcairo*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<cairo>
|
||||||
|
Memcheck:Cond
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libcairo*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QFactoryLoader::instance>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZNK14QFactoryLoader8instanceEi
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QThreadStorageData::get>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZNK18QThreadStorageData3getEv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<register_types>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_Z14register_typesv
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libibus>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libibus*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QPlatformintegrationFactory::create>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN27QPlatformIntegrationFactory6createERK7QStringRK11QStringListRiPPcS2_
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QPlatformInputContextFactory::create>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN28QPlatformInputContextFactory6createEv*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<QProcess::start>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
fun:_ZN8QProcess5startERK7QStringRK11QStringList6QFlagsIN9QIODevice12OpenModeFlagEE
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libicuuc>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libicuuc*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<X11>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libX11*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libxml2>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libxml2*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<librsvg>
|
||||||
|
Memcheck:Cond
|
||||||
|
obj:/usr/lib/*/librsvg*
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
<libxcb>
|
||||||
|
Memcheck:Leak
|
||||||
|
...
|
||||||
|
obj:/usr/lib/*/libxcb*
|
||||||
|
...
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user