mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-10-31 15:47:10 -04:00
a576aa3c06
Some rigs either do not honour some CAT commands while transmitting or interpret them incorrectly. To deal with this a settings option to allow TX frequency changes while transmitting has been added with a default value of off. Any UI actions that directly or indirectly change the TX frequency are guarded according to this new option. As well as this band changes and use of the +2kHz check box are disabled and guarded respectively in transmit mode. Mode changes via the menu are now disabled while transmitting. When TX frequency changes are allowed; frequency changes are correctly implemented while in tune mode. Double clicking decodes while transmitting now correctly regenerate and change the message sent on the fly. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4349 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
85 lines
1.9 KiB
C++
85 lines
1.9 KiB
C++
#ifndef MODULATOR_HPP__
|
|
#define MODULATOR_HPP__
|
|
|
|
#include <QAudio>
|
|
|
|
#include "AudioDevice.hpp"
|
|
|
|
class SoundOutput;
|
|
|
|
//
|
|
// Input device that generates PCM audio frames that encode a message
|
|
// and an optional CW ID.
|
|
//
|
|
// Output can be muted while underway, preserving waveform timing when
|
|
// transmission is resumed.
|
|
//
|
|
class Modulator
|
|
: public AudioDevice
|
|
{
|
|
Q_OBJECT;
|
|
|
|
public:
|
|
enum ModulatorState {Synchronizing, Active, Idle};
|
|
|
|
Modulator (unsigned frameRate, unsigned periodLengthInSeconds, QObject * parent = nullptr);
|
|
|
|
void close () override;
|
|
|
|
bool isTuning () const {return m_tuning;}
|
|
unsigned frequency () const {return m_frequency;}
|
|
bool isActive () const {return m_state != Idle;}
|
|
void setSpread(double s) {m_fSpread=s;}
|
|
|
|
Q_SLOT void start (unsigned symbolsLength, double framesPerSymbol, unsigned frequency, double toneSpacing, SoundOutput *, Channel = Mono, bool synchronize = true, double dBSNR = 99.);
|
|
Q_SLOT void stop (bool quick = false);
|
|
Q_SLOT void tune (bool newState = true);
|
|
Q_SLOT void setFrequency (unsigned newFrequency) {m_frequency = newFrequency;}
|
|
Q_SIGNAL void stateChanged (ModulatorState) const;
|
|
|
|
protected:
|
|
qint64 readData (char * data, qint64 maxSize);
|
|
qint64 writeData (char const * /* data */, qint64 /* maxSize */)
|
|
{
|
|
return -1; // we don't consume data
|
|
}
|
|
|
|
private:
|
|
qint16 postProcessSample (qint16 sample) const;
|
|
|
|
SoundOutput * m_stream;
|
|
bool m_quickClose;
|
|
|
|
unsigned m_symbolsLength;
|
|
|
|
static double const m_twoPi;
|
|
static unsigned const m_nspd; // CW ID WPM factor
|
|
|
|
double m_phi;
|
|
double m_dphi;
|
|
double m_amp;
|
|
double m_nsps;
|
|
double volatile m_frequency;
|
|
double m_frequency0;
|
|
double m_snr;
|
|
double m_fac;
|
|
double m_toneSpacing;
|
|
double m_fSpread;
|
|
|
|
qint64 m_silentFrames;
|
|
|
|
unsigned m_frameRate;
|
|
unsigned m_period;
|
|
ModulatorState volatile m_state;
|
|
|
|
bool volatile m_tuning;
|
|
bool m_addNoise;
|
|
|
|
bool m_cwLevel;
|
|
unsigned m_ic;
|
|
unsigned m_isym0;
|
|
qint16 m_ramp;
|
|
};
|
|
|
|
#endif
|