#pragma once #include #include #include #include #include #include class SourceManager { public: SourceManager(); struct SourceHandler { dsp::stream* 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; }; enum TuningMode { NORMAL, PANADAPTER }; void registerSource(std::string name, SourceHandler* handler); void unregisterSource(std::string name); void selectSource(std::string name); void showSelectedMenu(); void start(); void stop(); void tune(double freq); void setTuningOffset(double offset); void setTuningMode(TuningMode mode); void setPanadpterIF(double freq); std::vector getSourceNames(); Event onSourceRegistered; Event onSourceUnregister; Event onSourceUnregistered; Event onRetune; private: std::map sources; std::string selectedName; SourceHandler* selectedHandler = NULL; double tuneOffset; double currentFreq; double ifFreq = 0.0; TuningMode tuneMode; dsp::stream nullSource; };