HARDT - The Ham Radio DSP Toolkit
hiqmultiplier.h
1 #ifndef __HIQMULTIPLIER_H
2 #define __HIQMULTIPLIER_H
3 
16 template <class T>
17 class HIqMultiplier : public HReader<T>, public HWriter<T>, public HWriterConsumer<T>
18 {
19  private:
20 
21  HReader<T>* _reader;
22  HWriter<T>* _writer;
23  T* _buffer;
24 
25  int _blocksize;
26 
27  HLocalOscillator<T>* _localSinOscillator;
28  HLocalOscillator<T>* _localCosOscillator;
29  int _scaling;
30 
31  HProbe<T>* _probe;
32 
33  public:
34 
36  HIqMultiplier(HReader<T>* reader, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe<T>* probe = NULL);
37 
39  HIqMultiplier(HWriter<T>* writer, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe<T>* probe = NULL);
40 
42  HIqMultiplier(HWriterConsumer<T>* consumer, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe<T>* probe = NULL);
43 
46 
48  void Init(H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize);
49 
51  int Read(T* dest, size_t blocksize);
52 
54  int Write(T* src, size_t blocksize);
55 
57  void SetWriter(HWriter<T>* writer)
58  {
59  _writer = writer;
60  }
61 
63  bool Start();
64 
66  bool Stop();
67 
69  void SetFrequency(int frequency);
70 
72  void Mix(T* src, T* dest, size_t blocksize);
73 
75  bool Command(HCommand* command) {
76  if( _reader != nullptr ) {
77  if( !_reader->Command(command) )
78  {
79  return false;
80  }
81  }
82  if( _writer != nullptr ) {
83  if( !_writer->Command(command) )
84  {
85  return false;
86  }
87  }
88  return true;
89  }
90 };
91 
92 #endif
HReader::Command
virtual bool Command(HCommand *command)=0
HIqMultiplier::~HIqMultiplier
~HIqMultiplier()
Definition: hiqmultiplier.cpp:47
HIqMultiplier::SetFrequency
void SetFrequency(int frequency)
Definition: hiqmultiplier.cpp:179
HIqMultiplier::Read
int Read(T *dest, size_t blocksize)
Definition: hiqmultiplier.cpp:75
HIqMultiplier::Write
int Write(T *src, size_t blocksize)
Definition: hiqmultiplier.cpp:103
HLocalOscillator
Definition: hlocaloscillator.h:11
HIqMultiplier::SetWriter
void SetWriter(HWriter< T > *writer)
Definition: hiqmultiplier.h:57
HWriter
Definition: hwriter.h:10
HIqMultiplier::Start
bool Start()
Definition: hiqmultiplier.cpp:151
HIqMultiplier::HIqMultiplier
HIqMultiplier(HReader< T > *reader, H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize, HProbe< T > *probe=NULL)
Definition: hiqmultiplier.cpp:8
HWriter::Command
virtual bool Command(HCommand *command)=0
HReader
Definition: hreader.h:24
HIqMultiplier::Command
bool Command(HCommand *command)
Definition: hiqmultiplier.h:75
HProbe
Definition: hprobe.h:10
HCommand
Definition: hcommand.h:81
HIqMultiplier::Stop
bool Stop()
Definition: hiqmultiplier.cpp:165
HIqMultiplier::Mix
void Mix(T *src, T *dest, size_t blocksize)
Definition: hiqmultiplier.cpp:131
HIqMultiplier
Definition: hiqmultiplier.h:17
HIqMultiplier::Init
void Init(H_SAMPLE_RATE rate, int frequency, int oscillatorAmplitude, size_t blocksize)
Definition: hiqmultiplier.cpp:56
HWriterConsumer
Definition: hwriterconsumer.h:8