2025-06-01 13:18:41 +02:00
# define SATDUMP_DLL_EXPORT 1
2025-05-31 20:26:47 +02:00
# include "pipeline/module.h"
# include "pipeline/pipeline.h"
2025-06-01 13:18:41 +02:00
2025-05-03 12:12:36 +02:00
# include "core/config.h"
2022-03-05 12:44:19 +01:00
# include "core/plugin.h"
2025-05-25 14:30:24 +02:00
# include "core/resources.h"
2025-05-31 20:26:47 +02:00
# include "init.h"
# include "logger.h"
2025-05-03 12:12:36 +02:00
# include "satdump_vars.h"
# include <filesystem>
2021-08-02 23:33:10 +02:00
2022-04-21 16:10:00 +02:00
# include "common/tracking/tle.h"
2022-08-30 12:01:12 +02:00
# include "core/opencl.h"
2023-01-31 20:40:37 +01:00
# include "common/dsp/buffer.h"
2025-07-23 12:21:02 +02:00
# include "products/product.h"
2024-12-29 20:13:58 +01:00
2022-03-10 19:56:37 +01:00
namespace satdump
2021-03-22 18:53:09 +01:00
{
2022-05-12 15:24:25 -07:00
SATDUMP_DLL std : : string user_path ;
2022-09-11 19:15:24 +02:00
SATDUMP_DLL std : : string tle_file_override = " " ;
2023-01-23 14:23:09 +01:00
SATDUMP_DLL bool tle_do_update_on_init = true ;
2022-05-07 17:06:56 +02:00
2024-10-07 22:05:30 -04:00
void initSatdump ( bool is_gui )
2022-03-10 19:56:37 +01:00
{
logger - > info ( " _____ __ ____ " ) ;
logger - > info ( " / ___/____ _/ /_/ __ \\ __ ______ ___ ____ " ) ;
logger - > info ( " \\ __ \\ / __ `/ __/ / / / / / / __ `__ \\ / __ \\ " ) ;
logger - > info ( " ___/ / /_/ / /_/ /_/ / /_/ / / / / / / /_/ / " ) ;
logger - > info ( " /____/ \\ __,_/ \\ __/_____/ \\ __,_/_/ /_/ /_/ .___/ " ) ;
logger - > info ( " /_/ " ) ;
2025-06-01 14:28:04 +02:00
logger - > info ( " Starting " + getSatDumpVersionName ( ) ) ;
2022-03-10 19:56:37 +01:00
logger - > info ( " " ) ;
2022-03-30 15:41:23 +02:00
# ifdef _WIN32
2023-09-18 07:48:47 -07:00
if ( std : : filesystem : : exists ( " satdump_cfg.json " ) )
2023-10-27 14:43:02 -04:00
user_path = " ./config " ;
2024-12-29 20:13:58 +01:00
else
2023-09-18 07:48:47 -07:00
user_path = std : : string ( getenv ( " APPDATA " ) ) + " /satdump " ;
2022-05-13 21:35:51 +02:00
# elif __ANDROID__
user_path = " . " ;
2022-03-30 15:41:23 +02:00
# else
2022-05-07 17:06:56 +02:00
user_path = std : : string ( getenv ( " HOME " ) ) + " /.config/satdump " ;
2022-03-30 15:41:23 +02:00
# endif
2024-10-07 22:05:30 -04:00
try
{
if ( std : : filesystem : : exists ( " satdump_cfg.json " ) )
2025-06-08 16:57:37 +02:00
satdump_cfg . load ( " satdump_cfg.json " , user_path ) ;
2024-10-07 22:05:30 -04:00
else
2025-06-08 16:57:37 +02:00
satdump_cfg . load ( satdump : : RESPATH + " satdump_cfg.json " , user_path ) ;
2024-10-07 22:05:30 -04:00
}
catch ( std : : exception & e )
{
logger - > critical ( " Error loading SatDump config! SatDump will now exit. Error: \n %s " , e . what ( ) ) ;
2025-05-03 12:12:36 +02:00
// if (is_gui)
// pfd::message("SatDump", "Error loading SatDump config! SatDump will now exit. Error:\n\n" + std::string(e.what()), pfd::choice::ok, pfd::icon::error); TODOREWORK bring this back
2024-10-07 22:05:30 -04:00
exit ( 1 ) ;
}
2022-03-10 19:56:37 +01:00
2025-06-08 16:57:37 +02:00
if ( satdump_cfg . main_cfg [ " satdump_general " ] . contains ( " log_to_file " ) )
2022-11-26 17:50:44 +01:00
{
2025-06-08 16:57:37 +02:00
bool log_file = satdump_cfg . main_cfg [ " satdump_general " ] [ " log_to_file " ] [ " value " ] ;
2022-11-26 17:50:44 +01:00
if ( log_file )
initFileSink ( ) ;
}
2025-06-08 16:57:37 +02:00
if ( satdump_cfg . main_cfg [ " satdump_general " ] . contains ( " log_level " ) )
2022-11-26 17:34:22 +01:00
{
2025-06-08 16:57:37 +02:00
std : : string log_level = satdump_cfg . main_cfg [ " satdump_general " ] [ " log_level " ] [ " value " ] ;
2022-11-27 21:30:17 +01:00
if ( log_level = = " trace " )
2023-02-26 00:54:58 +00:00
setConsoleLevel ( slog : : LOG_TRACE ) ;
2022-11-27 21:30:17 +01:00
else if ( log_level = = " debug " )
2023-02-26 00:54:58 +00:00
setConsoleLevel ( slog : : LOG_DEBUG ) ;
2022-11-27 21:30:17 +01:00
else if ( log_level = = " info " )
2023-02-26 00:54:58 +00:00
setConsoleLevel ( slog : : LOG_INFO ) ;
2022-11-27 21:30:17 +01:00
else if ( log_level = = " warn " )
2023-02-26 00:54:58 +00:00
setConsoleLevel ( slog : : LOG_WARN ) ;
2022-11-27 21:30:17 +01:00
else if ( log_level = = " error " )
2023-02-26 00:54:58 +00:00
setConsoleLevel ( slog : : LOG_ERROR ) ;
2022-11-27 21:30:17 +01:00
else if ( log_level = = " critical " )
2023-02-26 00:54:58 +00:00
setConsoleLevel ( slog : : LOG_CRIT ) ;
2022-11-26 17:34:22 +01:00
}
2022-03-10 19:56:37 +01:00
loadPlugins ( ) ;
2023-09-14 10:38:02 +02:00
// Let plugins know we started
2025-06-08 16:57:37 +02:00
satdump_cfg . registerPlugins ( ) ;
2023-09-14 10:38:02 +02:00
2025-05-31 20:26:47 +02:00
// TODOREWORK
pipeline : : registerModules ( ) ;
2022-03-10 19:56:37 +01:00
// Load pipelines
2025-05-31 20:26:47 +02:00
// TODOREWORK
// loadPipelines(resources::getResourcePath("pipelines"));
pipeline : : loadPipelines ( resources : : getResourcePath ( " pipelines " ) ) ;
2022-03-10 19:56:37 +01:00
// List them
logger - > debug ( " Registered pipelines : " ) ;
2025-05-31 20:26:47 +02:00
for ( auto & pipeline : pipeline : : pipelines )
logger - > debug ( " - " + pipeline . id ) ;
2022-03-10 19:56:37 +01:00
2022-08-30 12:01:12 +02:00
# ifdef USE_OPENCL
// OpenCL
opencl : : initOpenCL ( ) ;
# endif
2022-03-10 19:56:37 +01:00
// TLEs
2022-09-11 19:15:24 +02:00
if ( tle_file_override = = " " )
2022-09-08 23:03:54 +02:00
{
2023-10-23 14:20:49 -04:00
loadTLEFileIntoRegistry ( user_path + " /satdump_tles.txt " ) ;
2023-10-25 12:11:17 -04:00
if ( tle_do_update_on_init )
autoUpdateTLE ( user_path + " /satdump_tles.txt " ) ;
2022-09-11 19:15:24 +02:00
}
else
{
if ( std : : filesystem : : exists ( tle_file_override ) )
loadTLEFileIntoRegistry ( tle_file_override ) ;
else
logger - > error ( " TLE File doesn't exist : " + tle_file_override ) ;
2022-09-08 23:03:54 +02:00
}
2022-03-10 19:56:37 +01:00
2022-05-20 20:19:14 +02:00
// Products
2024-12-29 20:13:58 +01:00
products : : registerProducts ( ) ;
2022-05-20 20:19:14 +02:00
2025-06-08 16:57:37 +02:00
// Set DSP buffer sizes if they have been changed TODOREWORK remove this!
if ( satdump_cfg . main_cfg . contains ( " advanced_settings " ) )
2023-01-31 20:40:37 +01:00
{
2025-06-08 16:57:37 +02:00
if ( satdump_cfg . main_cfg [ " advanced_settings " ] . contains ( " default_buffer_size " ) )
2023-01-31 20:40:37 +01:00
{
2025-06-08 16:57:37 +02:00
int new_sz = satdump_cfg . main_cfg [ " advanced_settings " ] [ " default_buffer_size " ] . get < int > ( ) ;
2023-01-31 20:40:37 +01:00
dsp : : STREAM_BUFFER_SIZE = new_sz ;
dsp : : RING_BUF_SZ = new_sz ;
2023-05-08 23:08:34 +02:00
logger - > warn ( " DSP Buffer size was changed to %d " , new_sz ) ;
2023-01-31 20:40:37 +01:00
}
}
2022-03-10 19:56:37 +01:00
// Let plugins know we started
eventBus - > fire_event < SatDumpStartedEvent > ( { } ) ;
2022-12-13 19:56:06 +01:00
# ifdef BUILD_IS_DEBUG
// If in debug, warn the user!
logger - > error ( " ██████╗ █████╗ ███╗ ██╗ ██████╗ ███████╗██████╗ " ) ;
logger - > error ( " ██╔══██╗██╔══██╗████╗ ██║██╔════╝ ██╔════╝██╔══██╗ " ) ;
logger - > error ( " ██║ ██║███████║██╔██╗ ██║██║ ███╗█████╗ ██████╔╝ " ) ;
logger - > error ( " ██║ ██║██╔══██║██║╚██╗██║██║ ██║██╔══╝ ██╔══██╗ " ) ;
logger - > error ( " ██████╔╝██║ ██║██║ ╚████║╚██████╔╝███████╗██║ ██║ " ) ;
logger - > error ( " ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ " ) ;
logger - > error ( " SatDump has NOT been built in Release mode. " ) ;
logger - > error ( " If you are not a developer but intending to use the software, " ) ;
logger - > error ( " you probably do not want this. If so, make sure to " ) ;
logger - > error ( " specify -DCMAKE_BUILD_TYPE=Release in CMake. " ) ;
# endif
2022-03-10 19:56:37 +01:00
}
2025-05-03 12:12:36 +02:00
} // namespace satdump