ecap_server 分布式改造

This commit is contained in:
2026-07-03 16:50:53 +08:00
parent 1fd0a0bf4b
commit d1ac013685
18 changed files with 410 additions and 241 deletions
+3
View File
@@ -1,2 +1,5 @@
/sqlite/
/data/
/.idea
+11 -1
View File
@@ -1,5 +1,15 @@
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_LIST_DIR})
include(${CMAKE_CURRENT_LIST_DIR}/main.cmake)
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<$<CONFIG:Debug,RelWithDebInfo>:Embedded>")
project(plantSunCat)
set(PLANT_SUN_CAT_VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 20)
include(third_party/build_infra/start.cmake)
include(third_party/CPP_Core/main.cmake)
include(third_party/SSR/main.cmake)
include(${CMAKE_SOURCE_DIR}/main.cmake)
include(third_party/build_infra/end.cmake)
else ()
endif ()
+7
View File
@@ -0,0 +1,7 @@
{
"version": 4,
"include": [
"toolchain/vs2022.json",
"toolchain/vs2019.json"
]
}
+10 -9
View File
@@ -13,6 +13,7 @@ message(STATUS "CMAKE_FIND_ROOT_PATH=${CMAKE_FIND_ROOT_PATH}")
message(STATUS "CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=${CMAKE_FIND_ROOT_PATH_MODE_PACKAGE}")
message("JSONCPP_INCLUDE_DIRS ${JSONCPP_INCLUDE_DIRS} JSONCPP_LIBRARIES ${JSONCPP_LIBRARIES}")
find_package(Jsoncpp CONFIG)
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
if (MSVC AND NOT TARGET std::filesystem)
@@ -138,13 +139,13 @@ endif ()
rcl_unload_dependency_environment(drogon ${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
)
#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
#)
+1 -1
View File
@@ -1,5 +1,5 @@
#pragma once
#include "../../../../../core_library/Core/Core/Base/JSON.h"
#include "Core/Base/JSON.h"
#include "Core/socket/export.h"
#include "SSR/export.h"
#include <SQLiteCpp/SQLiteCpp.h>
+1 -1
View File
@@ -1,7 +1,7 @@
#pragma once
#include <string_view>
#include "../../../../../core_library/Core/Core/Base/JSON.h"
#include "Core/Base/JSON.h"
#include "Core/Statistics/Frequency_Limit.h"
#include <SQLiteCpp/Database.h>
+1 -1
View File
@@ -8,7 +8,7 @@ class Global;
#define USE_PROCESS 0
#ifdef USE_PROCESS
#include "../../../../../core_library/Core/Core/Shared_Memory/Shared_Memory.h"
#include "Core/Shared_Memory/Shared_Memory.h"
#endif
// #ifdef WIN32
// #define USE_PROCESS 1
+1 -1
View File
@@ -1,5 +1,5 @@
#pragma once
#include "../../../../../core_library/Core/Core/Base/JSON.h"
#include "Core/Base/JSON.h"
#include "Core/socket/export.h"
#include "SSR/export.h"
#include <SQLiteCpp/SQLiteCpp.h>
+1 -1
View File
@@ -1,5 +1,5 @@
#include "Config.h"
#include "../../../../../core_library/Core/Core/Base/Check.h"
#include "Core/Base/Check.h"
#include "Core/Net_Adapter/Net_Adapter.h"
#include "Global.h"
#include <filesystem>
+2 -2
View File
@@ -1,7 +1,7 @@
#ifndef MLAT_H
#define MLAT_H
#include "../../../../../core_library/Core/Core/Base/JSON.h"
#include "../../../../../core_library/Core/Core/system/export.h"
#include "Core/Base/JSON.h"
#include "Core/system/export.h"
#include "../global_include.h"
#include <atomic>
#include <string>
+20 -49
View File
@@ -1,14 +1,10 @@
#include "Dll_Global.h"
#include "../../../../core_library/Core/Core/Base/JSON.h"
#include "Core/Base/JSON.h"
#include "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";
}
void Dll_Global::init_when_exe() {
rb = new SM_RingBuffer;
rb->init("rb", 2112 * 1000);
@@ -16,7 +12,6 @@ void Dll_Global::init_when_exe() {
json_func_call->init("json_func_call2", 1000);
mode_acs = new SM_RingBuffer;
mode_acs->init("mode_acs", 2112 * 1000);
void *lib;
{
auto r = try_load_library(Psc::get_abs_path(library_path));
@@ -25,7 +20,6 @@ void Dll_Global::init_when_exe() {
}
lib = r.value();
}
{
auto r = Psc::try_load_function(lib, "adsb_set_iq_cbk");
if (!r) {
@@ -47,7 +41,6 @@ void Dll_Global::init_when_exe() {
}
set_less_30Mhz_fft_param = (adsb_set_less_30Mhz_fft_param_t)r.value();
}
std::cout << "set_less_30Mhz_ddc_param "
<< VAR_STR_3(center_freq, sample_rate, band_width) << std::endl;
set_less_30Mhz_ddc_param(center_freq, sample_rate, band_width, 1);
@@ -61,32 +54,26 @@ void Dll_Global::init_when_exe() {
std::cout << LOG_POS << " IQ回调传入的长度不对!" << std::endl;
return;
}
auto dg = (Dll_Global *)phandle;
auto dg = (Dll_Global*)phandle;
//
dg->handle_2112(pdata);
// auto sk = (UHD_Struct_KFFT *) pdata;
// std::cout << (int)sk->DataType << std::endl;
// dg->iq_memory_buffer.push(pdata, length); // length 永远等于2112
},
this);
}
void Dll_Global::init_when_dll() {
Detach_Thread_Manager &manager = dtm;
manager.test_and_start_thread("Dll_Global", [&](std::atomic<bool> &run) {
Detach_Thread_Manager& manager = dtm;
manager.test_and_start_thread("Dll_Global", [&](std::atomic<bool>& run) {
std::mt19937 rng(std::random_device{}()); // 随机数引擎
std::uniform_int_distribution<uint16_t> dist(0 * 256, 70 * 256);
constexpr int size = 64 + 1024 * sizeof(uint16_t);
uint8_t buf[size];
while (run) {
int fn = fft_point_number / 1024;
auto sk = (UHD_Struct_KFFT *)buf;
uint16_t *fft = (uint16_t *)(buf + 64);
auto sk = (UHD_Struct_KFFT*)buf;
uint16_t *fft = (uint16_t*)(buf + 64);
for (int fi = 0; fi < fn; fi++) {
sk->DataType = kd_fft;
sk->Param.FFT.SubFrame = fi;
@@ -95,21 +82,18 @@ void Dll_Global::init_when_dll() {
}
give_call_back(buf, size);
}
uint64_t sleep_ms = fft_period_ms;
uint64_t num = sample_rate / sleep_ms;
uint64_t times = num / 2048;
if (times < 1) {
times = 1;
}
sk->DataType = zd_ddc;
uint16_t *iq = (uint16_t *)(buf + 64);
uint16_t *iq = (uint16_t*)(buf + 64);
for (int i = 0; i < 1024; ++i) {
auto random = dist(rng);
iq[i] = random;
}
sk->UsefullLen = 2048;
for (int i = 0; i < times; ++i) {
give_call_back(buf, size);
@@ -118,7 +102,6 @@ void Dll_Global::init_when_dll() {
}
});
}
Dll_Global::Dll_Global() {
auto config = try_parse_json_file(get_config_path());
if (!config.has_value()) {
@@ -128,14 +111,13 @@ Dll_Global::Dll_Global() {
from_base_json(&config.value());
psm = new std::uint8_t[65536 * 2];
}
Dll_Global::~Dll_Global() { delete psm; }
Dll_Global::~Dll_Global() {
delete psm;
}
void adsb_close() {
std::cout << " adsb_close()" << std::endl;
Dll_Global::instance()->dtm.stop_all_thread();
}
void Dll_Global::save() {
std::ofstream config_file;
config_file.open(get_config_path());
@@ -143,10 +125,9 @@ void Dll_Global::save() {
config_file.write(json.c_str(), static_cast<long long>(json.size()));
config_file.close();
}
void Dll_Global::give_call_back(std::uint8_t *data, size_t len) {
recv_cbk(puser, data, len);
auto sk = (UHD_Struct_KFFT *)data;
auto sk = (UHD_Struct_KFFT*)data;
if (sk->DataType == kd_fft) {
auto idx_max = fft_point_number / 1024;
auto idx = sk->Param.FFT.SubFrame;
@@ -156,26 +137,20 @@ void Dll_Global::give_call_back(std::uint8_t *data, size_t len) {
}
}
}
void Dll_Global::handle_2112_test(void *data) {
// 记录开始时间
auto start = std::chrono::high_resolution_clock::now();
// 调用目标函数
handle_2112_pure(data);
// 记录结束时间
auto end = std::chrono::high_resolution_clock::now();
// 计算持续时间(微秒)
auto duration =
std::chrono::duration_cast<std::chrono::microseconds>(end - start);
// 输出每次调用的时间
std::cout << "Average time per call: " << duration.count() << " microseconds"
<< std::endl;
}
void Dll_Global::handle_2112(void *data) {
handle_2112_pure(data);
// static Frequency_Limit fl(freq);
@@ -185,44 +160,42 @@ void Dll_Global::handle_2112(void *data) {
// handle_2112_pure(data);
// }
}
void Dll_Global::handle_2112_pure(void *data) {
auto d = (UHD_Struct_KFFT *)(data);
auto pdata = (std::uint8_t *)data + 64;
auto d = (UHD_Struct_KFFT*)(data);
auto pdata = (std::uint8_t*)data + 64;
auto idx_max = fft_point_number / 1024;
auto type = d->DataType;
if (type == kd_fft) {
auto idx = d->Param.FFT.SubFrame;
if (idx >= idx_max) {
std::cout << "idx 越界" << idx << " >= " << idx_max << std::endl;
} else {
}
else {
memcpy(psm + idx * 2048, pdata, 2048);
}
}
#if WIN32
else if (type == kd_ddc || type == zd_ddc) {
dg->rb->write((uint8_t *)data, 2112);
} else {
dg->rb->write((uint8_t*)data, 2112);
}
else {
Psc::fail_fast();
}
#else
else {
dg->rb->write((uint8_t *)data, 2112);
dg->rb->write((uint8_t*)data, 2112);
}
#endif
}
void Dll_Global::handle_json_call() {
size_t length = 0;
uint8_t json_func_data[1000];
json_func_call->read(json_func_data, length);
std::string json((const char *)json_func_data, length);
std::string json((const char*)json_func_data, length);
if (!json.empty()) {
auto func_call = Psc::parse_json(json);
auto method = func_call.get_string("method");
std::cout << func_call.to_json_string() << std::endl;
if (method == "adsb_set_less_30Mhz_ddc_param") {
center_freq = func_call.get_number<double>("center_freq");
sample_rate = func_call.get_number<double>("sample_rate");
@@ -231,7 +204,6 @@ void Dll_Global::handle_json_call() {
save();
set_less_30Mhz_ddc_param(center_freq, sample_rate, band_width, sw);
}
if (method == "adsb_set_less_30Mhz_fft_param") {
fft_win_type = (UHD_FFTWin)func_call.get_number<int>("fft_win_type");
fft_point_number = func_call.get_number<int>("fft_point_number");
@@ -241,7 +213,6 @@ void Dll_Global::handle_json_call() {
set_less_30Mhz_fft_param(fft_win_type, fft_point_number, fft_period_ms,
sw);
}
if (method == "restart_device") {
std::cout << "关闭进程, 然后会被守护进程拉起来" << std::endl;
stop_program = true;
+88
View File
@@ -0,0 +1,88 @@
#set(dir "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64")
#
#set(CMAKE_CXX_COMPILER "${dir}/cl.exe")
#set(CMAKE_C_COMPILER "${dir}/cl.exe")
#get_filename_component(_compiler_dir "${CMAKE_CXX_COMPILER}" DIRECTORY)
#
#set(CMAKE_LINKER "${_compiler_dir}/link.bat")
#if(CMAKE_HOST_WIN32 AND CMAKE_GENERATOR MATCHES "Ninja")
#
#
# message(STATUS "CMAKE_GENERATOR = ${CMAKE_GENERATOR}")
# message(STATUS "CMAKE_GENERATOR_INSTANCE = ${CMAKE_GENERATOR_INSTANCE}")
# message(STATUS "CMAKE_GENERATOR_TOOLSET = ${CMAKE_GENERATOR_TOOLSET}")
# message(STATUS "CMAKE_GENERATOR_PLATFORM = ${CMAKE_GENERATOR_PLATFORM}")
# message(STATUS "CMAKE_MAKE_PROGRAM before = ${CMAKE_MAKE_PROGRAM}")
#
# file(GLOB CLION_NINJA_CANDIDATES
# "C:/Program Files/JetBrains/CLion */bin/ninja/win/x64/ninja.exe"
# )
#
# list(SORT CLION_NINJA_CANDIDATES ORDER DESCENDING)
#
# if(CLION_NINJA_CANDIDATES)
# list(GET CLION_NINJA_CANDIDATES 0 CLION_NINJA_EXE)
# message(STATUS "CLION_NINJA_EXE = ${CLION_NINJA_EXE}")
#
# set(CMAKE_MAKE_PROGRAM "${CLION_NINJA_EXE}" CACHE FILEPATH "Ninja executable" FORCE)
# else()
# message(WARNING "CLion ninja.exe not found")
# endif()
#
# message(STATUS "CMAKE_MAKE_PROGRAM after = ${CMAKE_MAKE_PROGRAM}")
#
# # 输出 Ninja 版本
# execute_process(
# COMMAND "${CMAKE_MAKE_PROGRAM}" --version
# OUTPUT_VARIABLE _ninja_version
# ERROR_VARIABLE _ninja_version_err
# RESULT_VARIABLE _ninja_version_ret
# OUTPUT_STRIP_TRAILING_WHITESPACE
# ERROR_STRIP_TRAILING_WHITESPACE
# )
#
# message(STATUS "Ninja version ret = ${_ninja_version_ret}")
# message(STATUS "Ninja version = ${_ninja_version}")
# if(_ninja_version_err)
# message(STATUS "Ninja version err = ${_ninja_version_err}")
# endif()
#
# # 输出 Ninja Windows 编码模式
# execute_process(
# COMMAND "${CMAKE_MAKE_PROGRAM}" -t wincodepage
# OUTPUT_VARIABLE _ninja_wincodepage
# ERROR_VARIABLE _ninja_wincodepage_err
# RESULT_VARIABLE _ninja_wincodepage_ret
# OUTPUT_STRIP_TRAILING_WHITESPACE
# ERROR_STRIP_TRAILING_WHITESPACE
# )
#
# message(STATUS "Ninja wincodepage ret = ${_ninja_wincodepage_ret}")
# message(STATUS "Ninja wincodepage = ${_ninja_wincodepage}")
# if(_ninja_wincodepage_err)
# message(STATUS "Ninja wincodepage err = ${_ninja_wincodepage_err}")
# endif()
#
# # 输出当前 cmd 代码页
# execute_process(
# COMMAND cmd /c chcp
# OUTPUT_VARIABLE _cmd_chcp
# ERROR_VARIABLE _cmd_chcp_err
# RESULT_VARIABLE _cmd_chcp_ret
# OUTPUT_STRIP_TRAILING_WHITESPACE
# ERROR_STRIP_TRAILING_WHITESPACE
# )
#
# message(STATUS "cmd chcp ret = ${_cmd_chcp_ret}")
# message(STATUS "cmd chcp = ${_cmd_chcp}")
# if(_cmd_chcp_err)
# message(STATUS "cmd chcp err = ${_cmd_chcp_err}")
# endif()
#endif()
+38
View File
@@ -0,0 +1,38 @@
{
"version": 10,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"patch": 0
},
"configurePresets": [
{
"name": "vs2019",
"hidden": true,
"graphviz": "${sourceDir}/../build/${presetName}/graphviz/yc.dot",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/toolchain/vs2019.cmake"
},
"vendor": {
"jetbrains.com/clion": {
"toolchain": "vs2019"
}
}
},
{
"name": "vs2019_Debug",
"inherits": "vs2019",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "vs2019_Release",
"inherits": "vs2019",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}
+13
View File
@@ -0,0 +1,13 @@
set(dir "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64")
set(CMAKE_CXX_COMPILER "${dir}/cl.bat")
set(CMAKE_C_COMPILER "${dir}/cl.bat")
set(CMAKE_LINKER "${dir}/link.bat")
#set(CMAKE_CXX_COMPILER "${dir}/cl.exe")
#set(CMAKE_C_COMPILER "${dir}/cl.exe")
#set(CMAKE_LINKER "${dir}/link.exe")
# [2/2] C:\Windows\system32\cmd.exe /C "cd . && "C:\Program Files\JetBrains\CLion 2025.3.4\bin\cmake\win\x64\bin\cmake.exe" -E vs_link_exe --msvc-ver=1944 --intdir=CMakeFiles\radio.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\mt.exe --manifests -- C:\PROGRA~1\MICROS~1\2022\ENTERP~1\VC\Tools\MSVC\1444~1.352\bin\Hostx64\x64\LINK_2~1.BAT /nologo @CMakeFiles\radio.rsp /out:radio.exe /implib:radio.lib /pdb:radio.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console && cd ."
+38
View File
@@ -0,0 +1,38 @@
{
"version": 10,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"patch": 0
},
"configurePresets": [
{
"name": "vs2022",
"hidden": true,
"graphviz": "${sourceDir}/../build/${presetName}/graphviz/yc.dot",
"generator": "Ninja",
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "${sourceDir}/toolchain/vs2022.cmake"
},
"vendor": {
"jetbrains.com/clion": {
"toolchain": "vs2022"
}
}
},
{
"name": "vs2022_debug",
"inherits": "vs2022",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "vs2022_release",
"inherits": "vs2022",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}