Mark Schwarzer / SDFileSystem_A8
Committer:
markschwarzer
Date:
Tue Nov 17 20:28:59 2020 +0000
Revision:
0:a9d72fcb5d03
logs gps data to SD card

Who changed what in which revision?

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