| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*****************************************************************************
- FileSys.c
- *****************************************************************************/
- //#define THIS_FILE_ID 20
- /* Includes ------------------------------------------------------------------*/
- #include "includes.h"
- SUT_FILE_LIST g_sutFilesList;
- /*****************************************************************
- FileSysReadIndex
- ******************************************************************/
- void FileSysReadIndex(void)
- {
- uint8_t *pBuf;
- pBuf=(uint8_t *)&g_sutFilesList;
- sFlash_Read(pBuf,FILE_INDEX_ADDR,sizeof(SUT_FILE_LIST));
- }
- /******************************************************************
- FileSysSaveIndex
- *******************************************************************/
- void FileSysSaveIndex(void)
- {
- uint8_t *pBuf;
- pBuf=(uint8_t *)&g_sutFilesList;
- sFlash_Write(pBuf,FILE_INDEX_ADDR,sizeof(SUT_FILE_LIST));
- }
- /******************************************************************
- FileSysInit
- 检查是否需要格式化,需要则格式化之,否则不格式化
- return:
- 1--format
- 0--no format
- *******************************************************************/
- int FileSysInit()
- {
- FileSysReadIndex();//读索引
- if(g_sutFilesList.Mark!=STORAGE_MARK){//需要格式化
- memset(&g_sutFilesList,0,sizeof(SUT_FILE_LIST));
- g_sutFilesList.Mark=STORAGE_MARK;
- FileSysSaveIndex();
- return 1;
- }else{//不需要格式化
- return 0;
- }
- }
- /**********************************************************************
- *检查文件MD5是否正确
- 正确 -- return 1
- 失败 -- return 0
- ***********************************************************************/
- int FileCheckMD5(int FileIndex)
- {
- MD5_CTX mdContext;
- unsigned char data[1024];
- int i;
- uint32_t FileLen;
- uint32_t FileAddr;
- uint32_t Addr,len;
-
- FileLen=g_sutFilesList.FileInfo[FileIndex].FileLen;
- FileAddr=g_sutFilesList.FileInfo[FileIndex].FileAddr;
- //读取文件数据并计算MD5
- Addr=FileAddr;
- len=FileLen;
- MD5Init(&mdContext);//初始化MD5
- while(len){
- if(len>1024){
- sFlash_Read(data,Addr,1024);
- MD5Update(&mdContext,data,1024);
- Addr+=1024;
- len-=1024;
- }else{
- sFlash_Read(data,Addr,len);
- MD5Update(&mdContext,data,len);
- len=0;
- }
- }
- MD5Final(&mdContext);
-
- //比较文件数据的MD5计数值是否与文件信息头的MD5相同
- for(i=0;i<16;i++){
- if(g_sutFilesList.FileInfo[FileIndex].FileMD5[i]!=mdContext.digest[i])return 0;
- }
- return 1;
- }
|