message.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include <math.h>
  2. #include "zstream.h"
  3. #include "message.h"
  4. void message_locinfo::zero_this()
  5. {
  6. memset(this,0,sizeof(*this));
  7. }
  8. void message_locinfo::load(zistream&is,bool tdoa)
  9. {
  10. zero_this();
  11. uint8_t b;
  12. uint32_t i;
  13. //卡类型、卡号、CT、电池状态
  14. is>>b>>m_card_id>>m_card_ct>>m_batty_status;
  15. m_card_type=b;
  16. m_batty_status&=0xF;
  17. //角度
  18. is>>b;
  19. if(m_card_type==1)
  20. {
  21. m_callinfo=b;
  22. }
  23. else
  24. {
  25. m_rav=((b&0x80)?-1.:1.)*(b&0x7f)*3;
  26. }
  27. //加速度
  28. is>>b;
  29. m_acc=((b&0x80)?-1.:1.)*(b&0x7f)*98;
  30. //TOF
  31. is>>b>>i;
  32. m_tof=b;
  33. m_tof=(m_tof<<32)|i;
  34. //天线号
  35. is>>m_ant_id;
  36. --m_ant_id;
  37. if(tdoa)
  38. {
  39. //同步序号,冲击响应丢弃
  40. is>>m_sync_ct>>skip(2);
  41. }
  42. //信号电平值
  43. uint16_t sp1=0,sp2=0;
  44. is>>sp1>>sp2;
  45. m_rssi=10*log10(1.*sp1*(1<<17)/pow(sp2-64.,2))-121.74;
  46. }
  47. void message_tdoasync::zero_this()
  48. {
  49. memset(this,0,sizeof(*this));
  50. }
  51. void message_tdoasync::load(zistream&is)
  52. {
  53. zero_this();
  54. uint8_t b;
  55. //本地分站ID和天线ID
  56. is>>m_local_site_id>>b; m_local_ant_id=b;
  57. //上级分站ID和天线ID
  58. is>>m_parent_site_id>>b; m_parent_ant_id=b;
  59. //根分站CT和本机级别
  60. is>>m_sync_ct>>m_local_level;
  61. uint32_t i;
  62. //本级发出的时间
  63. is>>b>>i;
  64. m_send_time=b;
  65. m_send_time=(m_send_time<<32)|i;
  66. //本级收到的时间
  67. is>>b>>i;
  68. m_recv_time=b;
  69. m_recv_time=(m_recv_time<<32)|i;
  70. }