tdoa_sync.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. log_info("[tdoa] interpolation type: %d", ip_type);
  35. switch(ip_type){
  36. case 0:
  37. ip_value = ssync_manager.cal_time_by_linear(_tag_msg);
  38. break;
  39. case 1:
  40. ip_value = ssync_manager.cal_time_by_inter_linear(_tag_msg);
  41. break;
  42. default:
  43. break;
  44. }
  45. if(0 == ip_value){
  46. ip_value = LONGLONG_MAX;
  47. }
  48. tdoa_msg.m_interpolation = ip_value;
  49. }
  50. };
  51. tdoa_sync*tdoa_sync::instance()
  52. {
  53. static tdoa_sync_impl _impl;
  54. return &_impl;
  55. }