diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index c4f03aa..890144b 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -6,7 +6,7 @@ "${workspaceFolder}/build/generated/pico_base", "${env:PICO_SDK_PATH}/src/**/include", "${env:PICO_SDK_PATH}/lib/**/src", - "${workspaceFolder}/lib/source" + "${workspaceFolder}/lib/FatFs/source" ], "myCompilerPath": "/usr/bin/arm-none-eabi-gcc" diff --git a/.vscode/settings.json b/.vscode/settings.json index a173292..8b1d923 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,6 +4,11 @@ "tusb.h": "c", "inttypes.h": "c", "stdlib.h": "c", - "cdefs.h": "c" + "cdefs.h": "c", + "tusb_fifo.h": "c", + "tusb_common.h": "c", + "diskio.h": "c", + "ff.h": "c", + "time.h": "c" } } \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index cab12eb..38698a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,14 +18,16 @@ target_sources(host_cdc_msc_hid PUBLIC main.c msc_app.c cdc_app.c - lib/source/ff.c - lib/source/ffsystem.c + diskio_USB.c + lib/FatFs/source/ff.c + lib/FatFs/source/ffsystem.c + lib/FatFs/source/diskio.c ) # Make sure TinyUSB can find tusb_config.h target_include_directories(host_cdc_msc_hid PUBLIC ${CMAKE_CURRENT_LIST_DIR} - ${CMAKE_CURRENT_LIST_DIR}/lib/source/) + ${CMAKE_CURRENT_LIST_DIR}/lib/FatFs/source/) # In addition to pico_stdlib required for common PicoSDK functionality, add dependency on tinyusb_host # for TinyUSB device support and tinyusb_board for the additional board support library used by the example diff --git a/diskio_USB.c b/diskio_USB.c new file mode 100644 index 0000000..30fd8eb --- /dev/null +++ b/diskio_USB.c @@ -0,0 +1,122 @@ +#include "ff.h" /* Obtains integer types */ +#include "tusb.h" +#include "diskio.h" + +static volatile bool _disk_busy[CFG_TUH_DEVICE_MAX]; + +//--------------------------------------------------------------------+ +// DiskIO +//--------------------------------------------------------------------+ + +static void wait_for_disk_io(BYTE pdrv) +{ + while(_disk_busy[pdrv]) + { + tuh_task(); + } +} + +static bool disk_io_complete(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_data) +{ + (void) dev_addr; (void) cb_data; + _disk_busy[dev_addr-1] = false; + return true; +} + +DSTATUS USB_disk_status ( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) +{ + uint8_t dev_addr = pdrv + 1; + return tuh_msc_mounted(dev_addr) ? 0 : STA_NODISK; +} + +DSTATUS USB_disk_initialize ( + BYTE pdrv /* Physical drive nmuber to identify the drive */ +) +{ + (void) pdrv; + return 0; // nothing to do +} + +DRESULT USB_disk_read ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + BYTE *buff, /* Data buffer to store read data */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to read */ +) +{ + uint8_t const dev_addr = pdrv + 1; + uint8_t const lun = 0; + + _disk_busy[pdrv] = true; + tuh_msc_read10(dev_addr, lun, buff, sector, (uint16_t) count, disk_io_complete, 0); + wait_for_disk_io(pdrv); + + return RES_OK; +} + +#if FF_FS_READONLY == 0 + +DRESULT USB_disk_write ( + BYTE pdrv, /* Physical drive nmuber to identify the drive */ + const BYTE *buff, /* Data to be written */ + LBA_t sector, /* Start sector in LBA */ + UINT count /* Number of sectors to write */ +) +{ + uint8_t const dev_addr = pdrv + 1; + uint8_t const lun = 0; + + _disk_busy[pdrv] = true; + tuh_msc_write10(dev_addr, lun, buff, sector, (uint16_t) count, disk_io_complete, 0); + wait_for_disk_io(pdrv); + + return RES_OK; +} + +#endif + +DRESULT USB_disk_ioctl ( + BYTE pdrv, /* Physical drive nmuber (0..) */ + BYTE cmd, /* Control code */ + void *buff /* Buffer to send/receive control data */ +) +{ + uint8_t const dev_addr = pdrv + 1; + uint8_t const lun = 0; + switch ( cmd ) + { + case CTRL_SYNC: + // nothing to do since we do blocking + return RES_OK; + + case GET_SECTOR_COUNT: + *((DWORD*) buff) = (WORD) tuh_msc_get_block_count(dev_addr, lun); + return RES_OK; + + case GET_SECTOR_SIZE: + *((WORD*) buff) = (WORD) tuh_msc_get_block_size(dev_addr, lun); + return RES_OK; + + case GET_BLOCK_SIZE: + *((DWORD*) buff) = 1; // erase block size in units of sector size + return RES_OK; + + default: + return RES_PARERR; + } + + return RES_OK; +} + +DWORD get_fattime (void){ + return + (2025-1970) << 25 | // Année + 6 << 21 | // Mois + 7 << 16 | // jour du mois + 17 << 11 | // Heures + 29 << 5 | // Minutes + 30 << 0 // Secondes + ; +} \ No newline at end of file diff --git a/lib/LICENSE.txt b/lib/FatFs/LICENSE.txt similarity index 100% rename from lib/LICENSE.txt rename to lib/FatFs/LICENSE.txt diff --git a/lib/documents/00index_e.html b/lib/FatFs/documents/00index_e.html similarity index 100% rename from lib/documents/00index_e.html rename to lib/FatFs/documents/00index_e.html diff --git a/lib/documents/css_e.css b/lib/FatFs/documents/css_e.css similarity index 100% rename from lib/documents/css_e.css rename to lib/FatFs/documents/css_e.css diff --git a/lib/documents/doc/appnote.html b/lib/FatFs/documents/doc/appnote.html similarity index 100% rename from lib/documents/doc/appnote.html rename to lib/FatFs/documents/doc/appnote.html diff --git a/lib/documents/doc/chdir.html b/lib/FatFs/documents/doc/chdir.html similarity index 100% rename from lib/documents/doc/chdir.html rename to lib/FatFs/documents/doc/chdir.html diff --git a/lib/documents/doc/chdrive.html b/lib/FatFs/documents/doc/chdrive.html similarity index 100% rename from lib/documents/doc/chdrive.html rename to lib/FatFs/documents/doc/chdrive.html diff --git a/lib/documents/doc/chmod.html b/lib/FatFs/documents/doc/chmod.html similarity index 100% rename from lib/documents/doc/chmod.html rename to lib/FatFs/documents/doc/chmod.html diff --git a/lib/documents/doc/close.html b/lib/FatFs/documents/doc/close.html similarity index 100% rename from lib/documents/doc/close.html rename to lib/FatFs/documents/doc/close.html diff --git a/lib/documents/doc/closedir.html b/lib/FatFs/documents/doc/closedir.html similarity index 100% rename from lib/documents/doc/closedir.html rename to lib/FatFs/documents/doc/closedir.html diff --git a/lib/documents/doc/config.html b/lib/FatFs/documents/doc/config.html similarity index 100% rename from lib/documents/doc/config.html rename to lib/FatFs/documents/doc/config.html diff --git a/lib/documents/doc/dinit.html b/lib/FatFs/documents/doc/dinit.html similarity index 100% rename from lib/documents/doc/dinit.html rename to lib/FatFs/documents/doc/dinit.html diff --git a/lib/documents/doc/dioctl.html b/lib/FatFs/documents/doc/dioctl.html similarity index 100% rename from lib/documents/doc/dioctl.html rename to lib/FatFs/documents/doc/dioctl.html diff --git a/lib/documents/doc/dread.html b/lib/FatFs/documents/doc/dread.html similarity index 100% rename from lib/documents/doc/dread.html rename to lib/FatFs/documents/doc/dread.html diff --git a/lib/documents/doc/dstat.html b/lib/FatFs/documents/doc/dstat.html similarity index 100% rename from lib/documents/doc/dstat.html rename to lib/FatFs/documents/doc/dstat.html diff --git a/lib/documents/doc/dwrite.html b/lib/FatFs/documents/doc/dwrite.html similarity index 100% rename from lib/documents/doc/dwrite.html rename to lib/FatFs/documents/doc/dwrite.html diff --git a/lib/documents/doc/eof.html b/lib/FatFs/documents/doc/eof.html similarity index 100% rename from lib/documents/doc/eof.html rename to lib/FatFs/documents/doc/eof.html diff --git a/lib/documents/doc/error.html b/lib/FatFs/documents/doc/error.html similarity index 100% rename from lib/documents/doc/error.html rename to lib/FatFs/documents/doc/error.html diff --git a/lib/documents/doc/expand.html b/lib/FatFs/documents/doc/expand.html similarity index 100% rename from lib/documents/doc/expand.html rename to lib/FatFs/documents/doc/expand.html diff --git a/lib/documents/doc/fattime.html b/lib/FatFs/documents/doc/fattime.html similarity index 100% rename from lib/documents/doc/fattime.html rename to lib/FatFs/documents/doc/fattime.html diff --git a/lib/documents/doc/fdisk.html b/lib/FatFs/documents/doc/fdisk.html similarity index 100% rename from lib/documents/doc/fdisk.html rename to lib/FatFs/documents/doc/fdisk.html diff --git a/lib/documents/doc/filename.html b/lib/FatFs/documents/doc/filename.html similarity index 100% rename from lib/documents/doc/filename.html rename to lib/FatFs/documents/doc/filename.html diff --git a/lib/documents/doc/findfirst.html b/lib/FatFs/documents/doc/findfirst.html similarity index 100% rename from lib/documents/doc/findfirst.html rename to lib/FatFs/documents/doc/findfirst.html diff --git a/lib/documents/doc/findnext.html b/lib/FatFs/documents/doc/findnext.html similarity index 100% rename from lib/documents/doc/findnext.html rename to lib/FatFs/documents/doc/findnext.html diff --git a/lib/documents/doc/forward.html b/lib/FatFs/documents/doc/forward.html similarity index 100% rename from lib/documents/doc/forward.html rename to lib/FatFs/documents/doc/forward.html diff --git a/lib/documents/doc/getcwd.html b/lib/FatFs/documents/doc/getcwd.html similarity index 100% rename from lib/documents/doc/getcwd.html rename to lib/FatFs/documents/doc/getcwd.html diff --git a/lib/documents/doc/getfree.html b/lib/FatFs/documents/doc/getfree.html similarity index 100% rename from lib/documents/doc/getfree.html rename to lib/FatFs/documents/doc/getfree.html diff --git a/lib/documents/doc/getlabel.html b/lib/FatFs/documents/doc/getlabel.html similarity index 100% rename from lib/documents/doc/getlabel.html rename to lib/FatFs/documents/doc/getlabel.html diff --git a/lib/documents/doc/gets.html b/lib/FatFs/documents/doc/gets.html similarity index 100% rename from lib/documents/doc/gets.html rename to lib/FatFs/documents/doc/gets.html diff --git a/lib/documents/doc/lseek.html b/lib/FatFs/documents/doc/lseek.html similarity index 100% rename from lib/documents/doc/lseek.html rename to lib/FatFs/documents/doc/lseek.html diff --git a/lib/documents/doc/mkdir.html b/lib/FatFs/documents/doc/mkdir.html similarity index 100% rename from lib/documents/doc/mkdir.html rename to lib/FatFs/documents/doc/mkdir.html diff --git a/lib/documents/doc/mkfs.html b/lib/FatFs/documents/doc/mkfs.html similarity index 100% rename from lib/documents/doc/mkfs.html rename to lib/FatFs/documents/doc/mkfs.html diff --git a/lib/documents/doc/mount.html b/lib/FatFs/documents/doc/mount.html similarity index 100% rename from lib/documents/doc/mount.html rename to lib/FatFs/documents/doc/mount.html diff --git a/lib/documents/doc/open.html b/lib/FatFs/documents/doc/open.html similarity index 100% rename from lib/documents/doc/open.html rename to lib/FatFs/documents/doc/open.html diff --git a/lib/documents/doc/opendir.html b/lib/FatFs/documents/doc/opendir.html similarity index 100% rename from lib/documents/doc/opendir.html rename to lib/FatFs/documents/doc/opendir.html diff --git a/lib/documents/doc/printf.html b/lib/FatFs/documents/doc/printf.html similarity index 100% rename from lib/documents/doc/printf.html rename to lib/FatFs/documents/doc/printf.html diff --git a/lib/documents/doc/putc.html b/lib/FatFs/documents/doc/putc.html similarity index 100% rename from lib/documents/doc/putc.html rename to lib/FatFs/documents/doc/putc.html diff --git a/lib/documents/doc/puts.html b/lib/FatFs/documents/doc/puts.html similarity index 100% rename from lib/documents/doc/puts.html rename to lib/FatFs/documents/doc/puts.html diff --git a/lib/documents/doc/rc.html b/lib/FatFs/documents/doc/rc.html similarity index 100% rename from lib/documents/doc/rc.html rename to lib/FatFs/documents/doc/rc.html diff --git a/lib/documents/doc/read.html b/lib/FatFs/documents/doc/read.html similarity index 100% rename from lib/documents/doc/read.html rename to lib/FatFs/documents/doc/read.html diff --git a/lib/documents/doc/readdir.html b/lib/FatFs/documents/doc/readdir.html similarity index 100% rename from lib/documents/doc/readdir.html rename to lib/FatFs/documents/doc/readdir.html diff --git a/lib/documents/doc/rename.html b/lib/FatFs/documents/doc/rename.html similarity index 100% rename from lib/documents/doc/rename.html rename to lib/FatFs/documents/doc/rename.html diff --git a/lib/documents/doc/sdir.html b/lib/FatFs/documents/doc/sdir.html similarity index 100% rename from lib/documents/doc/sdir.html rename to lib/FatFs/documents/doc/sdir.html diff --git a/lib/documents/doc/setcp.html b/lib/FatFs/documents/doc/setcp.html similarity index 100% rename from lib/documents/doc/setcp.html rename to lib/FatFs/documents/doc/setcp.html diff --git a/lib/documents/doc/setlabel.html b/lib/FatFs/documents/doc/setlabel.html similarity index 100% rename from lib/documents/doc/setlabel.html rename to lib/FatFs/documents/doc/setlabel.html diff --git a/lib/documents/doc/sfatfs.html b/lib/FatFs/documents/doc/sfatfs.html similarity index 100% rename from lib/documents/doc/sfatfs.html rename to lib/FatFs/documents/doc/sfatfs.html diff --git a/lib/documents/doc/sfile.html b/lib/FatFs/documents/doc/sfile.html similarity index 100% rename from lib/documents/doc/sfile.html rename to lib/FatFs/documents/doc/sfile.html diff --git a/lib/documents/doc/sfileinfo.html b/lib/FatFs/documents/doc/sfileinfo.html similarity index 100% rename from lib/documents/doc/sfileinfo.html rename to lib/FatFs/documents/doc/sfileinfo.html diff --git a/lib/documents/doc/size.html b/lib/FatFs/documents/doc/size.html similarity index 100% rename from lib/documents/doc/size.html rename to lib/FatFs/documents/doc/size.html diff --git a/lib/documents/doc/stat.html b/lib/FatFs/documents/doc/stat.html similarity index 100% rename from lib/documents/doc/stat.html rename to lib/FatFs/documents/doc/stat.html diff --git a/lib/documents/doc/sync.html b/lib/FatFs/documents/doc/sync.html similarity index 100% rename from lib/documents/doc/sync.html rename to lib/FatFs/documents/doc/sync.html diff --git a/lib/documents/doc/tell.html b/lib/FatFs/documents/doc/tell.html similarity index 100% rename from lib/documents/doc/tell.html rename to lib/FatFs/documents/doc/tell.html diff --git a/lib/documents/doc/truncate.html b/lib/FatFs/documents/doc/truncate.html similarity index 100% rename from lib/documents/doc/truncate.html rename to lib/FatFs/documents/doc/truncate.html diff --git a/lib/documents/doc/unlink.html b/lib/FatFs/documents/doc/unlink.html similarity index 100% rename from lib/documents/doc/unlink.html rename to lib/FatFs/documents/doc/unlink.html diff --git a/lib/documents/doc/utime.html b/lib/FatFs/documents/doc/utime.html similarity index 100% rename from lib/documents/doc/utime.html rename to lib/FatFs/documents/doc/utime.html diff --git a/lib/documents/doc/write.html b/lib/FatFs/documents/doc/write.html similarity index 100% rename from lib/documents/doc/write.html rename to lib/FatFs/documents/doc/write.html diff --git a/lib/documents/res/app1.c b/lib/FatFs/documents/res/app1.c similarity index 100% rename from lib/documents/res/app1.c rename to lib/FatFs/documents/res/app1.c diff --git a/lib/documents/res/app2.c b/lib/FatFs/documents/res/app2.c similarity index 100% rename from lib/documents/res/app2.c rename to lib/FatFs/documents/res/app2.c diff --git a/lib/documents/res/app3.c b/lib/FatFs/documents/res/app3.c similarity index 100% rename from lib/documents/res/app3.c rename to lib/FatFs/documents/res/app3.c diff --git a/lib/documents/res/app4.c b/lib/FatFs/documents/res/app4.c similarity index 100% rename from lib/documents/res/app4.c rename to lib/FatFs/documents/res/app4.c diff --git a/lib/documents/res/app5.c b/lib/FatFs/documents/res/app5.c similarity index 100% rename from lib/documents/res/app5.c rename to lib/FatFs/documents/res/app5.c diff --git a/lib/documents/res/app6.c b/lib/FatFs/documents/res/app6.c similarity index 100% rename from lib/documents/res/app6.c rename to lib/FatFs/documents/res/app6.c diff --git a/lib/documents/res/f1.png b/lib/FatFs/documents/res/f1.png similarity index 100% rename from lib/documents/res/f1.png rename to lib/FatFs/documents/res/f1.png diff --git a/lib/documents/res/f2.png b/lib/FatFs/documents/res/f2.png similarity index 100% rename from lib/documents/res/f2.png rename to lib/FatFs/documents/res/f2.png diff --git a/lib/documents/res/f3.png b/lib/FatFs/documents/res/f3.png similarity index 100% rename from lib/documents/res/f3.png rename to lib/FatFs/documents/res/f3.png diff --git a/lib/documents/res/f4.png b/lib/FatFs/documents/res/f4.png similarity index 100% rename from lib/documents/res/f4.png rename to lib/FatFs/documents/res/f4.png diff --git a/lib/documents/res/f5.png b/lib/FatFs/documents/res/f5.png similarity index 100% rename from lib/documents/res/f5.png rename to lib/FatFs/documents/res/f5.png diff --git a/lib/documents/res/f6.png b/lib/FatFs/documents/res/f6.png similarity index 100% rename from lib/documents/res/f6.png rename to lib/FatFs/documents/res/f6.png diff --git a/lib/documents/res/f7.png b/lib/FatFs/documents/res/f7.png similarity index 100% rename from lib/documents/res/f7.png rename to lib/FatFs/documents/res/f7.png diff --git a/lib/documents/res/funcs.png b/lib/FatFs/documents/res/funcs.png similarity index 100% rename from lib/documents/res/funcs.png rename to lib/FatFs/documents/res/funcs.png diff --git a/lib/documents/res/layers.png b/lib/FatFs/documents/res/layers.png similarity index 100% rename from lib/documents/res/layers.png rename to lib/FatFs/documents/res/layers.png diff --git a/lib/documents/res/layers1.png b/lib/FatFs/documents/res/layers1.png similarity index 100% rename from lib/documents/res/layers1.png rename to lib/FatFs/documents/res/layers1.png diff --git a/lib/documents/res/layers2.png b/lib/FatFs/documents/res/layers2.png similarity index 100% rename from lib/documents/res/layers2.png rename to lib/FatFs/documents/res/layers2.png diff --git a/lib/documents/res/layers3.png b/lib/FatFs/documents/res/layers3.png similarity index 100% rename from lib/documents/res/layers3.png rename to lib/FatFs/documents/res/layers3.png diff --git a/lib/documents/res/mkfatimg.zip b/lib/FatFs/documents/res/mkfatimg.zip similarity index 100% rename from lib/documents/res/mkfatimg.zip rename to lib/FatFs/documents/res/mkfatimg.zip diff --git a/lib/documents/res/mkfs.xlsx b/lib/FatFs/documents/res/mkfs.xlsx similarity index 100% rename from lib/documents/res/mkfs.xlsx rename to lib/FatFs/documents/res/mkfs.xlsx diff --git a/lib/documents/res/modules.png b/lib/FatFs/documents/res/modules.png similarity index 100% rename from lib/documents/res/modules.png rename to lib/FatFs/documents/res/modules.png diff --git a/lib/documents/res/rwtest1.png b/lib/FatFs/documents/res/rwtest1.png similarity index 100% rename from lib/documents/res/rwtest1.png rename to lib/FatFs/documents/res/rwtest1.png diff --git a/lib/documents/res/rwtest2.png b/lib/FatFs/documents/res/rwtest2.png similarity index 100% rename from lib/documents/res/rwtest2.png rename to lib/FatFs/documents/res/rwtest2.png diff --git a/lib/documents/res/rwtest3.png b/lib/FatFs/documents/res/rwtest3.png similarity index 100% rename from lib/documents/res/rwtest3.png rename to lib/FatFs/documents/res/rwtest3.png diff --git a/lib/documents/res/uniconv.zip b/lib/FatFs/documents/res/uniconv.zip similarity index 100% rename from lib/documents/res/uniconv.zip rename to lib/FatFs/documents/res/uniconv.zip diff --git a/lib/documents/updates.html b/lib/FatFs/documents/updates.html similarity index 100% rename from lib/documents/updates.html rename to lib/FatFs/documents/updates.html diff --git a/lib/source/00history.txt b/lib/FatFs/source/00history.txt similarity index 100% rename from lib/source/00history.txt rename to lib/FatFs/source/00history.txt diff --git a/lib/source/00readme.txt b/lib/FatFs/source/00readme.txt similarity index 100% rename from lib/source/00readme.txt rename to lib/FatFs/source/00readme.txt diff --git a/lib/source/diskio.c b/lib/FatFs/source/diskio.c similarity index 59% rename from lib/source/diskio.c rename to lib/FatFs/source/diskio.c index 179e387..e767fe6 100644 --- a/lib/source/diskio.c +++ b/lib/FatFs/source/diskio.c @@ -11,9 +11,7 @@ #include "diskio.h" /* Declarations of disk functions */ /* Definitions of physical drive number for each drive */ -#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */ -#define DEV_MMC 1 /* Example: Map MMC/SD card to physical drive 1 */ -#define DEV_USB 2 /* Example: Map USB MSD to physical drive 2 */ + /*-----------------------------------------------------------------------*/ @@ -27,28 +25,16 @@ DSTATUS disk_status ( DSTATUS stat; int result; - switch (pdrv) { - case DEV_RAM : - result = RAM_disk_status(); - - // translate the reslut code here - - return stat; - - case DEV_MMC : - result = MMC_disk_status(); - - // translate the reslut code here - - return stat; - - case DEV_USB : - result = USB_disk_status(); - - // translate the reslut code here - - return stat; + if(pdrv >= DEV_SDIO_MIN && pdrv <= DEV_SDIO_MAX){ + + return 0; // OK } + + if(pdrv >= DEV_USB_MIN && pdrv <= DEV_USB_MAX){ + USB_disk_status(pdrv - DEV_USB_MIN); + return 0; // OK + } + return STA_NOINIT; } @@ -64,28 +50,14 @@ DSTATUS disk_initialize ( { DSTATUS stat; int result; + if(pdrv >= DEV_SDIO_MIN && pdrv <= DEV_SDIO_MAX){ + + return 0; // OK + } - switch (pdrv) { - case DEV_RAM : - result = RAM_disk_initialize(); - - // translate the reslut code here - - return stat; - - case DEV_MMC : - result = MMC_disk_initialize(); - - // translate the reslut code here - - return stat; - - case DEV_USB : - result = USB_disk_initialize(); - - // translate the reslut code here - - return stat; + if(pdrv >= DEV_USB_MIN && pdrv <= DEV_USB_MAX){ + USB_disk_initialize(pdrv - DEV_USB_MIN); + return 0; // OK } return STA_NOINIT; } @@ -106,33 +78,14 @@ DRESULT disk_read ( DRESULT res; int result; - switch (pdrv) { - case DEV_RAM : - // translate the arguments here + if(pdrv >= DEV_SDIO_MIN && pdrv <= DEV_SDIO_MAX){ + + return 0; // OK + } - result = RAM_disk_read(buff, sector, count); - - // translate the reslut code here - - return res; - - case DEV_MMC : - // translate the arguments here - - result = MMC_disk_read(buff, sector, count); - - // translate the reslut code here - - return res; - - case DEV_USB : - // translate the arguments here - - result = USB_disk_read(buff, sector, count); - - // translate the reslut code here - - return res; + if(pdrv >= DEV_USB_MIN && pdrv <= DEV_USB_MAX){ + USB_disk_read(pdrv - DEV_USB_MIN, buff, sector, count); + return 0; // OK } return RES_PARERR; @@ -156,35 +109,16 @@ DRESULT disk_write ( DRESULT res; int result; - switch (pdrv) { - case DEV_RAM : - // translate the arguments here - - result = RAM_disk_write(buff, sector, count); - - // translate the reslut code here - - return res; - - case DEV_MMC : - // translate the arguments here - - result = MMC_disk_write(buff, sector, count); - - // translate the reslut code here - - return res; - - case DEV_USB : - // translate the arguments here - - result = USB_disk_write(buff, sector, count); - - // translate the reslut code here - - return res; + if(pdrv >= DEV_SDIO_MIN && pdrv <= DEV_SDIO_MAX){ + + return 0; // OK } + if(pdrv >= DEV_USB_MIN && pdrv <= DEV_USB_MAX){ + result = USB_disk_write(pdrv - DEV_USB_MIN, buff, sector, count); + return 0; // OK + } + return RES_PARERR; } @@ -204,24 +138,15 @@ DRESULT disk_ioctl ( DRESULT res; int result; - switch (pdrv) { - case DEV_RAM : - // Process of the command for the RAM drive + if(pdrv >= DEV_SDIO_MIN && pdrv <= DEV_SDIO_MAX){ + + return 0; // OK + } - return res; - - case DEV_MMC : - - // Process of the command for the MMC/SD card - - return res; - - case DEV_USB : - - // Process of the command the USB drive - - return res; + if(pdrv >= DEV_USB_MIN && pdrv <= DEV_USB_MAX){ + USB_disk_ioctl(pdrv - DEV_USB_MIN, cmd, buff); + return 0; // OK } return RES_PARERR; diff --git a/lib/source/diskio.h b/lib/FatFs/source/diskio.h similarity index 90% rename from lib/source/diskio.h rename to lib/FatFs/source/diskio.h index e4ead78..5ab2231 100644 --- a/lib/source/diskio.h +++ b/lib/FatFs/source/diskio.h @@ -32,6 +32,12 @@ DRESULT disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count); DRESULT disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count); DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff); +DSTATUS USB_disk_initialize (BYTE pdrv); +DSTATUS USB_disk_status (BYTE pdrv); +DRESULT USB_disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count); +DRESULT USB_disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count); +DRESULT USB_disk_ioctl (BYTE pdrv, BYTE cmd, void* buff); + /* Disk Status Bits (DSTATUS) */ diff --git a/lib/source/ff.c b/lib/FatFs/source/ff.c similarity index 100% rename from lib/source/ff.c rename to lib/FatFs/source/ff.c diff --git a/lib/source/ff.h b/lib/FatFs/source/ff.h similarity index 99% rename from lib/source/ff.h rename to lib/FatFs/source/ff.h index a3eb2eb..dccc0f9 100644 --- a/lib/source/ff.h +++ b/lib/FatFs/source/ff.h @@ -22,6 +22,11 @@ #ifndef FF_DEFINED #define FF_DEFINED 5380 /* Revision ID */ +#define DEV_SDIO_MIN 0 +#define DEV_SDIO_MAX 1 +#define DEV_USB_MIN 2 +#define DEV_USB_MAX 9 + #ifdef __cplusplus extern "C" { #endif diff --git a/lib/source/ffconf.h b/lib/FatFs/source/ffconf.h similarity index 100% rename from lib/source/ffconf.h rename to lib/FatFs/source/ffconf.h diff --git a/lib/source/ffsystem.c b/lib/FatFs/source/ffsystem.c similarity index 100% rename from lib/source/ffsystem.c rename to lib/FatFs/source/ffsystem.c diff --git a/lib/source/ffunicode.c b/lib/FatFs/source/ffunicode.c similarity index 100% rename from lib/source/ffunicode.c rename to lib/FatFs/source/ffunicode.c diff --git a/msc_app.c b/msc_app.c index b76efb0..9dc57f8 100644 --- a/msc_app.c +++ b/msc_app.c @@ -36,7 +36,6 @@ static scsi_inquiry_resp_t inquiry_resp; //------------- Elm Chan FatFS -------------// static FATFS fatfs[CFG_TUH_DEVICE_MAX]; // for simplicity only support 1 LUN per device -static volatile bool _disk_busy[CFG_TUH_DEVICE_MAX]; bool file_accessible = false; FIL fp; @@ -161,119 +160,3 @@ void tuh_msc_umount_cb(uint8_t dev_addr) } -//--------------------------------------------------------------------+ -// DiskIO -//--------------------------------------------------------------------+ - -static void wait_for_disk_io(BYTE pdrv) -{ - while(_disk_busy[pdrv]) - { - tuh_task(); - } -} - -static bool disk_io_complete(uint8_t dev_addr, tuh_msc_complete_data_t const * cb_data) -{ - (void) dev_addr; (void) cb_data; - _disk_busy[dev_addr-1] = false; - return true; -} - -DSTATUS disk_status ( - BYTE pdrv /* Physical drive nmuber to identify the drive */ -) -{ - uint8_t dev_addr = pdrv + 1; - return tuh_msc_mounted(dev_addr) ? 0 : STA_NODISK; -} - -DSTATUS disk_initialize ( - BYTE pdrv /* Physical drive nmuber to identify the drive */ -) -{ - (void) pdrv; - return 0; // nothing to do -} - -DRESULT disk_read ( - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - BYTE *buff, /* Data buffer to store read data */ - LBA_t sector, /* Start sector in LBA */ - UINT count /* Number of sectors to read */ -) -{ - uint8_t const dev_addr = pdrv + 1; - uint8_t const lun = 0; - - _disk_busy[pdrv] = true; - tuh_msc_read10(dev_addr, lun, buff, sector, (uint16_t) count, disk_io_complete, 0); - wait_for_disk_io(pdrv); - - return RES_OK; -} - -#if FF_FS_READONLY == 0 - -DRESULT disk_write ( - BYTE pdrv, /* Physical drive nmuber to identify the drive */ - const BYTE *buff, /* Data to be written */ - LBA_t sector, /* Start sector in LBA */ - UINT count /* Number of sectors to write */ -) -{ - uint8_t const dev_addr = pdrv + 1; - uint8_t const lun = 0; - - _disk_busy[pdrv] = true; - tuh_msc_write10(dev_addr, lun, buff, sector, (uint16_t) count, disk_io_complete, 0); - wait_for_disk_io(pdrv); - - return RES_OK; -} - -#endif - -DRESULT disk_ioctl ( - BYTE pdrv, /* Physical drive nmuber (0..) */ - BYTE cmd, /* Control code */ - void *buff /* Buffer to send/receive control data */ -) -{ - uint8_t const dev_addr = pdrv + 1; - uint8_t const lun = 0; - switch ( cmd ) - { - case CTRL_SYNC: - // nothing to do since we do blocking - return RES_OK; - - case GET_SECTOR_COUNT: - *((DWORD*) buff) = (WORD) tuh_msc_get_block_count(dev_addr, lun); - return RES_OK; - - case GET_SECTOR_SIZE: - *((WORD*) buff) = (WORD) tuh_msc_get_block_size(dev_addr, lun); - return RES_OK; - - case GET_BLOCK_SIZE: - *((DWORD*) buff) = 1; // erase block size in units of sector size - return RES_OK; - - default: - return RES_PARERR; - } - - return RES_OK; -} - -DWORD get_fattime (void){ - return - (2025-1970) << 25 | // Année - 6 << 21 | // Mois - 7 << 16 | // jour du mois - 17 << 11 | // Heures - 29 << 5 | // Minutes - 30 << 0 // Secondes - ; -} \ No newline at end of file