Bruno Cavalcanti / Mbed 2 deprecated brunoDrome

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Revision:
7:ae9c47f62946
Parent:
2:55b7b466e742
Child:
9:cf406384efd9
--- a/funcoesSDCard.cpp	Thu Jun 15 12:50:58 2017 +0000
+++ b/funcoesSDCard.cpp	Tue Jul 11 11:55:56 2017 +0000
@@ -7,6 +7,7 @@
 arquivoSD sdCard::devices;
 arquivoSD sdCard::status;
 arquivoSD sdCard::tempFile;
+bool sdCard::arquivosAbertos=false;
 
 char sdCard::nomeArquivoEmRecebimento[30];
 
@@ -18,12 +19,17 @@
 
 bool sdCard::abreArquivo(arquivoSD *arquivo,char *mode){
     //Struct do arquivo e seu nome
-    if(arquivo->aberto){
-        if(!fclose(arquivo->fp)){
-            return false;    
-        }
+    /*uint32_t timeOut=30000;
+    while(timeOut && arquivo->aberto){
+        timeOut--; 
+        osDelay(1);
     }
-     
+    if(arquivo->aberto){return false;}
+    */
+    if(!sdCard::arquivoAberto(15000)){return false;}    
+    
+    //pc.printf("Abrindo um arquivo de nome <%s> em modo <%s>.\r\n",arquivo->nome,mode);
+    
     //pc.printf("Abrindo arquivo <%s>.\n",arquivo->nome);
     if((arquivo->fp = fopen(arquivo->nome,mode))!=NULL){
         arquivo->aberto = true;    
@@ -49,39 +55,39 @@
     return sum;
 }
 
-bool sdCard::insereDadosArquivoPeloNome(char *nome, char *dados,uint16_t tam){
+/*bool sdCard::insereDadosArquivoPeloNome(char *nome, char *dados,uint16_t tam){
     FILE *fp;
     fp = fopen(nome,"a");
     uint16_t i;
     if(fp!=NULL){
+        sdCard::arquivoAberto = true;
         for(i=0;i<tam;i++){
             fprintf(fp,"%c",dados[i]);
             fflush(fp);    
         }
         fclose(fp);
+        sdCard::arquivoAberto = false;
     }else{
         return false;  
      }    
     return true;
-}
+}*/
 
 bool sdCard::insereDadosArquivo(arquivoSD *arquivo, char* data,uint16_t tam){
     //Struct do arquivo, dados a inserir e tamanho deles    
-    uint16_t i;    
-    
-    if(!sdCard::abreArquivo(arquivo,"a")){
-        pc.printf("Erro abrindo %s .\n",arquivo->nome);
-        if(!sdCard::fechaArquivo(arquivo)){
-            return false;    
-        }        
+    uint16_t i;
+    if(!sdCard::abreArquivo(arquivo,"a")){    
+        sdCard::fechaArquivo(arquivo);    
+        return false;        
     }
     
     for(i=0;i<tam;i++){
-        fprintf(arquivo->fp,"%c",data[i]);
+        //fprintf(arquivo->fp,"%c",data[i]);
+        fputc(data[i],arquivo->fp);
         fflush(arquivo->fp);    
-    }
+    }    
+    sdCard::fechaArquivo(arquivo); 
     
-    sdCard::fechaArquivo(arquivo);
     return true;
 }
 bool sdCard::fechaArquivo(arquivoSD* arquivo){
@@ -91,23 +97,22 @@
     return true;    
 }
 
-bool sdCard::excluiArquivo(arquivoSD *arquivo){
-    bool retorno = true;
+bool sdCard::excluiArquivo(arquivoSD *arquivo){    
     if(arquivo->aberto){
-        if(!sdCard::fechaArquivo(arquivo)){retorno = false;}
+        if(!sdCard::fechaArquivo(arquivo)){return false;}
     }
-    if(!remove(arquivo->nome)){retorno = false;}
-    return retorno;
+    if(!remove(arquivo->nome)){return false;}
+    return true;
 }
 
 bool sdCard::exibeArquivo(arquivoSD *arquivo){
+    char c;    
+    if(!sdCard::arquivoAberto(2000)){return false;}
     
     if(!sdCard::abreArquivo(arquivo,"r")){
         return false;
-    }
+    }   
     
-    //rewind(arquivo->fp);
-    char c;
     pc.printf("\n\nInicio do arquivo %s.\n\n",arquivo->nome);
     
     do{
@@ -129,10 +134,7 @@
     strcpy(sdCard::status.nome,"/sd/RAD/status.txt");
     strcpy(sdCard::tempFile.nome,"/sd/RAD/tempFile.bin");
     
-    
-    
-    
-    if(!sdCard::abreArquivo(&sdCard::config,"r")){
+    /*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
@@ -148,6 +150,7 @@
     }   
     //Fechando arquivo de configuração;
     fechaArquivo(&sdCard::config);    
+    */
     if(!sdCard::abreArquivo(&sdCard::devices,"r")){
         pc.printf("Remota nao parametrizada!!!\n");    
     }else{
@@ -157,12 +160,8 @@
 }
 
 int sdCard::preparaEnvio(void){         
-    //Verifico se existe arquivo pendente de envio.
-    if(sdCard::envio.aberto||sdCard::armazenamento.aberto){        
-        pc.printf("Um dos dois arquivos esta aberto. envio = %u, armazenamento = %u.\n",sdCard::envio.aberto,sdCard::armazenamento.aberto);             
-        return 2;
-    }    
-    
+    //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");     
@@ -170,29 +169,20 @@
      return 1;
     }    
     
+    //Incluindo o status no envio    
+    modemCom::writeStatusToSD(); 
+    
     if(sdCard::abreArquivo(&sdCard::armazenamento,"r")){
         sdCard::fechaArquivo(&sdCard::armazenamento);    
     }else{
-        pc.printf("Nao foi encontrado o arquivo de armazenamento em preparaEnvio.\n");
-        //return 0;   
-     }    
-    
-    //Incluindo o status no envio
-    modemCom::writeStatusToSD();
-    
-    sdCard::armazenamento.aberto = true;
-    sdCard::envio.aberto = true;
+        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");
-        sdCard::armazenamento.aberto = false;
-        sdCard::envio.aberto = false;
+        pc.printf("Nao foi possivel renomear arquivo para envio.\n");        
         return 0;
-    }    
-    
-    sdCard::armazenamento.aberto = false;
-    sdCard::envio.aberto = false;
-    pc.printf("Renomeado.\n");        
+    }
     return 1;
 }
 
@@ -204,22 +194,14 @@
 
 bool sdCard::getFileTam(arquivoSD *arquivo){
     uint32_t tam=0;        
-    uint8_t timeout = 50;
-    while((timeout>0)&&(arquivo->aberto)){
-        //Aguardo fechar o arquivo caso ele esteja aberto
-        timeout--;
-        osDelay(100);
-    }
+    uint8_t timeOut = timeOutArquivoAberto;
+    if(!sdCard::arquivoAberto(5000)){return false;}
     
     if(arquivo->aberto){
         fechaArquivo(arquivo);
     }        
     
-    if(sdCard::abreArquivo(arquivo,"r")){    
-        /*rewind(arquivo->fp);
-        while(fgetc(arquivo->fp)!=EOF){
-         tam++;
-        }*/
+    if(sdCard::abreArquivo(arquivo,"r")){            
         fseek(arquivo->fp, 0, SEEK_END); // seek to end of file
         tam = ftell(arquivo->fp);       // get current file pointer
         fseek(arquivo->fp, 0, SEEK_SET); // seek back to beginning of file 
@@ -231,26 +213,17 @@
     return true;
 }
 
-bool sdCard::arquivoAberto(){
-/*extern arquivoSD envio;
- extern arquivoSD armazenamento;
- extern arquivoSD config;
- extern arquivoSD devices;
- extern arquivoSD status; 
- extern arquivoSD tempFile;*/
-    return (
-    sdCard::envio.aberto
-    ||
-    sdCard::armazenamento.aberto
-    ||
-    sdCard::config.aberto
-    ||
-    sdCard::devices.aberto
-    ||
-    sdCard::status.aberto
-    ||
-    sdCard::tempFile.aberto
-    );    
+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)
+    &&
+    timeOut){
+     timeOut--;
+     if((timeOut%1000)==0){pc.printf("Timeout em arquivoAberto()<%lu>.\r\n",timeOut);}
+     osDelay(1);           
+    }
+    if(timeOut){return true;}
+    else{return false;}
 }
 
 
@@ -260,20 +233,28 @@
 //    file directory. Checks to insure the file was renamed.
 //    Returns -1 = error; 0 = success
 //***********************************************************
-uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) {
+uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) {    
+    //rename(oldfname,newfname);
     int retval = 0;
     int ch;
-    sdCard::envio.bytes=0;
- 
+    sdCard::envio.bytes=0;    
+    
+    if(!sdCard::arquivoAberto(30000)){return false;}
+    
+    
     FILE *fpold = fopen(oldfname, "r");   // src file
+    
     if(fpold == NULL){
-        fclose(fpold);        
+        pc.printf("file_rename 4.\r\n");
+        fclose(fpold);
         return 0;    
     }    
     
     FILE *fpnew = fopen(newfname, "w");   // dest file
-    if(fpnew == NULL){        
-        fclose(fpnew);
+    
+    if(fpnew == NULL){      
+    
+        fclose(fpnew);        
         return 0;    
     }    
     
@@ -299,5 +280,7 @@
         remove(oldfname);         // Remove original file.
         retval = (1);             // Return Success.
     }
+    sdCard::arquivosAbertos=false;
+    pc.printf("file_rename retval <%lu>.\r\n",retval);
     return (retval);
 }