File: EmulateSplitTransceiver.h

package info (click to toggle)
js8call 2.5.0%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 24,724 kB
  • sloc: cpp: 562,639; sh: 898; python: 132; ansic: 102; makefile: 4
file content (51 lines) | stat: -rw-r--r-- 1,675 bytes parent folder | download | duplicates (2)
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.h"

//
// 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