Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DS1820 HighSpeedAnalogIn devices mbed
Diff: funcoesSDCard.cpp
- Revision:
- 7:ae9c47f62946
- Parent:
- 2:55b7b466e742
- Child:
- 9:cf406384efd9
--- a/funcoesSDCard.cpp Thu Jun 15 12:50:58 2017 +0000
+++ b/funcoesSDCard.cpp Tue Jul 11 11:55:56 2017 +0000
@@ -7,6 +7,7 @@
arquivoSD sdCard::devices;
arquivoSD sdCard::status;
arquivoSD sdCard::tempFile;
+bool sdCard::arquivosAbertos=false;
char sdCard::nomeArquivoEmRecebimento[30];
@@ -18,12 +19,17 @@
bool sdCard::abreArquivo(arquivoSD *arquivo,char *mode){
//Struct do arquivo e seu nome
- if(arquivo->aberto){
- if(!fclose(arquivo->fp)){
- return false;
- }
+ /*uint32_t timeOut=30000;
+ while(timeOut && arquivo->aberto){
+ timeOut--;
+ osDelay(1);
}
-
+ if(arquivo->aberto){return false;}
+ */
+ if(!sdCard::arquivoAberto(15000)){return false;}
+
+ //pc.printf("Abrindo um arquivo de nome <%s> em modo <%s>.\r\n",arquivo->nome,mode);
+
//pc.printf("Abrindo arquivo <%s>.\n",arquivo->nome);
if((arquivo->fp = fopen(arquivo->nome,mode))!=NULL){
arquivo->aberto = true;
@@ -49,39 +55,39 @@
return sum;
}
-bool sdCard::insereDadosArquivoPeloNome(char *nome, char *dados,uint16_t tam){
+/*bool sdCard::insereDadosArquivoPeloNome(char *nome, char *dados,uint16_t tam){
FILE *fp;
fp = fopen(nome,"a");
uint16_t i;
if(fp!=NULL){
+ sdCard::arquivoAberto = true;
for(i=0;i<tam;i++){
fprintf(fp,"%c",dados[i]);
fflush(fp);
}
fclose(fp);
+ sdCard::arquivoAberto = false;
}else{
return false;
}
return true;
-}
+}*/
bool sdCard::insereDadosArquivo(arquivoSD *arquivo, char* data,uint16_t tam){
//Struct do arquivo, dados a inserir e tamanho deles
- uint16_t i;
-
- if(!sdCard::abreArquivo(arquivo,"a")){
- pc.printf("Erro abrindo %s .\n",arquivo->nome);
- if(!sdCard::fechaArquivo(arquivo)){
- return false;
- }
+ uint16_t i;
+ if(!sdCard::abreArquivo(arquivo,"a")){
+ sdCard::fechaArquivo(arquivo);
+ return false;
}
for(i=0;i<tam;i++){
- fprintf(arquivo->fp,"%c",data[i]);
+ //fprintf(arquivo->fp,"%c",data[i]);
+ fputc(data[i],arquivo->fp);
fflush(arquivo->fp);
- }
+ }
+ sdCard::fechaArquivo(arquivo);
- sdCard::fechaArquivo(arquivo);
return true;
}
bool sdCard::fechaArquivo(arquivoSD* arquivo){
@@ -91,23 +97,22 @@
return true;
}
-bool sdCard::excluiArquivo(arquivoSD *arquivo){
- bool retorno = true;
+bool sdCard::excluiArquivo(arquivoSD *arquivo){
if(arquivo->aberto){
- if(!sdCard::fechaArquivo(arquivo)){retorno = false;}
+ if(!sdCard::fechaArquivo(arquivo)){return false;}
}
- if(!remove(arquivo->nome)){retorno = false;}
- return retorno;
+ if(!remove(arquivo->nome)){return false;}
+ return true;
}
bool sdCard::exibeArquivo(arquivoSD *arquivo){
+ char c;
+ if(!sdCard::arquivoAberto(2000)){return false;}
if(!sdCard::abreArquivo(arquivo,"r")){
return false;
- }
+ }
- //rewind(arquivo->fp);
- char c;
pc.printf("\n\nInicio do arquivo %s.\n\n",arquivo->nome);
do{
@@ -129,10 +134,7 @@
strcpy(sdCard::status.nome,"/sd/RAD/status.txt");
strcpy(sdCard::tempFile.nome,"/sd/RAD/tempFile.bin");
-
-
-
- if(!sdCard::abreArquivo(&sdCard::config,"r")){
+ /*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
@@ -148,6 +150,7 @@
}
//Fechando arquivo de configuração;
fechaArquivo(&sdCard::config);
+ */
if(!sdCard::abreArquivo(&sdCard::devices,"r")){
pc.printf("Remota nao parametrizada!!!\n");
}else{
@@ -157,12 +160,8 @@
}
int sdCard::preparaEnvio(void){
- //Verifico se existe arquivo pendente de envio.
- if(sdCard::envio.aberto||sdCard::armazenamento.aberto){
- pc.printf("Um dos dois arquivos esta aberto. envio = %u, armazenamento = %u.\n",sdCard::envio.aberto,sdCard::armazenamento.aberto);
- return 2;
- }
-
+ //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");
@@ -170,29 +169,20 @@
return 1;
}
+ //Incluindo o status no envio
+ modemCom::writeStatusToSD();
+
if(sdCard::abreArquivo(&sdCard::armazenamento,"r")){
sdCard::fechaArquivo(&sdCard::armazenamento);
}else{
- pc.printf("Nao foi encontrado o arquivo de armazenamento em preparaEnvio.\n");
- //return 0;
- }
-
- //Incluindo o status no envio
- modemCom::writeStatusToSD();
-
- sdCard::armazenamento.aberto = true;
- sdCard::envio.aberto = true;
+ 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");
- sdCard::armazenamento.aberto = false;
- sdCard::envio.aberto = false;
+ pc.printf("Nao foi possivel renomear arquivo para envio.\n");
return 0;
- }
-
- sdCard::armazenamento.aberto = false;
- sdCard::envio.aberto = false;
- pc.printf("Renomeado.\n");
+ }
return 1;
}
@@ -204,22 +194,14 @@
bool sdCard::getFileTam(arquivoSD *arquivo){
uint32_t tam=0;
- uint8_t timeout = 50;
- while((timeout>0)&&(arquivo->aberto)){
- //Aguardo fechar o arquivo caso ele esteja aberto
- timeout--;
- osDelay(100);
- }
+ uint8_t timeOut = timeOutArquivoAberto;
+ if(!sdCard::arquivoAberto(5000)){return false;}
if(arquivo->aberto){
fechaArquivo(arquivo);
}
- if(sdCard::abreArquivo(arquivo,"r")){
- /*rewind(arquivo->fp);
- while(fgetc(arquivo->fp)!=EOF){
- tam++;
- }*/
+ 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
@@ -231,26 +213,17 @@
return true;
}
-bool sdCard::arquivoAberto(){
-/*extern arquivoSD envio;
- extern arquivoSD armazenamento;
- extern arquivoSD config;
- extern arquivoSD devices;
- extern arquivoSD status;
- extern arquivoSD tempFile;*/
- return (
- sdCard::envio.aberto
- ||
- sdCard::armazenamento.aberto
- ||
- sdCard::config.aberto
- ||
- sdCard::devices.aberto
- ||
- sdCard::status.aberto
- ||
- sdCard::tempFile.aberto
- );
+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)
+ &&
+ timeOut){
+ timeOut--;
+ if((timeOut%1000)==0){pc.printf("Timeout em arquivoAberto()<%lu>.\r\n",timeOut);}
+ osDelay(1);
+ }
+ if(timeOut){return true;}
+ else{return false;}
}
@@ -260,20 +233,28 @@
// file directory. Checks to insure the file was renamed.
// Returns -1 = error; 0 = success
//***********************************************************
-uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) {
+uint8_t sdCard::file_rename(const char *oldfname, const char *newfname) {
+ //rename(oldfname,newfname);
int retval = 0;
int ch;
- sdCard::envio.bytes=0;
-
+ sdCard::envio.bytes=0;
+
+ if(!sdCard::arquivoAberto(30000)){return false;}
+
+
FILE *fpold = fopen(oldfname, "r"); // src file
+
if(fpold == NULL){
- fclose(fpold);
+ pc.printf("file_rename 4.\r\n");
+ fclose(fpold);
return 0;
}
FILE *fpnew = fopen(newfname, "w"); // dest file
- if(fpnew == NULL){
- fclose(fpnew);
+
+ if(fpnew == NULL){
+
+ fclose(fpnew);
return 0;
}
@@ -299,5 +280,7 @@
remove(oldfname); // Remove original file.
retval = (1); // Return Success.
}
+ sdCard::arquivosAbertos=false;
+ pc.printf("file_rename retval <%lu>.\r\n",retval);
return (retval);
}