修改了Web后台的部分界面,增加了HAmqtt中的总电量传感器,后台新增mqtt上报频率设置

This commit is contained in:
OOP
2025-03-03 21:49:41 +08:00
parent e1e00b60ce
commit 9f9d4c7a56
4468 changed files with 1473046 additions and 10728 deletions

View 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;
}