Skip to content
Snippets Groups Projects
Commit 4b1d7a83 authored by vargheseg's avatar vargheseg
Browse files

Implemented TecDummy::getLastWriteToFlash

TecDummy::getLastWriteToFlash now provides information on if the
queried parameter was written to the flash memory previously.
parent 93cda07b
No related branches found
No related tags found
No related merge requests found
......@@ -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 {
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment