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");
}