#pragma once #include "J2534_v0404.h" #include "panda_shared/panda.h" /*A move convenient container for J2534 Messages than the static buffer provided by default.*/ class J2534Frame { public: J2534Frame(unsigned long ProtocolID, unsigned long RxStatus=0, unsigned long TxFlags=0, unsigned long Timestamp=0) : ProtocolID(ProtocolID), RxStatus(RxStatus), TxFlags(TxFlags), Timestamp(Timestamp), ExtraDataIndex(0), Data("") { }; J2534Frame(const panda::PANDA_CAN_MSG& msg_in) { ProtocolID = CAN; ExtraDataIndex = msg_in.len + 4; Data.reserve(msg_in.len + 4); Data += msg_in.addr >> 24; Data += (msg_in.addr >> 16) & 0xFF; Data += (msg_in.addr >> 8) & 0xFF; Data += msg_in.addr & 0xFF; Data += std::string((char*)&msg_in.dat, msg_in.len); Timestamp = msg_in.recv_time; RxStatus = (msg_in.addr_29b ? CAN_29BIT_ID : 0) | (msg_in.is_receipt ? TX_MSG_TYPE : 0); } J2534Frame(const PASSTHRU_MSG& msg) { this->ProtocolID = msg.ProtocolID; this->RxStatus = msg.RxStatus; this->TxFlags = msg.TxFlags; this->Timestamp = msg.Timestamp; this->ExtraDataIndex = msg.ExtraDataIndex; this->Data = std::string((const char*)msg.Data, msg.DataSize); } J2534Frame() { this->ProtocolID = 0; this->RxStatus = 0; this->TxFlags = 0; this->Timestamp = 0; this->ExtraDataIndex = 0; } unsigned long ProtocolID; unsigned long RxStatus; unsigned long TxFlags; unsigned long Timestamp; unsigned long ExtraDataIndex; std::string Data; };