Branch data Line data Source code
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 : const char * fileheader = "timeMillis," // timestamp (millis)
12 : : "vehicleVelocity,angleAccPedal,angleBrakePedal,requestCarStart," // vehicle data
13 : : "batteryVoltage,batteryCurrent," // battery data
14 : : "bsgCurrentMode,bsgRPM,bsgVoltage,bsgCurrent," // bsg data
15 : : "engineRPM,velocity,gear\n"; // engine
16 : :
17 : 1 : fprintf(file,"%s", fileheader); //csv header
18 : :
19 [ + + ]: 4 : for(int i = 0; i < numEntries; i++){
20 : : char csvLine[512]; // Arbitrary size
21 : 3 : writeCSVLine(csvdata[i], csvLine);
22 : 3 : fprintf(file, "%s\n", csvLine);
23 : : }
24 : :
25 : 1 : fclose(file);
26 : 1 : return 0;
27 : : }
28 : :
29 : 6 : void writeCSVLine(const VehicleData data, char* csvLine){
30 : 6 : sprintf(csvLine, "%u," // timeMillis
31 : : "%hu," // vehicle.velocity
32 : : "%hu," // vehicle.angleAccPedal
33 : : "%hu," // vehicle.angleBrakePedal
34 : : "%hu," // vehicle.requestCarStart
35 : : "%hu," // battery.voltage
36 : : "%hhd," // battery.current
37 : : "%d," // bsg.currentMode
38 : : "%hu," // bsg.rpm
39 : : "%hu," // bsg.voltage
40 : : "%hu," // bsg.current
41 : : "%u," // engine.rpm
42 : : "%hu," // engine.velocity
43 : : "%hu", // engine.gear
44 : 6 : data.timeMillis,
45 : 6 : data.vehicle.velocity,
46 : 6 : data.vehicle.angleAccPedal,
47 : 6 : data.vehicle.angleBrakePedal,
48 : 6 : data.vehicle.requestCarStart,
49 : 6 : data.battery.voltage,
50 : 6 : data.battery.current,
51 : 6 : data.bsg.currentMode,
52 : 6 : data.bsg.rpm,
53 : 6 : data.bsg.voltage,
54 : 6 : data.bsg.current,
55 : 6 : data.engine.rpm,
56 : 6 : data.engine.velocity,
57 : 6 : data.engine.gear
58 : : );
59 : 6 : }
60 : :
61 : 1 : int readCSV(VehicleData* csvdata, int numEntries, const char* filename){
62 : 1 : FILE* file = fopen(filename,"r"); //opens 'filename' and assigns to 'file' the pointer to that file;
63 : :
64 : 1 : const int bufferSize = 512;
65 : 1 : char csvLine[bufferSize];
66 : :
67 : 1 : fgets(csvLine, bufferSize, file); // Drop First Line with header
68 : :
69 [ + + + - ]: 4 : for( int i = 0; ( i < numEntries ) && fgets(csvLine, 512, file); i++ ) {
70 : 3 : readCSVLine(&csvdata[i], csvLine);
71 : : }
72 : 1 : fclose(file);
73 : 1 : return 0;
74 : : }
75 : :
76 : :
77 : 6 : void readCSVLine(VehicleData* data, const char* csvLine){
78 : 6 : sscanf(csvLine, "%u," // Timestamp
79 : : "%hu," // vehicle.velocity
80 : : "%hu," // vehicle.angleAccPedal
81 : : "%hu," // vehicle.angleBrakePedal
82 : : "%hhu," // vehicle.requestCarStart
83 : : "%hhu," // battery.voltage
84 : : "%hhd," // battery.current
85 : : "%u," // bsg.currentMode
86 : : "%hu," // bsg.rpm
87 : : "%hu," // bsg.voltage
88 : : "%hu," // bsg.current
89 : : "%hu," // engine.rpm
90 : : "%hhu," // engine.velocity
91 : : "%hhu", // engine.gear
92 : : &(data->timeMillis),
93 : : &(data->vehicle.velocity),
94 : : &(data->vehicle.angleAccPedal),
95 : : &(data->vehicle.angleBrakePedal),
96 : : &(data->vehicle.requestCarStart),
97 : : &(data->battery.voltage),
98 : : &(data->battery.current),
99 : : &(data->bsg.currentMode),
100 : : &(data->bsg.rpm),
101 : : &(data->bsg.voltage),
102 : : &(data->bsg.current),
103 : : &(data->engine.rpm),
104 : : &(data->engine.velocity),
105 : : &(data->engine.gear)
106 : : );
107 : 6 : }
|