Dependencies:   ChaNFSSD mbed BMP085 SHT2x

Revision:
9:9ca3db7ed7cb
Parent:
8:fd243a6439f3
diff -r fd243a6439f3 -r 9ca3db7ed7cb main.cpp
--- a/main.cpp	Thu Feb 23 02:43:34 2012 +0000
+++ b/main.cpp	Mon Feb 27 16:20:15 2012 +0000
@@ -4,7 +4,7 @@
  * 2012-1-4 Toshihisa T
  */
 
-#define __MY_VERSION__  "0.86"
+#define __MY_VERSION__  "0.89.2"
 
 #define HAVE_TOGGLE_SW
 #define HAVE_MICROSD
@@ -234,13 +234,23 @@
 #endif
 }
 
-void logCheckProc()
+unsigned char wbuf[512];
+int widx = 0;
+
+int logBtnPush = 0;
+int logBtnAck  = 0;
+
+void logOpenClose()
 {
-    if((logSW == 0) && (toggleSW_now != 0)){
+    if(logBtnPush != logBtnAck){
         if(csvFP != NULL){
             fclose(csvFP);
             csvFP = NULL;
             if(gpsFP != NULL){
+                if(widx > 0){
+                    fwrite(&wbuf,sizeof(wbuf[0]),widx,gpsFP);
+                    widx = 0;
+                }
                 fclose(gpsFP);
                 gpsFP = NULL;
             }
@@ -254,19 +264,25 @@
             gpsFP = fopen(name,"w+b");
             if((csvFP != NULL) && (gpsFP != NULL)){
                 logled = 1; /* logging */
+                widx = 0;   /* buffer clear */
             } else {
                 if(csvFP) fclose(csvFP);
                 if(gpsFP) fclose(gpsFP);
                 logled = 0; /* Cannot start logging */
             }
         }
+        logBtnAck = logBtnPush;
+    }
+}
+
+void logBtnUpdate()
+{
+    if((logSW == 0) && (toggleSW_now != 0)){
+        logBtnPush++; 
     }
     logSW = toggleSW_now;
 }
 
-unsigned char wbuf[1024];
-int widx = 0;
-
 void ClearScreen(void)
 {
     lcd.locate(0,0); lcd.printf("%20s"," ");
@@ -292,6 +308,7 @@
     int min=0;
     int sec=0;
     int pre_sec = -1;
+    struct tm t;
  
     p = -99.0;
     t1 = -99.0;
@@ -356,14 +373,15 @@
     wait(0.5);
     if(1){
         //unsigned char modeStr[] = "PUBX,41,1,0007,0003,115200,0";
-        unsigned char modeStr[] = "PUBX,41,1,0007,0001,115200,0";
+        //unsigned char modeStr[] = "PUBX,41,1,0007,0001,115200,0";
+        unsigned char modeStr[] = "PUBX,41,1,0007,0001,38400,0";
         unsigned char sum = NMEA_CalcSum(modeStr,strlen((char *)modeStr));
         debug.printf("SEND:[%s](0x%02X)\n",modeStr,sum);
         gps.printf("$%s*%02X%c%c",modeStr,sum,0x0d,0x0a);
 
         debug.printf("CHG BAUD:115200\n");
         gps.format(8,Serial::None,1);
-        gps.baud(115200);
+        gps.baud(38400);
     }
 
     gps.recvStart();
@@ -442,10 +460,18 @@
         //lcd.locate(0,0);
         //lcd.printf("SCAN:%-10ld",scanCount);
 
-        logCheckProc();
+        logBtnUpdate();
 
         while(gps.readable()) {
             c = gps.getc();
+            if(gpsFP != NULL){
+                wbuf[widx] = c;
+                widx++;
+                if(widx >= sizeof(wbuf)){
+                    fwrite(wbuf,sizeof(wbuf[0]),widx,gpsFP);
+                    widx = 0;
+                }
+            }
             if(UBXPacket_Parse(&UBXPacket,c) == 100){
                 UBXCount++;
                 if((UBXPacket.cls == 0x01) && (UBXPacket.id == 0x21)){
@@ -456,6 +482,14 @@
                     hour = UBXPacket.body[16];
                     min  = UBXPacket.body[17];
                     sec  = UBXPacket.body[18];
+                    
+                    t.tm_sec = sec;    // 0-59
+                    t.tm_min = min;    // 0-59
+                    t.tm_hour = hour;   // 0-23
+                    t.tm_mday = day;   // 1-31
+                    t.tm_mon = mon-1;     // 0-11
+                    t.tm_year = year-1900;  // year since 1900
+                    set_time(mktime(&t));
                 }
                 debug.printf("%ld : GET UBX Packet (Class=0x%02X,ID=0x%02X,LEN=%d)\n",
                             scanCount,
@@ -464,15 +498,11 @@
                             UBXPacket.len );
                 UBXPacket.cjobst = 0;
             }
-            if(gpsFP != NULL){
-                wbuf[widx] = c;
-                widx++;
-                if(widx >= sizeof(wbuf)){
-                    fwrite(&wbuf,sizeof(wbuf[0]),widx,gpsFP);
-                    widx = 0;
-                }
-            }
         }
+        if(UBXPacket.cjobst == 0){
+            logOpenClose();
+        }
+ 
         lcd.locate(0,0);
         lcd.printf("%c%04d-%02d-%02d %02d:%02d:%02d",(gpsFP) ? '*' : ' ',year,mon,day,hour,min,sec);
 
@@ -528,6 +558,28 @@
 }
 
 /*
+ * 2012-2-26 V0.89.2
+ * ●ログデータの保存開始・終了のタイミングを変更。
+ *   ublox のパケットデータ単位で保存開始・終了するようにした。
+ *   今まではバイト単位で保存開始・終了していたため、タイミングに
+ *   よっては先頭と最後が正しく記録できていなかった。
+ * ●ublox の受信ボーレートを 115200bps から 38400bps に変更。
+ *   なるべく負荷を下げるため。
+ * ●ファイル保存用のバッファも 1024 から 512 に変更。
+ *   これもなるべく負荷を下げるため。
+ *   正しく記録出来なかったのはファイル保存用のバッファサイズによる模様。
+ * このバージョンで、10分間記録する分には特にエラーは発生していない。
+ * このバージョンで長時間ログ採取テストを行う。
+ */
+/*
+ * 2012-2-26 V0.88
+ * ublox から受診した日付時刻を RTC に保存するようにした。
+ * ファイルの日付をRTCに保存している日付を設定するようにした。
+ * これで、マイクロSDをパソコンで見るとき、ファイルの日付が
+ * 正しく記録される。
+ */
+/* V0.87 is nothing... */
+/*
  * 2012-2-23 V0.86
  * Eugenio さんからの連絡で、RXM-EPH は
  * 受信する必要が無いので受信しないようにした。