#include "Config_Default.h" #include "Target_Defaults.h" namespace { void configure_source_display(Data_Source_Map_Display_Data& display, std::string color, std::uint32_t aircraft_pixel_size, std::uint32_t base_station_pixel_size, double aircraft_scale, bool show_call_sign, bool show_fly_status) { display.color = std::move(color); display.aircraft_pixel_size = aircraft_pixel_size; display.base_station_pixel_size = base_station_pixel_size; display.aircraft_scale = aircraft_scale; display.base_station_scale = 0.44; display.show_call_sign = show_call_sign; display.show_fly_status = show_fly_status; } std::shared_ptr make_dll_source() { auto source = std::make_shared(); source->key = "lzy_dll"; source->set_enabled(true); source->settings.write([](auto& value) { value.base_station_has_valid_position = true; configure_source_display(value.map_display.map2d, "#454641", 34, 30, 2.0, false, false); configure_source_display(value.map_display.map3d, "#454641", 50, 100, 1.0, false, false); value.lat = 37.433547; value.lon = 121.40873; value.alt = 2300.0; value.ignore_msg_time = true; }); source->specific.write([](auto& value) { value.library_path = config_default::dsp_library_path; value.function_name = "adsb_read"; value.data_type = File_Data_Type::BIN_Blank_Text; value.buffer_size = 200000; }); return source; } #if defined(ECAP_TARGET_WINDOWS) std::shared_ptr make_file_source() { auto source = std::make_shared(); source->key = "aaaa"; source->set_enabled(false); source->settings.write([](auto& value) { configure_source_display(value.map_display.map2d, "#d1a54c", 50, 100, 2.0, true, true); configure_source_display(value.map_display.map3d, "#d1a54c", 50, 100, 2.0, true, true); value.lat = 37.0; value.lon = 121.0; value.alt = 1000.0; value.ignore_msg_time = true; }); source->specific.write([](auto& value) { value.file_path = config_default::file_source_path; value.data_type = File_Data_Type::BIN_Blank_Text; value.play_mode = Play_Mode::loop; }); return source; } #endif void configure_feed(Data_Feed& feed, std::string type, std::string key, bool enabled, Output_Data_Format format, bool use_status, Mode_S_Output_Type mode_s_output_type, bool use_mode_ac, bool sbs_only_pos) { feed.type = std::move(type); feed.key = std::move(key); feed.set_enabled(enabled); feed.source_key = "lzy_dll"; feed.output_format.write([&](auto& value) { value.type = format; value.use_status = use_status; value.mode_s_output_type = mode_s_output_type; value.use_mode_ac = use_mode_ac; value.sbs_only_pos = sbs_only_pos; }); } std::shared_ptr make_tcp_server_feed(std::string key, bool enabled, Output_Data_Format format, bool use_status, Mode_S_Output_Type mode_s_output_type, bool use_mode_ac, bool sbs_only_pos, std::uint16_t port, std::size_t user_buffer_size, std::size_t system_buffer_size) { auto feed = std::make_shared(); configure_feed(*feed, "Data_Feed_TCP_Server", std::move(key), enabled, format, use_status, mode_s_output_type, use_mode_ac, sbs_only_pos); feed->specific.write([&](auto& value) { value.port = port; value.connect_user_buffer_size = user_buffer_size; value.connect_system_buffer_size = system_buffer_size; }); return feed; } } Default_Config_File make_default_mode_acs_config(const std::filesystem::path& directory) { Mode_ACS_Config config; config.settings.write([](auto& value) { value.timeout_seconds = 160; value.max_speed_m_s = 1000; value.wait_process_msg = true; value.time_space_filter = true; value.speed_filter = true; value.max_track_point_size = 20000; value.mode_s_max_num = 700000; value.mode_other_max_num = 10000; value.report_data_feed_msg_mum = 10000; value.default_min_aircraft_list_num = 10; }); config.data_source_config.map.push_back(make_dll_source()); #if defined(ECAP_TARGET_WINDOWS) config.data_source_config.map.push_back(make_file_source()); #endif config.data_feed_config.map.push_back(make_tcp_server_feed("Port_10003", true, Output_Data_Format::BIN, true, Mode_S_Output_Type::ALL_Mode_S, true, true, 10003, 409600, 409600)); auto udp_server = std::make_shared(); configure_feed(*udp_server, "Data_Feed_UDP_Server", "22333", false, Output_Data_Format::BIN, false, Mode_S_Output_Type::ALL_Mode_S, false, false); udp_server->specific.write([](auto& value) { value.port = 50001; }); config.data_feed_config.map.push_back(udp_server); auto udp_client = std::make_shared(); configure_feed(*udp_client, "Data_Feed_UDP_Client", "Port_10004", false, Output_Data_Format::AVR, false, Mode_S_Output_Type::DF_11_17_18, false, true); udp_client->specific.write([](auto& value) { value.port = 30004; value.url = "192.168.1.75"; }); config.data_feed_config.map.push_back(udp_client); auto tcp_client = std::make_shared(); configure_feed(*tcp_client, "Data_Feed_TCP_Client", "Port_10005", false, Output_Data_Format::BIN, true, Mode_S_Output_Type::NO_POS_Mode_S, true, true); tcp_client->specific.write([](auto& value) { value.url = "192.168.1.167"; value.port = 10005; }); config.data_feed_config.map.push_back(tcp_client); config.data_feed_config.map.push_back(make_tcp_server_feed( "Port_30003", false, Output_Data_Format::SBS, false, Mode_S_Output_Type::ALL_Mode_S, true, true, 30003, 0, 0)); return {Config_Section::mode_acs, directory / "mode_acs.json", config.to_base_json()}; }