mirror of
https://github.com/jtdx-project/jtdx
synced 2026-08-13 17:35:38 -04:00
428 lines
13 KiB
C++
428 lines
13 KiB
C++
#ifndef CONFIGURATION_HPP_
|
|
#define CONFIGURATION_HPP_
|
|
|
|
#include <QObject>
|
|
#include <QFont>
|
|
|
|
#include "Radio.hpp"
|
|
#include "IARURegions.hpp"
|
|
#include "AudioDevice.hpp"
|
|
#include "TransceiverFactory.hpp"
|
|
#include "Transceiver.hpp"
|
|
#include "JTDXDateTime.h"
|
|
|
|
#include "pimpl_h.hpp"
|
|
|
|
class QSettings;
|
|
class QWidget;
|
|
class QAudioDeviceInfo;
|
|
class QString;
|
|
class QDir;
|
|
class Bands;
|
|
class FrequencyList_v2;
|
|
class StationList;
|
|
class QStringListModel;
|
|
class QHostAddress;
|
|
|
|
//
|
|
// Class Configuration
|
|
//
|
|
// Encapsulates the control, access and, persistence of user defined
|
|
// settings for the wsjtx GUI. Setting values are accessed through a
|
|
// QDialog window containing concept orientated tab windows.
|
|
//
|
|
// Responsibilities
|
|
//
|
|
// Provides management of the CAT and PTT rig interfaces, providing
|
|
// control access via a minimal generic set of Qt slots and status
|
|
// updates via Qt signals. Internally the rig control capability is
|
|
// farmed out to a separate thread since many of the rig control
|
|
// functions are blocking.
|
|
//
|
|
// All user settings required by the wsjtx GUI are exposed through
|
|
// query methods. Settings only become visible once they have been
|
|
// accepted by the user which is done by clicking the "OK" button on
|
|
// the settings dialog.
|
|
//
|
|
// The QSettings instance passed to the constructor is used to read
|
|
// and write user settings.
|
|
//
|
|
// Pointers to three QAbstractItemModel objects are provided to give
|
|
// access to amateur band information, user working frequencies and,
|
|
// user operating band information. These porovide consistent data
|
|
// models that can be used in GUI lists or tables or simply queried
|
|
// for user defined bands, default operating frequencies and, station
|
|
// descriptions.
|
|
//
|
|
class Configuration final
|
|
: public QObject
|
|
{
|
|
Q_OBJECT;
|
|
Q_ENUMS (DataMode Type2MsgGen);
|
|
|
|
public:
|
|
using MODE = Transceiver::MODE;
|
|
using TransceiverState = Transceiver::TransceiverState;
|
|
using Frequency = Radio::Frequency;
|
|
using port_type = quint16;
|
|
|
|
enum DataMode {data_mode_none, data_mode_USB, data_mode_data};
|
|
enum Type2MsgGen {type_2_msg_1_full, type_2_msg_3_full, type_2_msg_5_only};
|
|
|
|
explicit Configuration (QSettings * settings, QWidget * parent = nullptr);
|
|
~Configuration ();
|
|
|
|
int exec ();
|
|
bool is_active () const;
|
|
|
|
QDir temp_dir () const;
|
|
QDir doc_dir () const;
|
|
QDir data_dir () const;
|
|
|
|
QAudioDeviceInfo const& audio_input_device () const;
|
|
AudioDevice::Channel audio_input_channel () const;
|
|
QAudioDeviceInfo const& audio_output_device () const;
|
|
AudioDevice::Channel audio_output_channel () const;
|
|
|
|
// These query methods should be used after a call to exec() to
|
|
// determine if either the audio input or audio output stream
|
|
// parameters have changed. The respective streams should be
|
|
// re-opened if they return true.
|
|
bool restart_audio_input () const;
|
|
bool restart_audio_output () const;
|
|
bool restart_tci () const;
|
|
QString my_callsign () const;
|
|
QString my_grid () const;
|
|
QString timeFrom () const;
|
|
QString content () const;
|
|
QString countries () const;
|
|
QString callsigns () const;
|
|
QFont decoded_text_font () const;
|
|
qint32 id_interval () const;
|
|
qint32 ntrials() const;
|
|
qint32 ntrials10() const;
|
|
qint32 ntrialsrxf10() const;
|
|
qint32 npreampass() const;
|
|
qint32 aggressive() const;
|
|
qint32 harmonicsdepth() const;
|
|
qint32 nsingdecatt() const;
|
|
qint32 ntopfreq65() const;
|
|
qint32 nAnswerCQCounter() const;
|
|
qint32 nAnswerInCallCounter() const;
|
|
qint32 nSentRReportCounter() const;
|
|
qint32 nSentRR7373Counter() const;
|
|
double txDelay() const;
|
|
bool fmaskact() const;
|
|
bool answerCQCount() const;
|
|
bool answerInCallCount() const;
|
|
bool sentRReportCount() const;
|
|
bool sentRR7373Count() const;
|
|
bool strictdirCQ() const;
|
|
bool halttxreplyother() const;
|
|
bool hidefree() const;
|
|
bool hide2ndHash() const;
|
|
bool hideOwnContinent() const;
|
|
bool showcq() const;
|
|
bool showcqrrr73() const;
|
|
bool showcq73() const;
|
|
bool enableContent() const;
|
|
bool enableCountryFilter() const;
|
|
bool enableCallsignFilter() const;
|
|
bool do_snr() const;
|
|
bool do_pwr() const;
|
|
bool rig_power() const;
|
|
bool rig_power_off() const;
|
|
bool rig_ptt_share() const;
|
|
bool tci_audio() const;
|
|
bool id_after_73 () const;
|
|
bool tx_QSY_allowed () const;
|
|
bool spot_to_psk_reporter () const;
|
|
bool spot_to_dxsummit () const;
|
|
bool prevent_spotting_false () const;
|
|
bool filterUDP () const;
|
|
bool send_to_eqsl () const;
|
|
QString eqsl_username () const;
|
|
QString eqsl_passwd () const;
|
|
QString eqsl_nickname () const;
|
|
bool usesched() const;
|
|
QString sched_hh_1 () const;
|
|
QString sched_mm_1 () const;
|
|
QString sched_band_1 () const;
|
|
bool sched_mix_1 () const;
|
|
QString sched_hh_2 () const;
|
|
QString sched_mm_2 () const;
|
|
QString sched_band_2 () const;
|
|
bool sched_mix_2 () const;
|
|
QString sched_hh_3 () const;
|
|
QString sched_mm_3 () const;
|
|
QString sched_band_3 () const;
|
|
bool sched_mix_3 () const;
|
|
QString sched_hh_4 () const;
|
|
QString sched_mm_4 () const;
|
|
QString sched_band_4 () const;
|
|
bool sched_mix_4 () const;
|
|
QString sched_hh_5 () const;
|
|
QString sched_mm_5 () const;
|
|
QString sched_band_5 () const;
|
|
bool sched_mix_5 () const;
|
|
bool monitor_off_at_startup () const;
|
|
bool monitor_last_used () const;
|
|
bool log_as_RTTY () const;
|
|
bool report_in_comments () const;
|
|
bool distance_in_comments () const;
|
|
bool prompt_to_log () const;
|
|
bool autolog () const;
|
|
bool insert_blank () const;
|
|
bool useDarkStyle () const;
|
|
bool countryName () const;
|
|
bool countryPrefix () const;
|
|
bool callNotif () const;
|
|
bool gridNotif () const;
|
|
bool otherMessagesMarker () const;
|
|
bool RR73Marker () const;
|
|
bool redMarker () const;
|
|
bool blueMarker () const;
|
|
bool hidehintMarker () const;
|
|
bool txtColor () const;
|
|
bool workedStriked () const;
|
|
bool workedUnderlined () const;
|
|
bool workedColor () const;
|
|
bool workedDontShow () const;
|
|
bool newCQZ () const;
|
|
bool newCQZBand () const;
|
|
bool newCQZBandMode () const;
|
|
bool newITUZ () const;
|
|
bool newITUZBand () const;
|
|
bool newITUZBandMode () const;
|
|
bool newDXCC () const;
|
|
bool newDXCCBand () const;
|
|
bool newDXCCBandMode () const;
|
|
bool newPx () const;
|
|
bool newPxBand () const;
|
|
bool newPxBandMode () const;
|
|
bool newCall () const;
|
|
bool newCallBand () const;
|
|
bool newCallBandMode () const;
|
|
bool newGrid () const;
|
|
bool newGridBand () const;
|
|
bool newGridBandMode () const;
|
|
bool newPotential() const;
|
|
QString hideContinents() const;
|
|
bool clear_DX () const;
|
|
bool clear_DX_exit () const;
|
|
bool miles () const;
|
|
bool scroll () const;
|
|
int watchdog () const;
|
|
int tunetimer () const;
|
|
bool TX_messages () const;
|
|
bool hide_TX_messages () const;
|
|
bool split_mode () const;
|
|
bool decode_at_52s () const;
|
|
bool beepOnMyCall () const;
|
|
bool beepOnNewCQZ () const;
|
|
bool beepOnNewITUZ () const;
|
|
bool beepOnNewDXCC () const;
|
|
bool beepOnNewGrid () const;
|
|
bool beepOnNewPx () const;
|
|
bool beepOnNewCall () const;
|
|
bool beepOnFirstMsg () const;
|
|
bool post_decodes () const;
|
|
QString udp_server_name () const;
|
|
port_type udp_server_port () const;
|
|
QString udp2_server_name () const;
|
|
port_type udp2_server_port () const;
|
|
QString tcp_server_name () const;
|
|
port_type tcp_server_port () const;
|
|
bool valid_udp2 () const;
|
|
bool accept_udp_requests () const;
|
|
bool enable_udp1_adif_sending () const;
|
|
bool enable_udp2_broadcast () const;
|
|
bool enable_tcp_connection () const;
|
|
bool write_decoded () const;
|
|
bool write_decoded_debug () const;
|
|
bool udpWindowToFront () const;
|
|
bool udpWindowRestore () const;
|
|
Bands * bands ();
|
|
Bands const * bands () const;
|
|
IARURegions::Region region () const;
|
|
FrequencyList_v2 * frequencies ();
|
|
FrequencyList_v2 const * frequencies () const;
|
|
StationList * stations ();
|
|
StationList const * stations () const;
|
|
QStringListModel * macros ();
|
|
QStringListModel const * macros () const;
|
|
QDir save_directory () const;
|
|
QString rig_name () const;
|
|
Type2MsgGen type_2_msg_gen () const;
|
|
QColor color_CQ () const;
|
|
QColor color_MyCall () const;
|
|
QColor color_TxMsg () const;
|
|
QColor color_NewCQZ () const;
|
|
QColor color_NewCQZBand () const;
|
|
QColor color_NewITUZ () const;
|
|
QColor color_NewITUZBand () const;
|
|
QColor color_NewDXCC () const;
|
|
QColor color_NewDXCCBand () const;
|
|
QColor color_NewCall () const;
|
|
QColor color_NewCallBand () const;
|
|
QColor color_NewPx () const;
|
|
QColor color_NewPxBand () const;
|
|
QColor color_NewGrid () const;
|
|
QColor color_NewGridBand () const;
|
|
QColor color_StandardCall () const;
|
|
QColor color_WorkedCall () const;
|
|
bool pwrBandTxMemory () const;
|
|
bool pwrBandTuneMemory () const;
|
|
|
|
// This method queries Port typ.
|
|
TransceiverFactory::Capabilities::PortType current_port_type () const;
|
|
|
|
// This method queries if a CAT and PTT connection is operational.
|
|
bool is_transceiver_online () const;
|
|
|
|
// Start the rig connection, safe and normal to call when rig is
|
|
// already open.
|
|
bool transceiver_online ();
|
|
|
|
// check if a real rig is configured
|
|
bool is_dummy_rig () const;
|
|
bool is_tci () const;
|
|
// Frequency resolution of the rig
|
|
//
|
|
// 0 - 1Hz
|
|
// 1 - 10Hz rounded
|
|
// -1 - 10Hz truncated
|
|
// 2 - 100Hz rounded
|
|
// -2 - 100Hz truncated
|
|
int transceiver_resolution () const;
|
|
|
|
// Close down connection to rig.
|
|
void transceiver_offline ();
|
|
void add_callsign_hideFilter (QString);
|
|
void set_jtdxtime (JTDXDateTime*);
|
|
// Set transceiver frequency in Hertz.
|
|
Q_SLOT void transceiver_frequency (Frequency);
|
|
|
|
// Setting a non zero TX frequency means split operation
|
|
// rationalise_mode means ensure TX uses same mode as RX.
|
|
Q_SLOT void transceiver_tx_frequency (Frequency = 0u);
|
|
|
|
// Set transceiver mode.
|
|
//
|
|
// Rationalise means ensure TX uses same mode as RX.
|
|
Q_SLOT void transceiver_mode (MODE);
|
|
|
|
// Set/unset PTT.
|
|
//
|
|
// Note that this must be called even if VOX PTT is selected since
|
|
// the "Emulate Split" mode requires PTT information to coordinate
|
|
// frequency changes.
|
|
Q_SLOT void transceiver_ptt (bool = true);
|
|
|
|
// Set/unset Fast_mode for polling tranceiver for FT4.
|
|
//
|
|
Q_SLOT void transceiver_ft4_mode (bool = false);
|
|
|
|
// Set/unset Audio streaming for TCI.
|
|
//
|
|
Q_SLOT void transceiver_audio (bool = false);
|
|
|
|
// Set/unset Tune for TCI.
|
|
//
|
|
Q_SLOT void transceiver_tune (bool = false);
|
|
|
|
// Set period for TCI audio
|
|
//
|
|
Q_SLOT void transceiver_period (double = 15.0);
|
|
|
|
// Set blocksize for TCI audio.
|
|
//
|
|
Q_SLOT void transceiver_blocksize (qint32 = 6912 / 2);
|
|
|
|
// Set modulation start TCI audio
|
|
//
|
|
Q_SLOT void transceiver_modulator_start (unsigned = 79, double = 1920.0, double = 1500.0, double = -3.0, bool = true, double = 99., double = 60.0);
|
|
|
|
// Set modulation start TCI audio
|
|
//
|
|
Q_SLOT void transceiver_modulator_stop (bool = false);
|
|
|
|
// Set spread for TCI audio
|
|
//
|
|
Q_SLOT void transceiver_spread (double = 0.0);
|
|
|
|
// Set nsym for TCI audio
|
|
//
|
|
Q_SLOT void transceiver_nsym (int = 79);
|
|
|
|
// Set trfrequency for TCI audio
|
|
//
|
|
Q_SLOT void transceiver_trfrequency (double = 1500.0);
|
|
|
|
// Set txvolume for TCI audio
|
|
//
|
|
Q_SLOT void transceiver_txvolume (double = 0);
|
|
|
|
// Attempt to (re-)synchronise transceiver state.
|
|
//
|
|
// Force signal guarantees either a transceiver_update or a
|
|
// transceiver_failure signal.
|
|
//
|
|
// The enforce_mode_and_split parameter ensures that future
|
|
// transceiver updates have the correct mode and split setting
|
|
// i.e. the transceiver is ready for use.
|
|
Q_SLOT void sync_transceiver (bool force_signal = false, bool enforce_mode_and_split = false);
|
|
|
|
|
|
//
|
|
// This signal indicates that a font has been selected and accepted
|
|
// for the decoded text.
|
|
//
|
|
Q_SIGNAL void decoded_text_font_changed (QFont);
|
|
|
|
//
|
|
// This signal is emitted when the UDP server changes
|
|
//
|
|
Q_SIGNAL void udp_server_changed (QString const& udp_server);
|
|
Q_SIGNAL void udp_server_port_changed (port_type server_port);
|
|
Q_SIGNAL void tcp_server_changed (QString const& tcp_server);
|
|
Q_SIGNAL void tcp_server_port_changed (port_type server_port);
|
|
|
|
//
|
|
// These signals are emitted and reflect transceiver state changes
|
|
//
|
|
|
|
// signals a change in one of the TransceiverState members
|
|
Q_SIGNAL void transceiver_update (Transceiver::TransceiverState const&) const;
|
|
Q_SIGNAL void transceiver_TCIframesWritten (qint64) const;
|
|
Q_SIGNAL void transceiver_TCImodActive (bool) const;
|
|
|
|
// Signals a failure of a control rig CAT or PTT connection.
|
|
//
|
|
// A failed rig CAT or PTT connection is fatal and the underlying
|
|
// connections are closed automatically. The connections can be
|
|
// re-established with a call to transceiver_online(true) assuming
|
|
// the fault condition has been rectified or is transient.
|
|
Q_SIGNAL void transceiver_failure (QString const& reason) const;
|
|
|
|
private:
|
|
class impl;
|
|
pimpl<impl> m_;
|
|
};
|
|
|
|
|
|
Q_DECLARE_METATYPE (Configuration::DataMode);
|
|
Q_DECLARE_METATYPE (Configuration::Type2MsgGen);
|
|
|
|
#if !defined (QT_NO_DEBUG_STREAM)
|
|
ENUM_QDEBUG_OPS_DECL (Configuration, DataMode);
|
|
ENUM_QDEBUG_OPS_DECL (Configuration, Type2MsgGen);
|
|
#endif
|
|
|
|
ENUM_QDATASTREAM_OPS_DECL (Configuration, DataMode);
|
|
ENUM_QDATASTREAM_OPS_DECL (Configuration, Type2MsgGen);
|
|
|
|
ENUM_CONVERSION_OPS_DECL (Configuration, DataMode);
|
|
ENUM_CONVERSION_OPS_DECL (Configuration, Type2MsgGen);
|
|
|
|
#endif
|