From 38f0022bb6a67d4e2a842d4c7d53baacebb3c65e Mon Sep 17 00:00:00 2001 From: Paul Hollinsky Date: Mon, 20 Sep 2021 23:07:49 -0400 Subject: [PATCH] Communication: Support extended commands --- communication/communication.cpp | 15 +++++++++++++++ include/icsneo/communication/command.h | 12 ++++++++++++ include/icsneo/communication/communication.h | 1 + 3 files changed, 28 insertions(+) diff --git a/communication/communication.cpp b/communication/communication.cpp index 948349d..2a62f50 100644 --- a/communication/communication.cpp +++ b/communication/communication.cpp @@ -79,6 +79,21 @@ bool Communication::sendCommand(Command cmd, std::vector arguments) { return sendPacket(packet); } +bool Communication::sendCommand(ExtendedCommand cmd, std::vector arguments) { + const auto size = arguments.size(); + if (size > std::numeric_limits::max()) + return false; + + arguments.insert(arguments.begin(), { + uint8_t(uint16_t(cmd) & 0xff), + uint8_t((uint16_t(cmd) >> 8) & 0xff), + uint8_t(size & 0xff), + uint8_t((size >> 8) & 0xff) + }); + + return sendCommand(Command::Extended, arguments); +} + bool Communication::redirectRead(std::function&&)> redirectTo) { if(redirectingRead) return false; diff --git a/include/icsneo/communication/command.h b/include/icsneo/communication/command.h index e053062..a38f006 100644 --- a/include/icsneo/communication/command.h +++ b/include/icsneo/communication/command.h @@ -22,9 +22,21 @@ enum class Command : uint8_t { RequestBitSmash = 0xDC, // Previously known as RED_CMD_CM_BITSMASH GetVBattReq = 0xDF, // Previously known as RED_CMD_VBATT_REQUEST MiscControl = 0xE7, + Extended = 0xF0, FlexRayControl = 0xF3 }; +enum class ExtendedCommand : uint16_t { + GetDiskDetails = 0x0010, + DiskFormatStart = 0x0011, + DiskFormatCancel = 0x0012, + DiskFormatProgress = 0x0013, + DiskFormatUpdate = 0x0014, + Extract = 0x0015, + StartDHCPServer = 0x0016, + StopDHCPServer = 0x0017, +}; + } #endif // __cplusplus diff --git a/include/icsneo/communication/communication.h b/include/icsneo/communication/communication.h index 5f428cd..601d3fc 100644 --- a/include/icsneo/communication/communication.h +++ b/include/icsneo/communication/communication.h @@ -52,6 +52,7 @@ public: virtual bool sendCommand(Command cmd, bool boolean) { return sendCommand(cmd, std::vector({ (uint8_t)boolean })); } virtual bool sendCommand(Command cmd, std::vector arguments = {}); + bool sendCommand(ExtendedCommand cmd, std::vector arguments = {}); bool getSettingsSync(std::vector& data, std::chrono::milliseconds timeout = std::chrono::milliseconds(50)); std::shared_ptr getSerialNumberSync(std::chrono::milliseconds timeout = std::chrono::milliseconds(50)); optional< std::vector< optional > > getVersionsSync(std::chrono::milliseconds timeout = std::chrono::milliseconds(50));