File manager

Dependencies:   SDFileSystem

Dependents:   RwSDCard_Xml_GPS

Committer:
Lucyjungz
Date:
Tue May 10 11:09:47 2016 +0000
Revision:
2:18e004a47f52
Parent:
1:1f1f2b99756b
Child:
3:6e08d0bba1bb
Bug fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Lucyjungz 1:1f1f2b99756b 1 #include "mbed.h"
nsrwsurasak 0:a27e0d3581d1 2 #include "FileManager.h"
nsrwsurasak 0:a27e0d3581d1 3 #include "SDFileSystem.h"
nsrwsurasak 0:a27e0d3581d1 4
nsrwsurasak 0:a27e0d3581d1 5 char m_GpsInterval[XMLTEXT_SIZE];
nsrwsurasak 0:a27e0d3581d1 6 char m_DataInterval[XMLTEXT_SIZE];
nsrwsurasak 0:a27e0d3581d1 7 Variable_Data_TypeDef m_varList[MAX_VAR];
Lucyjungz 1:1f1f2b99756b 8 unsigned int m_amountVarList = 0;
nsrwsurasak 0:a27e0d3581d1 9
nsrwsurasak 0:a27e0d3581d1 10 static void removeSpaces(char* s , int size);
nsrwsurasak 0:a27e0d3581d1 11 static void getXmlText(char *str, char *ret);
Lucyjungz 1:1f1f2b99756b 12 static void generateFileNameWithTime(time_t timestamp, char * file_name);
nsrwsurasak 0:a27e0d3581d1 13
nsrwsurasak 0:a27e0d3581d1 14 static void removeSpaces(char* s , int size)
nsrwsurasak 0:a27e0d3581d1 15 {
nsrwsurasak 0:a27e0d3581d1 16 char* cpy = s; // an alias to iterate through s without moving s
nsrwsurasak 0:a27e0d3581d1 17 char* temp = s;
nsrwsurasak 0:a27e0d3581d1 18
nsrwsurasak 0:a27e0d3581d1 19 for (int i = 0 ; i < size ; i++) {
nsrwsurasak 0:a27e0d3581d1 20 if (*cpy != ' ')
nsrwsurasak 0:a27e0d3581d1 21 *temp++ = *cpy;
nsrwsurasak 0:a27e0d3581d1 22 cpy++;
nsrwsurasak 0:a27e0d3581d1 23 }
nsrwsurasak 0:a27e0d3581d1 24 *temp = 0;
nsrwsurasak 0:a27e0d3581d1 25 return;
nsrwsurasak 0:a27e0d3581d1 26 }
nsrwsurasak 0:a27e0d3581d1 27 static void getXmlText(char *str, char *ret)
nsrwsurasak 0:a27e0d3581d1 28 {
nsrwsurasak 0:a27e0d3581d1 29 int size = strlen(str);
nsrwsurasak 0:a27e0d3581d1 30 int i;
nsrwsurasak 0:a27e0d3581d1 31 bool begin_text = false;
nsrwsurasak 0:a27e0d3581d1 32 char * ret_addr = ret;
nsrwsurasak 0:a27e0d3581d1 33 memset (ret,' ',XMLTEXT_SIZE);
nsrwsurasak 0:a27e0d3581d1 34
nsrwsurasak 0:a27e0d3581d1 35 for(i = 0; i < size ; i++) {
nsrwsurasak 0:a27e0d3581d1 36
nsrwsurasak 0:a27e0d3581d1 37 if (*str == '>') {
nsrwsurasak 0:a27e0d3581d1 38 begin_text = true;
nsrwsurasak 0:a27e0d3581d1 39 } else if (begin_text && *str == '<') {
nsrwsurasak 0:a27e0d3581d1 40 begin_text = false;
nsrwsurasak 0:a27e0d3581d1 41 break;
nsrwsurasak 0:a27e0d3581d1 42 } else if (begin_text && *str != ' ') {
nsrwsurasak 0:a27e0d3581d1 43 *ret = *str;
nsrwsurasak 0:a27e0d3581d1 44 ret++;
nsrwsurasak 0:a27e0d3581d1 45 }
nsrwsurasak 0:a27e0d3581d1 46
nsrwsurasak 0:a27e0d3581d1 47 str++;
nsrwsurasak 0:a27e0d3581d1 48 }
nsrwsurasak 0:a27e0d3581d1 49 removeSpaces(ret_addr, XMLTEXT_SIZE);
nsrwsurasak 0:a27e0d3581d1 50 }
Lucyjungz 1:1f1f2b99756b 51 static void generateFileNameWithTime(time_t timestamp, char * file_name)
Lucyjungz 1:1f1f2b99756b 52 {
Lucyjungz 1:1f1f2b99756b 53 char str[5];
Lucyjungz 1:1f1f2b99756b 54 struct tm * ptm;
Lucyjungz 1:1f1f2b99756b 55
Lucyjungz 1:1f1f2b99756b 56 ptm = localtime ( &timestamp );
Lucyjungz 1:1f1f2b99756b 57 sprintf(str,"%04d", ptm->tm_year-100 + 2000);
Lucyjungz 1:1f1f2b99756b 58 memcpy(&file_name[4], str, 4);
Lucyjungz 1:1f1f2b99756b 59
Lucyjungz 1:1f1f2b99756b 60 sprintf(str,"%02d", ptm->tm_mon+1);
Lucyjungz 1:1f1f2b99756b 61 memcpy(&file_name[9], str, 2);
Lucyjungz 1:1f1f2b99756b 62
Lucyjungz 1:1f1f2b99756b 63 sprintf(str,"%02d", ptm->tm_mday);
Lucyjungz 1:1f1f2b99756b 64 memcpy(&file_name[12], str, 2);
Lucyjungz 1:1f1f2b99756b 65 }
Lucyjungz 1:1f1f2b99756b 66
nsrwsurasak 0:a27e0d3581d1 67 void readSetupFile()
nsrwsurasak 0:a27e0d3581d1 68 {
nsrwsurasak 0:a27e0d3581d1 69 // now open file for reading
nsrwsurasak 0:a27e0d3581d1 70 FILE *fp = fopen(SETUP_FILE_NAME, "r");
nsrwsurasak 0:a27e0d3581d1 71
nsrwsurasak 0:a27e0d3581d1 72 if (fp == NULL) { // if it can't open the file then print error message
nsrwsurasak 0:a27e0d3581d1 73 printf("\nError! Unable to open file! %s \n", SETUP_FILE_NAME);
nsrwsurasak 0:a27e0d3581d1 74 } else { // opened file so can write
nsrwsurasak 0:a27e0d3581d1 75 // fscanf(fp, "%d",&stored_top_score); // ensure data type matches - note address operator (&)
nsrwsurasak 0:a27e0d3581d1 76 // serial.printf("Read %d from file.\n",stored_top_score);
nsrwsurasak 0:a27e0d3581d1 77
nsrwsurasak 0:a27e0d3581d1 78 ReadingFileState state = STATE_FINDING;
nsrwsurasak 0:a27e0d3581d1 79 char buf[1024];
nsrwsurasak 0:a27e0d3581d1 80 while (fgets(buf, sizeof(buf), fp) != NULL) {
nsrwsurasak 0:a27e0d3581d1 81 if (strstr (buf,DATA_TAG)) {
nsrwsurasak 0:a27e0d3581d1 82 state = STATE_FOUND_DATA;
nsrwsurasak 0:a27e0d3581d1 83 } else if (strstr (buf,GPS_TAG)) {
nsrwsurasak 0:a27e0d3581d1 84 state = STATE_FOUND_GPS;
nsrwsurasak 0:a27e0d3581d1 85 } else if (strstr (buf,UPDATE_INTERVAL_TAG)) {
nsrwsurasak 0:a27e0d3581d1 86 if (state == STATE_FOUND_GPS) {
nsrwsurasak 0:a27e0d3581d1 87 getXmlText(buf, m_GpsInterval);
nsrwsurasak 0:a27e0d3581d1 88 printf("\r\n-found GPS interval %s ", m_GpsInterval);
nsrwsurasak 0:a27e0d3581d1 89 state = STATE_FINDING;
nsrwsurasak 0:a27e0d3581d1 90 } else if(state == STATE_FOUND_DATA) {
nsrwsurasak 0:a27e0d3581d1 91 getXmlText(buf, m_DataInterval);
nsrwsurasak 0:a27e0d3581d1 92 printf("\r\n-found Data interval %s ", m_DataInterval);
nsrwsurasak 0:a27e0d3581d1 93 state = STATE_FINDING;
nsrwsurasak 0:a27e0d3581d1 94 }
nsrwsurasak 0:a27e0d3581d1 95 }
nsrwsurasak 0:a27e0d3581d1 96 }
nsrwsurasak 0:a27e0d3581d1 97 fclose(fp); // ensure you close the file after reading
nsrwsurasak 0:a27e0d3581d1 98 }
nsrwsurasak 0:a27e0d3581d1 99 }
Lucyjungz 1:1f1f2b99756b 100 void logGPSData(time_t timestamp ,char lat[], char longti[])
nsrwsurasak 0:a27e0d3581d1 101 {
Lucyjungz 1:1f1f2b99756b 102 char file_name[] = GPS_LOG_FILE_NAME;
Lucyjungz 1:1f1f2b99756b 103
Lucyjungz 1:1f1f2b99756b 104 generateFileNameWithTime(timestamp,file_name);
Lucyjungz 1:1f1f2b99756b 105 FILE *fp = fopen(file_name, "a");
Lucyjungz 1:1f1f2b99756b 106
Lucyjungz 1:1f1f2b99756b 107 if (fp == NULL) { // if it can't open the file then print error message
Lucyjungz 1:1f1f2b99756b 108 printf("Error! Unable to open file %s!\n",file_name);
Lucyjungz 1:1f1f2b99756b 109 } else { // opened file so can write
Lucyjungz 1:1f1f2b99756b 110 printf("\r\n Writing to Gps Log File (%s)....",file_name);
Lucyjungz 1:1f1f2b99756b 111
Lucyjungz 1:1f1f2b99756b 112 fprintf(fp, "%d,%s,%s\n",timestamp,lat,longti); // print formatted string to file (CSV)
Lucyjungz 1:1f1f2b99756b 113
Lucyjungz 1:1f1f2b99756b 114 printf("Done");
Lucyjungz 1:1f1f2b99756b 115 fclose(fp); // ensure you close the file after writing
Lucyjungz 1:1f1f2b99756b 116 }
Lucyjungz 1:1f1f2b99756b 117 }
Lucyjungz 1:1f1f2b99756b 118 void logRMSData(time_t timestamp ,float * var, int size)
Lucyjungz 1:1f1f2b99756b 119 {
Lucyjungz 1:1f1f2b99756b 120 char file_name[] = RTL_LOG_FILE_NAME;
Lucyjungz 1:1f1f2b99756b 121
Lucyjungz 1:1f1f2b99756b 122 generateFileNameWithTime(timestamp,file_name);
Lucyjungz 1:1f1f2b99756b 123 if (!is_file_exist(file_name))
Lucyjungz 1:1f1f2b99756b 124 {
Lucyjungz 1:1f1f2b99756b 125 logRMSHeader(timestamp);
Lucyjungz 1:1f1f2b99756b 126 }
Lucyjungz 1:1f1f2b99756b 127 FILE *fp = fopen(file_name, "a");
nsrwsurasak 0:a27e0d3581d1 128
nsrwsurasak 0:a27e0d3581d1 129 if (fp == NULL) { // if it can't open the file then print error message
Lucyjungz 1:1f1f2b99756b 130 printf("Error! Unable to open file %s!\n",file_name);
nsrwsurasak 0:a27e0d3581d1 131 } else { // opened file so can write
Lucyjungz 1:1f1f2b99756b 132 printf("\r\n Writing to Log File (%s)....",file_name);
Lucyjungz 1:1f1f2b99756b 133
Lucyjungz 1:1f1f2b99756b 134 fprintf(fp, "%d",timestamp); // print Timestamp
Lucyjungz 1:1f1f2b99756b 135
Lucyjungz 1:1f1f2b99756b 136 for(int i = 0; i < size; i++)
Lucyjungz 1:1f1f2b99756b 137 {
Lucyjungz 1:1f1f2b99756b 138 fprintf(fp, ",%f",var[i]); // print variable list
Lucyjungz 1:1f1f2b99756b 139 }
Lucyjungz 1:1f1f2b99756b 140 fprintf(fp, "\n"); // print new line
nsrwsurasak 0:a27e0d3581d1 141
Lucyjungz 1:1f1f2b99756b 142 printf("Done");
Lucyjungz 1:1f1f2b99756b 143 fclose(fp); // ensure you close the file after writing
Lucyjungz 1:1f1f2b99756b 144 }
Lucyjungz 1:1f1f2b99756b 145 }
Lucyjungz 1:1f1f2b99756b 146 void logRMSHeader(time_t timestamp)
Lucyjungz 1:1f1f2b99756b 147 {
Lucyjungz 1:1f1f2b99756b 148 char file_name[] = RTL_LOG_FILE_NAME;
Lucyjungz 1:1f1f2b99756b 149
Lucyjungz 1:1f1f2b99756b 150 generateFileNameWithTime(timestamp,file_name);
Lucyjungz 1:1f1f2b99756b 151
Lucyjungz 1:1f1f2b99756b 152
Lucyjungz 1:1f1f2b99756b 153 FILE *fp = fopen(file_name, "a");
Lucyjungz 1:1f1f2b99756b 154
Lucyjungz 1:1f1f2b99756b 155 if (fp == NULL) { // if it can't open the file then print error message
Lucyjungz 1:1f1f2b99756b 156 printf("Error! Unable to open file %s!\n",file_name);
Lucyjungz 1:1f1f2b99756b 157 } else { // opened file so can write
Lucyjungz 1:1f1f2b99756b 158 printf("\r\n Writing to Log File (%s)....",file_name);
Lucyjungz 1:1f1f2b99756b 159
Lucyjungz 1:1f1f2b99756b 160 fprintf(fp, "%s",RMS_HEADER_TIME); // print variable list
Lucyjungz 1:1f1f2b99756b 161 for(int i = 0; i < m_amountVarList; i++)
Lucyjungz 1:1f1f2b99756b 162 {
Lucyjungz 1:1f1f2b99756b 163 fprintf(fp, ",%s",m_varList[i].varName); // print variable list
Lucyjungz 1:1f1f2b99756b 164 }
Lucyjungz 1:1f1f2b99756b 165 fprintf(fp, "\n"); // print new line
nsrwsurasak 0:a27e0d3581d1 166
nsrwsurasak 0:a27e0d3581d1 167 printf("Done");
nsrwsurasak 0:a27e0d3581d1 168 fclose(fp); // ensure you close the file after writing
nsrwsurasak 0:a27e0d3581d1 169 }
nsrwsurasak 0:a27e0d3581d1 170 }
nsrwsurasak 0:a27e0d3581d1 171 void logSystemData(float gps_interval)
nsrwsurasak 0:a27e0d3581d1 172 {
nsrwsurasak 0:a27e0d3581d1 173 FILE *fp = fopen(MINIRMS_LOG_FILE_NAME, "a");
nsrwsurasak 0:a27e0d3581d1 174
nsrwsurasak 0:a27e0d3581d1 175 if (fp == NULL) { // if it can't open the file then print error message
nsrwsurasak 0:a27e0d3581d1 176 printf("Error! Unable to open file!\n");
nsrwsurasak 0:a27e0d3581d1 177 } else { // opened file so can write
Lucyjungz 1:1f1f2b99756b 178 fprintf(fp, "\nStart Mini-RMS System with Gps Interval = %f",gps_interval); // ensure data type matches
nsrwsurasak 0:a27e0d3581d1 179 fclose(fp); // ensure you close the file after writing
nsrwsurasak 0:a27e0d3581d1 180 }
nsrwsurasak 0:a27e0d3581d1 181 }
nsrwsurasak 0:a27e0d3581d1 182 void delete_file(char filename[])
nsrwsurasak 0:a27e0d3581d1 183 {
nsrwsurasak 0:a27e0d3581d1 184 printf("Deleting file '%s'...",filename);
nsrwsurasak 0:a27e0d3581d1 185 FILE *fp = fopen(filename, "r"); // try and open file
nsrwsurasak 0:a27e0d3581d1 186 if (fp != NULL) { // if it does open...
nsrwsurasak 0:a27e0d3581d1 187 fclose(fp); // close it
nsrwsurasak 0:a27e0d3581d1 188 remove(filename); // and then delete
nsrwsurasak 0:a27e0d3581d1 189 printf("Done!\n");
nsrwsurasak 0:a27e0d3581d1 190 }
nsrwsurasak 0:a27e0d3581d1 191 // if we can't open it, it doesn't exist and so we can't delete it
nsrwsurasak 0:a27e0d3581d1 192 }
Lucyjungz 1:1f1f2b99756b 193 bool is_file_exist(char filename[])
Lucyjungz 1:1f1f2b99756b 194 {
Lucyjungz 1:1f1f2b99756b 195 bool exist = false;
Lucyjungz 1:1f1f2b99756b 196 FILE *fp = fopen(filename, "r"); // try and open file
Lucyjungz 1:1f1f2b99756b 197 if (fp != NULL) { // if it does open...
Lucyjungz 1:1f1f2b99756b 198 fclose(fp); // close it
Lucyjungz 1:1f1f2b99756b 199 exist = true;
Lucyjungz 1:1f1f2b99756b 200 }
Lucyjungz 1:1f1f2b99756b 201
Lucyjungz 1:1f1f2b99756b 202 return exist;
Lucyjungz 1:1f1f2b99756b 203 }
nsrwsurasak 0:a27e0d3581d1 204 int GPSInterval()
nsrwsurasak 0:a27e0d3581d1 205 {
nsrwsurasak 0:a27e0d3581d1 206 //Return whether or not CRC is enabled
nsrwsurasak 0:a27e0d3581d1 207 return atoi( m_GpsInterval );
nsrwsurasak 0:a27e0d3581d1 208 }
nsrwsurasak 0:a27e0d3581d1 209 int DataInterval()
nsrwsurasak 0:a27e0d3581d1 210 {
nsrwsurasak 0:a27e0d3581d1 211 //Return whether or not CRC is enabled
nsrwsurasak 0:a27e0d3581d1 212 return atoi( m_DataInterval );
nsrwsurasak 0:a27e0d3581d1 213 }
nsrwsurasak 0:a27e0d3581d1 214
nsrwsurasak 0:a27e0d3581d1 215 Variable_Data_TypeDef * readVarFile()
nsrwsurasak 0:a27e0d3581d1 216 {
nsrwsurasak 0:a27e0d3581d1 217 // now open file for reading
nsrwsurasak 0:a27e0d3581d1 218 FILE *fp = fopen(VARIABLE_FILE_NAME, "r");
nsrwsurasak 0:a27e0d3581d1 219
nsrwsurasak 0:a27e0d3581d1 220 if (fp == NULL) { // if it can't open the file then print error message
nsrwsurasak 0:a27e0d3581d1 221 printf("\nError! Unable to open file! %s \n", VARIABLE_FILE_NAME);
nsrwsurasak 0:a27e0d3581d1 222 return NULL;
nsrwsurasak 0:a27e0d3581d1 223 } else { // opened file so can write
nsrwsurasak 0:a27e0d3581d1 224
nsrwsurasak 0:a27e0d3581d1 225 char buf[1024];
nsrwsurasak 0:a27e0d3581d1 226 int index = 0;
nsrwsurasak 0:a27e0d3581d1 227 memset(m_varList, ' ', sizeof(m_varList));
nsrwsurasak 0:a27e0d3581d1 228 while (fgets(buf, sizeof(buf), fp) != NULL) {
nsrwsurasak 0:a27e0d3581d1 229 if (strstr (buf,VAR_NAME_TAG)) {
nsrwsurasak 0:a27e0d3581d1 230 getXmlText(buf , m_varList[index].varName);
nsrwsurasak 0:a27e0d3581d1 231
nsrwsurasak 0:a27e0d3581d1 232 } else if (strstr (buf,VAR_ADDR_TAG)) {
nsrwsurasak 0:a27e0d3581d1 233 getXmlText(buf , m_varList[index].varAddress);
nsrwsurasak 0:a27e0d3581d1 234 index++;
nsrwsurasak 0:a27e0d3581d1 235 }
nsrwsurasak 0:a27e0d3581d1 236
nsrwsurasak 0:a27e0d3581d1 237 }
nsrwsurasak 0:a27e0d3581d1 238 fclose(fp); // ensure you close the file after reading
nsrwsurasak 0:a27e0d3581d1 239 m_amountVarList = index;
nsrwsurasak 0:a27e0d3581d1 240 return m_varList;
nsrwsurasak 0:a27e0d3581d1 241 }
nsrwsurasak 0:a27e0d3581d1 242 }
nsrwsurasak 0:a27e0d3581d1 243 int getAmountVarList()
nsrwsurasak 0:a27e0d3581d1 244 {
nsrwsurasak 0:a27e0d3581d1 245 return m_amountVarList;
nsrwsurasak 0:a27e0d3581d1 246 }
nsrwsurasak 0:a27e0d3581d1 247 Variable_Data_TypeDef * getVarList()
nsrwsurasak 0:a27e0d3581d1 248 {
nsrwsurasak 0:a27e0d3581d1 249 return m_varList;
nsrwsurasak 0:a27e0d3581d1 250 }
nsrwsurasak 0:a27e0d3581d1 251
nsrwsurasak 0:a27e0d3581d1 252