teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: funcoesSDCard.cpp
- 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;