This program is for transferring all contents of SD card to any flash drive like pen drive. After importing this program, you will see 3 FATFileSystem libraries, one in main folder, one in SDFileSystem folder and one in USBHost folder. Delete two libraries, which are in SDFileSystem folder and USBHost folder. But don't delete the FATFileSystem library, which are in main folder.

Dependencies:   FATFileSystem SDFileSystem TextLCD USBHost mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "USBHostMSD.h"
00003 #include "TextLCD.h"
00004 #include "SDFileSystem.h"
00005 
00006 DigitalOut led(LED1);
00007 
00008 TextLCD lcd(p19, p20, p27, p28, p29, p30, TextLCD::LCD20x2); // rs, e, d4-d7
00009 SDFileSystem sd(p5, p6, p7, p8, "sd");
00010 //USBHostMSD msd("usb");
00011 
00012 void listdir(void);
00013 void FileCopy(char *, char *);
00014 void copyallusb(void);
00015 
00016 void listdir(void) {
00017     DIR *d;
00018     struct dirent *p;
00019 
00020     d = opendir("/sd");
00021     if (d != NULL) {
00022         while ((p = readdir(d)) != NULL) {
00023             lcd.cls();
00024             lcd.printf(" - %s\r\n", p->d_name);
00025         }
00026     } else {
00027         lcd.cls();
00028         lcd.printf("opening failed, try again\n");
00029     }
00030     closedir(d);
00031 }
00032 
00033 void FileCopy(char *fsrc , char *ftrgt) { 
00034     FILE *fs = fopen(fsrc, "rb");
00035     if(fs == NULL) {
00036         lcd.cls();
00037         lcd.printf("couldn't open sd\n");
00038     }
00039     FILE *ft = fopen(ftrgt, "wb");
00040     if(ft == NULL) {
00041         lcd.cls();
00042         lcd.printf("couldn't open usb\n");
00043     }
00044     while(1) {
00045     int ch = fgetc(fs);
00046     if(ch == EOF)
00047     break;
00048     else
00049     fputc(ch, ft);
00050     }
00051     fclose(fs);
00052     fclose(ft); 
00053 }
00054 
00055 void copyallusb(void) {
00056     USBHostMSD msd("usb");
00057            
00058     // try to connect a MSD device
00059     while(!msd.connect()) {
00060         wait_ms(500);
00061         lcd.cls();
00062         lcd.printf("connecting to USB");
00063      }
00064 
00065     char srstrgt[128];
00066     char filesrs[128];
00067     char filetrgt[128];
00068     DIR *d;
00069     struct dirent *p;
00070 
00071     d = opendir("/sd/");
00072     if (d != NULL) {
00073         lcd.cls();
00074         lcd.printf("copy starting\n");
00075         while ((p = readdir(d)) != NULL) {
00076             sprintf(srstrgt, "%s", p->d_name);
00077             sprintf(filesrs, "/sd/%s", srstrgt);
00078             sprintf(filetrgt, "/usb/%s", srstrgt);
00079             lcd.cls();
00080             lcd.printf("copying-\n");
00081             lcd.printf("%s\n", srstrgt);
00082             FileCopy(filesrs, filetrgt);
00083         }
00084         lcd.cls();
00085         lcd.printf("File copy done!\n");
00086     } else {
00087         lcd.printf("No File, try again\n");
00088     }
00089     closedir(d);
00090         
00091     // if device disconnected, try to connect again
00092     //if (!msd.connected())
00093     //break;
00094 }
00095 
00096 
00097 int main() {
00098     lcd.cls();
00099     lcd.printf("JAI MATA DI!\n");
00100     wait(2);
00101     copyallusb();
00102     while(1) {
00103         led=!led;
00104         Thread::wait(500);       
00105     }
00106 }