LCOV - code coverage report
Current view: top level - code - csvutils.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 38 38 100.0 %
Date: 2023-10-06 02:10:57 Functions: 4 4 100.0 %
Branches: 5 6 83.3 %

           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 : }

Generated by: LCOV version 1.14