SD card example with the file system (complete). Created for FTF2014

Dependencies:   SDFileSystem mbed

Fork of FRDMK64_SDCard by Freescale

Committer:
Kojto
Date:
Mon Apr 07 20:33:11 2014 +0000
Revision:
2:df0ff4f12345
Parent:
0:e1c215fe231c
mbed-src replaced by mbed lib v82

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 0:e1c215fe231c 1 #include "mbed.h"
Kojto 0:e1c215fe231c 2 #include "SDFileSystem.h"
Kojto 0:e1c215fe231c 3
Kojto 0:e1c215fe231c 4 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS
Kojto 0:e1c215fe231c 5 Serial pc(USBTX, USBRX);
Kojto 0:e1c215fe231c 6 FILE *fp;
Kojto 0:e1c215fe231c 7
Kojto 0:e1c215fe231c 8 int file_copy(const char *src, const char *dst)
Kojto 0:e1c215fe231c 9 {
Kojto 0:e1c215fe231c 10 int retval = 0;
Kojto 0:e1c215fe231c 11 int ch;
Kojto 0:e1c215fe231c 12
Kojto 0:e1c215fe231c 13 FILE *fpsrc = fopen(src, "r"); // src file
Kojto 0:e1c215fe231c 14 FILE *fpdst = fopen(dst, "w"); // dest file
Kojto 0:e1c215fe231c 15
Kojto 0:e1c215fe231c 16 while (1) { // Copy src to dest
Kojto 0:e1c215fe231c 17 ch = fgetc(fpsrc); // until src EOF read.
Kojto 0:e1c215fe231c 18 if (ch == EOF) break;
Kojto 0:e1c215fe231c 19 fputc(ch, fpdst);
Kojto 0:e1c215fe231c 20 }
Kojto 0:e1c215fe231c 21 fclose(fpsrc);
Kojto 0:e1c215fe231c 22 fclose(fpdst);
Kojto 0:e1c215fe231c 23
Kojto 0:e1c215fe231c 24 fpdst = fopen(dst, "r"); // Reopen dest to insure
Kojto 0:e1c215fe231c 25 if (fpdst == NULL) { // that it was created.
Kojto 0:e1c215fe231c 26 retval = -1; // Return error.
Kojto 0:e1c215fe231c 27 } else {
Kojto 0:e1c215fe231c 28 fclose(fpdst);
Kojto 0:e1c215fe231c 29 retval = 0; // Return success.
Kojto 0:e1c215fe231c 30 }
Kojto 0:e1c215fe231c 31 return retval;
Kojto 0:e1c215fe231c 32 }
Kojto 0:e1c215fe231c 33
Kojto 0:e1c215fe231c 34 uint32_t do_list(const char *fsrc)
Kojto 0:e1c215fe231c 35 {
Kojto 0:e1c215fe231c 36 DIR *d = opendir(fsrc);
Kojto 0:e1c215fe231c 37 struct dirent *p;
Kojto 0:e1c215fe231c 38 uint32_t counter = 0;
Kojto 0:e1c215fe231c 39
Kojto 0:e1c215fe231c 40 while ((p = readdir(d)) != NULL) {
Kojto 0:e1c215fe231c 41 counter++;
Kojto 0:e1c215fe231c 42 printf("%s\n", p->d_name);
Kojto 0:e1c215fe231c 43 }
Kojto 0:e1c215fe231c 44 closedir(d);
Kojto 0:e1c215fe231c 45 return counter;
Kojto 0:e1c215fe231c 46 }
Kojto 0:e1c215fe231c 47
Kojto 0:e1c215fe231c 48 // bool is_folder(const char *fdir)
Kojto 0:e1c215fe231c 49 // {
Kojto 0:e1c215fe231c 50 // DIR *dir = opendir(fdir);
Kojto 0:e1c215fe231c 51 // if (dir) {
Kojto 0:e1c215fe231c 52 // closedir(dir);
Kojto 0:e1c215fe231c 53 // }
Kojto 0:e1c215fe231c 54 // return (dir != NULL);
Kojto 0:e1c215fe231c 55
Kojto 0:e1c215fe231c 56 // }
Kojto 0:e1c215fe231c 57
Kojto 0:e1c215fe231c 58 // bool is_file(const char *ffile)
Kojto 0:e1c215fe231c 59 // {
Kojto 0:e1c215fe231c 60 // FILE *fp = fopen(ffile, "r");
Kojto 0:e1c215fe231c 61 // if (fp) {
Kojto 0:e1c215fe231c 62 // fclose(fp);
Kojto 0:e1c215fe231c 63 // }
Kojto 0:e1c215fe231c 64 // return (fp != NULL);
Kojto 0:e1c215fe231c 65 // }
Kojto 0:e1c215fe231c 66
Kojto 0:e1c215fe231c 67 void do_remove(const char *fsrc)
Kojto 0:e1c215fe231c 68 {
Kojto 0:e1c215fe231c 69 DIR *d = opendir(fsrc);
Kojto 0:e1c215fe231c 70 struct dirent *p;
Kojto 0:e1c215fe231c 71 char path[30] = {0};
Kojto 0:e1c215fe231c 72 while((p = readdir(d)) != NULL) {
Kojto 0:e1c215fe231c 73 strcpy(path, fsrc);
Kojto 0:e1c215fe231c 74 strcat(path, "/");
Kojto 0:e1c215fe231c 75 strcat(path, p->d_name);
Kojto 0:e1c215fe231c 76 remove(path);
Kojto 0:e1c215fe231c 77 }
Kojto 0:e1c215fe231c 78 closedir(d);
Kojto 0:e1c215fe231c 79 remove(fsrc);
Kojto 0:e1c215fe231c 80 }
Kojto 0:e1c215fe231c 81
Kojto 0:e1c215fe231c 82 int main()
Kojto 0:e1c215fe231c 83 {
Kojto 0:e1c215fe231c 84 pc.printf("Initializing \n");
Kojto 0:e1c215fe231c 85 wait(2);
Kojto 0:e1c215fe231c 86
Kojto 0:e1c215fe231c 87 do_remove("/sd/test1"); /* clean up from the previous Lab 5 if was executed */
Kojto 0:e1c215fe231c 88 if (do_list("/sd") == 0) {
Kojto 0:e1c215fe231c 89 printf("No files/directories on the sd card.");
Kojto 0:e1c215fe231c 90 }
Kojto 0:e1c215fe231c 91
Kojto 0:e1c215fe231c 92 printf("\nCreating two folders. \n");
Kojto 0:e1c215fe231c 93 mkdir("/sd/test1", 0777);
Kojto 0:e1c215fe231c 94 mkdir("/sd/test2", 0777);
Kojto 0:e1c215fe231c 95
Kojto 0:e1c215fe231c 96 fp = fopen("/sd/test1/1.txt", "w");
Kojto 0:e1c215fe231c 97 if (fp == NULL) {
Kojto 0:e1c215fe231c 98 pc.printf("Unable to write the file \n");
Kojto 0:e1c215fe231c 99 } else {
Kojto 0:e1c215fe231c 100 fprintf(fp, "1.txt in test 1");
Kojto 0:e1c215fe231c 101 fclose(fp);
Kojto 0:e1c215fe231c 102 }
Kojto 0:e1c215fe231c 103
Kojto 0:e1c215fe231c 104 fp = fopen("/sd/test2/2.txt", "w");
Kojto 0:e1c215fe231c 105 if (fp == NULL) {
Kojto 0:e1c215fe231c 106 pc.printf("Unable to write the file \n");
Kojto 0:e1c215fe231c 107 } else {
Kojto 0:e1c215fe231c 108 fprintf(fp, "2.txt in test 2");
Kojto 0:e1c215fe231c 109 fclose(fp);
Kojto 0:e1c215fe231c 110 }
Kojto 0:e1c215fe231c 111
Kojto 0:e1c215fe231c 112 printf("\nList all directories/files /sd.\n");
Kojto 0:e1c215fe231c 113 do_list("/sd");
Kojto 0:e1c215fe231c 114
Kojto 0:e1c215fe231c 115 printf("\nList all files within /sd/test1.\n");
Kojto 0:e1c215fe231c 116 do_list("/sd/test1");
Kojto 0:e1c215fe231c 117
Kojto 0:e1c215fe231c 118
Kojto 0:e1c215fe231c 119 printf("\nList all files within /sd/test2.\n");
Kojto 0:e1c215fe231c 120 do_list("/sd/test2");
Kojto 0:e1c215fe231c 121
Kojto 0:e1c215fe231c 122 int status = file_copy("/sd/test2/2.txt", "/sd/test1/2_copy.txt");
Kojto 0:e1c215fe231c 123 if (status == -1) {
Kojto 0:e1c215fe231c 124 printf("Error, file was not copied.\n");
Kojto 0:e1c215fe231c 125 }
Kojto 0:e1c215fe231c 126 printf("Removing test2 folder and 2.txt file inside.");
Kojto 0:e1c215fe231c 127 remove("/sd/test2/2.txt");
Kojto 0:e1c215fe231c 128 remove("/sd/test2");
Kojto 0:e1c215fe231c 129
Kojto 0:e1c215fe231c 130 printf("\nList all directories/files /sd.\n");
Kojto 0:e1c215fe231c 131 do_list("/sd");
Kojto 0:e1c215fe231c 132
Kojto 0:e1c215fe231c 133 printf("\nList all files within /sd/test1.\n");
Kojto 0:e1c215fe231c 134 do_list("/sd/test1");
Kojto 0:e1c215fe231c 135
Kojto 0:e1c215fe231c 136 printf("\nEnd of complete Lab 5. \n");
Kojto 0:e1c215fe231c 137 }