mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-24 10:22:26 -04:00
Merge changes from branches/wsjtx_w back into branches/wsjtx.
Note to developers: Not sure about the makefiles... git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3835 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
9a51f29123
commit
86591544f0
290
Modulator.cpp
290
Modulator.cpp
@ -1,17 +1,12 @@
|
|||||||
#include "Modulator.hpp"
|
#include "Modulator.hpp"
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#include <qmath.h>
|
#include <qmath.h>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
|
||||||
extern float gran(); // Noise generator (for tests only)
|
extern float gran(); // Noise generator (for tests only)
|
||||||
|
#define RAMP_INCREMENT 64 // MUST be an integral factor of 2^16
|
||||||
// MUST be an integral factor of 2^16
|
|
||||||
#define RAMP_INCREMENT 64
|
|
||||||
|
|
||||||
#if defined (WSJT_SOFT_KEYING)
|
#if defined (WSJT_SOFT_KEYING)
|
||||||
# define SOFT_KEYING true
|
# define SOFT_KEYING true
|
||||||
@ -26,65 +21,66 @@ double const Modulator::m_twoPi = 2.0 * 3.141592653589793238462;
|
|||||||
// m_nspd=3072; //18.75 WPM
|
// m_nspd=3072; //18.75 WPM
|
||||||
unsigned const Modulator::m_nspd = 2048 + 512; // 22.5 WPM
|
unsigned const Modulator::m_nspd = 2048 + 512; // 22.5 WPM
|
||||||
|
|
||||||
Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds, QObject * parent)
|
Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds, \
|
||||||
|
QObject * parent)
|
||||||
: AudioDevice (parent)
|
: AudioDevice (parent)
|
||||||
|
, m_phi (0.0)
|
||||||
|
, m_framesSent (0)
|
||||||
, m_frameRate (frameRate)
|
, m_frameRate (frameRate)
|
||||||
, m_period (periodLengthInSeconds)
|
, m_period (periodLengthInSeconds)
|
||||||
, m_framesSent (0)
|
|
||||||
, m_state (Idle)
|
, m_state (Idle)
|
||||||
, m_tuning (false)
|
, m_tuning (false)
|
||||||
, m_muted (false)
|
, m_muted (false)
|
||||||
, m_phi (0.)
|
|
||||||
{
|
{
|
||||||
qsrand (QDateTime::currentMSecsSinceEpoch()); // Initialize random seed
|
qsrand (QDateTime::currentMSecsSinceEpoch()); // Initialize random seed
|
||||||
}
|
}
|
||||||
|
|
||||||
void Modulator::open (unsigned symbolsLength, double framesPerSymbol, unsigned frequency, Channel channel, bool synchronize, double dBSNR)
|
void Modulator::open (unsigned symbolsLength, double framesPerSymbol, \
|
||||||
|
unsigned frequency, Channel channel, bool synchronize, double dBSNR)
|
||||||
{
|
{
|
||||||
// Time according to this computer which becomes our base time
|
// Time according to this computer which becomes our base time
|
||||||
qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000;
|
qint64 ms0 = QDateTime::currentMSecsSinceEpoch() % 86400000;
|
||||||
|
|
||||||
qDebug () << "Modulator: Using soft keying for CW is " << SOFT_KEYING;;
|
// qDebug () << "Modulator: Using soft keying for CW is " << SOFT_KEYING;;
|
||||||
|
|
||||||
m_symbolsLength = symbolsLength;
|
m_symbolsLength = symbolsLength;
|
||||||
|
|
||||||
m_framesSent = 0;
|
m_framesSent = 0;
|
||||||
m_isym0 = std::numeric_limits<unsigned>::max (); // ensure we set up first symbol tone
|
m_isym0 = std::numeric_limits<unsigned>::max (); // Arbitrary big number
|
||||||
m_addNoise = dBSNR < 0.;
|
m_addNoise = dBSNR < 0.;
|
||||||
m_nsps = framesPerSymbol;
|
m_nsps = framesPerSymbol;
|
||||||
m_frequency = frequency;
|
m_frequency = frequency;
|
||||||
m_amp = std::numeric_limits<qint16>::max ();
|
m_amp = std::numeric_limits<qint16>::max ();
|
||||||
|
|
||||||
// noise generator parameters
|
// noise generator parameters
|
||||||
if (m_addNoise)
|
if (m_addNoise) {
|
||||||
{
|
m_snr = qPow (10.0, 0.05 * (dBSNR - 6.0));
|
||||||
m_snr = qPow (10.0, 0.05 * (dBSNR - 6.0));
|
m_fac = 3000.0;
|
||||||
m_fac = 3000.0;
|
if (m_snr > 1.0) m_fac = 3000.0 / m_snr;
|
||||||
if (m_snr > 1.0)
|
}
|
||||||
{
|
|
||||||
m_fac = 3000.0 / m_snr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned mstr = ms0 % (1000 * m_period); // ms in period
|
unsigned mstr = ms0 % (1000 * m_period); // ms in period
|
||||||
m_ic = (mstr / 1000) * m_frameRate; // we start exactly N seconds
|
m_ic = (mstr / 1000) * m_frameRate; // we start exactly N seconds
|
||||||
// into period where N is the
|
// into period where N is the next whole second
|
||||||
// next whole second
|
|
||||||
|
|
||||||
m_silentFrames = 0;
|
m_silentFrames = 0;
|
||||||
if (synchronize && !m_tuning) // calculate number of silent frames to send
|
// calculate number of silent frames to send
|
||||||
{
|
if (synchronize && !m_tuning) {
|
||||||
m_silentFrames = m_ic + m_frameRate - (mstr * m_frameRate / 1000);
|
m_silentFrames = m_ic + m_frameRate - (mstr * m_frameRate / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// qDebug () << "Modulator: starting at " << m_ic / m_frameRate << " sec, sending " << m_silentFrames << " silent frames";
|
// qDebug () << "Modulator: starting at " << m_ic / m_frameRate << " sec, sending " << m_silentFrames << " silent frames";
|
||||||
|
|
||||||
AudioDevice::open (QIODevice::ReadOnly, channel);
|
AudioDevice::open (QIODevice::ReadOnly, channel);
|
||||||
Q_EMIT stateChanged ((m_state = (synchronize && m_silentFrames) ? Synchronizing : Active));
|
Q_EMIT stateChanged ((m_state = (synchronize && m_silentFrames) ?
|
||||||
|
Synchronizing : Active));
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 Modulator::readData (char * data, qint64 maxSize)
|
qint64 Modulator::readData (char * data, qint64 maxSize)
|
||||||
{
|
{
|
||||||
|
static int j0=-1;
|
||||||
|
static double toneFrequency0;
|
||||||
|
double toneFrequency;
|
||||||
|
|
||||||
if(maxSize==0) return 0;
|
if(maxSize==0) return 0;
|
||||||
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ()))); // no torn frames
|
Q_ASSERT (!(maxSize % static_cast<qint64> (bytesPerFrame ()))); // no torn frames
|
||||||
Q_ASSERT (isOpen ());
|
Q_ASSERT (isOpen ());
|
||||||
@ -94,142 +90,131 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
|
|||||||
qint16 * end (samples + numFrames * (bytesPerFrame () / sizeof (qint16)));
|
qint16 * end (samples + numFrames * (bytesPerFrame () / sizeof (qint16)));
|
||||||
|
|
||||||
// qDebug () << "Modulator: " << numFrames << " requested, m_ic = " << m_ic << ", tune mode is " << m_tuning;
|
// qDebug () << "Modulator: " << numFrames << " requested, m_ic = " << m_ic << ", tune mode is " << m_tuning;
|
||||||
|
// qDebug() << "C" << maxSize << numFrames << bytesPerFrame();
|
||||||
switch (m_state)
|
switch (m_state)
|
||||||
{
|
{
|
||||||
case Synchronizing:
|
case Synchronizing:
|
||||||
{
|
{
|
||||||
if (m_silentFrames) // send silence up to first second
|
if (m_silentFrames) { // send silence up to first second
|
||||||
{
|
numFrames = qMin (m_silentFrames, numFrames);
|
||||||
numFrames = qMin (m_silentFrames, numFrames);
|
for ( ; samples != end; samples = load (0, samples)) { // silence
|
||||||
for ( ; samples != end; samples = load (0, samples)) // silence
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
m_silentFrames -= numFrames;
|
m_silentFrames -= numFrames;
|
||||||
return numFrames * bytesPerFrame ();
|
return numFrames * bytesPerFrame ();
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_EMIT stateChanged ((m_state = Active));
|
Q_EMIT stateChanged ((m_state = Active));
|
||||||
m_ramp = 0; // prepare for CW wave shaping
|
m_ramp = 0; // prepare for CW wave shaping
|
||||||
}
|
}
|
||||||
// fall through
|
// fall through
|
||||||
|
|
||||||
case Active:
|
case Active:
|
||||||
{
|
{
|
||||||
unsigned isym (m_tuning ? 0 : m_ic / (4.0 * m_nsps)); // Actual fsample=48000
|
unsigned isym (m_tuning ? 0 : m_ic / (4.0 * m_nsps)); // Actual fsample=48000
|
||||||
|
if (isym >= m_symbolsLength && icw[0] > 0) { // start CW condition
|
||||||
|
// Output the CW ID
|
||||||
|
m_dphi = m_twoPi * m_frequency / m_frameRate;
|
||||||
|
unsigned const ic0 = m_symbolsLength * 4 * m_nsps;
|
||||||
|
unsigned j (0);
|
||||||
|
qint64 framesGenerated (0);
|
||||||
|
|
||||||
if (isym >= m_symbolsLength && icw[0] > 0) // start CW condition
|
while (samples != end) {
|
||||||
{
|
m_phi += m_dphi;
|
||||||
// Output the CW ID
|
if (m_phi > m_twoPi) m_phi -= m_twoPi;
|
||||||
m_dphi = m_twoPi * m_frequency / m_frameRate;
|
|
||||||
|
|
||||||
unsigned const ic0 = m_symbolsLength * 4 * m_nsps;
|
qint16 sample ((SOFT_KEYING ? qAbs (m_ramp - 1) :
|
||||||
unsigned j (0);
|
(m_ramp ? 32767 : 0)) * qSin (m_phi));
|
||||||
qint64 framesGenerated (0);
|
|
||||||
|
|
||||||
while (samples != end)
|
j = (m_ic - ic0 - 1) / m_nspd + 1;
|
||||||
{
|
bool l0 (icw[j] && icw[j] <= 1); // first element treated specially as it's a count
|
||||||
m_phi += m_dphi;
|
j = (m_ic - ic0) / m_nspd + 1;
|
||||||
if (m_phi > m_twoPi)
|
|
||||||
{
|
|
||||||
m_phi -= m_twoPi;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint16 sample ((SOFT_KEYING ? qAbs (m_ramp - 1) : (m_ramp ? 32767 : 0)) * qSin (m_phi));
|
if ((m_ramp != 0 && m_ramp != std::numeric_limits<qint16>::min ()) ||
|
||||||
|
!!icw[j] != l0) {
|
||||||
|
if (!!icw[j] != l0) {
|
||||||
|
Q_ASSERT (m_ramp == 0 || m_ramp == std::numeric_limits<qint16>::min ());
|
||||||
|
}
|
||||||
|
m_ramp += RAMP_INCREMENT; // ramp
|
||||||
|
}
|
||||||
|
|
||||||
j = (m_ic - ic0 - 1) / m_nspd + 1;
|
if (j < NUM_CW_SYMBOLS) { // stop condition
|
||||||
bool l0 (icw[j] && icw[j] <= 1); // first element treated specially as it's a count
|
// if (!m_ramp && !icw[j])
|
||||||
j = (m_ic - ic0) / m_nspd + 1;
|
// {
|
||||||
|
// sample = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
if ((m_ramp != 0 && m_ramp != std::numeric_limits<qint16>::min ()) || !!icw[j] != l0)
|
samples = load (postProcessSample (sample), samples);
|
||||||
{
|
++framesGenerated;
|
||||||
if (!!icw[j] != l0)
|
++m_ic;
|
||||||
{
|
}
|
||||||
Q_ASSERT (m_ramp == 0 || m_ramp == std::numeric_limits<qint16>::min ());
|
}
|
||||||
}
|
|
||||||
m_ramp += RAMP_INCREMENT; // ramp
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j < NUM_CW_SYMBOLS) // stop condition
|
if (j > static_cast<unsigned> (icw[0])) {
|
||||||
{
|
Q_EMIT stateChanged ((m_state = Idle));
|
||||||
// if (!m_ramp && !icw[j])
|
}
|
||||||
// {
|
|
||||||
// sample = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
samples = load (postProcessSample (sample), samples);
|
m_framesSent += framesGenerated;
|
||||||
|
return framesGenerated * bytesPerFrame ();
|
||||||
++framesGenerated;
|
}
|
||||||
++m_ic;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j > static_cast<unsigned> (icw[0]))
|
|
||||||
{
|
|
||||||
Q_EMIT stateChanged ((m_state = Idle));
|
|
||||||
}
|
|
||||||
|
|
||||||
m_framesSent += framesGenerated;
|
|
||||||
return framesGenerated * bytesPerFrame ();
|
|
||||||
}
|
|
||||||
|
|
||||||
double const baud (12000.0 / m_nsps);
|
|
||||||
|
|
||||||
|
double const baud (12000.0 / m_nsps);
|
||||||
// fade out parameters (no fade out for tuning)
|
// fade out parameters (no fade out for tuning)
|
||||||
unsigned const i0 = m_tuning ? 999 * m_nsps : (m_symbolsLength - 0.017) * 4.0 * m_nsps;
|
unsigned const i0 = m_tuning ? 999 * m_nsps :
|
||||||
unsigned const i1 = m_tuning ? 999 * m_nsps : m_symbolsLength * 4.0 * m_nsps;
|
(m_symbolsLength - 0.017) * 4.0 * m_nsps;
|
||||||
|
unsigned const i1 = m_tuning ? 999 * m_nsps :
|
||||||
|
m_symbolsLength * 4.0 * m_nsps;
|
||||||
|
|
||||||
for (unsigned i = 0; i < numFrames; ++i)
|
for (unsigned i = 0; i < numFrames; ++i) {
|
||||||
{
|
isym = m_tuning ? 0 : m_ic / (4.0 * m_nsps); //Actual fsample=48000
|
||||||
isym = m_tuning ? 0 : m_ic / (4.0 * m_nsps); //Actual fsample=48000
|
if (isym != m_isym0) {
|
||||||
if (isym != m_isym0)
|
if(m_toneSpacing==0.0) {
|
||||||
{
|
toneFrequency0=m_frequency + itone[isym]*baud;
|
||||||
double toneFrequency = m_frequency + itone[isym] * baud;
|
} else {
|
||||||
m_dphi = m_twoPi * toneFrequency / m_frameRate;
|
toneFrequency0=m_frequency + itone[isym]*m_toneSpacing;
|
||||||
m_isym0 = isym;
|
}
|
||||||
}
|
m_dphi = m_twoPi * toneFrequency0 / m_frameRate;
|
||||||
m_phi += m_dphi;
|
m_isym0 = isym;
|
||||||
if (m_phi > m_twoPi)
|
}
|
||||||
{
|
|
||||||
m_phi -= m_twoPi;
|
|
||||||
}
|
|
||||||
if (m_ic > i0)
|
|
||||||
{
|
|
||||||
m_amp = 0.98 * m_amp;
|
|
||||||
}
|
|
||||||
if (m_ic > i1)
|
|
||||||
{
|
|
||||||
m_amp = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
samples = load (postProcessSample (m_amp * qSin (m_phi)), samples);
|
int j=m_ic/480;
|
||||||
|
if(m_fSpread>0.0 and j!=j0) {
|
||||||
|
float x1=(float)rand()/RAND_MAX;
|
||||||
|
float x2=(float)rand()/RAND_MAX;
|
||||||
|
toneFrequency = toneFrequency0 + 0.5*m_fSpread*(x1+x2-1.0);
|
||||||
|
m_dphi = m_twoPi * toneFrequency / m_frameRate;
|
||||||
|
j0=j;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_phi += m_dphi;
|
||||||
|
if (m_phi > m_twoPi) m_phi -= m_twoPi;
|
||||||
|
if (m_ic > i0) m_amp = 0.98 * m_amp;
|
||||||
|
if (m_ic > i1) m_amp = 0.0;
|
||||||
|
|
||||||
|
samples = load (postProcessSample (m_amp * qSin (m_phi)), samples);
|
||||||
++m_ic;
|
++m_ic;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_amp == 0.0) // TODO G4WJS: compare double with zero might not be wise
|
if (m_amp == 0.0) { // TODO G4WJS: compare double with zero might not be wise
|
||||||
{
|
if (icw[0] == 0) {
|
||||||
if (icw[0] == 0)
|
// no CW ID to send
|
||||||
{
|
Q_EMIT stateChanged ((m_state = Idle));
|
||||||
// no CW ID to send
|
m_framesSent += numFrames;
|
||||||
Q_EMIT stateChanged ((m_state = Idle));
|
return numFrames * bytesPerFrame ();
|
||||||
m_framesSent += numFrames;
|
}
|
||||||
return numFrames * bytesPerFrame ();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_phi = 0.0;
|
m_phi = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// done for this chunk - continue on next call
|
// done for this chunk - continue on next call
|
||||||
m_framesSent += numFrames;
|
m_framesSent += numFrames;
|
||||||
return numFrames * bytesPerFrame ();
|
return numFrames * bytesPerFrame ();
|
||||||
}
|
}
|
||||||
Q_EMIT stateChanged ((m_state = Idle));
|
Q_EMIT stateChanged ((m_state = Idle));
|
||||||
// fall through
|
// fall through
|
||||||
|
|
||||||
case Idle:
|
case Idle:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_ASSERT (Idle == m_state);
|
Q_ASSERT (Idle == m_state);
|
||||||
return 0;
|
return 0;
|
||||||
@ -237,22 +222,17 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
|
|||||||
|
|
||||||
qint16 Modulator::postProcessSample (qint16 sample) const
|
qint16 Modulator::postProcessSample (qint16 sample) const
|
||||||
{
|
{
|
||||||
if (m_muted) // silent frame
|
if (m_muted) { // silent frame
|
||||||
{
|
|
||||||
sample = 0;
|
sample = 0;
|
||||||
|
} else if (m_addNoise) { // Test frame, we'll add noise
|
||||||
|
qint32 s = m_fac * (gran () + sample * m_snr / 32768.0);
|
||||||
|
if (s > std::numeric_limits<qint16>::max ()) {
|
||||||
|
s = std::numeric_limits<qint16>::max ();
|
||||||
}
|
}
|
||||||
else if (m_addNoise)
|
if (s < std::numeric_limits<qint16>::min ()) {
|
||||||
{
|
s = std::numeric_limits<qint16>::min ();
|
||||||
qint32 s = m_fac * (gran () + sample * m_snr / 32768.0);
|
|
||||||
if (s > std::numeric_limits<qint16>::max ())
|
|
||||||
{
|
|
||||||
s = std::numeric_limits<qint16>::max ();
|
|
||||||
}
|
|
||||||
if (s < std::numeric_limits<qint16>::min ())
|
|
||||||
{
|
|
||||||
s = std::numeric_limits<qint16>::min ();
|
|
||||||
}
|
|
||||||
sample = s;
|
|
||||||
}
|
}
|
||||||
|
sample = s;
|
||||||
|
}
|
||||||
return sample;
|
return sample;
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ public:
|
|||||||
bool isMuted () const {return m_muted;}
|
bool isMuted () const {return m_muted;}
|
||||||
unsigned frequency () const {return m_frequency;}
|
unsigned frequency () const {return m_frequency;}
|
||||||
bool isActive () const {return m_state != Idle;}
|
bool isActive () const {return m_state != Idle;}
|
||||||
|
void setWide9(double d1, double d2) {m_toneSpacing=d1; m_fSpread=d2;}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
qint64 readData (char * data, qint64 maxSize);
|
qint64 readData (char * data, qint64 maxSize);
|
||||||
@ -66,22 +67,28 @@ private:
|
|||||||
static double const m_twoPi;
|
static double const m_twoPi;
|
||||||
static unsigned const m_nspd; // CW ID WPM factor
|
static unsigned const m_nspd; // CW ID WPM factor
|
||||||
|
|
||||||
int m_frameRate;
|
|
||||||
int m_period;
|
|
||||||
double m_nsps;
|
|
||||||
double volatile m_frequency;
|
|
||||||
double m_snr;
|
|
||||||
qint64 m_silentFrames;
|
|
||||||
qint64 m_framesSent;
|
|
||||||
ModulatorState volatile m_state;
|
|
||||||
bool volatile m_tuning;
|
|
||||||
bool volatile m_muted;
|
|
||||||
bool m_addNoise;
|
|
||||||
double m_phi;
|
double m_phi;
|
||||||
double m_dphi;
|
double m_dphi;
|
||||||
double m_amp;
|
double m_amp;
|
||||||
unsigned m_ic;
|
double m_nsps;
|
||||||
|
double volatile m_frequency;
|
||||||
|
double m_snr;
|
||||||
double m_fac;
|
double m_fac;
|
||||||
|
double m_toneSpacing;
|
||||||
|
double m_fSpread;
|
||||||
|
|
||||||
|
qint64 m_silentFrames;
|
||||||
|
qint64 m_framesSent;
|
||||||
|
|
||||||
|
int m_frameRate;
|
||||||
|
int m_period;
|
||||||
|
ModulatorState volatile m_state;
|
||||||
|
|
||||||
|
bool volatile m_tuning;
|
||||||
|
bool volatile m_muted;
|
||||||
|
bool m_addNoise;
|
||||||
|
|
||||||
|
unsigned m_ic;
|
||||||
unsigned m_isym0;
|
unsigned m_isym0;
|
||||||
qint16 m_ramp;
|
qint16 m_ramp;
|
||||||
};
|
};
|
||||||
|
@ -29,4 +29,10 @@ extern struct FortranCommon {
|
|||||||
char datetime[20];
|
char datetime[20];
|
||||||
} jt9com_;
|
} jt9com_;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
extern struct {
|
||||||
|
float syellow[NSMAX];
|
||||||
|
} jt9w_;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // COMMONS_H
|
#endif // COMMONS_H
|
||||||
|
40
devsetup.cpp
40
devsetup.cpp
@ -5,6 +5,7 @@
|
|||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <tr1/functional>
|
#include <tr1/functional>
|
||||||
|
#include <qmath.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
@ -85,10 +86,13 @@ void DevSetup::initDlg()
|
|||||||
ui->pttMethodComboBox->setCurrentIndex(m_pttMethodIndex);
|
ui->pttMethodComboBox->setCurrentIndex(m_pttMethodIndex);
|
||||||
ui->saveDirEntry->setText(m_saveDir);
|
ui->saveDirEntry->setText(m_saveDir);
|
||||||
ui->cbID73->setChecked(m_After73);
|
ui->cbID73->setChecked(m_After73);
|
||||||
|
ui->cbDisplayAstroData->setChecked(m_bAstroData);
|
||||||
ui->cbPSKReporter->setChecked(m_pskReporter);
|
ui->cbPSKReporter->setChecked(m_pskReporter);
|
||||||
ui->cbSplit->setChecked(m_bSplit and m_catEnabled);
|
ui->cbSplit->setChecked(m_bSplit and m_catEnabled);
|
||||||
ui->cbXIT->setChecked(m_bXIT);
|
ui->cbXIT->setChecked(m_bXIT);
|
||||||
ui->cbXIT->setVisible(false);
|
ui->cbXIT->setVisible(false);
|
||||||
|
ui->dtMinSpinBox->setValue(m_DTmin);
|
||||||
|
ui->dtMaxSpinBox->setValue(m_DTmax);
|
||||||
|
|
||||||
enableWidgets();
|
enableWidgets();
|
||||||
|
|
||||||
@ -99,6 +103,9 @@ void DevSetup::initDlg()
|
|||||||
ui->handshakeComboBox->setCurrentIndex(m_handshakeIndex);
|
ui->handshakeComboBox->setCurrentIndex(m_handshakeIndex);
|
||||||
ui->rbData->setChecked(m_pttData);
|
ui->rbData->setChecked(m_pttData);
|
||||||
ui->pollSpinBox->setValue(m_poll);
|
ui->pollSpinBox->setValue(m_poll);
|
||||||
|
ui->cbEMEband->setCurrentIndex(m_EMEbandIndex);
|
||||||
|
ui->cbBWmult->setCurrentIndex(m_toneMultIndex);
|
||||||
|
ui->astroFontSpinBox->setValue(m_astroFont);
|
||||||
|
|
||||||
// PY2SDR -- Per OS serial port names
|
// PY2SDR -- Per OS serial port names
|
||||||
m_tmp=m_pttPort;
|
m_tmp=m_pttPort;
|
||||||
@ -708,3 +715,36 @@ void DevSetup::enumerateRigs ()
|
|||||||
ui->rigComboBox->addItem ("Ham Radio Deluxe", 9999);
|
ui->rigComboBox->addItem ("Ham Radio Deluxe", 9999);
|
||||||
ui->rigComboBox->setCurrentIndex (ui->rigComboBox->findData (m_rig));
|
ui->rigComboBox->setCurrentIndex (ui->rigComboBox->findData (m_rig));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DevSetup::on_cbEMEband_activated(int index)
|
||||||
|
{
|
||||||
|
m_EMEbandIndex=index;
|
||||||
|
m_EMEband=ui->cbEMEband->itemText(index).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevSetup::on_cbBWmult_activated(int index)
|
||||||
|
{
|
||||||
|
m_toneMultIndex=index;
|
||||||
|
m_toneMult=pow(2,index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevSetup::on_dtMinSpinBox_valueChanged(double arg1)
|
||||||
|
{
|
||||||
|
m_DTmin=arg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevSetup::on_dtMaxSpinBox_valueChanged(double arg1)
|
||||||
|
{
|
||||||
|
m_DTmax=arg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevSetup::on_astroFontSpinBox_valueChanged(int arg1)
|
||||||
|
{
|
||||||
|
if(arg1==-999) m_astroFont=18; //silence compiler warning
|
||||||
|
m_astroFont=ui->astroFontSpinBox->value();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevSetup::on_cbDisplayAstroData_toggled(bool checked)
|
||||||
|
{
|
||||||
|
m_bAstroData=checked;
|
||||||
|
}
|
||||||
|
27
devsetup.h
27
devsetup.h
@ -32,6 +32,9 @@ public:
|
|||||||
|
|
||||||
void initDlg();
|
void initDlg();
|
||||||
|
|
||||||
|
float m_DTmin;
|
||||||
|
float m_DTmax;
|
||||||
|
|
||||||
qint32 m_idInt;
|
qint32 m_idInt;
|
||||||
qint32 m_pttMethodIndex;
|
qint32 m_pttMethodIndex;
|
||||||
qint32 m_pttPort;
|
qint32 m_pttPort;
|
||||||
@ -48,17 +51,22 @@ public:
|
|||||||
qint32 m_test;
|
qint32 m_test;
|
||||||
qint32 m_poll;
|
qint32 m_poll;
|
||||||
qint32 m_tmp;
|
qint32 m_tmp;
|
||||||
|
qint32 m_EMEband;
|
||||||
|
qint32 m_EMEbandIndex;
|
||||||
|
qint32 m_toneMult;
|
||||||
|
qint32 m_toneMultIndex;
|
||||||
|
qint32 m_astroFont;
|
||||||
|
|
||||||
typedef QList<QAudioDeviceInfo> AudioDevices;
|
typedef QList<QAudioDeviceInfo> AudioDevices;
|
||||||
AudioDevices m_audioInputDevices; /* available input devices */
|
AudioDevices m_audioInputDevices; // available input devices
|
||||||
AudioDevices m_audioOutputDevices; /* available output devices */
|
AudioDevices m_audioOutputDevices; // available output devices
|
||||||
QAudioDeviceInfo m_audioInputDevice; /* selected input device */
|
QAudioDeviceInfo m_audioInputDevice; // selected input device
|
||||||
QAudioDeviceInfo m_audioOutputDevice; /* selected output device */
|
QAudioDeviceInfo m_audioOutputDevice; // selected output device
|
||||||
bool m_restartSoundIn;
|
|
||||||
bool m_restartSoundOut;
|
|
||||||
AudioDevice::Channel m_audioInputChannel;
|
AudioDevice::Channel m_audioInputChannel;
|
||||||
AudioDevice::Channel m_audioOutputChannel;
|
AudioDevice::Channel m_audioOutputChannel;
|
||||||
|
|
||||||
|
bool m_restartSoundIn;
|
||||||
|
bool m_restartSoundOut;
|
||||||
bool m_pskReporter;
|
bool m_pskReporter;
|
||||||
bool m_firstCall;
|
bool m_firstCall;
|
||||||
bool m_catEnabled;
|
bool m_catEnabled;
|
||||||
@ -69,6 +77,7 @@ public:
|
|||||||
bool m_pttData;
|
bool m_pttData;
|
||||||
bool m_bSplit;
|
bool m_bSplit;
|
||||||
bool m_bXIT;
|
bool m_bXIT;
|
||||||
|
bool m_bAstroData;
|
||||||
|
|
||||||
QString m_myCall;
|
QString m_myCall;
|
||||||
QString m_myGrid;
|
QString m_myGrid;
|
||||||
@ -112,6 +121,12 @@ private slots:
|
|||||||
void on_pttMethodComboBox_currentIndexChanged(int index);
|
void on_pttMethodComboBox_currentIndexChanged(int index);
|
||||||
void on_cbSplit_toggled(bool checked);
|
void on_cbSplit_toggled(bool checked);
|
||||||
void on_cbXIT_toggled(bool checked);
|
void on_cbXIT_toggled(bool checked);
|
||||||
|
void on_cbEMEband_activated(int index);
|
||||||
|
void on_cbBWmult_activated(int index);
|
||||||
|
void on_dtMinSpinBox_valueChanged(double arg1);
|
||||||
|
void on_dtMaxSpinBox_valueChanged(double arg1);
|
||||||
|
void on_astroFontSpinBox_valueChanged(int arg1);
|
||||||
|
void on_cbDisplayAstroData_toggled(bool checked);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void loadAudioDevices (AudioDevices const&, QComboBox *, QAudioDeviceInfo const&, QAudioDeviceInfo const&);
|
void loadAudioDevices (AudioDevices const&, QComboBox *, QAudioDeviceInfo const&, QAudioDeviceInfo const&);
|
||||||
|
224
devsetup.ui
224
devsetup.ui
@ -1868,7 +1868,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>308</width>
|
<width>510</width>
|
||||||
<height>449</height>
|
<height>449</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -2522,6 +2522,228 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_4">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>JT9W</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QWidget" name="">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>140</x>
|
||||||
|
<y>101</y>
|
||||||
|
<width>202</width>
|
||||||
|
<height>161</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_8">
|
||||||
|
<property name="text">
|
||||||
|
<string>Band (MHz):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QComboBox" name="cbEMEband">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>9</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>50</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>144</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>222</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>432</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>903</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1296</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2320</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>3400</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>5760</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>10368</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>24192</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="label_26">
|
||||||
|
<property name="text">
|
||||||
|
<string>BW Mult:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QComboBox" name="cbBWmult">
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>1</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>2</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>4</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>8</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>16</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>32</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>64</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>128</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="label_27">
|
||||||
|
<property name="text">
|
||||||
|
<string>DT min (s):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="dtMinSpinBox">
|
||||||
|
<property name="decimals">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<double>-2.500000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>5.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>-2.500000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="label_28">
|
||||||
|
<property name="text">
|
||||||
|
<string>DT max (s):</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QDoubleSpinBox" name="dtMaxSpinBox">
|
||||||
|
<property name="decimals">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<double>-2.500000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<double>5.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<double>0.100000000000000</double>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<double>5.000000000000000</double>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="label_29">
|
||||||
|
<property name="text">
|
||||||
|
<string>Astro Font Size:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QSpinBox" name="astroFontSpinBox">
|
||||||
|
<property name="minimum">
|
||||||
|
<number>14</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>18</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>2</number>
|
||||||
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>18</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="cbDisplayAstroData">
|
||||||
|
<property name="text">
|
||||||
|
<string>Display Astronomical Data on startup</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
|
@ -3,25 +3,15 @@
|
|||||||
# C> make > junk1 2>&1
|
# C> make > junk1 2>&1
|
||||||
|
|
||||||
# Set paths
|
# Set paths
|
||||||
EXE_DIR = ..\..\wsjtx_install
|
EXE_DIR = ../../wsjtx_install
|
||||||
QT_DIR = c:/QtSDK/Desktop/Qt/4.7.4/mingw
|
|
||||||
|
|
||||||
#INCPATH = -I'${QT_DIR}/include/QtCore' \
|
INCPATH = -I'C:/wsjt-env/Qt5/5.2.1/mingw48_32/include/QtCore' \
|
||||||
# -I'${QT_DIR}/include' \
|
-I'C:/wsjt-env/Qt5/5.2.1/mingw48_32/include/'
|
||||||
# -I'${QT_DIR}/include/ActiveQt' \
|
|
||||||
# -I'release' -I'.' -I'${QT_DIR}/mkspecs/win32-g++'
|
|
||||||
|
|
||||||
INCPATH = -I'${QT_DIR}/include/QtCore' \
|
|
||||||
-I'${QT_DIR}/include' \
|
|
||||||
|
|
||||||
# Compilers
|
# Compilers
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CXX = g++
|
CXX = g++
|
||||||
FC = g95
|
FC = g95
|
||||||
AR = ar
|
|
||||||
RANLIB = ranlib
|
|
||||||
CP = cp
|
|
||||||
MKDIR = mkdir -p
|
|
||||||
|
|
||||||
FFLAGS = -O2 -fbounds-check -Wall -Wno-precision-loss -fno-second-underscore
|
FFLAGS = -O2 -fbounds-check -Wall -Wno-precision-loss -fno-second-underscore
|
||||||
CFLAGS = -I. -fbounds-check -mno-stack-arg-probe
|
CFLAGS = -I. -fbounds-check -mno-stack-arg-probe
|
||||||
@ -38,14 +28,14 @@ CFLAGS = -I. -fbounds-check -mno-stack-arg-probe
|
|||||||
%.o: %.F90
|
%.o: %.F90
|
||||||
${FC} ${FFLAGS} -c $<
|
${FC} ${FFLAGS} -c $<
|
||||||
|
|
||||||
all: libjt9.a jt9sim.exe jt9.exe jt9code.exe jt65code.exe jt65.exe
|
all: libjt9.a libastro.a jt9.exe jt9code.exe jt65code.exe
|
||||||
|
|
||||||
OBJS1 = pctile.o graycode.o sort.o ssort.o chkmsg.o \
|
OBJS1 = pctile.o graycode.o sort.o ssort.o chkmsg.o \
|
||||||
unpackmsg.o igray.o unpackcall.o unpackgrid.o \
|
unpackmsg.o igray.o unpackcall.o unpackgrid.o \
|
||||||
grid2k.o unpacktext.o getpfx2.o packmsg.o deg2grid.o \
|
grid2k.o unpacktext.o getpfx2.o packmsg.o deg2grid.o \
|
||||||
packtext.o getpfx1.o packcall.o k2grid.o packgrid.o \
|
packtext.o getpfx1.o packcall.o k2grid.o packgrid.o \
|
||||||
nchar.o four2a.o grid2deg.o pfxdump.o f77_wisdom.o \
|
nchar.o four2a.o grid2deg.o pfxdump.o f77_wisdom.o \
|
||||||
symspec.o analytic.o db.o genjt9.o \
|
symspec.o analytic.o db.o genjt9.o flat1.o smo.o \
|
||||||
packbits.o unpackbits.o encode232.o interleave9.o \
|
packbits.o unpackbits.o encode232.o interleave9.o \
|
||||||
entail.o fano232.o gran.o sync9.o decode9.o \
|
entail.o fano232.o gran.o sync9.o decode9.o \
|
||||||
fil3.o decoder.o grid2n.o n2grid.o timer.o \
|
fil3.o decoder.o grid2n.o n2grid.o timer.o \
|
||||||
@ -60,16 +50,16 @@ OBJS1 = pctile.o graycode.o sort.o ssort.o chkmsg.o \
|
|||||||
flat3.o polfit.o determ.o baddata.o
|
flat3.o polfit.o determ.o baddata.o
|
||||||
|
|
||||||
libjt9.a: $(OBJS1)
|
libjt9.a: $(OBJS1)
|
||||||
${AR} cr libjt9.a $(OBJS1)
|
ar cr libjt9.a $(OBJS1)
|
||||||
${RANLIB} libjt9.a
|
ranlib libjt9.a
|
||||||
|
|
||||||
OBJS2 = jt9.o jt9a.o jt9b.o jt9c.o ipcomm.o sec_midn.o usleep.o
|
OBJS2 = jt9.o jt9a.o jt9b.o jt9c.o ipcomm.o sec_midn.o usleep.o
|
||||||
LIBS2 = -L'${QT_DIR}/lib' -lQt5Core
|
LIBS2 = -L'C:/wsjt-env/Qt5/5.2.1/mingw48_32/lib' -lQt5Core
|
||||||
jt9.exe: $(OBJS2) libjt9.a
|
jt9.exe: $(OBJS2) libjt9.a
|
||||||
$(CXX) -o jt9.exe -static $(OBJS2) $(LIBS2) libjt9.a \
|
$(CXX) -o jt9.exe -static $(OBJS2) $(LIBS2) libjt9.a \
|
||||||
../libfftw3f_win.a -lgfortran
|
../libfftw3f_win.a c:/MinGW/lib/libf95.a
|
||||||
-$(MKDIR) $(EXE_DIR)
|
mkdir -p $(EXE_DIR)
|
||||||
${CP} jt9.exe $(EXE_DIR)
|
cp jt9.exe $(EXE_DIR)
|
||||||
|
|
||||||
OBJS3 = jt9sim.o
|
OBJS3 = jt9sim.o
|
||||||
jt9sim.exe: $(OBJS3) libjt9.a
|
jt9sim.exe: $(OBJS3) libjt9.a
|
||||||
@ -78,16 +68,24 @@ jt9sim.exe: $(OBJS3) libjt9.a
|
|||||||
OBJS4 = jt9code.o
|
OBJS4 = jt9code.o
|
||||||
jt9code.exe: $(OBJS4) libjt9.a
|
jt9code.exe: $(OBJS4) libjt9.a
|
||||||
$(FC) -o jt9code.exe $(OBJS4) libjt9.a
|
$(FC) -o jt9code.exe $(OBJS4) libjt9.a
|
||||||
$(CP) jt9code.exe $(EXE_DIR)
|
cp jt9code.exe $(EXE_DIR)
|
||||||
|
|
||||||
OBJS5 = jt65.o
|
OBJS5 = jt65.o
|
||||||
jt65.exe: $(OBJS5) libjt9.a
|
jt65.exe: $(OBJS5) libjt9.a
|
||||||
$(FC) -o jt65.exe $(OBJS5) libjt9.a ../libfftw3f_win.a
|
$(FC) -o jt65.exe $(OBJS5) libjt9.a ../libfftw3f_win.a
|
||||||
|
|
||||||
|
OBJS7 = astrosub.o astro0.o astro.o tm2.o grid2deg.o sun.o moondop.o \
|
||||||
|
coord.o dot.o moon2.o tmoonsub.o toxyz.o geocentric.o \
|
||||||
|
dcoord.o
|
||||||
|
|
||||||
|
libastro.a: $(OBJS7)
|
||||||
|
ar cr libastro.a $(OBJS7)
|
||||||
|
ranlib libastro.a
|
||||||
|
|
||||||
OBJS6 = jt65code.o
|
OBJS6 = jt65code.o
|
||||||
jt65code.exe: $(OBJS6) libjt9.a
|
jt65code.exe: $(OBJS6) libjt9.a
|
||||||
$(FC) -o jt65code.exe $(OBJS6) libjt9.a
|
$(FC) -o jt65code.exe $(OBJS6) libjt9.a
|
||||||
$(CP) jt65code.exe $(EXE_DIR)
|
cp jt65code.exe $(EXE_DIR)
|
||||||
|
|
||||||
sync9.o: sync9.f90 jt9sync.f90
|
sync9.o: sync9.f90 jt9sync.f90
|
||||||
$(FC) $(FFLAGS) -c sync9.f90
|
$(FC) $(FFLAGS) -c sync9.f90
|
||||||
|
@ -37,7 +37,7 @@ subroutine decoder(ss,id2)
|
|||||||
|
|
||||||
ntol65=20
|
ntol65=20
|
||||||
done65=.false.
|
done65=.false.
|
||||||
if(nmode.ge.65 .and. ntxmode.eq.65) then
|
if((nmode.eq.65 .or. nmode.eq.65+9) .and. ntxmode.eq.65) then
|
||||||
if(newdat.ne.0) dd(1:npts65)=id2(1:npts65)
|
if(newdat.ne.0) dd(1:npts65)=id2(1:npts65)
|
||||||
nf1=nfa
|
nf1=nfa
|
||||||
nf2=nfb
|
nf2=nfb
|
||||||
|
@ -1,30 +1,27 @@
|
|||||||
subroutine flat1(psavg,s2,nh,nsteps,nhmax,nsmax)
|
subroutine flat1(savg,iz,nsmo,syellow)
|
||||||
|
|
||||||
real psavg(nh)
|
real savg(iz)
|
||||||
real s2(nhmax,nsmax)
|
real syellow(iz)
|
||||||
real x(8192),tmp(33)
|
real x(8192)
|
||||||
|
|
||||||
nsmo=33
|
|
||||||
ia=nsmo/2 + 1
|
ia=nsmo/2 + 1
|
||||||
ib=nh - nsmo/2 - 1
|
ib=iz - nsmo/2 - 1
|
||||||
do i=ia,ib
|
nstep=20
|
||||||
call pctile(psavg(i-nsmo/2),nsmo,50,x(i))
|
nh=nstep/2
|
||||||
|
do i=ia,ib,nstep
|
||||||
|
call pctile(savg(i-nsmo/2),nsmo,50,x(i))
|
||||||
|
x(i-nh:i+nh-1)=x(i)
|
||||||
enddo
|
enddo
|
||||||
do i=1,ia-1
|
do i=1,ia-1
|
||||||
x(i)=x(ia)
|
x(i)=x(ia)
|
||||||
enddo
|
enddo
|
||||||
do i=ib+1,nh
|
do i=ib+1,iz
|
||||||
x(i)=x(ib)
|
x(i)=x(ib)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do i=1,nh
|
x0=0.001*maxval(x(1:iz))
|
||||||
psavg(i)=psavg(i)/x(i)
|
syellow(1:iz)=savg(1:iz)/(x(1:iz)+x0)
|
||||||
do j=1,nsteps
|
|
||||||
s2(i,j)=s2(i,j)/x(i)
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
|
|
||||||
return
|
return
|
||||||
end subroutine flat1
|
end subroutine flat1
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,11 +22,13 @@ subroutine symspec(k,ntrperiod,nsps,ingain,nflatten,pxdb,s,df3,ihsym,npts8)
|
|||||||
real*4 s(NSMAX)
|
real*4 s(NSMAX)
|
||||||
real*4 ssum(NSMAX)
|
real*4 ssum(NSMAX)
|
||||||
real*4 xc(0:MAXFFT3-1)
|
real*4 xc(0:MAXFFT3-1)
|
||||||
|
real*4 tmp(NSMAX)
|
||||||
complex cx(0:MAXFFT3/2)
|
complex cx(0:MAXFFT3/2)
|
||||||
integer*2 id2
|
integer*2 id2
|
||||||
common/jt9com/ss(184,NSMAX),savg(NSMAX),id2(NMAX),nutc,ndiskdat, &
|
common/jt9com/ss(184,NSMAX),savg(NSMAX),id2(NMAX),nutc,ndiskdat, &
|
||||||
ntr,mousefqso,newdat,npts8a,nfa,nfsplit,nfb,ntol,kin,nzhsym, &
|
ntr,mousefqso,newdat,npts8a,nfa,nfsplit,nfb,ntol,kin,nzhsym, &
|
||||||
nsave,nagain,ndepth,ntxmode,nmode,junk(5)
|
nsave,nagain,ndepth,ntxmode,nmode,junk(5)
|
||||||
|
common/jt9w/syellow(NSMAX)
|
||||||
data rms/999.0/,k0/99999999/,nfft3z/0/
|
data rms/999.0/,k0/99999999/,nfft3z/0/
|
||||||
equivalence (xc,cx)
|
equivalence (xc,cx)
|
||||||
save
|
save
|
||||||
@ -99,6 +101,20 @@ subroutine symspec(k,ntrperiod,nsps,ingain,nflatten,pxdb,s,df3,ihsym,npts8)
|
|||||||
|
|
||||||
savg=ssum/ihsym
|
savg=ssum/ihsym
|
||||||
|
|
||||||
|
if(mod(n,10).eq.0) then
|
||||||
|
mode4=36
|
||||||
|
nsmo=min(10*mode4,150)
|
||||||
|
nsmo=4*nsmo
|
||||||
|
call flat1(savg,iz,nsmo,syellow)
|
||||||
|
if(mode4.ge.9) call smo(syellow,iz,tmp,mode4)
|
||||||
|
ia=500./df3
|
||||||
|
ib=2700.0/df3
|
||||||
|
smin=minval(syellow(ia:ib))
|
||||||
|
smax=maxval(syellow(1:iz))
|
||||||
|
syellow=(50.0/(smax-smin))*(syellow-smin)
|
||||||
|
where(syellow<0) syellow=0.
|
||||||
|
endif
|
||||||
|
|
||||||
if(nflatten.ne.0) then
|
if(nflatten.ne.0) then
|
||||||
call flat3(s,iz,nfa,nfb,3,1.0,s)
|
call flat3(s,iz,nfa,nfb,3,1.0,s)
|
||||||
call flat3(savg,iz,nfa,nfb,3,1.0,savg)
|
call flat3(savg,iz,nfa,nfb,3,1.0,savg)
|
||||||
|
123
mainwindow.cpp
123
mainwindow.cpp
@ -1,4 +1,5 @@
|
|||||||
//------------------------------------------------------------ MainWindow
|
//----------------------------------------------------------- MainWindow
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "ui_mainwindow.h"
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
@ -9,6 +10,7 @@
|
|||||||
#include "devsetup.h"
|
#include "devsetup.h"
|
||||||
#include "plotter.h"
|
#include "plotter.h"
|
||||||
#include "about.h"
|
#include "about.h"
|
||||||
|
#include "astro.h"
|
||||||
#include "widegraph.h"
|
#include "widegraph.h"
|
||||||
#include "sleep.h"
|
#include "sleep.h"
|
||||||
#include "getfile.h"
|
#include "getfile.h"
|
||||||
@ -27,7 +29,7 @@ qint32 g_COMportOpen;
|
|||||||
qint32 g_iptt;
|
qint32 g_iptt;
|
||||||
static int nc1=1;
|
static int nc1=1;
|
||||||
wchar_t buffer[256];
|
wchar_t buffer[256];
|
||||||
|
Astro* g_pAstro = NULL;
|
||||||
|
|
||||||
Rig* rig = NULL;
|
Rig* rig = NULL;
|
||||||
QTextEdit* pShortcuts;
|
QTextEdit* pShortcuts;
|
||||||
@ -35,7 +37,7 @@ QTextEdit* pPrefixes;
|
|||||||
QTcpSocket* commanderSocket = new QTcpSocket(0);
|
QTcpSocket* commanderSocket = new QTcpSocket(0);
|
||||||
|
|
||||||
QString rev="$Rev$";
|
QString rev="$Rev$";
|
||||||
QString Program_Title_Version=" WSJT-X v1.3, r" + rev.mid(6,4) +
|
QString Program_Title_Version=" WSJT-X v1.4, r" + rev.mid(6,4) +
|
||||||
" by K1JT";
|
" by K1JT";
|
||||||
|
|
||||||
//--------------------------------------------------- MainWindow constructor
|
//--------------------------------------------------- MainWindow constructor
|
||||||
@ -48,7 +50,7 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
ui(new Ui::MainWindow),
|
ui(new Ui::MainWindow),
|
||||||
m_wideGraph (new WideGraph (settings)),
|
m_wideGraph (new WideGraph (settings)),
|
||||||
m_logDlg (new LogQSO (settings, this)),
|
m_logDlg (new LogQSO (settings, this)),
|
||||||
m_detector (RX_SAMPLE_RATE, NTMAX/2, 6912/2, downSampleFactor),
|
m_detector (RX_SAMPLE_RATE, NTMAX / 2, 6912 / 2, downSampleFactor),
|
||||||
m_audioInputDevice (QAudioDeviceInfo::defaultInputDevice ()), // start with default
|
m_audioInputDevice (QAudioDeviceInfo::defaultInputDevice ()), // start with default
|
||||||
m_modulator (TX_SAMPLE_RATE, NTMAX / 2),
|
m_modulator (TX_SAMPLE_RATE, NTMAX / 2),
|
||||||
m_audioOutputDevice (QAudioDeviceInfo::defaultOutputDevice ()), // start with default
|
m_audioOutputDevice (QAudioDeviceInfo::defaultOutputDevice ()), // start with default
|
||||||
@ -64,7 +66,6 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
connect (this, &MainWindow::finished, this, &MainWindow::close);
|
connect (this, &MainWindow::finished, this, &MainWindow::close);
|
||||||
|
|
||||||
// start audio thread and hook up slots & signals for shutdown management
|
// start audio thread and hook up slots & signals for shutdown management
|
||||||
|
|
||||||
// these objects need to be in the audio thread so that invoking
|
// these objects need to be in the audio thread so that invoking
|
||||||
// their slots is done in a thread safe way
|
// their slots is done in a thread safe way
|
||||||
m_soundOutput.moveToThread (&m_audioThread);
|
m_soundOutput.moveToThread (&m_audioThread);
|
||||||
@ -125,6 +126,7 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
|
|
||||||
QActionGroup* modeGroup = new QActionGroup(this);
|
QActionGroup* modeGroup = new QActionGroup(this);
|
||||||
ui->actionJT9_1->setActionGroup(modeGroup);
|
ui->actionJT9_1->setActionGroup(modeGroup);
|
||||||
|
ui->actionJT9W_1->setActionGroup(modeGroup);
|
||||||
ui->actionJT65->setActionGroup(modeGroup);
|
ui->actionJT65->setActionGroup(modeGroup);
|
||||||
ui->actionJT9_JT65->setActionGroup(modeGroup);
|
ui->actionJT9_JT65->setActionGroup(modeGroup);
|
||||||
|
|
||||||
@ -272,6 +274,7 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
m_QSOText.clear();
|
m_QSOText.clear();
|
||||||
m_CATerror=false;
|
m_CATerror=false;
|
||||||
decodeBusy(false);
|
decodeBusy(false);
|
||||||
|
m_toneSpacing=0;
|
||||||
|
|
||||||
signalMeter = new SignalMeter(ui->meterFrame);
|
signalMeter = new SignalMeter(ui->meterFrame);
|
||||||
signalMeter->resize(50, 160);
|
signalMeter->resize(50, 160);
|
||||||
@ -370,8 +373,11 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
genStdMsgs(m_rpt);
|
genStdMsgs(m_rpt);
|
||||||
m_ntx=6;
|
m_ntx=6;
|
||||||
ui->txrb6->setChecked(true);
|
ui->txrb6->setChecked(true);
|
||||||
if(m_mode!="JT9" and m_mode!="JT65" and m_mode!="JT9+JT65") m_mode="JT9";
|
if(m_mode!="JT9" and m_mode!="JT9W-1" and m_mode!="JT65" and
|
||||||
|
m_mode!="JT9+JT65") m_mode="JT9";
|
||||||
on_actionWide_Waterfall_triggered(); //###
|
on_actionWide_Waterfall_triggered(); //###
|
||||||
|
// on_actionAstronomical_data_triggered();
|
||||||
|
if(m_bAstroData) on_actionAstronomical_data_triggered();
|
||||||
m_wideGraph->setRxFreq(m_rxFreq);
|
m_wideGraph->setRxFreq(m_rxFreq);
|
||||||
m_wideGraph->setTxFreq(m_txFreq);
|
m_wideGraph->setTxFreq(m_txFreq);
|
||||||
m_wideGraph->setLockTxFreq(m_lockTxFreq);
|
m_wideGraph->setLockTxFreq(m_lockTxFreq);
|
||||||
@ -383,6 +389,7 @@ MainWindow::MainWindow(QSettings * settings, QSharedMemory *shdmem, QString *the
|
|||||||
SLOT(setFreq4(int,int)));
|
SLOT(setFreq4(int,int)));
|
||||||
|
|
||||||
if(m_mode=="JT9") on_actionJT9_1_triggered();
|
if(m_mode=="JT9") on_actionJT9_1_triggered();
|
||||||
|
if(m_mode=="JT9W-1") on_actionJT9W_1_triggered();
|
||||||
if(m_mode=="JT65") on_actionJT65_triggered();
|
if(m_mode=="JT65") on_actionJT65_triggered();
|
||||||
if(m_mode=="JT9+JT65") on_actionJT9_JT65_triggered();
|
if(m_mode=="JT9+JT65") on_actionJT9_JT65_triggered();
|
||||||
|
|
||||||
@ -461,6 +468,10 @@ void MainWindow::writeSettings()
|
|||||||
m_settings->setValue("TxFirst",m_txFirst);
|
m_settings->setValue("TxFirst",m_txFirst);
|
||||||
m_settings->setValue("DXcall",ui->dxCallEntry->text());
|
m_settings->setValue("DXcall",ui->dxCallEntry->text());
|
||||||
m_settings->setValue("DXgrid",ui->dxGridEntry->text());
|
m_settings->setValue("DXgrid",ui->dxGridEntry->text());
|
||||||
|
if(g_pAstro!=NULL and g_pAstro->isVisible()) {
|
||||||
|
m_astroGeom = g_pAstro->geometry();
|
||||||
|
m_settings->setValue("AstroGeom",m_astroGeom);
|
||||||
|
}
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
|
|
||||||
m_settings->beginGroup("Common");
|
m_settings->beginGroup("Common");
|
||||||
@ -469,6 +480,7 @@ void MainWindow::writeSettings()
|
|||||||
m_settings->setValue("IDint",m_idInt);
|
m_settings->setValue("IDint",m_idInt);
|
||||||
m_settings->setValue("PTTmethod",m_pttMethodIndex);
|
m_settings->setValue("PTTmethod",m_pttMethodIndex);
|
||||||
m_settings->setValue("PTTport",m_pttPort);
|
m_settings->setValue("PTTport",m_pttPort);
|
||||||
|
m_settings->setValue("AstroFont",m_astroFont);
|
||||||
m_settings->setValue("SaveDir",m_saveDir);
|
m_settings->setValue("SaveDir",m_saveDir);
|
||||||
m_settings->setValue("SoundInName", m_audioInputDevice.deviceName ());
|
m_settings->setValue("SoundInName", m_audioInputDevice.deviceName ());
|
||||||
m_settings->setValue("SoundOutName", m_audioOutputDevice.deviceName ());
|
m_settings->setValue("SoundOutName", m_audioOutputDevice.deviceName ());
|
||||||
@ -489,6 +501,7 @@ void MainWindow::writeSettings()
|
|||||||
m_settings->setValue("OutAttenuation", ui->outAttenuation->value ());
|
m_settings->setValue("OutAttenuation", ui->outAttenuation->value ());
|
||||||
m_settings->setValue("PSKReporter",m_pskReporter);
|
m_settings->setValue("PSKReporter",m_pskReporter);
|
||||||
m_settings->setValue("After73",m_After73);
|
m_settings->setValue("After73",m_After73);
|
||||||
|
m_settings->setValue("DisplayAstro",m_bAstroData);
|
||||||
m_settings->setValue("Macros",m_macro);
|
m_settings->setValue("Macros",m_macro);
|
||||||
//Band Settings
|
//Band Settings
|
||||||
m_settings->setValue("BandFrequencies",m_dFreq);
|
m_settings->setValue("BandFrequencies",m_dFreq);
|
||||||
@ -531,6 +544,11 @@ void MainWindow::writeSettings()
|
|||||||
m_settings->setValue("UseXIT",m_bXIT);
|
m_settings->setValue("UseXIT",m_bXIT);
|
||||||
m_settings->setValue("XIT",m_XIT);
|
m_settings->setValue("XIT",m_XIT);
|
||||||
m_settings->setValue("Plus2kHz",m_plus2kHz);
|
m_settings->setValue("Plus2kHz",m_plus2kHz);
|
||||||
|
m_settings->setValue("EMEbandIndex",m_EMEbandIndex);
|
||||||
|
m_settings->setValue("ToneMultIndex",m_toneMultIndex);
|
||||||
|
m_settings->setValue("DTmin",m_DTmin);
|
||||||
|
m_settings->setValue("DTmax",m_DTmax);
|
||||||
|
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -542,6 +560,7 @@ void MainWindow::readSettings()
|
|||||||
restoreState (m_settings->value ("state", saveState ()).toByteArray ());
|
restoreState (m_settings->value ("state", saveState ()).toByteArray ());
|
||||||
ui->dxCallEntry->setText(m_settings->value("DXcall","").toString());
|
ui->dxCallEntry->setText(m_settings->value("DXcall","").toString());
|
||||||
ui->dxGridEntry->setText(m_settings->value("DXgrid","").toString());
|
ui->dxGridEntry->setText(m_settings->value("DXgrid","").toString());
|
||||||
|
m_astroGeom = m_settings->value("AstroGeom", QRect(71,390,227,403)).toRect();
|
||||||
m_path = m_settings->value("MRUdir", m_appDir + "/save").toString();
|
m_path = m_settings->value("MRUdir", m_appDir + "/save").toString();
|
||||||
m_txFirst = m_settings->value("TxFirst",false).toBool();
|
m_txFirst = m_settings->value("TxFirst",false).toBool();
|
||||||
ui->txFirstCheckBox->setChecked(m_txFirst);
|
ui->txFirstCheckBox->setChecked(m_txFirst);
|
||||||
@ -554,6 +573,7 @@ void MainWindow::readSettings()
|
|||||||
m_idInt=m_settings->value("IDint",0).toInt();
|
m_idInt=m_settings->value("IDint",0).toInt();
|
||||||
m_pttMethodIndex=m_settings->value("PTTmethod",1).toInt();
|
m_pttMethodIndex=m_settings->value("PTTmethod",1).toInt();
|
||||||
m_pttPort=m_settings->value("PTTport",0).toInt();
|
m_pttPort=m_settings->value("PTTport",0).toInt();
|
||||||
|
m_astroFont=m_settings->value("AstroFont",18).toInt();
|
||||||
m_saveDir=m_settings->value("SaveDir",m_appDir + "/save").toString();
|
m_saveDir=m_settings->value("SaveDir",m_appDir + "/save").toString();
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -591,7 +611,7 @@ void MainWindow::readSettings()
|
|||||||
|
|
||||||
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=="JT9") ui->pbTxMode->setText("Tx JT9 @");
|
if(m_modeTx.mid(0,3)=="JT9") ui->pbTxMode->setText("Tx JT9 @");
|
||||||
if(m_modeTx=="JT65") ui->pbTxMode->setText("Tx JT65 #");
|
if(m_modeTx=="JT65") ui->pbTxMode->setText("Tx JT65 #");
|
||||||
ui->actionNone->setChecked(m_settings->value("SaveNone",true).toBool());
|
ui->actionNone->setChecked(m_settings->value("SaveNone",true).toBool());
|
||||||
ui->actionSave_decoded->setChecked(m_settings->value(
|
ui->actionSave_decoded->setChecked(m_settings->value(
|
||||||
@ -617,6 +637,7 @@ void MainWindow::readSettings()
|
|||||||
ui->actionMonitor_OFF_at_startup->setChecked(m_monitorStartOFF);
|
ui->actionMonitor_OFF_at_startup->setChecked(m_monitorStartOFF);
|
||||||
m_pskReporter=m_settings->value("PSKReporter",false).toBool();
|
m_pskReporter=m_settings->value("PSKReporter",false).toBool();
|
||||||
m_After73=m_settings->value("After73",false).toBool();
|
m_After73=m_settings->value("After73",false).toBool();
|
||||||
|
m_bAstroData=m_settings->value("DisplayAstro",false).toBool();
|
||||||
m_macro=m_settings->value("Macros","TNX 73 GL").toStringList();
|
m_macro=m_settings->value("Macros","TNX 73 GL").toStringList();
|
||||||
//Band Settings
|
//Band Settings
|
||||||
m_dFreq=m_settings->value("BandFrequencies","").toStringList();
|
m_dFreq=m_settings->value("BandFrequencies","").toStringList();
|
||||||
@ -676,6 +697,10 @@ void MainWindow::readSettings()
|
|||||||
m_XIT=m_settings->value("XIT",0).toInt();
|
m_XIT=m_settings->value("XIT",0).toInt();
|
||||||
m_plus2kHz=m_settings->value("Plus2kHz",false).toBool();
|
m_plus2kHz=m_settings->value("Plus2kHz",false).toBool();
|
||||||
ui->cbPlus2kHz->setChecked(m_plus2kHz);
|
ui->cbPlus2kHz->setChecked(m_plus2kHz);
|
||||||
|
m_EMEbandIndex=m_settings->value("EMEbandIndex",0).toInt();
|
||||||
|
m_toneMultIndex=m_settings->value("ToneMultIndex",0).toInt();
|
||||||
|
m_DTmin=m_settings->value("DTmin",-2.5).toFloat();
|
||||||
|
m_DTmax=m_settings->value("DTmax",5.0).toFloat();
|
||||||
m_settings->endGroup();
|
m_settings->endGroup();
|
||||||
|
|
||||||
// use these initialisation settings to tune the audio o/p bufefr
|
// use these initialisation settings to tune the audio o/p bufefr
|
||||||
@ -768,6 +793,7 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
|
|||||||
dlg.m_idInt=m_idInt;
|
dlg.m_idInt=m_idInt;
|
||||||
dlg.m_pttMethodIndex=m_pttMethodIndex;
|
dlg.m_pttMethodIndex=m_pttMethodIndex;
|
||||||
dlg.m_pttPort=m_pttPort;
|
dlg.m_pttPort=m_pttPort;
|
||||||
|
dlg.m_astroFont=m_astroFont;
|
||||||
dlg.m_saveDir=m_saveDir;
|
dlg.m_saveDir=m_saveDir;
|
||||||
dlg.m_audioInputDevice = m_audioInputDevice;
|
dlg.m_audioInputDevice = m_audioInputDevice;
|
||||||
dlg.m_audioOutputDevice = m_audioOutputDevice;
|
dlg.m_audioOutputDevice = m_audioOutputDevice;
|
||||||
@ -775,6 +801,7 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
|
|||||||
dlg.m_audioOutputChannel = m_audioOutputChannel;
|
dlg.m_audioOutputChannel = m_audioOutputChannel;
|
||||||
dlg.m_pskReporter=m_pskReporter;
|
dlg.m_pskReporter=m_pskReporter;
|
||||||
dlg.m_After73=m_After73;
|
dlg.m_After73=m_After73;
|
||||||
|
dlg.m_bAstroData=m_bAstroData;
|
||||||
dlg.m_macro=m_macro;
|
dlg.m_macro=m_macro;
|
||||||
dlg.m_dFreq=m_dFreq;
|
dlg.m_dFreq=m_dFreq;
|
||||||
dlg.m_antDescription=m_antDescription;
|
dlg.m_antDescription=m_antDescription;
|
||||||
@ -797,6 +824,10 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
|
|||||||
dlg.m_poll=m_poll;
|
dlg.m_poll=m_poll;
|
||||||
dlg.m_bSplit=m_bSplit;
|
dlg.m_bSplit=m_bSplit;
|
||||||
dlg.m_bXIT=m_bXIT;
|
dlg.m_bXIT=m_bXIT;
|
||||||
|
dlg.m_EMEbandIndex=m_EMEbandIndex;
|
||||||
|
dlg.m_toneMultIndex=m_toneMultIndex;
|
||||||
|
dlg.m_DTmin=m_DTmin;
|
||||||
|
dlg.m_DTmax=m_DTmax;
|
||||||
|
|
||||||
if(m_bRigOpen) {
|
if(m_bRigOpen) {
|
||||||
rig->close();
|
rig->close();
|
||||||
@ -815,6 +846,10 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
|
|||||||
m_idInt=dlg.m_idInt;
|
m_idInt=dlg.m_idInt;
|
||||||
m_pttMethodIndex=dlg.m_pttMethodIndex;
|
m_pttMethodIndex=dlg.m_pttMethodIndex;
|
||||||
m_pttPort=dlg.m_pttPort;
|
m_pttPort=dlg.m_pttPort;
|
||||||
|
m_astroFont=dlg.m_astroFont;
|
||||||
|
if(g_pAstro!=NULL and g_pAstro->isVisible()) {
|
||||||
|
g_pAstro->setFontSize(m_astroFont);
|
||||||
|
}
|
||||||
m_saveDir=dlg.m_saveDir;
|
m_saveDir=dlg.m_saveDir;
|
||||||
m_audioInputDevice = dlg.m_audioInputDevice;
|
m_audioInputDevice = dlg.m_audioInputDevice;
|
||||||
m_audioOutputDevice = dlg.m_audioOutputDevice;
|
m_audioOutputDevice = dlg.m_audioOutputDevice;
|
||||||
@ -841,18 +876,22 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
|
|||||||
m_bRTS=dlg.m_bRTS;
|
m_bRTS=dlg.m_bRTS;
|
||||||
m_pttData=dlg.m_pttData;
|
m_pttData=dlg.m_pttData;
|
||||||
m_poll=dlg.m_poll;
|
m_poll=dlg.m_poll;
|
||||||
|
m_EMEbandIndex=dlg.m_EMEbandIndex;
|
||||||
|
m_toneMultIndex=dlg.m_toneMultIndex;
|
||||||
|
if(m_mode=="JT9W-1") m_toneSpacing=pow(2,m_toneMultIndex)*12000.0/6912.0;
|
||||||
|
m_DTmin=dlg.m_DTmin;
|
||||||
|
m_DTmax=dlg.m_DTmax;
|
||||||
|
|
||||||
//Band Settings
|
//Band Settings
|
||||||
ui->bandComboBox->clear();
|
ui->bandComboBox->clear();
|
||||||
ui->bandComboBox->addItems(dlg.m_bandDescription);
|
ui->bandComboBox->addItems(dlg.m_bandDescription);
|
||||||
ui->bandComboBox->setCurrentIndex(m_band);
|
ui->bandComboBox->setCurrentIndex(m_band);
|
||||||
m_pskReporter=dlg.m_pskReporter;
|
m_pskReporter=dlg.m_pskReporter;
|
||||||
|
|
||||||
if(m_pskReporter) {
|
if(m_pskReporter) {
|
||||||
psk_Reporter->setLocalStation(m_myCall, m_myGrid, m_antDescription[m_band], "WSJT-X r" + rev.mid(6,4) );
|
psk_Reporter->setLocalStation(m_myCall, m_myGrid, m_antDescription[m_band], "WSJT-X r" + rev.mid(6,4) );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_After73=dlg.m_After73;
|
m_After73=dlg.m_After73;
|
||||||
|
m_bAstroData=dlg.m_bAstroData;
|
||||||
|
|
||||||
if(dlg.m_restartSoundIn) {
|
if(dlg.m_restartSoundIn) {
|
||||||
Q_EMIT stopAudioInputStream ();
|
Q_EMIT stopAudioInputStream ();
|
||||||
@ -1114,6 +1153,7 @@ void MainWindow::closeEvent(QCloseEvent * e)
|
|||||||
{
|
{
|
||||||
writeSettings ();
|
writeSettings ();
|
||||||
OnExit();
|
OnExit();
|
||||||
|
delete g_pAstro; //Is there a better way ?
|
||||||
QMainWindow::closeEvent (e);
|
QMainWindow::closeEvent (e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1160,6 +1200,20 @@ void MainWindow::on_actionWide_Waterfall_triggered() //Display Waterfalls
|
|||||||
m_wideGraph->show();
|
m_wideGraph->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_actionAstronomical_data_triggered()
|
||||||
|
{
|
||||||
|
if(g_pAstro==NULL) {
|
||||||
|
g_pAstro = new Astro(0);
|
||||||
|
g_pAstro->setWindowTitle("Astronomical Data");
|
||||||
|
Qt::WindowFlags flags = Qt::Dialog | Qt::WindowCloseButtonHint |
|
||||||
|
Qt::WindowMinimizeButtonHint;
|
||||||
|
g_pAstro->setWindowFlags(flags);
|
||||||
|
g_pAstro->setGeometry(m_astroGeom);
|
||||||
|
}
|
||||||
|
g_pAstro->setFontSize(m_astroFont);
|
||||||
|
g_pAstro->show();
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionOpen_triggered() //Open File
|
void MainWindow::on_actionOpen_triggered() //Open File
|
||||||
{
|
{
|
||||||
m_monitoring=false;
|
m_monitoring=false;
|
||||||
@ -1174,6 +1228,7 @@ void MainWindow::on_actionOpen_triggered() //Open File
|
|||||||
if(i>=0) {
|
if(i>=0) {
|
||||||
lab1->setStyleSheet("QLabel{background-color: #66ff66}");
|
lab1->setStyleSheet("QLabel{background-color: #66ff66}");
|
||||||
lab1->setText(" " + fname.mid(i,15) + " ");
|
lab1->setText(" " + fname.mid(i,15) + " ");
|
||||||
|
// lab1->setText(" " + fname + " ");
|
||||||
}
|
}
|
||||||
on_stopButton_clicked();
|
on_stopButton_clicked();
|
||||||
m_diskData=true;
|
m_diskData=true;
|
||||||
@ -1187,7 +1242,7 @@ void MainWindow::on_actionOpen_next_in_directory_triggered() //Open Next
|
|||||||
int i,len;
|
int i,len;
|
||||||
QFileInfo fi(m_path);
|
QFileInfo fi(m_path);
|
||||||
QStringList list;
|
QStringList list;
|
||||||
list= fi.dir().entryList().filter(".wav");
|
list= fi.dir().entryList().filter(".wav",Qt::CaseInsensitive);
|
||||||
for (i = 0; i < list.size()-1; ++i) {
|
for (i = 0; i < list.size()-1; ++i) {
|
||||||
if(i==list.size()-2) m_loopall=false;
|
if(i==list.size()-2) m_loopall=false;
|
||||||
len=list.at(i).length();
|
len=list.at(i).length();
|
||||||
@ -1375,8 +1430,9 @@ void MainWindow::decode() //decode()
|
|||||||
jt9com_.ntxmode=9;
|
jt9com_.ntxmode=9;
|
||||||
if(m_modeTx=="JT65") jt9com_.ntxmode=65;
|
if(m_modeTx=="JT65") jt9com_.ntxmode=65;
|
||||||
jt9com_.nmode=9;
|
jt9com_.nmode=9;
|
||||||
|
if(m_mode=="JT9W-1") jt9com_.nmode=91;
|
||||||
if(m_mode=="JT65") jt9com_.nmode=65;
|
if(m_mode=="JT65") jt9com_.nmode=65;
|
||||||
if(m_mode=="JT9+JT65") jt9com_.nmode=9+65;
|
if(m_mode=="JT9+JT65") jt9com_.nmode=9+65; // = 74
|
||||||
jt9com_.ntrperiod=m_TRperiod;
|
jt9com_.ntrperiod=m_TRperiod;
|
||||||
m_nsave=0;
|
m_nsave=0;
|
||||||
if(m_saveDecoded) m_nsave=2;
|
if(m_saveDecoded) m_nsave=2;
|
||||||
@ -1406,6 +1462,7 @@ void MainWindow::jt9_error(QProcess::ProcessError e)
|
|||||||
{
|
{
|
||||||
if(!m_killAll) {
|
if(!m_killAll) {
|
||||||
msgBox("Error starting or running\n" + m_appDir + "/jt9 -s");
|
msgBox("Error starting or running\n" + m_appDir + "/jt9 -s");
|
||||||
|
qDebug() << e; // silence compiler warning
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1758,6 +1815,11 @@ void MainWindow::guiUpdate()
|
|||||||
|
|
||||||
if(nsec != m_sec0) { //Once per second
|
if(nsec != m_sec0) { //Once per second
|
||||||
QDateTime t = QDateTime::currentDateTimeUtc();
|
QDateTime t = QDateTime::currentDateTimeUtc();
|
||||||
|
int fQSO=125;
|
||||||
|
m_azelDir=m_appDir;
|
||||||
|
if(g_pAstro!=NULL) g_pAstro->astroUpdate(t, m_myGrid, m_hisGrid, fQSO,
|
||||||
|
m_setftx, m_txFreq, m_azelDir);
|
||||||
|
|
||||||
if(m_transmitting) {
|
if(m_transmitting) {
|
||||||
if(nsendingsh==1) {
|
if(nsendingsh==1) {
|
||||||
lab1->setStyleSheet("QLabel{background-color: #66ffff}");
|
lab1->setStyleSheet("QLabel{background-color: #66ffff}");
|
||||||
@ -1807,8 +1869,13 @@ void MainWindow::guiUpdate()
|
|||||||
void MainWindow::startTx2()
|
void MainWindow::startTx2()
|
||||||
{
|
{
|
||||||
if (!m_modulator.isActive ()) {
|
if (!m_modulator.isActive ()) {
|
||||||
QString t=ui->tx6->text();
|
m_fSpread=0.0;
|
||||||
double snr=t.mid(1,5).toDouble();
|
double snr=99.0;
|
||||||
|
QString t=ui->tx5->text();
|
||||||
|
if(t.mid(0,1)=="#") m_fSpread=t.mid(1,5).toDouble();
|
||||||
|
m_modulator.setWide9(m_toneSpacing, m_fSpread);
|
||||||
|
t=ui->tx6->text();
|
||||||
|
if(t.mid(0,1)=="#") snr=t.mid(1,5).toDouble();
|
||||||
if(snr>0.0 or snr < -50.0) snr=99.0;
|
if(snr>0.0 or snr < -50.0) snr=99.0;
|
||||||
transmit (snr);
|
transmit (snr);
|
||||||
signalMeter->setValue(0);
|
signalMeter->setValue(0);
|
||||||
@ -2472,6 +2539,7 @@ void MainWindow::on_actionJT9_1_triggered()
|
|||||||
m_TRperiod=60;
|
m_TRperiod=60;
|
||||||
m_nsps=6912;
|
m_nsps=6912;
|
||||||
m_hsymStop=173;
|
m_hsymStop=173;
|
||||||
|
m_toneSpacing=0.0;
|
||||||
lab2->setStyleSheet("QLabel{background-color: #ff6ec7}");
|
lab2->setStyleSheet("QLabel{background-color: #ff6ec7}");
|
||||||
lab2->setText(m_mode);
|
lab2->setText(m_mode);
|
||||||
ui->actionJT9_1->setChecked(true);
|
ui->actionJT9_1->setChecked(true);
|
||||||
@ -2481,6 +2549,24 @@ void MainWindow::on_actionJT9_1_triggered()
|
|||||||
ui->pbTxMode->setEnabled(false);
|
ui->pbTxMode->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_actionJT9W_1_triggered()
|
||||||
|
{
|
||||||
|
m_mode="JT9W-1";
|
||||||
|
if(m_modeTx!="JT9") on_pbTxMode_clicked();
|
||||||
|
statusChanged();
|
||||||
|
m_TRperiod=60;
|
||||||
|
m_nsps=6912;
|
||||||
|
m_hsymStop=173;
|
||||||
|
m_toneSpacing=pow(2,m_toneMultIndex)*12000.0/6912.0;
|
||||||
|
lab2->setStyleSheet("QLabel{background-color: #ff6ec7}");
|
||||||
|
lab2->setText(m_mode);
|
||||||
|
ui->actionJT9W_1->setChecked(true);
|
||||||
|
m_wideGraph->setPeriod(m_TRperiod,m_nsps);
|
||||||
|
m_wideGraph->setMode(m_mode);
|
||||||
|
m_wideGraph->setModeTx(m_modeTx);
|
||||||
|
ui->pbTxMode->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionJT65_triggered()
|
void MainWindow::on_actionJT65_triggered()
|
||||||
{
|
{
|
||||||
m_mode="JT65";
|
m_mode="JT65";
|
||||||
@ -3066,13 +3152,18 @@ void MainWindow::transmit (double snr)
|
|||||||
{
|
{
|
||||||
if (m_modeTx == "JT65")
|
if (m_modeTx == "JT65")
|
||||||
{
|
{
|
||||||
Q_EMIT sendMessage (NUM_JT65_SYMBOLS, 4096.0 * 12000.0 / 11025.0, m_txFreq - (m_bSplit || m_bXIT ? m_XIT : 0), m_audioOutputChannel, true, snr);
|
Q_EMIT sendMessage (NUM_JT65_SYMBOLS, 4096.0 * 12000.0 / 11025.0,
|
||||||
|
m_txFreq - (m_bSplit || m_bXIT ? m_XIT : 0),
|
||||||
|
m_audioOutputChannel, true, snr);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Q_EMIT sendMessage (NUM_JT9_SYMBOLS, m_nsps, m_txFreq - (m_bSplit || m_bXIT ? m_XIT : 0), m_audioOutputChannel, true, snr);
|
Q_EMIT sendMessage (NUM_JT9_SYMBOLS, m_nsps,
|
||||||
|
m_txFreq - (m_bSplit || m_bXIT ? m_XIT : 0),
|
||||||
|
m_audioOutputChannel, true, snr);
|
||||||
}
|
}
|
||||||
Q_EMIT startAudioOutputStream (m_audioOutputDevice, AudioDevice::Mono == m_audioOutputChannel ? 1 : 2, m_msAudioOutputBuffered);
|
Q_EMIT startAudioOutputStream (m_audioOutputDevice,
|
||||||
|
AudioDevice::Mono == m_audioOutputChannel ? 1 : 2, m_msAudioOutputBuffered);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_outAttenuation_valueChanged (int a)
|
void MainWindow::on_outAttenuation_valueChanged (int a)
|
||||||
|
13
mainwindow.h
13
mainwindow.h
@ -179,8 +179,10 @@ private slots:
|
|||||||
void on_actionTx2QSO_triggered(bool checked);
|
void on_actionTx2QSO_triggered(bool checked);
|
||||||
void on_cbPlus2kHz_toggled(bool checked);
|
void on_cbPlus2kHz_toggled(bool checked);
|
||||||
void on_outAttenuation_valueChanged (int);
|
void on_outAttenuation_valueChanged (int);
|
||||||
|
void on_actionAstronomical_data_triggered();
|
||||||
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 getpfx();
|
||||||
|
void on_actionJT9W_1_triggered();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_SIGNAL void startAudioOutputStream (QAudioDeviceInfo, unsigned channels, unsigned msBuffered);
|
Q_SIGNAL void startAudioOutputStream (QAudioDeviceInfo, unsigned channels, unsigned msBuffered);
|
||||||
@ -210,6 +212,11 @@ private:
|
|||||||
QScopedPointer<LogQSO> m_logDlg;
|
QScopedPointer<LogQSO> m_logDlg;
|
||||||
|
|
||||||
double m_dialFreq;
|
double m_dialFreq;
|
||||||
|
double m_toneSpacing;
|
||||||
|
double m_fSpread;
|
||||||
|
|
||||||
|
float m_DTmin;
|
||||||
|
float m_DTmax;
|
||||||
|
|
||||||
qint64 m_msErase;
|
qint64 m_msErase;
|
||||||
qint64 m_secBandChanged;
|
qint64 m_secBandChanged;
|
||||||
@ -266,6 +273,9 @@ private:
|
|||||||
qint32 m_poll;
|
qint32 m_poll;
|
||||||
qint32 m_fMax;
|
qint32 m_fMax;
|
||||||
qint32 m_bad;
|
qint32 m_bad;
|
||||||
|
qint32 m_EMEbandIndex;
|
||||||
|
qint32 m_toneMultIndex;
|
||||||
|
qint32 m_astroFont;
|
||||||
|
|
||||||
bool m_monitoring;
|
bool m_monitoring;
|
||||||
bool m_btxok; //True if OK to transmit
|
bool m_btxok; //True if OK to transmit
|
||||||
@ -318,6 +328,7 @@ private:
|
|||||||
bool m_bSplit;
|
bool m_bSplit;
|
||||||
bool m_bXIT;
|
bool m_bXIT;
|
||||||
bool m_plus2kHz;
|
bool m_plus2kHz;
|
||||||
|
bool m_bAstroData;
|
||||||
|
|
||||||
char m_decoded[80];
|
char m_decoded[80];
|
||||||
|
|
||||||
@ -376,6 +387,7 @@ private:
|
|||||||
QString m_cmnd;
|
QString m_cmnd;
|
||||||
QString m_msgSent0;
|
QString m_msgSent0;
|
||||||
QString m_fileToSave;
|
QString m_fileToSave;
|
||||||
|
QString m_azelDir;
|
||||||
|
|
||||||
QStringList m_macro;
|
QStringList m_macro;
|
||||||
QStringList m_dFreq; // per band frequency in MHz as a string
|
QStringList m_dFreq; // per band frequency in MHz as a string
|
||||||
@ -388,6 +400,7 @@ private:
|
|||||||
QHash<QString,bool> m_sfx;
|
QHash<QString,bool> m_sfx;
|
||||||
|
|
||||||
QDateTime m_dateTimeQSO;
|
QDateTime m_dateTimeQSO;
|
||||||
|
QRect m_astroGeom;
|
||||||
|
|
||||||
QSharedMemory *mem_jt9;
|
QSharedMemory *mem_jt9;
|
||||||
// Multiple instances:
|
// Multiple instances:
|
||||||
|
@ -2135,28 +2135,6 @@ p, li { white-space: pre-wrap; }
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="7">
|
|
||||||
<widget class="QPushButton" name="pbR2T">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>48</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Set Tx frequency to Rx Frequency</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Tx<Rx</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="7">
|
<item row="3" column="7">
|
||||||
<widget class="QPushButton" name="pbT2R">
|
<widget class="QPushButton" name="pbT2R">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -2179,6 +2157,28 @@ p, li { white-space: pre-wrap; }
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="7">
|
||||||
|
<widget class="QPushButton" name="pbR2T">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>48</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Set Tx frequency to Rx Frequency</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Tx<Rx</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="4" column="6">
|
<item row="4" column="6">
|
||||||
<widget class="QCheckBox" name="cbTxLock">
|
<widget class="QCheckBox" name="cbTxLock">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -2306,6 +2306,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
</property>
|
</property>
|
||||||
<addaction name="actionWide_Waterfall"/>
|
<addaction name="actionWide_Waterfall"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionAstronomical_data"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menuDecode">
|
<widget class="QMenu" name="menuDecode">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
@ -2340,6 +2341,7 @@ p, li { white-space: pre-wrap; }
|
|||||||
<addaction name="actionJT9_1"/>
|
<addaction name="actionJT9_1"/>
|
||||||
<addaction name="actionJT65"/>
|
<addaction name="actionJT65"/>
|
||||||
<addaction name="actionJT9_JT65"/>
|
<addaction name="actionJT9_JT65"/>
|
||||||
|
<addaction name="actionJT9W_1"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
<addaction name="menuSetup"/>
|
<addaction name="menuSetup"/>
|
||||||
@ -2652,6 +2654,19 @@ p, li { white-space: pre-wrap; }
|
|||||||
<string>Show DXCC entity and worked B4 status</string>
|
<string>Show DXCC entity and worked B4 status</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionAstronomical_data">
|
||||||
|
<property name="text">
|
||||||
|
<string>Astronomical data</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionJT9W_1">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>JT9W-1</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
<action name="actionShort_list_of_add_on_prefixes_and_suffixes">
|
<action name="actionShort_list_of_add_on_prefixes_and_suffixes">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Short list of add-on prefixes and suffixes</string>
|
<string>Short list of add-on prefixes and suffixes</string>
|
||||||
|
18
plotter.cpp
18
plotter.cpp
@ -96,7 +96,11 @@ void CPlotter::draw(float swide[]) //draw()
|
|||||||
m_2DPixmap = m_OverlayPixmap.copy(0,0,m_w,m_h2);
|
m_2DPixmap = m_OverlayPixmap.copy(0,0,m_w,m_h2);
|
||||||
QPainter painter2D(&m_2DPixmap);
|
QPainter painter2D(&m_2DPixmap);
|
||||||
|
|
||||||
painter2D.setPen(Qt::green);
|
if(m_bLinearAvg) {
|
||||||
|
painter2D.setPen(Qt::yellow);
|
||||||
|
} else {
|
||||||
|
painter2D.setPen(Qt::green);
|
||||||
|
}
|
||||||
|
|
||||||
QPoint LineBuf[MAX_SCREENSIZE];
|
QPoint LineBuf[MAX_SCREENSIZE];
|
||||||
j=0;
|
j=0;
|
||||||
@ -122,8 +126,18 @@ void CPlotter::draw(float swide[]) //draw()
|
|||||||
sum+=jt9com_.savg[j++];
|
sum+=jt9com_.savg[j++];
|
||||||
}
|
}
|
||||||
y2=gain*6.0*log10(sum/m_binsPerPixel) - 10.0;
|
y2=gain*6.0*log10(sum/m_binsPerPixel) - 10.0;
|
||||||
|
y2 += m_plotZero;
|
||||||
}
|
}
|
||||||
y2 += m_plotZero;
|
|
||||||
|
if(m_bLinearAvg) {
|
||||||
|
float sum=0.0;
|
||||||
|
int j=j0+m_binsPerPixel*i;
|
||||||
|
for(int k=0; k<m_binsPerPixel; k++) {
|
||||||
|
sum+=jt9w_.syellow[j++];
|
||||||
|
}
|
||||||
|
y2=sum/m_binsPerPixel * (0.2*m_h/50.0) - 20.0;
|
||||||
|
}
|
||||||
|
|
||||||
if(i==iz-1) painter2D.drawPolyline(LineBuf,j);
|
if(i==iz-1) painter2D.drawPolyline(LineBuf,j);
|
||||||
LineBuf[j].setX(i);
|
LineBuf[j].setX(i);
|
||||||
LineBuf[j].setY(m_h-(y2+0.8*m_h));
|
LineBuf[j].setY(m_h-(y2+0.8*m_h));
|
||||||
|
@ -33,6 +33,7 @@ public:
|
|||||||
|
|
||||||
bool m_bCurrent;
|
bool m_bCurrent;
|
||||||
bool m_bCumulative;
|
bool m_bCumulative;
|
||||||
|
bool m_bLinearAvg;
|
||||||
bool m_lockTxFreq;
|
bool m_lockTxFreq;
|
||||||
|
|
||||||
float m_fSpan;
|
float m_fSpan;
|
||||||
|
15
soundout.cpp
15
soundout.cpp
@ -52,11 +52,13 @@ SoundOutput::SoundOutput (QIODevice * source)
|
|||||||
Q_ASSERT (source);
|
Q_ASSERT (source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundOutput::startStream (QAudioDeviceInfo const& device, unsigned channels, unsigned msBuffered)
|
void SoundOutput::startStream (QAudioDeviceInfo const& device, \
|
||||||
|
unsigned channels, unsigned msBuffered)
|
||||||
{
|
{
|
||||||
Q_ASSERT (0 < channels && channels < 3);
|
Q_ASSERT (0 < channels && channels < 3);
|
||||||
|
|
||||||
if (!m_stream || device != m_currentDevice || channels != static_cast<unsigned> (m_stream->format ().channelCount ()))
|
if (!m_stream || device != m_currentDevice ||
|
||||||
|
channels != static_cast<unsigned> (m_stream->format ().channelCount ()))
|
||||||
{
|
{
|
||||||
QAudioFormat format (device.preferredFormat ());
|
QAudioFormat format (device.preferredFormat ());
|
||||||
|
|
||||||
@ -79,9 +81,11 @@ void SoundOutput::startStream (QAudioDeviceInfo const& device, unsigned channels
|
|||||||
m_stream->setVolume (m_volume);
|
m_stream->setVolume (m_volume);
|
||||||
m_stream->setNotifyInterval(100);
|
m_stream->setNotifyInterval(100);
|
||||||
|
|
||||||
connect (m_stream.data(), &QAudioOutput::stateChanged, this, &SoundOutput::handleStateChanged);
|
connect (m_stream.data(), &QAudioOutput::stateChanged, this, \
|
||||||
|
&SoundOutput::handleStateChanged);
|
||||||
|
|
||||||
m_currentDevice = device;
|
m_currentDevice = device;
|
||||||
|
// qDebug() << "A" << m_volume << m_stream->notifyInterval();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -97,7 +101,10 @@ void SoundOutput::startStream (QAudioDeviceInfo const& device, unsigned channels
|
|||||||
// we have to set this before every start on the stream because the
|
// we have to set this before every start on the stream because the
|
||||||
// Windows implementation seems to forget the buffer size after a
|
// Windows implementation seems to forget the buffer size after a
|
||||||
// stop.
|
// stop.
|
||||||
m_stream->setBufferSize (m_stream->format ().bytesForDuration ((msBuffered ? msBuffered : MS_BUFFERED) * 1000));
|
m_stream->setBufferSize (m_stream->format().bytesForDuration(
|
||||||
|
(msBuffered ? msBuffered : MS_BUFFERED) * 1000));
|
||||||
|
// qDebug() << "B" << m_stream->bufferSize() << m_stream->periodSize() << m_stream->notifyInterval();
|
||||||
|
|
||||||
m_stream->start (m_source);
|
m_stream->start (m_source);
|
||||||
audioError ();
|
audioError ();
|
||||||
}
|
}
|
||||||
|
@ -44,8 +44,10 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
|
|||||||
ui->waterfallAvgSpinBox->setValue(m_waterfallAvg);
|
ui->waterfallAvgSpinBox->setValue(m_waterfallAvg);
|
||||||
ui->widePlot->m_bCurrent=m_settings->value("Current",false).toBool();
|
ui->widePlot->m_bCurrent=m_settings->value("Current",false).toBool();
|
||||||
ui->widePlot->m_bCumulative=m_settings->value("Cumulative",true).toBool();
|
ui->widePlot->m_bCumulative=m_settings->value("Cumulative",true).toBool();
|
||||||
|
ui->widePlot->m_bLinearAvg=m_settings->value("LinearAvg",false).toBool();
|
||||||
if(ui->widePlot->m_bCurrent) ui->spec2dComboBox->setCurrentIndex(0);
|
if(ui->widePlot->m_bCurrent) ui->spec2dComboBox->setCurrentIndex(0);
|
||||||
if(ui->widePlot->m_bCumulative) ui->spec2dComboBox->setCurrentIndex(1);
|
if(ui->widePlot->m_bCumulative) ui->spec2dComboBox->setCurrentIndex(1);
|
||||||
|
if(ui->widePlot->m_bLinearAvg) ui->spec2dComboBox->setCurrentIndex(2);
|
||||||
int nbpp=m_settings->value("BinsPerPixel",2).toInt();
|
int nbpp=m_settings->value("BinsPerPixel",2).toInt();
|
||||||
ui->widePlot->setBinsPerPixel(nbpp);
|
ui->widePlot->setBinsPerPixel(nbpp);
|
||||||
ui->widePlot->setStartFreq(m_settings->value("StartFreq",0).toInt());
|
ui->widePlot->setStartFreq(m_settings->value("StartFreq",0).toInt());
|
||||||
@ -94,6 +96,7 @@ void WideGraph::saveSettings()
|
|||||||
m_settings->setValue ("WaterfallAvg", ui->waterfallAvgSpinBox->value ());
|
m_settings->setValue ("WaterfallAvg", ui->waterfallAvgSpinBox->value ());
|
||||||
m_settings->setValue ("Current", ui->widePlot->m_bCurrent);
|
m_settings->setValue ("Current", ui->widePlot->m_bCurrent);
|
||||||
m_settings->setValue ("Cumulative", ui->widePlot->m_bCumulative);
|
m_settings->setValue ("Cumulative", ui->widePlot->m_bCumulative);
|
||||||
|
m_settings->setValue ("LinearAvg", ui->widePlot->m_bLinearAvg);
|
||||||
m_settings->setValue ("BinsPerPixel", ui->widePlot->binsPerPixel ());
|
m_settings->setValue ("BinsPerPixel", ui->widePlot->binsPerPixel ());
|
||||||
m_settings->setValue ("StartFreq", ui->widePlot->startFreq ());
|
m_settings->setValue ("StartFreq", ui->widePlot->startFreq ());
|
||||||
m_settings->setValue ("WaterfallPalette", m_waterfallPalette);
|
m_settings->setValue ("WaterfallPalette", m_waterfallPalette);
|
||||||
@ -278,8 +281,10 @@ void WideGraph::on_spec2dComboBox_currentIndexChanged(const QString &arg1)
|
|||||||
{
|
{
|
||||||
ui->widePlot->m_bCurrent=false;
|
ui->widePlot->m_bCurrent=false;
|
||||||
ui->widePlot->m_bCumulative=false;
|
ui->widePlot->m_bCumulative=false;
|
||||||
|
ui->widePlot->m_bLinearAvg=false;
|
||||||
if(arg1=="Current") ui->widePlot->m_bCurrent=true;
|
if(arg1=="Current") ui->widePlot->m_bCurrent=true;
|
||||||
if(arg1=="Cumulative") ui->widePlot->m_bCumulative=true;
|
if(arg1=="Cumulative") ui->widePlot->m_bCumulative=true;
|
||||||
|
if(arg1=="Linear Avg") ui->widePlot->m_bLinearAvg=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void WideGraph::on_fMinSpinBox_valueChanged(int n)
|
void WideGraph::on_fMinSpinBox_valueChanged(int n)
|
||||||
|
@ -70,6 +70,11 @@
|
|||||||
<string>Cumulative</string>
|
<string>Cumulative</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Linear Avg</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
<item row="1" column="2">
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
AppName=wsjtx
|
AppName=wsjtx
|
||||||
AppVerName=wsjtx Version 1.3 r3673
|
AppVerName=wsjtx Version 1.3 r3673
|
||||||
AppCopyright=Copyright (C) 2001-2014 by Joe Taylor, K1JT
|
AppCopyright=Copyright (C) 2001-2014 by Joe Taylor, K1JT
|
||||||
DefaultDirName=c:\wsjtx
|
DefaultDirName=c:\wsjtx_w
|
||||||
DefaultGroupName=wsjtx
|
DefaultGroupName=wsjtx_w
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "c:\Users\joe\wsjt\wsjtx_install\wsjtx.exe"; DestDir: "{app}"
|
Source: "c:\Users\joe\wsjt\wsjtx_install\wsjtx.exe"; DestDir: "{app}"
|
||||||
@ -25,6 +25,6 @@ Source: "c:\Users\joe\wsjt\wsjtx_install\platforms\qwindows.dll"; DestDir
|
|||||||
Source: "c:\Users\joe\wsjt\wsjtx_install\Palettes\*.pal"; DestDir: "{app}\Palettes";
|
Source: "c:\Users\joe\wsjt\wsjtx_install\Palettes\*.pal"; DestDir: "{app}\Palettes";
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{group}\wsjtx1.3"; Filename: "{app}\wsjtx.exe"; WorkingDir: {app}; IconFilename: {app}\wsjt.ico
|
Name: "{group}\wsjtx_w"; Filename: "{app}\wsjtx.exe"; WorkingDir: {app}; IconFilename: {app}\wsjt.ico
|
||||||
Name: "{userdesktop}\wsjtx1.3"; Filename: "{app}\wsjtx.exe"; WorkingDir: {app}; IconFilename: {app}\wsjt.ico
|
Name: "{userdesktop}\wsjtx_w"; Filename: "{app}\wsjtx.exe"; WorkingDir: {app}; IconFilename: {app}\wsjt.ico
|
||||||
|
|
||||||
|
51
wsjtx.pro
51
wsjtx.pro
@ -37,47 +37,27 @@ QMAKE_EXTRA_COMPILERS += gfortran
|
|||||||
#
|
#
|
||||||
# Order matters here as the link is in this order so referrers need to be after referred
|
# Order matters here as the link is in this order so referrers need to be after referred
|
||||||
#
|
#
|
||||||
SOURCES += \
|
SOURCES += logbook/adif.cpp logbook/countrydat.cpp astro.cpp \
|
||||||
logbook/adif.cpp \
|
logbook/countriesworked.cpp logbook/logbook.cpp rigclass.cpp \
|
||||||
logbook/countrydat.cpp \
|
psk_reporter.cpp Modulator.cpp Detector.cpp logqso.cpp \
|
||||||
logbook/countriesworked.cpp \
|
displaytext.cpp getfile.cpp soundout.cpp soundin.cpp \
|
||||||
logbook/logbook.cpp \
|
meterwidget.cpp signalmeter.cpp plotter.cpp widegraph.cpp \
|
||||||
rigclass.cpp \
|
devsetup.cpp about.cpp mainwindow.cpp main.cpp decodedtext.cpp
|
||||||
psk_reporter.cpp \
|
|
||||||
Modulator.cpp \
|
|
||||||
Detector.cpp \
|
|
||||||
logqso.cpp \
|
|
||||||
displaytext.cpp \
|
|
||||||
getfile.cpp \
|
|
||||||
soundout.cpp \
|
|
||||||
soundin.cpp \
|
|
||||||
meterwidget.cpp \
|
|
||||||
signalmeter.cpp \
|
|
||||||
plotter.cpp \
|
|
||||||
widegraph.cpp \
|
|
||||||
devsetup.cpp \
|
|
||||||
about.cpp \
|
|
||||||
mainwindow.cpp \
|
|
||||||
main.cpp \
|
|
||||||
decodedtext.cpp
|
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
SOURCES += killbyname.cpp
|
SOURCES += killbyname.cpp
|
||||||
}
|
}
|
||||||
|
|
||||||
HEADERS += mainwindow.h plotter.h soundin.h soundout.h \
|
HEADERS += mainwindow.h plotter.h soundin.h soundout.h astro.h \
|
||||||
about.h devsetup.h widegraph.h getfile.h \
|
about.h devsetup.h widegraph.h getfile.h \
|
||||||
commons.h sleep.h displaytext.h logqso.h \
|
commons.h sleep.h displaytext.h logqso.h \
|
||||||
AudioDevice.hpp Detector.hpp Modulator.hpp psk_reporter.h rigclass.h \
|
AudioDevice.hpp Detector.hpp Modulator.hpp \
|
||||||
signalmeter.h \
|
psk_reporter.h rigclass.h signalmeter.h \
|
||||||
meterwidget.h \
|
meterwidget.h logbook/logbook.h logbook/countrydat.h \
|
||||||
logbook/logbook.h \
|
logbook/countriesworked.h logbook/adif.h
|
||||||
logbook/countrydat.h \
|
|
||||||
logbook/countriesworked.h \
|
|
||||||
logbook/adif.h
|
|
||||||
|
|
||||||
|
|
||||||
FORMS += mainwindow.ui about.ui devsetup.ui widegraph.ui \
|
FORMS += mainwindow.ui about.ui devsetup.ui widegraph.ui astro.ui \
|
||||||
logqso.ui
|
logqso.ui
|
||||||
|
|
||||||
RC_FILE = wsjtx.rc
|
RC_FILE = wsjtx.rc
|
||||||
@ -89,10 +69,11 @@ LIBS += -lfftw3f `$$F90 -print-file-name=libgfortran.so`
|
|||||||
}
|
}
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
INCLUDEPATH += ../../hamlib-1.2.15.3/include
|
INCLUDEPATH += /wsjt-env//hamlib/include
|
||||||
LIBS += ../../hamlib-1.2.15.3/src/.libs/libhamlib.dll.a
|
LIBS += /wsjt-env/hamlib/lib/gcc/libhamlib.dll.a
|
||||||
#LIBS += ../../hamlib-1.2.15.3/lib/gcc/libhamlib.dll.a
|
#LIBS += ../wsjtx/lib/libjt9.a
|
||||||
LIBS += ../wsjtx/lib/libjt9.a
|
LIBS += ../wsjtx/lib/libjt9.a
|
||||||
|
LIBS += ../wsjtx/lib/libastro.a
|
||||||
LIBS += ../wsjtx/libfftw3f_win.a
|
LIBS += ../wsjtx/libfftw3f_win.a
|
||||||
LIBS += ../wsjtx/libpskreporter.a
|
LIBS += ../wsjtx/libpskreporter.a
|
||||||
LIBS += ../wsjtx/libHRDInterface001.a
|
LIBS += ../wsjtx/libHRDInterface001.a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user