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