From 465b406ecf55d82196850d254eafb13c3c5bdcba Mon Sep 17 00:00:00 2001
From: Alberto Nidasio <alberto.nidasio@skywarder.eu>
Date: Sat, 7 May 2022 16:47:34 +0200
Subject: [PATCH] [Deserializer] Fixed automatic log deconding of multiple
files
---
scripts/logdecoder/logdecoder.cpp | 12 ++++--------
src/shared/logger/Deserializer.h | 22 +++++++++++++---------
src/shared/logger/LogTypes.h | 1 -
3 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/scripts/logdecoder/logdecoder.cpp b/scripts/logdecoder/logdecoder.cpp
index 59b7e03aa..8227f5378 100644
--- a/scripts/logdecoder/logdecoder.cpp
+++ b/scripts/logdecoder/logdecoder.cpp
@@ -64,18 +64,14 @@ bool deserializeAll()
{
for (int i = 0; i < 100; i++)
{
- char fn[10];
- char fnext[11];
- sprintf(fn, "log%02d", i);
- sprintf(fnext, "log%02d.dat", i);
+ char nextName[11];
+ sprintf(nextName, "log%02d.dat", i);
struct stat st;
- if (stat(fnext, &st) != 0)
+ if (stat(nextName, &st) != 0)
continue; // File not found
// File found
- if (!deserialize(string(fn)))
- {
+ if (!deserialize(string(nextName)))
return false;
- }
}
return true;
}
diff --git a/src/shared/logger/Deserializer.h b/src/shared/logger/Deserializer.h
index f724e7342..189582f0a 100644
--- a/src/shared/logger/Deserializer.h
+++ b/src/shared/logger/Deserializer.h
@@ -99,7 +99,7 @@ private:
bool closed = false;
- std::vector<std::ofstream*> fileStreams;
+ std::map<std::string, std::ofstream*> fileStreams;
tscpp::TypePoolStream tps;
std::string logFilename;
@@ -130,14 +130,18 @@ void Deserializer::registerType()
template <typename T>
void Deserializer::printType(T& t, std::string path, std::string prefix)
{
- static std::ofstream* stream = nullptr;
+ std::string demangledTypeName = tscpp::demangle(typeid(T).name());
+ static std::ofstream* stream;
+ try
+ {
+ stream = fileStreams.at(demangledTypeName);
+ }
// If not already initialize, open the file and write the header
- if (stream == nullptr)
+ catch (std::out_of_range e)
{
- stream = new std::ofstream();
- std::string filename =
- path + prefix + "_" + tscpp::demangle(typeid(T).name()) + ".csv";
+ stream = new std::ofstream();
+ std::string filename = path + prefix + "_" + demangledTypeName + ".csv";
std::cout << "Creating file " + filename << std::endl;
stream->open(filename);
@@ -152,7 +156,7 @@ void Deserializer::printType(T& t, std::string path, std::string prefix)
*stream << T::header();
// Add the file to the vector such that it will be closed
- fileStreams.push_back(stream);
+ fileStreams.emplace(demangledTypeName, stream);
}
// Print data into the file if it is open
@@ -222,8 +226,8 @@ void Deserializer::close()
closed = true;
for (auto it = fileStreams.begin(); it != fileStreams.end(); it++)
{
- (*it)->close();
- delete *it;
+ it->second->close();
+ delete it->second;
}
}
}
diff --git a/src/shared/logger/LogTypes.h b/src/shared/logger/LogTypes.h
index b0c45d193..4df3ac83c 100644
--- a/src/shared/logger/LogTypes.h
+++ b/src/shared/logger/LogTypes.h
@@ -101,7 +101,6 @@ void registerTypes(Deserializer& ds)
ds.registerType<VN100Data>();
ds.registerType<BatteryVoltageSensorData>();
ds.registerType<CurrentSensorData>();
- ds.registerType<LoadCellData>();
ds.registerType<MPXHZ6130AData>();
ds.registerType<HSCMAND015PAData>();
ds.registerType<HSCMRNN030PAData>();
--
GitLab