Dependencies:   ChaNFSSD mbed BMP085 SHT2x

Committer:
tosihisa
Date:
Mon Feb 27 16:20:15 2012 +0000
Revision:
9:9ca3db7ed7cb
V0.89.2. GPS recv data is OK.

Who changed what in which revision?

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