精简项目

删除了不需要的文件,并整理了文件夹
This commit is contained in:
Qiea
2024-11-08 21:35:04 +08:00
parent 46403a5c96
commit 27b41dcd56
251 changed files with 206 additions and 42904 deletions

View File

@@ -0,0 +1,406 @@
#include "string.h"
#include "exfuns.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 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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
//<2F><EFBFBD><E6B1BE>V1.1
//<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>˾ 2014-2024
//All rights reserved
//********************************************************************************
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
//V1.1
//<2F><><EFBFBD><EFBFBD>exf_copy<70><79><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug
//////////////////////////////////////////////////////////////////////////////////
#define FILE_MAX_TYPE_NUM 7 //<2F><><EFBFBD><EFBFBD>FILE_MAX_TYPE_NUM<55><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define FILE_MAX_SUBT_NUM 4 //<2F><><EFBFBD><EFBFBD>FILE_MAX_SUBT_NUM<55><4D>С<EFBFBD><D0A1>
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
u8*const FILE_TYPE_TBL[FILE_MAX_TYPE_NUM][FILE_MAX_SUBT_NUM]=
{
{"BIN"}, //BIN<49>ļ<EFBFBD>
{"LRC"}, //LRC<52>ļ<EFBFBD>
{"NES","SMS"}, //NES/SMS<4D>ļ<EFBFBD>
{"TXT","C","H"}, //<2F>ı<EFBFBD><C4B1>ļ<EFBFBD>
{"WAV","MP3","APE","FLAC"},//֧<>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
{"BMP","JPG","JPEG","GIF"},//ͼƬ<CDBC>ļ<EFBFBD>
{"AVI"}, //<2F><>Ƶ<EFBFBD>ļ<EFBFBD>
};
///////////////////////////////<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>,ʹ<><CAB9>malloc<6F><63>ʱ<EFBFBD><CAB1>////////////////////////////////////////////
FATFS *fs[_VOLUMES];//<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)
{
u8 i;
for(i=0;i<_VOLUMES;i++)
{
fs[i]=(FATFS*)mymalloc(SRAMEX,sizeof(FATFS)); //Ϊ<><CEAA><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if(!fs[i])break;
}
file=(FIL*)mymalloc(SRAMEX,sizeof(FIL)); //Ϊfile<6C><65><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
ftemp=(FIL*)mymalloc(SRAMEX,sizeof(FIL)); //Ϊftemp<6D><70><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
fatbuf=(u8*)mymalloc(SRAMEX,512); //Ϊfatbuf<75><66><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
if(i==_VOLUMES&&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<FILE_MAX_TYPE_NUM;i++) //<2F><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
{
for(j=0;j<FILE_MAX_SUBT_NUM;j++)//<2F><><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
{
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;
u32 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 =(u32)f_getfree((const TCHAR*)drv, (DWORD*)&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;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
//ע<><D7A2><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>4GB.
//<2F><>psrc<72>ļ<EFBFBD>,copy<70><79>pdst.
//fcpymsg,<2C><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>ʵ<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʾ
// pname:<3A>ļ<EFBFBD>/<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// pct:<3A>ٷֱ<D9B7>
// mode:
// [0]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// [1]:<3A><><EFBFBD>°ٷֱ<D9B7>pct
// [2]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// [3~7]:<3A><><EFBFBD><EFBFBD>
//psrc,pdst:Դ<>ļ<EFBFBD><C4BC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>
//totsize:<3A>ܴ<EFBFBD>С(<28><>totsizeΪ0<CEAA><30>ʱ<EFBFBD><CAB1>,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>)
//cpdsize:<3A>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD>˵Ĵ<CBB5>С.
//fwmode:<3A>ļ<EFBFBD>д<EFBFBD><D0B4>ģʽ
//0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
//1:<3A><><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>,0XFF,ǿ<><C7BF><EFBFBD>˳<EFBFBD>
u8 exf_copy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 totsize,u32 cpdsize,u8 fwmode)
{
u8 res;
u16 br=0;
u16 bw=0;
FIL *fsrc=0;
FIL *fdst=0;
u8 *fbuf=0;
u8 curpct=0;
unsigned long long lcpdsize=cpdsize;
fsrc=(FIL*)mymalloc(SRAMEX,sizeof(FIL));//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
fdst=(FIL*)mymalloc(SRAMEX,sizeof(FIL));
fbuf=(u8*)mymalloc(SRAMEX,8192);
if(fsrc==NULL||fdst==NULL||fbuf==NULL)res=100;//ǰ<><C7B0><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>fatfs
else
{
if(fwmode==0)fwmode=FA_CREATE_NEW;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else fwmode=FA_CREATE_ALWAYS; //<2F><><EFBFBD>Ǵ<EFBFBD><C7B4>ڵ<EFBFBD><DAB5>ļ<EFBFBD>
res=f_open(fsrc,(const TCHAR*)psrc,FA_READ|FA_OPEN_EXISTING); //<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>ļ<EFBFBD>
if(res==0)res=f_open(fdst,(const TCHAR*)pdst,FA_WRITE|fwmode); //<2F><>һ<EFBFBD><D2BB><EFBFBD>򿪳ɹ<F2BFAAB3>,<2C>ſ<EFBFBD>ʼ<EFBFBD>򿪵ڶ<F2BFAAB5><DAB6><EFBFBD>
if(res==0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򿪳ɹ<F2BFAAB3><C9B9><EFBFBD>
{
if(totsize==0)//<2F><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
{
totsize=fsrc->obj.objsize;
lcpdsize=0;
curpct=0;
}else curpct=(lcpdsize*100)/totsize; //<2F>õ<EFBFBD><C3B5>°ٷֱ<D9B7>
fcpymsg(psrc,curpct,0X02); //<2F><><EFBFBD>°ٷֱ<D9B7>
while(res==0)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
{
res=f_read(fsrc,fbuf,8192,(UINT*)&br); //Դͷ<D4B4><CDB7><EFBFBD><EFBFBD>512<31>ֽ<EFBFBD>
if(res||br==0)break;
res=f_write(fdst,fbuf,(UINT)br,(UINT*)&bw); //д<><D0B4>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>
lcpdsize+=bw;
if(curpct!=(lcpdsize*100)/totsize)//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>°ٷֱ<D9B7>
{
curpct=(lcpdsize*100)/totsize;
if(fcpymsg(psrc,curpct,0X02))//<2F><><EFBFBD>°ٷֱ<D9B7>
{
res=0XFF;//ǿ<><C7BF><EFBFBD>˳<EFBFBD>
break;
}
}
if(res||bw<br)break;
}
f_close(fsrc);
f_close(fdst);
}
}
myfree(SRAMEX,fsrc);//<2F>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
myfree(SRAMEX,fdst);
myfree(SRAMEX,fbuf);
return res;
}
//<2F>õ<EFBFBD>·<EFBFBD><C2B7><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,·<><C2B7><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
u8* exf_get_src_dname(u8* dpfn)
{
u16 temp=0;
while(*dpfn!=0)
{
dpfn++;
temp++;
}
if(temp<4)return 0;
while((*dpfn!=0x5c)&&(*dpfn!=0x2f))dpfn--; //׷<><D7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>"\"<22><><EFBFBD><EFBFBD>"/"<22><>
return ++dpfn;
}
//<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>д<EFBFBD>С
//ע<><D7A2><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>4GB.
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ļ<EFBFBD><C4BC>д<EFBFBD>СΪ0,<2C><><EFBFBD>߶<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>.
// <20><><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC>д<EFBFBD>С.
u32 exf_fdsize(u8 *fdname)
{
#define MAX_PATHNAME_DEPTH 512+1 //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 res=0;
DIR *fddir=0; //Ŀ¼
FILINFO *finfo=0; //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
u8 * pathname=0; //Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
u16 pathlen=0; //Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 fdsize=0;
fddir=(DIR*)mymalloc(SRAMEX,sizeof(DIR));//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
finfo=(FILINFO*)mymalloc(SRAMEX,sizeof(FILINFO));
if(fddir==NULL||finfo==NULL)res=100;
if(res==0)
{
pathname=mymalloc(SRAMEX,MAX_PATHNAME_DEPTH);
if(pathname==NULL)res=101;
if(res==0)
{
pathname[0]=0;
strcat((char*)pathname,(const char*)fdname); //<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
res=f_opendir(fddir,(const TCHAR*)fdname); //<2F><><EFBFBD><EFBFBD>ԴĿ¼
if(res==0)//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF>ɹ<EFBFBD>
{
while(res==0)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
{
res=f_readdir(fddir,finfo); //<2F><>ȡĿ¼<C4BF>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>
if(res!=FR_OK||finfo->fname[0]==0)break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ĩβ<C4A9><CEB2>,<2C>˳<EFBFBD>
if(finfo->fname[0]=='.')continue; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>Ŀ¼
if(finfo->fattrib&0X10)//<2F><><EFBFBD><EFBFBD>Ŀ¼(<28>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,0X20,<2C><EFBFBD>ļ<EFBFBD>;0X10,<2C><>Ŀ¼;)
{
pathlen=strlen((const char*)pathname); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰ·<C7B0><C2B7><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
strcat((char*)pathname,(const char*)"/"); //<2F><>б<EFBFBD><D0B1>
strcat((char*)pathname,(const char*)finfo->fname); //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
//printf("\r\nsub folder:%s\r\n",pathname); //<2F><>ӡ<EFBFBD><D3A1>Ŀ¼<C4BF><C2BC>
fdsize+=exf_fdsize(pathname); //<2F>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼<C4BF><C2BC>С,<2C>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD>
pathname[pathlen]=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else fdsize+=finfo->fsize; //<2F><>Ŀ¼,ֱ<>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С
}
}
myfree(SRAMEX,pathname);
}
}
myfree(SRAMEX,fddir);
myfree(SRAMEX,finfo);
if(res)return 0;
else return fdsize;
}
//<2F>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
//ע<><D7A2><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD>С<EFBFBD><D0A1>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>4GB.
//<2F><>psrc<72>ļ<EFBFBD><C4BC><EFBFBD>,copy<70><79>pdst<73>ļ<EFBFBD><C4BC><EFBFBD>.
//pdst:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"X:"/"X:XX"/"X:XX/XX"֮<><D6AE><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD>Ҫʵ<D2AA><CAB5>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD><D0B4><EFBFBD>
//fcpymsg,<2C><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD><EFBFBD>ʵ<EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʾ
// pname:<3A>ļ<EFBFBD>/<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// pct:<3A>ٷֱ<D9B7>
// mode:
// [0]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// [1]:<3A><><EFBFBD>°ٷֱ<D9B7>pct
// [2]:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// [3~7]:<3A><><EFBFBD><EFBFBD>
//psrc,pdst:Դ<>ļ<EFBFBD><C4BC>к<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
//totsize:<3A>ܴ<EFBFBD>С(<28><>totsizeΪ0<CEAA><30>ʱ<EFBFBD><CAB1>,<2C><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>)
//cpdsize:<3A>Ѹ<EFBFBD><D1B8><EFBFBD><EFBFBD>˵Ĵ<CBB5>С.
//fwmode:<3A>ļ<EFBFBD>д<EFBFBD><D0B4>ģʽ
//0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
//1:<3A><><EFBFBD><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;0XFF,ǿ<><C7BF><EFBFBD>˳<EFBFBD>
u8 exf_fdcopy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 *totsize,u32 *cpdsize,u8 fwmode)
{
#define MAX_PATHNAME_DEPTH 512+1 //<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 res=0;
DIR *srcdir=0; //ԴĿ¼
DIR *dstdir=0; //ԴĿ¼
FILINFO *finfo=0; //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
u8 *fn=0; //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
u8 * dstpathname=0; //Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
u8 * srcpathname=0; //Դ<>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>+<2B>ļ<EFBFBD><C4BC><EFBFBD>
u16 dstpathlen=0; //Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u16 srcpathlen=0; //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
srcdir=(DIR*)mymalloc(SRAMEX,sizeof(DIR));//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
dstdir=(DIR*)mymalloc(SRAMEX,sizeof(DIR));
finfo=(FILINFO*)mymalloc(SRAMEX,sizeof(FILINFO));
if(srcdir==NULL||dstdir==NULL||finfo==NULL)res=100;
if(res==0)
{
dstpathname=mymalloc(SRAMEX,MAX_PATHNAME_DEPTH);
srcpathname=mymalloc(SRAMEX,MAX_PATHNAME_DEPTH);
if(dstpathname==NULL||srcpathname==NULL)res=101;
if(res==0)
{
dstpathname[0]=0;
srcpathname[0]=0;
strcat((char*)srcpathname,(const char*)psrc); //<2F><><EFBFBD><EFBFBD>ԭʼԴ<CABC>ļ<EFBFBD>·<EFBFBD><C2B7>
strcat((char*)dstpathname,(const char*)pdst); //<2F><><EFBFBD><EFBFBD>ԭʼĿ<CABC><C4BF><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
res=f_opendir(srcdir,(const TCHAR*)psrc); //<2F><><EFBFBD><EFBFBD>ԴĿ¼
if(res==0)//<2F><><EFBFBD><EFBFBD>Ŀ¼<C4BF>ɹ<EFBFBD>
{
strcat((char*)dstpathname,(const char*)"/");//<2F><><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
fn=exf_get_src_dname(psrc);
if(fn==0)//<2F><><EFBFBD><EFBFBD><EABFBD>
{
dstpathlen=strlen((const char*)dstpathname);
dstpathname[dstpathlen]=psrc[0]; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
dstpathname[dstpathlen+1]=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}else strcat((char*)dstpathname,(const char*)fn);//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
fcpymsg(fn,0,0X04);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
res=f_mkdir((const TCHAR*)dstpathname);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>,<2C>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھʹ<DABE><CDB4><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD>.
if(res==FR_EXIST)res=0;
while(res==0)//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
{
res=f_readdir(srcdir,finfo); //<2F><>ȡĿ¼<C4BF>µ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>
if(res!=FR_OK||finfo->fname[0]==0)break; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><>ĩβ<C4A9><CEB2>,<2C>˳<EFBFBD>
if(finfo->fname[0]=='.')continue; //<2F><><EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD>Ŀ¼
fn=(u8*)finfo->fname; //<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>
dstpathlen=strlen((const char*)dstpathname); //<2F>õ<EFBFBD><C3B5><EFBFBD>ǰĿ<C7B0><C4BF>·<EFBFBD><C2B7><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
srcpathlen=strlen((const char*)srcpathname); //<2F>õ<EFBFBD>Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
strcat((char*)srcpathname,(const char*)"/");//Դ·<D4B4><C2B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
if(finfo->fattrib&0X10)//<2F><><EFBFBD><EFBFBD>Ŀ¼(<28>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,0X20,<2C><EFBFBD>ļ<EFBFBD>;0X10,<2C><>Ŀ¼;)
{
strcat((char*)srcpathname,(const char*)fn); //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>
res=exf_fdcopy(fcpymsg,srcpathname,dstpathname,totsize,cpdsize,fwmode); //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
}else //<2F><>Ŀ¼
{
strcat((char*)dstpathname,(const char*)"/");//Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1>
strcat((char*)dstpathname,(const char*)fn); //Ŀ<><C4BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
strcat((char*)srcpathname,(const char*)fn); //Դ·<D4B4><C2B7><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
fcpymsg(fn,0,0X01);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
res=exf_copy(fcpymsg,srcpathname,dstpathname,*totsize,*cpdsize,fwmode);//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
*cpdsize+=finfo->fsize;//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>С
}
srcpathname[srcpathlen]=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
dstpathname[dstpathlen]=0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
myfree(SRAMEX,dstpathname);
myfree(SRAMEX,srcpathname);
}
}
myfree(SRAMEX,srcdir);
myfree(SRAMEX,dstdir);
myfree(SRAMEX,finfo);
return res;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,66 @@
#ifndef __EXFUNS_H
#define __EXFUNS_H
#include <sys.h>
#include "ff.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 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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2016/1/7
//<2F><EFBFBD><E6B1BE>V1.1
//<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>˾ 2014-2024
//All rights reserved
//********************************************************************************
//<2F><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
//V1.1
//<2F><><EFBFBD><EFBFBD>exf_copy<70><79><EFBFBD><EFBFBD>,<2C>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>bug
//////////////////////////////////////////////////////////////////////////////////
extern FATFS *fs[_VOLUMES];
extern FIL *file;
extern FIL *ftemp;
extern UINT br,bw;
extern FILINFO fileinfo;
extern DIR dir;
extern u8 *fatbuf;//SD<53><44><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
//f_typetell<6C><6C><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD>
//<2F><><EFBFBD>ݱ<EFBFBD>FILE_TYPE_TBL<42><4C><EFBFBD><EFBFBD>.<2E><>exfuns.c<><63><EFBFBD><EFBFBD><E6B6A8>
#define T_BIN 0X00 //bin<69>ļ<EFBFBD>
#define T_LRC 0X10 //lrc<72>ļ<EFBFBD>
#define T_NES 0X20 //nes<65>ļ<EFBFBD>
#define T_SMS 0X21 //sms<6D>ļ<EFBFBD>
#define T_TEXT 0X30 //.txt<78>ļ<EFBFBD>
#define T_C 0X31 //.c<>ļ<EFBFBD>
#define T_H 0X32 //.h<>ļ<EFBFBD>
#define T_WAV 0X40 //WAV<41>ļ<EFBFBD>
#define T_MP3 0X41 //MP3<50>ļ<EFBFBD>
#define T_APE 0X42 //APE<50>ļ<EFBFBD>
#define T_FLAC 0X43 //FLAC<41>ļ<EFBFBD>
#define T_BMP 0X50 //bmp<6D>ļ<EFBFBD>
#define T_JPG 0X51 //jpg<70>ļ<EFBFBD>
#define T_JPEG 0X52 //jpeg<65>ļ<EFBFBD>
#define T_GIF 0X53 //gif<69>ļ<EFBFBD>
#define T_AVI 0X60 //avi<76>ļ<EFBFBD>
u8 exfuns_init(void); //<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
u8 f_typetell(u8 *fname); //ʶ<><CAB6><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
u8 exf_getfree(u8 *drv,u32 *total,u32 *free); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 exf_fdsize(u8 *fdname); //<2F>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC>д<EFBFBD>С
u8* exf_get_src_dname(u8* dpfn);
u8 exf_copy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 totsize,u32 cpdsize,u8 fwmode); //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
u8 exf_fdcopy(u8(*fcpymsg)(u8*pname,u8 pct,u8 mode),u8 *psrc,u8 *pdst,u32 *totsize,u32 *cpdsize,u8 fwmode);//<2F>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
#endif