A fork of the original SDFileSystem, added only stat() for getting file information.

Dependents:   FRDM_K64F_IOT

Added code to the original SDFileSystem to export the stat() command. It would now be possible to get the FILEINFO struct of a directory entry to get information such as file size, etc.

SDFileSystem2 usage

#include "SDFileSystem.h"
SDFileSystem sd(p5,p6,p7,p8,"sd"); // mosi, miso, sck, cs 

static void cmd_ls(Stream * chp, int argc, char * argv[])
{
   DIR * dp;
   struct dirent * dirp;
   FILINFO fileInfo;
   char dirroot[256];
   
   if (argc >= 1)
       sprintf(dirroot, "/sd/%s", argv[0]);
   else
       sprintf(dirroot, "/sd");
   
   chp->printf("Listing directory [%s]\r\n", dirroot);
   
   dp = opendir(dirroot);			
   while((dirp = readdir(dp)) != NULL)
   {
       if (sd.stat(dirp->d_name, &fileInfo) == 0)
       {
           if (fileInfo.fattrib & AM_DIR )
                   chp->printf("<DIR>\t\t");
           else
                   chp->printf("%ld\t\t", fileInfo.fsize);
       }
       chp->printf("%s\r\n", dirp->d_name);
   }
   closedir(dp);
}

FATFileSystem/ChaN/diskio.h

Committer:
vpcola
Date:
2015-04-28
Revision:
0:572d27f56fcd

File content as of revision 0:572d27f56fcd:

//-----------------------------------------------------------------------
//  Low level disk interface modlue include file
//-----------------------------------------------------------------------

#ifndef _DISKIO

#define _READONLY    0   // 1: Remove write functions
#define _USE_IOCTL   1   // 1: Use disk_ioctl fucntion

#include "integer.h"


// Status of Disk Functions
typedef BYTE    DSTATUS;

// Results of Disk Functions
typedef enum {
    RES_OK = 0, // 0: Successful
    RES_ERROR,  // 1: R/W Error
    RES_WRPRT,  // 2: Write Protected
    RES_NOTRDY, // 3: Not Ready
    RES_PARERR  // 4: Invalid Parameter
} DRESULT;


// Prototypes for disk control functions

int assign_drives (int, int);
DSTATUS disk_initialize (BYTE);
DSTATUS disk_status (BYTE);
DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);
#if    _READONLY == 0
DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);
#endif
DRESULT disk_ioctl (BYTE, BYTE, void*);



// Disk Status Bits (DSTATUS)
#define STA_NOINIT  0x01    // Drive not initialized
#define STA_NODISK  0x02    // No medium in the drive
#define STA_PROTECT 0x04    // Write protected


// Command code for disk_ioctrl fucntion

// Generic command (defined for FatFs)
#define CTRL_SYNC           0    // Flush disk cache (for write functions)
#define GET_SECTOR_COUNT    1    // Get media size (for only f_mkfs())
#define GET_SECTOR_SIZE     2    // Get sector size (for multiple sector size (_MAX_SS >= 1024))
#define GET_BLOCK_SIZE      3    // Get erase block size (for only f_mkfs())
#define CTRL_ERASE_SECTOR   4    // Force erased a block of sectors (for only _USE_ERASE)

// Generic command
#define CTRL_POWER          5    // Get/Set power status
#define CTRL_LOCK           6    // Lock/Unlock media removal
#define CTRL_EJECT          7    // Eject media

// MMC/SDC specific ioctl command
#define MMC_GET_TYPE        10    // Get card type
#define MMC_GET_CSD         11    // Get CSD
#define MMC_GET_CID         12    // Get CID
#define MMC_GET_OCR         13    // Get OCR
#define MMC_GET_SDSTAT      14    // Get SD status

// ATA/CF specific ioctl command
#define ATA_GET_REV         20    // Get F/W revision
#define ATA_GET_MODEL       21    // Get model name
#define ATA_GET_SN          22    // Get serial number

// NAND specific ioctl command
#define NAND_FORMAT         30    // Create physical format


#define _DISKIO
#endif