GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: csvutils.c Lines: 36 36 100.0 %
Date: 2023-10-04 02:52:31 Branches: 5 6 83.3 %

Line Branch Exec Source
1
#include "csvutils.h"
2
#include <stdio.h>
3
#include <errno.h>
4
#include <stdlib.h>
5
#include <string.h>
6
#include <stdbool.h>
7
8
1
int writeCSV(const VehicleData* csvdata, int numEntries, const char* filename){
9
1
    FILE* file = fopen(filename,"w");   //opens 'filename' and assigns to 'file' the pointer to that file;
10
11
1
    fprintf(file, "timestamp,velocity,angleAccPedal,angleBrakePedal,requestCarStart,voltage,current,currentMode,rpm,voltage,current\n"); //csv header
12
4
    for(int i = 0; i < numEntries; i++){
13
        char csvLine[512]; // Arbitrary size
14
3
        writeCSVLine(csvdata[i], csvLine);
15
3
        fprintf(file, "%s\n", csvLine);
16
    }
17
18
1
    fclose(file);
19
1
    return 0;
20
}
21
22
6
void writeCSVLine(const VehicleData data, char* csvLine){
23
6
    sprintf(csvLine, "%u,"   // timeMillis
24
                     "%hu,"  // vehicle.velocity
25
                     "%hu,"  // vehicle.angleAccPedal
26
                     "%hu,"  // vehicle.angleBrakePedal
27
                     "%hu,"  // vehicle.requestCarStart
28
                     "%hu,"  // battery.voltage
29
                     "%hhd," // battery.current
30
                     "%d,"   // bsg.currentMode
31
                     "%hu,"  // bsg.rpm
32
                     "%hu,"  // bsg.voltage
33
                     "%hu,"  // bsg.current
34
                     "%u,"   // engine.rpm
35
                     "%hu,"  // engine.velocity
36
                     "%hu",  // engine.gear
37
        data.timeMillis,
38
6
        data.vehicle.velocity,
39
6
        data.vehicle.angleAccPedal,
40
6
        data.vehicle.angleBrakePedal,
41
6
        data.vehicle.requestCarStart,
42
6
        data.battery.voltage,
43
6
        data.battery.current,
44
6
        data.bsg.currentMode,
45
6
        data.bsg.rpm,
46
6
        data.bsg.voltage,
47
6
        data.bsg.current,
48
6
        data.engine.rpm,
49
6
        data.engine.velocity,
50
6
        data.engine.gear
51
    );
52
6
}
53
54
1
int readCSV(VehicleData* csvdata, int numEntries, const char* filename){
55
1
    FILE* file = fopen(filename,"r");   //opens 'filename' and assigns to 'file' the pointer to that file;
56
57
1
    const int bufferSize = 512;
58
1
    char csvLine[bufferSize];
59
60
1
    fgets(csvLine, bufferSize, file); // Drop First Line with header
61
62

4
    for( int i = 0; ( i < numEntries ) && fgets(csvLine, 512, file);  i++ ) {
63
3
        readCSVLine(&csvdata[i], csvLine);
64
    }
65
1
     fclose(file);
66
1
    return 0;
67
}
68
69
70
6
void readCSVLine(VehicleData* data, const char* csvLine){
71
6
    sscanf(csvLine,  "%u,"    // Timestamp
72
                     "%hu,"   // vehicle.velocity
73
                     "%hu,"   // vehicle.angleAccPedal
74
                     "%hu,"   // vehicle.angleBrakePedal
75
                     "%hhu,"  // vehicle.requestCarStart
76
                     "%hhu,"  // battery.voltage
77
                     "%hhd,"  // battery.current
78
                     "%u,"    // bsg.currentMode
79
                     "%hu,"   // bsg.rpm
80
                     "%hu,"   // bsg.voltage
81
                     "%hu,"   // bsg.current
82
                     "%hu,"   // engine.rpm
83
                     "%hhu,"  // engine.velocity
84
                     "%hhu",  // engine.gear
85
        &(data->timeMillis),
86
        &(data->vehicle.velocity),
87
        &(data->vehicle.angleAccPedal),
88
        &(data->vehicle.angleBrakePedal),
89
        &(data->vehicle.requestCarStart),
90
        &(data->battery.voltage),
91
        &(data->battery.current),
92
        &(data->bsg.currentMode),
93
        &(data->bsg.rpm),
94
        &(data->bsg.voltage),
95
        &(data->bsg.current),
96
        &(data->engine.rpm),
97
        &(data->engine.velocity),
98
        &(data->engine.gear)
99
    );
100
6
}