Uses NXP tutorial over 6 Axis Sensor and extends it to writing to csv files on the onboard sd-card.
Dependencies: FXOS8700Q SDFileSystem mbed
Fork of FRDMK64_SDCard by
main.cpp@0:e1c215fe231c, 2014-04-03 (annotated)
- Committer:
- Kojto
- Date:
- Thu Apr 03 09:07:18 2014 +0000
- Revision:
- 0:e1c215fe231c
- Child:
- 3:98c49df25889
initial version
Who changed what in which revision?
User | Revision | Line number | New 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 | } |