teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Revision:
13:b9183b4bc049
Parent:
11:631bea162800
Child:
14:c0162ab2a951
--- a/funcoesSDCard.cpp	Wed Aug 30 19:13:19 2017 +0000
+++ b/funcoesSDCard.cpp	Mon Oct 23 15:35:18 2017 +0000
@@ -9,6 +9,8 @@
 arquivoSD sdCard::devices;
 arquivoSD sdCard::status;
 arquivoSD sdCard::tempFile;
+arquivoSD sdCard::newFirmware;
+uint32_t sdCard::nBytesArquivoRecebidos;
 uint8_t sdCard::currentBank;
 uint8_t sdCard::currentBankSending;
 bool sdCard::arquivosAbertos=false;
@@ -82,44 +84,42 @@
         pc.printf("sdCard::verificaCurrentBank[1]\r\n");
         sdCard::currentBank = 3;
         sdCard::currentBankSending = 3;
-    }else{
         pc.printf("sdCard::verificaCurrentBank[2]\r\n");
+        sdCard::currentBank = fgetc(sdCard::currentBankFile.fp);
+        sdCard::currentBank = sdCard::currentBank - 48;
+        sdCard::currentBankSending = fgetc(sdCard::currentBankFile.fp);
+        sdCard::currentBankSending = sdCard::currentBankSending -48;
+        sdCard::fechaArquivo(&sdCard::currentBankFile);
+    }
+    if((sdCard::currentBankSending > 1)||(sdCard::currentBank > 1)){
+        pc.printf("sdCard::verificaCurrentBank[3]\r\n");
         //Criando bank 0
         if(sdCard::abreArquivo(&sdCard::bank0,"w")){
             sdCard::fechaArquivo(&sdCard::bank0);
         }else{
-            pc.printf("sdCard::verificaCurrentBank[3]\r\n");
+            pc.printf("sdCard::verificaCurrentBank[4]\r\n");
             return;
          }
         //Criando bank 1
         if(sdCard::abreArquivo(&sdCard::bank1,"w")){
             sdCard::fechaArquivo(&sdCard::bank1);
         }else{
-            pc.printf("sdCard::verificaCurrentBank[4]\r\n");
+            pc.printf("sdCard::verificaCurrentBank[5]\r\n");
             return;
          }
         //Criando currentBank
         if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){            
             fputc('0',sdCard::currentBankFile.fp);
             fputc('0',sdCard::currentBankFile.fp);
-            fflush(sdCard::currentBankFile.fp);
+            //fflush(sdCard::currentBankFile.fp);
             sdCard::fechaArquivo(&sdCard::currentBankFile);
             sdCard::currentBank = 0;
             sdCard::currentBankSending = 0;
         }else{            
-            pc.printf("sdCard::verificaCurrentBank[5]\r\n");
+            pc.printf("sdCard::verificaCurrentBank[6]\r\n");
             return;
          }
-     }
-    
-    if(currentBank==3){
-        pc.printf("sdCard::verificaCurrentBank[6]\r\n");
-        sdCard::currentBank = fgetc(sdCard::currentBankFile.fp);
-        sdCard::currentBank = sdCard::currentBank - 48;
-        sdCard::currentBankSending = fgetc(sdCard::currentBankFile.fp);
-        sdCard::currentBankSending = sdCard::currentBankSending -48;
-        sdCard::fechaArquivo(&sdCard::currentBankFile);
-    }
+     }    
     pc.printf("sdCard::verificaCurrentBank[7]\r\n");    
 }
 
@@ -193,6 +193,44 @@
     
     return true;
 }
+
+uint32_t hextobin(char *hex,uint32_t len){
+    int i;
+    uint32_t bin=0;
+    for(i=len;i>0;i--){
+        if(hex[len-i]<65){            
+            bin+=((hex[len-i]-48)<<(4*(i-1)));
+        }else{
+            bin+=((hex[len-i]-55)<<(4*(i-1)));
+         }
+    }
+    return bin;    
+}
+
+bool sdCard::insereDadosArquivoHex(arquivoSD *arquivo, char* data,uint16_t tam){
+    //Struct do arquivo, dados a inserir e tamanho deles    
+    uint16_t i;
+    char c,hex[3];
+    if(!sdCard::abreArquivo(arquivo,"a")){    
+        sdCard::fechaArquivo(arquivo);    
+        return false;        
+    }
+    
+    for(i=0;i<tam;i+=2){
+        //fprintf(arquivo->fp,"%c",data[i]);
+        
+        hex[0]=data[i];
+        hex[1]=data[i+1];        
+        c = hextobin(hex,2);
+                
+        fputc(c,arquivo->fp);
+        fflush(arquivo->fp);    
+    }    
+    sdCard::fechaArquivo(arquivo); 
+    
+    return true;
+}
+
 bool sdCard::fechaArquivo(arquivoSD* arquivo){
     //Struct do arquivo
     fclose(arquivo->fp);
@@ -205,6 +243,7 @@
         sdCard::fechaArquivo(arquivo);
     }
     if(!remove(arquivo->nome)){return false;}
+    arquivo->bytes = 0;
     return true;
 }
 
@@ -237,6 +276,8 @@
     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::newFirmware.nome,"/sd/RAD/firmware.bin");        
+    
     
     if(!sdCard::abreArquivo(&sdCard::devices,"r")){
         pc.printf("Remota nao parametrizada!!!\n");    
@@ -295,10 +336,15 @@
         fechaArquivo(arquivo);
     }        
     
-    if(sdCard::abreArquivo(arquivo,"r")){            
+    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 
+        fseek(arquivo->fp, 0, SEEK_SET); // seek back to beginning of file         
+        
+        /*while(fgetc(arquivo->fp)!=EOF){
+            tam++;
+        }*/
+        
         sdCard::fechaArquivo(arquivo);
     }else{
         return false;