Login

Subversion Repositories NedoOS

Rev

Rev 8 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

/*-----------------------------------------------------------------------*/
/* 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.       */
/*-----------------------------------------------------------------------*/

#include "ff.h"                 /* Obtains integer types */
#include "diskio.h"             /* Declarations of disk functions */
#include <stdio.h>
#include <time.h>

/* Definitions of physical drive number for each drive */
#define DEV_RAM         0       /* Example: Map Ramdisk to physical drive 0 */
#define DEV_MMC         1       /* Example: Map MMC/SD card to physical drive 1 */
#define DEV_USB         2       /* Example: Map USB MSD to physical drive 2 */

extern FILE * img;

/*-----------------------------------------------------------------------*/
/* Get Drive Status                                                      */
/*-----------------------------------------------------------------------*/

DSTATUS disk_status (
        BYTE pdrv               /* Physical drive nmuber to identify the drive */
)
{
        pdrv;
        if(img==NULL) return RES_ERROR;
        return RES_OK;
}



/*-----------------------------------------------------------------------*/
/* Inidialize a Drive                                                    */
/*-----------------------------------------------------------------------*/

DSTATUS disk_initialize (
        BYTE pdrv                               /* Physical drive nmuber to identify the drive */
)
{
        pdrv;
        if(img==NULL) return RES_ERROR;
        return RES_OK;
}



/*-----------------------------------------------------------------------*/
/* Read Sector(s)                                                        */
/*-----------------------------------------------------------------------*/

DRESULT disk_read (
        BYTE pdrv,              /* Physical drive nmuber to identify the drive */
        BYTE *buff,             /* Data buffer to store read data */
        DWORD sector,   /* Start sector in LBA */
        UINT count              /* Number of sectors to read */
)
{
        pdrv;
        if(img==NULL) return RES_ERROR;
        fseek(img,sector*512,SEEK_SET);
        fread(buff, 1, count*512, img);
        return RES_OK;
}



/*-----------------------------------------------------------------------*/
/* Write Sector(s)                                                       */
/*-----------------------------------------------------------------------*/

#if FF_FS_READONLY == 0

DRESULT disk_write (
        BYTE pdrv,                      /* Physical drive nmuber to identify the drive */
        const BYTE *buff,       /* Data to be written */
        DWORD sector,           /* Start sector in LBA */
        UINT count                      /* Number of sectors to write */
)
{
        pdrv;
        if(img==NULL) return RES_ERROR;
        fseek(img,sector*512,SEEK_SET);
        fwrite(buff, 1, count*512, img);
        return RES_OK;
}

#endif


/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions                                               */
/*-----------------------------------------------------------------------*/

DRESULT disk_ioctl (
        BYTE pdrv,              /* Physical drive nmuber (0..) */
        BYTE cmd,               /* Control code */
        void *buff              /* Buffer to send/receive control data */
)
{
        DRESULT res=RES_OK;
        int result;

        switch (pdrv) {
        case DEV_RAM :

                // Process of the command for the RAM drive

                return res;

        case DEV_MMC :

                // Process of the command for the MMC/SD card

                return res;

        case DEV_USB :

                // Process of the command the USB drive

                return res;
        }

        return RES_PARERR;
}

DWORD get_fattime (void){
  struct tm *local;
  time_t t;
  DWORD ft=0;

  t = time(NULL);
  local = localtime(&t);
  ft=((local->tm_year-80)&0x7f)<<25;
  ft|=((local->tm_mon+1)&0x0f)<<21;
  ft|=((local->tm_mday)&0x1f)<<16;
  ft|=((local->tm_hour)&0x1f)<<11;
  ft|=((local->tm_min)&0x3f)<<5;
  ft|=((local->tm_sec)&0x3f)>>1;
  //printf("Year: %d\n", ft);
        return ft;
}