temp

Dependencies:   mbed SDFileSystem MS5607 ADXL345_I2C FATFileSystem

Committer:
IKobayashi
Date:
Mon Mar 16 23:37:42 2020 +0900
Revision:
0:c88c3b616c00
copy

Who changed what in which revision?

UserRevisionLine numberNew contents of line
IKobayashi 0:c88c3b616c00 1 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2014 */
IKobayashi 0:c88c3b616c00 3 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 4 /* If a working storage control module is available, it should be */
IKobayashi 0:c88c3b616c00 5 /* attached to the FatFs via a glue function rather than modifying it. */
IKobayashi 0:c88c3b616c00 6 /* This is an example of glue functions to attach various exsisting */
IKobayashi 0:c88c3b616c00 7 /* storage control modules to the FatFs module with a defined API. */
IKobayashi 0:c88c3b616c00 8 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 9
IKobayashi 0:c88c3b616c00 10 #include "diskio.h"
IKobayashi 0:c88c3b616c00 11 #include "mbed_debug.h"
IKobayashi 0:c88c3b616c00 12 #include "FATFileSystem.h"
IKobayashi 0:c88c3b616c00 13
IKobayashi 0:c88c3b616c00 14 using namespace mbed;
IKobayashi 0:c88c3b616c00 15
IKobayashi 0:c88c3b616c00 16 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 17 /* Get Drive Status */
IKobayashi 0:c88c3b616c00 18 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 19
IKobayashi 0:c88c3b616c00 20 DSTATUS disk_status (
IKobayashi 0:c88c3b616c00 21 BYTE pdrv /* Physical drive nmuber to identify the drive */
IKobayashi 0:c88c3b616c00 22 )
IKobayashi 0:c88c3b616c00 23 {
IKobayashi 0:c88c3b616c00 24 debug_if(FFS_DBG, "disk_status on pdrv [%d]\n", pdrv);
IKobayashi 0:c88c3b616c00 25 return (DSTATUS)FATFileSystem::_ffs[pdrv]->disk_status();
IKobayashi 0:c88c3b616c00 26 }
IKobayashi 0:c88c3b616c00 27
IKobayashi 0:c88c3b616c00 28 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 29 /* Inidialize a Drive */
IKobayashi 0:c88c3b616c00 30 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 31
IKobayashi 0:c88c3b616c00 32 DSTATUS disk_initialize (
IKobayashi 0:c88c3b616c00 33 BYTE pdrv /* Physical drive nmuber to identify the drive */
IKobayashi 0:c88c3b616c00 34 )
IKobayashi 0:c88c3b616c00 35 {
IKobayashi 0:c88c3b616c00 36 debug_if(FFS_DBG, "disk_initialize on pdrv [%d]\n", pdrv);
IKobayashi 0:c88c3b616c00 37 return (DSTATUS)FATFileSystem::_ffs[pdrv]->disk_initialize();
IKobayashi 0:c88c3b616c00 38 }
IKobayashi 0:c88c3b616c00 39
IKobayashi 0:c88c3b616c00 40 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 41 /* Read Sector(s) */
IKobayashi 0:c88c3b616c00 42 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 43
IKobayashi 0:c88c3b616c00 44 DRESULT disk_read (
IKobayashi 0:c88c3b616c00 45 BYTE pdrv, /* Physical drive nmuber to identify the drive */
IKobayashi 0:c88c3b616c00 46 BYTE* buff, /* Data buffer to store read data */
IKobayashi 0:c88c3b616c00 47 DWORD sector, /* Sector address in LBA */
IKobayashi 0:c88c3b616c00 48 UINT count /* Number of sectors to read */
IKobayashi 0:c88c3b616c00 49 )
IKobayashi 0:c88c3b616c00 50 {
IKobayashi 0:c88c3b616c00 51 debug_if(FFS_DBG, "disk_read(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
IKobayashi 0:c88c3b616c00 52 if (FATFileSystem::_ffs[pdrv]->disk_read((uint8_t*)buff, sector, count))
IKobayashi 0:c88c3b616c00 53 return RES_PARERR;
IKobayashi 0:c88c3b616c00 54 else
IKobayashi 0:c88c3b616c00 55 return RES_OK;
IKobayashi 0:c88c3b616c00 56 }
IKobayashi 0:c88c3b616c00 57
IKobayashi 0:c88c3b616c00 58 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 59 /* Write Sector(s) */
IKobayashi 0:c88c3b616c00 60 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 61
IKobayashi 0:c88c3b616c00 62 #if _USE_WRITE
IKobayashi 0:c88c3b616c00 63 DRESULT disk_write (
IKobayashi 0:c88c3b616c00 64 BYTE pdrv, /* Physical drive nmuber to identify the drive */
IKobayashi 0:c88c3b616c00 65 const BYTE* buff, /* Data to be written */
IKobayashi 0:c88c3b616c00 66 DWORD sector, /* Sector address in LBA */
IKobayashi 0:c88c3b616c00 67 UINT count /* Number of sectors to write */
IKobayashi 0:c88c3b616c00 68 )
IKobayashi 0:c88c3b616c00 69 {
IKobayashi 0:c88c3b616c00 70 debug_if(FFS_DBG, "disk_write(sector %d, count %d) on pdrv [%d]\n", sector, count, pdrv);
IKobayashi 0:c88c3b616c00 71 if (FATFileSystem::_ffs[pdrv]->disk_write((uint8_t*)buff, sector, count))
IKobayashi 0:c88c3b616c00 72 return RES_PARERR;
IKobayashi 0:c88c3b616c00 73 else
IKobayashi 0:c88c3b616c00 74 return RES_OK;
IKobayashi 0:c88c3b616c00 75 }
IKobayashi 0:c88c3b616c00 76 #endif
IKobayashi 0:c88c3b616c00 77
IKobayashi 0:c88c3b616c00 78 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 79 /* Miscellaneous Functions */
IKobayashi 0:c88c3b616c00 80 /*-----------------------------------------------------------------------*/
IKobayashi 0:c88c3b616c00 81
IKobayashi 0:c88c3b616c00 82 #if _USE_IOCTL
IKobayashi 0:c88c3b616c00 83 DRESULT disk_ioctl (
IKobayashi 0:c88c3b616c00 84 BYTE pdrv, /* Physical drive nmuber (0..) */
IKobayashi 0:c88c3b616c00 85 BYTE cmd, /* Control code */
IKobayashi 0:c88c3b616c00 86 void* buff /* Buffer to send/receive control data */
IKobayashi 0:c88c3b616c00 87 )
IKobayashi 0:c88c3b616c00 88 {
IKobayashi 0:c88c3b616c00 89 debug_if(FFS_DBG, "disk_ioctl(%d)\n", cmd);
IKobayashi 0:c88c3b616c00 90 switch(cmd) {
IKobayashi 0:c88c3b616c00 91 case CTRL_SYNC:
IKobayashi 0:c88c3b616c00 92 if(FATFileSystem::_ffs[pdrv] == NULL) {
IKobayashi 0:c88c3b616c00 93 return RES_NOTRDY;
IKobayashi 0:c88c3b616c00 94 } else if(FATFileSystem::_ffs[pdrv]->disk_sync()) {
IKobayashi 0:c88c3b616c00 95 return RES_ERROR;
IKobayashi 0:c88c3b616c00 96 }
IKobayashi 0:c88c3b616c00 97 return RES_OK;
IKobayashi 0:c88c3b616c00 98 case GET_SECTOR_COUNT:
IKobayashi 0:c88c3b616c00 99 if(FATFileSystem::_ffs[pdrv] == NULL) {
IKobayashi 0:c88c3b616c00 100 return RES_NOTRDY;
IKobayashi 0:c88c3b616c00 101 } else {
IKobayashi 0:c88c3b616c00 102 DWORD res = FATFileSystem::_ffs[pdrv]->disk_sectors();
IKobayashi 0:c88c3b616c00 103 if(res > 0) {
IKobayashi 0:c88c3b616c00 104 *((DWORD*)buff) = res; // minimum allowed
IKobayashi 0:c88c3b616c00 105 return RES_OK;
IKobayashi 0:c88c3b616c00 106 } else {
IKobayashi 0:c88c3b616c00 107 return RES_ERROR;
IKobayashi 0:c88c3b616c00 108 }
IKobayashi 0:c88c3b616c00 109 }
IKobayashi 0:c88c3b616c00 110 case GET_BLOCK_SIZE:
IKobayashi 0:c88c3b616c00 111 *((DWORD*)buff) = 1; // default when not known
IKobayashi 0:c88c3b616c00 112 return RES_OK;
IKobayashi 0:c88c3b616c00 113
IKobayashi 0:c88c3b616c00 114 }
IKobayashi 0:c88c3b616c00 115 return RES_PARERR;
IKobayashi 0:c88c3b616c00 116 }
IKobayashi 0:c88c3b616c00 117 #endif