/*============================================================================
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name: HZKUpdate.c
Abstract: Module related to main routine
Environment: Keil C51 Compiler
Revision History: 11/13/2002 XYQ created
=============================================================================*/
#include "general.h"
#include "main.h"
#include "uiflow.h"
#include "dosvar.h"
#include "cardlink.h"
#include "smcfunc.h"
#include "smc2func.h"
#include "smcvar.h"
//#include "LCD501.h"
//#include "SPLC501.h"
#include "dosusr2.h"
#include "storage.h"
#include "LCD501.h"
#include "SPLC501.h"
#include "HZKUpdate.h"
#include "lrc.h"
#include "tea5767.h"
#include "tlv320.h"
void X_EXE_ISP();
//========================================================================================
unsigned int X_SetOnBoardFlash_Active()
{
unsigned char deviceCode;
//G_Card_Type = K_MEDIA_Nandf;
deviceCode = SMC_GetID();
if(deviceCode==0xf1 || deviceCode==0xda)
{
return (256);
}else{
return (32);
}
}
//========================================================================================
void X_Get_HZK_BlockAddress(unsigned long *Phyadd,unsigned long *FileSize_residue)
{
unsigned int FileSize_divisor;
*FileSize_residue=(*Phyadd)%G_NANDF_BlockSize;
FileSize_divisor=(*Phyadd)/G_NANDF_BlockSize;
*Phyadd= (unsigned long)G_SMC_ReservePhyBlkAddr[K_CopybookFontsBlockAddress+FileSize_divisor] * G_NANDF_BlockSize;
}
//========================================================================================
void X_ReadWrite_ReserveBLK(unsigned int SectorCount,bit ReadOrWrite,unsigned char BlockAddOffset)
{
unsigned long Data_PhyAdd;
unsigned long FileSize_residue;
unsigned int FileSize_divisor;
Data_PhyAdd=((unsigned long)SectorCount)<<9;
FileSize_residue=(Data_PhyAdd)%G_NANDF_BlockSize;
FileSize_divisor=(Data_PhyAdd)/G_NANDF_BlockSize;
Data_PhyAdd= (unsigned long)G_SMC_ReservePhyBlkAddr[BlockAddOffset+FileSize_divisor] * G_NANDF_BlockSize;
//X_Get_HZK_BlockAddress(&Data_PhyAdd,&FileSize_residue,BlockAddOffset);
if(!FileSize_residue && !ReadOrWrite)
{
SMC_EraseOneBlock(Data_PhyAdd);
}
if(ReadOrWrite)
{
SMC_Card2Sram(Data_PhyAdd+FileSize_residue);
}else{
//MAIN_WriteBlock(X_Union.Data_PhyAdd+FileSize_residue);
SMC_Sram2Card(Data_PhyAdd+FileSize_residue, 0);
}
}
//========================================================================================
void X_ReadWrite_HZK_ReserveBLK(unsigned int SectorCount,bit ReadOrWrite)
{
X_ReadWrite_ReserveBLK(SectorCount,ReadOrWrite,K_CopybookFontsBlockAddress);
}
//========================================================================================
void X_ReadWrite_ISP_ReserveBLK(unsigned int SectorCount,bit ReadOrWrite)
{
X_ReadWrite_ReserveBLK(SectorCount,ReadOrWrite,K_ISPTemporaryBlockAddress);
}
//========================================================================================
void X_ReadWrite_Logo_ReserveBLK(unsigned int SectorCount,bit ReadOrWrite)
{
X_ReadWrite_ReserveBLK(SectorCount,ReadOrWrite,K_ConfigurationBlockAddress);
}
//========================================================================================
void X_ReadWrite_PlayList_ReserveBLK(unsigned int SectorCount,bit ReadOrWrite,unsigned char BlockSel)
{
unsigned long Data_PhyAdd;
Data_PhyAdd= (unsigned long)G_SMC_ReservePhyBlkAddr[K_PlayListBlockAddress+BlockSel] * G_NANDF_BlockSize;
if(ReadOrWrite)
{
SMC_Card2Sram(Data_PhyAdd+(SectorCount<<9));
}else{
SMC_Sram2Card(Data_PhyAdd+(SectorCount<<9), 0);
}
}
void X_Erase_PlayList_ReserveBLK(unsigned char BlockSel)
{
unsigned long Data_PhyAdd;
Data_PhyAdd= (unsigned long)G_SMC_ReservePhyBlkAddr[K_PlayListBlockAddress+BlockSel] * G_NANDF_BlockSize;
SMC_EraseOneBlock(Data_PhyAdd);
}
//========================================================================================
unsigned char code SunplusSD[7]={'s','u','n','p','l','u','s'};
void X_MoveFiletoReserveBLK(unsigned char FileType)
{
unsigned long DataLogAddr;
unsigned int FileSectorNum,i,j;
unsigned char *fdb;
unsigned char CheckTimes;
unsigned int CheckSum,CheckSumCount;
unsigned int FileStartCluster;
//printf("search hzk file\n");
if (DOS_ReadSector(G_SearchFile[2].FDB_LogAdd/*Temp_SectorLogAdd*/)) //hxd030620 modify
{
//printf("search hzk file ok\n");
fdb = &G_ucStorData[G_SearchFile[2].FDB_Offset/*Temp_FdbOffset*/]; //find the currfdb addr
//get file startcluster
FileStartCluster=G_searchCluster = fdb[0x1a] | (USHORT)fdb[0x1b]<<8;
//the file length
G_DOS_FileSize = fdb[0x1c] | (ULONG)fdb[0x1d]<<8 | (ULONG)fdb[0x1e]<<16 | (ULONG)fdb[0x1f]<<24;
FileSectorNum=((G_DOS_FileSize-1)/512)+1;
//if(G_DOS_FileSize%512) FileSectorNum++;
/*{
unsigned char mm;
printf("\n");
for(mm=0;mm<32;mm++)
{
printf("%bx ",fdb[mm]);
}
printf("\n");
}*/
CheckSumCount=0;
for(CheckTimes=0;CheckTimes<2;CheckTimes++)
{
i=0;
G_searchCluster=FileStartCluster;
LCD501_Clear_ALL();
if(FileType==K_USR_HZKFile_TYPE)
{
LCD501_Disp_CheckSum(CheckTimes);
}else if(FileType==K_USR_ISPFile_TYPE)
{
LCD501_Disp_CheckSum(2+CheckTimes);
}else{
//LCD501_Disp_CheckSum(4+CheckTimes);
}
do
{
DataLogAddr = DOS_ClusterLogAddr(G_searchCluster) + (i*512)%G_DOS_ClusterSize;
DOS_ReadSector(DataLogAddr);
if(CheckTimes==0)
{
if(i==0)
{
unsigned char m;
for(m=0;m<7;m++)
{
if(G_ucStorData[m]!=SunplusSD[m])
{
//printf("not sunplus format hzk!\n");
return;
}
}
CheckSum=(((unsigned int)G_ucStorData[14])<<8)+G_ucStorData[15];
G_DOS_FileSize=G_DOS_FileSize-512;
}else{
for(j=0;j<512;j++)
{
if(G_DOS_FileSize)
{
CheckSumCount=CheckSumCount+G_ucStorData[j];
G_DOS_FileSize--;
}
}
//printf("%bx ",G_ucStorData[0]);
}
}else if(CheckTimes==1)
{
if(FileType==K_USR_HZKFile_TYPE)
{
X_ReadWrite_HZK_ReserveBLK(i,0);
}else if(FileType==K_USR_ISPFile_TYPE)
{
X_ReadWrite_ISP_ReserveBLK(i,0);//write
}else{
X_ReadWrite_Logo_ReserveBLK(i,0);
}
}
//X_ReadWrite_HZK_ReserveBLK(i,0,K_CopybookFontsBlockAddress);
i++;
if(!((i*512)%G_DOS_ClusterSize))
{
G_searchCluster=DOS_GetNextCluster(G_searchCluster);
if(G_searchCluster==0) break;
}
}while(i<FileSectorNum);
if(CheckSum!=CheckSumCount)
{
//printf("CheckSum error!");
return;
}
}
#if 1
//printf("del search hzk file\n");
if (DOS_ReadSector(G_SearchFile[2].FDB_LogAdd/*Temp_SectorLogAdd*/))
{
//G_DOS_CurrDirCluster=GS_StartCluster;
DOS_DeleteFile(G_ucStorData, G_SearchFile[2].FDB_Offset/*Temp_FdbOffset*/, G_SearchFile[2].FDB_LogAdd/*Temp_SectorLogAdd*/);
}
//printf("HZK file delete...!\n");
if(FileType==K_USR_ISPFile_TYPE)
{
//printf("Start ISP!\n");
LCD501_Clear_ALL();
X_EXE_ISP();
//printf("ISP complete!\n");
}
#endif
}
}
//====================================================================================
void X_MoveHZKtoReserveBLK()
{
X_MoveFiletoReserveBLK(K_USR_HZKFile_TYPE);
}
//====================================================================================
void X_UpdateFirmware()
{
X_MoveFiletoReserveBLK(K_USR_ISPFile_TYPE);
}
//====================================================================================
/*
void X_UpdateCompanyLogo()
{
X_MoveFiletoReserveBLK(K_USR_LOGOFile_TYPE);
X_Store_UserSettings();
}
*/
//====================================================================================
void X_EXE_ISP()
{
unsigned int data i;
for(i=1;i<5;i++)
{
HZK.rar_16x16_16x16字库_16x16汉字字库_16x16汉字库_汉字库
版权申诉
110 浏览量
2022-09-24
02:04:00
上传
评论
收藏 5KB RAR 举报
小贝德罗
- 粉丝: 69
- 资源: 1万+
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈