⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat32_dep_sd.c

📁 fs_lib,arm9的fat文件系统
💻 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 + -