mohan-bee/mini-mp3-player
Portable, battery-powered MP3 player hardware with USB charging, microSD storage, an MCU, VS10xx audio decoder, headphone output, status controls, and regulated power rails.
- Version
- 1.2.0
- License
- unset
- Stars
- 0
firmware/tests/test_fatfs.c
#include "ff.h"
#include "diskio.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
static FILE *image;
static int fail_read;
DSTATUS disk_initialize(BYTE drive) { return drive?STA_NOINIT:0; }
DSTATUS disk_status(BYTE drive) { return drive?STA_NOINIT:0; }
DRESULT disk_read(BYTE drive,BYTE *buffer,LBA_t sector,UINT count) {
if (drive || fail_read) return RES_ERROR;
if (fseek(image,(long)sector*512,SEEK_SET)) return RES_ERROR;
return fread(buffer,512,count,image)==count?RES_OK:RES_ERROR;
}
DRESULT disk_ioctl(BYTE drive,BYTE command,void *buffer) {
(void)drive; (void)command; (void)buffer; return RES_OK;
}
int main(int argc,char **argv) {
assert(argc==2); image=fopen(argv[1],"rb"); assert(image);
FATFS fs; FIL file; DIR directory; FILINFO info; UINT got;
assert(f_mount(&fs,"",1)==FR_OK);
assert(f_opendir(&directory,"/")==FR_OK);
assert(f_readdir(&directory,&info)==FR_OK && info.fsize==10003);
assert(f_closedir(&directory)==FR_OK);
assert(f_open(&file,"0001.MP3",FA_READ)==FR_OK);
BYTE buffer[4096]; unsigned offset=0;
do {
assert(f_read(&file,buffer,sizeof buffer,&got)==FR_OK);
for (unsigned i=0;i<got;i++) assert(buffer[i]==(BYTE)((offset+i)*17+3));
offset+=got;
} while(got);
assert(offset==10003); assert(f_close(&file)==FR_OK);
assert(f_open(&file,"0001.MP3",FA_READ)==FR_OK);
fail_read=1;
assert(f_read(&file,buffer,sizeof buffer,&got)==FR_DISK_ERR);
fclose(image);
puts("PASS: actual FatFs root scan, fragmented FAT16/FAT32 file, 4096-byte reads, EOF, disk failure");
}