teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Revision:
10:263c093f8977
Parent:
9:cf406384efd9
Child:
11:631bea162800
--- a/funcoesSDCard.cpp	Wed Aug 09 20:38:10 2017 +0000
+++ b/funcoesSDCard.cpp	Mon Aug 14 13:59:27 2017 +0000
@@ -1,12 +1,15 @@
 #include "funcoesSDCard.h"
 #include "serialPC.h"
 
-arquivoSD sdCard::envio;
-arquivoSD sdCard::armazenamento;
+
+arquivoSD sdCard::bank0;
+arquivoSD sdCard::bank1;
+arquivoSD sdCard::currentBankFile;
 arquivoSD sdCard::config;
 arquivoSD sdCard::devices;
 arquivoSD sdCard::status;
 arquivoSD sdCard::tempFile;
+uint8_t sdCard::currentBank;
 bool sdCard::arquivosAbertos=false;
 
 char sdCard::nomeArquivoEmRecebimento[30];
@@ -26,7 +29,7 @@
     }
     if(arquivo->aberto){return false;}
     */
-    if(!sdCard::arquivoAberto(15000)){return false;}    
+    //if(!sdCard::arquivoAberto(15000)){return false;}    
     
     //pc.printf("Abrindo um arquivo de nome <%s> em modo <%s>.\r\n",arquivo->nome,mode);
     
@@ -73,6 +76,98 @@
     return true;
 }*/
 
+uint8_t sdCard::verificaCurrentBank(void){
+    uint8_t currentBank = 3;
+    if(sdCard::abreArquivo(&sdCard::currentBankFile,"r")){            
+        pc.printf("sdCard::verificaCurrentBank[1]\r\n");        
+    }else{
+        pc.printf("sdCard::verificaCurrentBank[2]\r\n");
+        //Criando bank 0
+        if(sdCard::abreArquivo(&sdCard::bank0,"w")){
+            sdCard::fechaArquivo(&sdCard::bank0);
+        }else{
+            pc.printf("sdCard::verificaCurrentBank[3]\r\n");
+            return 2;
+         }
+        //Criando bank 1
+        if(sdCard::abreArquivo(&sdCard::bank1,"w")){
+            sdCard::fechaArquivo(&sdCard::bank1);
+        }else{
+            pc.printf("sdCard::verificaCurrentBank[4]\r\n");
+            return 2;
+         }
+        //Criando currentBank
+        if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){            
+            fputc('0',sdCard::currentBankFile.fp);
+            fflush(sdCard::currentBankFile.fp);
+            sdCard::fechaArquivo(&sdCard::currentBankFile);
+            currentBank = 0;
+        }else{            
+            pc.printf("sdCard::verificaCurrentBank[5]\r\n");
+            return 2;
+         }
+     }
+    
+    if(currentBank==3){
+        pc.printf("sdCard::verificaCurrentBank[6]\r\n");
+        currentBank = fgetc(sdCard::currentBankFile.fp);
+        currentBank = currentBank - 48;
+    }
+    pc.printf("sdCard::verificaCurrentBank[7]\r\n");
+    sdCard::fechaArquivo(&sdCard::currentBankFile);
+    pc.printf("sdCard::verificaCurrentBank[8]\r\n");    
+    return currentBank;
+}
+
+uint8_t sdCard::modificaCurrentBank(uint8_t newCurrentBank){
+    uint8_t currentBank = sdCard::verificaCurrentBank();
+    if(currentBank == newCurrentBank){
+        return 1;    
+    }else{
+        sdCard:excluiArquivo(&sdCard::currentBankFile);
+        if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){
+            if(newCurrentBank){fputc('1',sdCard::currentBankFile.fp);fflush(sdCard::currentBankFile.fp);}
+            else{fputc('0',sdCard::currentBankFile.fp);fflush(sdCard::currentBankFile.fp);}
+            sdCard::fechaArquivo(&sdCard::currentBankFile);
+        }else{
+            return 2;   
+         }
+     }
+    return 1;
+}
+
+bool sdCard::insereDadosBank(char* data,uint16_t tam){
+    //Struct do arquivo, dados a inserir e tamanho deles    
+    uint16_t i;
+    arquivoSD *arquivo;    
+    sdCard::currentBank = verificaCurrentBank();
+    if(sdCard::currentBank == 2){
+        pc.printf("sdCard::insereDadosBank[1]\r\n");
+        return false;
+    }
+    
+    if(sdCard::currentBank){
+        arquivo = &sdCard::bank1;
+    }else{
+        arquivo = &sdCard::bank0;
+     }
+    
+    if(!sdCard::abreArquivo(arquivo,"a")){    
+        sdCard::fechaArquivo(arquivo);
+        pc.printf("sdCard::insereDadosBank[2]\r\n");
+        return false;        
+    }
+    
+    for(i=0;i<tam;i++){
+        //fprintf(arquivo->fp,"%c",data[i]);
+        fputc(data[i],arquivo->fp);
+        fflush(arquivo->fp);    
+    }    
+    sdCard::fechaArquivo(arquivo);
+    pc.printf("sdCard::insereDadosBank[3]\r\n");
+    return true;
+}
+
 bool sdCard::insereDadosArquivo(arquivoSD *arquivo, char* data,uint16_t tam){
     //Struct do arquivo, dados a inserir e tamanho deles    
     uint16_t i;
@@ -97,7 +192,7 @@
     return true;    
 }
 
-bool sdCard::excluiArquivo(arquivoSD *arquivo){    
+bool sdCard::excluiArquivo(arquivoSD *arquivo){
     if(arquivo->aberto){
         if(!sdCard::fechaArquivo(arquivo)){return false;}
     }
@@ -127,76 +222,61 @@
 int sdCard::init(){
     //Inicializando SDCard         
     
-    strcpy(sdCard::envio.nome,"/sd/RAD/envio.txt");
-    strcpy(sdCard::armazenamento.nome,"/sd/RAD/armazenamento.txt");
+    strcpy(sdCard::bank0.nome,"/sd/RAD/bank0.txt");
+    strcpy(sdCard::bank1.nome,"/sd/RAD/bank1.txt");
+    strcpy(sdCard::currentBankFile.nome,"/sd/RAD/currentBank.txt");    
     strcpy(sdCard::config.nome,"/sd/RAD/config.bin");    
     strcpy(sdCard::devices.nome,"/sd/RAD/devices.cfg");
     strcpy(sdCard::status.nome,"/sd/RAD/status.txt");
-    strcpy(sdCard::tempFile.nome,"/sd/RAD/tempFile.bin");
+    strcpy(sdCard::tempFile.nome,"/sd/RAD/tempFile.bin");        
     
-    /*if(!sdCard::abreArquivo(&sdCard::config,"r")){
-        //Não foi encontrado o arquivo config.bin, então vou criar o diretório        
-        pc.printf("Nao foi encontrado o arquivo config.bin .\n");        
-        //Criando o diretorio
-        pc.printf("Criando diretorio e arquivo config.bin .\n");
-        mkdir("/sd/RAD", 0777);
-        
-        if(sdCard::abreArquivo(&sdCard::config,"w")){
-         //Fazer o arquivo de configuração aqui!
-         pc.printf("Criado arquivo config.bin .\n");
-         fprintf(sdCard::config.fp,"SSID:DROME\r\nPASSWORD:VITAE\r\nPORT:80");
-         
-        }        
-    }   
-    //Fechando arquivo de configuração;
-    fechaArquivo(&sdCard::config);    
-    */
     if(!sdCard::abreArquivo(&sdCard::devices,"r")){
         pc.printf("Remota nao parametrizada!!!\n");    
     }else{
         fechaArquivo(&sdCard::devices);   
-     }    
+     }
+    sdCard::currentBank = sdCard::verificaCurrentBank();
     return 1;
 }
 
+bool sdCard::deleteBanks(uint8_t bank){
+    switch(bank){
+        case 0:
+                sdCard::excluiArquivo(&sdCard::bank0);
+                sdCard::abreArquivo(&sdCard::bank0,"w");
+                sdCard::fechaArquivo(&sdCard::bank0);
+            break;
+        case 1:
+                sdCard::excluiArquivo(&sdCard::bank1);
+                sdCard::abreArquivo(&sdCard::bank1,"w");
+                sdCard::fechaArquivo(&sdCard::bank1);
+            break;
+        case 2:
+                sdCard::excluiArquivo(&sdCard::bank0);
+                sdCard::abreArquivo(&sdCard::bank0,"w");
+                sdCard::fechaArquivo(&sdCard::bank0);
+                sdCard::excluiArquivo(&sdCard::bank1);
+                sdCard::abreArquivo(&sdCard::bank1,"w");
+                sdCard::fechaArquivo(&sdCard::bank1);    
+                sdCard::excluiArquivo(&sdCard::currentBankFile);
+                if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){
+                    fputc('0',sdCard::currentBankFile.fp);
+                    fflush(sdCard::currentBankFile.fp);
+                    sdCard::fechaArquivo(&sdCard::currentBankFile);
+                }    
+            break;    
+    }
+    return true;
+}
+
 int sdCard::preparaEnvio(void){         
     //Verifico se existe arquivo pendente de envio.    
-    if(!sdCard::arquivoAberto(5000)){return 2;}
-    
-    if(abreArquivo(&sdCard::envio,"r")){     
-     pc.printf("Tem um arquivo pendente de envio.\n");     
-     fechaArquivo(&sdCard::envio);          
-     return 1;
-    }    
-    
-    sdCard::getFileTam(&sdCard::armazenamento);
-    if(armazenamento.bytes>46080){
-        sdCard::excluiArquivo(&sdCard::armazenamento);        
-    }
-    
+    //if(!sdCard::arquivoAberto(5000)){return 2;}    
     //Incluindo o status no envio    
-    modemCom::writeStatusToSD(); 
-    
-    if(sdCard::abreArquivo(&sdCard::armazenamento,"r")){
-        sdCard::fechaArquivo(&sdCard::armazenamento);    
-    }else{
-        pc.printf("Nao foi encontrado arquivo de armazenamento em preparaEnvio.\n");
-        return 0;   
-     }     
-    
-    if(!sdCard::file_rename("/sd/RAD/armazenamento.txt","/sd/RAD/envio.txt")){
-        pc.printf("Nao foi possivel renomear arquivo para envio.\n");        
-        return 0;
-    }
+    modemCom::writeStatusToSD();    
     return 1;
 }
 
-void sdCard::finalizaEnvio(void){    
-    if(sdCard::envio.aberto){fclose(sdCard::envio.fp);}
-    remove(sdCard::envio.nome);  
-    pc.printf("Deletado o arquivo de envio apos envio do mesmo ao server.\n");  
-}
-
 bool sdCard::getFileTam(arquivoSD *arquivo){
     uint32_t tam=0;        
     uint8_t timeOut = timeOutArquivoAberto;
@@ -220,7 +300,7 @@
 
 bool sdCard::arquivoAberto(uint16_t timeOut){
     while(
-    (sdCard::envio.aberto||sdCard::armazenamento.aberto||sdCard::config.aberto||sdCard::devices.aberto||sdCard::status.aberto||sdCard::tempFile.aberto||sdCard::arquivosAbertos)
+    (sdCard::bank0.aberto||sdCard::bank1.aberto||sdCard::currentBankFile.aberto||sdCard::config.aberto||sdCard::devices.aberto||sdCard::status.aberto||sdCard::tempFile.aberto||sdCard::arquivosAbertos)
     &&
     timeOut){
      timeOut--;
@@ -290,12 +370,17 @@
     return (retval);
 }*/
 
+
+
 //***********************************************************
 // file_rename: renames a file (via copy & delete).
 //    Moves data instead of adjusting the file name in the
 //    file directory. Checks to insure the file was renamed.
 //    Returns 0 = error; 1 = success
 //***********************************************************
+
+
+
 uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) {    
     //rename(oldfname,newfname);
     #define maxTamFileCopy 128
@@ -305,12 +390,8 @@
     uint32_t fileNumParts = 0;
     uint32_t fileEnding=0;
     char ch;
-    uint32_t i,j;
-    sdCard::envio.bytes=0;    
-    
-    if(!sdCard::arquivoAberto(30000)){return false;}
-    
-    
+    uint32_t i,j;    
+    if(!sdCard::arquivoAberto(30000)){return false;}    
     FILE *fpold = fopen(oldfname, "r");   // src file
     
     if(fpold == NULL){        
@@ -334,9 +415,8 @@
     
     fseek(fpold, 0, SEEK_END); // seek to end of file
     fileSize = ftell(fpold);       // get current file pointer
-    fseek(fpold, 0, SEEK_SET); // seek back to beginning of file
+    fseek(fpold, 0, SEEK_SET); // seek back to beginning of file    
     
-    sdCard::envio.bytes=0;
     
     fileNumParts = fileSize/maxTamFileCopy;
     fileEnding = fileSize%maxTamFileCopy;