USB CDC (serial) and USB MSC (strage) Composite Device. http://mbed.org/users/okini3939/notebook/USB_Device/
Dependencies: ChaNFSSD mbed ChaNFS
main.cpp
- Committer:
- okini3939
- Date:
- 2011-12-23
- Revision:
- 1:bb08a84162b7
- Parent:
- 0:9b1d17d54055
- Child:
- 2:5db90410bb90
File content as of revision 1:bb08a84162b7:
#include "mbed.h" #include "USBCDCMSC.h" #include "SDFileSystem.h" #include <new> Serial pc(USBTX, USBRX); SDFileSystem sd(p5, p6, p7, p8, "sd"); USBCDCMSC cdcmsc(&sd); extern "C" void HardFault_Handler() { printf("Hard Fault!\n"); exit(-1); } void no_memory () { printf("panic: can't allocate to memory!\r\n"); exit(-1); } void listdir (Stream *st) { #if 0 // probrem: readdir() Hard Fault DIR *dir; struct dirent *ent; if ((dir = opendir("/sd")) != NULL) { st->printf("dir opened\r\n"); while ((ent = readdir(dir)) != NULL) { st->printf("%s\r\n", ent->d_name); } } else { st->printf("dir open error\r\n"); } closedir(dir); #else // direct FatFs FILINFO fno; DIR_t dir; char *fn; #if _USE_LFN static char lfn[_MAX_LFN + 1]; fno.lfname = lfn; fno.lfsize = sizeof(lfn); #endif if (f_opendir(&dir, "") == FR_OK) { for (;;) { if (f_readdir(&dir, &fno) != FR_OK) break; if (fno.fname[0] == 0) break; #if _USE_LFN fn = *fno.lfname ? fno.lfname : fno.fname; #else fn = fno.fname; #endif st->printf("%s\r\n", fn); } } #endif } void readfile (char *filename) { FILE *fp = fopen(filename, "r"); if (fp) { int c; pc.printf("file: "); for (;;) { c = fgetc(fp); if (feof(fp)) break; pc.printf("%c", c); } pc.printf("\r\n"); fclose(fp); } } int main() { int c; set_new_handler(no_memory); // new handler function readfile("/sd/test.txt"); while(1) { if (cdcmsc.available()) { // CDC -> pc serial c = cdcmsc.getc(); pc.putc(c); if (c == '?') { listdir(&cdcmsc); } } if (pc.readable()) { // PC serial -> CDC c = pc.getc(); cdcmsc.putc(c); if (c == '?') { listdir(&pc); } } } }