-
Notifications
You must be signed in to change notification settings - Fork 0
/
EmulateSplitTransceiver.hpp
51 lines (43 loc) · 1.6 KB
/
EmulateSplitTransceiver.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef EMULATE_SPLIT_TRANSCEIVER_HPP__
#define EMULATE_SPLIT_TRANSCEIVER_HPP__
#include <memory>
#include "Transceiver.hpp"
//
// Emulate Split Transceiver
//
// Helper decorator class that encapsulates the emulation of split TX
// operation.
//
// Responsibilities
//
// Delegates all but setting of other (split) frequency to the
// wrapped Transceiver instance. Also routes failure signals from the
// wrapped Transceiver instance to this instances failure signal.
//
// Intercepts status updates from the wrapped Transceiver instance
// and re-signals it with the emulated status.
//
// Generates a status update signal if the other (split) frequency is
// changed, this is necessary since the wrapped transceiver instance
// never receives other frequency changes.
//
class EmulateSplitTransceiver final
: public Transceiver
{
public:
// takes ownership of wrapped Transceiver
explicit EmulateSplitTransceiver (std::unique_ptr<Transceiver> wrapped,
QObject * parent = nullptr);
void set (TransceiverState const&,
unsigned sequence_number) noexcept override;
// forward everything else to wrapped Transceiver
void start (unsigned sequence_number) noexcept override {wrapped_->start (sequence_number);}
void stop () noexcept override {wrapped_->stop ();}
private:
void handle_update (TransceiverState const&, unsigned seqeunce_number);
std::unique_ptr<Transceiver> wrapped_;
Frequency rx_frequency_; // requested Rx frequency
Frequency tx_frequency_; // requested Tx frequency
bool split_; // requested split state
};
#endif