Bmag incl gps rettelse

Dependencies:   mbed WDT MODSERIAL BME280

Branch:
MbedBMAGThrRev
Revision:
39:0aeb019323bf
Parent:
38:a1615de4ee64
Child:
40:45289e57887d
diff -r a1615de4ee64 -r 0aeb019323bf main.cpp
--- a/main.cpp	Thu Sep 28 09:13:10 2017 +0000
+++ b/main.cpp	Thu Sep 28 14:19:58 2017 +0000
@@ -37,6 +37,11 @@
 int magCntWithoutGpsData = 0;
 char missingGpsConnectionCounter = 0;
 char gpsOverridePushButtonCounter = 0;
+int seconds;
+int minutes;
+int hours;
+char timeArr[10]; 
+string timeStr;
 
 string INTERPRETERID = "";
 char interpreterTmpID[10];
@@ -48,11 +53,12 @@
 bool toggler = true;
 bool dispFlag = false;
 bool checkStateFlag = false;
+bool flushStrErr = false;
+char flushStr[200];
 int togglecount = 0;
 ErrorState prevState = NONE;
 ErrorState presentState = NONE;
 
-
 //global BMAG variables
 string lastUTCTimestamp;
 bool BMAG_Data_Rdy = false;
@@ -163,13 +169,51 @@
     checkStateFlag = true;    
 }
 
+//set time variables
+void setTime(int s, int m, int h){
+    seconds = s;
+    minutes = m;
+    hours = h;    
+}
+
+//get time
+string getTime(void){
+    memset(timeArr, '/0', 10);
+    snprintf(timeArr, 10, "%.2d:%.2d:%.2d", hours, minutes, seconds);
+    timeStr = timeArr;
+    return timeStr;    
+}
+
+//pps tick
+void pps_Tick(){
+    seconds += 1;
+    if(seconds == 60){
+        minutes += 1;
+        seconds = 0;    
+    }
+    if(minutes == 60){
+        hours += 1;
+        minutes = 0;    
+    }
+    if(hours == 24){
+        hours = 0;    
+    }   
+} 
+
 //timer reset // clock update
 void resetTimer(void){
-    clockobj.pps_Tick();
-    t.reset();   
+    t.reset();  
+    pps_Tick();
 }
 
 int main(void){
+    //init pps timing variables
+    seconds = 0;
+    minutes = 0;
+    hours = 0;
+    memset(timeArr, '/0', 10);
+    memset(flushStr,'\0',200);
+    
     //init pth char arrays
     memset(PreassureArr,'\0',10);
     memset(TemperatureArr,'\0',10);
@@ -186,7 +230,7 @@
     wd.init(5.0);
     
     //PPS
-    InterruptIn PPS(p12);  
+    InterruptIn PPS(p26);  
     PPS.rise(&resetTimer);
       
     //Led outputs
@@ -246,7 +290,7 @@
     //USB message
     l1 = "Mounting";
     l2 = "USB pen";
-    thr_writelines.start(write_lines);    
+    //thr_writelines.start(write_lines);    
     wait_ms(1000);    
     
     while(!msd.connect()){
@@ -256,7 +300,9 @@
     
     //Opening a file on usb disk
     FILE * fp;
+    FILE * e_fp;
     fp = fopen(currentFilename.c_str(), "a");
+    e_fp = fopen("Errorlog.txt", "a");
     wait_ms(100);
     
     //initializing SPS generation 
@@ -271,7 +317,7 @@
     //GPS message
     l1 = "GPS";
     l2 = "Startup";    
-    thr_writelines.start(write_lines);
+    //thr_writelines.start(write_lines);
     wait_ms(1000); 
     
     //BMAG communication init
@@ -290,7 +336,7 @@
     clear_display_waiting();
     l1 = "Init";
     l2 = "Done";  
-    thr_writelines.start(write_lines);
+    //thr_writelines.start(write_lines);
     wait_ms(1000);
     
     //Init errorhandler
@@ -323,6 +369,7 @@
     //infinite loop running after initialization
     while(run) {
         
+        /*
         //display txt on disp
         if(dispFlag){
             
@@ -349,6 +396,7 @@
             dispFlag = false;    
         }
         
+        */
         //check state / set state
         if(checkStateFlag){
             
@@ -483,14 +531,18 @@
             checkStateFlag = false;    
         }
         
-        //if the gps rx buffer is full, flush the buffer.
+        //if the gps rx buffer is full, get info to error file.
         if(gps.rxBufferFull()){
-            gps.rxBufferFlush();    
+            gps.move(flushStr, gps.rxBufferGetCount());
+            flushStrErr = true;
+            //remkark hvis dette sker i error fil   
         }
         
         //if the bmag rx buffer is full, flush the buffer.
         if(bmag.rxBufferFull()){
-            bmag.rxBufferFlush();    
+            bmag.move(flushStr, bmag.rxBufferGetCount());
+            flushStrErr = true;
+            //remkark hvis dette sker i error fil  
         }
         
         
@@ -499,12 +551,18 @@
             
             //reset last read ms val
             memset(timer_ms,'\0',5);
+            
+            //read time since pps interrupt
             tmpTime = t.read_ms();
             snprintf (timer_ms, 5, "%d",tmpTime);    
+            
+            if(tmpTime > 1000){
+                writeToUsb("timer abover 1000 ms\r\n", e_fp);                    
+            } 
                          
             if(RTC_set){
                 
-                string tmpTime = clockobj.getTime();
+                string tmpTime = getTime();
                 
                                 
                 //HH
@@ -598,7 +656,7 @@
             if(currentFilename != spsGen.getSpsFileName()) {
                 fileNameUpdated = false;
             }
-
+            
             //read battery voltage
             sprintf(batteryvoltagearr, "%0.1f",(0.00036621652)*battery.read_u16());
             batteryvoltage.assign(batteryvoltagearr);
@@ -749,10 +807,10 @@
                     int hours = atoi(tmpHour);
                     int minutes = atoi(tmpMinute);
                     int seconds = atoi(tmpSecond);                 
-                    clockobj.setTime(seconds, minutes, hours);
+                    setTime(seconds, minutes, hours);
                     
                     dbg.printf("Clock resync done!\r\n"); 
-                    dbg.printf("Clock set to %s\r\n", clockobj.getTime());    
+                    dbg.printf("Clock set to %s\r\n", getTime());    
                     
                     RTC_set = true;                          
             }
@@ -853,11 +911,19 @@
                         
         }
         
-    
+        if(flushStrErr){
+            writeToUsb(flushStr, e_fp);
+            writeToUsb("\r\n", e_fp);
+            
+            memset(flushStr, '/0', 200);
+            
+            flushStrErr = false;    
+        }
+        
         //kick / feed watchdog 
         wd.kick();
         
-        Thread::yield();
+        //Thread::yield();
     }    
    
     return 0;