tooth log converter (#4960)
This commit is contained in:
parent
67624ee960
commit
b3b5944058
|
@ -0,0 +1,3 @@
|
||||||
|
*.teeth
|
||||||
|
*.csv
|
||||||
|
log_convert
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
g++ -O2 -lstdc++ log_convert.cpp -o log_convert
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
typedef struct __attribute__ ((packed)) {
|
||||||
|
// the whole order of all packet bytes is reversed, not just the 'endian-swap' integers
|
||||||
|
uint32_t timestamp;
|
||||||
|
// unfortunately all these fields are required by TS...
|
||||||
|
bool priLevel : 1;
|
||||||
|
bool secLevel : 1;
|
||||||
|
bool trigger : 1;
|
||||||
|
bool sync : 1;
|
||||||
|
bool coil : 1;
|
||||||
|
bool injector : 1;
|
||||||
|
} composite_logger_s;
|
||||||
|
|
||||||
|
static_assert(sizeof(composite_logger_s) == 5);
|
||||||
|
|
||||||
|
static inline uint32_t SWAP_UINT32(uint32_t x)
|
||||||
|
{
|
||||||
|
return (((x >> 24) & 0x000000ff) | ((x << 8) & 0x00ff0000) |
|
||||||
|
((x >> 8) & 0x0000ff00) | ((x << 24) & 0xff000000));
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr double ticksPerSecond = 1e6;
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
std::ifstream src(argv[1], std::ios::binary);
|
||||||
|
std::ofstream dst(argv[2], std::ios::binary);
|
||||||
|
|
||||||
|
dst << std::setprecision(10);
|
||||||
|
|
||||||
|
dst << "timestamp,pri,sec" << std::endl;
|
||||||
|
|
||||||
|
while (!src.eof())
|
||||||
|
{
|
||||||
|
composite_logger_s entry;
|
||||||
|
|
||||||
|
src.read(reinterpret_cast<char*>(&entry), sizeof(composite_logger_s));
|
||||||
|
|
||||||
|
double sec = SWAP_UINT32(entry.timestamp) / ticksPerSecond;
|
||||||
|
|
||||||
|
dst << sec << "," << entry.priLevel << "," << entry.secLevel << std::endl;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
# SD Tooth Log Converter
|
||||||
|
|
||||||
|
This program converts SD stored tooth logs to csv for analysis or replay as part of a unit test.
|
||||||
|
|
||||||
|
Create a log by setting "SD logger mode" to "trigger", then restart the ECU with an SD card present (but without USB connected), then crank/run/etc the engine to save a log. Restart again with USB to pull the log off.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
`./build.sh`
|
||||||
|
|
||||||
|
`./log_convert myToothLog.teeth convertedCsv.csv`
|
Loading…
Reference in New Issue