85 lines
2.5 KiB
C++
85 lines
2.5 KiB
C++
#ifndef MOCK_CORE_H
|
|
#define MOCK_CORE_H
|
|
#include <vector>
|
|
|
|
|
|
// 通过构造 三个基站 以及 一个飞机 三个数据源 来生成数据
|
|
|
|
namespace Mock {
|
|
struct BaseStation {
|
|
Psc::socket::Server_Socket server;
|
|
HULC_Status_Message hulc_message{};
|
|
// 生成HUCL消息报告 1a34 自身经纬度 1s 1次
|
|
BaseStation() {
|
|
hulc_message.SerNum = 3;
|
|
hulc_message.Alt = 7500;
|
|
hulc_message.HDOP = 0.75;
|
|
hulc_message.Sat = 75;
|
|
hulc_message.I_U_ = 88;
|
|
}
|
|
|
|
std::string generage_message() {
|
|
auto now = std::chrono::system_clock::now();
|
|
auto epoch = std::chrono::system_clock::to_time_t(now);
|
|
hulc_message.xTime = epoch;
|
|
// 要经过转义
|
|
return packet_to_escape_format(hulc_message.toBinary());
|
|
}
|
|
|
|
void set_pos(CPR::D lat, CPR::D lon) {
|
|
hulc_message.set_latitude(lat);
|
|
hulc_message.set_longitude(lon);
|
|
}
|
|
[[nodiscard]] CPR::Position position() const {
|
|
CPR::Position pos{};
|
|
pos.latitude = hulc_message.get_latitude();
|
|
pos.longitude = hulc_message.get_longitude();
|
|
return pos;
|
|
}
|
|
};
|
|
|
|
class Plane {
|
|
public:
|
|
std::string icao;
|
|
std::vector<CPR::Position> track;
|
|
std::string generate_message(MLAT_timestamp* timestamp, CPR::Position pos, BaseStation* station) {
|
|
All_Call_Reply::All_Call_Reply r = All_Call_Reply::All_Call_Reply::Builder()
|
|
.set_icao(icao)
|
|
.set_interrogator_identifier("abc750")
|
|
.set_transponder_address(hex2bin("abc617"))
|
|
.build();
|
|
|
|
|
|
auto [i1, i2] = CPR::light_time_second_nano(station->position(), pos);
|
|
auto total_nanosec = timestamp->nanosec + i2; // 累加纳秒部分
|
|
auto total_sec = timestamp->daysec + i1; // 累加秒部分
|
|
if (total_nanosec >= 1000000000) {
|
|
// 纳秒部分超过 1 秒,处理进位
|
|
total_sec += total_nanosec / 1000000000; // 将纳秒转换为秒并加到 total_sec
|
|
total_nanosec = total_nanosec % 1000000000; // 保留纳秒部分,取余数
|
|
}
|
|
MLAT_timestamp t(total_sec, total_nanosec);
|
|
// 默认构造获取系统的描述 已经经过转义
|
|
return create_Binary_Format_memory(bin2hex(r.msg), 75, &t);
|
|
}
|
|
};
|
|
|
|
|
|
struct Global {
|
|
std::vector<Plane> planes;
|
|
|
|
|
|
|
|
std::vector<BaseStation> stations;
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|