mirror of
https://github.com/SatDump/SatDump
synced 2026-08-13 17:47:30 -04:00
147 lines
No EOL
4 KiB
C++
147 lines
No EOL
4 KiB
C++
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#include "common/dsp/fft/fft_pan.h"
|
|
#include "common/dsp/path/splitter.h"
|
|
#include "common/dsp/resamp/smart_resampler.h"
|
|
#include "common/dsp_source_sink/dsp_sample_source.h"
|
|
#include "common/widgets/fft_plot.h"
|
|
|
|
#include "common/tracking/obj_tracker/object_tracker.h"
|
|
#include "common/tracking/rotator/rotcl_handler.h"
|
|
#include "common/tracking/scheduler/scheduler.h"
|
|
|
|
#include "common/dsp/io/file_sink.h"
|
|
#include "pipeline/live_pipeline.h"
|
|
|
|
#include "common/dsp/io/net_sink.h"
|
|
|
|
class AutoTrackApp
|
|
{
|
|
private: // Device and start-of-chain management
|
|
dsp::SourceDescriptor selected_src;
|
|
|
|
std::shared_ptr<dsp::DSPSampleSource> source_ptr;
|
|
std::unique_ptr<dsp::SplitterBlock> splitter;
|
|
|
|
uint64_t frequency_hz = 100e6;
|
|
uint64_t current_samplerate = 1e6;
|
|
double xconverter_frequency = 0;
|
|
|
|
uint64_t get_samplerate()
|
|
{
|
|
// if (current_decimation > 0)
|
|
// return current_samplerate / current_decimation;
|
|
// else
|
|
return current_samplerate;
|
|
}
|
|
|
|
void set_frequency(uint64_t freq_hz)
|
|
{
|
|
double xconv_freq = frequency_hz = freq_hz;
|
|
if (xconv_freq > xconverter_frequency * 1e6)
|
|
xconv_freq -= xconverter_frequency * 1e6;
|
|
else
|
|
xconv_freq = xconverter_frequency * 1e6 - xconv_freq;
|
|
|
|
source_ptr->set_frequency(xconv_freq);
|
|
if (fft_plot)
|
|
{
|
|
fft_plot->frequency = freq_hz;
|
|
if (xconverter_frequency == 0)
|
|
fft_plot->actual_sdr_freq = -1;
|
|
else
|
|
fft_plot->actual_sdr_freq = xconv_freq;
|
|
}
|
|
}
|
|
|
|
bool is_started = false;
|
|
void start_device();
|
|
void stop_device();
|
|
|
|
private:
|
|
float fft_min = -150, fft_max = 150;
|
|
int fft_size = 8192, fft_rate = 30;
|
|
std::unique_ptr<dsp::FFTPanBlock> fft;
|
|
std::unique_ptr<widgets::FFTPlot> fft_plot;
|
|
|
|
private:
|
|
std::mutex live_pipeline_mtx;
|
|
std::unique_ptr<satdump::pipeline::LivePipeline> live_pipeline;
|
|
satdump::pipeline::Pipeline selected_pipeline;
|
|
nlohmann::json pipeline_params;
|
|
std::string pipeline_output_dir;
|
|
|
|
bool is_processing = false;
|
|
void start_processing();
|
|
void stop_processing();
|
|
|
|
private:
|
|
bool is_recording = false;
|
|
|
|
std::shared_ptr<dsp::FileSinkBlock> file_sink;
|
|
|
|
void start_recording();
|
|
void stop_recording();
|
|
|
|
private:
|
|
std::shared_ptr<dsp::NetSinkBlock> udp_sink;
|
|
|
|
private: // VFO Stuff
|
|
struct VFOInfo
|
|
{
|
|
////
|
|
std::string id;
|
|
std::string name;
|
|
double freq;
|
|
|
|
//// Live
|
|
satdump::pipeline::Pipeline selected_pipeline;
|
|
nlohmann::json pipeline_params;
|
|
std::string output_dir;
|
|
std::shared_ptr<ctpl::thread_pool> lpool;
|
|
std::shared_ptr<satdump::pipeline::LivePipeline> live_pipeline;
|
|
|
|
//// Recording
|
|
std::shared_ptr<dsp::SmartResamplerBlock<complex_t>> decim_ptr;
|
|
std::shared_ptr<dsp::FileSinkBlock> file_sink;
|
|
};
|
|
|
|
std::mutex vfos_mtx;
|
|
std::vector<VFOInfo> vfo_list;
|
|
|
|
void add_vfo_live(std::string id, std::string name, double freq, satdump::pipeline::Pipeline vpipeline, nlohmann::json vpipeline_params);
|
|
void add_vfo_reco(std::string id, std::string name, double freq, dsp::BasebandType type, int decimation = -1);
|
|
void del_vfo(std::string id);
|
|
|
|
private:
|
|
satdump::ObjectTracker object_tracker;
|
|
satdump::AutoTrackScheduler auto_scheduler;
|
|
|
|
std::shared_ptr<rotator::RotatorHandler> rotator_handler;
|
|
|
|
void setup_schedular_callbacks();
|
|
|
|
private:
|
|
time_t web_last_fft_access = 0;
|
|
bool web_fft_is_enabled = false;
|
|
void setup_webserver();
|
|
void stop_webserver();
|
|
|
|
public:
|
|
void web_heartbeat();
|
|
|
|
private:
|
|
ctpl::thread_pool main_thread_pool = ctpl::thread_pool(8);
|
|
|
|
const nlohmann::json d_settings;
|
|
const nlohmann::json d_parameters;
|
|
const std::string d_output_folder;
|
|
|
|
public:
|
|
AutoTrackApp(nlohmann::json settings, nlohmann::json parameters, std::string output_folder);
|
|
~AutoTrackApp();
|
|
};
|
|
|
|
int main_autotrack(int argc, char *argv[]); |