91 lines
1.7 KiB
C++
91 lines
1.7 KiB
C++
/*
|
|
* @file logicdata_csv_reader.cpp
|
|
*
|
|
* @date Jun 26, 2021
|
|
* @author Andrey Belomutskiy, (c) 2012-2021
|
|
*/
|
|
|
|
#include "logicdata_csv_reader.h"
|
|
#include <stdlib.h>
|
|
#include <string>
|
|
#include <string.h>
|
|
|
|
static char* trim(char *str) {
|
|
while (str != nullptr && str[0] == ' ') {
|
|
str++;
|
|
}
|
|
return str;
|
|
}
|
|
|
|
CsvReader::~CsvReader() {
|
|
if (fp) {
|
|
fclose(fp);
|
|
}
|
|
}
|
|
|
|
void CsvReader::open(const char *fileName) {
|
|
printf("Reading from %s\r\n", fileName);
|
|
fp = fopen(fileName, "r");
|
|
// ASSERT_TRUE(fp != nullptr);
|
|
}
|
|
|
|
bool CsvReader::haveMore() {
|
|
bool result = fgets(buffer, sizeof(buffer), fp) != nullptr;
|
|
m_lineIndex++;
|
|
if (m_lineIndex == 0) {
|
|
// skip header
|
|
return haveMore();
|
|
}
|
|
|
|
if (m_lineIndex == 100) {
|
|
printf("It was enough\r\n");
|
|
exit(0);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
double CsvReader::readTimestampAndValues(double *v) {
|
|
const char s[2] = ",";
|
|
char *line = buffer;
|
|
|
|
char *timeStampstr = trim(strtok(line, s));
|
|
double timeStamp = std::stod(timeStampstr);
|
|
|
|
for (size_t i = 0; i < 1; i++) {
|
|
char *triggerToken = trim(strtok(nullptr, s));
|
|
v[i] = std::stod(triggerToken);
|
|
}
|
|
|
|
return timeStamp;
|
|
}
|
|
|
|
void CsvReader::processLine(void *arg) {
|
|
const char s[2] = ",";
|
|
char *timeStampstr = trim(strtok(buffer, s));
|
|
|
|
bool newState[1];
|
|
|
|
for (size_t i = 0;i<1;i++) {
|
|
char * triggerToken = trim(strtok(nullptr, s));
|
|
newState[0] = triggerToken[0] == '1';
|
|
}
|
|
|
|
if (timeStampstr == nullptr) {
|
|
// firmwareError(OBD_PCM_Processor_Fault, "End of File");
|
|
return;
|
|
}
|
|
|
|
double timeStamp = std::stod(timeStampstr);
|
|
|
|
timeStamp += m_timestampOffset;
|
|
|
|
printf("timestamp %.11f %d\r\n", timeStamp, newState[0]);
|
|
}
|
|
|
|
void CsvReader::readLine(void *arg) {
|
|
if (!haveMore())
|
|
return;
|
|
processLine(arg);
|
|
}
|