tdoa_sync.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "tdoa_sync.h"
  2. #include "sync_time/sync_time_message.h"
  3. #include "sync_manager.h"
  4. #include <log.h>
  5. #include <config_file.h>
  6. extern config_file config;
  7. struct tdoa_sync_impl:tdoa_sync
  8. {
  9. virtual void on_message(message_tdoasync&msg)
  10. {
  11. host_server::sync_time_message _sync_msg;
  12. _sync_msg.set_local_id((unsigned long long)(msg.m_local_site_id));
  13. _sync_msg.set_local_id((unsigned long long)((_sync_msg.get_local_id() << 8) + msg.m_local_ant_id));
  14. _sync_msg.set_upper_id((unsigned long long)(msg.m_parent_site_id));
  15. _sync_msg.set_upper_id((unsigned long long)((_sync_msg.get_upper_id() << 8) + msg.m_parent_ant_id));
  16. _sync_msg.set_root_id((unsigned long long)(msg.m_root_site_id));
  17. _sync_msg.set_root_id((unsigned long long)((_sync_msg.get_root_id() << 8) + msg.m_root_ant_id));
  18. _sync_msg.set_sync_num(msg.m_sync_num);
  19. _sync_msg.set_sync_level(msg.m_local_level);
  20. _sync_msg.set_local_send_time(msg.m_send_time);
  21. _sync_msg.set_local_receive_time(msg.m_recv_time);
  22. ssync_manager.analyze_sync_msg(_sync_msg);
  23. }
  24. virtual void translate(message_tdoa_locinfo& tdoa_msg)
  25. {
  26. host_server::tag_message _tag_msg;
  27. _tag_msg.m_receive_time = tdoa_msg.m_card_msg.m_loc_stamp;
  28. _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));
  29. _tag_msg.m_sync_num = tdoa_msg.m_card_msg.m_time_stamp;
  30. // 线性插值后的值
  31. uint64_t ip_value = 0;
  32. // 线性插值类型
  33. int ip_type = config.get("service.interpolation", 0);
  34. switch(ip_type){
  35. case 0:
  36. ip_value = ssync_manager.cal_time_by_linear(_tag_msg);
  37. break;
  38. case 1:
  39. ip_value = ssync_manager.cal_time_by_inter_linear(_tag_msg);
  40. break;
  41. default:
  42. break;
  43. }
  44. if(0 == ip_value){
  45. ip_value = LONGLONG_MAX;
  46. }
  47. tdoa_msg.m_interpolation = ip_value;
  48. 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);
  49. }
  50. };
  51. tdoa_sync*tdoa_sync::instance()
  52. {
  53. static tdoa_sync_impl _impl;
  54. return &_impl;
  55. }