diff --git a/src/filewriter.cpp b/src/filewriter.cpp
index 26748bbc519c24ccc9c46b90e8f86a82937a6837..bce7c0763835ca3c9220605393de221f3fc59968 100644
--- a/src/filewriter.cpp
+++ b/src/filewriter.cpp
@@ -6,6 +6,7 @@
  */
 
 #include "filewriter.h"
+#include "Macros.h"
 #include <stdexcept>
 #include <vector>
 #include <iostream>
@@ -146,7 +147,7 @@ void IMUFileWriter::write(uint8_t *sample, size_t size, uint8_t *imu_data) {
     uint8_t *imu_data_cur(imu_data);
 
     while(imu_data_cur + frame_size + 5 < imu_data + additional_data_size){
-        SensorType sensorType = static_cast<SensorType>(imu_data_cur[0]);
+        IMUFileWriter::SensorType sensorType = static_cast<SensorType>(imu_data_cur[0]);
         unsigned char id = imu_data_cur[1];
         unsigned char nbChannels = imu_data_cur[2];
         float rangeScale = GetFloatSafe(imu_data_cur, 3);
@@ -157,57 +158,56 @@ void IMUFileWriter::write(uint8_t *sample, size_t size, uint8_t *imu_data) {
         int lengthPerSample = nbChannels * resolutionBits / 8 + 4;
         double dataMaxValue = std::pow(2, resolutionBits) / 2.0;
         
-        // A CONVERTIR EN C++
         for(int i = 0; i < nbSamples && size >= static_cast<size_t>(lengthPerSample * i + 13); i++) {
             uint32_t timeStamp = BUILD_UINT32(imu_data_cur[13 + i * lengthPerSample+3],imu_data_cur[13 + i * lengthPerSample+2],imu_data_cur[13 + i * lengthPerSample+1],imu_data_cur[13 + i * lengthPerSample]);
-            outfile << timeStamp
-            switch (sensorType) {
-                case Accel:
+            outfile << timeStamp;
+            switch(sensorType) {
+                case IMUFileWriter::SensorType::Accel:
                         if (lastAccelTimeStamp >= 500000000)
                             lastAccelTimeStamp = 0;
                         if (timeStamp > lastAccelTimeStamp) {
                             lastAccelTimeStamp = timeStamp;
                             outfile << "ACCEL, " << timeStamp / 1000.0;
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + i * lengthPerSample],imu_data_cur[17 + i * lengthPerSample+1]) * ( range / dataMaxValue );
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + datasize+ i * lengthPerSample],imu_data_cur[17 +datasize+ i * lengthPerSample+1]) * ( range / dataMaxValue );
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + 2*datasize+ i * lengthPerSample],imu_data_cur[17 +2*datasize+ i * lengthPerSample+1]) * ( range / dataMaxValue );
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + i * lengthPerSample],imu_data_cur[17 + i * lengthPerSample+1]) * ( rangeScale / dataMaxValue );
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + size+ i * lengthPerSample],imu_data_cur[17 +size+ i * lengthPerSample+1]) * ( rangeScale / dataMaxValue );
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + 2*size+ i * lengthPerSample],imu_data_cur[17 +2*size+ i * lengthPerSample+1]) * ( rangeScale / dataMaxValue );
                             outfile << std::endl;
                         }
                         else {
                             //printf("TS Accel Error\n");
                         }
                     break;
-                case Gyro:
+                case IMUFileWriter::SensorType::Gyro:
                         if (lastGyroTimeStamp >= 500000000)
                             lastGyroTimeStamp = 0;
                         if (timeStamp > lastGyroTimeStamp) {
                             lastGyroTimeStamp = timeStamp;
                             outfile << "GYRO, " << timeStamp;
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + i * lengthPerSample],imu_data_cur[17 + i * lengthPerSample+1]) * ( range / dataMaxValue);
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + datasize+ i * lengthPerSample],imu_data_cur[17 +datasize+ i * lengthPerSample+1]) * ( range / dataMaxValue);
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + 2*datasize+ i * lengthPerSample],imu_data_cur[17 +2*datasize+ i * lengthPerSample+1]) * ( range / dataMaxValue);
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + i * lengthPerSample],imu_data_cur[17 + i * lengthPerSample+1]) * ( rangeScale / dataMaxValue);
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + size+ i * lengthPerSample],imu_data_cur[17 +size+ i * lengthPerSample+1]) * ( rangeScale / dataMaxValue);
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + 2*size+ i * lengthPerSample],imu_data_cur[17 +2*size+ i * lengthPerSample+1]) * ( rangeScale / dataMaxValue);
                             outfile << std::endl;
                         }
                         else {
                             //printf("TS Gyro Error\n");
                         }
                     break;
-                case Mag:
+                case IMUFileWriter::SensorType::Mag:
                         if (lastMagTimeStamp >= 500000000)
                             lastMagTimeStamp = 0;
                         if (timeStamp > lastMagTimeStamp) {
                             lastMagTimeStamp = timeStamp;
                             outfile << "MAG, " << timeStamp;
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + i * lengthPerSample+1],imu_data_cur[17 + i * lengthPerSample]) * ( range / dataMaxValue);
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + datasize+ i * lengthPerSample+1],imu_data_cur[17 +datasize+ i * lengthPerSample]) * ( range / dataMaxValue);
-                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + 2*datasize+ i * lengthPerSample+1],imu_data_cur[17 +2*datasize+ i * lengthPerSample]) * ( range / dataMaxValue);
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + i * lengthPerSample+1],imu_data_cur[17 + i * lengthPerSample]) * ( rangeScale / dataMaxValue);
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + size+ i * lengthPerSample+1],imu_data_cur[17 +size+ i * lengthPerSample]) * ( rangeScale / dataMaxValue);
+                            outfile << ", " << BUILD_INT16(imu_data_cur[17 + 2*size+ i * lengthPerSample+1],imu_data_cur[17 +2*size+ i * lengthPerSample]) * ( rangeScale / dataMaxValue);
                             outfile << std::endl;
                         }
                         else {
                             //printf("TS Mag Error\n");
                         }
                     break;
-                case Temperature:
+                case IMUFileWriter::SensorType::Temperature:
                     if (lastTemperatureTimeStamp >= 500000000)
                         lastTemperatureTimeStamp = 0;
                     if (timeStamp > lastTemperatureTimeStamp) {
@@ -220,33 +220,36 @@ void IMUFileWriter::write(uint8_t *sample, size_t size, uint8_t *imu_data) {
                         //printf("TS Temperature Error\n");
                     }
                     break;
-                case Pressure:
+                case IMUFileWriter::SensorType::Pressure:
                     if (lastPressureTimeStamp >= 500000000)
                         lastPressureTimeStamp = 0;
                     if (timeStamp > lastPressureTimeStamp) {
                         lastPressureTimeStamp = timeStamp;
                         outfile << "PRESSURE, " << timeStamp;
-                        outfile << ", " << GetFloatSafe(imu_data_cur,17 + i * lengthPerSample);
+                        outfile << ", " << IMUFileWriter::GetFloatSafe(imu_data_cur,17 + i * lengthPerSample);
                         outfile << std::endl;
                     }
                     else {
 
                     }
                     break;
-                case Light:
+                case IMUFileWriter::SensorType::Light:
                     if (lastLightTimeStamp >= 500000000)
                         lastLightTimeStamp = 0;
                     if (timeStamp > lastLightTimeStamp) {
                         lastLightTimeStamp = timeStamp;
-                        outfile << "LIGHT, " << dataLight.timeStamp;
+                        outfile << "LIGHT, " << timeStamp;
                         outfile << ", " << BUILD_UINT16(imu_data_cur[17 + i * lengthPerSample],imu_data_cur[17 + i * lengthPerSample+1]);
-                        outfile << ", " << BUILD_UINT16(imu_data_cur[17 + datasize+i * lengthPerSample],imu_data_cur[17 +datasize+ i * lengthPerSample+1]);
+                        outfile << ", " << BUILD_UINT16(imu_data_cur[17 + size+i * lengthPerSample],imu_data_cur[17 +size+ i * lengthPerSample+1]);
                         outfile << std::endl;
                     }
                     else {
                         //printf("TS Light Error\n");
                     }
                     break;
+                case IMUFileWriter::SensorType::Unknown:
+                    outfile << "UNKNOWN, " << timeStamp;
+                    outfile << std::endl;
                 default:
                     break;
             }
diff --git a/src/filewriter.h b/src/filewriter.h
index f9ae59c3e297cee1c3211913c67cba5886af9827..76b22e089a0534a3957684ce5a8c749316196d21 100644
--- a/src/filewriter.h
+++ b/src/filewriter.h
@@ -139,10 +139,29 @@ public:
 
 class IMUFileWriter: public FileWriter {
     // const std::string header = "Timestamp,ax,ay,az,gx,gy,gz,mx,my,mz\n";
-    const std::string header = "Sensor Type,TimeStamp(ms) or Time, val0,val1,val2,val3,val4,val5,val6,val7"
+    const std::string header = "Sensor Type,TimeStamp(ms) or Time, val0,val1,val2,val3,val4,val5,val6,val7";
     const size_t frame_size = 32;
     const size_t additional_data_size = 736;
 private:
+    enum class SensorType {
+        Unknown = 0,
+        Accel = 1,
+        Gyro = 2,
+        Mag = 3,
+        Temperature = 4,
+        Pressure = 5,
+        Light = 6,
+        Piezo = 7
+    };
+    struct DateTime {
+        unsigned short year;
+        unsigned char month;
+        unsigned char day;
+        unsigned char weekDay;
+        unsigned char hour;
+        unsigned char minute;
+        unsigned char second;
+    };
     std::ofstream outfile;
     size_t last_timestamp;
     unsigned int lastAccelTimeStamp;
@@ -154,18 +173,6 @@ private:
     unsigned int lastTimeStamp;
     DateTime lastGPSDate;
     double lastPPSTimeStampNS;
-    /** Struct to identify sensor type id in the additionnal data samples.
-     */
-    enum class SensorType {
-        Unknown = 0,
-        Accel = 1,
-        Gyro = 2,
-        Mag = 3,
-        Temperature = 4,
-        Pressure = 5,
-        Light = 6,
-        Piezo = 7
-    };
 public:
     /** Instantiates a splitted wave file writer.
      * \param[in] filename_template The name of the file to write to. Will be
@@ -185,7 +192,7 @@ public:
     IMUFileWriter(std::string &filename_template, size_t num_channels, size_t sample_rate, size_t depth, size_t timestamp);
     void write(uint8_t *samples, size_t num_samples, uint8_t *imu_data) override;
     size_t get_last_timestamp();
-    float GetFloatSafe(unsigned char *p, int index);
+    float GetFloatSafe(const unsigned char *p, int index);
 };
 
 /** Class for writing sample data to a sequence of PCM WAVE files, split up to