teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
funcoesSDCard.cpp@9:cf406384efd9, 2017-08-09 (annotated)
- Committer:
- brunofgc
- Date:
- Wed Aug 09 20:38:10 2017 +0000
- Revision:
- 9:cf406384efd9
- Parent:
- 7:ae9c47f62946
- Child:
- 10:263c093f8977
Ultima versao com enviaDados na thread comunicacoes;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
brunofgc | 0:1c0a769988ee | 1 | #include "funcoesSDCard.h" |
brunofgc | 0:1c0a769988ee | 2 | #include "serialPC.h" |
brunofgc | 0:1c0a769988ee | 3 | |
brunofgc | 0:1c0a769988ee | 4 | arquivoSD sdCard::envio; |
brunofgc | 0:1c0a769988ee | 5 | arquivoSD sdCard::armazenamento; |
brunofgc | 0:1c0a769988ee | 6 | arquivoSD sdCard::config; |
brunofgc | 0:1c0a769988ee | 7 | arquivoSD sdCard::devices; |
brunofgc | 0:1c0a769988ee | 8 | arquivoSD sdCard::status; |
brunofgc | 0:1c0a769988ee | 9 | arquivoSD sdCard::tempFile; |
brunofgc | 7:ae9c47f62946 | 10 | bool sdCard::arquivosAbertos=false; |
brunofgc | 0:1c0a769988ee | 11 | |
brunofgc | 0:1c0a769988ee | 12 | char sdCard::nomeArquivoEmRecebimento[30]; |
brunofgc | 0:1c0a769988ee | 13 | |
brunofgc | 0:1c0a769988ee | 14 | |
brunofgc | 0:1c0a769988ee | 15 | bool sdCard::deleteSentFiles; |
brunofgc | 0:1c0a769988ee | 16 | |
brunofgc | 0:1c0a769988ee | 17 | SDFileSystem sd(p11, p12, p13, p14, "sd"); |
brunofgc | 0:1c0a769988ee | 18 | |
brunofgc | 0:1c0a769988ee | 19 | |
brunofgc | 0:1c0a769988ee | 20 | bool sdCard::abreArquivo(arquivoSD *arquivo,char *mode){ |
brunofgc | 0:1c0a769988ee | 21 | //Struct do arquivo e seu nome |
brunofgc | 7:ae9c47f62946 | 22 | /*uint32_t timeOut=30000; |
brunofgc | 7:ae9c47f62946 | 23 | while(timeOut && arquivo->aberto){ |
brunofgc | 7:ae9c47f62946 | 24 | timeOut--; |
brunofgc | 7:ae9c47f62946 | 25 | osDelay(1); |
brunofgc | 0:1c0a769988ee | 26 | } |
brunofgc | 7:ae9c47f62946 | 27 | if(arquivo->aberto){return false;} |
brunofgc | 7:ae9c47f62946 | 28 | */ |
brunofgc | 7:ae9c47f62946 | 29 | if(!sdCard::arquivoAberto(15000)){return false;} |
brunofgc | 7:ae9c47f62946 | 30 | |
brunofgc | 7:ae9c47f62946 | 31 | //pc.printf("Abrindo um arquivo de nome <%s> em modo <%s>.\r\n",arquivo->nome,mode); |
brunofgc | 7:ae9c47f62946 | 32 | |
brunofgc | 0:1c0a769988ee | 33 | //pc.printf("Abrindo arquivo <%s>.\n",arquivo->nome); |
brunofgc | 0:1c0a769988ee | 34 | if((arquivo->fp = fopen(arquivo->nome,mode))!=NULL){ |
brunofgc | 0:1c0a769988ee | 35 | arquivo->aberto = true; |
brunofgc | 0:1c0a769988ee | 36 | return true; |
brunofgc | 0:1c0a769988ee | 37 | }else{ |
brunofgc | 0:1c0a769988ee | 38 | return false; |
brunofgc | 0:1c0a769988ee | 39 | } |
brunofgc | 0:1c0a769988ee | 40 | } |
brunofgc | 0:1c0a769988ee | 41 | |
brunofgc | 0:1c0a769988ee | 42 | uint16_t sdCard::calcCheckSum16BITFile(char *nome){ |
brunofgc | 0:1c0a769988ee | 43 | FILE *fp; |
brunofgc | 0:1c0a769988ee | 44 | char c; |
brunofgc | 0:1c0a769988ee | 45 | uint16_t sum = 0; |
brunofgc | 0:1c0a769988ee | 46 | |
brunofgc | 0:1c0a769988ee | 47 | fp = fopen (nome,"r"); |
brunofgc | 0:1c0a769988ee | 48 | if(fp != NULL){ |
brunofgc | 0:1c0a769988ee | 49 | do{ |
brunofgc | 0:1c0a769988ee | 50 | c = fgetc(fp); |
brunofgc | 0:1c0a769988ee | 51 | if(!feof(fp)){sum+=c;} |
brunofgc | 0:1c0a769988ee | 52 | }while(!feof(fp)); |
brunofgc | 0:1c0a769988ee | 53 | fclose(fp); |
brunofgc | 0:1c0a769988ee | 54 | } |
brunofgc | 0:1c0a769988ee | 55 | return sum; |
brunofgc | 0:1c0a769988ee | 56 | } |
brunofgc | 0:1c0a769988ee | 57 | |
brunofgc | 7:ae9c47f62946 | 58 | /*bool sdCard::insereDadosArquivoPeloNome(char *nome, char *dados,uint16_t tam){ |
brunofgc | 0:1c0a769988ee | 59 | FILE *fp; |
brunofgc | 0:1c0a769988ee | 60 | fp = fopen(nome,"a"); |
brunofgc | 0:1c0a769988ee | 61 | uint16_t i; |
brunofgc | 0:1c0a769988ee | 62 | if(fp!=NULL){ |
brunofgc | 7:ae9c47f62946 | 63 | sdCard::arquivoAberto = true; |
brunofgc | 0:1c0a769988ee | 64 | for(i=0;i<tam;i++){ |
brunofgc | 0:1c0a769988ee | 65 | fprintf(fp,"%c",dados[i]); |
brunofgc | 0:1c0a769988ee | 66 | fflush(fp); |
brunofgc | 0:1c0a769988ee | 67 | } |
brunofgc | 0:1c0a769988ee | 68 | fclose(fp); |
brunofgc | 7:ae9c47f62946 | 69 | sdCard::arquivoAberto = false; |
brunofgc | 0:1c0a769988ee | 70 | }else{ |
brunofgc | 0:1c0a769988ee | 71 | return false; |
brunofgc | 0:1c0a769988ee | 72 | } |
brunofgc | 0:1c0a769988ee | 73 | return true; |
brunofgc | 7:ae9c47f62946 | 74 | }*/ |
brunofgc | 0:1c0a769988ee | 75 | |
brunofgc | 0:1c0a769988ee | 76 | bool sdCard::insereDadosArquivo(arquivoSD *arquivo, char* data,uint16_t tam){ |
brunofgc | 0:1c0a769988ee | 77 | //Struct do arquivo, dados a inserir e tamanho deles |
brunofgc | 7:ae9c47f62946 | 78 | uint16_t i; |
brunofgc | 7:ae9c47f62946 | 79 | if(!sdCard::abreArquivo(arquivo,"a")){ |
brunofgc | 7:ae9c47f62946 | 80 | sdCard::fechaArquivo(arquivo); |
brunofgc | 7:ae9c47f62946 | 81 | return false; |
brunofgc | 0:1c0a769988ee | 82 | } |
brunofgc | 0:1c0a769988ee | 83 | |
brunofgc | 0:1c0a769988ee | 84 | for(i=0;i<tam;i++){ |
brunofgc | 7:ae9c47f62946 | 85 | //fprintf(arquivo->fp,"%c",data[i]); |
brunofgc | 7:ae9c47f62946 | 86 | fputc(data[i],arquivo->fp); |
brunofgc | 0:1c0a769988ee | 87 | fflush(arquivo->fp); |
brunofgc | 7:ae9c47f62946 | 88 | } |
brunofgc | 7:ae9c47f62946 | 89 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 90 | |
brunofgc | 0:1c0a769988ee | 91 | return true; |
brunofgc | 0:1c0a769988ee | 92 | } |
brunofgc | 0:1c0a769988ee | 93 | bool sdCard::fechaArquivo(arquivoSD* arquivo){ |
brunofgc | 0:1c0a769988ee | 94 | //Struct do arquivo |
brunofgc | 0:1c0a769988ee | 95 | fclose(arquivo->fp); |
brunofgc | 0:1c0a769988ee | 96 | arquivo->aberto = false; |
brunofgc | 0:1c0a769988ee | 97 | return true; |
brunofgc | 0:1c0a769988ee | 98 | } |
brunofgc | 0:1c0a769988ee | 99 | |
brunofgc | 7:ae9c47f62946 | 100 | bool sdCard::excluiArquivo(arquivoSD *arquivo){ |
brunofgc | 0:1c0a769988ee | 101 | if(arquivo->aberto){ |
brunofgc | 7:ae9c47f62946 | 102 | if(!sdCard::fechaArquivo(arquivo)){return false;} |
brunofgc | 0:1c0a769988ee | 103 | } |
brunofgc | 7:ae9c47f62946 | 104 | if(!remove(arquivo->nome)){return false;} |
brunofgc | 7:ae9c47f62946 | 105 | return true; |
brunofgc | 0:1c0a769988ee | 106 | } |
brunofgc | 0:1c0a769988ee | 107 | |
brunofgc | 0:1c0a769988ee | 108 | bool sdCard::exibeArquivo(arquivoSD *arquivo){ |
brunofgc | 7:ae9c47f62946 | 109 | char c; |
brunofgc | 7:ae9c47f62946 | 110 | if(!sdCard::arquivoAberto(2000)){return false;} |
brunofgc | 0:1c0a769988ee | 111 | |
brunofgc | 0:1c0a769988ee | 112 | if(!sdCard::abreArquivo(arquivo,"r")){ |
brunofgc | 0:1c0a769988ee | 113 | return false; |
brunofgc | 7:ae9c47f62946 | 114 | } |
brunofgc | 0:1c0a769988ee | 115 | |
brunofgc | 0:1c0a769988ee | 116 | pc.printf("\n\nInicio do arquivo %s.\n\n",arquivo->nome); |
brunofgc | 0:1c0a769988ee | 117 | |
brunofgc | 0:1c0a769988ee | 118 | do{ |
brunofgc | 0:1c0a769988ee | 119 | c = fgetc(arquivo->fp); |
brunofgc | 0:1c0a769988ee | 120 | if(!feof(arquivo->fp)){pc.printf("%c",c);} |
brunofgc | 0:1c0a769988ee | 121 | }while(!feof(arquivo->fp)); |
brunofgc | 0:1c0a769988ee | 122 | pc.printf("\n\nFim do arquivo %s.\n",arquivo->nome); |
brunofgc | 0:1c0a769988ee | 123 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 124 | return true; |
brunofgc | 0:1c0a769988ee | 125 | } |
brunofgc | 0:1c0a769988ee | 126 | |
brunofgc | 0:1c0a769988ee | 127 | int sdCard::init(){ |
brunofgc | 0:1c0a769988ee | 128 | //Inicializando SDCard |
brunofgc | 0:1c0a769988ee | 129 | |
brunofgc | 0:1c0a769988ee | 130 | strcpy(sdCard::envio.nome,"/sd/RAD/envio.txt"); |
brunofgc | 0:1c0a769988ee | 131 | strcpy(sdCard::armazenamento.nome,"/sd/RAD/armazenamento.txt"); |
brunofgc | 0:1c0a769988ee | 132 | strcpy(sdCard::config.nome,"/sd/RAD/config.bin"); |
brunofgc | 0:1c0a769988ee | 133 | strcpy(sdCard::devices.nome,"/sd/RAD/devices.cfg"); |
brunofgc | 0:1c0a769988ee | 134 | strcpy(sdCard::status.nome,"/sd/RAD/status.txt"); |
brunofgc | 0:1c0a769988ee | 135 | strcpy(sdCard::tempFile.nome,"/sd/RAD/tempFile.bin"); |
brunofgc | 0:1c0a769988ee | 136 | |
brunofgc | 7:ae9c47f62946 | 137 | /*if(!sdCard::abreArquivo(&sdCard::config,"r")){ |
brunofgc | 0:1c0a769988ee | 138 | //Não foi encontrado o arquivo config.bin, então vou criar o diretório |
brunofgc | 0:1c0a769988ee | 139 | pc.printf("Nao foi encontrado o arquivo config.bin .\n"); |
brunofgc | 0:1c0a769988ee | 140 | //Criando o diretorio |
brunofgc | 0:1c0a769988ee | 141 | pc.printf("Criando diretorio e arquivo config.bin .\n"); |
brunofgc | 0:1c0a769988ee | 142 | mkdir("/sd/RAD", 0777); |
brunofgc | 0:1c0a769988ee | 143 | |
brunofgc | 0:1c0a769988ee | 144 | if(sdCard::abreArquivo(&sdCard::config,"w")){ |
brunofgc | 0:1c0a769988ee | 145 | //Fazer o arquivo de configuração aqui! |
brunofgc | 0:1c0a769988ee | 146 | pc.printf("Criado arquivo config.bin .\n"); |
brunofgc | 0:1c0a769988ee | 147 | fprintf(sdCard::config.fp,"SSID:DROME\r\nPASSWORD:VITAE\r\nPORT:80"); |
brunofgc | 0:1c0a769988ee | 148 | |
brunofgc | 0:1c0a769988ee | 149 | } |
brunofgc | 0:1c0a769988ee | 150 | } |
brunofgc | 0:1c0a769988ee | 151 | //Fechando arquivo de configuração; |
brunofgc | 0:1c0a769988ee | 152 | fechaArquivo(&sdCard::config); |
brunofgc | 7:ae9c47f62946 | 153 | */ |
brunofgc | 0:1c0a769988ee | 154 | if(!sdCard::abreArquivo(&sdCard::devices,"r")){ |
brunofgc | 0:1c0a769988ee | 155 | pc.printf("Remota nao parametrizada!!!\n"); |
brunofgc | 0:1c0a769988ee | 156 | }else{ |
brunofgc | 0:1c0a769988ee | 157 | fechaArquivo(&sdCard::devices); |
brunofgc | 0:1c0a769988ee | 158 | } |
brunofgc | 0:1c0a769988ee | 159 | return 1; |
brunofgc | 0:1c0a769988ee | 160 | } |
brunofgc | 0:1c0a769988ee | 161 | |
brunofgc | 0:1c0a769988ee | 162 | int sdCard::preparaEnvio(void){ |
brunofgc | 7:ae9c47f62946 | 163 | //Verifico se existe arquivo pendente de envio. |
brunofgc | 7:ae9c47f62946 | 164 | if(!sdCard::arquivoAberto(5000)){return 2;} |
brunofgc | 0:1c0a769988ee | 165 | |
brunofgc | 0:1c0a769988ee | 166 | if(abreArquivo(&sdCard::envio,"r")){ |
brunofgc | 0:1c0a769988ee | 167 | pc.printf("Tem um arquivo pendente de envio.\n"); |
brunofgc | 0:1c0a769988ee | 168 | fechaArquivo(&sdCard::envio); |
brunofgc | 0:1c0a769988ee | 169 | return 1; |
brunofgc | 0:1c0a769988ee | 170 | } |
brunofgc | 0:1c0a769988ee | 171 | |
brunofgc | 9:cf406384efd9 | 172 | sdCard::getFileTam(&sdCard::armazenamento); |
brunofgc | 9:cf406384efd9 | 173 | if(armazenamento.bytes>46080){ |
brunofgc | 9:cf406384efd9 | 174 | sdCard::excluiArquivo(&sdCard::armazenamento); |
brunofgc | 9:cf406384efd9 | 175 | } |
brunofgc | 9:cf406384efd9 | 176 | |
brunofgc | 7:ae9c47f62946 | 177 | //Incluindo o status no envio |
brunofgc | 7:ae9c47f62946 | 178 | modemCom::writeStatusToSD(); |
brunofgc | 7:ae9c47f62946 | 179 | |
brunofgc | 0:1c0a769988ee | 180 | if(sdCard::abreArquivo(&sdCard::armazenamento,"r")){ |
brunofgc | 0:1c0a769988ee | 181 | sdCard::fechaArquivo(&sdCard::armazenamento); |
brunofgc | 0:1c0a769988ee | 182 | }else{ |
brunofgc | 7:ae9c47f62946 | 183 | pc.printf("Nao foi encontrado arquivo de armazenamento em preparaEnvio.\n"); |
brunofgc | 7:ae9c47f62946 | 184 | return 0; |
brunofgc | 7:ae9c47f62946 | 185 | } |
brunofgc | 1:0e0967c88590 | 186 | |
brunofgc | 0:1c0a769988ee | 187 | if(!sdCard::file_rename("/sd/RAD/armazenamento.txt","/sd/RAD/envio.txt")){ |
brunofgc | 7:ae9c47f62946 | 188 | pc.printf("Nao foi possivel renomear arquivo para envio.\n"); |
brunofgc | 0:1c0a769988ee | 189 | return 0; |
brunofgc | 7:ae9c47f62946 | 190 | } |
brunofgc | 0:1c0a769988ee | 191 | return 1; |
brunofgc | 0:1c0a769988ee | 192 | } |
brunofgc | 0:1c0a769988ee | 193 | |
brunofgc | 0:1c0a769988ee | 194 | void sdCard::finalizaEnvio(void){ |
brunofgc | 0:1c0a769988ee | 195 | if(sdCard::envio.aberto){fclose(sdCard::envio.fp);} |
brunofgc | 0:1c0a769988ee | 196 | remove(sdCard::envio.nome); |
brunofgc | 0:1c0a769988ee | 197 | pc.printf("Deletado o arquivo de envio apos envio do mesmo ao server.\n"); |
brunofgc | 0:1c0a769988ee | 198 | } |
brunofgc | 0:1c0a769988ee | 199 | |
brunofgc | 0:1c0a769988ee | 200 | bool sdCard::getFileTam(arquivoSD *arquivo){ |
brunofgc | 0:1c0a769988ee | 201 | uint32_t tam=0; |
brunofgc | 7:ae9c47f62946 | 202 | uint8_t timeOut = timeOutArquivoAberto; |
brunofgc | 7:ae9c47f62946 | 203 | if(!sdCard::arquivoAberto(5000)){return false;} |
brunofgc | 0:1c0a769988ee | 204 | |
brunofgc | 0:1c0a769988ee | 205 | if(arquivo->aberto){ |
brunofgc | 0:1c0a769988ee | 206 | fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 207 | } |
brunofgc | 0:1c0a769988ee | 208 | |
brunofgc | 7:ae9c47f62946 | 209 | if(sdCard::abreArquivo(arquivo,"r")){ |
brunofgc | 2:55b7b466e742 | 210 | fseek(arquivo->fp, 0, SEEK_END); // seek to end of file |
brunofgc | 2:55b7b466e742 | 211 | tam = ftell(arquivo->fp); // get current file pointer |
brunofgc | 2:55b7b466e742 | 212 | fseek(arquivo->fp, 0, SEEK_SET); // seek back to beginning of file |
brunofgc | 0:1c0a769988ee | 213 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 214 | }else{ |
brunofgc | 0:1c0a769988ee | 215 | return false; |
brunofgc | 0:1c0a769988ee | 216 | } |
brunofgc | 0:1c0a769988ee | 217 | arquivo->bytes = tam; |
brunofgc | 0:1c0a769988ee | 218 | return true; |
brunofgc | 0:1c0a769988ee | 219 | } |
brunofgc | 0:1c0a769988ee | 220 | |
brunofgc | 7:ae9c47f62946 | 221 | bool sdCard::arquivoAberto(uint16_t timeOut){ |
brunofgc | 7:ae9c47f62946 | 222 | while( |
brunofgc | 7:ae9c47f62946 | 223 | (sdCard::envio.aberto||sdCard::armazenamento.aberto||sdCard::config.aberto||sdCard::devices.aberto||sdCard::status.aberto||sdCard::tempFile.aberto||sdCard::arquivosAbertos) |
brunofgc | 7:ae9c47f62946 | 224 | && |
brunofgc | 7:ae9c47f62946 | 225 | timeOut){ |
brunofgc | 7:ae9c47f62946 | 226 | timeOut--; |
brunofgc | 7:ae9c47f62946 | 227 | if((timeOut%1000)==0){pc.printf("Timeout em arquivoAberto()<%lu>.\r\n",timeOut);} |
brunofgc | 7:ae9c47f62946 | 228 | osDelay(1); |
brunofgc | 7:ae9c47f62946 | 229 | } |
brunofgc | 7:ae9c47f62946 | 230 | if(timeOut){return true;} |
brunofgc | 7:ae9c47f62946 | 231 | else{return false;} |
brunofgc | 0:1c0a769988ee | 232 | } |
brunofgc | 0:1c0a769988ee | 233 | |
brunofgc | 0:1c0a769988ee | 234 | |
brunofgc | 9:cf406384efd9 | 235 | /*//*********************************************************** |
brunofgc | 0:1c0a769988ee | 236 | // file_rename: renames a file (via copy & delete). |
brunofgc | 0:1c0a769988ee | 237 | // Moves data instead of adjusting the file name in the |
brunofgc | 0:1c0a769988ee | 238 | // file directory. Checks to insure the file was renamed. |
brunofgc | 9:cf406384efd9 | 239 | // Returns 0 = error; 1 = success |
brunofgc | 0:1c0a769988ee | 240 | //*********************************************************** |
brunofgc | 7:ae9c47f62946 | 241 | uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) { |
brunofgc | 7:ae9c47f62946 | 242 | //rename(oldfname,newfname); |
brunofgc | 0:1c0a769988ee | 243 | int retval = 0; |
brunofgc | 0:1c0a769988ee | 244 | int ch; |
brunofgc | 7:ae9c47f62946 | 245 | sdCard::envio.bytes=0; |
brunofgc | 7:ae9c47f62946 | 246 | |
brunofgc | 7:ae9c47f62946 | 247 | if(!sdCard::arquivoAberto(30000)){return false;} |
brunofgc | 7:ae9c47f62946 | 248 | |
brunofgc | 7:ae9c47f62946 | 249 | |
brunofgc | 0:1c0a769988ee | 250 | FILE *fpold = fopen(oldfname, "r"); // src file |
brunofgc | 7:ae9c47f62946 | 251 | |
brunofgc | 0:1c0a769988ee | 252 | if(fpold == NULL){ |
brunofgc | 7:ae9c47f62946 | 253 | pc.printf("file_rename 4.\r\n"); |
brunofgc | 7:ae9c47f62946 | 254 | fclose(fpold); |
brunofgc | 0:1c0a769988ee | 255 | return 0; |
brunofgc | 0:1c0a769988ee | 256 | } |
brunofgc | 0:1c0a769988ee | 257 | |
brunofgc | 0:1c0a769988ee | 258 | FILE *fpnew = fopen(newfname, "w"); // dest file |
brunofgc | 7:ae9c47f62946 | 259 | |
brunofgc | 7:ae9c47f62946 | 260 | if(fpnew == NULL){ |
brunofgc | 7:ae9c47f62946 | 261 | |
brunofgc | 7:ae9c47f62946 | 262 | fclose(fpnew); |
brunofgc | 0:1c0a769988ee | 263 | return 0; |
brunofgc | 0:1c0a769988ee | 264 | } |
brunofgc | 0:1c0a769988ee | 265 | |
brunofgc | 0:1c0a769988ee | 266 | pc.printf("Iniciando copia.\n"); |
brunofgc | 0:1c0a769988ee | 267 | |
brunofgc | 0:1c0a769988ee | 268 | sdCard::envio.bytes=0; |
brunofgc | 0:1c0a769988ee | 269 | ch = fgetc(fpold); |
brunofgc | 0:1c0a769988ee | 270 | while(ch != EOF){ |
brunofgc | 0:1c0a769988ee | 271 | fputc(ch, fpnew); |
brunofgc | 0:1c0a769988ee | 272 | ch = fgetc(fpold); |
brunofgc | 0:1c0a769988ee | 273 | sdCard::envio.bytes++; |
brunofgc | 0:1c0a769988ee | 274 | } |
brunofgc | 0:1c0a769988ee | 275 | |
brunofgc | 0:1c0a769988ee | 276 | fclose(fpnew); |
brunofgc | 0:1c0a769988ee | 277 | fclose(fpold); |
brunofgc | 0:1c0a769988ee | 278 | |
brunofgc | 0:1c0a769988ee | 279 | fpnew = fopen(newfname, "r"); // Reopen dest to insure |
brunofgc | 0:1c0a769988ee | 280 | if(fpnew == NULL) { // that it was created. |
brunofgc | 0:1c0a769988ee | 281 | retval = (0); // Return Error. |
brunofgc | 0:1c0a769988ee | 282 | } |
brunofgc | 0:1c0a769988ee | 283 | else { |
brunofgc | 0:1c0a769988ee | 284 | fclose(fpnew); |
brunofgc | 0:1c0a769988ee | 285 | remove(oldfname); // Remove original file. |
brunofgc | 0:1c0a769988ee | 286 | retval = (1); // Return Success. |
brunofgc | 0:1c0a769988ee | 287 | } |
brunofgc | 7:ae9c47f62946 | 288 | sdCard::arquivosAbertos=false; |
brunofgc | 7:ae9c47f62946 | 289 | pc.printf("file_rename retval <%lu>.\r\n",retval); |
brunofgc | 0:1c0a769988ee | 290 | return (retval); |
brunofgc | 9:cf406384efd9 | 291 | }*/ |
brunofgc | 9:cf406384efd9 | 292 | |
brunofgc | 9:cf406384efd9 | 293 | //*********************************************************** |
brunofgc | 9:cf406384efd9 | 294 | // file_rename: renames a file (via copy & delete). |
brunofgc | 9:cf406384efd9 | 295 | // Moves data instead of adjusting the file name in the |
brunofgc | 9:cf406384efd9 | 296 | // file directory. Checks to insure the file was renamed. |
brunofgc | 9:cf406384efd9 | 297 | // Returns 0 = error; 1 = success |
brunofgc | 9:cf406384efd9 | 298 | //*********************************************************** |
brunofgc | 9:cf406384efd9 | 299 | uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) { |
brunofgc | 9:cf406384efd9 | 300 | //rename(oldfname,newfname); |
brunofgc | 9:cf406384efd9 | 301 | #define maxTamFileCopy 128 |
brunofgc | 9:cf406384efd9 | 302 | char bufCopy[maxTamFileCopy]; |
brunofgc | 9:cf406384efd9 | 303 | uint8_t retval = 0; |
brunofgc | 9:cf406384efd9 | 304 | uint32_t fileSize = 0; |
brunofgc | 9:cf406384efd9 | 305 | uint32_t fileNumParts = 0; |
brunofgc | 9:cf406384efd9 | 306 | uint32_t fileEnding=0; |
brunofgc | 9:cf406384efd9 | 307 | char ch; |
brunofgc | 9:cf406384efd9 | 308 | uint32_t i,j; |
brunofgc | 9:cf406384efd9 | 309 | sdCard::envio.bytes=0; |
brunofgc | 9:cf406384efd9 | 310 | |
brunofgc | 9:cf406384efd9 | 311 | if(!sdCard::arquivoAberto(30000)){return false;} |
brunofgc | 9:cf406384efd9 | 312 | |
brunofgc | 9:cf406384efd9 | 313 | |
brunofgc | 9:cf406384efd9 | 314 | FILE *fpold = fopen(oldfname, "r"); // src file |
brunofgc | 9:cf406384efd9 | 315 | |
brunofgc | 9:cf406384efd9 | 316 | if(fpold == NULL){ |
brunofgc | 9:cf406384efd9 | 317 | fclose(fpold); |
brunofgc | 9:cf406384efd9 | 318 | return 0; |
brunofgc | 9:cf406384efd9 | 319 | } |
brunofgc | 9:cf406384efd9 | 320 | |
brunofgc | 9:cf406384efd9 | 321 | sdCard::arquivosAbertos = true; |
brunofgc | 9:cf406384efd9 | 322 | |
brunofgc | 9:cf406384efd9 | 323 | FILE *fpnew = fopen(newfname, "w"); // dest file |
brunofgc | 9:cf406384efd9 | 324 | |
brunofgc | 9:cf406384efd9 | 325 | if(fpnew == NULL){ |
brunofgc | 9:cf406384efd9 | 326 | fclose(fpnew); |
brunofgc | 9:cf406384efd9 | 327 | return 0; |
brunofgc | 9:cf406384efd9 | 328 | sdCard::arquivosAbertos = false; |
brunofgc | 9:cf406384efd9 | 329 | } |
brunofgc | 9:cf406384efd9 | 330 | |
brunofgc | 9:cf406384efd9 | 331 | |
brunofgc | 9:cf406384efd9 | 332 | pc.printf("Iniciando copia.\n"); |
brunofgc | 9:cf406384efd9 | 333 | |
brunofgc | 9:cf406384efd9 | 334 | |
brunofgc | 9:cf406384efd9 | 335 | fseek(fpold, 0, SEEK_END); // seek to end of file |
brunofgc | 9:cf406384efd9 | 336 | fileSize = ftell(fpold); // get current file pointer |
brunofgc | 9:cf406384efd9 | 337 | fseek(fpold, 0, SEEK_SET); // seek back to beginning of file |
brunofgc | 9:cf406384efd9 | 338 | |
brunofgc | 9:cf406384efd9 | 339 | sdCard::envio.bytes=0; |
brunofgc | 9:cf406384efd9 | 340 | |
brunofgc | 9:cf406384efd9 | 341 | fileNumParts = fileSize/maxTamFileCopy; |
brunofgc | 9:cf406384efd9 | 342 | fileEnding = fileSize%maxTamFileCopy; |
brunofgc | 9:cf406384efd9 | 343 | for(i=0;i<fileNumParts;i++){ |
brunofgc | 9:cf406384efd9 | 344 | for(j=0;j<maxTamFileCopy;j++){ |
brunofgc | 9:cf406384efd9 | 345 | bufCopy[j]=fgetc(fpold); |
brunofgc | 9:cf406384efd9 | 346 | } |
brunofgc | 9:cf406384efd9 | 347 | for(j=0;j<maxTamFileCopy;j++){ |
brunofgc | 9:cf406384efd9 | 348 | fputc(bufCopy[j],fpnew); |
brunofgc | 9:cf406384efd9 | 349 | } |
brunofgc | 9:cf406384efd9 | 350 | } |
brunofgc | 9:cf406384efd9 | 351 | for(j=0;j<fileEnding;j++){ |
brunofgc | 9:cf406384efd9 | 352 | bufCopy[j]=fgetc(fpold); |
brunofgc | 9:cf406384efd9 | 353 | } |
brunofgc | 9:cf406384efd9 | 354 | for(j=0;j<fileEnding;j++){ |
brunofgc | 9:cf406384efd9 | 355 | fputc(bufCopy[j],fpnew); |
brunofgc | 9:cf406384efd9 | 356 | } |
brunofgc | 9:cf406384efd9 | 357 | fclose(fpnew); |
brunofgc | 9:cf406384efd9 | 358 | fclose(fpold); |
brunofgc | 9:cf406384efd9 | 359 | |
brunofgc | 9:cf406384efd9 | 360 | fpnew = fopen(newfname, "r"); // Reopen dest to insure |
brunofgc | 9:cf406384efd9 | 361 | if(fpnew == NULL) { // that it was created. |
brunofgc | 9:cf406384efd9 | 362 | retval = (0); // Return Error. |
brunofgc | 9:cf406384efd9 | 363 | } |
brunofgc | 9:cf406384efd9 | 364 | else { |
brunofgc | 9:cf406384efd9 | 365 | fclose(fpnew); |
brunofgc | 9:cf406384efd9 | 366 | remove(oldfname); // Remove original file. |
brunofgc | 9:cf406384efd9 | 367 | retval = (1); // Return Success. |
brunofgc | 9:cf406384efd9 | 368 | } |
brunofgc | 9:cf406384efd9 | 369 | sdCard::arquivosAbertos=false; |
brunofgc | 9:cf406384efd9 | 370 | pc.printf("file_rename retval <%lu>.\r\n",retval); |
brunofgc | 9:cf406384efd9 | 371 | return (retval); |
brunofgc | 0:1c0a769988ee | 372 | } |