Versión sin post-procesado del software del VmRideR

Dependencies:   mbed

Committer:
jjmedina
Date:
Mon Jun 15 15:44:11 2015 +0000
Revision:
1:a3c9b672b8e2
Parent:
0:3d456b8ce449
Prueba_deutsch

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JuanManuelAmador 0:3d456b8ce449 1 #include "SistemaArchivos.h"
JuanManuelAmador 0:3d456b8ce449 2
JuanManuelAmador 0:3d456b8ce449 3 extern ScreenManager SC;
JuanManuelAmador 0:3d456b8ce449 4 extern MSCFileSystem msc;
JuanManuelAmador 0:3d456b8ce449 5
JuanManuelAmador 0:3d456b8ce449 6 extern DigitalOut myled;
JuanManuelAmador 0:3d456b8ce449 7
JuanManuelAmador 0:3d456b8ce449 8 SistemaArchivos::SistemaArchivos(){
JuanManuelAmador 0:3d456b8ce449 9 nViajes = 0;
JuanManuelAmador 0:3d456b8ce449 10 }
JuanManuelAmador 0:3d456b8ce449 11
JuanManuelAmador 0:3d456b8ce449 12 void SistemaArchivos::addElement(char newElement[]){
JuanManuelAmador 0:3d456b8ce449 13 FILE* file = fopen("/local/RideList.vme","a");
JuanManuelAmador 0:3d456b8ce449 14 fprintf(file, "%s\n", newElement);
JuanManuelAmador 0:3d456b8ce449 15 fclose(file);
JuanManuelAmador 0:3d456b8ce449 16 }
JuanManuelAmador 0:3d456b8ce449 17
JuanManuelAmador 0:3d456b8ce449 18 int SistemaArchivos::reloadRideNames(){
JuanManuelAmador 0:3d456b8ce449 19 // Se reinicia el número de viajes
JuanManuelAmador 0:3d456b8ce449 20 nViajes = 0;
JuanManuelAmador 0:3d456b8ce449 21 // Se abre el archivo de nombres de viajes
JuanManuelAmador 0:3d456b8ce449 22 FILE* file = fopen("/local/RideList.vme","r");
JuanManuelAmador 0:3d456b8ce449 23 if(file == NULL){
JuanManuelAmador 0:3d456b8ce449 24 return 1;
JuanManuelAmador 0:3d456b8ce449 25 }else{
JuanManuelAmador 0:3d456b8ce449 26 while(!feof(file)){ // Mientras no se haya llegado al fin de fichero
JuanManuelAmador 0:3d456b8ce449 27 //strcpy(names[nViajes], readTextLine(file));
JuanManuelAmador 0:3d456b8ce449 28 fgets(names[nViajes], NCARACTERES, file);
JuanManuelAmador 0:3d456b8ce449 29 // Se borra el último caracter de la cadena, el caracter '\n'
JuanManuelAmador 0:3d456b8ce449 30 deleteLastChar(names[nViajes]);
JuanManuelAmador 0:3d456b8ce449 31 //fscanf(file, "%s", names[nViajes]);
JuanManuelAmador 0:3d456b8ce449 32 nViajes++;
JuanManuelAmador 0:3d456b8ce449 33 }
JuanManuelAmador 0:3d456b8ce449 34 // La última cadena es '\n', esta no se contara como cadena
JuanManuelAmador 0:3d456b8ce449 35 nViajes--;
JuanManuelAmador 0:3d456b8ce449 36 fclose(file);
JuanManuelAmador 0:3d456b8ce449 37 return 0;
JuanManuelAmador 0:3d456b8ce449 38 }
JuanManuelAmador 0:3d456b8ce449 39 }
JuanManuelAmador 0:3d456b8ce449 40
JuanManuelAmador 0:3d456b8ce449 41 int SistemaArchivos::deleteRide(char *fileName){ // Borra los archivos asociados a un viaje, y lo borra de la lista de viajes
JuanManuelAmador 0:3d456b8ce449 42 char file[64];
JuanManuelAmador 0:3d456b8ce449 43
JuanManuelAmador 0:3d456b8ce449 44 // Primero se intenta borrar el archivo de la memoria flash
JuanManuelAmador 0:3d456b8ce449 45 strcpy(file, "/usb/");
JuanManuelAmador 0:3d456b8ce449 46 strcat(file, fileName);
JuanManuelAmador 0:3d456b8ce449 47 strcat(file, ".txt");
JuanManuelAmador 0:3d456b8ce449 48
JuanManuelAmador 0:3d456b8ce449 49 if(remove(file) != 0){ // Si no se pudo borrar se devuelve un 1
JuanManuelAmador 0:3d456b8ce449 50 return 1;
JuanManuelAmador 0:3d456b8ce449 51 }else{ // Si se borró el archivo se borra también de la lista de viajes
JuanManuelAmador 0:3d456b8ce449 52 // Para ello primero se borra el viaje del array "names"
JuanManuelAmador 0:3d456b8ce449 53 // Procedimiento:
JuanManuelAmador 0:3d456b8ce449 54 // - Se busca el nombre en la lista
JuanManuelAmador 0:3d456b8ce449 55 // - Una vez encontrada su posición todos los elementos por debajo de este se suben una posición
JuanManuelAmador 0:3d456b8ce449 56 int pos = 0;
JuanManuelAmador 0:3d456b8ce449 57
JuanManuelAmador 0:3d456b8ce449 58 // - Se busca el nombre en la lista
JuanManuelAmador 0:3d456b8ce449 59 while(strcmp(names[pos], fileName)){
JuanManuelAmador 0:3d456b8ce449 60 pos++;
JuanManuelAmador 0:3d456b8ce449 61 }
JuanManuelAmador 0:3d456b8ce449 62
JuanManuelAmador 0:3d456b8ce449 63 // En este momento la variable "pos" guarda la posición de memoria de el elemento a borrar
JuanManuelAmador 0:3d456b8ce449 64 // Se aumenta en uno este índice para subir de posición los elementos por debajo de este
JuanManuelAmador 0:3d456b8ce449 65 pos++;
JuanManuelAmador 0:3d456b8ce449 66
JuanManuelAmador 0:3d456b8ce449 67 // - Una vez encontrada su posición todos los elementos por debajo de este se suben una posición
JuanManuelAmador 0:3d456b8ce449 68 for (int i = pos; i < nViajes; i++){
JuanManuelAmador 0:3d456b8ce449 69 strcpy(names[i-1], names[i]);
JuanManuelAmador 0:3d456b8ce449 70 }
JuanManuelAmador 0:3d456b8ce449 71
JuanManuelAmador 0:3d456b8ce449 72 // El número de viajes es una unidad menor
JuanManuelAmador 0:3d456b8ce449 73 nViajes--;
JuanManuelAmador 0:3d456b8ce449 74
JuanManuelAmador 0:3d456b8ce449 75 // Se guarda la nueva lista de viajes
JuanManuelAmador 0:3d456b8ce449 76 saveRideList();
JuanManuelAmador 0:3d456b8ce449 77
JuanManuelAmador 0:3d456b8ce449 78 return 0;
JuanManuelAmador 0:3d456b8ce449 79 }
JuanManuelAmador 0:3d456b8ce449 80 }
JuanManuelAmador 0:3d456b8ce449 81
JuanManuelAmador 0:3d456b8ce449 82 int SistemaArchivos::renameRide(char *fileName, char *newName){ // Cambia el nombre de los archivos asociados a un viaje, y de la lista de viajes
JuanManuelAmador 0:3d456b8ce449 83 char oldFile[64];
JuanManuelAmador 0:3d456b8ce449 84 char newFile[64];
JuanManuelAmador 0:3d456b8ce449 85
JuanManuelAmador 0:3d456b8ce449 86 // Primero se intenta cambiar el nombre del archivo de la memoria flash
JuanManuelAmador 0:3d456b8ce449 87 strcpy(oldFile, "/usb/");
JuanManuelAmador 0:3d456b8ce449 88 strcat(oldFile, fileName);
JuanManuelAmador 0:3d456b8ce449 89 strcat(oldFile, ".txt");
JuanManuelAmador 0:3d456b8ce449 90
JuanManuelAmador 0:3d456b8ce449 91 strcpy(newFile, "/usb/");
JuanManuelAmador 0:3d456b8ce449 92 strcat(newFile, newName);
JuanManuelAmador 0:3d456b8ce449 93 strcat(newFile, ".txt");
JuanManuelAmador 0:3d456b8ce449 94
JuanManuelAmador 0:3d456b8ce449 95 if(file_rename(oldFile, newFile) != 0){ // Si no se pudo borrar se devuelve un 1
JuanManuelAmador 0:3d456b8ce449 96 return 1;
JuanManuelAmador 0:3d456b8ce449 97 }else{ // Si se cambió el nombre del archivo también se cambia el nombre en la lista de viajes
JuanManuelAmador 0:3d456b8ce449 98 // Procedimiento:
JuanManuelAmador 0:3d456b8ce449 99 // - Se busca el nombre antiguo en la lista
JuanManuelAmador 0:3d456b8ce449 100 // - Una vez encontrada su posición se cambia su nombre
JuanManuelAmador 0:3d456b8ce449 101 int pos = 0;
JuanManuelAmador 0:3d456b8ce449 102
JuanManuelAmador 0:3d456b8ce449 103 // - Se busca el nombre antiguo en la lista
JuanManuelAmador 0:3d456b8ce449 104 while(strcmp(names[pos], fileName)){
JuanManuelAmador 0:3d456b8ce449 105 pos++;
JuanManuelAmador 0:3d456b8ce449 106 }
JuanManuelAmador 0:3d456b8ce449 107
JuanManuelAmador 0:3d456b8ce449 108 // - Una vez encontrada su posición se cambia su nombre
JuanManuelAmador 0:3d456b8ce449 109 strcpy(names[pos], newName);
JuanManuelAmador 0:3d456b8ce449 110
JuanManuelAmador 0:3d456b8ce449 111 // Se guarda la nueva lista de viajes
JuanManuelAmador 0:3d456b8ce449 112 saveRideList();
JuanManuelAmador 0:3d456b8ce449 113
JuanManuelAmador 0:3d456b8ce449 114 return 0;
JuanManuelAmador 0:3d456b8ce449 115 }
JuanManuelAmador 0:3d456b8ce449 116 }
JuanManuelAmador 0:3d456b8ce449 117
JuanManuelAmador 0:3d456b8ce449 118 bool SistemaArchivos::alredyExist(char *name){
JuanManuelAmador 0:3d456b8ce449 119 bool value = false;
JuanManuelAmador 0:3d456b8ce449 120 for(int i = 0; i < nViajes; i++){
JuanManuelAmador 0:3d456b8ce449 121 if(!strcmp(names[i], name)){
JuanManuelAmador 0:3d456b8ce449 122 value = true;
JuanManuelAmador 0:3d456b8ce449 123 }
JuanManuelAmador 0:3d456b8ce449 124 }
JuanManuelAmador 0:3d456b8ce449 125 return value;
JuanManuelAmador 0:3d456b8ce449 126 }
JuanManuelAmador 0:3d456b8ce449 127
JuanManuelAmador 0:3d456b8ce449 128 void SistemaArchivos::saveRideList(){
JuanManuelAmador 0:3d456b8ce449 129 // Se sobreescribe el archivo "RideList.vme" con la lista de el array nombres
JuanManuelAmador 0:3d456b8ce449 130 FILE* file = fopen("/local/RideList.vme","w");
JuanManuelAmador 0:3d456b8ce449 131 for(int i = 0; i < nViajes; i++){
JuanManuelAmador 0:3d456b8ce449 132 fprintf(file, "%s\n", names[i]);
JuanManuelAmador 0:3d456b8ce449 133 }
JuanManuelAmador 0:3d456b8ce449 134 fclose(file);
JuanManuelAmador 0:3d456b8ce449 135 }
JuanManuelAmador 0:3d456b8ce449 136
JuanManuelAmador 0:3d456b8ce449 137 char* SistemaArchivos::getNameRide(int nameNumber){
JuanManuelAmador 0:3d456b8ce449 138 return names[nameNumber];
JuanManuelAmador 0:3d456b8ce449 139 }
JuanManuelAmador 0:3d456b8ce449 140
JuanManuelAmador 0:3d456b8ce449 141 int SistemaArchivos::getNrides(){
JuanManuelAmador 0:3d456b8ce449 142 return nViajes;
JuanManuelAmador 0:3d456b8ce449 143 }
JuanManuelAmador 0:3d456b8ce449 144
JuanManuelAmador 0:3d456b8ce449 145 //***********************************************************
JuanManuelAmador 0:3d456b8ce449 146 // file_rename: renames a file.
JuanManuelAmador 0:3d456b8ce449 147 // Kind of hoakey as it moves data instead of adjusting
JuanManuelAmador 0:3d456b8ce449 148 // the file name in the directory.
JuanManuelAmador 0:3d456b8ce449 149 // Checks to insure the file was renamed.
JuanManuelAmador 0:3d456b8ce449 150 // Returns -1 = error; 0 = success
JuanManuelAmador 0:3d456b8ce449 151 //***********************************************************
JuanManuelAmador 0:3d456b8ce449 152 int SistemaArchivos::file_rename(const char *oldfile, const char *newfile) {
JuanManuelAmador 0:3d456b8ce449 153 int retval = 0;
JuanManuelAmador 0:3d456b8ce449 154 int ch;
JuanManuelAmador 0:3d456b8ce449 155
JuanManuelAmador 0:3d456b8ce449 156 FILE *fpold = fopen(oldfile, "r");
JuanManuelAmador 0:3d456b8ce449 157 if(fpold == NULL) {
JuanManuelAmador 0:3d456b8ce449 158 retval = (-1);
JuanManuelAmador 0:3d456b8ce449 159 }else{
JuanManuelAmador 0:3d456b8ce449 160 FILE *fpnew = fopen(newfile, "w");
JuanManuelAmador 0:3d456b8ce449 161
JuanManuelAmador 0:3d456b8ce449 162 while (1) {
JuanManuelAmador 0:3d456b8ce449 163 ch = fgetc(fpold);
JuanManuelAmador 0:3d456b8ce449 164 if (ch == EOF) break;
JuanManuelAmador 0:3d456b8ce449 165 fputc(ch, fpnew);
JuanManuelAmador 0:3d456b8ce449 166 }
JuanManuelAmador 0:3d456b8ce449 167
JuanManuelAmador 0:3d456b8ce449 168 fclose(fpnew);
JuanManuelAmador 0:3d456b8ce449 169 fclose(fpold);
JuanManuelAmador 0:3d456b8ce449 170
JuanManuelAmador 0:3d456b8ce449 171 fpnew = fopen(newfile, "r");
JuanManuelAmador 0:3d456b8ce449 172 if(fpnew == NULL) {
JuanManuelAmador 0:3d456b8ce449 173 retval = (-1);
JuanManuelAmador 0:3d456b8ce449 174 }
JuanManuelAmador 0:3d456b8ce449 175 else {
JuanManuelAmador 0:3d456b8ce449 176 remove(oldfile);
JuanManuelAmador 0:3d456b8ce449 177 }
JuanManuelAmador 0:3d456b8ce449 178 fclose(fpnew);
JuanManuelAmador 0:3d456b8ce449 179 }
JuanManuelAmador 0:3d456b8ce449 180 return (retval);
JuanManuelAmador 0:3d456b8ce449 181 }
JuanManuelAmador 0:3d456b8ce449 182
JuanManuelAmador 0:3d456b8ce449 183 void SistemaArchivos::deleteLastChar(char *str){ // Borra el último caracter de una cadena
JuanManuelAmador 0:3d456b8ce449 184 str[strlen(str)-1] = '\0';
JuanManuelAmador 0:3d456b8ce449 185 }
JuanManuelAmador 0:3d456b8ce449 186