teste de publish
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
funcoesSDCard.cpp@25:a6da63ed025b, 2018-04-16 (annotated)
- Committer:
- brunofgc
- Date:
- Mon Apr 16 12:30:29 2018 +0000
- Revision:
- 25:a6da63ed025b
- Parent:
- 23:f3c87afb6548
- Child:
- 30:8a06a85d8807
Vers?o 16/04/2018 com modbus otimizado para 100 leituras
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 | 10:263c093f8977 | 4 | |
brunofgc | 10:263c093f8977 | 5 | arquivoSD sdCard::bank0; |
brunofgc | 10:263c093f8977 | 6 | arquivoSD sdCard::bank1; |
brunofgc | 10:263c093f8977 | 7 | arquivoSD sdCard::currentBankFile; |
brunofgc | 0:1c0a769988ee | 8 | arquivoSD sdCard::config; |
brunofgc | 0:1c0a769988ee | 9 | arquivoSD sdCard::devices; |
brunofgc | 0:1c0a769988ee | 10 | arquivoSD sdCard::status; |
brunofgc | 0:1c0a769988ee | 11 | arquivoSD sdCard::tempFile; |
brunofgc | 13:b9183b4bc049 | 12 | arquivoSD sdCard::newFirmware; |
brunofgc | 13:b9183b4bc049 | 13 | uint32_t sdCard::nBytesArquivoRecebidos; |
brunofgc | 10:263c093f8977 | 14 | uint8_t sdCard::currentBank; |
brunofgc | 11:631bea162800 | 15 | uint8_t sdCard::currentBankSending; |
brunofgc | 14:c0162ab2a951 | 16 | uint16_t sdCard::checkSum; |
brunofgc | 7:ae9c47f62946 | 17 | bool sdCard::arquivosAbertos=false; |
brunofgc | 0:1c0a769988ee | 18 | |
brunofgc | 0:1c0a769988ee | 19 | char sdCard::nomeArquivoEmRecebimento[30]; |
brunofgc | 0:1c0a769988ee | 20 | |
brunofgc | 0:1c0a769988ee | 21 | |
brunofgc | 0:1c0a769988ee | 22 | bool sdCard::deleteSentFiles; |
brunofgc | 0:1c0a769988ee | 23 | |
brunofgc | 0:1c0a769988ee | 24 | SDFileSystem sd(p11, p12, p13, p14, "sd"); |
brunofgc | 0:1c0a769988ee | 25 | |
brunofgc | 0:1c0a769988ee | 26 | |
brunofgc | 0:1c0a769988ee | 27 | bool sdCard::abreArquivo(arquivoSD *arquivo,char *mode){ |
brunofgc | 0:1c0a769988ee | 28 | //Struct do arquivo e seu nome |
brunofgc | 7:ae9c47f62946 | 29 | /*uint32_t timeOut=30000; |
brunofgc | 7:ae9c47f62946 | 30 | while(timeOut && arquivo->aberto){ |
brunofgc | 7:ae9c47f62946 | 31 | timeOut--; |
brunofgc | 7:ae9c47f62946 | 32 | osDelay(1); |
brunofgc | 0:1c0a769988ee | 33 | } |
brunofgc | 7:ae9c47f62946 | 34 | if(arquivo->aberto){return false;} |
brunofgc | 7:ae9c47f62946 | 35 | */ |
brunofgc | 10:263c093f8977 | 36 | //if(!sdCard::arquivoAberto(15000)){return false;} |
brunofgc | 7:ae9c47f62946 | 37 | |
brunofgc | 7:ae9c47f62946 | 38 | //pc.printf("Abrindo um arquivo de nome <%s> em modo <%s>.\r\n",arquivo->nome,mode); |
brunofgc | 7:ae9c47f62946 | 39 | |
brunofgc | 0:1c0a769988ee | 40 | //pc.printf("Abrindo arquivo <%s>.\n",arquivo->nome); |
brunofgc | 0:1c0a769988ee | 41 | if((arquivo->fp = fopen(arquivo->nome,mode))!=NULL){ |
brunofgc | 0:1c0a769988ee | 42 | arquivo->aberto = true; |
brunofgc | 0:1c0a769988ee | 43 | return true; |
brunofgc | 0:1c0a769988ee | 44 | }else{ |
brunofgc | 0:1c0a769988ee | 45 | return false; |
brunofgc | 0:1c0a769988ee | 46 | } |
brunofgc | 0:1c0a769988ee | 47 | } |
brunofgc | 0:1c0a769988ee | 48 | |
brunofgc | 0:1c0a769988ee | 49 | uint16_t sdCard::calcCheckSum16BITFile(char *nome){ |
brunofgc | 0:1c0a769988ee | 50 | FILE *fp; |
brunofgc | 0:1c0a769988ee | 51 | char c; |
brunofgc | 0:1c0a769988ee | 52 | uint16_t sum = 0; |
brunofgc | 0:1c0a769988ee | 53 | |
brunofgc | 0:1c0a769988ee | 54 | fp = fopen (nome,"r"); |
brunofgc | 0:1c0a769988ee | 55 | if(fp != NULL){ |
brunofgc | 0:1c0a769988ee | 56 | do{ |
brunofgc | 0:1c0a769988ee | 57 | c = fgetc(fp); |
brunofgc | 0:1c0a769988ee | 58 | if(!feof(fp)){sum+=c;} |
brunofgc | 0:1c0a769988ee | 59 | }while(!feof(fp)); |
brunofgc | 0:1c0a769988ee | 60 | fclose(fp); |
brunofgc | 0:1c0a769988ee | 61 | } |
brunofgc | 0:1c0a769988ee | 62 | return sum; |
brunofgc | 0:1c0a769988ee | 63 | } |
brunofgc | 0:1c0a769988ee | 64 | |
brunofgc | 7:ae9c47f62946 | 65 | /*bool sdCard::insereDadosArquivoPeloNome(char *nome, char *dados,uint16_t tam){ |
brunofgc | 0:1c0a769988ee | 66 | FILE *fp; |
brunofgc | 0:1c0a769988ee | 67 | fp = fopen(nome,"a"); |
brunofgc | 0:1c0a769988ee | 68 | uint16_t i; |
brunofgc | 0:1c0a769988ee | 69 | if(fp!=NULL){ |
brunofgc | 7:ae9c47f62946 | 70 | sdCard::arquivoAberto = true; |
brunofgc | 0:1c0a769988ee | 71 | for(i=0;i<tam;i++){ |
brunofgc | 0:1c0a769988ee | 72 | fprintf(fp,"%c",dados[i]); |
brunofgc | 0:1c0a769988ee | 73 | fflush(fp); |
brunofgc | 0:1c0a769988ee | 74 | } |
brunofgc | 0:1c0a769988ee | 75 | fclose(fp); |
brunofgc | 7:ae9c47f62946 | 76 | sdCard::arquivoAberto = false; |
brunofgc | 0:1c0a769988ee | 77 | }else{ |
brunofgc | 0:1c0a769988ee | 78 | return false; |
brunofgc | 0:1c0a769988ee | 79 | } |
brunofgc | 0:1c0a769988ee | 80 | return true; |
brunofgc | 7:ae9c47f62946 | 81 | }*/ |
brunofgc | 0:1c0a769988ee | 82 | |
brunofgc | 15:0f78bf9c13ec | 83 | void sdCard::verificaCurrentBank(void){ |
brunofgc | 10:263c093f8977 | 84 | if(sdCard::abreArquivo(&sdCard::currentBankFile,"r")){ |
brunofgc | 15:0f78bf9c13ec | 85 | pc.printf("sdCard::verificaCurrentBank[1]\r\n"); |
brunofgc | 15:0f78bf9c13ec | 86 | pc.printf("sdCard::verificaCurrentBank[2]\r\n"); |
brunofgc | 11:631bea162800 | 87 | sdCard::currentBank = 3; |
brunofgc | 11:631bea162800 | 88 | sdCard::currentBankSending = 3; |
brunofgc | 13:b9183b4bc049 | 89 | sdCard::currentBank = fgetc(sdCard::currentBankFile.fp); |
brunofgc | 13:b9183b4bc049 | 90 | sdCard::currentBank = sdCard::currentBank - 48; |
brunofgc | 13:b9183b4bc049 | 91 | sdCard::currentBankSending = fgetc(sdCard::currentBankFile.fp); |
brunofgc | 13:b9183b4bc049 | 92 | sdCard::currentBankSending = sdCard::currentBankSending -48; |
brunofgc | 13:b9183b4bc049 | 93 | sdCard::fechaArquivo(&sdCard::currentBankFile); |
brunofgc | 15:0f78bf9c13ec | 94 | }else{ |
brunofgc | 15:0f78bf9c13ec | 95 | sdCard::currentBank = 3; |
brunofgc | 15:0f78bf9c13ec | 96 | sdCard::currentBankSending = 3; |
brunofgc | 25:a6da63ed025b | 97 | pc.printf("sdCard::verificaCurrentBank[8]\r\n"); |
brunofgc | 15:0f78bf9c13ec | 98 | } |
brunofgc | 13:b9183b4bc049 | 99 | if((sdCard::currentBankSending > 1)||(sdCard::currentBank > 1)){ |
brunofgc | 25:a6da63ed025b | 100 | sdCard::deleteBanks(2); |
brunofgc | 25:a6da63ed025b | 101 | /*pc.printf("sdCard::verificaCurrentBank[3]\r\n"); |
brunofgc | 25:a6da63ed025b | 102 | |
brunofgc | 10:263c093f8977 | 103 | //Criando bank 0 |
brunofgc | 25:a6da63ed025b | 104 | sdCard::excluiArquivo(&sdCard::bank0); |
brunofgc | 10:263c093f8977 | 105 | if(sdCard::abreArquivo(&sdCard::bank0,"w")){ |
brunofgc | 10:263c093f8977 | 106 | sdCard::fechaArquivo(&sdCard::bank0); |
brunofgc | 10:263c093f8977 | 107 | }else{ |
brunofgc | 13:b9183b4bc049 | 108 | pc.printf("sdCard::verificaCurrentBank[4]\r\n"); |
brunofgc | 25:a6da63ed025b | 109 | //return; |
brunofgc | 10:263c093f8977 | 110 | } |
brunofgc | 10:263c093f8977 | 111 | //Criando bank 1 |
brunofgc | 25:a6da63ed025b | 112 | sdCard::excluiArquivo(&sdCard::bank1); |
brunofgc | 10:263c093f8977 | 113 | if(sdCard::abreArquivo(&sdCard::bank1,"w")){ |
brunofgc | 10:263c093f8977 | 114 | sdCard::fechaArquivo(&sdCard::bank1); |
brunofgc | 25:a6da63ed025b | 115 | }else{ |
brunofgc | 13:b9183b4bc049 | 116 | pc.printf("sdCard::verificaCurrentBank[5]\r\n"); |
brunofgc | 25:a6da63ed025b | 117 | //return; |
brunofgc | 10:263c093f8977 | 118 | } |
brunofgc | 10:263c093f8977 | 119 | //Criando currentBank |
brunofgc | 25:a6da63ed025b | 120 | sdCard::excluiArquivo(&sdCard::currentBankFile); |
brunofgc | 10:263c093f8977 | 121 | if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){ |
brunofgc | 10:263c093f8977 | 122 | fputc('0',sdCard::currentBankFile.fp); |
brunofgc | 11:631bea162800 | 123 | fputc('0',sdCard::currentBankFile.fp); |
brunofgc | 13:b9183b4bc049 | 124 | //fflush(sdCard::currentBankFile.fp); |
brunofgc | 10:263c093f8977 | 125 | sdCard::fechaArquivo(&sdCard::currentBankFile); |
brunofgc | 11:631bea162800 | 126 | sdCard::currentBank = 0; |
brunofgc | 11:631bea162800 | 127 | sdCard::currentBankSending = 0; |
brunofgc | 10:263c093f8977 | 128 | }else{ |
brunofgc | 13:b9183b4bc049 | 129 | pc.printf("sdCard::verificaCurrentBank[6]\r\n"); |
brunofgc | 11:631bea162800 | 130 | return; |
brunofgc | 25:a6da63ed025b | 131 | }*/ |
brunofgc | 13:b9183b4bc049 | 132 | } |
brunofgc | 11:631bea162800 | 133 | pc.printf("sdCard::verificaCurrentBank[7]\r\n"); |
brunofgc | 10:263c093f8977 | 134 | } |
brunofgc | 10:263c093f8977 | 135 | |
brunofgc | 11:631bea162800 | 136 | uint8_t sdCard::modificaCurrentBank(uint8_t newCurrentBank,uint8_t newCurrentBankSending){ |
brunofgc | 11:631bea162800 | 137 | //sdCard::verificaCurrentBank(); |
brunofgc | 11:631bea162800 | 138 | if((sdCard::currentBank == newCurrentBank)&&(sdCard::currentBankSending == newCurrentBankSending)){ |
brunofgc | 10:263c093f8977 | 139 | return 1; |
brunofgc | 10:263c093f8977 | 140 | }else{ |
brunofgc | 11:631bea162800 | 141 | //if(!sdCard::excluiArquivo(&sdCard::currentBankFile)){return 0;} |
brunofgc | 10:263c093f8977 | 142 | if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){ |
brunofgc | 10:263c093f8977 | 143 | if(newCurrentBank){fputc('1',sdCard::currentBankFile.fp);fflush(sdCard::currentBankFile.fp);} |
brunofgc | 10:263c093f8977 | 144 | else{fputc('0',sdCard::currentBankFile.fp);fflush(sdCard::currentBankFile.fp);} |
brunofgc | 11:631bea162800 | 145 | if(newCurrentBankSending){fputc('1',sdCard::currentBankFile.fp);fflush(sdCard::currentBankFile.fp);} |
brunofgc | 11:631bea162800 | 146 | else{fputc('0',sdCard::currentBankFile.fp);fflush(sdCard::currentBankFile.fp);} |
brunofgc | 11:631bea162800 | 147 | sdCard::fechaArquivo(&sdCard::currentBankFile); |
brunofgc | 11:631bea162800 | 148 | sdCard::currentBank = newCurrentBank; |
brunofgc | 11:631bea162800 | 149 | sdCard::currentBankSending = newCurrentBankSending; |
brunofgc | 10:263c093f8977 | 150 | }else{ |
brunofgc | 11:631bea162800 | 151 | return 0; |
brunofgc | 10:263c093f8977 | 152 | } |
brunofgc | 10:263c093f8977 | 153 | } |
brunofgc | 10:263c093f8977 | 154 | return 1; |
brunofgc | 10:263c093f8977 | 155 | } |
brunofgc | 10:263c093f8977 | 156 | |
brunofgc | 10:263c093f8977 | 157 | bool sdCard::insereDadosBank(char* data,uint16_t tam){ |
brunofgc | 10:263c093f8977 | 158 | //Struct do arquivo, dados a inserir e tamanho deles |
brunofgc | 10:263c093f8977 | 159 | uint16_t i; |
brunofgc | 10:263c093f8977 | 160 | arquivoSD *arquivo; |
brunofgc | 11:631bea162800 | 161 | //verificaCurrentBank(); |
brunofgc | 11:631bea162800 | 162 | if(sdCard::currentBank > 1){ |
brunofgc | 10:263c093f8977 | 163 | pc.printf("sdCard::insereDadosBank[1]\r\n"); |
brunofgc | 10:263c093f8977 | 164 | return false; |
brunofgc | 10:263c093f8977 | 165 | } |
brunofgc | 10:263c093f8977 | 166 | |
brunofgc | 10:263c093f8977 | 167 | if(sdCard::currentBank){ |
brunofgc | 10:263c093f8977 | 168 | arquivo = &sdCard::bank1; |
brunofgc | 10:263c093f8977 | 169 | }else{ |
brunofgc | 10:263c093f8977 | 170 | arquivo = &sdCard::bank0; |
brunofgc | 10:263c093f8977 | 171 | } |
brunofgc | 10:263c093f8977 | 172 | |
brunofgc | 10:263c093f8977 | 173 | if(!sdCard::abreArquivo(arquivo,"a")){ |
brunofgc | 10:263c093f8977 | 174 | sdCard::fechaArquivo(arquivo); |
brunofgc | 10:263c093f8977 | 175 | pc.printf("sdCard::insereDadosBank[2]\r\n"); |
brunofgc | 10:263c093f8977 | 176 | return false; |
brunofgc | 10:263c093f8977 | 177 | } |
brunofgc | 10:263c093f8977 | 178 | |
brunofgc | 10:263c093f8977 | 179 | for(i=0;i<tam;i++){ |
brunofgc | 10:263c093f8977 | 180 | //fprintf(arquivo->fp,"%c",data[i]); |
brunofgc | 10:263c093f8977 | 181 | fputc(data[i],arquivo->fp); |
brunofgc | 10:263c093f8977 | 182 | fflush(arquivo->fp); |
brunofgc | 10:263c093f8977 | 183 | } |
brunofgc | 10:263c093f8977 | 184 | sdCard::fechaArquivo(arquivo); |
brunofgc | 10:263c093f8977 | 185 | pc.printf("sdCard::insereDadosBank[3]\r\n"); |
brunofgc | 10:263c093f8977 | 186 | return true; |
brunofgc | 10:263c093f8977 | 187 | } |
brunofgc | 10:263c093f8977 | 188 | |
brunofgc | 0:1c0a769988ee | 189 | bool sdCard::insereDadosArquivo(arquivoSD *arquivo, char* data,uint16_t tam){ |
brunofgc | 0:1c0a769988ee | 190 | //Struct do arquivo, dados a inserir e tamanho deles |
brunofgc | 7:ae9c47f62946 | 191 | uint16_t i; |
brunofgc | 7:ae9c47f62946 | 192 | if(!sdCard::abreArquivo(arquivo,"a")){ |
brunofgc | 7:ae9c47f62946 | 193 | sdCard::fechaArquivo(arquivo); |
brunofgc | 7:ae9c47f62946 | 194 | return false; |
brunofgc | 0:1c0a769988ee | 195 | } |
brunofgc | 0:1c0a769988ee | 196 | |
brunofgc | 0:1c0a769988ee | 197 | for(i=0;i<tam;i++){ |
brunofgc | 7:ae9c47f62946 | 198 | //fprintf(arquivo->fp,"%c",data[i]); |
brunofgc | 14:c0162ab2a951 | 199 | |
brunofgc | 14:c0162ab2a951 | 200 | sdCard::checkSum+=data[i]; |
brunofgc | 14:c0162ab2a951 | 201 | |
brunofgc | 7:ae9c47f62946 | 202 | fputc(data[i],arquivo->fp); |
brunofgc | 0:1c0a769988ee | 203 | fflush(arquivo->fp); |
brunofgc | 7:ae9c47f62946 | 204 | } |
brunofgc | 7:ae9c47f62946 | 205 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 206 | |
brunofgc | 0:1c0a769988ee | 207 | return true; |
brunofgc | 0:1c0a769988ee | 208 | } |
brunofgc | 13:b9183b4bc049 | 209 | |
brunofgc | 13:b9183b4bc049 | 210 | uint32_t hextobin(char *hex,uint32_t len){ |
brunofgc | 13:b9183b4bc049 | 211 | int i; |
brunofgc | 13:b9183b4bc049 | 212 | uint32_t bin=0; |
brunofgc | 13:b9183b4bc049 | 213 | for(i=len;i>0;i--){ |
brunofgc | 13:b9183b4bc049 | 214 | if(hex[len-i]<65){ |
brunofgc | 13:b9183b4bc049 | 215 | bin+=((hex[len-i]-48)<<(4*(i-1))); |
brunofgc | 13:b9183b4bc049 | 216 | }else{ |
brunofgc | 13:b9183b4bc049 | 217 | bin+=((hex[len-i]-55)<<(4*(i-1))); |
brunofgc | 13:b9183b4bc049 | 218 | } |
brunofgc | 13:b9183b4bc049 | 219 | } |
brunofgc | 13:b9183b4bc049 | 220 | return bin; |
brunofgc | 13:b9183b4bc049 | 221 | } |
brunofgc | 13:b9183b4bc049 | 222 | |
brunofgc | 13:b9183b4bc049 | 223 | bool sdCard::insereDadosArquivoHex(arquivoSD *arquivo, char* data,uint16_t tam){ |
brunofgc | 13:b9183b4bc049 | 224 | //Struct do arquivo, dados a inserir e tamanho deles |
brunofgc | 13:b9183b4bc049 | 225 | uint16_t i; |
brunofgc | 13:b9183b4bc049 | 226 | char c,hex[3]; |
brunofgc | 22:cb832a9bc704 | 227 | |
brunofgc | 22:cb832a9bc704 | 228 | |
brunofgc | 13:b9183b4bc049 | 229 | if(!sdCard::abreArquivo(arquivo,"a")){ |
brunofgc | 13:b9183b4bc049 | 230 | sdCard::fechaArquivo(arquivo); |
brunofgc | 13:b9183b4bc049 | 231 | return false; |
brunofgc | 13:b9183b4bc049 | 232 | } |
brunofgc | 13:b9183b4bc049 | 233 | for(i=0;i<tam;i+=2){ |
brunofgc | 13:b9183b4bc049 | 234 | //fprintf(arquivo->fp,"%c",data[i]); |
brunofgc | 13:b9183b4bc049 | 235 | |
brunofgc | 13:b9183b4bc049 | 236 | hex[0]=data[i]; |
brunofgc | 13:b9183b4bc049 | 237 | hex[1]=data[i+1]; |
brunofgc | 13:b9183b4bc049 | 238 | c = hextobin(hex,2); |
brunofgc | 14:c0162ab2a951 | 239 | |
brunofgc | 14:c0162ab2a951 | 240 | sdCard::checkSum+=c; |
brunofgc | 13:b9183b4bc049 | 241 | fputc(c,arquivo->fp); |
brunofgc | 13:b9183b4bc049 | 242 | fflush(arquivo->fp); |
brunofgc | 13:b9183b4bc049 | 243 | } |
brunofgc | 13:b9183b4bc049 | 244 | sdCard::fechaArquivo(arquivo); |
brunofgc | 13:b9183b4bc049 | 245 | return true; |
brunofgc | 13:b9183b4bc049 | 246 | } |
brunofgc | 13:b9183b4bc049 | 247 | |
brunofgc | 0:1c0a769988ee | 248 | bool sdCard::fechaArquivo(arquivoSD* arquivo){ |
brunofgc | 11:631bea162800 | 249 | //Struct do arquivo |
brunofgc | 0:1c0a769988ee | 250 | fclose(arquivo->fp); |
brunofgc | 0:1c0a769988ee | 251 | arquivo->aberto = false; |
brunofgc | 0:1c0a769988ee | 252 | return true; |
brunofgc | 0:1c0a769988ee | 253 | } |
brunofgc | 0:1c0a769988ee | 254 | |
brunofgc | 10:263c093f8977 | 255 | bool sdCard::excluiArquivo(arquivoSD *arquivo){ |
brunofgc | 0:1c0a769988ee | 256 | if(arquivo->aberto){ |
brunofgc | 11:631bea162800 | 257 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 258 | } |
brunofgc | 7:ae9c47f62946 | 259 | if(!remove(arquivo->nome)){return false;} |
brunofgc | 13:b9183b4bc049 | 260 | arquivo->bytes = 0; |
brunofgc | 7:ae9c47f62946 | 261 | return true; |
brunofgc | 0:1c0a769988ee | 262 | } |
brunofgc | 0:1c0a769988ee | 263 | |
brunofgc | 0:1c0a769988ee | 264 | bool sdCard::exibeArquivo(arquivoSD *arquivo){ |
brunofgc | 7:ae9c47f62946 | 265 | char c; |
brunofgc | 7:ae9c47f62946 | 266 | if(!sdCard::arquivoAberto(2000)){return false;} |
brunofgc | 0:1c0a769988ee | 267 | |
brunofgc | 0:1c0a769988ee | 268 | if(!sdCard::abreArquivo(arquivo,"r")){ |
brunofgc | 0:1c0a769988ee | 269 | return false; |
brunofgc | 7:ae9c47f62946 | 270 | } |
brunofgc | 0:1c0a769988ee | 271 | |
brunofgc | 0:1c0a769988ee | 272 | pc.printf("\n\nInicio do arquivo %s.\n\n",arquivo->nome); |
brunofgc | 0:1c0a769988ee | 273 | |
brunofgc | 0:1c0a769988ee | 274 | do{ |
brunofgc | 0:1c0a769988ee | 275 | c = fgetc(arquivo->fp); |
brunofgc | 0:1c0a769988ee | 276 | if(!feof(arquivo->fp)){pc.printf("%c",c);} |
brunofgc | 0:1c0a769988ee | 277 | }while(!feof(arquivo->fp)); |
brunofgc | 0:1c0a769988ee | 278 | pc.printf("\n\nFim do arquivo %s.\n",arquivo->nome); |
brunofgc | 0:1c0a769988ee | 279 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 280 | return true; |
brunofgc | 0:1c0a769988ee | 281 | } |
brunofgc | 0:1c0a769988ee | 282 | |
brunofgc | 0:1c0a769988ee | 283 | int sdCard::init(){ |
brunofgc | 0:1c0a769988ee | 284 | //Inicializando SDCard |
brunofgc | 0:1c0a769988ee | 285 | |
brunofgc | 10:263c093f8977 | 286 | strcpy(sdCard::bank0.nome,"/sd/RAD/bank0.txt"); |
brunofgc | 10:263c093f8977 | 287 | strcpy(sdCard::bank1.nome,"/sd/RAD/bank1.txt"); |
brunofgc | 10:263c093f8977 | 288 | strcpy(sdCard::currentBankFile.nome,"/sd/RAD/currentBank.txt"); |
brunofgc | 0:1c0a769988ee | 289 | strcpy(sdCard::config.nome,"/sd/RAD/config.bin"); |
brunofgc | 0:1c0a769988ee | 290 | strcpy(sdCard::devices.nome,"/sd/RAD/devices.cfg"); |
brunofgc | 0:1c0a769988ee | 291 | strcpy(sdCard::status.nome,"/sd/RAD/status.txt"); |
brunofgc | 10:263c093f8977 | 292 | strcpy(sdCard::tempFile.nome,"/sd/RAD/tempFile.bin"); |
brunofgc | 13:b9183b4bc049 | 293 | strcpy(sdCard::newFirmware.nome,"/sd/RAD/firmware.bin"); |
brunofgc | 13:b9183b4bc049 | 294 | |
brunofgc | 0:1c0a769988ee | 295 | |
brunofgc | 0:1c0a769988ee | 296 | if(!sdCard::abreArquivo(&sdCard::devices,"r")){ |
brunofgc | 15:0f78bf9c13ec | 297 | pc.printf("Remota nao parametrizada!!!\n"); |
brunofgc | 15:0f78bf9c13ec | 298 | mkdir("/sd/RAD", 0777); |
brunofgc | 0:1c0a769988ee | 299 | }else{ |
brunofgc | 0:1c0a769988ee | 300 | fechaArquivo(&sdCard::devices); |
brunofgc | 10:263c093f8977 | 301 | } |
brunofgc | 11:631bea162800 | 302 | sdCard::verificaCurrentBank(); |
brunofgc | 0:1c0a769988ee | 303 | return 1; |
brunofgc | 0:1c0a769988ee | 304 | } |
brunofgc | 0:1c0a769988ee | 305 | |
brunofgc | 10:263c093f8977 | 306 | bool sdCard::deleteBanks(uint8_t bank){ |
brunofgc | 10:263c093f8977 | 307 | switch(bank){ |
brunofgc | 10:263c093f8977 | 308 | case 0: |
brunofgc | 10:263c093f8977 | 309 | sdCard::excluiArquivo(&sdCard::bank0); |
brunofgc | 11:631bea162800 | 310 | /*sdCard::abreArquivo(&sdCard::bank0,"w"); |
brunofgc | 11:631bea162800 | 311 | sdCard::fechaArquivo(&sdCard::bank0);*/ |
brunofgc | 10:263c093f8977 | 312 | break; |
brunofgc | 10:263c093f8977 | 313 | case 1: |
brunofgc | 10:263c093f8977 | 314 | sdCard::excluiArquivo(&sdCard::bank1); |
brunofgc | 11:631bea162800 | 315 | /*sdCard::abreArquivo(&sdCard::bank1,"w"); |
brunofgc | 11:631bea162800 | 316 | sdCard::fechaArquivo(&sdCard::bank1);*/ |
brunofgc | 10:263c093f8977 | 317 | break; |
brunofgc | 10:263c093f8977 | 318 | case 2: |
brunofgc | 10:263c093f8977 | 319 | sdCard::excluiArquivo(&sdCard::bank0); |
brunofgc | 11:631bea162800 | 320 | /*sdCard::abreArquivo(&sdCard::bank0,"w"); |
brunofgc | 11:631bea162800 | 321 | sdCard::fechaArquivo(&sdCard::bank0);*/ |
brunofgc | 10:263c093f8977 | 322 | sdCard::excluiArquivo(&sdCard::bank1); |
brunofgc | 11:631bea162800 | 323 | /*sdCard::abreArquivo(&sdCard::bank1,"w"); |
brunofgc | 11:631bea162800 | 324 | sdCard::fechaArquivo(&sdCard::bank1); */ |
brunofgc | 10:263c093f8977 | 325 | sdCard::excluiArquivo(&sdCard::currentBankFile); |
brunofgc | 10:263c093f8977 | 326 | if(sdCard::abreArquivo(&sdCard::currentBankFile,"w")){ |
brunofgc | 10:263c093f8977 | 327 | fputc('0',sdCard::currentBankFile.fp); |
brunofgc | 11:631bea162800 | 328 | fputc('0',sdCard::currentBankFile.fp); |
brunofgc | 10:263c093f8977 | 329 | fflush(sdCard::currentBankFile.fp); |
brunofgc | 10:263c093f8977 | 330 | sdCard::fechaArquivo(&sdCard::currentBankFile); |
brunofgc | 10:263c093f8977 | 331 | } |
brunofgc | 10:263c093f8977 | 332 | break; |
brunofgc | 10:263c093f8977 | 333 | } |
brunofgc | 10:263c093f8977 | 334 | return true; |
brunofgc | 10:263c093f8977 | 335 | } |
brunofgc | 10:263c093f8977 | 336 | |
brunofgc | 0:1c0a769988ee | 337 | int sdCard::preparaEnvio(void){ |
brunofgc | 7:ae9c47f62946 | 338 | //Verifico se existe arquivo pendente de envio. |
brunofgc | 10:263c093f8977 | 339 | //if(!sdCard::arquivoAberto(5000)){return 2;} |
brunofgc | 7:ae9c47f62946 | 340 | //Incluindo o status no envio |
brunofgc | 10:263c093f8977 | 341 | modemCom::writeStatusToSD(); |
brunofgc | 0:1c0a769988ee | 342 | return 1; |
brunofgc | 0:1c0a769988ee | 343 | } |
brunofgc | 0:1c0a769988ee | 344 | |
brunofgc | 0:1c0a769988ee | 345 | bool sdCard::getFileTam(arquivoSD *arquivo){ |
brunofgc | 0:1c0a769988ee | 346 | uint32_t tam=0; |
brunofgc | 7:ae9c47f62946 | 347 | uint8_t timeOut = timeOutArquivoAberto; |
brunofgc | 7:ae9c47f62946 | 348 | if(!sdCard::arquivoAberto(5000)){return false;} |
brunofgc | 0:1c0a769988ee | 349 | |
brunofgc | 0:1c0a769988ee | 350 | if(arquivo->aberto){ |
brunofgc | 0:1c0a769988ee | 351 | fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 352 | } |
brunofgc | 0:1c0a769988ee | 353 | |
brunofgc | 13:b9183b4bc049 | 354 | if(sdCard::abreArquivo(arquivo,"r")){ |
brunofgc | 2:55b7b466e742 | 355 | fseek(arquivo->fp, 0, SEEK_END); // seek to end of file |
brunofgc | 2:55b7b466e742 | 356 | tam = ftell(arquivo->fp); // get current file pointer |
brunofgc | 13:b9183b4bc049 | 357 | fseek(arquivo->fp, 0, SEEK_SET); // seek back to beginning of file |
brunofgc | 13:b9183b4bc049 | 358 | |
brunofgc | 13:b9183b4bc049 | 359 | /*while(fgetc(arquivo->fp)!=EOF){ |
brunofgc | 13:b9183b4bc049 | 360 | tam++; |
brunofgc | 13:b9183b4bc049 | 361 | }*/ |
brunofgc | 13:b9183b4bc049 | 362 | |
brunofgc | 0:1c0a769988ee | 363 | sdCard::fechaArquivo(arquivo); |
brunofgc | 0:1c0a769988ee | 364 | }else{ |
brunofgc | 0:1c0a769988ee | 365 | return false; |
brunofgc | 0:1c0a769988ee | 366 | } |
brunofgc | 0:1c0a769988ee | 367 | arquivo->bytes = tam; |
brunofgc | 0:1c0a769988ee | 368 | return true; |
brunofgc | 0:1c0a769988ee | 369 | } |
brunofgc | 0:1c0a769988ee | 370 | |
brunofgc | 7:ae9c47f62946 | 371 | bool sdCard::arquivoAberto(uint16_t timeOut){ |
brunofgc | 7:ae9c47f62946 | 372 | while( |
brunofgc | 10:263c093f8977 | 373 | (sdCard::bank0.aberto||sdCard::bank1.aberto||sdCard::currentBankFile.aberto||sdCard::config.aberto||sdCard::devices.aberto||sdCard::status.aberto||sdCard::tempFile.aberto||sdCard::arquivosAbertos) |
brunofgc | 7:ae9c47f62946 | 374 | && |
brunofgc | 7:ae9c47f62946 | 375 | timeOut){ |
brunofgc | 7:ae9c47f62946 | 376 | timeOut--; |
brunofgc | 7:ae9c47f62946 | 377 | if((timeOut%1000)==0){pc.printf("Timeout em arquivoAberto()<%lu>.\r\n",timeOut);} |
brunofgc | 7:ae9c47f62946 | 378 | osDelay(1); |
brunofgc | 7:ae9c47f62946 | 379 | } |
brunofgc | 7:ae9c47f62946 | 380 | if(timeOut){return true;} |
brunofgc | 7:ae9c47f62946 | 381 | else{return false;} |
brunofgc | 0:1c0a769988ee | 382 | } |
brunofgc | 0:1c0a769988ee | 383 | |
brunofgc | 0:1c0a769988ee | 384 | |
brunofgc | 9:cf406384efd9 | 385 | /*//*********************************************************** |
brunofgc | 0:1c0a769988ee | 386 | // file_rename: renames a file (via copy & delete). |
brunofgc | 0:1c0a769988ee | 387 | // Moves data instead of adjusting the file name in the |
brunofgc | 0:1c0a769988ee | 388 | // file directory. Checks to insure the file was renamed. |
brunofgc | 9:cf406384efd9 | 389 | // Returns 0 = error; 1 = success |
brunofgc | 0:1c0a769988ee | 390 | //*********************************************************** |
brunofgc | 7:ae9c47f62946 | 391 | uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) { |
brunofgc | 7:ae9c47f62946 | 392 | //rename(oldfname,newfname); |
brunofgc | 0:1c0a769988ee | 393 | int retval = 0; |
brunofgc | 0:1c0a769988ee | 394 | int ch; |
brunofgc | 7:ae9c47f62946 | 395 | sdCard::envio.bytes=0; |
brunofgc | 7:ae9c47f62946 | 396 | |
brunofgc | 7:ae9c47f62946 | 397 | if(!sdCard::arquivoAberto(30000)){return false;} |
brunofgc | 7:ae9c47f62946 | 398 | |
brunofgc | 7:ae9c47f62946 | 399 | |
brunofgc | 0:1c0a769988ee | 400 | FILE *fpold = fopen(oldfname, "r"); // src file |
brunofgc | 7:ae9c47f62946 | 401 | |
brunofgc | 0:1c0a769988ee | 402 | if(fpold == NULL){ |
brunofgc | 7:ae9c47f62946 | 403 | pc.printf("file_rename 4.\r\n"); |
brunofgc | 7:ae9c47f62946 | 404 | fclose(fpold); |
brunofgc | 0:1c0a769988ee | 405 | return 0; |
brunofgc | 0:1c0a769988ee | 406 | } |
brunofgc | 0:1c0a769988ee | 407 | |
brunofgc | 0:1c0a769988ee | 408 | FILE *fpnew = fopen(newfname, "w"); // dest file |
brunofgc | 7:ae9c47f62946 | 409 | |
brunofgc | 7:ae9c47f62946 | 410 | if(fpnew == NULL){ |
brunofgc | 7:ae9c47f62946 | 411 | |
brunofgc | 7:ae9c47f62946 | 412 | fclose(fpnew); |
brunofgc | 0:1c0a769988ee | 413 | return 0; |
brunofgc | 0:1c0a769988ee | 414 | } |
brunofgc | 0:1c0a769988ee | 415 | |
brunofgc | 0:1c0a769988ee | 416 | pc.printf("Iniciando copia.\n"); |
brunofgc | 0:1c0a769988ee | 417 | |
brunofgc | 0:1c0a769988ee | 418 | sdCard::envio.bytes=0; |
brunofgc | 0:1c0a769988ee | 419 | ch = fgetc(fpold); |
brunofgc | 0:1c0a769988ee | 420 | while(ch != EOF){ |
brunofgc | 0:1c0a769988ee | 421 | fputc(ch, fpnew); |
brunofgc | 0:1c0a769988ee | 422 | ch = fgetc(fpold); |
brunofgc | 0:1c0a769988ee | 423 | sdCard::envio.bytes++; |
brunofgc | 0:1c0a769988ee | 424 | } |
brunofgc | 0:1c0a769988ee | 425 | |
brunofgc | 0:1c0a769988ee | 426 | fclose(fpnew); |
brunofgc | 0:1c0a769988ee | 427 | fclose(fpold); |
brunofgc | 0:1c0a769988ee | 428 | |
brunofgc | 0:1c0a769988ee | 429 | fpnew = fopen(newfname, "r"); // Reopen dest to insure |
brunofgc | 0:1c0a769988ee | 430 | if(fpnew == NULL) { // that it was created. |
brunofgc | 0:1c0a769988ee | 431 | retval = (0); // Return Error. |
brunofgc | 0:1c0a769988ee | 432 | } |
brunofgc | 0:1c0a769988ee | 433 | else { |
brunofgc | 0:1c0a769988ee | 434 | fclose(fpnew); |
brunofgc | 0:1c0a769988ee | 435 | remove(oldfname); // Remove original file. |
brunofgc | 0:1c0a769988ee | 436 | retval = (1); // Return Success. |
brunofgc | 0:1c0a769988ee | 437 | } |
brunofgc | 7:ae9c47f62946 | 438 | sdCard::arquivosAbertos=false; |
brunofgc | 7:ae9c47f62946 | 439 | pc.printf("file_rename retval <%lu>.\r\n",retval); |
brunofgc | 0:1c0a769988ee | 440 | return (retval); |
brunofgc | 9:cf406384efd9 | 441 | }*/ |
brunofgc | 9:cf406384efd9 | 442 | |
brunofgc | 10:263c093f8977 | 443 | |
brunofgc | 10:263c093f8977 | 444 | |
brunofgc | 9:cf406384efd9 | 445 | //*********************************************************** |
brunofgc | 9:cf406384efd9 | 446 | // file_rename: renames a file (via copy & delete). |
brunofgc | 9:cf406384efd9 | 447 | // Moves data instead of adjusting the file name in the |
brunofgc | 9:cf406384efd9 | 448 | // file directory. Checks to insure the file was renamed. |
brunofgc | 9:cf406384efd9 | 449 | // Returns 0 = error; 1 = success |
brunofgc | 9:cf406384efd9 | 450 | //*********************************************************** |
brunofgc | 10:263c093f8977 | 451 | |
brunofgc | 10:263c093f8977 | 452 | |
brunofgc | 10:263c093f8977 | 453 | |
brunofgc | 9:cf406384efd9 | 454 | uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) { |
brunofgc | 14:c0162ab2a951 | 455 | /*if(remove(oldfname)<0){ |
brunofgc | 14:c0162ab2a951 | 456 | pc.printf("file_rename 1.\r\n"); |
brunofgc | 14:c0162ab2a951 | 457 | return 0; |
brunofgc | 14:c0162ab2a951 | 458 | } |
brunofgc | 14:c0162ab2a951 | 459 | if(rename(oldfname,newfname)<0){ |
brunofgc | 14:c0162ab2a951 | 460 | pc.printf("file_rename 2.\r\n"); |
brunofgc | 14:c0162ab2a951 | 461 | return 0; |
brunofgc | 14:c0162ab2a951 | 462 | }else{ |
brunofgc | 14:c0162ab2a951 | 463 | pc.printf("file_rename 3.\r\n"); |
brunofgc | 14:c0162ab2a951 | 464 | return 1; |
brunofgc | 14:c0162ab2a951 | 465 | }*/ |
brunofgc | 14:c0162ab2a951 | 466 | |
brunofgc | 9:cf406384efd9 | 467 | #define maxTamFileCopy 128 |
brunofgc | 9:cf406384efd9 | 468 | char bufCopy[maxTamFileCopy]; |
brunofgc | 9:cf406384efd9 | 469 | uint8_t retval = 0; |
brunofgc | 9:cf406384efd9 | 470 | uint32_t fileSize = 0; |
brunofgc | 9:cf406384efd9 | 471 | uint32_t fileNumParts = 0; |
brunofgc | 9:cf406384efd9 | 472 | uint32_t fileEnding=0; |
brunofgc | 9:cf406384efd9 | 473 | char ch; |
brunofgc | 10:263c093f8977 | 474 | uint32_t i,j; |
brunofgc | 10:263c093f8977 | 475 | if(!sdCard::arquivoAberto(30000)){return false;} |
brunofgc | 9:cf406384efd9 | 476 | FILE *fpold = fopen(oldfname, "r"); // src file |
brunofgc | 9:cf406384efd9 | 477 | |
brunofgc | 9:cf406384efd9 | 478 | if(fpold == NULL){ |
brunofgc | 9:cf406384efd9 | 479 | fclose(fpold); |
brunofgc | 9:cf406384efd9 | 480 | return 0; |
brunofgc | 9:cf406384efd9 | 481 | } |
brunofgc | 9:cf406384efd9 | 482 | |
brunofgc | 9:cf406384efd9 | 483 | sdCard::arquivosAbertos = true; |
brunofgc | 9:cf406384efd9 | 484 | |
brunofgc | 9:cf406384efd9 | 485 | FILE *fpnew = fopen(newfname, "w"); // dest file |
brunofgc | 9:cf406384efd9 | 486 | |
brunofgc | 9:cf406384efd9 | 487 | if(fpnew == NULL){ |
brunofgc | 9:cf406384efd9 | 488 | fclose(fpnew); |
brunofgc | 9:cf406384efd9 | 489 | return 0; |
brunofgc | 9:cf406384efd9 | 490 | sdCard::arquivosAbertos = false; |
brunofgc | 9:cf406384efd9 | 491 | } |
brunofgc | 9:cf406384efd9 | 492 | |
brunofgc | 9:cf406384efd9 | 493 | |
brunofgc | 9:cf406384efd9 | 494 | pc.printf("Iniciando copia.\n"); |
brunofgc | 9:cf406384efd9 | 495 | |
brunofgc | 9:cf406384efd9 | 496 | |
brunofgc | 9:cf406384efd9 | 497 | fseek(fpold, 0, SEEK_END); // seek to end of file |
brunofgc | 9:cf406384efd9 | 498 | fileSize = ftell(fpold); // get current file pointer |
brunofgc | 10:263c093f8977 | 499 | fseek(fpold, 0, SEEK_SET); // seek back to beginning of file |
brunofgc | 9:cf406384efd9 | 500 | |
brunofgc | 9:cf406384efd9 | 501 | |
brunofgc | 9:cf406384efd9 | 502 | fileNumParts = fileSize/maxTamFileCopy; |
brunofgc | 9:cf406384efd9 | 503 | fileEnding = fileSize%maxTamFileCopy; |
brunofgc | 9:cf406384efd9 | 504 | for(i=0;i<fileNumParts;i++){ |
brunofgc | 9:cf406384efd9 | 505 | for(j=0;j<maxTamFileCopy;j++){ |
brunofgc | 9:cf406384efd9 | 506 | bufCopy[j]=fgetc(fpold); |
brunofgc | 9:cf406384efd9 | 507 | } |
brunofgc | 9:cf406384efd9 | 508 | for(j=0;j<maxTamFileCopy;j++){ |
brunofgc | 9:cf406384efd9 | 509 | fputc(bufCopy[j],fpnew); |
brunofgc | 9:cf406384efd9 | 510 | } |
brunofgc | 9:cf406384efd9 | 511 | } |
brunofgc | 9:cf406384efd9 | 512 | for(j=0;j<fileEnding;j++){ |
brunofgc | 9:cf406384efd9 | 513 | bufCopy[j]=fgetc(fpold); |
brunofgc | 9:cf406384efd9 | 514 | } |
brunofgc | 9:cf406384efd9 | 515 | for(j=0;j<fileEnding;j++){ |
brunofgc | 9:cf406384efd9 | 516 | fputc(bufCopy[j],fpnew); |
brunofgc | 9:cf406384efd9 | 517 | } |
brunofgc | 9:cf406384efd9 | 518 | fclose(fpnew); |
brunofgc | 9:cf406384efd9 | 519 | fclose(fpold); |
brunofgc | 9:cf406384efd9 | 520 | |
brunofgc | 9:cf406384efd9 | 521 | fpnew = fopen(newfname, "r"); // Reopen dest to insure |
brunofgc | 9:cf406384efd9 | 522 | if(fpnew == NULL) { // that it was created. |
brunofgc | 9:cf406384efd9 | 523 | retval = (0); // Return Error. |
brunofgc | 9:cf406384efd9 | 524 | } |
brunofgc | 9:cf406384efd9 | 525 | else { |
brunofgc | 9:cf406384efd9 | 526 | fclose(fpnew); |
brunofgc | 9:cf406384efd9 | 527 | remove(oldfname); // Remove original file. |
brunofgc | 9:cf406384efd9 | 528 | retval = (1); // Return Success. |
brunofgc | 9:cf406384efd9 | 529 | } |
brunofgc | 9:cf406384efd9 | 530 | sdCard::arquivosAbertos=false; |
brunofgc | 9:cf406384efd9 | 531 | pc.printf("file_rename retval <%lu>.\r\n",retval); |
brunofgc | 14:c0162ab2a951 | 532 | |
brunofgc | 9:cf406384efd9 | 533 | return (retval); |
brunofgc | 14:c0162ab2a951 | 534 | |
brunofgc | 0:1c0a769988ee | 535 | } |