Example writing to SD card, sford (original) 21 June 2011: Enhanced by D. Wendelboe to test SD file and directories. Illustrates the following: * rename a file (via copy & delete old). * copy an existing file to a new file. * listing of SD directory names. TODO: Add method to list filenames in a directory. Add a method to return file length.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
YouTahDoug
Date:
Wed Jun 22 16:52:20 2011 +0000
Parent:
0:d0eea54553ed
Commit message:

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Jun 21 22:59:02 2011 +0000
+++ b/main.cpp	Wed Jun 22 16:52:20 2011 +0000
@@ -1,139 +1,154 @@
-// example writing to SD card, sford
-// Modified 21 June 2011 by D. Wendelboe to test SD file and directory creation.
-// Two procedures were added. One to renam a file (via copy), and a procedure to 
-// copy a file.
-
-#include "mbed.h"
-#include "SDFileSystem.h"
-
-SDFileSystem sd(p5, p6, p7, p8, "sd"); 
-
-int file_rename(const char *oldfile, const char *newfile);
-int file_copy(const char *oldfile, const char *newfile);
-
-int main() 
-{
-    int i, status;
-    
-    printf("Hello World!\n");   
-
-    mkdir("/sd/mydir1", 0777);
-    mkdir("/sd/mydir2", 0777);
-    mkdir("/sd/mydir3", 0777);
-    
-//--------------------------------------------------------------    
-    FILE *fp = fopen("/sd/mydir1/sdtest.txt", "w");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
-    }
-    fprintf(fp, "Hello SD Card World!\n");
-    for (i=0; i<10; i++)
-    {
-        fprintf(fp, "Line #%i\n", i);
-    }
-    fclose(fp); 
-                   
-//--------------------------------------------------------------
-    printf("Open directory on /sd\n");    
-    DIR *d = opendir("/sd");              
-    struct dirent *p;
-    while((p = readdir(d)) != NULL) {         
-      printf("%s\n", p->d_name);            
-    }
-    closedir(d);
-    printf("Directory closed\n");
-    
- //--------------------------------------------------------------  
-    printf("Remove /sd/mydir3\n"); 
-    remove("/sd/mydir3");                
-  
- //-------------------------------------------------------------- 
-    printf("Rename sdtest.txt to doug.txt\n");
-    status = file_rename("/sd/mydir1/sdtest.txt", "/sd/mydir1/doug.txt");
-
-    if (status == -1)  printf("Error: New file not created: %d\n", status);
-    else printf("New file was created: %d\n", status);
-    
-//--------------------------------------------------------------
-    status = file_copy("/sd/mydir1/doug.txt", "/sd/mydir1/doug2.txt");
-
-    if (status == -1)  printf("Error: file not copied: %d\n", status);
-    else printf("Success: file copied: %d\n", status);
-
-//--------------------------------------------------------------
-    fp = fopen("/sd/mydir2/sdtest2.txt", "w");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
-    }
-    fprintf(fp, "This is a second directory.\n");
-    for (i=0; i<10; i++) {
-        fprintf(fp, "Line #%C\n", i+'a');
-    }
-    fclose(fp); 
-
-    printf("Goodbye World!\n");
-}   
-
-//***********************************************************
-// file_rename: renames a file.
-//    Kind of hoakey as it moves data instead of adjusting
-//    the file name in the directory. 
-//    Checks to insure the file was renamed.
-//    Returns -1 = error; 0 = success
-//***********************************************************
-int file_rename(const char *oldfile, const char *newfile) {
-    int retval = 0;
-    int ch;
-
-    FILE *fpold = fopen(oldfile, "r");
-    FILE *fpnew = fopen(newfile, "w");
-    
-    while (1) {  
-        ch = fgetc(fpold); 
-        if (ch == EOF) break;
-        fputc(ch, fpnew);  
-    }
-    
-    fclose(fpnew);
-    fclose(fpold);
-
-    fpnew = fopen(newfile, "r");
-    if(fpnew == NULL) {
-        retval = (-1);
-    } 
-    else {
-        remove(oldfile);
-    }
-    return (retval);
-}
-
-//***********************************************************
-// file_copy: Copies a file
-//            Checks to insure destination file was created.
-//            Returns -1 = error; 0 = success
-//***********************************************************
-int file_copy(const char *oldfile, const char *newfile) {
-    int retval = 0;
-    int ch;
-
-    FILE *fpold = fopen(oldfile, "r");
-    FILE *fpnew = fopen(newfile, "w");
-    
-    while (1) {  
-        ch = fgetc(fpold); 
-        if (ch == EOF) break;
-        fputc(ch, fpnew);  
-    }
-    
-    fclose(fpnew);
-    fclose(fpold);    
-    
-    fclose(fpnew);
-    fclose(fpold);
-
-    fpnew = fopen(newfile, "r");
-    if(fpnew == NULL) {
-        retval = (-1);
-    } 
-    return (retval);
-}
\ No newline at end of file
+//*****************************************************************************
+// Example writing to SD card, sford
+//
+// 21 June 2011: Enhanced by D. Wendelboe to test SD file and directories.
+// Illustrates the following:
+//      * rename a file (via copy & delete old).
+//      * copy an existing file to a new file.
+//      * listing of SD directory names.
+//
+// TODO: Add method to list filenames in a directory.
+//       Add a method to return file length.
+//*****************************************************************************
+
+#include "mbed.h"
+#include "SDFileSystem.h"
+
+#define PC_BAUD   38400
+
+SDFileSystem sd(p5, p6, p7, p8, "sd"); 
+Serial pc(USBTX,USBRX);
+
+int file_rename(const char *oldfname, const char *newfname);
+int file_copy(const char *src, const char *dst);
+
+int main() 
+{
+    int i, status;
+    pc.baud(PC_BAUD);
+    
+    printf("\nExercise SD Card functions\n"); 
+      
+    printf("Create 3 directories on SD Card.\n");  
+    mkdir("/sd/mydir1", 0777);
+    mkdir("/sd/mydir2", 0777);
+    mkdir("/sd/mydir3", 0777);
+    
+//--------------------------------------------------------------    
+    printf("Create \"/sd/mydir1/sdtest.txt\" and write some data in it\n");
+    
+    FILE *fp = fopen("/sd/mydir1/sdtest.txt", "w");
+    if(fp == NULL) {
+        error("Could not open file for write\n");
+    }
+    fprintf(fp, "Hello SD Card World!\n");
+    for (i=0; i<10; i++) {
+        fprintf(fp, "Line #%i\n", i);
+    }
+    fclose(fp); 
+                   
+//--------------------------------------------------------------
+    printf("Open directory on /sd\n");    
+    DIR *d = opendir("/sd");              
+    struct dirent *p;
+    while((p = readdir(d)) != NULL) {         
+      printf("%s\n", p->d_name);            
+    }
+    closedir(d);
+    printf("Directory closed\n");
+    
+ //--------------------------------------------------------------  
+    printf("Remove /sd/mydir3\n"); 
+    remove("/sd/mydir3");      
+              
+//--------------------------------------------------------------
+    printf("List directory again. mydir3 should be gone.\n");    
+    d = opendir("/sd");              
+    while((p = readdir(d)) != NULL) {         
+      printf("%s\n", p->d_name);            
+    }
+    closedir(d);
+    
+ //-------------------------------------------------------------- 
+    printf("Rename \"/sd/mydir1/sdtest.txt\" to \"/sd/mydir1/new_name.txt\"\n"); 
+    status = file_rename("/sd/mydir1/sdtest.txt", "/sd/mydir1/new_name.txt");
+
+    if (status == -1)  printf("Error: file not renamed. (status=%d)\n", status);
+    else printf("Success: file renamed OK (status=%d)\n", status);
+    
+//--------------------------------------------------------------
+    printf("Copy \"/sd/mydir1/doug.txt\" to \"/sd/mydir1/new_copy.txt\"\n");
+    status = file_copy("/sd/mydir1/new_name.txt", "/sd/mydir1/new_copy.txt");
+    
+    if (status == -1)  printf("Error: file not copied. (status=%d)\n", status);
+    else printf("Success: file copied OK (status=%d)\n", status);
+    
+//--------------------------------------------------------------
+    printf("Done.\n");
+}   
+
+//***********************************************************
+// file_rename: renames a file (via copy & delete).
+//    Moves data instead of adjusting the file name in the
+//    file directory. Checks to insure the file was renamed.
+//    Returns -1 = error; 0 = success
+//***********************************************************
+int file_rename(const char *oldfname, const char *newfname) {
+    int retval = 0;
+    int ch;
+
+    FILE *fpold = fopen(oldfname, "r");   // src file
+    FILE *fpnew = fopen(newfname, "w");   // dest file
+    
+    while (1) {                   // Copy src to dest  
+        ch = fgetc(fpold);        // until src EOF read. 
+        if (ch == EOF) break;
+        fputc(ch, fpnew);  
+    }
+    
+    fclose(fpnew);
+    fclose(fpold);
+
+    fpnew = fopen(newfname, "r"); // Reopen dest to insure
+    if(fpnew == NULL) {           // that it was created.
+        retval = (-1);            // Return Error.
+    } 
+    else {
+        fclose(fpnew);	
+        remove(oldfname);         // Remove original file.
+		retval = (0);             // Return Success.
+    }
+    return (retval);
+}
+
+//***********************************************************
+// file_copy: Copies a file
+//            Checks to insure destination file was created.
+//            Returns -1 = error; 0 = success
+//***********************************************************
+int file_copy (const char *src, const char *dst) {
+    int retval = 0;
+    int ch;
+
+    FILE *fpsrc = fopen(src, "r");   // src file
+    FILE *fpdst = fopen(dst, "w");   // dest file
+    
+    while (1) {                  // Copy src to dest
+        ch = fgetc(fpsrc);       // until src EOF read.
+        if (ch == EOF) break;
+        fputc(ch, fpdst);  
+    }
+	fclose(fpsrc);  
+    fclose(fpdst);
+  
+    fpdst = fopen(dst, "r");     // Reopen dest to insure
+    if(fpdst == NULL) {          // that it was created.
+        retval = (-1);           // Return error.
+    } 
+    else {
+        fclose(fpdst); 
+        retval = (0);            // Return success.
+    }
+    return (retval);
+}
+