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 09:31:44 2016 +0000
Parent:
5:07aaa6e3784c
Child:
7:ffaa90a12f00
Commit message:
Formatted Code

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	Mon May 09 09:02:56 2016 +0000
+++ b/FileManager.cpp	Mon May 09 09:31:44 2016 +0000
@@ -15,15 +15,14 @@
     char* cpy = s;  // an alias to iterate through s without moving s
     char* temp = s;
 
-    for (int i = 0 ; i < size ; i++)
-    {
+    for (int i = 0 ; i < size ; i++) {
         if (*cpy != ' ')
             *temp++ = *cpy;
         cpy++;
     }
     *temp = 0;
     return;
-}    
+}
 static void getXmlText(char *str, char *ret)
 {
     int size = strlen(str);
@@ -31,25 +30,19 @@
     bool begin_text = false;
     char * ret_addr = ret;
     memset (ret,' ',XMLTEXT_SIZE);
-    
-    for(i = 0; i < size ; i++)
-    {
-        
-        if (*str == '>')
-        {
+
+    for(i = 0; i < size ; i++) {
+
+        if (*str == '>') {
             begin_text = true;
-        }
-        else if (begin_text && *str == '<')
-        {
+        } else if (begin_text && *str == '<') {
             begin_text = false;
             break;
-        }
-        else if (begin_text && *str != ' ')
-        {
+        } else if (begin_text && *str != ' ') {
             *ret = *str;
             ret++;
         }
-        
+
         str++;
     }
     removeSpaces(ret_addr, XMLTEXT_SIZE);
@@ -67,34 +60,25 @@
 
         ReadingFileState  state = STATE_FINDING;
         char buf[1024];
-        while (fgets(buf, sizeof(buf), fp) != NULL)
-        {
-            if (strstr (buf,DATA_TAG))
-            {
+        while (fgets(buf, sizeof(buf), fp) != NULL) {
+            if (strstr (buf,DATA_TAG)) {
                 state = STATE_FOUND_DATA;
-            }
-            else if (strstr (buf,GPS_TAG))
-            {
+            } else if (strstr (buf,GPS_TAG)) {
                 state = STATE_FOUND_GPS;
-            }
-            else if (strstr (buf,UPDATE_INTERVAL_TAG))
-            {
-                if (state == STATE_FOUND_GPS)
-                {
+            } else if (strstr (buf,UPDATE_INTERVAL_TAG)) {
+                if (state == STATE_FOUND_GPS) {
                     getXmlText(buf, m_GpsInterval);
                     printf("\r\n-found GPS interval %s ", m_GpsInterval);
                     state = STATE_FINDING;
-                }
-                else if(state == STATE_FOUND_DATA)
-                {
+                } else if(state == STATE_FOUND_DATA) {
                     getXmlText(buf, m_DataInterval);
                     printf("\r\n-found Data interval %s ", m_DataInterval);
                     state = STATE_FINDING;
                 }
             }
-        } 
+        }
         fclose(fp);  // ensure you close the file after reading
-    }   
+    }
 }
 void logGPSData(char date[], char time[])
 {
@@ -109,19 +93,19 @@
 
         printf("Done");
         fclose(fp);  // ensure you close the file after writing
-    }    
+    }
 }
 void logSystemData(float gps_interval)
 {
     FILE *fp = fopen(MINIRMS_LOG_FILE_NAME, "a");
 
-    
+
     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
         fprintf(fp, "Start Mini-RMS System with Gps Interval = %f",gps_interval); // ensure data type matches
         fclose(fp);  // ensure you close the file after writing
-    }  
+    }
 }
 void delete_file(char filename[])
 {
@@ -158,30 +142,28 @@
         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))
-            {
+        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))
-            {
+
+            } 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 getAmountVarList(){
+int getAmountVarList()
+{
     return m_amountVarList;
-} 
-Variable_Data_TypeDef * getVarList(){
+}
+Variable_Data_TypeDef * getVarList()
+{
     return m_varList;
-} 
+}
 
-    
+
--- a/FileManager.h	Mon May 09 09:02:56 2016 +0000
+++ b/FileManager.h	Mon May 09 09:31:44 2016 +0000
@@ -15,19 +15,18 @@
 #define MAX_VAR                 50
 
 typedef enum  {
-        STATE_FINDING,    /** Finding */
-        STATE_FOUND_DATA,  /** Found Data tag */
-        STATE_FOUND_DATA_INTERVAL,  /**< Found update internal of tag*/
-        STATE_FOUND_GPS,  /** Found GPS tag */
-        STATE_FOUND_GPS_INTERVAL,  /** Found update internal of GPS*/
-}ReadingFileState;
+    STATE_FINDING,    /** Finding */
+    STATE_FOUND_DATA,  /** Found Data tag */
+    STATE_FOUND_DATA_INTERVAL,  /**< Found update internal of tag*/
+    STATE_FOUND_GPS,  /** Found GPS tag */
+    STATE_FOUND_GPS_INTERVAL,  /** Found update internal of GPS*/
+} ReadingFileState;
 
 
-typedef struct 
-{  
+typedef struct {
     char varName[VAR_NAME_MAX_SIZE];
     char varAddress[VAR_ADDR_MAX_SIZE+1];
-} Variable_Data_TypeDef;  
+} Variable_Data_TypeDef;
 
 void readSetupFile();
 void delete_file(char filename[]);
--- a/GPSGms6.cpp	Mon May 09 09:02:56 2016 +0000
+++ b/GPSGms6.cpp	Mon May 09 09:31:44 2016 +0000
@@ -13,131 +13,113 @@
 bool m_available;
 int m_index;
 Serial serial_gps(PA_9, PA_10);
-GPRMC_Tbl_TypeDef gprms_tbl[] =  
+GPRMC_Tbl_TypeDef gprms_tbl[] = {
+    //          index                       , section size                       , variable
+    {GPS_Process_Start              , INVALID_VALUE              ,(char *)INVALID_VALUE},
+    {GPS_Process_Header             , HEADER_SIZE                , m_gprmc.header},
+    {GPS_Process_Time               , GPRMC_TIME_SIZE            , m_gprmc.time},
+    {GPS_Process_Status             , GPRMC_STATUS_SIZE          , m_gprmc.status},
+    {GPS_Process_Latitude           , GPRMC_LATITUDE_SIZE        , m_gprmc.latitude},
+    {GPS_Process_Latitude_hemis     , GPRMC_LATITUDE_HEMI_SIZE   , m_gprmc.latitude_hemi},
+    {GPS_Process_Longitude          , GPRMC_LONGITUDE_SIZE       , m_gprmc.longitude},
+    {GPS_Process_Longitude_hemis    , GPRMC_LONGITUDE_HEMI_SIZE  , m_gprmc.longitude_hemi},
+    {GPS_Process_Speed              , GPRMC_SPEED_SIZE           , m_gprmc.speed},
+    {GPS_Process_Course             , GPRMC_COURSE_SIZE          , m_gprmc.course},
+    {GPS_Process_Date               , GPRMC_DATE_SIZE            , m_gprmc.date},
+    {GPS_Process_Magnetic           , GPRMC_MAGNETIC_SIZE        , m_gprmc.magnetic},
+    {GPS_Process_Magnetic_Dir       , GPRMC_MAGNETIC_DIR_SIZE    , m_gprmc.magnetic_dir},
+    {GPS_Process_Indicator          , GPRMC_INDICATOR_SIZE       , m_gprmc.indicator},
+    {GPS_Process_Complete           ,INVALID_VALUE              ,(char *)INVALID_VALUE}
+
+};
+static GPS_ProcessStatus GPS_ProcessGprmcSection(GPS_ProcessState state,char * buf , unsigned int buf_index,unsigned int buf_size, unsigned int section_size, char * ret_value)
 {
-        //          index                       , section size                       , variable
-        {GPS_Process_Start              , INVALID_VALUE              ,(char *)INVALID_VALUE},
-        {GPS_Process_Header             , HEADER_SIZE                , m_gprmc.header},
-        {GPS_Process_Time               , GPRMC_TIME_SIZE            , m_gprmc.time},
-        {GPS_Process_Status             , GPRMC_STATUS_SIZE          , m_gprmc.status},
-        {GPS_Process_Latitude           , GPRMC_LATITUDE_SIZE        , m_gprmc.latitude},
-        {GPS_Process_Latitude_hemis     , GPRMC_LATITUDE_HEMI_SIZE   , m_gprmc.latitude_hemi},
-        {GPS_Process_Longitude          , GPRMC_LONGITUDE_SIZE       , m_gprmc.longitude},
-        {GPS_Process_Longitude_hemis    , GPRMC_LONGITUDE_HEMI_SIZE  , m_gprmc.longitude_hemi},
-        {GPS_Process_Speed              , GPRMC_SPEED_SIZE           , m_gprmc.speed},
-        {GPS_Process_Course             , GPRMC_COURSE_SIZE          , m_gprmc.course},
-        {GPS_Process_Date               , GPRMC_DATE_SIZE            , m_gprmc.date},
-        {GPS_Process_Magnetic           , GPRMC_MAGNETIC_SIZE        , m_gprmc.magnetic},
-        {GPS_Process_Magnetic_Dir       , GPRMC_MAGNETIC_DIR_SIZE    , m_gprmc.magnetic_dir},
-        {GPS_Process_Indicator          , GPRMC_INDICATOR_SIZE       , m_gprmc.indicator},
-        {GPS_Process_Complete           ,INVALID_VALUE              ,(char *)INVALID_VALUE}
-                
-};   
-static GPS_ProcessStatus GPS_ProcessGprmcSection(GPS_ProcessState state,char * buf , unsigned int buf_index,unsigned int buf_size, unsigned int section_size, char * ret_value){
     GPS_ProcessStatus status = GPS_Status_Valid;
-    if (buf_index >= (buf_size - section_size)){
+    if (buf_index >= (buf_size - section_size)) {
         status = GPS_Status_NotEnough;
-    }
-    else if (buf[buf_index] == ','){
+    } else if (buf[buf_index] == ',') {
         status = GPS_Status_Empty;
         memset(ret_value,' ', section_size);
-    }
-    else{
+    } else {
         unsigned int idx;
 //        printf("\r\n state = %d =",state);
-        for(idx = 0;idx < section_size;idx++)
-        {
+        for(idx = 0; idx < section_size; idx++) {
             ret_value[idx] = buf[buf_index + idx];
         }
 
     }
     return status;
-    
+
 }
-static void GPS_ProcessGpsData(char * buf, unsigned int size){
-    unsigned int index; 
+static void GPS_ProcessGpsData(char * buf, unsigned int size)
+{
+    unsigned int index;
     unsigned int adv_index = 0;
     GPS_ProcessStatus status = GPS_Status_Valid;
     GPS_ProcessState state = GPS_Process_Start;
-    for(index = 0; index < size;index++)
-    {
-        if (state == GPS_Process_Start)
-        {
-            if (buf[index] == '$')
-            {
+    for(index = 0; index < size; index++) {
+        if (state == GPS_Process_Start) {
+            if (buf[index] == '$') {
                 state = GPS_Process_Header;
-            }
-            else
-            {
+            } else {
                 continue;
             }
-        }
-        else if (state == GPS_Process_Header)
-        {
-            if (index < (size - HEADER_SIZE))
-            {
-                if (buf[index] == 'G' && 
-                        buf[index+1] == 'P' && 
-                        buf[index+2] == 'R' && 
-                        buf[index+3] == 'M' && 
+        } else if (state == GPS_Process_Header) {
+            if (index < (size - HEADER_SIZE)) {
+                if (buf[index] == 'G' &&
+                        buf[index+1] == 'P' &&
+                        buf[index+2] == 'R' &&
+                        buf[index+3] == 'M' &&
                         buf[index+4] == 'C'
-                ){
+                   ) {
                     unsigned int h_index;
-                    for(h_index = 0;h_index < HEADER_SIZE;h_index++)
-                    {
+                    for(h_index = 0; h_index < HEADER_SIZE; h_index++) {
                         m_gprmc.header[h_index] = buf[index + h_index];
                     }
                     index += HEADER_SIZE;
                     state = GPS_Process_Time;
                 }
-            }
-            else
-            {
+            } else {
                 break;
             }
-            
-        }
-        else
-        {
+
+        } else {
             status = GPS_ProcessGprmcSection(state, buf ,index, size, GET_GPRMC_SECTION_SIZE(state), GET_GPRMC_VARIABLE_ADDR(state));
             adv_index = GET_GPRMC_SECTION_SIZE(state);
             state = GET_GPRMC_NEXT_STATE(state) ;
         }
 
-        
-        if (status == GPS_Status_NotEnough || state == GPS_Process_Complete)
-        {
+
+        if (status == GPS_Status_NotEnough || state == GPS_Process_Complete) {
             break;
-        }
-        else if (status == GPS_Status_Valid)
-        {
+        } else if (status == GPS_Status_Valid) {
             index += adv_index;
         }
     }
-    
-    if (m_gprmc.indicator[0] == (char)'A' && 
+
+    if (m_gprmc.indicator[0] == (char)'A' &&
             m_gprmc.indicator[0] == (char)'D' &&
-            m_gprmc.indicator[0] == (char)'E' 
-    )
-    {
+            m_gprmc.indicator[0] == (char)'E'
+       ) {
         m_available= true;
         memcpy(&m_valid_gprmc, &m_gprmc , sizeof(m_gprmc));
     }
 }
 
 
-void complete_callback() {
-   GPS_ProcessGpsData(m_RxBuf, RX_BUF_SIZE);
+void complete_callback()
+{
+    GPS_ProcessGpsData(m_RxBuf, RX_BUF_SIZE);
 
 }
-void byte_callback() {
+void byte_callback()
+{
     // Note: you need to actually read from the serial to clear the RX interrupt
     //printf("%c", gps.getc());
     m_RxBuf[m_index] = serial_gps.getc();
     //printf("%c", m_RxBuf[m_index]);
     m_index++;
-    if (m_index == RX_BUF_SIZE)
-    {
+    if (m_index == RX_BUF_SIZE) {
         m_index = 0;
         complete_callback();
     }
@@ -145,12 +127,12 @@
 }
 GPSGms6::GPSGms6()
 {
-    
+
     m_index = 0;
     m_available = false;
-    
+
     serial_gps.baud(9600);
-    
+
 }
 void GPSGms6::start_GPS()
 {
--- a/GPSGms6.h	Mon May 09 09:02:56 2016 +0000
+++ b/GPSGms6.h	Mon May 09 09:31:44 2016 +0000
@@ -17,8 +17,7 @@
 #define INVALID_VALUE               0xFFFF
 #define RX_BUF_SIZE                 100
 
-typedef struct 
-{  
+typedef struct {
     char header[HEADER_SIZE+1];
     char time[GPRMC_TIME_SIZE+1];
     char status[GPRMC_TIME_SIZE+1];
@@ -32,10 +31,9 @@
     char magnetic[GPRMC_MAGNETIC_SIZE+1];
     char magnetic_dir[GPRMC_MAGNETIC_DIR_SIZE+1];
     char indicator[GPRMC_INDICATOR_SIZE+1];
-} GPRMC_Data_TypeDef;  
+} GPRMC_Data_TypeDef;
 
-typedef enum GPS_ProcessState
-{
+typedef enum GPS_ProcessState {
     GPS_Process_Start = 0,
     GPS_Process_Header,
     GPS_Process_Time,
@@ -54,26 +52,24 @@
     GPS_Process_SIZE
 } GPS_ProcessState;
 
-typedef enum GPS_ProcessStatus
-{
+typedef enum GPS_ProcessStatus {
     GPS_Status_Valid,
     GPS_Status_Empty,
     GPS_Status_NotEnough,
 } GPS_ProcessStatus;
 
-typedef struct 
-{  
+typedef struct {
     GPS_ProcessState state;
     int              size;
     char *           p_val;
-} GPRMC_Tbl_TypeDef;  
+} GPRMC_Tbl_TypeDef;
 
 
 
-class GPSGms6 
+class GPSGms6
 {
 public:
-      
+
     GPSGms6();
 
     void start_GPS();
@@ -90,7 +86,7 @@
      * Valid Data Interval
      */
     GPRMC_Data_TypeDef validGPRMC();
-    
+
     /**  Get availability of gprmc
      *
      * @returns
@@ -102,13 +98,13 @@
 private:
     // States
 
-    
+
 
     //Member variables
-    
-    
-    
+
+
+
     //void GPS_ProcessGpsData(char * buf, unsigned int size, char * t, char * d);
     //GPS_ProcessStatus GPS_ProcessGprmcSection(GPS_ProcessState state,char * buf , unsigned int buf_index,unsigned int buf_size, unsigned int section_size, char * ret_value);
-    
+
 };
\ No newline at end of file
--- a/main.cpp	Mon May 09 09:02:56 2016 +0000
+++ b/main.cpp	Mon May 09 09:31:44 2016 +0000
@@ -1,15 +1,3 @@
-/* 2545_SD_Card Example
-
-Example of writing data to SD card.
-
-Based on FTF2014_lab4 Example
-
-https://developer.mbed.org/teams/Freescale/wiki/FTF2014_workshop
-
-Craig A. Evans, University of Leeds, Mar 2016
-
-*/
-
 #include "mbed.h"
 #include "SDFileSystem.h"
 #include "GPSGms6.h"
@@ -26,9 +14,9 @@
 float gps_interval = 3;
 
 
-void t1out(void) 
-{ 
-    myled = !myled; 
+void t1out(void)
+{
+    myled = !myled;
     printf("\r\nGps header = %s", gps.latestGPRMC().header);
     printf("\r\nGps status = %s", gps.latestGPRMC().status);
     printf("\r\nGps time = %s", gps.latestGPRMC().time);
@@ -36,7 +24,7 @@
     printf("\r\nGps lat = %s", gps.latestGPRMC().latitude);
     printf("\r\nGps long = %s", gps.latestGPRMC().longitude);
     printf("\r\nGps indicator = %s", gps.latestGPRMC().indicator);
-    
+
     logGPSData( gps.latestGPRMC().date, gps.latestGPRMC().time);
     serial.printf("\r\n#### Restart Timer #####");
     t1.attach(&t1out,gps_interval);
@@ -51,17 +39,16 @@
     ////////////////////// read Setup File  //////////////////////////
     readSetupFile();
     gps_interval = (float)GPSInterval()/1000;
-    
+
     Variable_Data_TypeDef * var_list = readVarFile();
     logSystemData(gps_interval);
-    
+
     unsigned int amount = getAmountVarList();
-    for (int i = 0; i < amount ; i++)
-    {
+    for (int i = 0; i < amount ; i++) {
         serial.printf("\r\n 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();