Næþ'n Lasseter
/
FLFsT
Flash Local Filesystem Test Program
main.cpp@0:ad25de01864e, 2010-03-24 (annotated)
- Committer:
- User_4574
- Date:
- Wed Mar 24 00:02:31 2010 +0000
- Revision:
- 0:ad25de01864e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
User_4574 | 0:ad25de01864e | 1 | #include "mbed.h" |
User_4574 | 0:ad25de01864e | 2 | |
User_4574 | 0:ad25de01864e | 3 | Serial pc(USBTX, USBRX); |
User_4574 | 0:ad25de01864e | 4 | LocalFileSystem local("local"); |
User_4574 | 0:ad25de01864e | 5 | |
User_4574 | 0:ad25de01864e | 6 | void get_from_pc(char* buffer) { |
User_4574 | 0:ad25de01864e | 7 | char c; |
User_4574 | 0:ad25de01864e | 8 | int i; |
User_4574 | 0:ad25de01864e | 9 | for (i=0; i<64; i++) buffer[i] = '\0'; |
User_4574 | 0:ad25de01864e | 10 | i=0; |
User_4574 | 0:ad25de01864e | 11 | pc.printf(": "); |
User_4574 | 0:ad25de01864e | 12 | while ((i<64) && ((c = pc.getc()) != '\n')) { |
User_4574 | 0:ad25de01864e | 13 | if (c == 0x7f) { |
User_4574 | 0:ad25de01864e | 14 | if (i>0) { |
User_4574 | 0:ad25de01864e | 15 | i--; |
User_4574 | 0:ad25de01864e | 16 | buffer[i] = '\0'; |
User_4574 | 0:ad25de01864e | 17 | pc.putc(8); |
User_4574 | 0:ad25de01864e | 18 | pc.putc(' '); |
User_4574 | 0:ad25de01864e | 19 | pc.putc(8); |
User_4574 | 0:ad25de01864e | 20 | } |
User_4574 | 0:ad25de01864e | 21 | } else { |
User_4574 | 0:ad25de01864e | 22 | pc.putc(c); |
User_4574 | 0:ad25de01864e | 23 | buffer[i] = c; |
User_4574 | 0:ad25de01864e | 24 | i++; |
User_4574 | 0:ad25de01864e | 25 | } |
User_4574 | 0:ad25de01864e | 26 | } |
User_4574 | 0:ad25de01864e | 27 | pc.printf("\n\r"); |
User_4574 | 0:ad25de01864e | 28 | } |
User_4574 | 0:ad25de01864e | 29 | |
User_4574 | 0:ad25de01864e | 30 | void ls() { |
User_4574 | 0:ad25de01864e | 31 | DIR* d = opendir("/local"); |
User_4574 | 0:ad25de01864e | 32 | struct dirent *p; |
User_4574 | 0:ad25de01864e | 33 | while ((p=readdir(d)) != NULL) pc.printf("%s\n\r", p->d_name); |
User_4574 | 0:ad25de01864e | 34 | closedir(d); |
User_4574 | 0:ad25de01864e | 35 | } |
User_4574 | 0:ad25de01864e | 36 | |
User_4574 | 0:ad25de01864e | 37 | void cat(char* buffer) { |
User_4574 | 0:ad25de01864e | 38 | int i; |
User_4574 | 0:ad25de01864e | 39 | signed char c; |
User_4574 | 0:ad25de01864e | 40 | char filepath[19] = "/local/"; |
User_4574 | 0:ad25de01864e | 41 | for (i=0;i<60;i++) buffer[i] = buffer[i+4]; |
User_4574 | 0:ad25de01864e | 42 | for (i=7;i<19;i++) filepath[i] = buffer[i-7]; |
User_4574 | 0:ad25de01864e | 43 | FILE* file = fopen(filepath, "r"); |
User_4574 | 0:ad25de01864e | 44 | while ((c=fgetc(file)) != EOF) { |
User_4574 | 0:ad25de01864e | 45 | pc.putc(c); |
User_4574 | 0:ad25de01864e | 46 | if (c == '\n') pc.putc('\r'); |
User_4574 | 0:ad25de01864e | 47 | } |
User_4574 | 0:ad25de01864e | 48 | fclose(file); |
User_4574 | 0:ad25de01864e | 49 | pc.printf("\r"); |
User_4574 | 0:ad25de01864e | 50 | } |
User_4574 | 0:ad25de01864e | 51 | |
User_4574 | 0:ad25de01864e | 52 | void ed(char* buffer) { |
User_4574 | 0:ad25de01864e | 53 | int i; |
User_4574 | 0:ad25de01864e | 54 | signed char c; |
User_4574 | 0:ad25de01864e | 55 | char filepath[19] = "/local/"; |
User_4574 | 0:ad25de01864e | 56 | for (i=0;i<61;i++) buffer[i] = buffer[i+3]; |
User_4574 | 0:ad25de01864e | 57 | for (i=7;i<19;i++) filepath[i] = buffer[i-7]; |
User_4574 | 0:ad25de01864e | 58 | FILE* file = fopen(filepath, "w"); |
User_4574 | 0:ad25de01864e | 59 | c = pc.getc(); |
User_4574 | 0:ad25de01864e | 60 | while ((c != 4) && (c != EOF)) { |
User_4574 | 0:ad25de01864e | 61 | if (c == 0x7F) { |
User_4574 | 0:ad25de01864e | 62 | pc.putc(8); |
User_4574 | 0:ad25de01864e | 63 | pc.putc(' '); |
User_4574 | 0:ad25de01864e | 64 | pc.putc(8); |
User_4574 | 0:ad25de01864e | 65 | fseek(file, -1, SEEK_CUR); |
User_4574 | 0:ad25de01864e | 66 | } else { |
User_4574 | 0:ad25de01864e | 67 | pc.putc(c); |
User_4574 | 0:ad25de01864e | 68 | fputc(c, file); |
User_4574 | 0:ad25de01864e | 69 | if (c == '\n') pc.putc('\r'); |
User_4574 | 0:ad25de01864e | 70 | } |
User_4574 | 0:ad25de01864e | 71 | c = pc.getc(); |
User_4574 | 0:ad25de01864e | 72 | } |
User_4574 | 0:ad25de01864e | 73 | pc.printf("\n\r"); |
User_4574 | 0:ad25de01864e | 74 | fputc('\n', file); |
User_4574 | 0:ad25de01864e | 75 | fflush(file); |
User_4574 | 0:ad25de01864e | 76 | fclose(file); |
User_4574 | 0:ad25de01864e | 77 | } |
User_4574 | 0:ad25de01864e | 78 | |
User_4574 | 0:ad25de01864e | 79 | int main() { |
User_4574 | 0:ad25de01864e | 80 | char buffer[64]; |
User_4574 | 0:ad25de01864e | 81 | pc.baud(115200); |
User_4574 | 0:ad25de01864e | 82 | pc.printf("Local Flash Filesystem Test\n\r"); |
User_4574 | 0:ad25de01864e | 83 | pc.printf("Nathan Lasseter 2010\n\n\r"); |
User_4574 | 0:ad25de01864e | 84 | pc.printf("Up to 64 characters input is allowed,\n\r\tup to 8 character filenames (excluding extension)\n\r"); |
User_4574 | 0:ad25de01864e | 85 | pc.printf("Commands: ls, cat filename, ed filename\n\n\r"); |
User_4574 | 0:ad25de01864e | 86 | while(1) { |
User_4574 | 0:ad25de01864e | 87 | get_from_pc(buffer); |
User_4574 | 0:ad25de01864e | 88 | if (strncmp(buffer, "ls", 2) == 0) { |
User_4574 | 0:ad25de01864e | 89 | ls(); |
User_4574 | 0:ad25de01864e | 90 | } else if (strncmp(buffer, "cat", 3) == 0) { |
User_4574 | 0:ad25de01864e | 91 | cat(buffer); |
User_4574 | 0:ad25de01864e | 92 | } else if (strncmp(buffer, "ed", 2) == 0) { |
User_4574 | 0:ad25de01864e | 93 | ed(buffer); |
User_4574 | 0:ad25de01864e | 94 | } else if (strcmp(buffer, "") == 0) { |
User_4574 | 0:ad25de01864e | 95 | pc.printf("! No command\n\r"); |
User_4574 | 0:ad25de01864e | 96 | } else { |
User_4574 | 0:ad25de01864e | 97 | pc.printf("! Invalid Command <%s>\n\r", buffer); |
User_4574 | 0:ad25de01864e | 98 | } |
User_4574 | 0:ad25de01864e | 99 | } |
User_4574 | 0:ad25de01864e | 100 | } |