/*-----------------------------------------------------------------------*/ /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2016 */ /*-----------------------------------------------------------------------*/ /* If a working storage control module is available, it should be */ /* attached to the FatFs via a glue function rather than modifying it. */ /* This is an example of glue functions to attach various exsisting */ /* storage control modules to the FatFs module with a defined API. */ /*-----------------------------------------------------------------------*/ /*----------------------------------------------------------------------------/ / FatFs - Generic FAT file system module R0.12a / /-----------------------------------------------------------------------------/ / / Copyright (C) 2016, ChaN, all right reserved. / / FatFs module is an open source software. Redistribution and use of FatFs in / source and binary forms, with or without modification, are permitted provided / that the following condition is met: / 1. Redistributions of source code must retain the above copyright notice, / this condition and the following disclaimer. / / This software is provided by the copyright holder and contributors "AS IS" / and any warranties related to this software are DISCLAIMED. / The copyright owner or contributors be NOT LIABLE for any damages caused / by use of this software. /----------------------------------------------------------------------------*/ #include /* FatFs lower layer API */ #include #include /*-----------------------------------------------------------------------*/ /* Get Drive Status */ /*-----------------------------------------------------------------------*/ DSTATUS disk_status(BYTE pdrv) { if (disk_access_status() != 0) { return STA_NOINIT; } else { return RES_OK; } } /*-----------------------------------------------------------------------*/ /* Inidialize a Drive */ /*-----------------------------------------------------------------------*/ DSTATUS disk_initialize(BYTE pdrv) { if (disk_access_init() != 0) { return STA_NOINIT; } else { return RES_OK; } } /*-----------------------------------------------------------------------*/ /* Read Sector(s) */ /*-----------------------------------------------------------------------*/ DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count) { if (disk_access_read(buff, sector, count) != 0) { return RES_ERROR; } else { return RES_OK; } } /*-----------------------------------------------------------------------*/ /* Write Sector(s) */ /*-----------------------------------------------------------------------*/ DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count) { if(disk_access_write(buff, sector, count) != 0) { return RES_ERROR; } else { return RES_OK; } } /*-----------------------------------------------------------------------*/ /* Miscellaneous Functions */ /*-----------------------------------------------------------------------*/ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) { int ret = RES_OK; uint32_t tmp = 0; switch (cmd) { case CTRL_SYNC: if(disk_access_ioctl(DISK_IOCTL_CTRL_SYNC, buff) != 0) { ret = RES_ERROR; } break; case GET_SECTOR_COUNT: if (disk_access_ioctl(DISK_IOCTL_GET_DISK_SIZE, &tmp) != 0) { ret = RES_ERROR; } else { *(uint32_t *) buff = (tmp / _MIN_SS) ; } break; case GET_BLOCK_SIZE: if (disk_access_ioctl(DISK_IOCTL_GET_ERASE_BLOCK_SZ, buff) != 0) { ret = RES_ERROR; } break; default: ret = RES_PARERR; break; } return ret; }