cmake库改造前

This commit is contained in:
2026-08-05 14:37:55 +08:00
parent 587c1d6d01
commit cf17c454a9
29 changed files with 1034 additions and 415 deletions
+757
View File
@@ -0,0 +1,757 @@
{
"version": "v1.0.4",
"dsp": {
"library_path": "@/lib9002/lib9002.so",
"center_freq": 16000000,
"band_width": 6000,
"sample_rate": 60000,
"fft_point_number": 2048,
"fft_period_ms": 50,
"fft_win_type": "blkmc",
"url": "0.0.0.0",
"port": 6000,
"power_min": -380,
"power_max": 120,
"power_offset": -166,
"frame_rate": 60,
"debug": false,
"demod_mode": "LSB",
"audio_gain": 30,
"color_gain": 120
},
"drogon": {
"app": {
"threads_num": 0,
"client_max_body_size": "1000M",
"client_max_memory_body_size": "1000M"
}
},
"http_monitor": {
"access_log": false,
"slow_request_threshold_ms": 3000,
"slow_scope_threshold_ms": 1000
},
"mlat": {
"enable": false,
"merge": false,
"library_path": "@/mlat_source.dll",
"function_name": "adsb_read"
},
"web_server": {
"webapp": "@/wwwroot"
},
"map_resources": {
"current_imagery_key": "mixed_imagery",
"tile_sources": [
{
"key": "mixed_imagery",
"name": "本地混合图",
"tile_type": "imagery",
"request_method": "GET",
"resource": {
"file_format": "mbtiles",
"directories": [
],
"files": [
"/home/heco/tiles/混合图-世界-0-8.mbtiles",
"/home/heco/tiles/混合图-中国-9-10.mbtiles",
"/home/heco/tiles/混合图-中国-11.mbtiles"
],
"path_layout": "z/x/y",
"y_axis": "tms",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 11
}
},
{
"key": "height_terrain",
"name": "本地高程",
"tile_type": "terrain",
"request_method": "GET",
"resource": {
"file_format": "mbtiles",
"directories": [
],
"files": [
"/home/heco/tiles/高程-世界-0-8.mbtiles",
"/home/heco/tiles/高程-中国-9-10.mbtiles",
"/home/heco/tiles/高程-中国-11.mbtiles"
],
"path_layout": "z/x/y",
"y_axis": "tms",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 11,
"encoding": "terrarium"
}
},
{
"key": "osm_online",
"name": "OpenStreetMap在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 19
}
},
{
"key": "osm_hot_online",
"name": "OpenStreetMap HOT在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 19
}
},
{
"key": "cyclosm_online",
"name": "CyclOSM在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 20
}
},
{
"key": "carto_light_online",
"name": "Carto Light在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 20
}
},
{
"key": "carto_dark_online",
"name": "Carto Dark在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 20
}
},
{
"key": "carto_voyager_online",
"name": "Carto Voyager在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 20
}
},
{
"key": "carto_dark_nolabels_online",
"name": "Carto Dark无标注在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 20
}
},
{
"key": "opentopomap_online",
"name": "OpenTopoMap在线",
"tile_type": "imagery",
"request_method": "GET",
"url": "https://a.tile.opentopomap.org/{z}/{x}/{y}.png",
"resource": {
"file_format": "online",
"directories": [
],
"files": [
],
"path_layout": "z/x/y",
"y_axis": "xyz",
"projection": "web_mercator",
"extension": ".png",
"tile_size": 256,
"minimum_level": 0,
"maximum_level": 17
}
}
]
},
"map_view": {
"scene_mode": "3d",
"map2d": {
"current_imagery_key": "mixed_imagery",
"tile_zoom_mode": "native",
"tile_display_maximum_level": 8
},
"map3d": {
"current_imagery_key": "mixed_imagery",
"tile_zoom_mode": "native",
"tile_display_maximum_level": 19
},
"camera": {
"longitude": 122.014707,
"latitude": 35.714108,
"height": 241660.031820,
"heading": 347.582854,
"pitch": -54.917211,
"roll": 359.999884
},
"baseStationFlyToHeightOffsetMeters": 8000.000000
},
"map_models": {
"aircraft_model": {
"url": "/ui/model/aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"aircraft_models": {
"glider": {
"url": "/ui/model/aircraft-glider.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"ground_obstruction_4": {
"url": "/ui/model/aircraft-ground-obstruction-4.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"ground_obstruction_5": {
"url": "/ui/model/aircraft-ground-obstruction-5.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"ground_obstruction_6": {
"url": "/ui/model/aircraft-ground-obstruction-6.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"ground_obstruction_7": {
"url": "/ui/model/aircraft-ground-obstruction-7.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"heavy_aircraft": {
"url": "/ui/model/aircraft-heavy-aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"high_performance_aircraft": {
"url": "/ui/model/aircraft-high-performance-aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"high_vortex_aircraft": {
"url": "/ui/model/aircraft-high-vortex-aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"light_aircraft": {
"url": "/ui/model/aircraft-light-aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"lighter_than_air": {
"url": "/ui/model/aircraft-lighter-than-air.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"medium_1_aircraft": {
"url": "/ui/model/aircraft-medium-1-aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"medium_2_aircraft": {
"url": "/ui/model/aircraft-medium-2-aircraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"no_category_information": {
"url": "/ui/model/aircraft-no-category-information.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"parachutist": {
"url": "/ui/model/aircraft-parachutist.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"reserved_3_5": {
"url": "/ui/model/aircraft-reserved-3-5.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"rotorcraft": {
"url": "/ui/model/aircraft-rotorcraft.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"space_transatmospheric_vehicle": {
"url": "/ui/model/aircraft-space-transatmospheric-vehicle.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"surface_emergency_vehicle": {
"url": "/ui/model/aircraft-surface-emergency-vehicle.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"surface_service_vehicle": {
"url": "/ui/model/aircraft-surface-service-vehicle.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"ultralight_hangglider_paraglider": {
"url": "/ui/model/aircraft-ultralight-hangglider-paraglider.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"unmanned_aerial_vehicle": {
"url": "/ui/model/aircraft-unmanned-aerial-vehicle.glb",
"built_in_size": 50.000000,
"heading_offset_degrees": -90.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
}
},
"base_station_model": {
"url": "/ui/model/base-station.glb",
"built_in_size": 16.635522,
"heading_offset_degrees": 0.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
},
"device_model": {
"url": "/ui/model/device.glb",
"built_in_size": 80.000000,
"heading_offset_degrees": 0.000000,
"pitch_offset_degrees": 0.000000,
"roll_offset_degrees": 0.000000
}
},
"device": {
"net": [
{
"key": "device",
"ip": "0.0.0.0",
"port": 9081,
"netmask": "255.255.255.0",
"gateway": "192.168.1.1"
},
{
"key": "wifi",
"ip": "192.168.10.193",
"port": 80,
"netmask": "255.255.255.0",
"gateway": "192.168.10.1"
}
]
},
"mode_acs": {
"timeout_seconds": 160,
"max_speed_m_s": 1000.000000,
"air_pos_timeout": 8.000000,
"surface_pos_timeout": 32.000000,
"read_milliseconds": 100,
"wait_process_msg": true,
"time_space_filter": true,
"speed_filter": true,
"max_track_point_size": 20000,
"mode_s_max_num": 700000,
"mode_other_max_num": 10000,
"report_data_feed_msg_mum": 10000,
"default_min_aircraft_list_num": 10,
"aircraft_change_list_min_position_points": 2,
"aircraft_change_list_adsb_range_filter": true,
"aircraft_change_list_adsb_range_factor": 1.200000,
"adsb_theoretical_target_altitude_meters": 10000.000000,
"ignore_df_11": true,
"monitor_msg_live": false,
"data_feed": {
"empty_wait_milliseconds": 30,
"packet_byte_size": 0,
"tcp_server_default_connect_user_buffer_size": 409600,
"tcp_server_default_connect_system_buffer_size": 409600,
"list": [
{
"type": "Data_Feed_TCP_Server",
"key": "Port_10003",
"enable": true,
"output_format": {
"type": "BIN",
"use_status": true,
"mode_s_output_type": "ALL_Mode_S",
"use_mode_ac": true,
"sbs_only_pos": true
},
"port": 10003,
"connect_user_buffer_size": 409600,
"connect_system_buffer_size": 409600
},
{
"type": "Data_Feed_UDP_Server",
"key": "22333",
"enable": false,
"output_format": {
"type": "BIN",
"use_status": false,
"mode_s_output_type": "ALL_Mode_S",
"use_mode_ac": false,
"sbs_only_pos": false
},
"port": 50001
},
{
"type": "Data_Feed_UDP_Client",
"key": "Port_10004",
"enable": false,
"output_format": {
"type": "AVR",
"use_status": false,
"mode_s_output_type": "DF_11_17_18",
"use_mode_ac": false,
"sbs_only_pos": true
},
"port": 30004,
"url": "192.168.1.75"
},
{
"type": "Data_Feed_TCP_Client",
"key": "Port_10005",
"enable": false,
"output_format": {
"type": "BIN",
"use_status": true,
"mode_s_output_type": "NO_POS_Mode_S",
"use_mode_ac": true,
"sbs_only_pos": true
},
"url": "192.168.1.167",
"port": 10005
},
{
"type": "Data_Feed_TCP_Server",
"key": "Port_30003",
"enable": false,
"output_format": {
"type": "SBS",
"use_status": false,
"mode_s_output_type": "ALL_Mode_S",
"use_mode_ac": true,
"sbs_only_pos": true
},
"port": 30003,
"connect_user_buffer_size": 0,
"connect_system_buffer_size": 0
}
]
},
"data_source": {
"list": [
{
"type": "Dll_Data_Source",
"key": "lzy_dll",
"enable": true,
"base_station_has_valid_position": true,
"map_display": {
"map2d": {
"base_station_show": true,
"aircraft_show": true,
"constant_screen_size": true,
"color": "#454641",
"track_point_color": "#ffff00",
"base_station_color": "#1677ff",
"aircraft_pixel_size": 34,
"base_station_pixel_size": 30,
"aircraft_scale": 2.000000,
"base_station_scale": 0.440000,
"show_icao": true,
"show_call_sign": false,
"show_fly_status": false
},
"map3d": {
"base_station_show": true,
"aircraft_show": true,
"constant_screen_size": true,
"color": "#454641",
"track_point_color": "#ffff00",
"base_station_color": "#1677ff",
"aircraft_pixel_size": 50,
"base_station_pixel_size": 100,
"aircraft_scale": 1.000000,
"base_station_scale": 0.440000,
"show_icao": true,
"show_call_sign": false,
"show_fly_status": false
}
},
"lat": 37.433547,
"lon": 121.408730,
"alt": 2300.000000,
"ignore_msg_time": true,
"update_form_gps": false,
"keep_mode": true,
"library_path": "@/lib9002/lib9002.so",
"function_name": "adsb_read",
"data_type": "BIN_Blank_Text",
"buffer_size": 200000
}
]
},
"source_feed_relation": {
"list": [
{
"key": "key_10003",
"enable": true,
"type": "First_Source_To_All_Feed_Relation"
}
]
}
},
"log": {
"open_mode": "Delete",
"piece_num": 10,
"size_MB": 10
},
"console": {
"record_playback": false,
"mode_s_console": false,
"post_request": false,
"mlat_server": true
},
"external_database": {
"ecap_sqlite_path": "@/../ecap.sqlite",
"list": [
{
"name": "tar1090_db_aircraft",
"download_url": "https://raw.githubusercontent.com/wiedehopf/tar1090-db/refs/heads/csv/aircraft.csv.gz",
"description": "wiedehopf/tar1090-db 发布的轻量 ICAO24 飞机静态库,提供注册号、机型、年份和运营方备注。",
"update_interval_seconds": 604800,
"last_updated_at": 1780388281
},
{
"name": "wiedehopf_tar1090_db_aircraft",
"download_url": "https://raw.githubusercontent.com/wiedehopf/tar1090-db/refs/heads/csv/aircraft.csv.gz",
"description": "wiedehopf/tar1090-db 项目发布的飞机静态数据库镜像,供 tar1090 本地识别飞机。",
"update_interval_seconds": 604800,
"last_updated_at": 1780381804
},
{
"name": "mictronics_aircraft_database",
"download_url": "https://raw.githubusercontent.com/wiedehopf/tar1090-db/refs/heads/csv/aircraft.csv.gz",
"description": "Mictronics 社区飞机数据库的 tar1090 汇总镜像,可按 ICAO24 查询注册号、机型和运营方。",
"update_interval_seconds": 604800,
"last_updated_at": 1780381804
},
{
"name": "opensky_aircraft_database",
"download_url": "https://opensky-network.org/datasets/metadata/aircraftDatabase.csv",
"description": "OpenSky Network 飞机元数据 CSV,包含制造商、型号、注册号和运营方等字段。",
"update_interval_seconds": 604800,
"last_updated_at": 1780381804
},
{
"name": "faa_aircraft_registry",
"download_url": "https://registry.faa.gov/database/ReleasableAircraft.zip",
"description": "FAA 官方可公开下载的美国飞机注册库,MASTER.txt 包含 Mode-S Hex 注册信息。",
"update_interval_seconds": 86400,
"last_updated_at": 1780381804
},
{
"name": "icao_doc_8643_aircraft_type_designators",
"download_url": "",
"description": "ICAO Doc 8643 机型代码表,用于将 A320、B738 等 designator 映射为制造商、型号和类别。",
"update_interval_seconds": 2419200,
"last_updated_at": 1780381804
},
{
"name": "vrs_routes",
"download_url": "https://vrs-standing-data.adsb.lol/routes.csv",
"description": "VRS 航线表,以 callsign 查询机场代码序列,用于推断起飞机场、经停机场和目的机场。",
"update_interval_seconds": 3600,
"last_updated_at": 1780381804
},
{
"name": "vrs_airports",
"download_url": "https://vrs-standing-data.adsb.lol/airports.csv",
"description": "VRS 机场字典,提供机场代码、名称、国家、经纬度和高度。",
"update_interval_seconds": 3600,
"last_updated_at": 1780381804
},
{
"name": "adsblol_vrs_standing_data_routes",
"download_url": "https://vrs-standing-data.adsb.lol/routes.csv",
"description": "ADSB.lol 发布的 VRS standing-data 航线镜像,以 callsign 查询机场代码序列。",
"update_interval_seconds": 3600,
"last_updated_at": 1780381804
},
{
"name": "vradarserver_standing_data_routes",
"download_url": "https://vrs-standing-data.adsb.lol/routes.csv",
"description": "Virtual Radar Server standing-data 的航线适配表;当前在线更新使用 ADSB.lol 公共镜像。",
"update_interval_seconds": 3600,
"last_updated_at": 1780381804
},
{
"name": "opensky_flightdata_api_cache",
"download_url": "",
"description": "OpenSky FlightData API 查询缓存,按 ICAO24 和时间范围保存历史航班起降机场结果。",
"update_interval_seconds": 0,
"last_updated_at": 1780381804
}
]
},
"cesium_graphics": {
"debug_show_frames_per_second": true,
"target_frame_rate": 30,
"use_browser_recommended_resolution": true,
"resolution_scale": 1.000000,
"msaa_samples": 1,
"fxaa": true,
"shadows": true,
"enable_lighting": true,
"solar_lighting": true,
"solar_light_intensity": 1.500000,
"maximum_screen_space_error": 4,
"terrain_enabled_in_3d": true,
"terrain_exaggeration": 5.000000,
"terrain_limit_maximum_level": true,
"terrain_maximum_level": 15,
"terrain_cache_tiles": 128,
"terrain_occlusion_enabled": false,
"surface_navigation_reference_visible": true,
"view_axes_visible": true,
"performance_panel_x": 12.000000,
"performance_panel_y": 92.000000,
"view_axes_panel_x": 3.000000,
"view_axes_panel_y": 337.000000,
"view_axes_panel_size": 184.000000,
"occlusion_sample_spacing_meters": 250.000000,
"occlusion_clearance_margin_meters": 10.000000
}
}
+29 -106
View File
@@ -2,12 +2,10 @@
set(rely global::drogon global::libarchive global::SQLiteCpp)
rcl_load_dependency_environment(${rely})
#message("222222222 LibArchive_SUB_LIBRARIES {${LibArchive_SUB_LIBRARIES}}")
find_package(Drogon)
find_package(SQLiteCpp CONFIG REQUIRED)
set(Core Core_Static)
set(Core Psc_Core_Static)
if (1)
set(md "${CMAKE_CURRENT_LIST_DIR}/module")
if (WIN32)
@@ -16,36 +14,38 @@ if (1)
set(cfg_dir ${CMAKE_CURRENT_LIST_DIR}/config)
endif ()
set(data_dir ${CMAKE_CURRENT_LIST_DIR}/data)
_create("dll" dll_source)
_create("exe" data_process)
_attach_include_dir(dll_source "${md}")
_attach_source_dir(dll_source "${md}/dll_source")
_attach_include_dir(data_process "${md}")
_attach_source_dir(data_process "${md}/dll_source")
_depend(dll_source ${Core})
_depend(data_process ${Core})
append_glob_source(dll_source_srcs "${md}/dll_source")
add_library(dll_source SHARED ${dll_source_srcs})
add_executable(data_process "${dll_source_srcs}")
target_include_directories(dll_source PUBLIC "${md}")
target_link_libraries(dll_source PUBLIC ${Core})
target_link_libraries(data_process PUBLIC ${Core})
_attach_post_build_file(dll_source
${cfg_dir}/data_progress_config.json
${data_dir}/BIN_Blank_Text/ADS-B_195_0205.txt
# "${CMAKE_CURRENT_LIST_DIR}/data/BIN_Blank_Text/ADS-B_195_0205.txt"
)
_create("dll" mlat_source)
_attach_include_dir(mlat_source "${md}")
_attach_source_dir(mlat_source "${md}/mlat_source")
_depend(mlat_source ${Core})
_create("exe" mlat_source_exe)
_attach_include_dir(mlat_source_exe "${md}")
_attach_source_dir(mlat_source_exe "${md}/mlat_source")
_depend(mlat_source_exe ${Core})
_create("exe" ecap_server)
_depend(ecap_server SSR)
_attach_include_dir(ecap_server "${md}")
_attach_source_dir(ecap_server "${md}/Local_Server")
target_include_directories(ecap_server PRIVATE "${CMAKE_CURRENT_LIST_DIR}/../../core_library/Core/3rd/ucoro/include")
append_glob_source(mlat_source_srcs "${md}/mlat_source")
add_library(mlat_source SHARED ${mlat_source_srcs})
target_include_directories(mlat_source PUBLIC "${md}")
target_link_libraries(mlat_source PUBLIC ${Core})
append_glob_source(ecap_server_srcs "${md}/Local_Server")
add_executable(ecap_server "${md}/Local_Server_main.cpp" ${ecap_server_srcs})
target_include_directories(ecap_server PUBLIC "${md}")
target_include_directories(ecap_server PRIVATE ${ZLIB_INCLUDE_DIR})
target_link_libraries(ecap_server PUBLIC SSR)
target_link_libraries(ecap_server PUBLIC ${Core})
target_link_libraries(ecap_server PRIVATE Drogon::Drogon)
target_link_libraries(ecap_server PRIVATE SQLiteCpp)
target_link_libraries(ecap_server PRIVATE ${ZLIB_LIBRARY})
target_include_directories(ecap_server PRIVATE ${ZLIB_INCLUDE_DIR})
message("LibArchive_SUB_LIBRARIES {${LibArchive_SUB_LIBRARIES}}")
target_link_libraries(ecap_server PRIVATE
LibArchive::LibArchive
@@ -53,98 +53,21 @@ if (1)
)
target_compile_definitions(ecap_server PRIVATE LIBARCHIVE_STATIC)
target_compile_definitions(ecap_server PRIVATE NOMINMAX)
target_compile_definitions(ecap_server PRIVATE INCL_EXTRA_HTON_FUNCTIONS) # drogon用
_attach_source_file(ecap_server "${md}/Local_Server_main.cpp")
_attach_post_build_file(ecap_server ${cfg_dir}/config.json)
# if (MSVC)
#
# target_compile_options(ecap_server PRIVATE /fsanitize=address /Zi)
#
# target_link_options(ecap_server PRIVATE /INCREMENTAL:NO /DEBUG)
# get_filename_component(_msvc_bin_dir "${CMAKE_CXX_COMPILER}" DIRECTORY)
# find_file(ASAN_RUNTIME_DLL
# NAMES clang_rt.asan_dbg_dynamic-x86_64.dll
# PATHS "${_msvc_bin_dir}"
# NO_DEFAULT_PATH
# REQUIRED
# )
# if (NOT ASAN_RUNTIME_DLL)
# message(FATAL_ERROR "找不到 ASan 运行库: clang_rt.asan_dbg_dynamic-x86_64.dll,搜索目录: ${_msvc_bin_dir}")
# endif ()
# add_custom_command(TARGET ecap_server POST_BUILD
# COMMAND "${CMAKE_COMMAND}" -E copy_if_different
# "${ASAN_RUNTIME_DLL}"
# "$<TARGET_FILE_DIR:ecap_server>"
# VERBATIM
# )
# else ()
#
# # target_compile_options(ecap_server PRIVATE -fsanitize=address -fno-omit-frame-pointer -g)
# #
# # target_link_options(ecap_server PRIVATE -fsanitize=address)
#
# endif ()
if (UNIX AND NOT APPLE)
# 添加进程间通信系统库
target_compile_options(ecap_server PRIVATE -g -gstrict-dwarf -gdwarf-4 -fvar-tracking-assignments)
# set(CMAKE_FOLDER "lzy")
# add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/lzy ${CMAKE_BINARY_DIR}/lzy)
# unset(CMAKE_FOLDER)
set(ver v1.0.4)
set(WEB_DIR "${CMAKE_CURRENT_LIST_DIR}/webapp")
set(publish_root_dir "${CMAKE_CURRENT_LIST_DIR}/ver")
set(publish_dir "${publish_root_dir}/${ver}")
set(WEB_OUT_DIR "${publish_dir}/wwwroot")
set(PACKAGE_ZIP "${publish_dir}.zip")
set(NODE_DIR "C:/Users/wyc/AppData/Roaming/JetBrains/WebStorm2026.1/node/versions/24.15.0")
set(NPM_EXECUTABLE "${NODE_DIR}/npm.cmd")
if (NOT EXISTS "${NODE_DIR}/node.exe")
message(FATAL_ERROR "node.exe not found: ${NODE_DIR}/node.exe")
endif ()
add_custom_target(ecap_server_package
COMMAND ${CMAKE_COMMAND} -E make_directory "${publish_dir}"
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:ecap_server> ${publish_dir}
COMMAND ${CMAKE_COMMAND} -E remove_directory "${WEB_OUT_DIR}"
COMMAND ${CMAKE_COMMAND} -E env
"PATH=${NODE_DIR};$ENV{PATH}"
${CMAKE_COMMAND} -E chdir "${WEB_DIR}"
"${NPM_EXECUTABLE}" run build -- --outDir "${WEB_OUT_DIR}" --emptyOutDir
COMMAND ${CMAKE_COMMAND} -E remove -f "${PACKAGE_ZIP}"
COMMAND ${CMAKE_COMMAND} -E chdir "${publish_dir}"
${CMAKE_COMMAND} -E tar cf "${PACKAGE_ZIP}" --format=zip -- .
COMMENT "Build frontend"
USES_TERMINAL
VERBATIM
)
add_dependencies(ecap_server_package ecap_server)
endif ()
if (MSVC)
target_compile_definitions(ecap_server PRIVATE
_CRTDBG_MAP_ALLOC
)
endif ()
add_dependencies(ecap_server dll_source)
if (WIN32)
endif ()
_create("exe" test_drogon)
_attach_include_dir(test_drogon "${md}")
_attach_source_dir(test_drogon "${md}/test_drogon")
target_link_libraries(test_drogon PRIVATE Drogon::Drogon)
endif ()
rcl_unload_dependency_environment(${rely})
#include("${CMAKE_SOURCE_DIR}/0_cmake_library/ninja_build_analyze/export.cmake")
#
#register_ninja_build_analyze_target(
# ninja_build_analyze_ctx # 分析上下文 target 名,自己起名
# "Core_Static" # 要分析的构建目标;空字符串表示 all
# "${CMAKE_BINARY_DIR}/analyze" # 分析输出目录;空字符串表示 build/build_analysis
# "ON" # 是否先 cleanON/OFF
# "30" # top 数量;空字符串表示 30
#)
+11 -19
View File
@@ -1,46 +1,38 @@
#include "../Aircraft/Flight_VTO.h"
#include "Flight_VTO.h"
#include <algorithm>
#include <cmath>
namespace {
double to_radians(double degrees) {
return degrees * 3.14159265358979323846 / 180.0;
}
double track_heading_from_points(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
double track_heading_from_points(const SSR::Position_Info& first, const SSR::Position_Info& second) {
auto lat1 = to_radians(first.lat);
auto lat2 = to_radians(second.lat);
auto dlon = to_radians(second.lon - first.lon);
auto y = std::sin(dlon) * std::cos(lat2);
auto x = std::cos(lat1) * std::sin(lat2) -
std::sin(lat1) * std::cos(lat2) * std::cos(dlon);
auto x = std::cos(lat1) * std::sin(lat2) - std::sin(lat1) * std::cos(lat2) * std::cos(dlon);
auto angle = std::atan2(y, x) * 180.0 / 3.14159265358979323846;
return angle < 0 ? angle + 360.0 : angle;
}
double ground_distance_meters(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
double ground_distance_meters(const SSR::Position_Info& first, const SSR::Position_Info& second) {
auto dlat = to_radians(second.lat - first.lat);
auto dlon = to_radians(second.lon - first.lon);
auto lat1 = to_radians(first.lat);
auto lat2 = to_radians(second.lat);
auto a = std::sin(dlat / 2) * std::sin(dlat / 2) +
std::cos(lat1) * std::cos(lat2) * std::sin(dlon / 2) *
std::sin(dlon / 2);
auto a =
std::sin(dlat / 2) * std::sin(dlat / 2) + std::cos(lat1) * std::cos(lat2) * std::sin(dlon / 2) * std::sin(dlon / 2);
auto safe_a = std::min(1.0, std::max(0.0, a));
return 6371000.0 * 2 *
std::atan2(std::sqrt(safe_a), std::sqrt(1 - safe_a));
return 6371000.0 * 2 * std::atan2(std::sqrt(safe_a), std::sqrt(1 - safe_a));
}
double track_pitch_from_points(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
double track_pitch_from_points(const SSR::Position_Info& first, const SSR::Position_Info& second) {
auto distance = ground_distance_meters(first, second);
return std::atan2(second.alt - first.alt, distance) * 180.0 /
3.14159265358979323846;
return std::atan2(second.alt - first.alt, distance) * 180.0 / 3.14159265358979323846;
}
Flight_Track_Orientation track_orientation_from_points(const SSR::Position_Info& first,
const SSR::Position_Info& second) {
return {track_heading_from_points(first, second),
track_pitch_from_points(first, second), 0.0};
}
return {track_heading_from_points(first, second), track_pitch_from_points(first, second), 0.0};
}
} // namespace
Psc::JSON Flight_Track_Orientation::to_json() const {
auto ret = Psc::JSON::object();
ret.append({"heading", heading});
+2 -2
View File
@@ -1,6 +1,6 @@
#pragma once
#include "Core/Base/JSON.h"
#include "Core/socket/export.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/socket/export.h"
#include "SSR/export.h"
#include <SQLiteCpp/SQLiteCpp.h>
#include <cstring>
+56 -69
View File
@@ -1,96 +1,83 @@
#pragma once
#include <string_view>
#include "Core/Base/JSON.h"
#include "Core/Statistics/Frequency_Limit.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/Statistics/Frequency_Limit.h"
#include <SQLiteCpp/Database.h>
#include <SQLiteCpp/Statement.h>
#include <SQLiteCpp/Transaction.h>
#include <functional>
#include <iostream>
#include <string>
class Crawler {
public:
using Call_back = std::function<void(std::string_view hex, std::string_view icaoType,
Psc::JSON &json)>;
explicit Crawler(std::string_view db_path)
: db_(std::string(db_path), SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE) {
aircraft_json_table_create_if_not_exists();
// 可选:性能更好(仍然是同步)
db_.exec("PRAGMA journal_mode=WAL;");
db_.exec("PRAGMA synchronous=NORMAL;");
}
void aircraft_json_table_create_if_not_exists() {
db_.exec(R"sql(
using Call_back = std::function<void(std::string_view hex, std::string_view icaoType, Psc::JSON& json)>;
explicit Crawler(std::string_view db_path) :
db_(std::string(db_path), SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE) {
aircraft_json_table_create_if_not_exists();
// 可选:性能更好(仍然是同步)
db_.exec("PRAGMA journal_mode=WAL;");
db_.exec("PRAGMA synchronous=NORMAL;");
}
void aircraft_json_table_create_if_not_exists() {
db_.exec(R"sql(
CREATE TABLE IF NOT EXISTS aircraft_json (
icao TEXT PRIMARY KEY,
json TEXT
);
)sql");
}
bool check_aircraft_exists(SQLite::Database &db, std::string_view icao) {
// 查询是否存在该icao
static auto stmt_check_ = SQLite::Statement(db, R"sql(
}
bool check_aircraft_exists(SQLite::Database& db, std::string_view icao) {
// 查询是否存在该icao
static auto stmt_check_ = SQLite::Statement(db, R"sql(
SELECT COUNT(*) FROM aircraft_json WHERE icao = ?;
)sql");
stmt_check_.reset();
stmt_check_.clearBindings();
stmt_check_.bind(1, std::string(icao));
int count = 0;
if (stmt_check_.executeStep()) {
count = stmt_check_.getColumn(0).getInt();
stmt_check_.reset();
stmt_check_.clearBindings();
stmt_check_.bind(1, std::string(icao));
int count = 0;
if (stmt_check_.executeStep()) {
count = stmt_check_.getColumn(0).getInt();
}
// 如果存在记录,返回 true
return count > 0;
}
// 如果存在记录,返回 true
return count > 0;
}
void insert_aircraft_json(std::string_view icao, const Psc::JSON &j) {
static auto stmt_upsert_ = SQLite::Statement(db_, R"sql(
void insert_aircraft_json(std::string_view icao, const Psc::JSON& j) {
static auto stmt_upsert_ = SQLite::Statement(db_, R"sql(
INSERT INTO aircraft_json(icao, json)
VALUES(?, ?)
ON CONFLICT(icao) DO UPDATE SET
json = excluded.json;
)sql");
const std::string json_str = j.to_json_string();
std::lock_guard g(mtx);
SQLite::Transaction tx(db_); // BEGIN
stmt_upsert_.reset();
stmt_upsert_.clearBindings();
stmt_upsert_.bind(1, std::string(icao));
stmt_upsert_.bind(2, json_str);
stmt_upsert_.exec();
tx.commit();
}
void req_all_insert_aircraft_json() {
std::atomic<size_t> idx = 0;
handle(
[this, &idx](std::string_view hex, std::string_view icaoType, Psc::JSON &json) {
// 直接同步写库(最简单)
try {
static Frequency_Limit fl;
idx++;
if (fl.test()) {
std::cout << idx << "/618325 条数据处理成功! " << std::endl;
const std::string json_str = j.to_json_string();
std::lock_guard g(mtx);
SQLite::Transaction tx(db_); // BEGIN
stmt_upsert_.reset();
stmt_upsert_.clearBindings();
stmt_upsert_.bind(1, std::string(icao));
stmt_upsert_.bind(2, json_str);
stmt_upsert_.exec();
tx.commit();
}
void req_all_insert_aircraft_json() {
std::atomic<size_t> idx = 0;
handle([this, &idx](std::string_view hex, std::string_view icaoType, Psc::JSON& json) {
// 直接同步写库(最简单)
try {
static Frequency_Limit fl;
idx++;
if (fl.test()) {
std::cout << idx << "/618325 条数据处理成功! " << std::endl;
}
insert_aircraft_json(hex, json);
}
catch (const std::exception& e) {
// 用你自己的 LOG_ERROR
std::cerr << "sqlite insert failed: " << e.what() << "\n";
}
insert_aircraft_json(hex, json);
} catch (const std::exception &e) {
// 用你自己的 LOG_ERROR
std::cerr << "sqlite insert failed: " << e.what() << "\n";
}
});
}
}
private:
SQLite::Database db_;
std::mutex mtx;
void handle(Call_back cb); // 你自己实现/已有
SQLite::Database db_;
std::mutex mtx;
void handle(Call_back cb); // 你自己实现/已有
};
+1 -1
View File
@@ -1,7 +1,7 @@
#include "Local_Server/DSP/DSP_Config.h"
#include "../server/Global.h"
#include "Core/socket/ByteOrder.h"
#include "Psc_Cpp_Core/socket/ByteOrder.h"
#include <drogon/HttpAppFramework.h>
#include <drogon/PubSubService.h>
#include <drogon/WebSocketController.h>
+1 -1
View File
@@ -5,7 +5,7 @@
class Global;
#define USE_PROCESS 0
#ifdef USE_PROCESS
#include "Core/Shared_Memory/Shared_Memory.h"
#include "Psc_Cpp_Core/Shared_Memory/Shared_Memory.h"
#endif
// #ifdef WIN32
// #define USE_PROCESS 1
+10 -11
View File
@@ -1,16 +1,15 @@
#pragma once
#include "../../dll_source/main.h"
#include "Core/Base/JSON.h"
#include "Core/spdlog/export.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/spdlog/export.h"
class Base_DSP {
public:
std::string library_path;
std::uint64_t center_freq{};
std::uint64_t band_width{};
std::uint64_t sample_rate{};
Psc::Copyable_Atomic<std::uint64_t> fft_point_number = 1024;
int fft_period_ms;
UHD_FFTWin fft_win_type;
PSC_USE_JSON
std::string library_path;
std::uint64_t center_freq{};
std::uint64_t band_width{};
std::uint64_t sample_rate{};
Psc::Copyable_Atomic<std::uint64_t> fft_point_number = 1024;
int fft_period_ms;
UHD_FFTWin fft_win_type;
PSC_USE_JSON
};
+5 -5
View File
@@ -1,7 +1,7 @@
#pragma once
#include "../server/Mode_Msg_Buffer.h"
#include "Core/Serial/Serial.h"
#include "Core/Statistics/Frequency_Limit.h"
#include "Core/socket/TCP_Server.h"
#include "Core/socket/export.h"
#include <ostream>
#include "../server/Mode_Msg_Buffer.h"
#include "Psc_Cpp_Core/Serial/Serial.h"
#include "Psc_Cpp_Core/Statistics/Frequency_Limit.h"
#include "Psc_Cpp_Core/socket/TCP_Server.h"
#include "Psc_Cpp_Core/socket/export.h"
@@ -1,14 +1,14 @@
#pragma once
#include <string_view>
#include <utility>
#include "Core/Base/SM_RingBuffer.h"
#include "Core/Serial/Serial_Coro.h"
#include "Core/Statistics/Frequency_Limit.h"
#include "Core/Statistics/Statistics.h"
#include "Core/transmit_protocol/core/statistics.h"
#include "Database.h"
#include "Local_Server/global_include.h"
#include "PlayBack.h"
#include "Psc_Cpp_Core/Base/SM_RingBuffer.h"
#include "Psc_Cpp_Core/Serial/Serial_Coro.h"
#include "Psc_Cpp_Core/Statistics/Frequency_Limit.h"
#include "Psc_Cpp_Core/Statistics/Statistics.h"
#include "Psc_Cpp_Core/transmit_protocol/core/statistics.h"
#include "global.h"
// 这个函数专门装cpu密集函数 放到线程池去处理
class Data_Source_Handler : public DataBase {
+18 -22
View File
@@ -1,7 +1,4 @@
#pragma once
#include "Core/Base/JSON.h"
#include "Core/socket/export.h"
#include "SSR/export.h"
#include <SQLiteCpp/SQLiteCpp.h>
#include <cstring>
#include <iostream>
@@ -9,30 +6,29 @@
#include <optional>
#include <string>
#include <utility>
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/socket/export.h"
#include "SSR/export.h"
// 用于debug 散乱的飞机从何而来
// #define Cache_Some_Mode_S
#ifdef Cache_Some_Mode_S
#define Cache_Some_Mode_S_Num 20
#define Cache_Some_Mode_S_Num 20
#endif
#define Parse(t, Field) \
auto& _##t = info.Field.value; \
info.Field.time = info.timestamp; \
if (!_##t.has_value()) _##t = std::remove_reference_t<decltype(_##t)>::ValueType(); \
_##t.value().parse(msg); \
auto& t = _##t.value();
// ret.append(NAME.value.has_value()? Psc::Json(STRINGIFY(NAME##_time), NAME.time) : Psc::Json(STRINGIFY(NAME##_time), nullptr));
auto& _##t = info.Field.value; \
info.Field.time = info.timestamp; \
if (!_##t.has_value()) \
_##t = std::remove_reference_t<decltype(_##t)>::ValueType(); \
_##t.value().parse(msg); \
auto& t = _##t.value();
// ret.append(NAME.value.has_value()? Psc::Json(STRINGIFY(NAME##_time), NAME.time) : Psc::Json(STRINGIFY(NAME##_time),
// nullptr));
#define STRINGIFY(x) #x
#define ADD_Json(NAME) ret.children.emplace_back(STRINGIFY(NAME), NAME);
#define ADD_Json_RET(NAME) \
if (NAME.has_value()) \
{ \
ret.children.emplace_back(STRINGIFY(NAME), NAME.value()); \
} else \
{ \
ret.children.emplace_back(STRINGIFY(NAME), nullptr); \
}
if (NAME.has_value()) { \
ret.children.emplace_back(STRINGIFY(NAME), NAME.value()); \
} \
else { \
ret.children.emplace_back(STRINGIFY(NAME), nullptr); \
}
@@ -11,7 +11,7 @@
#include <variant>
#include "../server/Global.h"
#include "../server/Performance_Monitor.h"
#include "Core/Base/Coro_Result.h"
#include "Psc_Cpp_Core/Base/Coro_Result.h"
#include "Resource_Utils.h"
#include "Resources.h"
#include "global.h"
@@ -14,7 +14,7 @@
#include <string>
#include <string_view>
#include <vector>
#include "Core/Base/JSON.h"
#include "Psc_Cpp_Core/Base/JSON.h"
class Global;
struct External_Database_Row {
std::map<std::string, std::optional<std::string>> columns;
+2 -2
View File
@@ -12,8 +12,8 @@
#include <thread>
#include <utility>
#include <vector>
#include "Core/Statistics/Statistics.h"
#include "Core/socket/ByteOrder.h"
#include "Psc_Cpp_Core/Statistics/Statistics.h"
#include "Psc_Cpp_Core/socket/ByteOrder.h"
#include "SSR/export.h"
class Global;
class Invalid_Http_Param final : public std::runtime_error {
+2 -2
View File
@@ -3,9 +3,9 @@
#include <filesystem>
#include <string_view>
#include <utility>
#include "Core/Base/Check.h"
#include "Core/Net_Adapter/Net_Adapter.h"
#include "Global.h"
#include "Psc_Cpp_Core/Base/Check.h"
#include "Psc_Cpp_Core/Net_Adapter/Net_Adapter.h"
#undef interface
std::string default_config_path;
std::string get_config_path() {
+1 -1
View File
@@ -6,8 +6,8 @@
#include "../DSP/export.h"
#include "../Data_Feed/export.h"
#include "../Data_Source/export.h"
#include "Core/spdlog/export.h"
#include "MLAT.h"
#include "Psc_Cpp_Core/spdlog/export.h"
#include "Source_Feed_Relation.h"
inline bool delete_log = false;
extern std::string default_config_path;
+13 -14
View File
@@ -1,20 +1,18 @@
#pragma once
#include <drogon/drogon.h>
#include <filesystem>
#include <list>
#include <string_view>
#include "Core/Base/ThreadManager.h"
#include <utility>
#include "../../Radarcape_Core/cpp-httplib/httplib.h"
#include "../Data_Source/export.h"
#include "../State_Report/State_Report.h"
#include "../global_include.h"
#include "Config.h"
#include "Psc_Cpp_Core/Base/ThreadManager.h"
#include "Psc_Cpp_Core/Net_Adapter/Net_Adapter.h"
#include "Ucoro_Drogon_Glue.h"
#include "Config.h"
#include <drogon/drogon.h>
#include "Config.h"
#include "../../Radarcape_Core/cpp-httplib/httplib.h"
#include "../Data_Source/export.h"
#include "Core/Net_Adapter/Net_Adapter.h"
#include "libarchive.h"
#include <filesystem>
#include <list>
#include <utility>
// 集中 管理日志
using namespace Psc;
extern BaseLogger* server_logger;
@@ -50,7 +48,7 @@ inline JSON warp(const JSON& data) {
// return ret;
return data;
}
#define HTTP_Param const drogon::HttpRequestPtr& req, const drogon::HttpResponsePtr& res
#define HTTP_Param const drogon::HttpRequestPtr &req, const drogon::HttpResponsePtr &res
class Web_Server {
public:
std::string update = "update_";
@@ -110,7 +108,8 @@ class Mlat_Handler {
public:
std::list<Mlat_MSG> get_all() {
std::lock_guard<std::mutex> gg(ok_mtx);
if (ok_list.empty()) return {};
if (ok_list.empty())
return {};
std::list<Mlat_MSG> ret;
std::swap(ok_list, ret);
return ret;
@@ -157,7 +156,8 @@ public:
}
std::shared_ptr<Data_Source> total_source() {
for (auto i : mode_acs.data_source_config.map.list()) {
if (i->enable) return i;
if (i->enable)
return i;
}
return mode_acs.data_source_config.map.list().at(0);
}
@@ -174,4 +174,3 @@ void handle_buffer_muti_start(std::string& buffer, std::string_view data, const
const std::function<void(std::string&)>& callback);
void handle_buffer_head_tail(std::string& buffer, std::string_view data, std::string_view prefix,
std::string_view suffix, const std::function<void(std::string&)>& callback);
+2 -2
View File
@@ -3,8 +3,8 @@
#include <atomic>
#include <string>
#include "../global_include.h"
#include "Core/Base/JSON.h"
#include "Core/system/export.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/system/export.h"
class Global;
#pragma pack(push, 8)
extern "C" {
@@ -2,7 +2,7 @@
#define SOURCE_FEED_RELATION_H
#include <string_view>
#include "../global_include.h"
#include "Core/Serial/Serial.h"
#include "Psc_Cpp_Core/Serial/Serial.h"
struct Source_Feed_Relation {
std::string key;
std::string type;
@@ -1,8 +1,8 @@
#pragma once
#include <string_view>
#include "Core/Base/global_include.h"
#include "Core/socket/ByteOrder.h"
#include "Psc_Cpp_Core/Base/global_include.h"
#include "Psc_Cpp_Core/socket/ByteOrder.h"
#include <drogon/WebSocketConnection.h>
#include <drogon/WebSocketController.h>
+2 -2
View File
@@ -12,8 +12,8 @@
#include <thread>
#include <utility>
#include <vector>
#include "Core/Base/JSON.h"
#include "Core/Statistics/Frequency_Limit.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/Statistics/Frequency_Limit.h"
class With_Loop_Coro_Data {
public:
std::string type;
+1 -1
View File
@@ -1,7 +1,7 @@
#include "io_coro.h"
#include "../server/Global.h"
#include "../server/Mode_Msg_Buffer.h"
#include "Core/Statistics/Frequency_Limit.h"
#include "Psc_Cpp_Core/Statistics/Frequency_Limit.h"
#include "Local_Server/Data_Feed/Data_Feed.h"
#include "Local_Server/Data_Source/Data_Source.h"
#include <asio/detached.hpp>
+27 -38
View File
@@ -12,49 +12,38 @@
#include <memory>
#include <thread>
#include "asio/bind_executor.hpp"
#include "psc_global_include/Singleton.hpp"
#include "private_psc_global_include/Singleton.hpp"
class Coro : public Psc::Singleton<Coro> {
public:
void start();
void stop();
asio::awaitable<void> sleep_for(std::chrono::milliseconds ms);
asio::io_context io;
std::unique_ptr<asio::thread_pool> process_data;
template<typename Awaitable>
std::shared_ptr<std::future<void> > spawn(Awaitable &&awaitable) {
auto future = asio::co_spawn(io, std::forward<Awaitable>(awaitable), asio::use_future);
return std::make_shared<std::future<void> >(std::move(future));
}
// template<typename Awaitable>
// void spawn(Awaitable &&awaitable) {
// asio::co_spawn(io, std::forward<Awaitable>(awaitable), [](std::exception_ptr exception) {
// if (exception) {
// std::rethrow_exception(exception);
// }
// });
// }
void start();
void stop();
asio::awaitable<void> sleep_for(std::chrono::milliseconds ms);
asio::io_context io;
std::unique_ptr<asio::thread_pool> process_data;
template <typename Awaitable>
std::shared_ptr<std::future<void>> spawn(Awaitable&& awaitable) {
auto future = asio::co_spawn(io, std::forward<Awaitable>(awaitable), asio::use_future);
return std::make_shared<std::future<void>>(std::move(future));
}
// template<typename Awaitable>
// void spawn(Awaitable &&awaitable) {
// asio::co_spawn(io, std::forward<Awaitable>(awaitable), [](std::exception_ptr exception) {
// if (exception) {
// std::rethrow_exception(exception);
// }
// });
// }
private:
asio::awaitable<void> coro_thread();
bool has_running_loop_tasks();
std::unique_ptr<asio::executor_work_guard<asio::io_context::executor_type> > io_work;
std::thread io_thread;
std::unique_ptr<std::future<void> > loop_task;
std::atomic<bool> running = false;
asio::awaitable<void> coro_thread();
bool has_running_loop_tasks();
std::unique_ptr<asio::executor_work_guard<asio::io_context::executor_type>> io_work;
std::thread io_thread;
std::unique_ptr<std::future<void>> loop_task;
std::atomic<bool> running = false;
};
inline asio::awaitable<void> resume_on(asio::any_io_executor ex) {
co_await asio::post(asio::bind_executor(ex, asio::deferred));
co_await asio::post(asio::bind_executor(ex, asio::deferred));
}
inline asio::awaitable<void> dispatch_on(asio::any_io_executor ex) {
co_await asio::dispatch(asio::bind_executor(ex, asio::deferred));
co_await asio::dispatch(asio::bind_executor(ex, asio::deferred));
}
+24 -36
View File
@@ -1,58 +1,46 @@
#ifndef PLANTSUNCAT_ZIP_H
#define PLANTSUNCAT_ZIP_H
#include "Core/Base/global_include.h"
#include <cstddef>
#include <cstdint>
#include <filesystem>
#include <stdexcept>
#include <string>
#include <vector>
#include "Psc_Cpp_Core/Base/global_include.h"
class Invalid_Archive_Error final : public std::runtime_error {
public:
using std::runtime_error::runtime_error;
using std::runtime_error::runtime_error;
};
struct Archive_Directory_Layout_Rule {
std::string directory;
std::vector<std::string> required_files;
std::vector<std::string> required_directories;
std::vector<std::string> optional_files;
std::vector<std::string> optional_directories;
std::string directory;
std::vector<std::string> required_files;
std::vector<std::string> required_directories;
std::vector<std::string> optional_files;
std::vector<std::string> optional_directories;
};
struct Archive_Layout_Rules {
std::vector<Archive_Directory_Layout_Rule> directories;
std::size_t max_archive_size = 128 * 1024 * 1024;
std::size_t max_entry_count = 16 * 1024;
std::uint64_t max_entry_uncompressed_size = 256ULL * 1024 * 1024;
std::uint64_t max_total_uncompressed_size = 512ULL * 1024 * 1024;
std::vector<Archive_Directory_Layout_Rule> directories;
std::size_t max_archive_size = 128 * 1024 * 1024;
std::size_t max_entry_count = 16 * 1024;
std::uint64_t max_entry_uncompressed_size = 256ULL * 1024 * 1024;
std::uint64_t max_total_uncompressed_size = 512ULL * 1024 * 1024;
};
struct Archive_Write_Options {
std::string format = "zip";
std::string filter;
std::string extension = "zip";
std::string format = "zip";
std::string filter;
std::string extension = "zip";
};
Psc::expected<void, std::string>
validate_archive_layout_from_memory(const char *data, std::size_t size,
const Archive_Layout_Rules &rules);
void unarchive_file(const std::filesystem::path &zipPath,
const std::filesystem::path &outDir);
void unarchive_from_memory(const char *data, size_t size,
const std::filesystem::path &outDir);
void archive_directory(const std::filesystem::path &dirPath,
const std::filesystem::path &archive_path,
const Archive_Write_Options &options = {});
Psc::expected<void, std::string> validate_archive_layout_from_memory(const char* data, std::size_t size,
const Archive_Layout_Rules& rules);
void unarchive_file(const std::filesystem::path& zipPath, const std::filesystem::path& outDir);
void unarchive_from_memory(const char* data, size_t size, const std::filesystem::path& outDir);
void archive_directory(const std::filesystem::path& dirPath, const std::filesystem::path& archive_path,
const Archive_Write_Options& options = {});
// std::string zip_directory_to_memory(const std::filesystem::path& dirPath,
// const
// std::vector<std::filesystem::path>&
// ignoreDirs);
std::string
archive_directory_to_memory(const std::filesystem::path &dirPath,
const std::vector<std::string> &ignorePatterns,
const Archive_Write_Options &options = {});
std::string archive_directory_to_memory(const std::filesystem::path& dirPath,
const std::vector<std::string>& ignorePatterns,
const Archive_Write_Options& options = {});
#endif
-1
View File
@@ -6,7 +6,6 @@
#include <asio/use_awaitable.hpp>
#include "Global.h"
#include "Performance_Monitor.h"
#include "psc_global_include/codec.h"
#if defined(ASIO_HAS_FILE)
#include <asio/random_access_file.hpp>
#include <asio/read_at.hpp>
+1 -1
View File
@@ -1,5 +1,5 @@
#include "../../../../core_library/Core/Core/ThreadManager.h"
#include "Core/JSON.h"
#include "Psc_Cpp_Core/JSON.h"
#ifdef _build_exe
// int main(){
// return 0;
+2 -2
View File
@@ -1,6 +1,6 @@
#include "Dll_Global.h"
#include "Core/Base/JSON.h"
#include "Core/Base/SM_RingBuffer.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/Base/SM_RingBuffer.h"
Dll_Global* dg = new Dll_Global();
std::string Dll_Global::get_config_path() {
return get_exe_dir() + "/" + "data_progress_config.json";
+50 -60
View File
@@ -1,6 +1,5 @@
#ifndef PLANTSUNCAT_DLL_GLOBAL_H
#define PLANTSUNCAT_DLL_GLOBAL_H
#include "main.h"
#include <chrono>
#include <csignal>
#include <cstring>
@@ -13,77 +12,68 @@
#include <string>
#include <thread>
#include <vector>
#include "main.h"
#include "../Local_Server/DSP/global.h"
#include "Core/Base/JSON.h"
#include "Core/Base/ThreadManager.h"
#include "Core/Base/global_include.h"
#include "Core/Shared_Memory/Shared_Memory.h"
#include "Core/spdlog/export.h"
#include "Core/system/export.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/Base/ThreadManager.h"
#include "Psc_Cpp_Core/Base/global_include.h"
#include "Psc_Cpp_Core/Shared_Memory/Shared_Memory.h"
#include "Psc_Cpp_Core/spdlog/export.h"
#include "Psc_Cpp_Core/system/export.h"
namespace Psc {
class SM_RingBuffer;
}
using namespace Psc;
struct Memory_Buffer {
std::vector<std::string *> get_all() {
std::lock_guard lock(m);
std::swap(cache, data_list);
return data_list;
}
void push(void *pdata, uint64_t length) {
auto buf = pool.get();
buf->resize(length);
std::memcpy(buf->data(), pdata, length);
{
std::lock_guard lock(m);
cache.push_back(buf);
std::vector<std::string*> get_all() {
std::lock_guard lock(m);
std::swap(cache, data_list);
return data_list;
}
}
String_Pool pool = String_Pool(2112, 8 * 1024);
void push(void* pdata, uint64_t length) {
auto buf = pool.get();
buf->resize(length);
std::memcpy(buf->data(), pdata, length);
{
std::lock_guard lock(m);
cache.push_back(buf);
}
}
String_Pool pool = String_Pool(2112, 8 * 1024);
protected:
std::vector<std::string *> data;
std::vector<std::string *> cache;
std::vector<std::string *> data_list;
Psc::Spin_Lock m;
std::vector<std::string*> data;
std::vector<std::string*> cache;
std::vector<std::string*> data_list;
Psc::Spin_Lock m;
};
struct BB : Base_DSP {
BB() {}
BB() {
}
};
#define freq 0.1
struct Dll_Global : BB, public Singleton<Dll_Global> {
SM_RingBuffer *rb{};
SM_RingBuffer *json_func_call{};
SM_RingBuffer *mode_acs{};
// Pure_Share_Memory psm = Pure_Share_Memory("fft_data", 65536);
std::uint8_t *psm;
Memory_Buffer iq_memory_buffer;
Detach_Thread_Manager dtm;
adsb_set_iq_cbk_t set_iq_cbk;
adsb_set_less_30Mhz_ddc_param_t set_less_30Mhz_ddc_param;
adsb_set_less_30Mhz_fft_param_t set_less_30Mhz_fft_param;
static std::string get_config_path();
void init_when_exe();
void init_when_dll();
Dll_Global();
~Dll_Global();
void save();
void handle_json_call();
iq_cbk_t recv_cbk{};
void *puser{};
void give_call_back(std::uint8_t *data, size_t len);
void handle_2112(void *data);
void handle_2112_pure(void *data);
void handle_2112_test(void *data);
SM_RingBuffer* rb{};
SM_RingBuffer* json_func_call{};
SM_RingBuffer* mode_acs{};
// Pure_Share_Memory psm = Pure_Share_Memory("fft_data", 65536);
std::uint8_t* psm;
Memory_Buffer iq_memory_buffer;
Detach_Thread_Manager dtm;
adsb_set_iq_cbk_t set_iq_cbk;
adsb_set_less_30Mhz_ddc_param_t set_less_30Mhz_ddc_param;
adsb_set_less_30Mhz_fft_param_t set_less_30Mhz_fft_param;
static std::string get_config_path();
void init_when_exe();
void init_when_dll();
Dll_Global();
~Dll_Global();
void save();
void handle_json_call();
iq_cbk_t recv_cbk{};
void* puser{};
void give_call_back(std::uint8_t* data, size_t len);
void handle_2112(void* data);
void handle_2112_pure(void* data);
void handle_2112_test(void* data);
};
#endif
+7 -7
View File
@@ -13,13 +13,13 @@
#include <vector>
#include <iostream>
#include <optional>
#include "Core/Base/JSON.h"
#include "Core/Base/ThreadManager.h"
#include "Core/Base/global_include.h"
#include "Core/Shared_Memory/Shared_Memory.h"
#include "Core/system/export.h"
#include "Core/spdlog/export.h"
#include "Core/Base/SM_RingBuffer.h"
#include "Psc_Cpp_Core/Base/JSON.h"
#include "Psc_Cpp_Core/Base/ThreadManager.h"
#include "Psc_Cpp_Core/Base/global_include.h"
#include "Psc_Cpp_Core/Shared_Memory/Shared_Memory.h"
#include "Psc_Cpp_Core/system/export.h"
#include "Psc_Cpp_Core/spdlog/export.h"
#include "Psc_Cpp_Core/Base/SM_RingBuffer.h"
#include "Dll_Global.h"
#include <string_view>
#ifndef ECAP_ADSB_PLAYBACK_SPEED_RATE