#include <string.h> #include "lcd/lcd.h" #include "lcd/allfonts.h" #include "lcd/print.h" #include "filesystem/ff.h" #include "basic/basic.h" #define FLEN 13 int getFiles(char files[][FLEN], uint8_t count, uint16_t skip, char *ext) { DIR dir; /* Directory object */ FILINFO Finfo; FRESULT res; int ctr; int pos = 0; res = f_opendir(&dir, "0:"); if(res){ //lcdPrint("OpenDir:"); lcdPrintln(f_get_rc_string(res)); lcdRefresh(); return 0; }; for(ctr=0;pos<count;ctr++) { res = f_readdir(&dir, &Finfo); if ((res != FR_OK) || !Finfo.fname[0]) break; if( ctr < skip ) continue; int len=strlen(Finfo.fname); int extlen = strlen(ext); if( strcmp(Finfo.fname+len-extlen, ext) != 0) continue; if (Finfo.fattrib & AM_DIR) continue; strcpy(files[pos++],Finfo.fname); } return pos; } int selectFile(char *filename, char *extension) { int skip = 0; char key; int selected = 0; font=&Font_7x8; while(1){ char files[7][FLEN]; int count = getFiles(files, 7, skip, extension); redraw: if( count ) lcdClear(); lcdPrintln("Select file:"); for(int i=0; i<count; i++){ if( selected == i ) lcdPrint(">"); lcdPrintln(files[i]); } lcdRefresh(); key=getInputWait(); delayms(20); if( key==BTN_DOWN ){ if( selected < 6 ){ selected++; goto redraw; }else{ skip++; } }else if( key==BTN_UP ){ if( selected > 0 ){ selected--; goto redraw; }else{ if( skip > 0 ){ skip--; } } }else if( key==BTN_LEFT ){ return 1; }else if( key==BTN_RIGHT ){ strcpy(filename, files[selected]); return 0; } } }