usb_decode_event.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // // ******************************************************************
  2. // // /\ /| @File Usb_decode_event.h
  3. // // \ V/ @Brief
  4. // // | "") @Author lijinwen, ghz005@uni-trend.com.cn
  5. // // / | @Creation 2024-05-17
  6. // // / \\ @Modified 2024-06-24
  7. // // *(__\_\
  8. // // ******************************************************************
  9. #pragma once
  10. #include "Usb_packet.h"
  11. #include "../decode_event.h"
  12. namespace Protocol
  13. {
  14. struct UsbDecodeEvent : DecodeBaseEvent
  15. {
  16. UsbEnums::EventInfoTitles packet_title;
  17. int32_t address;
  18. int32_t frame_id;
  19. int16_t port;
  20. int16_t end_point;
  21. int16_t crc_sign_num;
  22. uint16_t crc_data;
  23. uint64_t data_count;
  24. const uint8_t* decode_data_ptr;
  25. uint64_t single_bit_timing_length;
  26. UsbDecodeEvent(const UsbPacket& packet) : address(0), frame_id(-1), port(-1), end_point(-1), crc_sign_num(0),
  27. crc_data(0), data_count(0), decode_data_ptr(nullptr), single_bit_timing_length(0)
  28. {
  29. packet_title = packet.PacketTitle;
  30. const std::vector<uint8_t>& addresses = packet.Address();
  31. end_index = packet.GetEndIndex();
  32. start_index = packet.GetStartIndex();
  33. single_bit_timing_length = packet.PacketSYNC().single_bit_timing_length;
  34. if (!addresses.empty())
  35. {
  36. int32_t size = static_cast<int>(addresses.size());
  37. if (size > 4) size = 4;
  38. for (int i = 0; i < size; i++)
  39. {
  40. address = addresses[i] << (i * 8);
  41. }
  42. }
  43. else
  44. {
  45. address = -1;
  46. }
  47. end_point = packet.EndPoint();
  48. if (packet.Datas().empty())
  49. {
  50. frame_id = -1;
  51. decode_data_ptr = nullptr;
  52. data_count = 0;
  53. crc_data = packet.CRC16();
  54. crc_sign_num = packet.CRCSignNum();
  55. return;
  56. }
  57. std::vector<uint8_t> datas = packet.Datas();
  58. if (packet_title == UsbEnums::EventInfoTitles::SOF && datas.size() == 2)
  59. {
  60. frame_id = datas[0] + datas[1] * 8;
  61. }
  62. decode_data_ptr = packet.Datas().data();
  63. data_count = packet.Datas().size();
  64. crc_data = packet.CRC16();
  65. crc_sign_num = packet.CRCSignNum();
  66. }
  67. };
  68. }