#include "icsneo/communication/packet/versionpacket.h" using namespace icsneo; std::shared_ptr HardwareVersionPacket::DecodeMainToMessage(const std::vector& bytestream) { if(bytestream.size() < 3) // Not enough bytes to decode return std::shared_ptr(); auto msg = std::make_shared(VersionMessage::MainChip); msg->Versions.emplace_back(); std::optional& version = msg->Versions.back(); version.emplace(); version->major = bytestream[1]; version->minor = bytestream[2]; return msg; } std::shared_ptr HardwareVersionPacket::DecodeSecondaryToMessage(const std::vector& bytestream) { auto msg = std::make_shared(VersionMessage::SecondaryChips); size_t bytesLeft = bytestream.size(); if(bytesLeft) bytesLeft--; // Disregard command byte while(bytesLeft >= 3) { const bool versionValid = bytestream[bytestream.size() - bytesLeft + 0]; msg->Versions.emplace_back(); std::optional& version = msg->Versions.back(); if(versionValid) { version.emplace(); version->major = bytestream[bytestream.size() - bytesLeft + 1]; version->minor = bytestream[bytestream.size() - bytesLeft + 2]; } bytesLeft -= std::min(3, bytesLeft); } return msg; }