Surasak Nasuriwong / FileManager

Dependencies:   SDFileSystem

Dependents:   RwSDCard_Xml_GPS

FileManager.h

Committer:
Lucyjungz
Date:
2016-05-19
Revision:
14:4ba6147f067b
Parent:
11:e21d4c5bfd1b
Child:
15:b63a539c3754

File content as of revision 14:4ba6147f067b:

/**
  ******************************************************************************
  * @file    FileManager.h
  * @author  Narut T
  * @version V1
  * @date    19/05/2016
  * @brief   Header file for File Manager
  ******************************************************************************/
/* ###############  Constant Defination  ################## */

#define DEVICE_NAME             "sd"                        /*!< Device directory */                       

// DEVICE_NAME must be put in between "/" for file name 
#define SETUP_FILE_NAME         "/sd/RMS_Tester.xml"        /*!< Setup File Name */
#define GPS_LOG_FILE_NAME       "/sd/YYYY-MM-DD.gps.csv "   /*!< GPS Log File Name */
#define RTL_LOG_FILE_NAME       "/sd/YYYY-MM-DD.rtl.csv"    /*!< RMS Log File Name */
#define VARIABLE_FILE_NAME      "/sd/20160216185627_upload.xml" /*!< Mini RMS Log File Name */
#define MINIRMS_LOG_FILE_NAME   "/sd/miniRMS.log"

/** XML Tag */
#define GPS_TAG                 "<Gps>"                     /*!< GPS Tag */
#define DATA_TAG                "<Data>"                    /*!< Data Tag */
#define UPDATE_INTERVAL_TAG     "<Update_Interval>"         /*!< Update Internal Tag */
#define VAR_NAME_TAG            "<varName>"                 /*!< Variable Name Tag */
#define VAR_ADDR_TAG            "<varAddress>"              /*!< Variable Address Tag */
#define VAR_TYPE_TAG            "<varType>"                 /*!< Variable Type Tag */
#define VAR_LSB1_TAG            "<LSB1>"                    /*!< Variable LSB1 Tag */
#define VAR_LSB2_TAG            "<LSB2>"                    /*!< Variable LSB2 Tag */
#define VAR_BITMASK_TAG         "<BitMask>"                 /*!< Variable Bit Mask Tag */
#define VAR_UNIT_TAG            "<Unit>"                    /*!< Variable Unit Tag */

/** XML Text Size */
#define XMLTEXT_SIZE            20                          /*!< XML Text Maximum size */
#define VAR_NAME_MAX_SIZE       20                          /*!< Variable Name Maximum Size  */
#define VAR_ADDR_MAX_SIZE       10                          /*!< Variable Address Maximum Size  */
#define VAR_TYPE_MAX_SIZE       3                           /*!< Variable Type Maximum Size  */
#define VAR_LSB1_MAX_SIZE       3                           /*!< Variable LSB1 Maximum Size  */
#define VAR_LSB2_MAX_SIZE       10                          /*!< Variable LSB2 Maximum Size  */
#define VAR_BITMASK_MAX_SIZE    5                           /*!< Variable Bit Mask  Maximum Size  */
#define VAR_UNIT_MAX_SIZE       20                          /*!< Variable Unit Maximum Size  */

#define MAX_VAR                 50                          /*!< Maximum variable to be supported  */

#define RMS_HEADER_TIME         "Time"                      /*!< RMS Header Time tag  */
#define RMS_HEADER_MSECOND      "MSecond"                   /*!< RMS MSecond Time tag  */
#define READ_FILE_BUFFER_SIZE   1024                        /*!< Read file buffer size */
#define RENAME_FILE_BUFFER_SIZE 5                           /*!< Rename File buffer size */

/** Offset for /sd/YYYY-MM-DD-  string */
#define TIMESTAMP_YEAR_OFFSET   4                           /*!< Offset for year  */
#define TIMESTAMP_YEAR_SIZE     4                           /*!< Size for year  */
#define TIMESTAMP_MONTH_OFFSET  9                           /*!< Offset for month  */
#define TIMESTAMP_MONTH_SIZE    2                           /*!< Size for month  */
#define TIMESTAMP_DATE_OFFSET   12                          /*!< Offset for date  */
#define TIMESTAMP_DATE_SIZE     2                           /*!< Size for date  */
#define YEAR_4DIGITS_OFFSET     1900                        /*!< Offset to convert 2 digits year to 4 digits */


/* ###############  Enum  ################## */

/* Exported types ------------------------------------------------------------*/
/** @defgroup ReadingFileState Exported Types
  * @{
  */

/** 
  * @brief  Reading File State structures definition  
  */ 
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;


/* ###############  Structure   ################## */


/** 
  * @brief   Structure of Variable List File
  */ 
typedef struct {
    char varName[VAR_NAME_MAX_SIZE];                /*!< char array Variable Name */
    char varAddress[VAR_ADDR_MAX_SIZE+1];           /*!< char array Variable Address */
    char varType[VAR_TYPE_MAX_SIZE];                /*!< char array Variable Type */
    char varLSB1[VAR_LSB1_MAX_SIZE];                /*!< char array Variable LSB1 */
    char varLSB2[VAR_LSB2_MAX_SIZE];                /*!< char array Variable LSB2 */
    char varBitMask[VAR_BITMASK_MAX_SIZE];          /*!< char array Variable Bit Mask */
    char varUnit[VAR_UNIT_MAX_SIZE];                /*!< char array Variable Unit */
} Variable_Data_TypeDef;


/* ###############  Function Prototype  ################## */
void FILEMANAGER_ReadSetupFile();
void FILEMANAGER_DeleteFile(char filename[]);
int  FILEMANAGER_GPSInterval();
int  FILEMANAGER_DataInterval();
void FILEMANAGER_LogGPSData(time_t timestamp ,char lat[], char longti[]);
void FILEMANAGER_LogSystemData(float gps_interval);
Variable_Data_TypeDef * FILEMANAGER_ReadVarFile();
int FILEMANAGER_GetAmountVarList();
Variable_Data_TypeDef * FILEMANAGER_GetVarList();
void FILEMANAGER_LogRMSData(time_t timestamp ,float * var, int size);
void FILEMANAGER_LogRMSHeader(time_t timestamp);
bool FILEMANAGER_IsFileExist(char filename[]);
void FILEMANAGER_Init(void);