File manager

Dependencies:   SDFileSystem

Dependents:   RwSDCard_Xml_GPS

Committer:
Lucyjungz
Date:
Wed May 18 12:41:20 2016 +0000
Revision:
12:0045fca3c160
Parent:
11:e21d4c5bfd1b
Child:
13:d83e2dcc882d
Add Debug message for LED

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
Lucyjungz 3:6e08d0bba1bb 5 char m_GpsInterval[XMLTEXT_SIZE]; // GPS Interval
Lucyjungz 3:6e08d0bba1bb 6 char m_DataInterval[XMLTEXT_SIZE]; // Data Interval
Lucyjungz 3:6e08d0bba1bb 7 Variable_Data_TypeDef m_varList[MAX_VAR]; // Variable List
Lucyjungz 3:6e08d0bba1bb 8 unsigned int m_amountVarList = 0; // Amount of variable list
Lucyjungz 3:6e08d0bba1bb 9
Lucyjungz 11:e21d4c5bfd1b 10 #ifdef LED_SDCARD
Lucyjungz 11:e21d4c5bfd1b 11 DigitalOut ledStatus(LED_SDCARD);
Lucyjungz 11:e21d4c5bfd1b 12 #else
Lucyjungz 11:e21d4c5bfd1b 13 DigitalOut ledStatus(NC);
Lucyjungz 11:e21d4c5bfd1b 14 #endif
Lucyjungz 11:e21d4c5bfd1b 15
Lucyjungz 3:6e08d0bba1bb 16 /* ############### Static function prototype ################## */
nsrwsurasak 0:a27e0d3581d1 17
Lucyjungz 4:ec62bf823914 18 static void FileManager_RemoveSpaces(char* s , int size);
Lucyjungz 4:ec62bf823914 19 static void FileManager_GetXmlText(char *str, char *ret);
Lucyjungz 4:ec62bf823914 20 static void FileManager_GenerateFileNameWithTime(time_t timestamp, char * file_name);
Lucyjungz 11:e21d4c5bfd1b 21 static void FileManager_SetLedStatus(bool on);
Lucyjungz 3:6e08d0bba1bb 22
Lucyjungz 3:6e08d0bba1bb 23 /**
Lucyjungz 3:6e08d0bba1bb 24 * @brief Utility function to Remove space charector from given char array
Lucyjungz 3:6e08d0bba1bb 25 * @note
Lucyjungz 3:6e08d0bba1bb 26 * @param char array to process remove spaces
Lucyjungz 3:6e08d0bba1bb 27 * @param size of char array
Lucyjungz 3:6e08d0bba1bb 28 * @retval space removed char array
Lucyjungz 3:6e08d0bba1bb 29 */
Lucyjungz 4:ec62bf823914 30 static void FileManager_RemoveSpaces(char* s , int size)
nsrwsurasak 0:a27e0d3581d1 31 {
nsrwsurasak 0:a27e0d3581d1 32 char* cpy = s; // an alias to iterate through s without moving s
nsrwsurasak 0:a27e0d3581d1 33 char* temp = s;
nsrwsurasak 0:a27e0d3581d1 34
nsrwsurasak 0:a27e0d3581d1 35 for (int i = 0 ; i < size ; i++) {
nsrwsurasak 0:a27e0d3581d1 36 if (*cpy != ' ')
nsrwsurasak 0:a27e0d3581d1 37 *temp++ = *cpy;
nsrwsurasak 0:a27e0d3581d1 38 cpy++;
nsrwsurasak 0:a27e0d3581d1 39 }
nsrwsurasak 0:a27e0d3581d1 40 *temp = 0;
nsrwsurasak 0:a27e0d3581d1 41 return;
nsrwsurasak 0:a27e0d3581d1 42 }
Lucyjungz 3:6e08d0bba1bb 43 /**
Lucyjungz 3:6e08d0bba1bb 44 * @brief Utility function to get XML tag
Lucyjungz 3:6e08d0bba1bb 45 * @note Only First tag will be returned
Lucyjungz 3:6e08d0bba1bb 46 * @param char array to get XML Text
Lucyjungz 3:6e08d0bba1bb 47 * @param char array to be populate XML text
Lucyjungz 3:6e08d0bba1bb 48 * @retval XML text
Lucyjungz 3:6e08d0bba1bb 49 */
Lucyjungz 4:ec62bf823914 50 static void FileManager_GetXmlText(char *str, char *ret)
nsrwsurasak 0:a27e0d3581d1 51 {
nsrwsurasak 0:a27e0d3581d1 52 int size = strlen(str);
nsrwsurasak 0:a27e0d3581d1 53 int i;
nsrwsurasak 0:a27e0d3581d1 54 bool begin_text = false;
nsrwsurasak 0:a27e0d3581d1 55 char * ret_addr = ret;
Lucyjungz 3:6e08d0bba1bb 56 /* initialized our return value */
nsrwsurasak 0:a27e0d3581d1 57 memset (ret,' ',XMLTEXT_SIZE);
nsrwsurasak 0:a27e0d3581d1 58
Lucyjungz 3:6e08d0bba1bb 59 /* Loop to check XML tag symbols */
nsrwsurasak 0:a27e0d3581d1 60 for(i = 0; i < size ; i++) {
nsrwsurasak 0:a27e0d3581d1 61
nsrwsurasak 0:a27e0d3581d1 62 if (*str == '>') {
Lucyjungz 3:6e08d0bba1bb 63 /* Found begining of the tag */
nsrwsurasak 0:a27e0d3581d1 64 begin_text = true;
nsrwsurasak 0:a27e0d3581d1 65 } else if (begin_text && *str == '<') {
Lucyjungz 3:6e08d0bba1bb 66 /* Reach the end of text message */
nsrwsurasak 0:a27e0d3581d1 67 begin_text = false;
nsrwsurasak 0:a27e0d3581d1 68 break;
nsrwsurasak 0:a27e0d3581d1 69 } else if (begin_text && *str != ' ') {
Lucyjungz 3:6e08d0bba1bb 70 /* Populate the return value */
nsrwsurasak 0:a27e0d3581d1 71 *ret = *str;
nsrwsurasak 0:a27e0d3581d1 72 ret++;
nsrwsurasak 0:a27e0d3581d1 73 }
Lucyjungz 3:6e08d0bba1bb 74 /* Move to next char */
nsrwsurasak 0:a27e0d3581d1 75 str++;
nsrwsurasak 0:a27e0d3581d1 76 }
Lucyjungz 3:6e08d0bba1bb 77
Lucyjungz 3:6e08d0bba1bb 78 /* Remove space from return value */
Lucyjungz 4:ec62bf823914 79 FileManager_RemoveSpaces(ret_addr, XMLTEXT_SIZE);
nsrwsurasak 0:a27e0d3581d1 80 }
Lucyjungz 3:6e08d0bba1bb 81 /**
Lucyjungz 3:6e08d0bba1bb 82 * @brief Utility function to get File Name with Date
Lucyjungz 3:6e08d0bba1bb 83 * @note Format file will be YYYY-MM-DD.filename
Lucyjungz 3:6e08d0bba1bb 84 * @param timestamp - time structure to get Date
Lucyjungz 3:6e08d0bba1bb 85 * @param file_name - char array to file name
Lucyjungz 3:6e08d0bba1bb 86 * @retval renamed file name
Lucyjungz 3:6e08d0bba1bb 87 */
Lucyjungz 4:ec62bf823914 88 static void FileManager_GenerateFileNameWithTime(time_t timestamp, char * file_name)
Lucyjungz 1:1f1f2b99756b 89 {
Lucyjungz 1:1f1f2b99756b 90 char str[5];
Lucyjungz 1:1f1f2b99756b 91 struct tm * ptm;
Lucyjungz 1:1f1f2b99756b 92
Lucyjungz 3:6e08d0bba1bb 93 /* Convert timestamp to readable format */
Lucyjungz 3:6e08d0bba1bb 94 ptm = localtime ( &timestamp );
Lucyjungz 3:6e08d0bba1bb 95
Lucyjungz 3:6e08d0bba1bb 96 /* Replacing YYYY to the converted year */
Lucyjungz 1:1f1f2b99756b 97 sprintf(str,"%04d", ptm->tm_year-100 + 2000);
Lucyjungz 1:1f1f2b99756b 98 memcpy(&file_name[4], str, 4);
Lucyjungz 1:1f1f2b99756b 99
Lucyjungz 3:6e08d0bba1bb 100 /* Replacing MM to converted month */
Lucyjungz 1:1f1f2b99756b 101 sprintf(str,"%02d", ptm->tm_mon+1);
Lucyjungz 1:1f1f2b99756b 102 memcpy(&file_name[9], str, 2);
Lucyjungz 1:1f1f2b99756b 103
Lucyjungz 3:6e08d0bba1bb 104 /* Replacing DD to converted date */
Lucyjungz 1:1f1f2b99756b 105 sprintf(str,"%02d", ptm->tm_mday);
Lucyjungz 1:1f1f2b99756b 106 memcpy(&file_name[12], str, 2);
Lucyjungz 1:1f1f2b99756b 107 }
Lucyjungz 3:6e08d0bba1bb 108 /**
Lucyjungz 3:6e08d0bba1bb 109 * @brief Function to perform read setup file
Lucyjungz 3:6e08d0bba1bb 110 * @note filename must be defined in FileManager.h, GPS/ Data interval will be stored in dedicated variable
Lucyjungz 3:6e08d0bba1bb 111 * @param None
Lucyjungz 3:6e08d0bba1bb 112 * @retval None
Lucyjungz 3:6e08d0bba1bb 113 */
Lucyjungz 4:ec62bf823914 114 void FileManager_ReadSetupFile()
nsrwsurasak 0:a27e0d3581d1 115 {
Lucyjungz 3:6e08d0bba1bb 116 /* Open file in reading mode */
nsrwsurasak 0:a27e0d3581d1 117 FILE *fp = fopen(SETUP_FILE_NAME, "r");
nsrwsurasak 0:a27e0d3581d1 118
Lucyjungz 3:6e08d0bba1bb 119 if (fp == NULL) {
Lucyjungz 3:6e08d0bba1bb 120 /* In case of error, print the message */
nsrwsurasak 0:a27e0d3581d1 121 printf("\nError! Unable to open file! %s \n", SETUP_FILE_NAME);
Lucyjungz 11:e21d4c5bfd1b 122
Lucyjungz 11:e21d4c5bfd1b 123 /* Indicate LED Status (OFF)*/
Lucyjungz 11:e21d4c5bfd1b 124 FileManager_SetLedStatus(false);
Lucyjungz 3:6e08d0bba1bb 125 } else {
nsrwsurasak 0:a27e0d3581d1 126
Lucyjungz 3:6e08d0bba1bb 127 /* Initialized state */
nsrwsurasak 0:a27e0d3581d1 128 ReadingFileState state = STATE_FINDING;
Lucyjungz 3:6e08d0bba1bb 129
Lucyjungz 3:6e08d0bba1bb 130 /* Allocate buffer for reading file */
nsrwsurasak 0:a27e0d3581d1 131 char buf[1024];
Lucyjungz 3:6e08d0bba1bb 132
Lucyjungz 11:e21d4c5bfd1b 133 /* Indicate LED Status (ON)*/
Lucyjungz 11:e21d4c5bfd1b 134 FileManager_SetLedStatus(true);
Lucyjungz 11:e21d4c5bfd1b 135
Lucyjungz 3:6e08d0bba1bb 136 /* Read line from the file */
nsrwsurasak 0:a27e0d3581d1 137 while (fgets(buf, sizeof(buf), fp) != NULL) {
Lucyjungz 3:6e08d0bba1bb 138
Lucyjungz 3:6e08d0bba1bb 139 /* Check the TAG */
Lucyjungz 3:6e08d0bba1bb 140 if (strstr (buf,DATA_TAG))
Lucyjungz 3:6e08d0bba1bb 141 {
Lucyjungz 3:6e08d0bba1bb 142 /* Found the DATA TAG */
nsrwsurasak 0:a27e0d3581d1 143 state = STATE_FOUND_DATA;
Lucyjungz 3:6e08d0bba1bb 144 } else if (strstr (buf,GPS_TAG))
Lucyjungz 3:6e08d0bba1bb 145 {
Lucyjungz 3:6e08d0bba1bb 146 /* Found GPS TAG */
nsrwsurasak 0:a27e0d3581d1 147 state = STATE_FOUND_GPS;
Lucyjungz 3:6e08d0bba1bb 148 } else if (strstr (buf,UPDATE_INTERVAL_TAG))
Lucyjungz 3:6e08d0bba1bb 149 {
Lucyjungz 3:6e08d0bba1bb 150 /* Found Interval TAG */
Lucyjungz 3:6e08d0bba1bb 151 if (state == STATE_FOUND_GPS)
Lucyjungz 3:6e08d0bba1bb 152 {
Lucyjungz 3:6e08d0bba1bb 153 /* Get XML text for GPS Interval */
Lucyjungz 4:ec62bf823914 154 FileManager_GetXmlText(buf, m_GpsInterval);
Lucyjungz 8:5af4e12c43b2 155 #if DEBUG
nsrwsurasak 0:a27e0d3581d1 156 printf("\r\n-found GPS interval %s ", m_GpsInterval);
Lucyjungz 8:5af4e12c43b2 157 #endif
Lucyjungz 8:5af4e12c43b2 158
Lucyjungz 8:5af4e12c43b2 159 /* Set state to indicate that we are finding */
nsrwsurasak 0:a27e0d3581d1 160 state = STATE_FINDING;
Lucyjungz 3:6e08d0bba1bb 161 }
Lucyjungz 3:6e08d0bba1bb 162 else if(state == STATE_FOUND_DATA)
Lucyjungz 3:6e08d0bba1bb 163 {
Lucyjungz 3:6e08d0bba1bb 164 /* Get XML text for Data Interval */
Lucyjungz 4:ec62bf823914 165 FileManager_GetXmlText(buf, m_DataInterval);
Lucyjungz 8:5af4e12c43b2 166
Lucyjungz 8:5af4e12c43b2 167 #if DEBUG
nsrwsurasak 0:a27e0d3581d1 168 printf("\r\n-found Data interval %s ", m_DataInterval);
Lucyjungz 8:5af4e12c43b2 169 #endif
Lucyjungz 8:5af4e12c43b2 170
Lucyjungz 8:5af4e12c43b2 171 /* Set state to indicate that we are finding */
nsrwsurasak 0:a27e0d3581d1 172 state = STATE_FINDING;
nsrwsurasak 0:a27e0d3581d1 173 }
nsrwsurasak 0:a27e0d3581d1 174 }
nsrwsurasak 0:a27e0d3581d1 175 }
Lucyjungz 3:6e08d0bba1bb 176 /* Ensure file is closed */
Lucyjungz 3:6e08d0bba1bb 177 fclose(fp);
nsrwsurasak 0:a27e0d3581d1 178 }
nsrwsurasak 0:a27e0d3581d1 179 }
Lucyjungz 3:6e08d0bba1bb 180 /**
Lucyjungz 3:6e08d0bba1bb 181 * @brief Function to log GPS Data
Lucyjungz 3:6e08d0bba1bb 182 * @note
Lucyjungz 3:6e08d0bba1bb 183 * @param timestamp - time structure to get Date
Lucyjungz 3:6e08d0bba1bb 184 * @param lat - char array for lattitude
Lucyjungz 3:6e08d0bba1bb 185 * @param longti - char array for longtitude
Lucyjungz 3:6e08d0bba1bb 186 * @retval None
Lucyjungz 3:6e08d0bba1bb 187 */
Lucyjungz 4:ec62bf823914 188 void FileManager_LogGPSData(time_t timestamp ,char lat[], char longti[])
nsrwsurasak 0:a27e0d3581d1 189 {
Lucyjungz 3:6e08d0bba1bb 190 /* Get File name */
Lucyjungz 1:1f1f2b99756b 191 char file_name[] = GPS_LOG_FILE_NAME;
Lucyjungz 1:1f1f2b99756b 192
Lucyjungz 3:6e08d0bba1bb 193 /* Generate file name with time stamp */
Lucyjungz 4:ec62bf823914 194 FileManager_GenerateFileNameWithTime(timestamp,file_name);
Lucyjungz 3:6e08d0bba1bb 195
Lucyjungz 3:6e08d0bba1bb 196 /* Open file with "APPEND" mode */
Lucyjungz 1:1f1f2b99756b 197 FILE *fp = fopen(file_name, "a");
Lucyjungz 1:1f1f2b99756b 198
Lucyjungz 3:6e08d0bba1bb 199 if (fp == NULL)
Lucyjungz 3:6e08d0bba1bb 200 {
Lucyjungz 3:6e08d0bba1bb 201 /* if it can't open the file then print error message */
Lucyjungz 1:1f1f2b99756b 202 printf("Error! Unable to open file %s!\n",file_name);
Lucyjungz 11:e21d4c5bfd1b 203
Lucyjungz 11:e21d4c5bfd1b 204 /* Indicate LED Status (OFF)*/
Lucyjungz 11:e21d4c5bfd1b 205 FileManager_SetLedStatus(false);
Lucyjungz 3:6e08d0bba1bb 206 }
Lucyjungz 11:e21d4c5bfd1b 207 else
Lucyjungz 11:e21d4c5bfd1b 208 {
Lucyjungz 11:e21d4c5bfd1b 209 /* Indicate LED Status (ON)*/
Lucyjungz 11:e21d4c5bfd1b 210 FileManager_SetLedStatus(true);
Lucyjungz 11:e21d4c5bfd1b 211
Lucyjungz 3:6e08d0bba1bb 212 /* Print some message for information */
Lucyjungz 1:1f1f2b99756b 213 printf("\r\n Writing to Gps Log File (%s)....",file_name);
Lucyjungz 1:1f1f2b99756b 214
Lucyjungz 3:6e08d0bba1bb 215 /* Write the line with lattitude and longtitude */
Lucyjungz 3:6e08d0bba1bb 216 fprintf(fp, "%d,%s,%s\n",timestamp,lat,longti);
Lucyjungz 1:1f1f2b99756b 217
Lucyjungz 1:1f1f2b99756b 218 printf("Done");
Lucyjungz 3:6e08d0bba1bb 219 /* Close file once it done */
Lucyjungz 3:6e08d0bba1bb 220 fclose(fp);
Lucyjungz 1:1f1f2b99756b 221 }
Lucyjungz 1:1f1f2b99756b 222 }
Lucyjungz 3:6e08d0bba1bb 223 /**
Lucyjungz 3:6e08d0bba1bb 224 * @brief Function to log RMS Data
Lucyjungz 3:6e08d0bba1bb 225 * @note sequence must be in the same order with variableList
Lucyjungz 3:6e08d0bba1bb 226 * @param timestamp - time structure to get Date
Lucyjungz 3:6e08d0bba1bb 227 * @param var - float array to be log in the file
Lucyjungz 3:6e08d0bba1bb 228 * @param size - size of the float array
Lucyjungz 3:6e08d0bba1bb 229 * @retval None
Lucyjungz 3:6e08d0bba1bb 230 */
Lucyjungz 4:ec62bf823914 231 void FileManager_LogRMSData(time_t timestamp ,float * var, int size)
Lucyjungz 1:1f1f2b99756b 232 {
Lucyjungz 3:6e08d0bba1bb 233 /* Get File name */
Lucyjungz 1:1f1f2b99756b 234 char file_name[] = RTL_LOG_FILE_NAME;
Lucyjungz 1:1f1f2b99756b 235
Lucyjungz 3:6e08d0bba1bb 236 /* Generate File name with timestamp */
Lucyjungz 4:ec62bf823914 237 FileManager_GenerateFileNameWithTime(timestamp,file_name);
Lucyjungz 4:ec62bf823914 238 if (!FileManager_IsFileExist(file_name))
Lucyjungz 1:1f1f2b99756b 239 {
Lucyjungz 3:6e08d0bba1bb 240 /* If file is not exist, log the header */
Lucyjungz 4:ec62bf823914 241 FileManager_LogRMSHeader(timestamp);
Lucyjungz 1:1f1f2b99756b 242 }
Lucyjungz 3:6e08d0bba1bb 243 /* Open file with "APPEND" mode */
Lucyjungz 1:1f1f2b99756b 244 FILE *fp = fopen(file_name, "a");
nsrwsurasak 0:a27e0d3581d1 245
Lucyjungz 3:6e08d0bba1bb 246 if (fp == NULL)
Lucyjungz 3:6e08d0bba1bb 247 {
Lucyjungz 3:6e08d0bba1bb 248 /* In case of error, print the error message */
Lucyjungz 1:1f1f2b99756b 249 printf("Error! Unable to open file %s!\n",file_name);
Lucyjungz 11:e21d4c5bfd1b 250
Lucyjungz 11:e21d4c5bfd1b 251 /* Indicate LED Status (OFF)*/
Lucyjungz 11:e21d4c5bfd1b 252 FileManager_SetLedStatus(false);
Lucyjungz 3:6e08d0bba1bb 253 }
Lucyjungz 3:6e08d0bba1bb 254 else
Lucyjungz 3:6e08d0bba1bb 255 {
Lucyjungz 11:e21d4c5bfd1b 256 /* Indicate LED Status (ON)*/
Lucyjungz 11:e21d4c5bfd1b 257 FileManager_SetLedStatus(true);
Lucyjungz 11:e21d4c5bfd1b 258
Lucyjungz 3:6e08d0bba1bb 259 /* Print some message for information */
Lucyjungz 1:1f1f2b99756b 260 printf("\r\n Writing to Log File (%s)....",file_name);
Lucyjungz 1:1f1f2b99756b 261
Lucyjungz 3:6e08d0bba1bb 262 /* Write timestamp */
Lucyjungz 3:6e08d0bba1bb 263 fprintf(fp, "%d",timestamp);
Lucyjungz 7:ab015947e368 264
Lucyjungz 7:ab015947e368 265 /* Write MSecond */
Lucyjungz 7:ab015947e368 266 fprintf(fp, "%d",0);
Lucyjungz 1:1f1f2b99756b 267
Lucyjungz 3:6e08d0bba1bb 268 /* Write variable data */
Lucyjungz 1:1f1f2b99756b 269 for(int i = 0; i < size; i++)
Lucyjungz 1:1f1f2b99756b 270 {
Lucyjungz 3:6e08d0bba1bb 271 fprintf(fp, ",%f",var[i]);
Lucyjungz 1:1f1f2b99756b 272 }
Lucyjungz 3:6e08d0bba1bb 273 /* Write new line as we done */
Lucyjungz 3:6e08d0bba1bb 274 fprintf(fp, "\n");
nsrwsurasak 0:a27e0d3581d1 275
Lucyjungz 1:1f1f2b99756b 276 printf("Done");
Lucyjungz 3:6e08d0bba1bb 277 /* Close the file */
Lucyjungz 3:6e08d0bba1bb 278 fclose(fp);
Lucyjungz 3:6e08d0bba1bb 279 }
Lucyjungz 3:6e08d0bba1bb 280 }
Lucyjungz 3:6e08d0bba1bb 281 /**
Lucyjungz 3:6e08d0bba1bb 282 * @brief Function to log RMS Header
Lucyjungz 3:6e08d0bba1bb 283 * @note sequence must be in the same order with variableList
Lucyjungz 3:6e08d0bba1bb 284 * @param timestamp - time structure to get Date
Lucyjungz 3:6e08d0bba1bb 285 * @retval None
Lucyjungz 3:6e08d0bba1bb 286 */
Lucyjungz 4:ec62bf823914 287 void FileManager_LogRMSHeader(time_t timestamp)
Lucyjungz 3:6e08d0bba1bb 288 {
Lucyjungz 3:6e08d0bba1bb 289 /* Get File name */
Lucyjungz 3:6e08d0bba1bb 290 char file_name[] = RTL_LOG_FILE_NAME;
Lucyjungz 3:6e08d0bba1bb 291
Lucyjungz 3:6e08d0bba1bb 292 /* Generate file name with time */
Lucyjungz 4:ec62bf823914 293 FileManager_GenerateFileNameWithTime(timestamp,file_name);
Lucyjungz 3:6e08d0bba1bb 294
Lucyjungz 3:6e08d0bba1bb 295 /* Open file in append mode */
Lucyjungz 3:6e08d0bba1bb 296 FILE *fp = fopen(file_name, "a");
Lucyjungz 3:6e08d0bba1bb 297
Lucyjungz 3:6e08d0bba1bb 298 if (fp == NULL)
Lucyjungz 3:6e08d0bba1bb 299 {
Lucyjungz 3:6e08d0bba1bb 300 /* In case of error, print the error message */
Lucyjungz 3:6e08d0bba1bb 301 printf("Error! Unable to open file %s!\n",file_name);
Lucyjungz 11:e21d4c5bfd1b 302
Lucyjungz 11:e21d4c5bfd1b 303 /* Indicate LED Status (OFF)*/
Lucyjungz 11:e21d4c5bfd1b 304 FileManager_SetLedStatus(false);
Lucyjungz 3:6e08d0bba1bb 305 }
Lucyjungz 3:6e08d0bba1bb 306 else
Lucyjungz 3:6e08d0bba1bb 307 {
Lucyjungz 11:e21d4c5bfd1b 308 /* Indicate LED Status (ON)*/
Lucyjungz 11:e21d4c5bfd1b 309 FileManager_SetLedStatus(true);
Lucyjungz 11:e21d4c5bfd1b 310
Lucyjungz 3:6e08d0bba1bb 311 /* opened file so can write */
Lucyjungz 3:6e08d0bba1bb 312 printf("\r\n Writing to Log File (%s)....",file_name);
Lucyjungz 3:6e08d0bba1bb 313
Lucyjungz 3:6e08d0bba1bb 314 /* Write the header to the file */
Lucyjungz 7:ab015947e368 315 fprintf(fp, "%s",RMS_HEADER_TIME);
Lucyjungz 7:ab015947e368 316
Lucyjungz 11:e21d4c5bfd1b 317 fprintf(fp, "%s",RMS_HEADER_MSECOND);
Lucyjungz 3:6e08d0bba1bb 318 for(int i = 0; i < m_amountVarList; i++)
Lucyjungz 3:6e08d0bba1bb 319 {
Lucyjungz 3:6e08d0bba1bb 320 fprintf(fp, ",%s",m_varList[i].varName);
Lucyjungz 3:6e08d0bba1bb 321 }
Lucyjungz 3:6e08d0bba1bb 322 /* Write new line as done */
Lucyjungz 3:6e08d0bba1bb 323 fprintf(fp, "\n");
Lucyjungz 3:6e08d0bba1bb 324
Lucyjungz 3:6e08d0bba1bb 325 printf("Done");
Lucyjungz 3:6e08d0bba1bb 326
Lucyjungz 3:6e08d0bba1bb 327 /* Close the file */
Lucyjungz 3:6e08d0bba1bb 328 fclose(fp);
Lucyjungz 3:6e08d0bba1bb 329 }
Lucyjungz 3:6e08d0bba1bb 330 }
Lucyjungz 3:6e08d0bba1bb 331 /**
Lucyjungz 3:6e08d0bba1bb 332 * @brief Function to log Mini RMS System Data
Lucyjungz 3:6e08d0bba1bb 333 * @note this file is only for debug
Lucyjungz 3:6e08d0bba1bb 334 * @param gps_interval -
Lucyjungz 3:6e08d0bba1bb 335 * @retval None
Lucyjungz 3:6e08d0bba1bb 336 */
Lucyjungz 4:ec62bf823914 337 void FileManager_LogSystemData(float gps_interval)
Lucyjungz 3:6e08d0bba1bb 338 {
Lucyjungz 3:6e08d0bba1bb 339 /* Open the file in append mode */
Lucyjungz 3:6e08d0bba1bb 340 FILE *fp = fopen(MINIRMS_LOG_FILE_NAME, "a");
Lucyjungz 3:6e08d0bba1bb 341
Lucyjungz 3:6e08d0bba1bb 342 if (fp == NULL) {
Lucyjungz 3:6e08d0bba1bb 343 /* In case of error, print the msg */
Lucyjungz 3:6e08d0bba1bb 344 printf("Error! Unable to open file!\n");
Lucyjungz 11:e21d4c5bfd1b 345
Lucyjungz 11:e21d4c5bfd1b 346 /* Indicate LED Status (OFF)*/
Lucyjungz 11:e21d4c5bfd1b 347 FileManager_SetLedStatus(false);
Lucyjungz 3:6e08d0bba1bb 348 }
Lucyjungz 3:6e08d0bba1bb 349 else
Lucyjungz 3:6e08d0bba1bb 350 {
Lucyjungz 11:e21d4c5bfd1b 351 /* Indicate LED Status (ON)*/
Lucyjungz 11:e21d4c5bfd1b 352 FileManager_SetLedStatus(true);
Lucyjungz 11:e21d4c5bfd1b 353
Lucyjungz 3:6e08d0bba1bb 354 /* Write some message, which is TBD */
Lucyjungz 3:6e08d0bba1bb 355 fprintf(fp, "\nStart Mini-RMS System with Gps Interval = %f",gps_interval);
Lucyjungz 1:1f1f2b99756b 356 fclose(fp); // ensure you close the file after writing
Lucyjungz 1:1f1f2b99756b 357 }
Lucyjungz 1:1f1f2b99756b 358 }
Lucyjungz 3:6e08d0bba1bb 359 /**
Lucyjungz 3:6e08d0bba1bb 360 * @brief Utility to delete file
Lucyjungz 3:6e08d0bba1bb 361 * @note
Lucyjungz 3:6e08d0bba1bb 362 * @param filename - file name to be deleted
Lucyjungz 3:6e08d0bba1bb 363 * @retval None
Lucyjungz 3:6e08d0bba1bb 364 */
Lucyjungz 4:ec62bf823914 365 void FileManager_Deletefile(char filename[])
nsrwsurasak 0:a27e0d3581d1 366 {
nsrwsurasak 0:a27e0d3581d1 367 printf("Deleting file '%s'...",filename);
nsrwsurasak 0:a27e0d3581d1 368 FILE *fp = fopen(filename, "r"); // try and open file
nsrwsurasak 0:a27e0d3581d1 369 if (fp != NULL) { // if it does open...
nsrwsurasak 0:a27e0d3581d1 370 fclose(fp); // close it
nsrwsurasak 0:a27e0d3581d1 371 remove(filename); // and then delete
nsrwsurasak 0:a27e0d3581d1 372 printf("Done!\n");
nsrwsurasak 0:a27e0d3581d1 373 }
nsrwsurasak 0:a27e0d3581d1 374 // if we can't open it, it doesn't exist and so we can't delete it
nsrwsurasak 0:a27e0d3581d1 375 }
Lucyjungz 3:6e08d0bba1bb 376 /**
Lucyjungz 3:6e08d0bba1bb 377 * @brief Utility to check file available
Lucyjungz 3:6e08d0bba1bb 378 * @note
Lucyjungz 3:6e08d0bba1bb 379 * @param filename - file name to be checked
Lucyjungz 3:6e08d0bba1bb 380 * @retval true - file is exist , false - file is not exist
Lucyjungz 3:6e08d0bba1bb 381 */
Lucyjungz 4:ec62bf823914 382 bool FileManager_IsFileExist(char filename[])
Lucyjungz 1:1f1f2b99756b 383 {
Lucyjungz 1:1f1f2b99756b 384 bool exist = false;
Lucyjungz 1:1f1f2b99756b 385 FILE *fp = fopen(filename, "r"); // try and open file
Lucyjungz 1:1f1f2b99756b 386 if (fp != NULL) { // if it does open...
Lucyjungz 1:1f1f2b99756b 387 fclose(fp); // close it
Lucyjungz 1:1f1f2b99756b 388 exist = true;
Lucyjungz 1:1f1f2b99756b 389 }
Lucyjungz 1:1f1f2b99756b 390
Lucyjungz 1:1f1f2b99756b 391 return exist;
Lucyjungz 1:1f1f2b99756b 392 }
Lucyjungz 3:6e08d0bba1bb 393 /**
Lucyjungz 3:6e08d0bba1bb 394 * @brief Utility to get GPS Interval
Lucyjungz 3:6e08d0bba1bb 395 * @note must be after read the setup file
Lucyjungz 3:6e08d0bba1bb 396 * @param None
Lucyjungz 3:6e08d0bba1bb 397 * @retval GPS interval
Lucyjungz 3:6e08d0bba1bb 398 */
Lucyjungz 4:ec62bf823914 399 int FileManager_GPSInterval()
nsrwsurasak 0:a27e0d3581d1 400 {
Lucyjungz 3:6e08d0bba1bb 401 /* Return interval in int */
nsrwsurasak 0:a27e0d3581d1 402 return atoi( m_GpsInterval );
nsrwsurasak 0:a27e0d3581d1 403 }
Lucyjungz 3:6e08d0bba1bb 404 /**
Lucyjungz 3:6e08d0bba1bb 405 * @brief Utility to get Data Interval
Lucyjungz 3:6e08d0bba1bb 406 * @note must be after read the setup file
Lucyjungz 3:6e08d0bba1bb 407 * @param None
Lucyjungz 3:6e08d0bba1bb 408 * @retval Data interval
Lucyjungz 3:6e08d0bba1bb 409 */
Lucyjungz 4:ec62bf823914 410 int FileManager_DataInterval()
nsrwsurasak 0:a27e0d3581d1 411 {
Lucyjungz 3:6e08d0bba1bb 412 /* Return interval in int */
nsrwsurasak 0:a27e0d3581d1 413 return atoi( m_DataInterval );
nsrwsurasak 0:a27e0d3581d1 414 }
Lucyjungz 3:6e08d0bba1bb 415 /**
Lucyjungz 3:6e08d0bba1bb 416 * @brief Function to read the variable list file
Lucyjungz 3:6e08d0bba1bb 417 * @note Recommended to call this function at initilization phase
Lucyjungz 3:6e08d0bba1bb 418 * @param None
Lucyjungz 3:6e08d0bba1bb 419 * @retval pointer to variable list
Lucyjungz 3:6e08d0bba1bb 420 */
Lucyjungz 4:ec62bf823914 421 Variable_Data_TypeDef * FileManager_ReadVarFile()
nsrwsurasak 0:a27e0d3581d1 422 {
Lucyjungz 3:6e08d0bba1bb 423 /* Open the file with reading mode */
nsrwsurasak 0:a27e0d3581d1 424 FILE *fp = fopen(VARIABLE_FILE_NAME, "r");
nsrwsurasak 0:a27e0d3581d1 425
Lucyjungz 3:6e08d0bba1bb 426 if (fp == NULL)
Lucyjungz 3:6e08d0bba1bb 427 {
Lucyjungz 3:6e08d0bba1bb 428 /* if it can't open the file then print error message */
nsrwsurasak 0:a27e0d3581d1 429 printf("\nError! Unable to open file! %s \n", VARIABLE_FILE_NAME);
Lucyjungz 11:e21d4c5bfd1b 430 /* Indicate LED Status (OFF)*/
Lucyjungz 11:e21d4c5bfd1b 431 FileManager_SetLedStatus(false);
Lucyjungz 11:e21d4c5bfd1b 432
nsrwsurasak 0:a27e0d3581d1 433 return NULL;
Lucyjungz 3:6e08d0bba1bb 434 }
Lucyjungz 3:6e08d0bba1bb 435 else
Lucyjungz 3:6e08d0bba1bb 436 {
Lucyjungz 11:e21d4c5bfd1b 437 /* Indicate LED Status (ON)*/
Lucyjungz 11:e21d4c5bfd1b 438 FileManager_SetLedStatus(true);
nsrwsurasak 0:a27e0d3581d1 439
Lucyjungz 3:6e08d0bba1bb 440 /* Allocate buffer for reading */
nsrwsurasak 0:a27e0d3581d1 441 char buf[1024];
nsrwsurasak 0:a27e0d3581d1 442 int index = 0;
Lucyjungz 3:6e08d0bba1bb 443
Lucyjungz 3:6e08d0bba1bb 444 /* Initialize return value */
nsrwsurasak 0:a27e0d3581d1 445 memset(m_varList, ' ', sizeof(m_varList));
Lucyjungz 3:6e08d0bba1bb 446
Lucyjungz 3:6e08d0bba1bb 447 /* Read line from the file */
Lucyjungz 3:6e08d0bba1bb 448 while (fgets(buf, sizeof(buf), fp) != NULL)
Lucyjungz 3:6e08d0bba1bb 449 {
Lucyjungz 3:6e08d0bba1bb 450 /* Check the TAG */
Lucyjungz 3:6e08d0bba1bb 451 if (strstr (buf,VAR_NAME_TAG))
Lucyjungz 3:6e08d0bba1bb 452 {
Lucyjungz 3:6e08d0bba1bb 453 /* Found variable TAG, populate it*/
Lucyjungz 4:ec62bf823914 454 FileManager_GetXmlText(buf , m_varList[index].varName);
Lucyjungz 3:6e08d0bba1bb 455 }
Lucyjungz 3:6e08d0bba1bb 456 else if (strstr (buf,VAR_ADDR_TAG))
Lucyjungz 3:6e08d0bba1bb 457 {
Lucyjungz 3:6e08d0bba1bb 458 /* Found variable address TAG, populate it*/
Lucyjungz 4:ec62bf823914 459 FileManager_GetXmlText(buf , m_varList[index].varAddress);
Lucyjungz 5:7c513eee7b2b 460 }
Lucyjungz 10:a8003d357cf2 461 else if (strstr (buf,VAR_TYPE_TAG))
Lucyjungz 10:a8003d357cf2 462 {
Lucyjungz 10:a8003d357cf2 463 /* Found variable type TAG, populate it*/
Lucyjungz 10:a8003d357cf2 464 FileManager_GetXmlText(buf , m_varList[index].varType);
Lucyjungz 10:a8003d357cf2 465 }
Lucyjungz 6:5bd75c0f607c 466 else if (strstr (buf,VAR_LSB1_TAG))
Lucyjungz 6:5bd75c0f607c 467 {
Lucyjungz 6:5bd75c0f607c 468 /* Found variable LSB1 TAG, populate it*/
Lucyjungz 6:5bd75c0f607c 469 FileManager_GetXmlText(buf , m_varList[index].varLSB1);
Lucyjungz 6:5bd75c0f607c 470 }
Lucyjungz 6:5bd75c0f607c 471 else if (strstr (buf,VAR_LSB2_TAG))
Lucyjungz 5:7c513eee7b2b 472 {
Lucyjungz 6:5bd75c0f607c 473 /* Found variable LSB2 TAG, populate it*/
Lucyjungz 6:5bd75c0f607c 474 FileManager_GetXmlText(buf , m_varList[index].varLSB2);
Lucyjungz 6:5bd75c0f607c 475 }
Lucyjungz 6:5bd75c0f607c 476 else if (strstr (buf,VAR_BITMASK_TAG))
Lucyjungz 6:5bd75c0f607c 477 {
Lucyjungz 6:5bd75c0f607c 478 /* Found variable BitMask TAG, populate it*/
Lucyjungz 6:5bd75c0f607c 479 FileManager_GetXmlText(buf , m_varList[index].varBitMask);
Lucyjungz 5:7c513eee7b2b 480 }
Lucyjungz 5:7c513eee7b2b 481 else if (strstr (buf,VAR_UNIT_TAG))
Lucyjungz 5:7c513eee7b2b 482 {
Lucyjungz 5:7c513eee7b2b 483 /* Found variable unit TAG, populate it*/
Lucyjungz 5:7c513eee7b2b 484 FileManager_GetXmlText(buf , m_varList[index].varUnit);
nsrwsurasak 0:a27e0d3581d1 485 index++;
nsrwsurasak 0:a27e0d3581d1 486 }
nsrwsurasak 0:a27e0d3581d1 487
nsrwsurasak 0:a27e0d3581d1 488 }
Lucyjungz 3:6e08d0bba1bb 489 /* Close File */
Lucyjungz 3:6e08d0bba1bb 490 fclose(fp);
Lucyjungz 3:6e08d0bba1bb 491
Lucyjungz 3:6e08d0bba1bb 492 /* Populate amount */
nsrwsurasak 0:a27e0d3581d1 493 m_amountVarList = index;
Lucyjungz 3:6e08d0bba1bb 494
Lucyjungz 3:6e08d0bba1bb 495 /* Return variable list */
nsrwsurasak 0:a27e0d3581d1 496 return m_varList;
nsrwsurasak 0:a27e0d3581d1 497 }
nsrwsurasak 0:a27e0d3581d1 498 }
Lucyjungz 3:6e08d0bba1bb 499 /**
Lucyjungz 3:6e08d0bba1bb 500 * @brief Function to amount of variable for data logging
Lucyjungz 3:6e08d0bba1bb 501 * @note Must be called after readVarFile
Lucyjungz 3:6e08d0bba1bb 502 * @param None
Lucyjungz 3:6e08d0bba1bb 503 * @retval amount of variable list
Lucyjungz 3:6e08d0bba1bb 504 */
Lucyjungz 4:ec62bf823914 505 int FileManager_GetAmountVarList()
nsrwsurasak 0:a27e0d3581d1 506 {
nsrwsurasak 0:a27e0d3581d1 507 return m_amountVarList;
nsrwsurasak 0:a27e0d3581d1 508 }
Lucyjungz 3:6e08d0bba1bb 509 /**
Lucyjungz 3:6e08d0bba1bb 510 * @brief Function to get variable list
Lucyjungz 3:6e08d0bba1bb 511 * @note Must be called after readVarFile
Lucyjungz 3:6e08d0bba1bb 512 * @param None
Lucyjungz 3:6e08d0bba1bb 513 * @retval pointer to variable list
Lucyjungz 3:6e08d0bba1bb 514 */
Lucyjungz 4:ec62bf823914 515 Variable_Data_TypeDef * FileManager_GetVarList()
nsrwsurasak 0:a27e0d3581d1 516 {
nsrwsurasak 0:a27e0d3581d1 517 return m_varList;
nsrwsurasak 0:a27e0d3581d1 518 }
Lucyjungz 11:e21d4c5bfd1b 519 /**
Lucyjungz 11:e21d4c5bfd1b 520 * @brief Utility to play with LED status
Lucyjungz 11:e21d4c5bfd1b 521 * @note Libary user need to assign proper PinName to LED_SDCARD
Lucyjungz 11:e21d4c5bfd1b 522 * @param on - True for turning LED ON, otherwise LED off
Lucyjungz 11:e21d4c5bfd1b 523 * @retval None
Lucyjungz 11:e21d4c5bfd1b 524 */
Lucyjungz 11:e21d4c5bfd1b 525 static void FileManager_SetLedStatus(bool on)
Lucyjungz 11:e21d4c5bfd1b 526 {
Lucyjungz 12:0045fca3c160 527 /* Check LED Connection */
Lucyjungz 11:e21d4c5bfd1b 528 if (ledStatus.is_connected())
Lucyjungz 11:e21d4c5bfd1b 529 {
Lucyjungz 12:0045fca3c160 530 /* Set LED regarding to given argment */
Lucyjungz 11:e21d4c5bfd1b 531 ledStatus = on;
Lucyjungz 12:0045fca3c160 532 }
Lucyjungz 12:0045fca3c160 533 #if DEBUG
Lucyjungz 12:0045fca3c160 534 else
Lucyjungz 12:0045fca3c160 535 {
Lucyjungz 12:0045fca3c160 536 printf("\r\nSDCard LED is connected !!");
Lucyjungz 12:0045fca3c160 537 }
Lucyjungz 12:0045fca3c160 538 #endif
Lucyjungz 11:e21d4c5bfd1b 539 }
nsrwsurasak 0:a27e0d3581d1 540