229 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			229 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*-----------------------------------------------------------------------*/ | ||
|  | /* Low level disk I/O module SKELETON for FatFs     (C)ChaN, 2019        */ | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | /* 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 */
 | ||
|  | 
 | ||
|  | /* 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 */
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | /* Get Drive Status                                                      */ | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | 
 | ||
|  | DSTATUS disk_status ( | ||
|  | 	BYTE pdrv		/* Physical drive nmuber to identify the drive */ | ||
|  | ) | ||
|  | { | ||
|  | 	DSTATUS stat; | ||
|  | 	int result; | ||
|  | 
 | ||
|  | 	switch (pdrv) { | ||
|  | 	case DEV_RAM : | ||
|  | 		result = RAM_disk_status(); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return stat; | ||
|  | 
 | ||
|  | 	case DEV_MMC : | ||
|  | 		result = MMC_disk_status(); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return stat; | ||
|  | 
 | ||
|  | 	case DEV_USB : | ||
|  | 		result = USB_disk_status(); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return stat; | ||
|  | 	} | ||
|  | 	return STA_NOINIT; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | /* Inidialize a Drive                                                    */ | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | 
 | ||
|  | DSTATUS disk_initialize ( | ||
|  | 	BYTE pdrv				/* Physical drive nmuber to identify the drive */ | ||
|  | ) | ||
|  | { | ||
|  | 	DSTATUS stat; | ||
|  | 	int result; | ||
|  | 
 | ||
|  | 	switch (pdrv) { | ||
|  | 	case DEV_RAM : | ||
|  | 		result = RAM_disk_initialize(); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return stat; | ||
|  | 
 | ||
|  | 	case DEV_MMC : | ||
|  | 		result = MMC_disk_initialize(); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return stat; | ||
|  | 
 | ||
|  | 	case DEV_USB : | ||
|  | 		result = USB_disk_initialize(); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return stat; | ||
|  | 	} | ||
|  | 	return STA_NOINIT; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | /* Read Sector(s)                                                        */ | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | 
 | ||
|  | DRESULT disk_read ( | ||
|  | 	BYTE pdrv,		/* Physical drive nmuber to identify the drive */ | ||
|  | 	BYTE *buff,		/* Data buffer to store read data */ | ||
|  | 	LBA_t sector,	/* Start sector in LBA */ | ||
|  | 	UINT count		/* Number of sectors to read */ | ||
|  | ) | ||
|  | { | ||
|  | 	DRESULT res; | ||
|  | 	int result; | ||
|  | 
 | ||
|  | 	switch (pdrv) { | ||
|  | 	case DEV_RAM : | ||
|  | 		// translate the arguments here
 | ||
|  | 
 | ||
|  | 		result = RAM_disk_read(buff, sector, count); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return res; | ||
|  | 
 | ||
|  | 	case DEV_MMC : | ||
|  | 		// translate the arguments here
 | ||
|  | 
 | ||
|  | 		result = MMC_disk_read(buff, sector, count); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return res; | ||
|  | 
 | ||
|  | 	case DEV_USB : | ||
|  | 		// translate the arguments here
 | ||
|  | 
 | ||
|  | 		result = USB_disk_read(buff, sector, count); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return res; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return RES_PARERR; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /*-----------------------------------------------------------------------*/ | ||
|  | /* 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 */ | ||
|  | 	LBA_t sector,		/* Start sector in LBA */ | ||
|  | 	UINT count			/* Number of sectors to write */ | ||
|  | ) | ||
|  | { | ||
|  | 	DRESULT res; | ||
|  | 	int result; | ||
|  | 
 | ||
|  | 	switch (pdrv) { | ||
|  | 	case DEV_RAM : | ||
|  | 		// translate the arguments here
 | ||
|  | 
 | ||
|  | 		result = RAM_disk_write(buff, sector, count); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return res; | ||
|  | 
 | ||
|  | 	case DEV_MMC : | ||
|  | 		// translate the arguments here
 | ||
|  | 
 | ||
|  | 		result = MMC_disk_write(buff, sector, count); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return res; | ||
|  | 
 | ||
|  | 	case DEV_USB : | ||
|  | 		// translate the arguments here
 | ||
|  | 
 | ||
|  | 		result = USB_disk_write(buff, sector, count); | ||
|  | 
 | ||
|  | 		// translate the reslut code here
 | ||
|  | 
 | ||
|  | 		return res; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return RES_PARERR; | ||
|  | } | ||
|  | 
 | ||
|  | #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; | ||
|  | 	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; | ||
|  | } |