#ifndef ArchivoSD_define #define ArchivoSD_define 1 #include #include "utiles.h" #define TIMER_SMS_DATA 60000//cada 1 min #define TIMER_SMS_INFO 600000//cada 10 min #define TIMER_GPRS 60000//cada 1 min #define TIMER_SD 5000//cada 5S #define NLINEMAX 720 //numero max de lineas por archivo #define BUFFSIZE 250 #define BUFFSIZECOL 512 #define NCOLS 23 //numero de columnas del archivo #define NUM_INT 3 //numero de cifras enteras de los valores escritos #define NUM_DEC 3 //numero de cifras decimales de los valores escritos #define NUM_DEC_PREC 7 //numero de cifras decimales de los valores escritos con precision #define NUM_MAX_TLF 5 //numero maximo de telefonos en la configuracion /* Clase para manejo de archivo de log Valores por tiempos en cada fila, y dentro de cada fila, los valores separados por ; */ class ArchivoSD { int nLines; //para contar cuantas lineas lleva el archivo actual int nFiles; //para contar cuantos archivos lleva int iCol; //para contar por qué columna va char fileName[24]; char buff[BUFFSIZE]; char buffHeaders[BUFFSIZECOL]; int pin_sd_cs; public: bool falloSD; private: File file; public: char Timestamp[16]; ArchivoSD(int pinCS); bool init_(); /* Actualiza el nombre del archivo en funcion de cuantos archivos lleve, empieza en datalog0000.txt y acaba en datalog9999.txt Si se necesitan mas archivos, aumentar el 4 cifras a mas */ void updatefileName(); /* Escribe en el fichero los nombres a las cabeceras de las columnas */ void createColNames(); void writeColNames(); bool compruebaFile(); void openFile(); void closeFile(); /* Para escribir al archivo una columna con un valor decimal devuelve el buffer por si se quiere usar fuera */ void writeVal(float val_); /* Para escribir al archivo una columna con un valor decimal devuelve el buffer por si se quiere usar fuera */ void writeValPrec(float val_); /* Para escribir al archivo una columna con un valor entero devuelve el buffer por si se quiere usar fuera */ void writeVal(long unsigned int val_); /* Para escribir al archivo una columna con un valor de texto devuelve el buffer por si se quiere usar fuera */ void writeVal(char *val_); /* Despues de cada dato, escribe un ; o bien un caracter vacio si es el ultimo */ void endCol(); /* Escribe al archivo una linea entera */ void writeLine(char *line); /* Imprime el buff por el puerto com */ void printColCOM(); }; class DataConfig { public: char tlf[13]; bool infoSMS; bool dataSMS; DataConfig() {} }; class ArchivoConfig { DataConfig tlf[NUM_MAX_TLF]; char apn[32]; char srv[64]; int n; File file; public: ArchivoConfig(); char* GetTlfInfo(int i); char* GetTlfData(int i); char* GetAPN(); char* GetSRV(); int GetLen(); bool ini(); unsigned long TimerSD; unsigned long TimerGPRS; unsigned long TimerSMSData; unsigned long TimerSMSInfo; private: char* leeLinea(char*buf); void leeSRV(char* buf); void leeAPN(char* buf); void leetlf(char* buf); void leeTSMSD(char* buf); void leeTSMSI(char* buf); void leeTGPRS(char* buf); void leeTSD(char* buf); }; #endif