#include "tdoa_sync.h" #include "sync_time/sync_time_message.h" #include "sync_manager.h" #include #include extern config_file config; struct tdoa_sync_impl:tdoa_sync { virtual void on_message(message_tdoasync&msg) { host_server::sync_time_message _sync_msg; _sync_msg.set_local_id((unsigned long long)(msg.m_local_site_id)); _sync_msg.set_local_id((unsigned long long)((_sync_msg.get_local_id() << 8) + msg.m_local_ant_id)); _sync_msg.set_upper_id((unsigned long long)(msg.m_parent_site_id)); _sync_msg.set_upper_id((unsigned long long)((_sync_msg.get_upper_id() << 8) + msg.m_parent_ant_id)); _sync_msg.set_root_id((unsigned long long)(msg.m_root_site_id)); _sync_msg.set_root_id((unsigned long long)((_sync_msg.get_root_id() << 8) + msg.m_root_ant_id)); _sync_msg.set_sync_num(msg.m_sync_num); _sync_msg.set_sync_level(msg.m_local_level); _sync_msg.set_local_send_time(msg.m_send_time); _sync_msg.set_local_receive_time(msg.m_recv_time); ssync_manager.analyze_sync_msg(_sync_msg); } virtual void translate(message_tdoa_locinfo& tdoa_msg) { host_server::tag_message _tag_msg; _tag_msg.m_receive_time = tdoa_msg.m_card_msg.m_loc_stamp; _tag_msg.m_local_id = host_server::sync_helper::parse_id((unsigned long long)tdoa_msg.m_site_msg.m_site_id, (unsigned long long)(tdoa_msg.m_card_msg.m_ant_id + 1)); _tag_msg.m_sync_num = tdoa_msg.m_card_msg.m_time_stamp; // 线性插值后的值 uint64_t ip_value = 0; // 线性插值类型 int ip_type = config.get("service.interpolation", 0); switch(ip_type){ case 0: ip_value = ssync_manager.cal_time_by_linear(_tag_msg); break; case 1: ip_value = ssync_manager.cal_time_by_inter_linear(_tag_msg); break; default: break; } if(0 == ip_value){ ip_value = LONGLONG_MAX; } tdoa_msg.m_interpolation = ip_value; log_info("[tdoa] interpolation_info: card_id=%d, ct=%d, sync_num=%d, type=%d, value=%lld", tdoa_msg.m_card_msg.m_id, tdoa_msg.m_card_msg.m_time_stamp, tdoa_msg.m_card_msg.m_sync_num, ip_type, ip_value); } }; tdoa_sync*tdoa_sync::instance() { static tdoa_sync_impl _impl; return &_impl; }