#ifndef BSP_Q7S_MEMORY_SCRATCHAPI_H_ #define BSP_Q7S_MEMORY_SCRATCHAPI_H_ #include "fsfw/returnvalues/HasReturnvaluesIF.h" #include "fsfw/serviceinterface/ServiceInterface.h" #include "linux/utility/utility.h" #include #include #include #include #include /** * @brief API for the scratch buffer */ namespace scratch { namespace { static uint8_t counter = 0; } template::value>::type> inline ReturnValue_t writeNumber(std::string name, T num) noexcept { std::ostringstream oss; oss << "xsc_scratch write " << name << " " << num; int result = std::system(oss.str().c_str()); if(result != 0) { utility::handleSystemError(result, "scratch::writeNumber"); return HasReturnvaluesIF::RETURN_FAILED; } return HasReturnvaluesIF::RETURN_OK; } template::value>::type> inline ReturnValue_t readNumber(std::string name, T& num) noexcept { using namespace std; string filename = "/tmp/sro" + std::to_string(counter++); ostringstream oss; oss << "xsc_scratch read " << name << " > " << filename; int result = std::system(oss.str().c_str()); if(result != 0) { utility::handleSystemError(result, "scratch::writeNumber"); return HasReturnvaluesIF::RETURN_FAILED; } ifstream file(filename); string line; if (not std::getline(file, line)) { return HasReturnvaluesIF::RETURN_FAILED; } size_t pos = line.find("="); std::string valueAsString = line.substr(pos + 1); try { num = std::stoi(valueAsString); } catch(std::invalid_argument& e) { sif::warning << "scratch::readNumber: stoi call failed with " << e.what() << std::endl; } std::remove(filename.c_str()); return HasReturnvaluesIF::RETURN_OK; } ReturnValue_t writeString(std::string name, std::string string); } #endif /* BSP_Q7S_MEMORY_SCRATCHAPI_H_ */