mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-24 13:34:37 +08:00
the unit of read/write offset and buffer size is changed to the block size in block device driver read/write interface.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@793 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
@@ -41,6 +41,10 @@ static int elm_result_to_dfs(FRESULT result)
|
||||
status = -DFS_STATUS_EROFS;
|
||||
break;
|
||||
|
||||
case FR_MKFS_ABORTED:
|
||||
status = -DFS_STATUS_EINVAL;
|
||||
break;
|
||||
|
||||
default:
|
||||
status = -1;
|
||||
break;
|
||||
@@ -534,8 +538,8 @@ DRESULT disk_read (BYTE drv, BYTE *buff, DWORD sector, BYTE count)
|
||||
rt_size_t result;
|
||||
rt_device_t device = disk[drv];
|
||||
|
||||
result = rt_device_read(device, sector * 512, buff, count * 512);
|
||||
if (result == count * 512)
|
||||
result = rt_device_read(device, sector, buff, count);
|
||||
if (result == count)
|
||||
{
|
||||
return RES_OK;
|
||||
}
|
||||
@@ -549,8 +553,8 @@ DRESULT disk_write (BYTE drv, const BYTE *buff, DWORD sector, BYTE count)
|
||||
rt_size_t result;
|
||||
rt_device_t device = disk[drv];
|
||||
|
||||
result = rt_device_write(device, sector * 512, buff, count * 512);
|
||||
if (result == count * 512)
|
||||
result = rt_device_write(device, sector, buff, count);
|
||||
if (result == count)
|
||||
{
|
||||
return RES_OK;
|
||||
}
|
||||
@@ -561,6 +565,38 @@ DRESULT disk_write (BYTE drv, const BYTE *buff, DWORD sector, BYTE count)
|
||||
/* Miscellaneous Functions */
|
||||
DRESULT disk_ioctl (BYTE drv, BYTE ctrl, void *buff)
|
||||
{
|
||||
rt_device_t device = disk[drv];
|
||||
|
||||
if (device == RT_NULL) return RES_ERROR;
|
||||
|
||||
if (ctrl == GET_SECTOR_COUNT)
|
||||
{
|
||||
struct rt_device_blk_geometry geometry;
|
||||
|
||||
rt_memset(&geometry, 0, sizeof(geometry));
|
||||
rt_device_control(device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
|
||||
|
||||
*(DWORD*)buff = geometry.sector_count;
|
||||
}
|
||||
else if (ctrl == GET_SECTOR_SIZE)
|
||||
{
|
||||
struct rt_device_blk_geometry geometry;
|
||||
|
||||
rt_memset(&geometry, 0, sizeof(geometry));
|
||||
rt_device_control(device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
|
||||
|
||||
*(DWORD*)buff = geometry.bytes_per_sector;
|
||||
}
|
||||
else if (ctrl == GET_BLOCK_SIZE) /* Get erase block size in unit of sectors (DWORD) */
|
||||
{
|
||||
struct rt_device_blk_geometry geometry;
|
||||
|
||||
rt_memset(&geometry, 0, sizeof(geometry));
|
||||
rt_device_control(device, RT_DEVICE_CTRL_BLK_GETGEOME, &geometry);
|
||||
|
||||
*(DWORD*)buff = geometry.block_size/geometry.bytes_per_sector;
|
||||
}
|
||||
|
||||
return RES_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -2772,7 +2772,7 @@ FRESULT f_forward (
|
||||
/* Create File System on the Drive */
|
||||
/*-----------------------------------------------------------------------*/
|
||||
#define N_ROOTDIR 512 /* Multiple of 32 and <= 2048 */
|
||||
#define N_FATS 1 /* 1 or 2 */
|
||||
#define N_FATS 2 /* 1 or 2 */ // my edit
|
||||
#define MAX_SECTOR 131072000UL /* Maximum partition size */
|
||||
#define MIN_SECTOR 2000UL /* Minimum partition size */
|
||||
|
||||
@@ -2780,7 +2780,7 @@ FRESULT f_forward (
|
||||
FRESULT f_mkfs (
|
||||
BYTE drv, /* Logical drive number */
|
||||
BYTE partition, /* Partitioning rule 0:FDISK, 1:SFD */
|
||||
WORD allocsize /* Allocation unit size [bytes] */
|
||||
DWORD allocsize /* Allocation unit size [bytes] */
|
||||
)
|
||||
{
|
||||
static const DWORD sstbl[] = { 2048000, 1024000, 512000, 256000, 128000, 64000, 32000, 16000, 8000, 4000, 0 };
|
||||
|
||||
@@ -434,7 +434,7 @@ FRESULT f_chmod (const XCHAR*, BYTE, BYTE); /* Change attriburte of the file/d
|
||||
FRESULT f_utime (const XCHAR*, const FILINFO*); /* Change timestamp of the file/dir */
|
||||
FRESULT f_rename (const XCHAR*, const XCHAR*); /* Rename/Move a file or directory */
|
||||
FRESULT f_forward (FIL*, UINT(*)(const BYTE*,UINT), UINT, UINT*); /* Forward data to the stream */
|
||||
FRESULT f_mkfs (BYTE, BYTE, WORD); /* Create a file system on the drive */
|
||||
FRESULT f_mkfs (BYTE, BYTE, DWORD); /* Create a file system on the drive */
|
||||
FRESULT f_chdir (const XCHAR*); /* Change current directory */
|
||||
FRESULT f_chdrive (BYTE); /* Change current drive */
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/* To enable string functions, set _USE_STRFUNC to 1 or 2. */
|
||||
|
||||
|
||||
#define _USE_MKFS 0 /* 0 or 1 */
|
||||
#define _USE_MKFS 1 /* 0 or 1 */
|
||||
/* To enable f_mkfs function, set _USE_MKFS to 1 and set _FS_READONLY to 0 */
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user