SDRPlusPlus/core/src/signal_path/source.cpp

106 wiersze
2.9 KiB
C++
Czysty Zwykły widok Historia

2022-01-21 19:22:13 +00:00
#include <server.h>
2020-09-30 23:21:15 +00:00
#include <signal_path/source.h>
#include <spdlog/spdlog.h>
#include <signal_path/signal_path.h>
#include <core.h>
2020-09-30 23:21:15 +00:00
SourceManager::SourceManager() {
}
void SourceManager::registerSource(std::string name, SourceHandler* handler) {
if (sources.find(name) != sources.end()) {
spdlog::error("Tried to register new source with existing name: {0}", name);
return;
}
sources[name] = handler;
2021-07-26 01:11:51 +00:00
onSourceRegistered.emit(name);
}
void SourceManager::unregisterSource(std::string name) {
if (sources.find(name) == sources.end()) {
2021-09-20 17:59:35 +00:00
spdlog::error("Tried to unregister non existent source: {0}", name);
2021-07-26 01:11:51 +00:00
return;
}
onSourceUnregister.emit(name);
if (name == selectedName) {
2021-07-26 15:17:10 +00:00
if (selectedHandler != NULL) {
sources[selectedName]->deselectHandler(sources[selectedName]->ctx);
}
2022-06-15 14:08:28 +00:00
sigpath::iqFrontEnd.setInput(&nullSource);
2021-07-26 01:11:51 +00:00
selectedHandler = NULL;
}
sources.erase(name);
onSourceUnregistered.emit(name);
}
std::vector<std::string> SourceManager::getSourceNames() {
std::vector<std::string> names;
for (auto const& [name, src] : sources) { names.push_back(name); }
2021-07-26 01:11:51 +00:00
return names;
2020-09-30 23:21:15 +00:00
}
void SourceManager::selectSource(std::string name) {
2020-09-30 23:21:15 +00:00
if (sources.find(name) == sources.end()) {
2021-09-20 17:59:35 +00:00
spdlog::error("Tried to select non existent source: {0}", name);
2020-09-30 23:21:15 +00:00
return;
}
2021-07-26 01:11:51 +00:00
if (selectedHandler != NULL) {
2020-09-30 23:21:15 +00:00
sources[selectedName]->deselectHandler(sources[selectedName]->ctx);
}
selectedHandler = sources[name];
selectedHandler->selectHandler(selectedHandler->ctx);
selectedName = name;
if (core::args["server"].b()) {
2022-01-21 19:22:13 +00:00
server::setInput(selectedHandler->stream);
}
else {
2022-06-15 14:08:28 +00:00
sigpath::iqFrontEnd.setInput(selectedHandler->stream);
2022-01-21 19:22:13 +00:00
}
// Set server input here
2020-09-30 23:21:15 +00:00
}
void SourceManager::showSelectedMenu() {
if (selectedHandler == NULL) {
return;
}
selectedHandler->menuHandler(selectedHandler->ctx);
}
void SourceManager::start() {
if (selectedHandler == NULL) {
return;
}
selectedHandler->startHandler(selectedHandler->ctx);
}
void SourceManager::stop() {
if (selectedHandler == NULL) {
return;
}
selectedHandler->stopHandler(selectedHandler->ctx);
}
void SourceManager::tune(double freq) {
if (selectedHandler == NULL) {
return;
}
2022-09-28 13:55:50 +00:00
// TODO: No need to always retune the hardware in panadpter mode
2022-09-28 15:15:38 +00:00
selectedHandler->tuneHandler(((tuneMode == TuningMode::NORMAL) ? freq : ifFreq) + tuneOffset, selectedHandler->ctx);
2022-09-28 13:55:50 +00:00
onRetune.emit(freq);
2020-10-20 12:59:42 +00:00
currentFreq = freq;
}
void SourceManager::setTuningOffset(double offset) {
tuneOffset = offset;
tune(currentFreq);
2022-09-28 13:55:50 +00:00
}
void SourceManager::setTuningMode(TuningMode mode) {
tuneMode = mode;
tune(currentFreq);
}
void SourceManager::setPanadpterIF(double freq) {
ifFreq = freq;
tune(currentFreq);
2020-09-30 23:21:15 +00:00
}