📄 fat32_dep_sd.c
字号:
/*
* @(#)sd.c
* @date 2005/12/25
* @version 1.0
* @author Zhou Shangpin.
* Copyright 2005 Anyka corporation, Inc. All rights reserved.
* ANYKA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
#include "global.h"
#include "ram2medium.h"
#include "M3_sd_def.h"
#include "Fat32_Dep_SD.h"
#ifdef OS_WIN32
#include <windows.h>
static T_U8 SD_DriverNo;
T_VOID Sd_SetEmulate(T_U8 DriverNo)
{
SD_DriverNo = DriverNo;
}
#endif
T_PMEDIUM Sd_Initial()
{
T_U32 capacity, BytsPerSec, i;
T_PMEDIUM medium;
#ifdef OS_WIN32
capacity = 200 * 1024;
BytsPerSec = 512;
#else
// MTD_NAND_Reset();
if (!get_MediaInfo(SDCARD_DISK,&capacity, &BytsPerSec))
{
return AK_NULL;
}
#endif
medium = (T_PMEDIUM)Fwl_Malloc(sizeof(T_MEDIUM));
if(medium == AK_NULL)
{
return AK_NULL;
}
i = 0;
while (BytsPerSec > 1)
{
BytsPerSec >>= 1;
i++;
}
medium->SecBit = i;
((T_POBJECT)medium)->destroy = (F_DESTROY)Medium_Destroy;
((T_POBJECT)medium)->type = TYPE_MEDIUM;
medium->read = Sd_Read;
medium->write = Sd_Write;
medium->flush = Sd_Flush;
medium->capacity = capacity;
medium->type = MEDIUM_SD;
medium->msg = AK_NULL;
return medium;
}
T_BOOL Sd_Flush()
{
return AK_TRUE;
}
T_U32 Sd_Read(T_U8* buf, T_U32 sector, T_U32 size)
{
T_U32 ret;
#ifdef OS_WIN32
HANDLE hDev;
T_U32 dwCB;
T_S32 high;
T_BOOL bRet;
char devName[10]; //"\\\\.\\g:";
ret = 0;
devName[0] = '\\';
devName[1] = '\\';
devName[2] = '.';
devName[3] = '\\';
devName[4] = SD_DriverNo;
devName[5] = ':';
devName[6] = 0;
hDev = CreateFile(devName, GENERIC_READ , FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDev == INVALID_HANDLE_VALUE)
{
return 0;
}
high = sector >> (32 - 9);
SetFilePointer(hDev, sector << 9, &high, FILE_BEGIN);
bRet = ReadFile(hDev, buf, 512 * size, &dwCB, NULL);
CloseHandle(hDev);
if (bRet)
{
ret = size;;
}
#else
if (sd_read(sector * 512, buf, size * 512))
{
return size;
}
sd_reset();
return sd_read(sector * 512, buf, size * 512);
#endif
fgb.ReadCount++;
return ret;
}
T_U32 Sd_Write(T_U8* buf, T_U32 sector, T_U32 size)
{
T_U32 ret;
#ifdef OS_WIN32
DWORD dwCB;
T_S32 high;
HANDLE hDev;
char devName[10]; //"\\\\.\\g:";
ret = 0;
devName[0] = '\\';
devName[1] = '\\';
devName[2] = '.';
devName[3] = '\\';
devName[4] = SD_DriverNo;
devName[5] = ':';
devName[6] = 0;
hDev = CreateFile(devName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDev == INVALID_HANDLE_VALUE) return 0;
high = sector >> (32 - 9);
SetFilePointer(hDev, sector << 9, &high, FILE_BEGIN);
if (WriteFile(hDev, buf, 512 * size, &dwCB, NULL))
{
ret = size;
}
CloseHandle(hDev);
#else
fgb.WriteCount++;
ret = 0;
if (sd_write(sector * 512, buf, size * 512))
{
return size;
}
sd_reset();
return sd_write(sector * 512, buf, size * 512);
#endif
fgb.WriteCount++;
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -