123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- #include "tdoa_sync.h"
- #include "sync_time/sync_time_message.h"
- #include "sync_manager.h"
- #include <log.h>
- #include <config_file.h>
- 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);
-
- auto _sync_msg_tmp = _sync_msg;
- for (auto iter = ssync_manager.map_id_manager.begin();
- iter != ssync_manager.map_id_manager.end();
- iter++)
- iter->second.analyze_sync_msg(_sync_msg);
- //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_sync_num;
- _tag_msg.m_sync_root_id = ssync_manager.sRootIdCode;
- unsigned long long rootIdCode = ssync_manager.sRootIdCode;
- if (ssync_manager.map_id_manager.count(tdoa_msg.m_card_msg.m_id) == 0)
- {
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].sRootIdCode = ssync_manager.sRootIdCode;
- //ssync_manager.map_id_manager[loc.m_card_msg.m_id].m_mu_sync_time = m_mu_sync_time;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].m_log_status = ssync_manager.m_log_status;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_anchors = ssync_manager.ump_anchors;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_distance = ssync_manager.ump_distance;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg = ssync_manager.ump_sync_time_msg;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_history_sync = ssync_manager.ump_history_sync;
- }
-
- int idx = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].find_sync_time_msg(rootIdCode, _tag_msg.m_sync_num);
- if (idx >= 0)
- {
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg_item[_tag_msg.m_local_id].tag = _tag_msg;
- tdoa_msg.m_interpolation = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg_item[_tag_msg.m_local_id].map_tdoa_msg[tdoa_msg.m_card_msg.m_id].m_interpolation;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg_item[_tag_msg.m_local_id].map_tdoa_msg[tdoa_msg.m_card_msg.m_id] = tdoa_msg;
- ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].nDataCount++;
- /*if (ssync_manager.ump_sync_time_msg[rootIdCode][idx].nCardCount<
- ssync_manager.ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg[_tag_msg.m_local_id].map_tdoa_msg.size())
- {
- ssync_manager.ump_sync_time_msg[rootIdCode][idx].nCardCount = ssync_manager.ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg[_tag_msg.m_local_id].map_tdoa_msg.size();
- }*/
-
- int nDataCount = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].nDataCount;
- int nSize = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg_item.size();
- //if (nDataCount >= 3 && nDataCount >= nSize * ssync_manager.ump_sync_time_msg[rootIdCode][idx].nCardCount)
- if (nDataCount >= 8)
- {
- for (auto it = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg_item.begin();
- it != ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].ump_sync_time_msg[rootIdCode][idx].ump_sync_time_msg_item.end();
- it++)
- {
- // 线性插值后的值
- uint64_t ip_value = 0;
- // 线性插值类型
- int ip_type = config.get("service.interpolation", 0);
- switch (ip_type) {
- case 0:
- ip_value = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].cal_time_by_linear(it->second.tag);
- break;
- case 1:
- ip_value = ssync_manager.map_id_manager[tdoa_msg.m_card_msg.m_id].cal_time_by_inter_linear(it->second.tag);
- break;
- default:
- break;
- }
- if (0 == ip_value) {
- ip_value = LONGLONG_MAX;
- }
- for (auto iter_tmp = it->second.map_tdoa_msg.begin(); iter_tmp != it->second.map_tdoa_msg.end(); iter_tmp++)
- iter_tmp->second.m_interpolation = ip_value;
- }
- }
- }
- }
- };
- tdoa_sync*tdoa_sync::instance()
- {
- static tdoa_sync_impl _impl;
- return &_impl;
- }
|