SDRPlusPlus/core/src/signal_path/source.h

56 wiersze
1.4 KiB
C
Czysty Zwykły widok Historia

2020-09-30 23:21:15 +00:00
#pragma once
#include <string>
#include <vector>
#include <map>
#include <dsp/stream.h>
#include <dsp/types.h>
2021-07-26 01:11:51 +00:00
#include <utils/event.h>
2020-09-30 23:21:15 +00:00
class SourceManager {
public:
SourceManager();
struct SourceHandler {
dsp::stream<dsp::complex_t>* stream;
void (*menuHandler)(void* ctx);
void (*selectHandler)(void* ctx);
void (*deselectHandler)(void* ctx);
void (*startHandler)(void* ctx);
void (*stopHandler)(void* ctx);
void (*tuneHandler)(double freq, void* ctx);
void* ctx;
};
2022-09-28 13:55:50 +00:00
enum TuningMode {
NORMAL,
PANADAPTER
};
2020-09-30 23:21:15 +00:00
void registerSource(std::string name, SourceHandler* handler);
2021-07-26 01:11:51 +00:00
void unregisterSource(std::string name);
void selectSource(std::string name);
2020-09-30 23:21:15 +00:00
void showSelectedMenu();
void start();
void stop();
void tune(double freq);
2020-10-20 12:59:42 +00:00
void setTuningOffset(double offset);
2022-09-28 13:55:50 +00:00
void setTuningMode(TuningMode mode);
void setPanadpterIF(double freq);
2020-09-30 23:21:15 +00:00
2021-07-26 01:11:51 +00:00
std::vector<std::string> getSourceNames();
Event<std::string> onSourceRegistered;
Event<std::string> onSourceUnregister;
Event<std::string> onSourceUnregistered;
2022-09-28 13:55:50 +00:00
Event<double> onRetune;
2020-09-30 23:21:15 +00:00
private:
std::map<std::string, SourceHandler*> sources;
std::string selectedName;
SourceHandler* selectedHandler = NULL;
2020-10-20 12:59:42 +00:00
double tuneOffset;
double currentFreq;
2022-09-28 13:55:50 +00:00
double ifFreq = 0.0;
TuningMode tuneMode;
2021-07-26 01:11:51 +00:00
dsp::stream<dsp::complex_t> nullSource;
2020-09-30 23:21:15 +00:00
};