crashtest-r0ket/firmware/filesystem/util.c

100 lines
2.0 KiB
C

#include <sysdefs.h>
#include <ff.h>
FATFS FatFs; /* File system object for logical drive */
const TCHAR *rcstrings =
_T("OK\0DISK_ERR\0INT_ERR\0NOT_READY\0NO_FILE\0NO_PATH\0INVALID_NAME\0")
_T("DENIED\0EXIST\0INVALID_OBJECT\0WRITE_PROTECTED\0INVALID_DRIVE\0")
_T("NOT_ENABLED\0NO_FILE_SYSTEM\0MKFS_ABORTED\0TIMEOUT\0LOCKED\0")
_T("NOT_ENOUGH_CORE\0TOO_MANY_OPEN_FILES\0");
const char* f_get_rc_string (FRESULT rc) {
FRESULT i;
const char *p=rcstrings;
for (i = 0; i != rc && *p; i++) {
while(*p++) ;
}
return p;
}
void fsInit(){
FRESULT i;
DIR dir; /* Directory object */
f_mount(0, &FatFs);
i = f_opendir(&dir, "0:");
if( i == FR_NO_FILESYSTEM ){
lcdPrintln("filesystm b0rk");
lcdPrintln("Formating...");
lcdRefresh();
format_formatDF();
lcdPrintln("Done.");
lcdPrintln("Now copy files");
lcdPrintln("to drive. See");
lcdPrintln("");
lcdPrintln("r0ket.de/init");
lcdRefresh();
usbMSCInit();
while(1);
}
};
void fsReInit(){
f_mount(0, NULL);
f_mount(0, &FatFs);
};
int readFile(char * filename, char * data, int len){
FIL file;
UINT readbytes;
int res;
res=f_open(&file, filename, FA_OPEN_EXISTING|FA_READ);
if(res){
return -1;
};
res = f_read(&file, data, len, &readbytes);
if(res){
return -1;
};
f_close(&file);
return readbytes;
};
int readTextFile(char * filename, char * data, int len){
UINT readbytes;
readbytes=readFile(filename,data,len-1);
if(len>=0)
data[readbytes]=0;
return readbytes;
};
int writeFile(char * filename, char * data, int len){
FIL file;
UINT writebytes;
int res;
res=f_open(&file, filename, FA_CREATE_ALWAYS|FA_WRITE);
if(res){
return -1;
};
res = f_write(&file, data, len, &writebytes);
if(res){
return -1;
};
f_close(&file);
return writebytes;
};