HARDT - The Ham Radio DSP Toolkit
hmultiplier.h
1 #ifndef __HMULTIPLIER_H
2 #define __HMULTIPLIER_H
3 
4 #include "hreader.h"
5 #include "hwriter.h"
6 #include "hwriterconsumer.h"
7 #include "hprobe.h"
8 
27 template <class T>
28 class HMultiplier : public HReader<T>, public HWriter<T>, public HWriterConsumer<T>
29 {
30  private:
31 
32  HReader<T>* _reader;
33  HWriter<T>* _writer;
34  T* _buffer;
35 
36  int _blocksize;
37 
38  HLocalOscillator<T>* _localOscillator;
39  int _scaling;
40 
41  HProbe<T>* _probe;
42 
43  public:
44 
46  HMultiplier(HReader<T>* reader, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe<T>* probe = NULL);
47 
49  HMultiplier(HWriter<T>* writer, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe<T>* probe = NULL);
50 
52  HMultiplier(HWriterConsumer<T>* consumer, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe<T>* probe = NULL);
53 
55  ~HMultiplier();
56 
58  void Init(H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize);
59 
61  int Read(T* dest, size_t blocksize);
62 
64  int Write(T* src, size_t blocksize);
65 
67  void SetWriter(HWriter<T>* writer)
68  {
69  _writer = writer;
70  }
71 
73  bool Start();
74 
76  bool Stop();
77 
79  void SetFrequency(int frequency);
80 
82  void Mix(T* src, T* dest, size_t blocksize);
83 
85  bool Command(HCommand* command) {
86  if( _reader != nullptr ) {
87  if( !_reader->Command(command) )
88  {
89  return false;
90  }
91  }
92  if( _writer != nullptr ) {
93  if( !_writer->Command(command) )
94  {
95  return false;
96  }
97  }
98  return true;
99  }
100 };
101 
102 #endif
HReader::Command
virtual bool Command(HCommand *command)=0
HMultiplier::SetWriter
void SetWriter(HWriter< T > *writer)
Definition: hmultiplier.h:67
HLocalOscillator
Definition: hlocaloscillator.h:11
HMultiplier::Command
bool Command(HCommand *command)
Definition: hmultiplier.h:85
HMultiplier
Definition: hmultiplier.h:28
HWriter
Definition: hwriter.h:10
HMultiplier::Write
int Write(T *src, size_t blocksize)
Definition: hmultiplier.cpp:93
HMultiplier::Mix
void Mix(T *src, T *dest, size_t blocksize)
Definition: hmultiplier.cpp:121
HWriter::Command
virtual bool Command(HCommand *command)=0
HReader
Definition: hreader.h:24
HProbe
Definition: hprobe.h:10
HMultiplier::HMultiplier
HMultiplier(HReader< T > *reader, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe< T > *probe=NULL)
Definition: hmultiplier.cpp:8
HMultiplier::Read
int Read(T *dest, size_t blocksize)
Definition: hmultiplier.cpp:65
HCommand
Definition: hcommand.h:81
HMultiplier::SetFrequency
void SetFrequency(int frequency)
Definition: hmultiplier.cpp:159
HMultiplier::Start
bool Start()
Definition: hmultiplier.cpp:131
HMultiplier::~HMultiplier
~HMultiplier()
Definition: hmultiplier.cpp:47
HMultiplier::Stop
bool Stop()
Definition: hmultiplier.cpp:145
HWriterConsumer
Definition: hwriterconsumer.h:8
HMultiplier::Init
void Init(H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize)
Definition: hmultiplier.cpp:55