avec dfu

Fork of Utils by POTLESS

Committer:
POTLESS_2
Date:
Tue Feb 13 14:36:26 2018 +0000
Revision:
4:872676dd87a4
Parent:
3:01677db45b2a
Child:
5:0f3b6e6677ef
reprise de la fonction file exist

Who changed what in which revision?

UserRevisionLine numberNew contents of line
POTLESS_2 0:794c15bd30b0 1 #include "mbed.h"
POTLESS_2 0:794c15bd30b0 2 #include "Utils.h"
POTLESS_2 0:794c15bd30b0 3
POTLESS_2 0:794c15bd30b0 4 SDBlockDevice bd(SD_MOSI, SD_MISO, SD_SCK, SD_CS);
POTLESS_2 2:5af7a1fb1903 5 FATFileSystem Root("Root");
POTLESS_2 0:794c15bd30b0 6
POTLESS_2 3:01677db45b2a 7 int Exist_Val = 0;
POTLESS_2 3:01677db45b2a 8
POTLESS_2 0:794c15bd30b0 9 void return_error(int ret_val)
POTLESS_2 0:794c15bd30b0 10 {
POTLESS_2 4:872676dd87a4 11 Exist_Val = 0;
POTLESS_2 3:01677db45b2a 12 if (ret_val){
POTLESS_2 0:794c15bd30b0 13 printf(" Problème carte SD = %d\r\n", ret_val);
POTLESS_2 3:01677db45b2a 14 Exist_Val = 0;
POTLESS_2 3:01677db45b2a 15 }else{
POTLESS_2 0:794c15bd30b0 16 printf(" SD -> OK.\r\n");
POTLESS_2 3:01677db45b2a 17 Exist_Val = 1;
POTLESS_2 3:01677db45b2a 18 }
POTLESS_2 0:794c15bd30b0 19 }
POTLESS_2 0:794c15bd30b0 20
POTLESS_2 0:794c15bd30b0 21 void errno_error(void* ret_val)
POTLESS_2 0:794c15bd30b0 22 {
POTLESS_2 4:872676dd87a4 23 Exist_Val = 0;
POTLESS_2 3:01677db45b2a 24 if (ret_val == NULL){
POTLESS_2 0:794c15bd30b0 25 printf(" Problème carte SD = %d \r\n", errno);
POTLESS_2 3:01677db45b2a 26 Exist_Val = 0;
POTLESS_2 3:01677db45b2a 27 }else{
POTLESS_2 0:794c15bd30b0 28 printf(" SD -> OK.\r\n");
POTLESS_2 3:01677db45b2a 29 Exist_Val = 1;
POTLESS_2 3:01677db45b2a 30 }
POTLESS_2 0:794c15bd30b0 31 }
POTLESS_2 0:794c15bd30b0 32
POTLESS_2 0:794c15bd30b0 33 void UTILS::Store_A_Val(float Val_To_Store, char* File_Name)
POTLESS_2 0:794c15bd30b0 34 {
POTLESS_2 0:794c15bd30b0 35
POTLESS_2 0:794c15bd30b0 36 char filename[20];
POTLESS_2 2:5af7a1fb1903 37 sprintf(filename, "/Root/%s.txt", File_Name);
POTLESS_2 0:794c15bd30b0 38
POTLESS_2 0:794c15bd30b0 39 FILE* fd = fopen(filename, "w");
POTLESS_2 0:794c15bd30b0 40 errno_error(fd);
POTLESS_2 0:794c15bd30b0 41 fprintf(fd, "%f\r\n", Val_To_Store);
POTLESS_2 0:794c15bd30b0 42 fclose(fd);
POTLESS_2 0:794c15bd30b0 43
POTLESS_2 0:794c15bd30b0 44 printf(" \r\n %s sauvegardée = %f\r\n", filename, Val_To_Store);
POTLESS_2 0:794c15bd30b0 45
POTLESS_2 0:794c15bd30b0 46 }
POTLESS_2 0:794c15bd30b0 47
POTLESS_2 0:794c15bd30b0 48 float UTILS::Read_A_Val(char* File_Name)
POTLESS_2 0:794c15bd30b0 49 {
POTLESS_2 0:794c15bd30b0 50 char buffer[10] = {0};
POTLESS_2 0:794c15bd30b0 51 char c = {0};
POTLESS_2 0:794c15bd30b0 52 char *token;
POTLESS_2 0:794c15bd30b0 53 int i = 0;
POTLESS_2 0:794c15bd30b0 54
POTLESS_2 0:794c15bd30b0 55 char filename[20];
POTLESS_2 2:5af7a1fb1903 56 sprintf(filename, "/Root/%s.txt", File_Name);
POTLESS_2 0:794c15bd30b0 57
POTLESS_2 0:794c15bd30b0 58 printf(" \n Récupération de %s...\r\n", filename);
POTLESS_2 0:794c15bd30b0 59
POTLESS_2 0:794c15bd30b0 60 FILE* fd = fopen(filename, "r");
POTLESS_2 0:794c15bd30b0 61 errno_error(fd);
POTLESS_2 1:a937433a95c8 62
POTLESS_2 0:794c15bd30b0 63 while ((c != '\n') && (i < 10)) {
POTLESS_2 0:794c15bd30b0 64 c = fgetc(fd);
POTLESS_2 0:794c15bd30b0 65 buffer[i] = c;
POTLESS_2 0:794c15bd30b0 66 i++;
POTLESS_2 0:794c15bd30b0 67 }
POTLESS_2 0:794c15bd30b0 68
POTLESS_2 0:794c15bd30b0 69 token = strtok(buffer, "\n");
POTLESS_2 0:794c15bd30b0 70
POTLESS_2 0:794c15bd30b0 71 float val = atof(token);
POTLESS_2 0:794c15bd30b0 72
POTLESS_2 0:794c15bd30b0 73 printf(" Valeur Récupérée = %f\r\n", val);
POTLESS_2 0:794c15bd30b0 74
POTLESS_2 0:794c15bd30b0 75 fclose(fd);
POTLESS_2 0:794c15bd30b0 76
POTLESS_2 0:794c15bd30b0 77 return val;
POTLESS_2 0:794c15bd30b0 78 }
POTLESS_2 0:794c15bd30b0 79
POTLESS_2 0:794c15bd30b0 80
POTLESS_2 2:5af7a1fb1903 81 void UTILS::Write_SD_File(char* To_Store, char* File_Name)
POTLESS_2 0:794c15bd30b0 82 {
POTLESS_2 2:5af7a1fb1903 83 char filename[50];
POTLESS_2 2:5af7a1fb1903 84 sprintf(filename, "/Root/%s", (string)File_Name);
POTLESS_2 2:5af7a1fb1903 85
POTLESS_2 0:794c15bd30b0 86 FILE* fd = fopen(filename, "a");
POTLESS_2 2:5af7a1fb1903 87
POTLESS_2 0:794c15bd30b0 88 errno_error(fd);
POTLESS_2 0:794c15bd30b0 89 fprintf(fd, "%s\r\n", To_Store);
POTLESS_2 0:794c15bd30b0 90 fclose(fd);
POTLESS_2 0:794c15bd30b0 91
POTLESS_2 0:794c15bd30b0 92 //printf(" Sauvegarde OK\r\n\r\n");
POTLESS_2 0:794c15bd30b0 93 }
POTLESS_2 0:794c15bd30b0 94
POTLESS_2 2:5af7a1fb1903 95 void UTILS::Read_SD_File(char* File_Name)
POTLESS_2 0:794c15bd30b0 96 {
POTLESS_2 0:794c15bd30b0 97 char filename[20];
POTLESS_2 2:5af7a1fb1903 98 sprintf(filename, "/Root/%s", File_Name);
POTLESS_2 2:5af7a1fb1903 99
POTLESS_2 0:794c15bd30b0 100 FILE* fd = fopen(filename, "r");
POTLESS_2 0:794c15bd30b0 101 errno_error(fd);
POTLESS_2 0:794c15bd30b0 102
POTLESS_2 3:01677db45b2a 103 printf(" Contenu du fichier :\r\n\r\n");
POTLESS_2 0:794c15bd30b0 104 char buff[16] = {0};
POTLESS_2 0:794c15bd30b0 105 while (!feof(fd)) {
POTLESS_2 0:794c15bd30b0 106 int size = fread(&buff[0], 1, 15, fd);
POTLESS_2 0:794c15bd30b0 107 fwrite(&buff[0], 1, size, stdout);
POTLESS_2 0:794c15bd30b0 108 }
POTLESS_2 3:01677db45b2a 109 printf("\r\n Fin du fichier.\r\n");
POTLESS_2 0:794c15bd30b0 110 fclose(fd);
POTLESS_2 0:794c15bd30b0 111 }
POTLESS_2 0:794c15bd30b0 112
POTLESS_2 3:01677db45b2a 113 bool UTILS::File_Exist(char* File_Name)
POTLESS_2 3:01677db45b2a 114 {
POTLESS_2 3:01677db45b2a 115 char filename[20];
POTLESS_2 3:01677db45b2a 116 sprintf(filename, "/Root/%s.txt", File_Name);
POTLESS_2 3:01677db45b2a 117
POTLESS_2 3:01677db45b2a 118 FILE* fd = fopen(filename, "r");
POTLESS_2 3:01677db45b2a 119 errno_error(fd);
POTLESS_2 3:01677db45b2a 120
POTLESS_2 3:01677db45b2a 121 if (Exist_Val == 0){
POTLESS_2 4:872676dd87a4 122 printf(" Le fichier %s n'existe pas....\r\n", filename);
POTLESS_2 4:872676dd87a4 123 fclose(fd);
POTLESS_2 3:01677db45b2a 124 return false;
POTLESS_2 3:01677db45b2a 125 }else{
POTLESS_2 3:01677db45b2a 126 fclose(fd);
POTLESS_2 3:01677db45b2a 127 return true;
POTLESS_2 3:01677db45b2a 128 }
POTLESS_2 3:01677db45b2a 129 }
POTLESS_2 3:01677db45b2a 130
POTLESS_2 2:5af7a1fb1903 131 void UTILS::Delete_SD_File(char* File_Name)
POTLESS_2 0:794c15bd30b0 132 {
POTLESS_2 0:794c15bd30b0 133 char filename[20];
POTLESS_2 2:5af7a1fb1903 134 sprintf(filename, "/Root/%s", File_Name);
POTLESS_2 0:794c15bd30b0 135 int error = 0;
POTLESS_2 2:5af7a1fb1903 136 error = Root.remove(filename);
POTLESS_2 0:794c15bd30b0 137 return_error(error);
POTLESS_2 0:794c15bd30b0 138
POTLESS_2 0:794c15bd30b0 139 printf("Fichier effacé.\n");
POTLESS_2 0:794c15bd30b0 140 }
POTLESS_2 0:794c15bd30b0 141
POTLESS_2 4:872676dd87a4 142 void UTILS::Rename_SD_File(char* Old_File_Name, char* New_File_Name)
POTLESS_2 0:794c15bd30b0 143 {
POTLESS_2 0:794c15bd30b0 144 char Oldfilename[20];
POTLESS_2 2:5af7a1fb1903 145 sprintf(Oldfilename, "/Root/%s", Old_File_Name);
POTLESS_2 0:794c15bd30b0 146 char Newfilename[20];
POTLESS_2 2:5af7a1fb1903 147 sprintf(Newfilename, "/Root/%s", New_File_Name);
POTLESS_2 0:794c15bd30b0 148
POTLESS_2 0:794c15bd30b0 149 int error = 0;
POTLESS_2 2:5af7a1fb1903 150 error = Root.rename(Oldfilename, Newfilename);
POTLESS_2 0:794c15bd30b0 151 return_error(error);
POTLESS_2 0:794c15bd30b0 152
POTLESS_2 0:794c15bd30b0 153 printf("Fichier renommé.\n");
POTLESS_2 0:794c15bd30b0 154 }
POTLESS_2 0:794c15bd30b0 155
POTLESS_2 0:794c15bd30b0 156 void UTILS::Mount_SD()
POTLESS_2 0:794c15bd30b0 157 {
POTLESS_2 0:794c15bd30b0 158 //Montage carte SD
POTLESS_2 2:5af7a1fb1903 159 printf(" Montage carte SD \"/Root\". \r\n\r\n");
POTLESS_2 0:794c15bd30b0 160 int error = 0;
POTLESS_2 2:5af7a1fb1903 161 error = Root.mount(&bd);
POTLESS_2 0:794c15bd30b0 162 return_error(error);
POTLESS_2 1:a937433a95c8 163 if (error > 0) {
POTLESS_2 0:794c15bd30b0 164 //On re format s'il n'y a as de file system...normalement une seul fois...
POTLESS_2 0:794c15bd30b0 165 printf("Pas de File system, on format... ");
POTLESS_2 0:794c15bd30b0 166 Format_SD();
POTLESS_2 0:794c15bd30b0 167 }
POTLESS_2 0:794c15bd30b0 168 }
POTLESS_2 0:794c15bd30b0 169
POTLESS_2 0:794c15bd30b0 170 void UTILS::UnMount_SD()
POTLESS_2 0:794c15bd30b0 171 {
POTLESS_2 0:794c15bd30b0 172 //Montage carte SD
POTLESS_2 2:5af7a1fb1903 173 printf(" Demontage carte SD \"/Root\". \r\n\r\n");
POTLESS_2 0:794c15bd30b0 174 int error = 0;
POTLESS_2 2:5af7a1fb1903 175 error = Root.unmount();
POTLESS_2 0:794c15bd30b0 176 return_error(error);
POTLESS_2 0:794c15bd30b0 177 }
POTLESS_2 0:794c15bd30b0 178
POTLESS_2 0:794c15bd30b0 179 void UTILS::Format_SD()
POTLESS_2 0:794c15bd30b0 180 {
POTLESS_2 0:794c15bd30b0 181 //Formatage carte SD
POTLESS_2 0:794c15bd30b0 182 printf(" Formatage carte SD\r\n\r\n");
POTLESS_2 0:794c15bd30b0 183 int error = 0;
POTLESS_2 4:872676dd87a4 184 error = FATFileSystem::format(&bd);
POTLESS_2 2:5af7a1fb1903 185 return_error(error);
POTLESS_2 2:5af7a1fb1903 186 }
POTLESS_2 2:5af7a1fb1903 187
POTLESS_2 3:01677db45b2a 188 void UTILS::Dir_SD(char* Dir_Name)
POTLESS_2 2:5af7a1fb1903 189 {
POTLESS_2 2:5af7a1fb1903 190 int error = 0;
POTLESS_2 3:01677db45b2a 191 int nb = 0;
POTLESS_2 3:01677db45b2a 192 printf("\r\n Ouverture du répertoire %s\r\n", Dir_Name);
POTLESS_2 2:5af7a1fb1903 193 char Dirname[20];
POTLESS_2 2:5af7a1fb1903 194 sprintf(Dirname, "/Root/%s", Dir_Name);
POTLESS_2 2:5af7a1fb1903 195
POTLESS_2 2:5af7a1fb1903 196 DIR* dir = opendir(Dirname);
POTLESS_2 2:5af7a1fb1903 197 //errno_error(fd);
POTLESS_2 2:5af7a1fb1903 198
POTLESS_2 2:5af7a1fb1903 199 struct dirent* de;
POTLESS_2 3:01677db45b2a 200 printf(" Fichier du répertoire :\r\n\r\n");
POTLESS_2 2:5af7a1fb1903 201 while((de = readdir(dir)) != NULL)
POTLESS_2 2:5af7a1fb1903 202 {
POTLESS_2 2:5af7a1fb1903 203 printf(" %s\r\n", &(de->d_name)[0]);
POTLESS_2 3:01677db45b2a 204 nb++;
POTLESS_2 2:5af7a1fb1903 205 //wait_ms(100);
POTLESS_2 2:5af7a1fb1903 206 }
POTLESS_2 3:01677db45b2a 207 printf("\r\n Nombre de fichiers = %d\r\n", nb);
POTLESS_2 3:01677db45b2a 208 printf(" Fermeture du répertoire.\r\n");
POTLESS_2 4:872676dd87a4 209 //error = closedir(dir);
POTLESS_2 0:794c15bd30b0 210 return_error(error);
POTLESS_2 0:794c15bd30b0 211 }
POTLESS_2 0:794c15bd30b0 212
POTLESS_2 3:01677db45b2a 213 int UTILS::File_Index()
POTLESS_2 3:01677db45b2a 214 {
POTLESS_2 3:01677db45b2a 215 int error = 0;
POTLESS_2 3:01677db45b2a 216 int nb = 0;
POTLESS_2 3:01677db45b2a 217
POTLESS_2 3:01677db45b2a 218 DIR* dir = opendir("/Root/");
POTLESS_2 3:01677db45b2a 219 struct dirent* de;
POTLESS_2 3:01677db45b2a 220 while((de = readdir(dir)) != NULL)
POTLESS_2 3:01677db45b2a 221 {
POTLESS_2 3:01677db45b2a 222 nb++;
POTLESS_2 3:01677db45b2a 223 }
POTLESS_2 3:01677db45b2a 224 error = closedir(dir);
POTLESS_2 3:01677db45b2a 225 return_error(error);
POTLESS_2 3:01677db45b2a 226
POTLESS_2 3:01677db45b2a 227 return nb - 2;
POTLESS_2 3:01677db45b2a 228 }
POTLESS_2 3:01677db45b2a 229
POTLESS_2 0:794c15bd30b0 230 //Remapping d'une valeur dans une autre échelle
POTLESS_2 0:794c15bd30b0 231 float UTILS::Remap(float x, float in_min, float in_max, float out_min, float out_max)
POTLESS_2 0:794c15bd30b0 232 {
POTLESS_2 0:794c15bd30b0 233 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
POTLESS_2 0:794c15bd30b0 234 }
POTLESS_2 0:794c15bd30b0 235
POTLESS_2 0:794c15bd30b0 236 //Contraint une valeur entre deux limites
POTLESS_2 0:794c15bd30b0 237 float UTILS::constrain(float x, float a, float b)
POTLESS_2 0:794c15bd30b0 238 {
POTLESS_2 0:794c15bd30b0 239 if(x < a) {
POTLESS_2 0:794c15bd30b0 240 return a;
POTLESS_2 0:794c15bd30b0 241 } else if(b < x) {
POTLESS_2 0:794c15bd30b0 242 return b;
POTLESS_2 0:794c15bd30b0 243 } else
POTLESS_2 0:794c15bd30b0 244 return x;
POTLESS_2 0:794c15bd30b0 245 }