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