From 4b1d7a83b4420b2ea7665e0e41194ebe1baa8b9d Mon Sep 17 00:00:00 2001 From: vargheseg <19566373+vargheseg@users.noreply.github.com> Date: Sun, 29 Mar 2020 12:17:10 +0200 Subject: [PATCH] Implemented TecDummy::getLastWriteToFlash TecDummy::getLastWriteToFlash now provides information on if the queried parameter was written to the flash memory previously. --- tests/include/TecDummy.h | 6 +++++- tests/src/TecDummy.cc | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tests/include/TecDummy.h b/tests/include/TecDummy.h index 6bcc96b..8d06c17 100644 --- a/tests/include/TecDummy.h +++ b/tests/include/TecDummy.h @@ -9,7 +9,11 @@ #include "TecErrorCode.h" struct TecDummy : ChimeraTK::DummyBackend { - TecDummy(std::string mapFileName) : DummyBackend(mapFileName) {} + TecDummy(std::string mapFileName) : DummyBackend(mapFileName) { + // inititialize write to flash as disabled on startup; + rawValues[TecFrame::ParameterSystemFlashSaveOff] = 1; + + } ~TecDummy() override {} enum class TecFramePart { diff --git a/tests/src/TecDummy.cc b/tests/src/TecDummy.cc index 61c4fcb..21539f1 100644 --- a/tests/src/TecDummy.cc +++ b/tests/src/TecDummy.cc @@ -19,6 +19,7 @@ TecDummy::BackendRegisterer::BackendRegisterer() { void TecDummy::read(uint8_t bar, uint32_t address, int32_t* data, size_t sizeInBytes) { DummyBackend::read(bar, address, data, sizeInBytes); + if(bar != TecDummy_bar || address != TecDummy_address_loopDone) return; if(reg_loopStart != 1) return; @@ -125,9 +126,14 @@ std::string TecDummy::processFrame(const std::string& command) { auto parsedFrame = splitFrame(command); std::string result = ""; + // lastWriteToFlash[TecFrame::ParameterSystemFlashSaveOff] should be a + // safe default. TecFrame::ParameterSystemFlashSaveOff is a dummy entry for + // lastWriteToFlash. + uint32_t parameterId = TecFrame::ParameterSystemFlashSaveOff; + // Handle store command if(parsedFrame[TecFramePart::COMMAND] == "VS") { - uint32_t parameterId = std::stoul("0x" + parsedFrame[TecFramePart::PARAMETER_ID], 0, 16); + parameterId = std::stoul("0x" + parsedFrame[TecFramePart::PARAMETER_ID], 0, 16); int32_t value = std::stol("0x" + parsedFrame[TecFramePart::PAYLOAD], 0, 16); std::cout << "Storing raw value " << value << "(" << parsedFrame[TecFramePart::PAYLOAD] << ") for parameter " << parameterId << std::endl; @@ -137,7 +143,7 @@ std::string TecDummy::processFrame(const std::string& command) { result += getCrc(result); } else if(parsedFrame[TecFramePart::COMMAND] == "?VR") { - uint32_t parameterId = std::stoul("0x" + parsedFrame[TecFramePart::PARAMETER_ID], 0, 16); + parameterId = std::stoul("0x" + parsedFrame[TecFramePart::PARAMETER_ID], 0, 16); result = "!" + parsedFrame[TecFramePart::ADDRESS] + parsedFrame[TecFramePart::SEQUENCE]; std::stringstream ss; ss << std::hex << std::setw(8) << std::setfill('0') << rawValues[static_cast<TecFrame::TecParameter>(parameterId)]; @@ -145,6 +151,11 @@ std::string TecDummy::processFrame(const std::string& command) { result += getCrc(result); } + // + // mark received parameter as written to flash or not + auto isLastWriteToFlash = (not rawValues.at(TecFrame::ParameterSystemFlashSaveOff)) ? true : false; + lastWriteToFlash[static_cast<TecFrame::TecParameter>(parameterId)] = isLastWriteToFlash; + std::cout << "Returning result " << result << std::endl; return result; -- GitLab