branch for tests with T265

Dependencies:   Lib_Cntrl AHRS Lib_Misc

Revision:
1:d8c9f6b16279
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sources/Data_Logger.cpp	Wed Oct 09 13:47:43 2019 +0000
@@ -0,0 +1,107 @@
+#include "Data_Logger.h"
+using namespace std;
+
+// Class Data logger
+// -----------------------------------------------------------------------------
+Data_Logger::Data_Logger(uint8_t nb, float Ts) : sd(PC_12, PC_11, PC_10, PD_2),fs("sd"),thread(osPriorityBelowNormal, 4096)
+{   
+    sd.init();      // init SD-card
+    fs.mount(&sd);  // mount drive
+    ti.reset();
+    this->Ts = Ts;
+    fp = fopen("/sd/copter_QK2/number.txt", "r");     // read ff number for next log
+    log_number = 0;
+    if (fp != NULL) {
+        fscanf(fp,"%d",&log_number);
+        fclose(fp);
+        fp = fopen("/sd/copter_QK2/number.txt", "w");
+        fprintf(fp,"%d\r\n",++log_number);      // write incremented number
+        fclose(fp);    
+    } else {
+        printf("\r\nfailed to open logging number file!\r\n");
+    }
+    //-----------------------------------------------
+    printf("Log Data on  log_%d.txt\r\n",log_number);
+    char str[30];
+    //sprintf(str, "/sd/copter_altb1/log_%d.txt", log_number);
+    // Write Textfile for description:
+    sprintf(str, "/sd/copter_QK2/log_%d.txt", log_number);
+    fp = fopen(str, "w");
+    if(fp == NULL) {
+        error("Could not open file for write\r\n");
+        file_is_open = false;
+    }
+    else{
+        //fprintf(fp,"gyr, 1:3\r\nEKF, 4:7\r\nOptFl, 8:11\r\nLidar, 12\r\nMxyz, 14:16\r\nFT, 17\r\nwMot, 18:21\r\nUSens, 22\r\nASens, 23\r\nCS, 24\r\ndt, 25\r\nRPYdes, 26:28\r\n");      // Description
+        fprintf(fp,"gyr, 1:3\r\nacc, 4:6\r\nLidar, 7\r\nOF, 8:11\r\nRPY, 12:14\r\nMxyz, 15:17\r\nFT, 18\r\nwMot, 19:22\r\n");      // Description
+        fclose(fp);
+        sprintf(str, "/sd/copter_QK2/log_%d.bin", log_number);
+        fp = fopen(str, "wb");
+        file_is_open = true;
+        fwrite(&nb, 1, 1, fp); // write number of columns once!!!
+        }
+    this->nb_cols = nb;
+}
+// ------------------- start logging ----------------
+void Data_Logger::start_logging(void){
+        ti.reset();
+        ti.start();
+        pc.printf("DataLogger Thread started\r\n");
+        if(file_is_open){
+            log_is_active = true;
+            thread.start(callback(this, &Data_Logger::write_line));
+            ticker.attach(callback(this, &Data_Logger::sendSignal), Ts);
+            }
+}
+// ------------------- stop logging ----------------
+void Data_Logger::stop_logging(void){
+        log_is_active = false;
+        ticker.detach();
+        thread.terminate();
+        }
+// ------------------- stop logging ----------------
+void Data_Logger::pause_logging(void){
+        log_is_active = false;
+        }
+// ------------------- stop logging ----------------
+void Data_Logger::continue_logging(void){
+        log_is_active = true;
+        }
+// ------------------- destructor -----------------
+Data_Logger::~Data_Logger() {
+    ticker.detach();
+    }
+// ------------------ write line -------------
+void Data_Logger::write_line(void){
+    uint8_t kk=0;
+printf("THREAD LOG loop\r\n"); 
+    while(true){
+        thread.signal_wait(signal);
+        if(log_is_active && file_is_open)
+            {
+            mutex.lock();
+            float t_temp = ti.read(); 
+            fwrite(&t_temp, 4, 1, fp);
+            //fwrite(data_vector, 4, nb_cols, fp);
+            fwrite(data.sens_gyr, 4, 3, fp);
+            fwrite(data.sens_acc, 4, 3, fp);
+            fwrite(&data.sens_Lidar[0], 4, 1, fp);
+            fwrite(data.sens_OF, 4, 4, fp);
+            fwrite(data.est_RPY, 4, 3, fp);
+            fwrite(data.cntrl_Mxyz, 4, 3, fp);
+            fwrite(&data.F_Thrust, 4, 1, fp);
+            fwrite(data.wMot, 4, 4, fp);
+            mutex.unlock();
+            }
+        }
+    }
+// ------------- close file -----------------    
+void Data_Logger::close_file(void){
+    if(log_is_active)
+        stop_logging();
+    fclose(fp);
+    }
+// this is for realtime OS
+void Data_Logger::sendSignal() {
+    thread.signal_set(signal);
+}
\ No newline at end of file