20260324
This commit is contained in:
147
IAPV1.1/Driver/FATFS/exfuns/exfuns.c
Normal file
147
IAPV1.1/Driver/FATFS/exfuns/exfuns.c
Normal file
@ -0,0 +1,147 @@
|
||||
#include "string.h"
|
||||
#include "exfuns.h"
|
||||
#include "fattester.h"
|
||||
#include "malloc.h"
|
||||
#include "usart.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEKս<4B><D5BD>STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//FATFS <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:2012/9/18
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.0
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
|
||||
const u8 *FILE_TYPE_TBL[6][13]=
|
||||
{
|
||||
{"BIN"}, //BIN<49>ļ<EFBFBD>
|
||||
{"LRC"}, //LRC<52>ļ<EFBFBD>
|
||||
{"NES"}, //NES<45>ļ<EFBFBD>
|
||||
{"TXT","C","H"}, //<2F>ı<EFBFBD><C4B1>ļ<EFBFBD>
|
||||
{"MP1","MP2","MP3","MP4","M4A","3GP","3G2","OGG","ACC","WMA","WAV","MID","FLAC"},//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
{"BMP","JPG","JPEG","GIF"},//ͼƬ<CDBC>ļ<EFBFBD>
|
||||
};
|
||||
///////////////////////////////<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>,ʹ<><CAB9>malloc<6F><63>ʱ<EFBFBD><CAB1>////////////////////////////////////////////
|
||||
FATFS *fs[2]; //<2F><EFBFBD><DFBC><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD>.
|
||||
FIL *file; //<2F>ļ<EFBFBD>1
|
||||
FIL *ftemp; //<2F>ļ<EFBFBD>2.
|
||||
UINT br,bw; //<2F><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
||||
FILINFO fileinfo; //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
|
||||
DIR dir; //Ŀ¼
|
||||
|
||||
u8 *fatbuf; //SD<53><44><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
///////////////////////////////////////////////////////////////////////////////////////
|
||||
//Ϊexfuns<6E><73><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
|
||||
//1,ʧ<><CAA7>
|
||||
u8 exfuns_init(void)
|
||||
{
|
||||
fs[0]=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS)); //Ϊ<><CEAA><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
fs[1]=(FATFS*)mymalloc(SRAMIN,sizeof(FATFS)); //Ϊ<><CEAA><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
file=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //Ϊfile<6C><65><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
ftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //Ϊftemp<6D><70><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
fatbuf=(u8*)mymalloc(SRAMIN,512); //Ϊfatbuf<75><66><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
||||
if(fs[0]&&fs[1]&&file&&ftemp&&fatbuf)return 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʧ<EFBFBD><CAA7>,<2C><>ʧ<EFBFBD><CAA7>.
|
||||
else return 1;
|
||||
}
|
||||
|
||||
//<2F><>Сд<D0A1><D0B4>ĸתΪ<D7AA><CEAA>д<EFBFBD><D0B4>ĸ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>ֲ<F2B1A3B3><D6B2><EFBFBD>.
|
||||
u8 char_upper(u8 c)
|
||||
{
|
||||
if(c<'A')return c;//<2F><><EFBFBD><EFBFBD>,<2C><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>.
|
||||
if(c>='a')return c-0x20;//<2F><>Ϊ<EFBFBD><CEAA>д.
|
||||
else return c;//<2F><>д,<2C><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD>
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//fname:<3A>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0XFF,<2C><>ʾ<EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1><EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>С<EFBFBD><D0A1>.
|
||||
u8 f_typetell(u8 *fname)
|
||||
{
|
||||
u8 tbuf[5];
|
||||
u8 *attr='\0';//<2F><><EFBFBD><D7BA>
|
||||
u8 i=0,j;
|
||||
while(i<250)
|
||||
{
|
||||
i++;
|
||||
if(*fname=='\0')break;//ƫ<>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
fname++;
|
||||
}
|
||||
if(i==250)return 0XFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>.
|
||||
for(i=0;i<5;i++)//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><D7BA>
|
||||
{
|
||||
fname--;
|
||||
if(*fname=='.')
|
||||
{
|
||||
fname++;
|
||||
attr=fname;
|
||||
break;
|
||||
}
|
||||
}
|
||||
strcpy((char *)tbuf,(const char*)attr);//copy
|
||||
for(i=0;i<4;i++)tbuf[i]=char_upper(tbuf[i]);//ȫ<><C8AB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>д
|
||||
for(i=0;i<6;i++)
|
||||
{
|
||||
for(j=0;j<13;j++)
|
||||
{
|
||||
if(*FILE_TYPE_TBL[i][j]==0)break;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD>û<EFBFBD>пɶԱȵij<C8B5>Ա<EFBFBD><D4B1>.
|
||||
if(strcmp((const char *)FILE_TYPE_TBL[i][j],(const char *)tbuf)==0)//<2F>ҵ<EFBFBD><D2B5><EFBFBD>
|
||||
{
|
||||
return (i<<4)|j;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0XFF;//û<>ҵ<EFBFBD>
|
||||
}
|
||||
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//drv:<3A><><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>("0:"/"1:")
|
||||
//total:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>λKB<4B><42>
|
||||
//free:ʣ<><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>λKB<4B><42>
|
||||
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 exf_getfree(u8 *drv,u32 *total,u32 *free)
|
||||
{
|
||||
FATFS *fs1;
|
||||
u8 res;
|
||||
DWORD fre_clust=0, fre_sect=0, tot_sect=0;
|
||||
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
res = f_getfree((const TCHAR*)drv, &fre_clust, &fs1);
|
||||
if(res==0)
|
||||
{
|
||||
tot_sect=(fs1->n_fatent-2)*fs1->csize; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fre_sect=fre_clust*fs1->csize; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#if _MAX_SS!=512 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>512<31>ֽ<EFBFBD>,<2C><>ת<EFBFBD><D7AA>Ϊ512<31>ֽ<EFBFBD>
|
||||
tot_sect*=fs1->ssize/512;
|
||||
fre_sect*=fs1->ssize/512;
|
||||
#endif
|
||||
*total=tot_sect>>1; //<2F><>λΪKB
|
||||
*free=fre_sect>>1; //<2F><>λΪKB
|
||||
}
|
||||
return res;
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user