js8call/JS8_Transceiver/EmulateSplitTransceiver.cpp
Chris-AC9KH 356bdc0f50 Code cleanup - move loose source and header files in source tree to group folders
Rename all header files with .h extension
Fix function declaration in HamlibTransceiver.h that overrode member function but was not marked override
Remove unused variable in Modulator.cpp
Remove unused files from source tree
Remove duplicate LazyFillComboBox files
Reformat codebase to LLVM C++ standard
2026-01-02 16:46:38 -06:00

69 lines
2.5 KiB
C++

#include "EmulateSplitTransceiver.h"
#include <QLoggingCategory>
Q_DECLARE_LOGGING_CATEGORY(emulatesplittransceiver_js8)
EmulateSplitTransceiver::EmulateSplitTransceiver(
std::unique_ptr<Transceiver> wrapped, QObject *parent)
: Transceiver{parent}, wrapped_{std::move(wrapped)}, rx_frequency_{0},
tx_frequency_{0}, split_{false} {
// Connect update signal of wrapped Transceiver object instance to ours.
connect(wrapped_.get(), &Transceiver::update, this,
&EmulateSplitTransceiver::handle_update);
// Connect other signals of wrapped Transceiver object to our
// parent matching signals.
connect(wrapped_.get(), &Transceiver::resolution, this,
&Transceiver::resolution);
connect(wrapped_.get(), &Transceiver::finished, this,
&Transceiver::finished);
connect(wrapped_.get(), &Transceiver::failure, this, &Transceiver::failure);
}
void EmulateSplitTransceiver::set(TransceiverState const &s,
unsigned sequence_number) noexcept {
qCDebug(emulatesplittransceiver_js8)
<< "EmulateSplitTransceiver::set: state:" << s
<< "#:" << sequence_number;
// save for use in updates
rx_frequency_ = s.frequency();
tx_frequency_ = s.tx_frequency();
split_ = s.split();
TransceiverState emulated_state{s};
if (s.ptt() && split_)
emulated_state.frequency(s.tx_frequency());
emulated_state.split(false);
emulated_state.tx_frequency(0);
wrapped_->set(emulated_state, sequence_number);
}
void EmulateSplitTransceiver::handle_update(TransceiverState const &state,
unsigned sequence_number) {
qCDebug(emulatesplittransceiver_js8)
<< "EmulateSplitTransceiver::handle_update: from wrapped:" << state;
if (state.split()) {
Q_EMIT failure(
tr("Emulated split mode requires rig to be in simplex mode"));
} else {
TransceiverState new_state{state};
// Follow the rig if in RX mode.
if (state.ptt())
new_state.frequency(rx_frequency_);
// These are always what was requested in prior set state operation
new_state.tx_frequency(tx_frequency_);
new_state.split(split_);
qCDebug(emulatesplittransceiver_js8)
<< "EmulateSplitTransceiver::handle_update: signalling:" << state;
// signal emulated state
Q_EMIT update(new_state, sequence_number);
}
}
Q_LOGGING_CATEGORY(emulatesplittransceiver_js8, "emulatesplittransceiver.js8",
QtWarningMsg)