mirror of
https://github.com/oopuuu/zTC1.git
synced 2025-12-17 15:38:14 +08:00
修改了Web后台的部分界面,增加了HAmqtt中的总电量传感器,后台新增mqtt上报频率设置
This commit is contained in:
149
mico-os/platform/MCU/MX1101/FileSystem/diskio.c
Normal file
149
mico-os/platform/MCU/MX1101/FileSystem/diskio.c
Normal file
@@ -0,0 +1,149 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:diskio.c
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//#include "app_config.h"
|
||||
#include "fs_config.h"
|
||||
#include "diskio.h"
|
||||
#include "fsinfo.h"
|
||||
|
||||
#include "host_stor.h"
|
||||
#include "sd_card.h"
|
||||
#include "platform.h"
|
||||
|
||||
|
||||
//
|
||||
// Inidialize a Drive
|
||||
//
|
||||
DSTATUS disk_initialize(
|
||||
uint8_t drv /* Physical drive nmuber (0..) */
|
||||
)
|
||||
{
|
||||
DSTATUS res = RES_ERROR;
|
||||
|
||||
switch(drv)
|
||||
{
|
||||
#ifdef FUNC_CARD_EN
|
||||
case DEV_ID_SD:
|
||||
//res = MMC_disk_initialize();
|
||||
break;
|
||||
#endif //FUNC_CARD_EN
|
||||
|
||||
#ifdef FUNC_USB_EN
|
||||
case DEV_ID_USB:
|
||||
// res = USB_disk_initialize(drv);
|
||||
break;
|
||||
#endif //FUNC_CARD_EN
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Return Disk Status
|
||||
//
|
||||
DSTATUS disk_status(
|
||||
uint8_t drv /* Physical drive nmuber (0..) */
|
||||
)
|
||||
{
|
||||
DSTATUS res = RES_ERROR;
|
||||
|
||||
switch(drv)
|
||||
{
|
||||
#ifdef FUNC_CARD_EN
|
||||
case DEV_ID_SD :
|
||||
//res = MMC_disk_status();
|
||||
break;
|
||||
#endif //FUNC_CARD_EN
|
||||
|
||||
#ifdef FUNC_USB_EN
|
||||
case DEV_ID_USB :
|
||||
// res = USB_disk_status(drv);
|
||||
break;
|
||||
#endif //FUNC_USB_EN
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
//
|
||||
//Read Sector(s)
|
||||
//
|
||||
DRESULT disk_read(
|
||||
uint8_t drv, /* Physical drive nmuber (0..) */
|
||||
uint8_t* buff, /* Data buffer to store read data */
|
||||
uint32_t sector, /* Sector address (LBA) */
|
||||
uint8_t count /* Number of sectors to read (1..255) */
|
||||
)
|
||||
{
|
||||
DRESULT res = RES_ERROR;
|
||||
switch(drv)
|
||||
{
|
||||
#ifdef FUNC_CARD_EN
|
||||
case DEV_ID_SD :
|
||||
if(!SdReadBlock(sector, buff, count))
|
||||
{
|
||||
res = RES_OK;
|
||||
}
|
||||
break;
|
||||
#endif //FUNC_CARD_EN
|
||||
|
||||
#ifdef FUNC_USB_EN
|
||||
case DEV_ID_USB :
|
||||
if(HostStorReadBlock(sector, buff, count))
|
||||
{
|
||||
res = RES_OK;
|
||||
}
|
||||
|
||||
#endif //FUNC_USB_EN
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Write Sector(s)
|
||||
//
|
||||
DRESULT disk_write(
|
||||
uint8_t drv, /* Physical drive nmuber (0..) */
|
||||
const uint8_t* buff, /* Data to be written */
|
||||
uint32_t sector, /* Sector address (LBA) */
|
||||
uint8_t count /* Number of sectors to write (1..255) */
|
||||
)
|
||||
{
|
||||
DRESULT res = RES_ERROR;
|
||||
|
||||
switch(drv)
|
||||
{
|
||||
#ifdef FUNC_CARD_EN
|
||||
case DEV_ID_SD :
|
||||
if(!SdWriteBlock(sector, buff, count))
|
||||
{
|
||||
res = RES_OK;
|
||||
}
|
||||
break;
|
||||
#endif //FUNC_CARD_EN
|
||||
|
||||
#ifdef FUNC_USB_EN
|
||||
case DEV_ID_USB :
|
||||
res = HostStorWriteBlock(sector, (void*)buff, count) ? RES_OK : RES_ERROR;
|
||||
break;
|
||||
#endif //FUNC_USB_EN
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
303
mico-os/platform/MCU/MX1101/FileSystem/filesort.c
Normal file
303
mico-os/platform/MCU/MX1101/FileSystem/filesort.c
Normal file
@@ -0,0 +1,303 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:filesort.c
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "fs_config.h"
|
||||
#include "folder.h"
|
||||
#include "fat_file.h"
|
||||
#include "fsinfo.h"
|
||||
#include "diskio.h"
|
||||
#include "presearch.h"
|
||||
#include "fs_filesort.h"
|
||||
|
||||
#if FS_FILE_SORT_EN == 1
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ֧<D6BB><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>ǰ2048<34><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD>Χ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF>Բ<EFBFBD><D4B2>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD><D9B0><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2A3ACB6>ǰ<EFBFBD><C7B0>ո<EFBFBD><D5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>2048<34><38><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>С<EFBFBD><D0A1><EFBFBD>Լ<EFBFBD>СSRAM<41><4D>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>12bit<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>2048<34><38><EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1>ҪSRAM 1.5KB<EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
//<2F>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>FS_FILE_SORT_EN<45><4E><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܡ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>̬<EFBFBD><CCAC>ֹ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>FALSE
|
||||
bool gFileSortEnable = TRUE;
|
||||
|
||||
|
||||
/////////////<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>//////////////////////////////////////////
|
||||
|
||||
//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ļ<EFBFBD>Ŀ¼<C4BF>ÿ<EEA3AC><C3BF><EFBFBD>ļ<EFBFBD>ռ<EFBFBD><D5BC>11<31>ֽ<EFBFBD>
|
||||
typedef uint8_t FILE_NAME_TYPE[9]; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>궨<EFBFBD><EAB6A8><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
|
||||
|
||||
FILE_NAME_TYPE FileNameTable[FS_MAX_FILE_SORT_NUM]__ATTRIBUTE__(AT(VMEM_ADDR + 2048));
|
||||
|
||||
|
||||
//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ļ<EFBFBD>ռ<EFBFBD><D5BC>2<EFBFBD>ֽ<EFBFBD>
|
||||
uint16_t FileSortTableTemp[FS_MAX_FILE_SORT_NUM]__ATTRIBUTE__(AT(VMEM_ADDR + FS_MAX_FILE_SORT_NUM * 9 + 2048));
|
||||
|
||||
//<2F><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ļ<EFBFBD>ռ<EFBFBD><D5BC>1.5<EFBFBD>ֽ<EFBFBD>
|
||||
//FileSortTable[]<5D><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>m<EFBFBD><6D><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F>洢<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
|
||||
// ---------------------------------------
|
||||
// | FileNum1[11:4] | +0
|
||||
// ---------------------------------------
|
||||
// | FileNum2[11:8] | FileNum1[3:0] | +1
|
||||
// ---------------------------------------
|
||||
// | FileNum2[7:0] | +2
|
||||
// ---------------------------------------
|
||||
// | ... ... | +3
|
||||
// ---------------------------------------
|
||||
static uint8_t FileSortTable[(FS_MAX_FILE_SORT_NUM * 3) / 2 + 1];
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µĸ<C2B5><C4B8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>PreSearch()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FileSortSearchNewFile(FS_CONTEXT* FsContext)
|
||||
{
|
||||
|
||||
if(FsContext->gFsInfo.FileSum <= FS_MAX_FILE_SORT_NUM)
|
||||
{
|
||||
memcpy(FileNameTable[FsContext->gFsInfo.FileSum - 1], &FsContext->gCurrentEntry->FileName[0], 11);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//<2F>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ɨ<EFBFBD><C9A8>һ<EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD>ת<EFBFBD>ɿɱȽϴ<C8BD>С<EFBFBD><D0A1>ѹ<EFBFBD><D1B9>BCD<43><44>ʽ<EFBFBD><CABD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽھ<D6BD><DABE>Ǹ<EFBFBD><C7B8><EFBFBD><EFBFBD><EFBFBD>ֵ0--9
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD>Ǹ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>0x0A<30><41>ʾ2λ<32><CEBB><EFBFBD><EFBFBD>0x0B<30><42>ʾ3λ<33><CEBB><EFBFBD><EFBFBD>...
|
||||
//<2F>ӵڶ<D3B5><DAB6><EFBFBD><EFBFBD>ֽڿ<D6BD>ʼ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD>ѹ<EFBFBD><D1B9>BCD<43><44>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>0x00
|
||||
//<2F><>1: 4D 50 33 5F 30 34 XX XX: 4D 50 03 5F 04 00 XX XX
|
||||
//<2F><>2: 4D 50 33 5F 30 30 35 XX: 4D 50 03 5F 05 00 00 XX
|
||||
//<2F><>3: 41 30 42 30 30 43 30 35: 41 00 42 00 00 43 05 00
|
||||
static void FileSortConvertName(FS_CONTEXT* FsContext)
|
||||
{
|
||||
uint16_t Cnt = (FsContext->gFsInfo.FileSum > FS_MAX_FILE_SORT_NUM) ? FS_MAX_FILE_SORT_NUM : FsContext->gFsInfo.FileSum;
|
||||
uint16_t i;
|
||||
uint8_t j;
|
||||
uint8_t k;
|
||||
|
||||
uint8_t * p;
|
||||
uint8_t NumCnt;
|
||||
uint8_t ZeroCnt;
|
||||
uint8_t Temp;
|
||||
|
||||
for(i = 0; i < Cnt; i++)
|
||||
{
|
||||
p = FileNameTable[i];
|
||||
|
||||
for(j = 0; j < 8; j++)
|
||||
{
|
||||
if((p[j] < '0') || (p[j] > '9'))
|
||||
{
|
||||
continue; //<2F><>ǰλ<C7B0>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//<2F>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>ͷ<EFBFBD><CDB7>'0'<27><><EFBFBD><EFBFBD>
|
||||
for(ZeroCnt = 0; j + ZeroCnt < 8; ZeroCnt++)
|
||||
{
|
||||
if(p[j + ZeroCnt] != '0')
|
||||
{
|
||||
break;
|
||||
}
|
||||
p[j + ZeroCnt] = 0x00;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>
|
||||
for(NumCnt = 0; j + ZeroCnt + NumCnt < 8; NumCnt++)
|
||||
{
|
||||
if((p[j + ZeroCnt + NumCnt] < '0') || (p[j + ZeroCnt + NumCnt] > '9'))
|
||||
{
|
||||
break;
|
||||
}
|
||||
Temp = p[j + ZeroCnt + NumCnt];
|
||||
p[j + ZeroCnt + NumCnt] = 0x00;
|
||||
p[j + NumCnt] = Temp - '0';
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>BCD<43><44>ʽ
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>ʽ
|
||||
if(NumCnt > 1)
|
||||
{
|
||||
for(k = 0; k < (NumCnt + 1) / 2; k++)
|
||||
{
|
||||
if(2 * k + 1 == NumCnt) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3λ<33><CEBB><EFBFBD><EFBFBD>5λ<35><CEBB><EFBFBD><EFBFBD>7λ<37><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>һλ<D2BB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻȡ1<C8A1><31><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>ȡ2<C8A1><32><EFBFBD>ֽ<EFBFBD>
|
||||
{
|
||||
Temp = (p[j + 2 * k] << 4);
|
||||
p[j + 2 * k] = 0;
|
||||
p[j + k + 1] = Temp;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Temp = (p[j + 2 * k] << 4) | p[j + 2 * k + 1];
|
||||
p[j + 2 * k] = 0;
|
||||
p[j + 2 * k + 1] = 0;
|
||||
p[j + k + 1] = Temp;
|
||||
}
|
||||
}
|
||||
p[j] = NumCnt + 8; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4>ĵ<EFBFBD>1<EFBFBD><31><EFBFBD>ֽڱ<D6BD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>1λ<31><CEBB><EFBFBD><EFBFBD>00H-09H<39><48>2λ<32><CEBB><EFBFBD><EFBFBD>0AH<41><48>3λ<33><CEBB><EFBFBD><EFBFBD>0BH<42><48>8λ<38><CEBB><EFBFBD><EFBFBD>10H
|
||||
}
|
||||
|
||||
j += (NumCnt + ZeroCnt);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>(n*logn)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static void FileSortByName(FS_CONTEXT* FsContext)
|
||||
{
|
||||
uint16_t Cnt = (FsContext->gFsInfo.FileSum > FS_MAX_FILE_SORT_NUM) ? FS_MAX_FILE_SORT_NUM : FsContext->gFsInfo.FileSum;
|
||||
uint16_t i;
|
||||
uint16_t j;
|
||||
|
||||
int16_t Start;
|
||||
int16_t End;
|
||||
int16_t Cur;
|
||||
|
||||
for(i = 0; i < Cnt; i++)
|
||||
{
|
||||
Start = -1;
|
||||
End = i;
|
||||
|
||||
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(Start + 1 < End)
|
||||
{
|
||||
Cur = (Start + End) / 2;
|
||||
if(memcmp(FileNameTable[i], FileNameTable[FileSortTableTemp[Cur]], 9) < 0)
|
||||
{
|
||||
End = Cur;
|
||||
}
|
||||
else
|
||||
{
|
||||
Start = Cur;
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD>½ڵ<C2BD><DAB5><EFBFBD><EFBFBD>뵽Endλ<64>ã<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(j = i; j > End; j--)
|
||||
{
|
||||
FileSortTableTemp[j] = FileSortTableTemp[j - 1];
|
||||
}
|
||||
|
||||
FileSortTableTemp[End] = i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void FileSortSaveResult(FS_CONTEXT* FsContext)
|
||||
{
|
||||
uint16_t Cnt = (FsContext->gFsInfo.FileSum > FS_MAX_FILE_SORT_NUM) ? FS_MAX_FILE_SORT_NUM : FsContext->gFsInfo.FileSum;
|
||||
uint16_t i;
|
||||
uint16_t Temp;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>FileSortTable[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(i = 1; i <= Cnt; i++)
|
||||
{
|
||||
Temp = ((i - 1) / 2) * 3;
|
||||
|
||||
FileSortTableTemp[i - 1]++;
|
||||
|
||||
if(i % 2) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
FileSortTable[Temp + 0] = (uint8_t)(FileSortTableTemp[i - 1] >> 4);
|
||||
FileSortTable[Temp + 1] = (uint8_t)(FileSortTableTemp[i - 1] & 0x0F);
|
||||
}
|
||||
else //ż<><C5BC>
|
||||
{
|
||||
FileSortTable[Temp + 1] |= (uint8_t)((FileSortTableTemp[i - 1] >> 4) & 0xF0);
|
||||
FileSortTable[Temp + 2] = (uint8_t)FileSortTableTemp[i - 1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>FileNameTable[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FileSortTableTemp[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FileSortTable[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>PreSearch()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FileSortSearchEnd(FS_CONTEXT* FsContext)
|
||||
{
|
||||
TIMER TestTimer; //<2F><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʱͳ<CAB1><CDB3>ִ<EFBFBD><D6B4>ʱ<EFBFBD><CAB1>
|
||||
|
||||
// DBG("FileSortSearchEnd()\n");
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// gFsInfo.FileSum = 10;
|
||||
// memcpy(FileNameTable[0], "1 M", 9);
|
||||
|
||||
TimeOutSet(&TestTimer, 0);
|
||||
FileSortConvertName(FsContext);
|
||||
DBG("time1: %d ms\n", (uint16_t)PastTimeGet(&TestTimer));
|
||||
|
||||
TimeOutSet(&TestTimer, 0);
|
||||
FileSortByName(FsContext);
|
||||
DBG("time2: %d ms\n", (uint16_t)PastTimeGet(&TestTimer));
|
||||
|
||||
TimeOutSet(&TestTimer, 0);
|
||||
FileSortSaveResult(FsContext);
|
||||
DBG("time3: %d ms\n", (uint16_t)PastTimeGet(&TestTimer));
|
||||
}
|
||||
|
||||
|
||||
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>FileOpenByNum()<29><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>FileSortNum<75><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭʼ<D4AD>ļ<EFBFBD><C4BC>Ų<EFBFBD><C5B2><EFBFBD>[StartFileNum + 1, EndFileNum]<5D><>Χ<EFBFBD>ڵ<EFBFBD><DAB5>ļ<EFBFBD>
|
||||
//1.<2E><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>m<EFBFBD><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC>ţ<EFBFBD>
|
||||
// GetFileNumInDisk(FsContext, m, 0, 0xFFFF)<29><><EFBFBD>õ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ӧ<EFBFBD><D3A6>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//2.<2E><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>m<EFBFBD><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC>ţ<EFBFBD>
|
||||
// GetFileNumInDisk(FsContext, m, Folder->StartFileNum, Folder->StartFileNum + Folder->IncFileCnt)<29><>
|
||||
uint16_t GetFileNumInDisk(FS_CONTEXT* FsContext, uint16_t FileSortNum, uint16_t StartFileNum, uint16_t EndFileNum)
|
||||
{
|
||||
uint16_t i;
|
||||
uint16_t FileNumInDisk;
|
||||
uint16_t Index;
|
||||
|
||||
//<2F><>ǰΪ<C7B0><CEAA>ֹ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(!gFileSortEnable)
|
||||
{
|
||||
return (StartFileNum + FileSortNum);
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>ʹ<EFBFBD><CAB9>ԭʼ<D4AD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
if(FileSortNum + StartFileNum > FS_MAX_FILE_SORT_NUM)
|
||||
{
|
||||
return (StartFileNum + FileSortNum);
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ΪĿ<CEAA><C4BF><EFBFBD>ļ<EFBFBD>
|
||||
for(i = 1; i <= FS_MAX_FILE_SORT_NUM; i++)
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>i<EFBFBD><69><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ӧ<EFBFBD><D3A6>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
Index = ((i - 1) / 2) * 3;
|
||||
if(i % 2) //<2F><><EFBFBD><EFBFBD>
|
||||
{
|
||||
FileNumInDisk = ((FileSortTable[Index] << 4) + (FileSortTable[Index + 1] & 0x0F));
|
||||
}
|
||||
else //ż<><C5BC>
|
||||
{
|
||||
FileNumInDisk = (((FileSortTable[Index + 1] & 0xF0) << 4) + FileSortTable[Index + 2]); //(FileSortTable[Index + 1] & 0xF0)<29><><EFBFBD><EFBFBD>4λ<34><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8λ
|
||||
}
|
||||
|
||||
//<2F>ж<EFBFBD><D0B6>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>귶Χ<EAB7B6><CEA7>
|
||||
if((FileNumInDisk > StartFileNum) && (FileNumInDisk <= EndFileNum))
|
||||
{
|
||||
FileSortNum--;
|
||||
if(FileSortNum == 0)
|
||||
{
|
||||
//<2F>ҵ<EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD>
|
||||
return FileNumInDisk;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif//FS_FILE_SORT_EN
|
||||
|
||||
BIN
mico-os/platform/MCU/MX1101/FileSystem/fs.lib
Normal file
BIN
mico-os/platform/MCU/MX1101/FileSystem/fs.lib
Normal file
Binary file not shown.
44
mico-os/platform/MCU/MX1101/FileSystem/fs_history.txt
Normal file
44
mico-os/platform/MCU/MX1101/FileSystem/fs_history.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
--------------------------------------------------------------------------------------
|
||||
RELEASE NOTES
|
||||
|
||||
Shanghai Mountain View Silicon Co. Ltd. Copyright 2014, All rights reserved.
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
<EFBFBD>Ϻ<EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>·<EFBFBD>ɷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾(<28><><EFBFBD><EFBFBD>"ɽ<><C9BD>")<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SDK<44><4B><EFBFBD><EFBFBD>
|
||||
Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD>SDK<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>ȷ<EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>°汾Ϊ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ʹ<EFBFBD>ñ<EFBFBD>SDK<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD>
|
||||
|
||||
ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ڿɿ<EFBFBD><EFBFBD>ԡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸĽ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>ɱ<EFBFBD>SDKϵͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ρ<EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ר<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD>롢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά<EFBFBD>ֺ<EFBFBD><EFBFBD>κ<EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>Ĺ<EFBFBD><EFBFBD>ϻ<EFBFBD><EFBFBD>Ը<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ƷӦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɽ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>Ʒ<EFBFBD><EFBFBD>
|
||||
<EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>û<EFBFBD>ҲӦ<EFBFBD>⳥<EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD>á<EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ֱ<EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʦ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD>֤ɽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ء<EFBFBD>
|
||||
|
||||
<EFBFBD>κ<EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD>ʽ (<28>磺<EFBFBD><E7A3BA><EFBFBD>ӵġ<D3B5><C4A1><EFBFBD>е<EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1><EFBFBD>ѧ<EFBFBD>洢<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>) <20><><EFBFBD>ơ<EFBFBD><C6A1><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ǵõ<C7B5>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD>ͬ<EFBFBD>⡣
|
||||
|
||||
ע<EFBFBD>⣺<EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>á<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>벻Ҫ<EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뼰ʱ
|
||||
<EFBFBD><EFBFBD>ϵɽ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD>лл<EFBFBD><EFBFBD>
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
*2014-12-29 <20><>1.3.3 build @ Dec 29 2014 13:30:12<31><32>
|
||||
size<EFBFBD><EFBFBD>104,390
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
1<><31><EFBFBD><EFBFBD><DEB8>ļ<EFBFBD><C4BC>رա<D8B1><D5A1>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>δ<EFBFBD>ĵ<DEB8><C4B5>ļ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>д<EFBFBD>̵IJ<CCB5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
*2014-11-28 <20><>1.3.2 build @ Dec 11 2014 15:39:01<30><31>
|
||||
size<EFBFBD><EFBFBD>104,342
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
1<><31><EFBFBD><EFBFBD>FileRead()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void FileReadCallBack(void* buffer, uint32_t size)<29>ص<EFBFBD>
|
||||
2<><32><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>SetFsTerminateFuc()<29><>Ŀǰֻ<C7B0><D6BB><EFBFBD><EFBFBD>FileSeek<65><6B><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
||||
|
||||
*2014-11-28 <20><>1.3.1<EFBFBD><EFBFBD>
|
||||
size<EFBFBD><EFBFBD>102,802
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
||||
1<><31><EFBFBD>汾<EFBFBD><E6B1BE>ʹ<EFBFBD><CAB9>const<73><74><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>50<35><30><EFBFBD>ֽ<EFBFBD>MEM
|
||||
2<><32><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>FS<46><53><EFBFBD><EFBFBD><EFBFBD>Ŀɿ<C4BF><C9BF>ԣ<EFBFBD><D4A3><EFBFBD><DEB8>˶<EFBFBD>FS<46><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɳ<EFBFBD><C9B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
73
mico-os/platform/MCU/MX1101/FileSystem/inc/dir.h
Normal file
73
mico-os/platform/MCU/MX1101/FileSystem/inc/dir.h
Normal file
@@ -0,0 +1,73 @@
|
||||
#ifndef __DIR_H__
|
||||
#define __DIR_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "fsinfo.h"
|
||||
|
||||
//file attributes define
|
||||
#define ATTR_READ_ONLY 0x01
|
||||
#define ATTR_HIDDEN 0x02
|
||||
#define ATTR_SYSTEM 0x04
|
||||
#define ATTR_VOLUME_ID 0x08
|
||||
#define ATTR_DIRECTORY 0x10
|
||||
#define ATTR_ARCHIVE 0x20
|
||||
#define ATTR_LONG_NAME 0x0f //ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID
|
||||
#define ATTR_LONG_NAME_MASK 0x3f //ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY | ATTR_ARCHIVE
|
||||
#define ATTR_RECYCLED_MASK 0x16 //ATTR_DIRECTORY | ATTR_HIDDEN | ATTR_SYSTEM
|
||||
|
||||
|
||||
|
||||
typedef enum _ENTRY_TYPE
|
||||
{
|
||||
ENTRY_FILE,
|
||||
ENTRY_FOLDER, //<2F>ļ<EFBFBD><C4BC><EFBFBD>Ŀ¼<C4BF><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
ENTRY_END, //<2F><>ǰĿ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ENTRY_RECYCLED,
|
||||
ENTRY_DOT,
|
||||
ENTRY_LONG_NAME,
|
||||
ENTRY_DELETED_FILE,
|
||||
ENTRY_UNKNOWN
|
||||
|
||||
} ENTRY_TYPE;
|
||||
|
||||
|
||||
void DirSetStartEntry(FS_CONTEXT* FsContext, uint32_t StartSecNum, uint8_t Offset, bool InitFlag);
|
||||
|
||||
uint32_t DirGetSonClusNum(FS_CONTEXT* FsContext);
|
||||
|
||||
uint32_t DirGetSonSecNum(FS_CONTEXT* FsContext);
|
||||
|
||||
void DirSetSonClusNum(FS_CONTEXT* FsContext, uint32_t ClusNum);
|
||||
|
||||
//<2F>ڵ<EFBFBD>ǰĿ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>Ŀ¼<C4BF><C2BC>
|
||||
uint8_t DirGetNextEntry(FS_CONTEXT* FsContext);
|
||||
|
||||
bool DirFindNextFolder(FS_CONTEXT* FsContext);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
||||
bool DirEnterSonFolder(FS_CONTEXT* FsContext);
|
||||
|
||||
//<2F><><EFBFBD>ظ<EFBFBD>Ŀ¼
|
||||
bool DirEnterParentFolder(FS_CONTEXT* FsContext);
|
||||
|
||||
void RewindFolderStart(FS_CONTEXT* FsContext);
|
||||
|
||||
bool DirNameConvert(uint8_t* DstFileName, uint8_t* SrcFileName);
|
||||
|
||||
void DirGenItem(FS_CONTEXT* FsContext, uint8_t* DirName, uint32_t StartClusNum, uint32_t Size, uint8_t Attribute);
|
||||
|
||||
void DirGenLongItem(FS_CONTEXT* FsContext, uint8_t* longName, uint8_t* shortName, uint8_t Len);
|
||||
|
||||
// Load file/folder long name.
|
||||
bool GetLongName(FS_CONTEXT* FsContext, uint32_t ParentFoldSect, uint32_t SectorNum, uint8_t Offset, uint8_t* LongFileName, uint8_t GetMaxLength);
|
||||
|
||||
bool FindNextFolder(FS_CONTEXT* FsContext);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif
|
||||
42
mico-os/platform/MCU/MX1101/FileSystem/inc/diskio.h
Normal file
42
mico-os/platform/MCU/MX1101/FileSystem/inc/diskio.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*-----------------------------------------------------------------------
|
||||
/ Low level disk interface modlue include file R0.07 (C)ChaN, 2009
|
||||
/-----------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __DISKIO__
|
||||
#define __DISKIO__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "type.h"
|
||||
|
||||
|
||||
/* Status of Disk Functions */
|
||||
typedef uint8_t DSTATUS;
|
||||
|
||||
/* Results of Disk Functions */
|
||||
typedef enum
|
||||
{
|
||||
RES_OK = 0, /* 0: Successful */
|
||||
RES_ERROR, /* 1: R/W Error */
|
||||
RES_WRPRT, /* 2: Write Protected */
|
||||
RES_NOTRDY, /* 3: Not Ready */
|
||||
RES_PARERR, /* 4: Invalid Parameter */
|
||||
RES_TIMEOUT /* 5: Time Out */
|
||||
} DRESULT;
|
||||
|
||||
|
||||
/*---------------------------------------*/
|
||||
/* Prototypes for disk control functions */
|
||||
|
||||
DSTATUS disk_initialize(uint8_t);
|
||||
DSTATUS disk_status(uint8_t);
|
||||
DRESULT disk_read(uint8_t, uint8_t*, uint32_t, uint8_t);
|
||||
DRESULT disk_write(uint8_t, const uint8_t*, uint32_t, uint8_t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif
|
||||
239
mico-os/platform/MCU/MX1101/FileSystem/inc/fat_file.h
Normal file
239
mico-os/platform/MCU/MX1101/FileSystem/inc/fat_file.h
Normal file
@@ -0,0 +1,239 @@
|
||||
#ifndef __FAT_FILE_H__
|
||||
#define __FAT_FILE_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "fs_config.h"
|
||||
#include "folder.h"
|
||||
#include "fsinfo.h"
|
||||
|
||||
//open mode
|
||||
|
||||
#define FA_READ 0x01
|
||||
#define FA_WRITE 0x02
|
||||
#define FA_CREATE_NEW 0x04
|
||||
#define FA_CREATE_ALWAYS 0x08
|
||||
|
||||
//file status
|
||||
//#define FA__WRITTEN 0x20
|
||||
//#define FA__DIRTY 0x40
|
||||
//#define FA__ERROR 0x80
|
||||
|
||||
//define file seek position.
|
||||
#define SEEK_FILE_SET 0 //seek file from the first sector of file
|
||||
#define SEEK_FILE_CUR 1 //seek file from the current sector of file
|
||||
#define SEEK_FILE_END 2 //seek file from the last sector of file
|
||||
|
||||
|
||||
typedef enum _FILE_TYPE
|
||||
{
|
||||
FILE_TYPE_MP3,
|
||||
FILE_TYPE_WMA,
|
||||
FILE_TYPE_WAV,
|
||||
FILE_TYPE_SBC,
|
||||
FILE_TYPE_FLAC,
|
||||
FILE_TYPE_AAC,
|
||||
FILE_TYPE_AIF,
|
||||
FILE_TYPE_AMR,
|
||||
FILE_TYPE_UNKNOWN = 0xFF
|
||||
|
||||
} FILE_TYPE;
|
||||
|
||||
|
||||
|
||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ
|
||||
typedef struct _FAT_FILE
|
||||
{
|
||||
uint16_t FileNumInDisk; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
uint16_t FileNumInFolder; //<2F>ڵ<EFBFBD>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
uint16_t FolderNum; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>еı<D0B5><C4B1><EFBFBD>
|
||||
// uint16_t ValidFolderNum; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD><D0B5><EFBFBD>Ч<EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD>
|
||||
|
||||
uint32_t ParentFoldStartSecNum; //<2F><>Ŀ¼<C4BF><C2BC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint32_t DirSecNum; //FDI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint32_t DirOffset; //FDI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
|
||||
uint8_t ShortName[11]; //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
#if FAT_USE_LFN == 1
|
||||
//uint8_t LongName[FAT_NAME_MAX]; //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
#endif
|
||||
uint8_t FileType; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint32_t Size; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
|
||||
uint32_t FptrIndex;
|
||||
uint32_t FptrCluster;
|
||||
uint32_t StartClusNum; //<2F>ļ<EFBFBD><C4BC><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>غ<EFBFBD>
|
||||
uint32_t SecterOffset; // Sector offset in the cluster
|
||||
|
||||
uint32_t Fptr; //<2F><>ǰλ<C7B0><CEBB><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
//uint32_t DataSec; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//uint8_t* IOBuffer; //<2F>ļ<EFBFBD><C4BC><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>״̬
|
||||
|
||||
FS_CONTEXT* FsContext;
|
||||
} FAT_FILE;
|
||||
|
||||
|
||||
//<2F><><EFBFBD>á<EFBFBD><C3A1><EFBFBD>ȡ<EFBFBD>ļ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ľṹ<C4BD><E1B9B9>
|
||||
typedef struct _FILE_TIME
|
||||
{
|
||||
uint16_t Year; //1980<38><30>2107
|
||||
uint8_t Month; //1<><31>12
|
||||
uint8_t Date; //1<><31>31
|
||||
uint8_t Hour; //0<><30>23
|
||||
uint8_t Min; //0<><30>59
|
||||
uint8_t Sec; //0<><30>59
|
||||
|
||||
} FILE_TIME;
|
||||
|
||||
|
||||
//
|
||||
// @brief Open a file
|
||||
// @param file_name file name forexample: \\mp3\\short.mp3,\\mp3\\short.mp3
|
||||
// @param mode open mode FA_READ<41><44>FA_WRITE<54><45>FA_CREATE_NEW<45><57>FA_CREATE_ALWAYS
|
||||
// @return File Handle
|
||||
// <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>л<EFBFBD><D0BB>ļ<EFBFBD>
|
||||
// ֧<>ֳ<EFBFBD><D6B3>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
bool FileOpen(FAT_FILE* File, const uint8_t* FileName, const uint8_t Mode);
|
||||
|
||||
//<2F>ж<EFBFBD><D0B6>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t FileGetType(FS_CONTEXT* FsContext);
|
||||
|
||||
//
|
||||
// @brief Check End-of-File indicator.
|
||||
// @param File Pointer to a FILE object that specifies stream.
|
||||
// @return The feof function returns a nonzero value if a read operation has attempted to read past the end of the file; it returns 0 otherwise.
|
||||
//
|
||||
int32_t FileEOF(FAT_FILE* File);
|
||||
|
||||
//<2F><><EFBFBD>ص<EFBFBD><D8B5>ļ<EFBFBD><C4BC><EFBFBD>ͷ
|
||||
void FileRewind(FAT_FILE* File);
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
//<2F>ɹ<F2BFAAB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽File<6C><65>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
//Folder == NULL: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ϵĵ<CFB5>FileNum<75><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//Folder != NULL: <20><><EFBFBD><EFBFBD>Folder<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>еĵ<D0B5>FileNum<75><6D><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
bool FileOpenByNum(FAT_FILE* File, FOLDER* Folder, uint16_t FileNum);
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F>ɹ<F2BFAAB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽File<6C><65>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
//Folderָ<72>벻<EFBFBD><EBB2BB>Ϊ<EFBFBD><CEAA>ָ<EFBFBD>롣
|
||||
bool FileOpenByName(FAT_FILE* File, FOLDER* Folder, uint8_t* FileName);
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F>ɹ<F2BFAAB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽File<6C><65>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
//Folder<65><72><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>FileNameΪUnicode 16<31><36><EFBFBD><EFBFBD>
|
||||
bool FileOpenByLfName(FAT_FILE* File, FOLDER* Folder, uint8_t* FileName, uint8_t Len);
|
||||
|
||||
//
|
||||
// @brief Moves the file pointer to a specified location.
|
||||
// @param File Pointer to a FILE object that specifies stream.
|
||||
// @param Offset Number of bytes from origin.
|
||||
// @param Base Initial position.
|
||||
// @return If successful, the function returns a zero value. Otherwise, it returns nonzero value.
|
||||
//
|
||||
int32_t FileSeek(FAT_FILE* File, int32_t Offset, uint8_t Base);
|
||||
|
||||
//
|
||||
// @brief Read data from stream
|
||||
// @param buffer Pointer to a block of buffer with a minimum size of (size*count) bytes.
|
||||
// @param size Size in bytes of each element to be read.
|
||||
// @param count Number of elements, each one with a size of size bytes.
|
||||
// @param File Pointer to a FILE object that specifies an input stream.
|
||||
// @return The total number of elements successfully read.
|
||||
//
|
||||
uint32_t FileRead(void* buffer, uint32_t size, uint32_t count, FAT_FILE* File);
|
||||
|
||||
//
|
||||
// @brief Write data to stream
|
||||
// @param buffer Pointer to a block of buffer with a minimum size of (size*count) bytes.
|
||||
// @param size Size in bytes of each element to be write.
|
||||
// @param count Number of elements, each one with a size of size bytes.
|
||||
// @param File Pointer to a FILE object that specifies an output stream.
|
||||
// @return The total number of elements successfully write.
|
||||
//
|
||||
uint32_t FileWrite(const void* buffer, uint32_t size, uint32_t count, FAT_FILE* File);
|
||||
|
||||
//
|
||||
// @brief Get size of the opened file.
|
||||
// @param File Pointer to a FILE object that specifies an output stream.
|
||||
// @return size of the opened file.
|
||||
//
|
||||
int32_t FileSof(FAT_FILE* File);
|
||||
|
||||
//
|
||||
// @brief Gets the current position of a file pointer.
|
||||
// @param File Pointer to a FILE object that specifies stream.
|
||||
// @return code
|
||||
//
|
||||
int32_t FileTell(FAT_FILE* File);
|
||||
|
||||
//
|
||||
// @brief File save Fat and Dir
|
||||
// @param File Pointer to a FILE object that specifies an output stream.
|
||||
// @return fclose returns 0 if the stream is successfully closed.
|
||||
//
|
||||
int32_t FileSave(FAT_FILE* File);
|
||||
|
||||
//
|
||||
// @brief Closes a stream.
|
||||
// @param File Pointer to a FILE object that specifies an output stream.
|
||||
// @return fclose returns 0 if the stream is successfully closed.
|
||||
//
|
||||
int32_t FileClose(FAT_FILE* File);
|
||||
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD>ļ<EFBFBD><C4BC>ij<EFBFBD><C4B3>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>LongFileName<6D><65><EFBFBD><EFBFBD>С<EFBFBD><D0A1>GetMaxLength
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>
|
||||
//<2F><EFBFBD><DEB3>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
bool FileGetLongName(FAT_FILE* File, uint8_t* LongFileName, uint8_t GetMaxLength);
|
||||
|
||||
//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ա<EFBFBD>
|
||||
//<2F>ɹ<EFBFBD>:<3A><><EFBFBD><EFBFBD>TRUE<55><45>ʧ<EFBFBD><CAA7>:<3A><><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
bool FileFlush(FAT_FILE* File);
|
||||
|
||||
//<2F>ļ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>:<3A><><EFBFBD><EFBFBD>TRUE<55><45>ʧ<EFBFBD><CAA7>:<3A><><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
bool FileDelete(FAT_FILE* File);
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽File<6C><65>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//FileName[]Ϊ<><CEAA><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>磺"123.TXT", "ABC123.MP3"<22><>
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2>ܳ<EFBFBD><DCB3><EFBFBD>8+3<>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ִ<EFBFBD>Сд<D0A1><D0B4>ĸ<EFBFBD><C4B8>
|
||||
bool FileCreate(FAT_FILE* File, FOLDER* Folder, uint8_t* FileName);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽File<6C><65>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//FileName[]Ϊ<><CEAA><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//Folder <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>գ<EFBFBD>FileNameΪUnicode 16<31><36><EFBFBD>룬LongFileName<6D><65>Ϊ128 <20>ֽڿ<D6BD><DABF><EFBFBD>λ<EFBFBD><CEBB>Ϊ0xFF
|
||||
bool FileCreateByLfName(FAT_FILE* File, FOLDER* Folder, uint8_t* LongFileName, uint8_t Len);
|
||||
|
||||
bool FSFormat(void);
|
||||
|
||||
//<2F><EFBFBD><DEB8>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
//CreateTime: <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>Ϊ1<CEAA><31>
|
||||
//ModifyTime: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>Ϊ2<CEAA><32>
|
||||
//AccessTime: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬ֻ<E4A3AC><D6BB><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䲿<EFBFBD><E4B2BF>
|
||||
//<2F><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
|
||||
//<2F>ɹ<EFBFBD>:<3A><><EFBFBD><EFBFBD>TRUE<55><45> ʧ<><CAA7>:<3A><><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
bool FileSetTime(FAT_FILE* File, FILE_TIME* CreateTime, FILE_TIME* ModifyTime, FILE_TIME* AccessTime);
|
||||
|
||||
//<2F><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
|
||||
//CreateTime: <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>Ϊ1<CEAA><31>
|
||||
//ModifyTime: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>Ϊ2<CEAA><32>
|
||||
//AccessTime: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬ֻ<E4A3AC><D6BB><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䲿<EFBFBD><E4B2BF>
|
||||
//<2F><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
|
||||
//<2F>ɹ<EFBFBD>:<3A><><EFBFBD><EFBFBD>TRUE<55><45> ʧ<><CAA7>:<3A><><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
bool FileGetTime(FAT_FILE* File, FILE_TIME* CreateTime, FILE_TIME* ModifyTime, FILE_TIME* AccessTime);
|
||||
|
||||
void SetFsTerminateFuc(TerminateFunc func);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif //_FAT_FILE_H_
|
||||
87
mico-os/platform/MCU/MX1101/FileSystem/inc/folder.h
Normal file
87
mico-os/platform/MCU/MX1101/FileSystem/inc/folder.h
Normal file
@@ -0,0 +1,87 @@
|
||||
#ifndef __FOLDER_H__
|
||||
#define __FOLDER_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "fsinfo.h"
|
||||
// Folder info structure define.
|
||||
typedef struct _FOLDER
|
||||
{
|
||||
uint16_t FolderNum; //<2F>ļ<EFBFBD><C4BC>к<EFBFBD>
|
||||
uint16_t ValidFolderNum; //<2F><>Ч<EFBFBD>ļ<EFBFBD><C4BC>к<EFBFBD>
|
||||
|
||||
uint32_t ParentFoldStartSecNum; //<2F><>Ŀ¼<C4BF><C2BC>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint32_t DirSecNum; //FDI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t DirOffset; //FDI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
|
||||
uint32_t EndDirSecNum; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t EndDirOffset; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
|
||||
uint32_t StartSecNum;
|
||||
uint8_t ShortName[9]; //folder short name
|
||||
|
||||
uint16_t StartFileNum; //for calculate absolute file number in whole partition.
|
||||
|
||||
uint16_t IncFileCnt; //include file sum of the folder, not recursion
|
||||
uint16_t IncFolderCnt;
|
||||
|
||||
uint16_t RecFileCnt; //recursion file sum of the current folder
|
||||
uint16_t RecFolderCnt;
|
||||
|
||||
FS_CONTEXT* FsContext;
|
||||
|
||||
} FOLDER;
|
||||
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F>ɹ<F2BFAAB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽Folder<65><72>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
//ParentFolder == NULL: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ϵĵ<CFB5>FolderNum<75><6D><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//ParentFolder != NULL: <20><><EFBFBD><EFBFBD>ParentFolder<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>еĵ<D0B5>FolderNum<75><6D><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
bool FolderOpenByNum(FOLDER* Folder, FOLDER* ParentFolder, uint16_t FolderNum);
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ţ<EFBFBD><C5A3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FolderOpenByNum()<29><>
|
||||
bool FolderOpenByValidNum(FOLDER* Folder, FOLDER* ParentFolder, uint16_t ValidFolderNum);
|
||||
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//<2F>ɹ<F2BFAAB3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽Folder<65><72>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
//ParentFolder == NULL: <20><EFBFBD>Ŀ¼<C4BF>е<EFBFBD>FolderName<6D>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//ParentFolder != NULL: <20><><EFBFBD><EFBFBD>ParentFolder<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD>FolderName<6D>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//FolderName[]<5D><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD>Ϊ"\\"
|
||||
bool FolderOpenByName(FOLDER* Folder, FOLDER* ParentFolder, uint8_t* FolderName);
|
||||
|
||||
//
|
||||
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
//<2F><>Ҫջ<D2AA>ռ<EFBFBD><D5BC>ϴ<EFBFBD> FAT_NAME_MAX *2
|
||||
//
|
||||
bool FolderOpenByLfName(FOLDER* Folder, FOLDER* ParentFolder, uint8_t* FolderName, uint8_t Len);
|
||||
|
||||
//<2F><>ȡָ<C8A1><D6B8><EFBFBD>ļ<EFBFBD><C4BC>еij<D0B5><C4B3>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ϊ66<36><36><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD>LongFileName[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>66<36><36><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>ᵼ<F2BDABBB>²<EFBFBD><C2B2><EFBFBD>Ԥ<EFBFBD>ϵĴ<CFB5><C4B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TRUE<55><45>
|
||||
//<2F><EFBFBD><DEB3>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FALSE<53><45>
|
||||
bool FolderGetLongName(FOLDER* Folder, uint8_t* LongFileName, uint8_t GetMaxLength); //LongFileName[]: 66 Bytes
|
||||
|
||||
//<2F>½<EFBFBD><C2BD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//<2F><>ParentFolder<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFolderName[]<5D><><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//ParentFolder<65><72><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ָ<EFBFBD>벻<EFBFBD><EBB2BB>ΪNULL<4C><4C>
|
||||
//<2F><><EFBFBD><EFBFBD>TRUE<55><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽Folder<65><72>ָ<EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD>С<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>FALSE<53><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܡ<EFBFBD>
|
||||
bool FolderCreate(FOLDER* Folder, FOLDER* ParentFolder, uint8_t* FolderName);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>С<EFBFBD>
|
||||
//Ŀ<><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>䵽Folder<65><72>ָ<EFBFBD>Ľṹ<C4BD>塣
|
||||
//FolderLongName[64]Ϊ<><CEAA><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,Unicode 16<31><36><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>Ϊ128Byte <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ0xFF
|
||||
//FolderShortName[11]Ϊ<><CEAA><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,Utf-8<><38><EFBFBD>룬<EFBFBD><EBA3AC><EFBFBD><EFBFBD>Ϊ11Byte <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ<EFBFBD>ո<EFBFBD>"0x20"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>Ϊ0x20
|
||||
//ParentFolder <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
|
||||
//Len Ϊ<><CEAA><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3>ȣ<EFBFBD><C8A3><EFBFBD>λΪuint16_t
|
||||
bool FolderCreateByLongName(FOLDER* Folder, FOLDER* ParentFolder, uint16_t* FolderLongName, uint8_t* FolderShortName, uint8_t Len);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif
|
||||
36
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_config.h
Normal file
36
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_config.h
Normal file
@@ -0,0 +1,36 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:fs_config.h
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
#ifndef __FS_CONFIG_H__
|
||||
#define __FS_CONFIG_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "type.h"
|
||||
|
||||
///////////////////////////////////////<2F><><EFBFBD><EFBFBD>Ϊֻ<CEAA><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
#define FAT_USE_LFN 1 //read only
|
||||
|
||||
#define FAT_NAME_MAX 128 //read only
|
||||
|
||||
#define MAX_FS_CONTEXT_COUNT 1 //֧<><D6A7>ͬʱmount<6E>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD> read only
|
||||
///////////////////////////////////////ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
|
||||
|
||||
///////////////////////////////////////<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
|
||||
#define FS_FILE_SORT_EN 0 //<2F>Ƿ<EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define FS_MAX_FILE_SORT_NUM 1024 //֧<>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2048
|
||||
|
||||
///////////////////////////////////////<2F><><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif //_FS_CONFIG_H_
|
||||
43
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_filesort.h
Normal file
43
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_filesort.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:filesort.h
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __FS_FILESORT_H__
|
||||
#define __FS_FILESORT_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "fs_config.h"
|
||||
|
||||
#if FS_FILE_SORT_EN == 1
|
||||
//
|
||||
//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µĸ<C2B5><C4B8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>PreSearch()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FileSortSearchNewFile(FS_CONTEXT* FsContext);
|
||||
|
||||
//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FileSortTable[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><>PreSearch()<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FileSortSearchEnd(FS_CONTEXT* FsContext);
|
||||
|
||||
//<2F>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>FileOpenByNum()<29><><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>FileSortNum<75><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭʼ<D4AD>ļ<EFBFBD><C4BC>Ų<EFBFBD><C5B2><EFBFBD>[StartFileNum + 1, EndFileNum]<5D><>Χ<EFBFBD>ڵ<EFBFBD><DAB5>ļ<EFBFBD>
|
||||
//1.<2E><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>m<EFBFBD><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC>ţ<EFBFBD>
|
||||
// GetFileNumInDisk(FsContext, m, 0, 0xFFFF)<29><><EFBFBD>õ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ӧ<EFBFBD><D3A6>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//2.<2E><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>m<EFBFBD><6D><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ԭʼȫ<CABC><C8AB><EFBFBD>ļ<EFBFBD><C4BC>ţ<EFBFBD>
|
||||
// GetFileNumInDisk(FsContext, m, Folder->StartFileNum, Folder->StartFileNum + Folder->IncFileCnt)
|
||||
uint16_t GetFileNumInDisk(FS_CONTEXT* FsContext, uint16_t FileSortNum, uint16_t StartFileNum, uint16_t EndFileNum);
|
||||
|
||||
#endif //FS_FILE_SORT_EN
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif //__FS_FILESORT_H__
|
||||
39
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_mount.h
Normal file
39
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_mount.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef __FS_MOUNT_H__
|
||||
#define __FS_MOUNT_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
//
|
||||
//<2F><>ҪĿ<D2AA><C4BF>Ϊʵ<CEAA>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>
|
||||
//
|
||||
#define CONF_DRIVES (2)
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ
|
||||
extern uint8_t FsMount(uint8_t LogicId, FS_CONTEXT * fs);
|
||||
|
||||
//<2F>л<EFBFBD><D0BB><EFBFBD>ǰĬ<C7B0>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
||||
extern uint8_t FsChDrive(uint8_t LogicId);
|
||||
|
||||
//<2F><>ȡ<EFBFBD><C8A1>ǰĬ<C7B0>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
extern uint8_t FsGetDriveType(void);
|
||||
|
||||
//<2F><>ȡ<EFBFBD>ɹ<EFBFBD><C9B9>ص<EFBFBD><D8B5><EFBFBD><DFBC>豸<EFBFBD><E8B1B8>
|
||||
extern int8_t FsGetAvailableLogicId(void);
|
||||
|
||||
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ
|
||||
extern FS_CONTEXT* FsGetCurContext(void);
|
||||
|
||||
//ͨ<><CDA8><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ͻ<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ
|
||||
extern FS_CONTEXT* FsGetContextByDeviceType(uint8_t DeviceType);
|
||||
|
||||
//ͨ<><CDA8><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD>ͻ<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5><EFBFBD><DFBC><EFBFBD>
|
||||
extern int8_t FsGetLogicIdByDeviceType(uint8_t DeviceType);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif //_FS_MOUNT_H_
|
||||
41
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_sync.h
Normal file
41
mico-os/platform/MCU/MX1101/FileSystem/inc/fs_sync.h
Normal file
@@ -0,0 +1,41 @@
|
||||
#ifndef __FS_SYNC_H__
|
||||
#define __FS_SYNC_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "fsinfo.h"
|
||||
//
|
||||
//<2F><>ҪĿ<D2AA><C4BF>Ϊʵ<CEAA><CAB5><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5>Ķ<EFBFBD><C4B6>߳<EFBFBD>ͬ<EFBFBD><CDAC>
|
||||
//
|
||||
|
||||
//
|
||||
// init sync semaphore
|
||||
//
|
||||
uint8_t FsSyncInit(void* FsContext);
|
||||
|
||||
//
|
||||
// lock
|
||||
//
|
||||
void FsLock(void* FsContext);
|
||||
|
||||
//
|
||||
// unlock
|
||||
//
|
||||
void FsUnLock(void* FsContext);
|
||||
|
||||
#define ENTER_FAT(fs) FsLock(fs)
|
||||
|
||||
#define LEAVE_FAT(fs, res) \
|
||||
{ \
|
||||
FsUnLock(fs); \
|
||||
return res; \
|
||||
}
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif //_FS_SYNC_H_
|
||||
273
mico-os/platform/MCU/MX1101/FileSystem/inc/fsinfo.h
Normal file
273
mico-os/platform/MCU/MX1101/FileSystem/inc/fsinfo.h
Normal file
@@ -0,0 +1,273 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:fsinfo.h
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __FSINFO_H__
|
||||
#define __FSINFO_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include <string.h>
|
||||
#include "fs_config.h"
|
||||
|
||||
#define SECTOR_SIZE 512 //bytes per sector
|
||||
/////////////////////////<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>//////////////////////////////////////////////////////
|
||||
#define MAX_FOLDER_NUM_SAVE 2048 //save foler 1-2048 empty flag
|
||||
|
||||
// Define device ID in system.
|
||||
typedef enum _DEV_ID
|
||||
{
|
||||
DEV_ID_NONE,
|
||||
DEV_ID_USB,
|
||||
DEV_ID_SD,
|
||||
DEV_ID_SPIFS,
|
||||
DEV_ID_ATA
|
||||
} DEV_ID;
|
||||
|
||||
//<2F><>ȡ<EFBFBD><C8A1>ǰĬ<C7B0>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
extern uint8_t FsGetDriveType(void);
|
||||
|
||||
// File system structure
|
||||
typedef struct _FS_INFO
|
||||
{
|
||||
DEV_ID DevID; //device id of this drive
|
||||
bool FAT32; //is FAT32 file system
|
||||
bool IsCpatFS; //is compatalbe file system
|
||||
|
||||
bool IsFATChange;
|
||||
//bool IsDIRChange;
|
||||
|
||||
int32_t CurrFATSecNum; //current FAT sector number
|
||||
//int32_t CurrDirSecNum; //current directory sector number
|
||||
|
||||
uint8_t ClusterSize; //sector per cluster
|
||||
uint32_t FatStart; //the sector number of FAT start
|
||||
uint32_t RootStart; //This is set to the cluster number of the first cluster of the root director.,
|
||||
uint32_t DataStart; //the first sector of data
|
||||
uint32_t MaxCluster; //max cluster number in this drive
|
||||
uint32_t MaxSector; //max sector number in this drive
|
||||
|
||||
uint32_t FreeClusNum;
|
||||
|
||||
uint16_t FileSum; //<2F><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ϵĸ<CFB5><C4B8><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t FileSumInFolder; //<2F>ļ<EFBFBD>ϵͳ<CFB5>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
uint16_t FolderSum; //<2F><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t FolderNumInFolder; //<2F>ļ<EFBFBD>ϵͳ<CFB5>ڲ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
|
||||
uint16_t ValidFolderSum; //<2F><><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD>ϵķǿ<C4B7><C7BF>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
uint16_t RootFileSum; //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD><C2B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
} FS_INFO;
|
||||
|
||||
|
||||
#define MAX_STACK_DEPTH 9
|
||||
typedef struct _LEAD_PATH
|
||||
{
|
||||
uint32_t SecNum[MAX_STACK_DEPTH]; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t Offset[MAX_STACK_DEPTH]; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
uint8_t NodesCnt;
|
||||
|
||||
uint32_t FdiSecNum; //ĩ<>˽ڵ<CBBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0
|
||||
|
||||
uint16_t PreFileNumInDisk; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
||||
uint16_t PreFileNumInFolder; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>֮ǰͬһ<CDAC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
|
||||
|
||||
uint16_t ParentFolderNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ļ<EFBFBD><C4BC>к<EFBFBD>
|
||||
uint16_t PreFolderNumInFolder; //<2F>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>֮ǰͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
|
||||
uint16_t PreFolderNumInDisk; //<2F><><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD>˳<EFBFBD><CBB3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>֮ǰȫ<C7B0><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
|
||||
uint16_t StartFileNumNextFolder; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Լ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʱʹ<CAB1><CAB9>
|
||||
|
||||
uint32_t FolderDirStart;
|
||||
|
||||
} LEAD_PATH;
|
||||
|
||||
#define MAX_LEAD_PATH_CNT 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㣬<DAB5><E3A3AC>ͬ·<CDAC><C2B7><EFBFBD>ϵĽڵ<C4BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
||||
|
||||
|
||||
|
||||
#define MEMORY_PAGE_CNT 1024
|
||||
|
||||
typedef struct _FDI_STATCK
|
||||
{
|
||||
uint32_t SecNum[MAX_STACK_DEPTH]; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t Offset[MAX_STACK_DEPTH]; //<2F><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
uint16_t FolderNum[MAX_STACK_DEPTH]; //<2F><><EFBFBD>ڵ<EFBFBD>ͬһ<CDAC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ڱ<EFBFBD><DAB1>ڵ<EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
uint8_t Depth; //<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ϵĽڵ<C4BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
} FDI_STATCK;
|
||||
|
||||
|
||||
//define File Description Block
|
||||
#pragma pack(1)
|
||||
typedef struct _FDB
|
||||
{
|
||||
uint8_t FileName[8];
|
||||
uint8_t ExtName[3];
|
||||
uint8_t Attribute;
|
||||
uint8_t NTRes;
|
||||
uint8_t CrtTimeTenth;
|
||||
uint16_t CreateTime;
|
||||
uint16_t CreateDate;
|
||||
uint16_t AccessDate;
|
||||
uint16_t StartHigh; //this entry's first cluster number. High
|
||||
uint16_t ModifyTime;
|
||||
uint16_t ModifyDate;
|
||||
uint16_t StartLow; //this entry's first cluster number. Low
|
||||
uint32_t Size; //32-bit uint32_t holding this file<6C><65>s size in bytes
|
||||
|
||||
} FDB;
|
||||
#pragma pack()
|
||||
|
||||
#pragma pack(1)
|
||||
// Define long name dirctory entry sturct.
|
||||
typedef struct _LONG_DIR_ENTRY
|
||||
{
|
||||
uint8_t Ord;
|
||||
uint8_t Name1[10];
|
||||
uint8_t Attribute;
|
||||
uint8_t Type;
|
||||
uint8_t CheckSum;
|
||||
uint8_t Name2[12];
|
||||
uint8_t Resv[2];
|
||||
uint8_t Name3[4];
|
||||
|
||||
} LONG_DIR_ENTRY;
|
||||
#pragma pack()
|
||||
|
||||
#define PRESEARCH_STATUS_NONE 0x00
|
||||
#define PRESEARCH_STATUS_SEARCHING 0x01
|
||||
#define PRESEARCH_STATUS_SEARCHED 0x02
|
||||
typedef struct _FS_IO_BUFFER
|
||||
{
|
||||
uint8_t Buffer[SECTOR_SIZE];
|
||||
uint32_t BufferSecNum;
|
||||
bool IsBufferChange;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Buffer <20><>BufferSecNumͬʱ<CDAC>ı<EFBFBD>
|
||||
}FS_IO_BUFFER;
|
||||
|
||||
// File system context
|
||||
typedef struct _FS_CONTEXT
|
||||
{
|
||||
// File System memory address.
|
||||
uint8_t CurrentBufferFlag; //ָʾIO_BUFFER<45><52><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
|
||||
FS_IO_BUFFER IO_BUFFER[2]; //<2F><><EFBFBD><EFBFBD>ԭFileIoBuffer<65><72>DIR_BUFFER<45><52><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD>ʡ<EFBFBD>ڴ<EFBFBD>
|
||||
|
||||
//uint8_t DIR_BUFFER[SECTOR_SIZE];
|
||||
uint8_t FAT_BUFFER[SECTOR_SIZE];
|
||||
|
||||
FS_INFO gFsInfo; // File system structure
|
||||
|
||||
uint8_t gPreSearchStatus;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
//ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1>š<EFBFBD>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʵ<EFBFBD>ֿ<EFBFBD><D6BF>ٶ<EFBFBD>λ<EFBFBD><CEBB>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>ļ<EFBFBD><C4BC>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>и<EFBFBD><D0B8><EFBFBD>
|
||||
LEAD_PATH LeadPaths[MAX_LEAD_PATH_CNT];
|
||||
uint16_t CurrentInterval;
|
||||
uint16_t FdiCnt;
|
||||
uint8_t OutIndex;
|
||||
|
||||
//
|
||||
uint16_t gPreFileNum;
|
||||
uint16_t gPreFileNumInFolder;
|
||||
uint16_t gPreFolderNum;
|
||||
uint16_t gPreFolderNumInFolder;
|
||||
bool gFindFolderFlag;
|
||||
|
||||
|
||||
uint16_t FolderStartFileNum;
|
||||
|
||||
bool gMemoryPageMapValid;
|
||||
|
||||
//dir
|
||||
FDB* gCurrentEntry;
|
||||
uint32_t gDirSecNum;
|
||||
uint8_t gEntryOffset;
|
||||
uint32_t gFolderDirStart;
|
||||
FDI_STATCK FdiStack;
|
||||
//bool gExcludeRecycled = FALSE;
|
||||
|
||||
//fat_write
|
||||
uint8_t gMemoryPageMap[MEMORY_PAGE_CNT / 8];
|
||||
uint32_t gClusStepNum;
|
||||
|
||||
//folder
|
||||
uint16_t IncFileSum;
|
||||
uint16_t IncFolderSum;
|
||||
|
||||
uint8_t gFolderEmpty[MAX_FOLDER_NUM_SAVE / 8]; //one bit per folder
|
||||
|
||||
uint32_t gCurFreeClusNum;
|
||||
|
||||
|
||||
} FS_CONTEXT;
|
||||
|
||||
extern bool FSInit(uint8_t DeviceID);
|
||||
extern bool FSDeInit(uint8_t DeviceID);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD>麯<EFBFBD><E9BAAF>Ϊ<EFBFBD>ļ<EFBFBD>ϵͳ<CFB5>ڲ<EFBFBD>ʹ<EFBFBD>á<EFBFBD>
|
||||
void FSINFO_Init(FS_CONTEXT* FsContext);
|
||||
void FSINFO_SaveFdi(FS_CONTEXT* FsContext);
|
||||
void FSINFO_ChangeFolderNum(FS_CONTEXT* FsContext);
|
||||
void FSINFO_ChangeFileNum(FS_CONTEXT* FsContext);
|
||||
void FSINFO_InitOpenFolder(FS_CONTEXT* FsContext, uint16_t StartFolderNum, uint16_t FolderNum);
|
||||
bool FSINFO_FindLastNode(FS_CONTEXT* FsContext, uint32_t SecNum, uint8_t Offset, uint8_t Depth, bool RecFlag, bool RootFlag);
|
||||
void FSINFO_InitOpenFile(FS_CONTEXT* FsContext, uint16_t FileNum);
|
||||
|
||||
|
||||
//<2F><>ij<EFBFBD><C4B3><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǿա<C7BF>
|
||||
void ClrFolderEmptyFlag(FS_CONTEXT* FsContext, uint16_t FolderNum);
|
||||
|
||||
//<2F><>ij<EFBFBD><C4B3><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>Ϊ<EFBFBD>ա<EFBFBD>
|
||||
void SetFolderEmptyFlag(FS_CONTEXT* FsContext, uint16_t FolderNum);
|
||||
|
||||
//<2F>ж<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>ա<EFBFBD>
|
||||
bool IsFolderEmpty(FS_CONTEXT* FsContext, uint16_t FolderNum);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ԭʼ<D4AD>ļ<EFBFBD><C4BC>кż<D0BA><C5BC><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ļ<EFBFBD><C4BC>кţ<D0BA><C5A3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>
|
||||
uint16_t GetValidFolderNum(FS_CONTEXT* FsContext, uint16_t OriginalFolderNum);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD>ļ<EFBFBD><C4BC>кţ<D0BA><C5A3>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ԭʼ<D4AD>ļ<EFBFBD><C4BC>кš<D0BA>
|
||||
uint16_t GetOriginalFolderNum(FS_CONTEXT* FsContext, uint16_t ValidFolderNum);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||||
//uint16_t GetValidFolderSum();
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD>ѳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>
|
||||
DEV_ID GetCurFsDevType(void);
|
||||
|
||||
// <20><>ȡFSɨ<53><C9A8><EFBFBD><EFBFBD><EFBFBD>벥<EFBFBD><EBB2A5>ģʽ<C4A3>ϵ<EFBFBD><CFB5><EFBFBD>Ϣ<EFBFBD><CFA2>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ID<49><44>
|
||||
#ifdef FUNC_MATCH_PLAYER_BP
|
||||
typedef struct __PLAYER_BP_RET_
|
||||
{
|
||||
int8_t BPIndex; // <20><>ƥ<EFBFBD><C6A5><EFBFBD>IJ<EFBFBD><C4B2>Ŷϵ<C5B6><CFB5><EFBFBD><EFBFBD><EFBFBD>(0~2), -1 -- not found
|
||||
uint16_t FileId; // <20><><EFBFBD>Ŷϵ<C5B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ID
|
||||
uint16_t FolderId; // <20><><EFBFBD>Ŷϵ<C5B6><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ID
|
||||
} PLAYER_BP_RET;
|
||||
|
||||
typedef struct _PLAYER_BP_INFO_ // <20><><EFBFBD><EFBFBD>ģʽ <20>ϵ<EFBFBD><CFB5><EFBFBD>Ϣ
|
||||
{
|
||||
uint32_t FileAddr;
|
||||
uint8_t CRC8;
|
||||
} PLAYER_BP_INFO;
|
||||
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>Ŷϵ<C5B6>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>FS<46><53>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PLAYER_BP_RET* GetMatchPlayerBPRet(void);
|
||||
void SetMatchPlayerBPRet(int8_t BPIndex, uint16_t FileId, uint16_t FolderId);
|
||||
|
||||
#endif
|
||||
|
||||
const unsigned char *GetLibVersionFs(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef __FSMOUNT_BUFFERMANAGER_H__
|
||||
#define __FSMOUNT_BUFFERMANAGER_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
#include "fs_config.h"
|
||||
#include "fsinfo.h"
|
||||
//
|
||||
//<2F><>ҪĿ<D2AA><C4BF>Ϊʵ<CEAA>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5>ռ<EFBFBD>
|
||||
//
|
||||
|
||||
typedef struct _FSCONTEXT_BUFFER //Fs buffer
|
||||
{
|
||||
FS_CONTEXT FSContext[MAX_FS_CONTEXT_COUNT];
|
||||
uint8_t DeviceID[MAX_FS_CONTEXT_COUNT];
|
||||
} FSCONTEXT_BUFFER;
|
||||
|
||||
typedef struct _FSCONTEXT_BUFFER_MANAGER //Fs context buffer manager
|
||||
{
|
||||
|
||||
FSCONTEXT_BUFFER FSContextBuffer;
|
||||
//
|
||||
//A pointer to the function to alloc a buffer.
|
||||
//
|
||||
FS_CONTEXT* (*pfnAllocFSContextBuffer)(FSCONTEXT_BUFFER* FSContextBufferp, uint8_t DeviceID);
|
||||
|
||||
//
|
||||
//A pointer to the function to free a buffer.
|
||||
//
|
||||
bool (*pfnFreeFSContextBuffer)(FSCONTEXT_BUFFER* FSContextBufferp, uint8_t DeviceID);
|
||||
|
||||
|
||||
} FSCONTEXT_BUFFER_MANAGER;
|
||||
|
||||
extern FSCONTEXT_BUFFER_MANAGER gFSContextBufferManager;
|
||||
|
||||
extern FS_CONTEXT* FSContextBufferAlloc(FSCONTEXT_BUFFER* FSContextBufferp, uint8_t DeviceID);
|
||||
|
||||
extern bool FSContextBufferFree(FSCONTEXT_BUFFER* FSContextBufferp, uint8_t DeviceID);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif //_FSMOUNT_BUFFERMANAGER_H_
|
||||
15
mico-os/platform/MCU/MX1101/FileSystem/inc/partition.h
Normal file
15
mico-os/platform/MCU/MX1101/FileSystem/inc/partition.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef __PARTITION_H__
|
||||
#define __PARTITION_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
|
||||
bool PartitionLoad(FS_CONTEXT* FsContext, uint8_t DrverId);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif
|
||||
20
mico-os/platform/MCU/MX1101/FileSystem/inc/presearch.h
Normal file
20
mico-os/platform/MCU/MX1101/FileSystem/inc/presearch.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef __PRESEARCH_H__
|
||||
#define __PRESEARCH_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif//__cplusplus
|
||||
|
||||
|
||||
|
||||
bool FSInit(uint8_t DeviceID);
|
||||
|
||||
bool FSDeInit(uint8_t DeviceID);
|
||||
|
||||
extern bool IsFsInited(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif//__cplusplus
|
||||
|
||||
#endif
|
||||
286
mico-os/platform/MCU/MX1101/FileSystem/partition.c
Normal file
286
mico-os/platform/MCU/MX1101/FileSystem/partition.c
Normal file
@@ -0,0 +1,286 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:partition.c
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//#include "app_config.h"
|
||||
#include "fs_config.h"
|
||||
#include "folder.h"
|
||||
#include "fat_file.h"
|
||||
#include "fsinfo.h"
|
||||
#include "diskio.h"
|
||||
#include "presearch.h"
|
||||
#include "host_stor.h"
|
||||
#include "Debug.h"
|
||||
|
||||
#define SIGNATURE_OFFSET 0x01fe // will contain 0x55AA
|
||||
#define PARTITION_OFFSET 0x01be // will contain partition table
|
||||
|
||||
#define COMMON_SIGNATURE 0xAA55
|
||||
|
||||
#define FS_DBG(M, ...)
|
||||
|
||||
//define partition structure
|
||||
#pragma pack(1)
|
||||
typedef struct _PARTITION // Partition Entries definition
|
||||
{
|
||||
uint8_t Active;
|
||||
uint8_t StartHead;
|
||||
uint8_t StartSector;
|
||||
uint8_t StartCylinder;
|
||||
uint8_t PartitionType;
|
||||
uint8_t EndHead;
|
||||
uint8_t EndSector;
|
||||
uint8_t EndCylinder;
|
||||
uint32_t FirstSectorNum;
|
||||
uint32_t SectorCount;
|
||||
|
||||
} PARTITION;
|
||||
#pragma pack()
|
||||
|
||||
|
||||
//define BPB structe
|
||||
#pragma pack(1)
|
||||
typedef struct
|
||||
{
|
||||
uint8_t BS_jmpBoot[3]; // 0-2
|
||||
uint8_t BS_OEMName[8]; // 3-10
|
||||
uint16_t BPB_BytsPerSec; // 11-12
|
||||
uint8_t BPB_SecPerClus; // 13
|
||||
uint16_t BPB_RsvdSecCnt; // 14-15
|
||||
uint8_t BPB_NumFATs; // 16
|
||||
uint16_t BPB_RootEntCnt; // 17-18
|
||||
uint16_t BPB_TotSec16; // 19-20
|
||||
uint8_t BPB_Media; // 21
|
||||
uint16_t BPB_FATSz16; // 22-23
|
||||
uint16_t BPB_SecPerTrk; // 24-25
|
||||
uint16_t BPB_NumHeads; // 26-27
|
||||
uint32_t BPB_HiddSec; // 28-31
|
||||
uint32_t BPB_TotSec32; // 32-35
|
||||
uint32_t BPB_FATSz32; // 36-39
|
||||
uint16_t BPB_ExtFlags; // 40-41
|
||||
uint16_t BPB_FSVer; // 42-43
|
||||
uint32_t BPB_RootClus; // 44-47
|
||||
uint16_t BPB_FSInfo; // 48-49
|
||||
uint16_t BPB_BkBootSec; // 50-51
|
||||
|
||||
} BOOT_SECTOR;
|
||||
#pragma pack()
|
||||
|
||||
#define CANCEL_COMMON_SIGNATURE_JUDGMENT
|
||||
// Load partition information from storage device.
|
||||
bool PartitionLoad(FS_CONTEXT* FsContext, uint8_t DriverId)
|
||||
{
|
||||
uint32_t RootDirSectors;
|
||||
uint32_t BootSecNum = 0;
|
||||
uint32_t FatSize;
|
||||
uint32_t TotalSectors;
|
||||
uint8_t IndexPtb;
|
||||
uint8_t SectorSizeMul;
|
||||
uint32_t temp2;
|
||||
uint8_t ExtBootEntry = 0;
|
||||
uint16_t BPBRsvSectCnt;
|
||||
uint8_t LogicDriverId = 1;
|
||||
uint8_t LoopFlag = 0;
|
||||
|
||||
#ifdef FUNC_USB_EN
|
||||
if(FsContext->gFsInfo.DevID == DEV_ID_USB)
|
||||
{
|
||||
SectorSizeMul = (HostStorGetBlockSize() / SECTOR_SIZE);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
SectorSizeMul = 1;
|
||||
}
|
||||
// FS_DBG("SectorSizeMul: %d\n", (uint16_t)SectorSizeMul);
|
||||
|
||||
while(1)
|
||||
{
|
||||
LoopFlag = 0;
|
||||
//read MBR
|
||||
//if(!ReadBlock(BootSecNum, (uint8_t*)(FsContext->FAT_BUFFER), 1))
|
||||
if(RES_OK != disk_read(FsContext->gFsInfo.DevID, (uint8_t*)(FsContext->FAT_BUFFER), BootSecNum, 1))
|
||||
{
|
||||
FS_DBG("ReadBlock() error!\n");
|
||||
return FALSE;
|
||||
}
|
||||
FsContext->gFsInfo.CurrFATSecNum = BootSecNum;
|
||||
#ifndef CANCEL_COMMON_SIGNATURE_JUDGMENT
|
||||
if(*(uint16_t*)((FsContext->FAT_BUFFER) + SIGNATURE_OFFSET) != COMMON_SIGNATURE) //if 0x55aa
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
for(IndexPtb = 0; IndexPtb < 4; IndexPtb++)
|
||||
{
|
||||
PARTITION* pPart = &((PARTITION*)((FsContext->FAT_BUFFER) + PARTITION_OFFSET))[IndexPtb];
|
||||
|
||||
if((pPart->PartitionType == 0x05) //Extended partition
|
||||
&& ((ExtBootEntry == 0) || (IndexPtb >= ExtBootEntry)))
|
||||
{
|
||||
BootSecNum += Le32ToCpu(pPart->FirstSectorNum);
|
||||
ExtBootEntry = IndexPtb + 1;
|
||||
// FS_DBG("Extended partition bootSecNum:%ld\n", (uint32_t)BootSecNum);
|
||||
LoopFlag = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//check the partition type and get the boot sector num
|
||||
if(pPart->PartitionType == 0x04
|
||||
|| pPart->PartitionType == 0x06
|
||||
|| pPart->PartitionType == 0x0B
|
||||
|| pPart->PartitionType == 0x0C
|
||||
|| pPart->PartitionType == 0x01
|
||||
|| pPart->PartitionType == 0x0E)
|
||||
{
|
||||
if(DriverId <= 1 || LogicDriverId == DriverId)
|
||||
{
|
||||
BootSecNum += Le32ToCpu(pPart->FirstSectorNum);
|
||||
break;
|
||||
}
|
||||
LogicDriverId++;
|
||||
}
|
||||
}
|
||||
if(LoopFlag)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if((IndexPtb == 4) && ((ExtBootEntry > 0) && (ExtBootEntry < 4)))
|
||||
{
|
||||
//if extended parttion failed,try again.
|
||||
BootSecNum = 0;
|
||||
continue;//<2F><><EFBFBD>ӶԵ<D3B6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><E8B1B8>֧<EFBFBD><D6A7>
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if((DriverId > 1) && (LogicDriverId != DriverId))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//read DBR
|
||||
//if(!ReadBlock((BootSecNum * SectorSizeMul), (uint8_t*)(FsContext->FAT_BUFFER), 1))
|
||||
if(RES_OK != disk_read(FsContext->gFsInfo.DevID, (uint8_t*)(FsContext->FAT_BUFFER), (BootSecNum * SectorSizeMul), 1))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
FsContext->gFsInfo.CurrFATSecNum = (BootSecNum * SectorSizeMul);
|
||||
#ifndef CANCEL_COMMON_SIGNATURE_JUDGMENT
|
||||
if(*(uint16_t*)((FsContext->FAT_BUFFER) + SIGNATURE_OFFSET) != COMMON_SIGNATURE) //if 0x55aa
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
#define pzero_sector ((BOOT_SECTOR*)((FsContext->FAT_BUFFER)))
|
||||
|
||||
//updata device information
|
||||
FsContext->gFsInfo.ClusterSize = pzero_sector->BPB_SecPerClus;
|
||||
|
||||
//get first sector of FAT
|
||||
BPBRsvSectCnt = Le16ToCpu(pzero_sector->BPB_RsvdSecCnt);
|
||||
FsContext->gFsInfo.FatStart = BPBRsvSectCnt + BootSecNum;
|
||||
|
||||
//get sectors of boot dir
|
||||
if(pzero_sector->BPB_RootEntCnt != 0)
|
||||
{
|
||||
RootDirSectors = (Le16ToCpu(pzero_sector->BPB_RootEntCnt) * 32 + SECTOR_SIZE - 1) / SECTOR_SIZE;
|
||||
}
|
||||
else
|
||||
{
|
||||
RootDirSectors = 0;
|
||||
}
|
||||
|
||||
//get FAT size
|
||||
if(pzero_sector->BPB_FATSz16 != 0)
|
||||
{
|
||||
FatSize = Le16ToCpu(pzero_sector->BPB_FATSz16);
|
||||
}
|
||||
else
|
||||
{
|
||||
FatSize = Le32ToCpu(pzero_sector->BPB_FATSz32);
|
||||
}
|
||||
|
||||
//get total cluster
|
||||
if(pzero_sector->BPB_TotSec16 != 0)
|
||||
{
|
||||
TotalSectors = Le16ToCpu(pzero_sector->BPB_TotSec16);
|
||||
}
|
||||
else
|
||||
{
|
||||
TotalSectors = Le32ToCpu(pzero_sector->BPB_TotSec32);
|
||||
}
|
||||
|
||||
temp2 = (TotalSectors - (BPBRsvSectCnt + FatSize * pzero_sector->BPB_NumFATs + RootDirSectors)) / FsContext->gFsInfo.ClusterSize;
|
||||
// FS_DBG("temp2:%ld\n", (uint32_t)temp2);
|
||||
|
||||
if(temp2 < 4085)
|
||||
{
|
||||
FS_DBG("FAT12\n");
|
||||
FsContext->gFsInfo.IsCpatFS = FALSE; //FAT12
|
||||
return TRUE;
|
||||
}
|
||||
else if(temp2 < 65525)
|
||||
{
|
||||
FS_DBG("FAT16\n");
|
||||
FsContext->gFsInfo.FAT32 = 0; //FAT16
|
||||
FsContext->gFsInfo.IsCpatFS = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
//FAT32<33>豸BPB_RootEntCnt/BPB_TotSec16/BPB_FATSz16<31><36>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>
|
||||
if(memcmp((uint8_t*)((FsContext->FAT_BUFFER) + 0x36), "FAT16\0\0\0", 8) == 0)
|
||||
{
|
||||
//<2F>ͻ<EFBFBD><CDBB><EFBFBD>һ<EFBFBD><D2BB>U<EFBFBD><55>(USB<53><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD>ó<EFBFBD><C3B3>Ĵ<EFBFBD><C4B4><EFBFBD>ĿӦ<C4BF><D3A6>ΪFAT32<33><32>ʵ<EFBFBD><CAB5>ΪFAT16ϵͳ<CFB5><CDB3>Ϊ֧<CEAA><D6A7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>
|
||||
FS_DBG("FAT16\n");
|
||||
FsContext->gFsInfo.FAT32 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
FS_DBG("FAT32\n");
|
||||
FsContext->gFsInfo.FAT32 = 1; //FAT32
|
||||
}
|
||||
FsContext->gFsInfo.IsCpatFS = TRUE;
|
||||
}
|
||||
|
||||
FsContext->gFsInfo.DataStart = FsContext->gFsInfo.FatStart + (FatSize * pzero_sector->BPB_NumFATs) + RootDirSectors; //the first sector of data
|
||||
// get max cluster number in this drive.
|
||||
//FsContext->gFsInfo.MaxCluster = ((TotalSectors - FsContext->gFsInfo.DataStart) / FsContext->gFsInfo.ClusterSize) + 2;
|
||||
FsContext->gFsInfo.MaxCluster = temp2 + 2;
|
||||
|
||||
//get the data start and boot dir start
|
||||
if(FsContext->gFsInfo.FAT32)
|
||||
{
|
||||
FsContext->gFsInfo.RootStart = FsContext->gFsInfo.DataStart + (Le32ToCpu(pzero_sector->BPB_RootClus) - 2) * FsContext->gFsInfo.ClusterSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
FsContext->gFsInfo.RootStart = FsContext->gFsInfo.FatStart + FatSize * pzero_sector->BPB_NumFATs; //FAT16 the first sector of root dir
|
||||
}
|
||||
|
||||
FsContext->gFsInfo.ClusterSize *= SectorSizeMul;
|
||||
// RootDirSectors *= SectorSizeMul;
|
||||
FsContext->gFsInfo.FatStart *= SectorSizeMul;
|
||||
FsContext->gFsInfo.DataStart *= SectorSizeMul;
|
||||
FsContext->gFsInfo.MaxSector = (BootSecNum + TotalSectors) * SectorSizeMul;
|
||||
FsContext->gFsInfo.RootStart *= SectorSizeMul;
|
||||
|
||||
|
||||
// FS_DBG("*************UDisk virtual params******************\n");
|
||||
// FS_DBG("ClusterSize:%ld\n", (uint32_t)FsContext->gFsInfo.ClusterSize);
|
||||
// FS_DBG("RootDirSectors:%ld\n", (uint32_t)RootDirSectors);
|
||||
// FS_DBG("FatStart:%ld\n", (uint32_t)FsContext->gFsInfo.FatStart);
|
||||
// FS_DBG("RootStart:%ld\n", (uint32_t)FsContext->gFsInfo.RootStart);
|
||||
// FS_DBG("DataStart:%ld\n", (uint32_t)FsContext->gFsInfo.DataStart);
|
||||
// FS_DBG("MaxCluster:%ld\n", (uint32_t)FsContext->gFsInfo.MaxCluster);
|
||||
// FS_DBG("*****************************************************\n\n");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
409
mico-os/platform/MCU/MX1101/FileSystem/presearch.c
Normal file
409
mico-os/platform/MCU/MX1101/FileSystem/presearch.c
Normal file
@@ -0,0 +1,409 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Mountain View Silicon Tech. Inc.
|
||||
// Copyright 2012, Mountain View Silicon Tech. Inc.,ShangHai,China
|
||||
// All rights reserved
|
||||
// Filename:presearch.c
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//#include "app_config.h"
|
||||
#include "dev_detect_driver.h"
|
||||
#include "fs_config.h"
|
||||
#include "folder.h"
|
||||
#include "fat_file.h"
|
||||
#include "fsinfo.h"
|
||||
#include "dir.h"
|
||||
#include "fsmount_buffermanager.h"
|
||||
#include "fs_mount.h"
|
||||
#include "fs_sync.h"
|
||||
#include "fs_filesort.h"
|
||||
#include "partition.h"
|
||||
#include "breakpoint.h"
|
||||
#include "Debug.h"
|
||||
|
||||
#define INDEPEND_FREERTOS
|
||||
|
||||
#ifndef INDEPEND_FREERTOS
|
||||
#include "os.h"
|
||||
#endif
|
||||
#define FUNC_SPI_UPDATE_EN
|
||||
|
||||
#ifdef FUNC_SPI_UPDATE_EN
|
||||
uint8_t UpgradeFileFound = 0xFF;
|
||||
#endif// FUNC_SPI_UPDATE_EN
|
||||
|
||||
static bool fs_inited_flag = 0;
|
||||
#ifndef INDEPEND_FREERTOS
|
||||
SEMAPHORE Sync; // Identifier of sync object
|
||||
#endif
|
||||
|
||||
#define FS_DBG(M, ...)
|
||||
|
||||
uint8_t FsSyncInit(void* FsContext)
|
||||
{
|
||||
#ifndef INDEPEND_FREERTOS
|
||||
if(FsContext)
|
||||
{
|
||||
SEMA_INIT(Sync, 1)
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void FsLock(void* FsContext)
|
||||
{
|
||||
#ifndef INDEPEND_FREERTOS
|
||||
if(FsContext)
|
||||
{
|
||||
OSDOWN(Sync);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void FsUnLock(void* FsContext)
|
||||
{
|
||||
#ifndef INDEPEND_FREERTOS
|
||||
if(FsContext)
|
||||
{
|
||||
OSUP(Sync);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//Ѱ<><D1B0><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
//
|
||||
void FindSpecialFileCallBack(FS_CONTEXT* FsContext)
|
||||
{
|
||||
#ifdef FUNC_SPI_UPDATE_EN //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ΪSPI FLASH<53><48><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>*.MVA
|
||||
//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
||||
if((FsContext->gFsInfo.FolderSum == 1) && (UpgradeFileFound != 1)) //ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(memcmp(FsContext->gCurrentEntry->ExtName, "MVA", 3) == 0)
|
||||
{
|
||||
UpgradeFileFound = 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊdemo,<2C>ɸġ<C9B8><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Callһ<6C><D2BB>
|
||||
#if 0 //demo
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ص<EFBFBD><D8B5>ļ<EFBFBD>Handle <20><><EFBFBD>趨<EFBFBD><E8B6A8>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>磺FAT_FILE SpecialFile<6C><65>
|
||||
if(FsContext->gFsInfo.FolderSum == 1) //ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(memcmp(FsContext->gCurrentEntry->ExtName, "XYZ", 3) == 0)
|
||||
{
|
||||
FileGetInfo(&SpecialFile); //<2F>ҵ<EFBFBD><D2B5>ض<EFBFBD><D8B6>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>SpecialFile<6C><65>Ϣ<EFBFBD><CFA2>
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
//<2F>ж<EFBFBD><D0B6>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8_t FileGetType(FS_CONTEXT* FsContext)
|
||||
{
|
||||
uint8_t ExtFileName[3];
|
||||
|
||||
ExtFileName[0] = FsContext->gCurrentEntry->ExtName[0];
|
||||
ExtFileName[1] = FsContext->gCurrentEntry->ExtName[1];
|
||||
ExtFileName[2] = FsContext->gCurrentEntry->ExtName[2];
|
||||
|
||||
|
||||
if((ExtFileName[0] == 'M') && (ExtFileName[1] == 'P') && (ExtFileName[2] == '3' || ExtFileName[2] == '2'))
|
||||
{
|
||||
return FILE_TYPE_MP3;
|
||||
}
|
||||
else if((ExtFileName[0] == 'W') && (ExtFileName[1] == 'M') && (ExtFileName[2] == 'A'))
|
||||
{
|
||||
return FILE_TYPE_WMA;
|
||||
}
|
||||
else if((ExtFileName[0] == 'A') && (ExtFileName[1] == 'S') && (ExtFileName[2] == 'F'))
|
||||
{
|
||||
return FILE_TYPE_WMA;
|
||||
}
|
||||
else if((ExtFileName[0] == 'W') && (ExtFileName[1] == 'M') && (ExtFileName[2] == 'V'))
|
||||
{
|
||||
return FILE_TYPE_WMA;
|
||||
}
|
||||
else if((ExtFileName[0] == 'A') && (ExtFileName[1] == 'S') && (ExtFileName[2] == 'X'))
|
||||
{
|
||||
return FILE_TYPE_WMA;
|
||||
}
|
||||
else if((ExtFileName[0] == 'W') && (ExtFileName[1] == 'A') && (ExtFileName[2] == 'V'))
|
||||
{
|
||||
return FILE_TYPE_WAV;
|
||||
}
|
||||
else if((ExtFileName[0] == 'S') && (ExtFileName[1] == 'B') && (ExtFileName[2] == 'C'))
|
||||
{
|
||||
return FILE_TYPE_SBC;
|
||||
}
|
||||
else if((ExtFileName[0] == 'F') && (ExtFileName[1] == 'L') && (ExtFileName[2] == 'A'))
|
||||
{
|
||||
return FILE_TYPE_FLAC;
|
||||
}
|
||||
else if(((ExtFileName[0] == 'A') && (ExtFileName[1] == 'A') && ExtFileName[2] == 'C')
|
||||
|| ((ExtFileName[0] == 'M') && (ExtFileName[1] == 'P') && ExtFileName[2] == '4')
|
||||
|| ((ExtFileName[0] == 'M') && (ExtFileName[1] == '4') && ExtFileName[2] == 'A'))
|
||||
{
|
||||
return FILE_TYPE_AAC;
|
||||
}
|
||||
else if((ExtFileName[0] == 'A') && (ExtFileName[1] == 'I') && (ExtFileName[2] == 'F'))
|
||||
{
|
||||
return FILE_TYPE_AIF;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FILE_TYPE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
// <20><>ȡFSɨ<53><C9A8><EFBFBD><EFBFBD><EFBFBD>벥<EFBFBD><EBB2A5>ģʽ<C4A3>ϵ<EFBFBD><CFB5><EFBFBD>Ϣ<EFBFBD><CFA2>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ID<49><44>
|
||||
#ifdef FUNC_MATCH_PLAYER_BP
|
||||
|
||||
static PLAYER_BP_RET sPlayerBPRet = {-1, 1, 1};
|
||||
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>Ŷϵ<C5B6>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>FS<46><53>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PLAYER_BP_RET* GetMatchPlayerBPRet(void)
|
||||
{
|
||||
return &sPlayerBPRet;
|
||||
}
|
||||
|
||||
void SetMatchPlayerBPRet(int8_t BPIndex, uint16_t FileId, uint16_t FolderId)
|
||||
{
|
||||
sPlayerBPRet.BPIndex = BPIndex;
|
||||
sPlayerBPRet.FileId = FileId;
|
||||
sPlayerBPRet.FolderId = FolderId;
|
||||
}
|
||||
|
||||
#endif
|
||||
//
|
||||
//ͳ<><CDB3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//
|
||||
bool PreSearch(FS_CONTEXT* FsContext)
|
||||
{
|
||||
ENTRY_TYPE EntryType;
|
||||
|
||||
#ifdef FUNC_MATCH_PLAYER_BP
|
||||
sPlayerBPRet.BPIndex = -1;
|
||||
#endif
|
||||
|
||||
FS_DBG("PreSearch start!\n");
|
||||
#ifdef FUNC_SPI_UPDATE_EN
|
||||
UpgradeFileFound = 0;
|
||||
#endif
|
||||
DirSetStartEntry(FsContext, FsContext->gFsInfo.RootStart, 0, TRUE);
|
||||
FSINFO_Init(FsContext);
|
||||
|
||||
FsContext->gFolderDirStart = FsContext->gFsInfo.RootStart;
|
||||
|
||||
while(1)
|
||||
{
|
||||
|
||||
EntryType = (ENTRY_TYPE)DirGetNextEntry(FsContext);
|
||||
|
||||
//FS_DBG("fcount:%d\n",++fcount);
|
||||
|
||||
if(FsContext->gEntryOffset == 0)
|
||||
{
|
||||
FSINFO_SaveFdi(FsContext);
|
||||
}
|
||||
|
||||
switch(EntryType)
|
||||
{
|
||||
case ENTRY_FILE: //<2F>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
|
||||
//FS_DBG("fcount:%d\n",++fcount);
|
||||
if(FileGetType(FsContext) != FILE_TYPE_UNKNOWN)
|
||||
{
|
||||
//FS_DBG("<22>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%-.8s%-.3s\n", &FsContext->gCurrentEntry->FileName[0], &FsContext->gCurrentEntry->FileName[8]);
|
||||
if(FsContext->gFsInfo.FileSum >= 65535)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
FsContext->gFsInfo.FileSum++;
|
||||
FsContext->gFsInfo.FileSumInFolder++;
|
||||
//FS_DBG("Find a audio file:%d!\n", fcount);
|
||||
#if FS_FILE_SORT_EN == 1
|
||||
FileSortSearchNewFile(FsContext);
|
||||
#endif
|
||||
}
|
||||
|
||||
FindSpecialFileCallBack(FsContext);
|
||||
|
||||
break;
|
||||
|
||||
case ENTRY_FOLDER: //<2F><><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3>´<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
FsContext->gFsInfo.FolderNumInFolder++;
|
||||
//FS_DBG("ENTRY_FOLDER: %d\n", FsContext->gFsInfo.FolderNumInFolder);
|
||||
break;
|
||||
|
||||
case ENTRY_END: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>¼<EFBFBD>IJ<EFBFBD><C4B2>ֽڵ<D6BD>
|
||||
FSINFO_ChangeFileNum(FsContext);
|
||||
//<2F><>¼<EFBFBD><C2BC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>е<EFBFBD><D0B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(FsContext->gFsInfo.FolderSum == 1)
|
||||
{
|
||||
FsContext->gFsInfo.RootFileSum = FsContext->gFsInfo.FileSum;
|
||||
}
|
||||
|
||||
//<2F>ص<EFBFBD><D8B5><EFBFBD>ǰ<EFBFBD>ļ<EFBFBD><C4BC>еĿ<D0B5>ͷλ<CDB7><CEBB>
|
||||
//FS_DBG("<22><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>λ<EFBFBD>ã<EFBFBD>\n");
|
||||
RewindFolderStart(FsContext);
|
||||
|
||||
//<2F>ӵ<EFBFBD>ǰλ<C7B0>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5><CDB3>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
if(!FindNextFolder(FsContext))
|
||||
{
|
||||
//FS_DBG("PreSearch end! %d ms \n", (uint16_t)PastTimeGet(&Timer));
|
||||
#if FS_FILE_SORT_EN == 1
|
||||
FileSortSearchEnd(FsContext);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC>гɹ<D0B3>
|
||||
{
|
||||
//FS_DBG("Into Next Folder%8s\n", &FsContext->gCurrentEntry->FileName[0]);
|
||||
if(FsContext->gFsInfo.FolderSum >= 65535)
|
||||
{
|
||||
#if FS_FILE_SORT_EN == 1
|
||||
FileSortSearchEnd(FsContext);
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
FsContext->gFsInfo.FolderSum++;
|
||||
FsContext->gFsInfo.FolderNumInFolder = 0;
|
||||
FsContext->gFsInfo.FileSumInFolder = 0;
|
||||
if(!DirEnterSonFolder(FsContext))
|
||||
{
|
||||
//FS_DBG("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>\n");
|
||||
FsContext->gFsInfo.FolderSum--;
|
||||
}
|
||||
//FS_DBG("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>гɹ<D0B3><C9B9><EFBFBD>\n");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
//<2F>ļ<EFBFBD>ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>ļ<EFBFBD>ϵͳ<CFB5>й<EFBFBD><D0B9><EFBFBD>Ϣ.
|
||||
//
|
||||
bool FSInit(uint8_t DeviceID)
|
||||
{
|
||||
|
||||
//get fs memory
|
||||
FS_CONTEXT* Fs_Context;
|
||||
|
||||
Fs_Context = gFSContextBufferManager.pfnAllocFSContextBuffer(&gFSContextBufferManager.FSContextBuffer, DeviceID);
|
||||
|
||||
if(Fs_Context == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ENTER_FAT(Fs_Context);
|
||||
|
||||
if(!CheckAllDiskLinkFlag())
|
||||
{
|
||||
FS_DBG("disk not ready!\n");
|
||||
LEAVE_FAT(Fs_Context, FALSE);
|
||||
}
|
||||
|
||||
if(Fs_Context->gPreSearchStatus != PRESEARCH_STATUS_NONE)
|
||||
{
|
||||
FS_DBG("Mount Already\n");
|
||||
LEAVE_FAT(Fs_Context, TRUE);
|
||||
}
|
||||
|
||||
Fs_Context->gPreSearchStatus = PRESEARCH_STATUS_SEARCHING;
|
||||
|
||||
if(Fs_Context == 0 || FsGetAvailableLogicId() < 0)
|
||||
{
|
||||
LEAVE_FAT(Fs_Context, FALSE);
|
||||
}
|
||||
|
||||
//mount fs
|
||||
FsMount(FsGetAvailableLogicId(), Fs_Context);
|
||||
|
||||
FsGetCurContext()->gFsInfo.DevID = (DEV_ID)DeviceID;
|
||||
FsGetCurContext()->gFsInfo.CurrFATSecNum = -1;
|
||||
//FsGetCurContext()->gFsInfo.CurrDirSecNum = -1;
|
||||
FsGetCurContext()->gCurFreeClusNum = 2;
|
||||
|
||||
|
||||
if(!PartitionLoad(FsGetCurContext(), 0))
|
||||
{
|
||||
FS_DBG("PartitionLoad() error!\n");
|
||||
//return FALSE;
|
||||
FsMount(FsGetLogicIdByDeviceType(DeviceID), 0);
|
||||
gFSContextBufferManager.pfnFreeFSContextBuffer(&gFSContextBufferManager.FSContextBuffer, DeviceID);
|
||||
Fs_Context->gPreSearchStatus = PRESEARCH_STATUS_NONE;
|
||||
LEAVE_FAT(Fs_Context, FALSE);
|
||||
}
|
||||
FS_DBG("PartitionLoad() OK!\n");
|
||||
|
||||
// {
|
||||
// if(!PreSearch(FsGetCurContext()))
|
||||
// {
|
||||
// FS_DBG("PreSearch() error!\n");
|
||||
// //return FALSE;
|
||||
// LEAVE_FAT(Fs_Context, FALSE);
|
||||
// }
|
||||
// //end = OSSysTickGet();
|
||||
// //FS_DBG("PreSearch() End:%d\n", end - begin);
|
||||
// }
|
||||
|
||||
// Fs_Context->gPreSearchStatus = PRESEARCH_STATUS_SEARCHED;
|
||||
|
||||
// FS_DBG("PreSearch() OK\n");
|
||||
|
||||
|
||||
// FS_DBG("Song sum in disk: %d\n", FsGetCurContext()->gFsInfo.FileSum);
|
||||
// FS_DBG("Folder sum in disk: %d\n", FsGetCurContext()->gFsInfo.FolderSum);
|
||||
// FS_DBG("Valid folder sum in disk: %d\n", FsGetCurContext()->gFsInfo.ValidFolderSum);
|
||||
// FS_DBG("***********************************************\n");
|
||||
// FS_DBG("\n");
|
||||
|
||||
//return TRUE;
|
||||
LEAVE_FAT(Fs_Context, TRUE);
|
||||
|
||||
// fs_inited_flag = TRUE;
|
||||
}
|
||||
|
||||
//
|
||||
//<2F>ļ<EFBFBD>ϵͳȥ<CDB3><C8A5>ʼ<EFBFBD><CABC>
|
||||
//
|
||||
bool FSDeInit(uint8_t DeviceID)
|
||||
{
|
||||
bool res = FALSE;
|
||||
|
||||
int8_t LogicId = FsGetLogicIdByDeviceType(DeviceID);
|
||||
|
||||
FS_CONTEXT* Fs_Context = FsGetContextByDeviceType(DeviceID);
|
||||
|
||||
#ifdef FUNC_MATCH_PLAYER_BP
|
||||
// sPlayerBPRet.BPIndex = -1;
|
||||
#endif
|
||||
|
||||
ENTER_FAT(Fs_Context);
|
||||
if(LogicId >= 0)
|
||||
{
|
||||
FsMount(LogicId, 0);
|
||||
|
||||
res = gFSContextBufferManager.pfnFreeFSContextBuffer(&gFSContextBufferManager.FSContextBuffer, DeviceID);
|
||||
}
|
||||
//return res;
|
||||
LEAVE_FAT(Fs_Context, res);
|
||||
|
||||
// fs_inited_flag = FALSE;
|
||||
}
|
||||
|
||||
bool IsFsInited(void)
|
||||
{
|
||||
return fs_inited_flag;
|
||||
}
|
||||
Reference in New Issue
Block a user