message.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "stdafx.h"
  2. #include <math.h>
  3. #include "zstream.h"
  4. #include "message.h"
  5. NAMESPACE_POINT_BEGIN(NAMESPACE_POINT)
  6. package::package(const void*d,uint64_t recv_time)
  7. :m_is(d,4)
  8. ,m_recv_time(recv_time)
  9. {
  10. m_is>>m_len>>m_cmd_id ;
  11. m_is.set_size(m_len+2);
  12. m_crc=m_is.load_uint16(m_len);
  13. }
  14. loc_info::loc_info(uint32_t cmd_id, uint64_t loc_time,const void*d)
  15. :m_loc_time(loc_time)
  16. ,m_cmd_id(cmd_id)
  17. ,m_rav(0)
  18. ,m_acc(0)
  19. ,m_card_sp(0)
  20. {
  21. uint8_t rav,acc;
  22. uint16_t ct;
  23. zistream is(d,20);
  24. is>>m_card_type>>m_card_id>>ct
  25. >>m_bat_level>>rav>>acc>>skip(1)>>m_tof>>m_ant_id ;
  26. m_card_ct=ct;
  27. m_bat_level&=0xF;
  28. --m_ant_id;
  29. m_rav=((rav&0x80)?-1.:1.)*(rav&0x7f)*3;
  30. m_acc=((acc&0x80)?-1.:1.)*(acc&0x7f)*98;
  31. m_card_sp=0.;
  32. uint16_t sp1=0,sp2=0;
  33. if(m_cmd_id==0x843b)
  34. {
  35. is>>sp1>>sp2;
  36. m_card_sp=10*log10(1.*sp1*(1<<17)/pow(sp2-64.,2))-121.74;
  37. }
  38. }
  39. /*
  40. loc_info::loc_info*init(uint64_t loc_time,const void*d,loc_info*b)
  41. {
  42. }
  43. */
  44. loc_package::loc_package(uint64_t recv_time,const void*data)
  45. :package(data,recv_time)
  46. ,m_card_count(0)
  47. {
  48. if(m_cmd_id!=0x753b && m_cmd_id!=0x843b)
  49. return;
  50. char time[8];
  51. m_is>>m_sit_id>>m_sit_ct>>npc(7)>>time
  52. >>m_sit_temp>>m_sit_status;
  53. m_card_data=m_is.cur_data();
  54. m_card_count=(m_len+2-(m_card_data-m_is.buff())) /bytes_per_card();
  55. }
  56. loc_info loc_package::get(int index)const
  57. {
  58. return loc_info(m_cmd_id,m_recv_time-1000+50+index*45,m_card_data+index*bytes_per_card());
  59. }
  60. NAMESPACE_POINT_END(NAMESPACE_POINT)