Initial Publish Leaning GPS/SDCARD

Dependencies:   FileManager GPSGms6 SDFileSystem mbed

Fork of 2545_SD_Card by Craig Evans

Files at this revision

API Documentation at this revision

Comitter:
Lucyjungz
Date:
Mon May 09 08:59:23 2016 +0000
Parent:
3:78eaf4291b84
Child:
5:07aaa6e3784c
Commit message:
read variable list from another xml file

Changed in this revision

FileManager.cpp Show annotated file Show diff for this revision Revisions of this file
FileManager.h Show annotated file Show diff for this revision Revisions of this file
GPSGms6.cpp Show annotated file Show diff for this revision Revisions of this file
GPSGms6.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/FileManager.cpp	Fri May 06 20:23:08 2016 +0000
+++ b/FileManager.cpp	Mon May 09 08:59:23 2016 +0000
@@ -3,6 +3,8 @@
 
 char m_GpsInterval[XMLTEXT_SIZE];
 char m_DataInterval[XMLTEXT_SIZE];
+Variable_Data_TypeDef m_varList[MAX_VAR];
+unsigned int m_amountVarList;
 
 static void removeSpaces(char* s , int size);
 static void getXmlText(char *str, char *ret);
@@ -101,7 +103,7 @@
     if (fp == NULL) {  // if it can't open the file then print error message
         printf("Error! Unable to open file!\n");
     } else {  // opened file so can write
-        printf("\n Writing to Gps Log File....");
+        printf("\r\n Writing to Gps Log File....");
 
         fprintf(fp, "%s,%s\n",date,time);  // print formatted string to file (CSV)
 
@@ -141,4 +143,41 @@
 {
     //Return whether or not CRC is enabled
     return atoi( m_DataInterval );
-}
\ No newline at end of file
+}
+
+Variable_Data_TypeDef * readVarFile()
+{
+    // now open file for reading
+    FILE *fp = fopen(VARIABLE_FILE_NAME, "r");
+
+    if (fp == NULL) {  // if it can't open the file then print error message
+        printf("\nError! Unable to open file! %s \n", VARIABLE_FILE_NAME);
+        return NULL;
+    } else {  // opened file so can write
+
+        char buf[1024];
+        int index = 0;
+        memset(m_varList, ' ', sizeof(m_varList));
+        while (fgets(buf, sizeof(buf), fp) != NULL)
+        {
+            if (strstr (buf,VAR_NAME_TAG))
+            {
+                getXmlText(buf , m_varList[index].varName);
+                
+            }
+            else if (strstr (buf,VAR_ADDR_TAG))
+            {
+                getXmlText(buf , m_varList[index].varAddress);
+                index++;
+            }
+
+        } 
+        fclose(fp);  // ensure you close the file after reading
+        m_amountVarList = index;
+        return m_varList;
+    }   
+}
+int getVarListAmount(){
+    return m_amountVarList;
+}
+    
--- a/FileManager.h	Fri May 06 20:23:08 2016 +0000
+++ b/FileManager.h	Mon May 09 08:59:23 2016 +0000
@@ -1,11 +1,18 @@
+#define SETUP_FILE_NAME         "/sd/RMS_Tester.xml"
+#define GPS_LOG_FILE_NAME       "/sd/gps.csv"
+#define VARIABLE_FILE_NAME      "/sd/20160216185627_upload.xml"
+#define MINIRMS_LOG_FILE_NAME   "/sd/miniRMS.log"
+
 #define GPS_TAG                 "<Gps>"
 #define DATA_TAG                "<Data>"
 #define UPDATE_INTERVAL_TAG     "<Update_Interval>"
-#define SETUP_FILE_NAME         "/sd/RMS_Tester.xml"
-#define GPS_LOG_FILE_NAME       "/sd/gps.csv"
-#define MINIRMS_LOG_FILE_NAME   "/sd/miniRMS.log"
+#define VAR_NAME_TAG            "<varName>"
+#define VAR_ADDR_TAG            "<varAddress>"
 #define XMLTEXT_SIZE            20
 
+#define VAR_NAME_MAX_SIZE       20
+#define VAR_ADDR_MAX_SIZE       10
+#define MAX_VAR                 50
 
 typedef enum  {
         STATE_FINDING,    /** Finding */
@@ -16,6 +23,11 @@
 }ReadingFileState;
 
 
+typedef struct 
+{  
+    char varName[VAR_NAME_MAX_SIZE];
+    char varAddress[VAR_ADDR_MAX_SIZE+1];
+} Variable_Data_TypeDef;  
 
 void readSetupFile();
 void delete_file(char filename[]);
@@ -23,3 +35,5 @@
 int DataInterval();
 void logGPSData(char date[], char time[]);
 void logSystemData(float gps_interval);
+Variable_Data_TypeDef * readVarFile();
+int getVarListAmount();
--- a/GPSGms6.cpp	Fri May 06 20:23:08 2016 +0000
+++ b/GPSGms6.cpp	Mon May 09 08:59:23 2016 +0000
@@ -40,9 +40,11 @@
     }
     else if (buf[buf_index] == ','){
         status = GPS_Status_Empty;
+        memset(ret_value,' ', section_size);
     }
     else{
         unsigned int idx;
+//        printf("\r\n state = %d =",state);
         for(idx = 0;idx < section_size;idx++)
         {
             ret_value[idx] = buf[buf_index + idx];
@@ -148,6 +150,10 @@
     m_available = false;
     
     serial_gps.baud(9600);
+    
+}
+void GPSGms6::start_GPS()
+{
     serial_gps.attach(&byte_callback);
 }
 GPRMC_Data_TypeDef GPSGms6::latestGPRMC()
--- a/GPSGms6.h	Fri May 06 20:23:08 2016 +0000
+++ b/GPSGms6.h	Mon May 09 08:59:23 2016 +0000
@@ -19,19 +19,19 @@
 
 typedef struct 
 {  
-    char header[HEADER_SIZE];
-    char time[GPRMC_TIME_SIZE];
-    char status[GPRMC_TIME_SIZE];
-    char latitude[GPRMC_LATITUDE_SIZE];
-    char latitude_hemi[GPRMC_LATITUDE_HEMI_SIZE];
-    char longitude[GPRMC_LONGITUDE_SIZE];
-    char longitude_hemi[GPRMC_LATITUDE_HEMI_SIZE];
-    char speed[GPRMC_SPEED_SIZE];
-    char course[GPRMC_COURSE_SIZE];
-    char date[GPRMC_DATE_SIZE];
-    char magnetic[GPRMC_MAGNETIC_SIZE];
-    char magnetic_dir[GPRMC_MAGNETIC_DIR_SIZE];
-    char indicator[GPRMC_INDICATOR_SIZE];
+    char header[HEADER_SIZE+1];
+    char time[GPRMC_TIME_SIZE+1];
+    char status[GPRMC_TIME_SIZE+1];
+    char latitude[GPRMC_LATITUDE_SIZE+1];
+    char latitude_hemi[GPRMC_LATITUDE_HEMI_SIZE+1];
+    char longitude[GPRMC_LONGITUDE_SIZE+1];
+    char longitude_hemi[GPRMC_LATITUDE_HEMI_SIZE+1];
+    char speed[GPRMC_SPEED_SIZE+1];
+    char course[GPRMC_COURSE_SIZE+1];
+    char date[GPRMC_DATE_SIZE+1];
+    char magnetic[GPRMC_MAGNETIC_SIZE+1];
+    char magnetic_dir[GPRMC_MAGNETIC_DIR_SIZE+1];
+    char indicator[GPRMC_INDICATOR_SIZE+1];
 } GPRMC_Data_TypeDef;  
 
 typedef enum GPS_ProcessState
@@ -76,7 +76,7 @@
       
     GPSGms6();
 
-
+    void start_GPS();
     /** Get Latest GPRMC Data
      *
      * @returns
--- a/main.cpp	Fri May 06 20:23:08 2016 +0000
+++ b/main.cpp	Mon May 09 08:59:23 2016 +0000
@@ -38,7 +38,7 @@
     printf("\r\nGps indicator = %s", gps.latestGPRMC().indicator);
     
     logGPSData( gps.latestGPRMC().date, gps.latestGPRMC().time);
-    serial.printf("\n#### Restart Timer #####");
+    serial.printf("\r\n#### Restart Timer #####");
     t1.attach(&t1out,gps_interval);
 }
 
@@ -51,11 +51,20 @@
     ////////////////////// read Setup File  //////////////////////////
     readSetupFile();
     gps_interval = (float)GPSInterval()/1000;
+    
+    Variable_Data_TypeDef * var_list = readVarFile();
     logSystemData(gps_interval);
     
+    unsigned int amount = getVarListAmount();
+    for (int i = 0; i < amount ; i++)
+    {
+        serial.printf("\r\n first var name = %s ",var_list[i].varName);
+        serial.printf("\r\n first addr name = %s ",var_list[i].varAddress);
+    }
+    
     ///////////////////////////////////////////////////
     serial.printf("\n End of SD Card Initialization ");
-    
+    gps.start_GPS();
     t1.attach(&t1out,gps_interval);
     while(1);
 }