// // ****************************************************************** // // /\ /| @File Usb_decode_event.h // // \ V/ @Brief // // | "") @Author lijinwen, ghz005@uni-trend.com.cn // // / | @Creation 2024-05-17 // // / \\ @Modified 2024-06-24 // // *(__\_\ // // ****************************************************************** #pragma once #include "Usb_packet.h" #include "../decode_event.h" namespace Protocol { struct UsbDecodeEvent : DecodeBaseEvent { UsbEnums::EventInfoTitles packet_title; int32_t address; int32_t frame_id; int16_t port; int16_t end_point; int16_t crc_sign_num; uint16_t crc_data; uint64_t data_count; const uint8_t* decode_data_ptr; uint64_t single_bit_timing_length; UsbDecodeEvent(const UsbPacket& packet) : address(0), frame_id(-1), port(-1), end_point(-1), crc_sign_num(0), crc_data(0), data_count(0), decode_data_ptr(nullptr), single_bit_timing_length(0) { packet_title = packet.PacketTitle; const std::vector& addresses = packet.Address(); end_index = packet.GetEndIndex(); start_index = packet.GetStartIndex(); single_bit_timing_length = packet.PacketSYNC().single_bit_timing_length; if (!addresses.empty()) { int32_t size = static_cast(addresses.size()); if (size > 4) size = 4; for (int i = 0; i < size; i++) { address = addresses[i] << (i * 8); } } else { address = -1; } end_point = packet.EndPoint(); if (packet.Datas().empty()) { frame_id = -1; decode_data_ptr = nullptr; data_count = 0; crc_data = packet.CRC16(); crc_sign_num = packet.CRCSignNum(); return; } std::vector datas = packet.Datas(); if (packet_title == UsbEnums::EventInfoTitles::SOF && datas.size() == 2) { frame_id = datas[0] + datas[1] * 8; } decode_data_ptr = packet.Datas().data(); data_count = packet.Datas().size(); crc_data = packet.CRC16(); crc_sign_num = packet.CRCSignNum(); } }; }