Counter

Dependencies:   EthernetInterface NTPClient SDFileSystem TextLCD WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip FATFileSystem

Committer:
Tuxitheone
Date:
Mon Feb 29 18:59:15 2016 +0000
Revision:
0:ecaf3e593122
TankCounter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Tuxitheone 0:ecaf3e593122 1 /*-----------------------------------------------------------------------*/
Tuxitheone 0:ecaf3e593122 2 /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2007 */
Tuxitheone 0:ecaf3e593122 3 /*-----------------------------------------------------------------------*/
Tuxitheone 0:ecaf3e593122 4 /* This is a stub disk I/O module that acts as front end of the existing */
Tuxitheone 0:ecaf3e593122 5 /* disk I/O modules and attach it to FatFs module with common interface. */
Tuxitheone 0:ecaf3e593122 6 /*-----------------------------------------------------------------------*/
Tuxitheone 0:ecaf3e593122 7 #include "ffconf.h"
Tuxitheone 0:ecaf3e593122 8 #include "diskio.h"
Tuxitheone 0:ecaf3e593122 9
Tuxitheone 0:ecaf3e593122 10 #include "mbed_debug.h"
Tuxitheone 0:ecaf3e593122 11 #include "FATFileSystem.h"
Tuxitheone 0:ecaf3e593122 12
Tuxitheone 0:ecaf3e593122 13 using namespace mbed;
Tuxitheone 0:ecaf3e593122 14
Tuxitheone 0:ecaf3e593122 15 DSTATUS disk_initialize (
Tuxitheone 0:ecaf3e593122 16 BYTE drv /* Physical drive nmuber (0..) */
Tuxitheone 0:ecaf3e593122 17 )
Tuxitheone 0:ecaf3e593122 18 {
Tuxitheone 0:ecaf3e593122 19 debug_if(FFS_DBG, "disk_initialize on drv [%d]\n", drv);
Tuxitheone 0:ecaf3e593122 20 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_initialize();
Tuxitheone 0:ecaf3e593122 21 }
Tuxitheone 0:ecaf3e593122 22
Tuxitheone 0:ecaf3e593122 23 DSTATUS disk_status (
Tuxitheone 0:ecaf3e593122 24 BYTE drv /* Physical drive nmuber (0..) */
Tuxitheone 0:ecaf3e593122 25 )
Tuxitheone 0:ecaf3e593122 26 {
Tuxitheone 0:ecaf3e593122 27 debug_if(FFS_DBG, "disk_status on drv [%d]\n", drv);
Tuxitheone 0:ecaf3e593122 28 return (DSTATUS)FATFileSystem::_ffs[drv]->disk_status();
Tuxitheone 0:ecaf3e593122 29 }
Tuxitheone 0:ecaf3e593122 30
Tuxitheone 0:ecaf3e593122 31 DRESULT disk_read (
Tuxitheone 0:ecaf3e593122 32 BYTE drv, /* Physical drive nmuber (0..) */
Tuxitheone 0:ecaf3e593122 33 BYTE *buff, /* Data buffer to store read data */
Tuxitheone 0:ecaf3e593122 34 DWORD sector, /* Sector address (LBA) */
Tuxitheone 0:ecaf3e593122 35 BYTE count /* Number of sectors to read (1..255) */
Tuxitheone 0:ecaf3e593122 36 )
Tuxitheone 0:ecaf3e593122 37 {
Tuxitheone 0:ecaf3e593122 38 debug_if(FFS_DBG, "disk_read(sector %d, count %d) on drv [%d]\n", sector, count, drv);
Tuxitheone 0:ecaf3e593122 39 for(DWORD s=sector; s<sector+count; s++) {
Tuxitheone 0:ecaf3e593122 40 debug_if(FFS_DBG, " disk_read(sector %d)\n", s);
Tuxitheone 0:ecaf3e593122 41 int res = FATFileSystem::_ffs[drv]->disk_read((uint8_t*)buff, s);
Tuxitheone 0:ecaf3e593122 42 if(res) {
Tuxitheone 0:ecaf3e593122 43 return RES_PARERR;
Tuxitheone 0:ecaf3e593122 44 }
Tuxitheone 0:ecaf3e593122 45 buff += 512;
Tuxitheone 0:ecaf3e593122 46 }
Tuxitheone 0:ecaf3e593122 47 return RES_OK;
Tuxitheone 0:ecaf3e593122 48 }
Tuxitheone 0:ecaf3e593122 49
Tuxitheone 0:ecaf3e593122 50 #if _READONLY == 0
Tuxitheone 0:ecaf3e593122 51 DRESULT disk_write (
Tuxitheone 0:ecaf3e593122 52 BYTE drv, /* Physical drive nmuber (0..) */
Tuxitheone 0:ecaf3e593122 53 const BYTE *buff, /* Data to be written */
Tuxitheone 0:ecaf3e593122 54 DWORD sector, /* Sector address (LBA) */
Tuxitheone 0:ecaf3e593122 55 BYTE count /* Number of sectors to write (1..255) */
Tuxitheone 0:ecaf3e593122 56 )
Tuxitheone 0:ecaf3e593122 57 {
Tuxitheone 0:ecaf3e593122 58 debug_if(FFS_DBG, "disk_write(sector %d, count %d) on drv [%d]\n", sector, count, drv);
Tuxitheone 0:ecaf3e593122 59 for(DWORD s = sector; s < sector + count; s++) {
Tuxitheone 0:ecaf3e593122 60 debug_if(FFS_DBG, " disk_write(sector %d)\n", s);
Tuxitheone 0:ecaf3e593122 61 int res = FATFileSystem::_ffs[drv]->disk_write((uint8_t*)buff, s);
Tuxitheone 0:ecaf3e593122 62 if(res) {
Tuxitheone 0:ecaf3e593122 63 return RES_PARERR;
Tuxitheone 0:ecaf3e593122 64 }
Tuxitheone 0:ecaf3e593122 65 buff += 512;
Tuxitheone 0:ecaf3e593122 66 }
Tuxitheone 0:ecaf3e593122 67 return RES_OK;
Tuxitheone 0:ecaf3e593122 68 }
Tuxitheone 0:ecaf3e593122 69 #endif /* _READONLY */
Tuxitheone 0:ecaf3e593122 70
Tuxitheone 0:ecaf3e593122 71 DRESULT disk_ioctl (
Tuxitheone 0:ecaf3e593122 72 BYTE drv, /* Physical drive nmuber (0..) */
Tuxitheone 0:ecaf3e593122 73 BYTE ctrl, /* Control code */
Tuxitheone 0:ecaf3e593122 74 void *buff /* Buffer to send/receive control data */
Tuxitheone 0:ecaf3e593122 75 )
Tuxitheone 0:ecaf3e593122 76 {
Tuxitheone 0:ecaf3e593122 77 debug_if(FFS_DBG, "disk_ioctl(%d)\n", ctrl);
Tuxitheone 0:ecaf3e593122 78 switch(ctrl) {
Tuxitheone 0:ecaf3e593122 79 case CTRL_SYNC:
Tuxitheone 0:ecaf3e593122 80 if(FATFileSystem::_ffs[drv] == NULL) {
Tuxitheone 0:ecaf3e593122 81 return RES_NOTRDY;
Tuxitheone 0:ecaf3e593122 82 } else if(FATFileSystem::_ffs[drv]->disk_sync()) {
Tuxitheone 0:ecaf3e593122 83 return RES_ERROR;
Tuxitheone 0:ecaf3e593122 84 }
Tuxitheone 0:ecaf3e593122 85 return RES_OK;
Tuxitheone 0:ecaf3e593122 86 case GET_SECTOR_COUNT:
Tuxitheone 0:ecaf3e593122 87 if(FATFileSystem::_ffs[drv] == NULL) {
Tuxitheone 0:ecaf3e593122 88 return RES_NOTRDY;
Tuxitheone 0:ecaf3e593122 89 } else {
Tuxitheone 0:ecaf3e593122 90 DWORD res = FATFileSystem::_ffs[drv]->disk_sectors();
Tuxitheone 0:ecaf3e593122 91 if(res > 0) {
Tuxitheone 0:ecaf3e593122 92 *((DWORD*)buff) = res; // minimum allowed
Tuxitheone 0:ecaf3e593122 93 return RES_OK;
Tuxitheone 0:ecaf3e593122 94 } else {
Tuxitheone 0:ecaf3e593122 95 return RES_ERROR;
Tuxitheone 0:ecaf3e593122 96 }
Tuxitheone 0:ecaf3e593122 97 }
Tuxitheone 0:ecaf3e593122 98 case GET_BLOCK_SIZE:
Tuxitheone 0:ecaf3e593122 99 *((DWORD*)buff) = 1; // default when not known
Tuxitheone 0:ecaf3e593122 100 return RES_OK;
Tuxitheone 0:ecaf3e593122 101
Tuxitheone 0:ecaf3e593122 102 }
Tuxitheone 0:ecaf3e593122 103 return RES_PARERR;
Tuxitheone 0:ecaf3e593122 104 }