#ifndef SYSTEM_UPDATA_H__ #define SYSTEM_UPDATA_H__ #include "main.h" //定义文件升级时缓存区大小 #define UPDATA_BUFF_SIZE 4096 // 发送文件时单包数据最大尺寸 #define SEND_FILE_PACK_MAXSIZE 100 //定义下载数据结构体 typedef struct { int step; char name[256]; u32 dataLen; u32 saveAddr; int packet_all; int packet_now; u8 dataBuff[UPDATA_BUFF_SIZE]; int buffUsed; }SysFile_UpdataStruct; // 定义发送数据的结构体 typedef struct { char *name; char *path; int packet_all; int packet_now; int file_size; int size_left; int (*send_data)(void *data,int len);// 发送函数,返回0成功 int (*progress)(int now,int all);// 反馈进度的函数 }SysFile_SendStruct; //读取一个文件 u8 *SysFile_GetFileByName (char *name,u32 *size); //通过SD卡进行系统文件升级 void SysFile_Updata(char *FileName,char *FilePath); //通过协议进行系统文件升级 void SysFile_UpdataByCom (void); //通过USB进行系统文件升级,在中断中调用这个函数 void SysFile_UpdataByIrq (u8 *data,int len); // 初始化 int SysFile_SendFileInit(SysFile_SendStruct *send,char *name,char *path, int (*send_data)(void *data,int len),int (*progress)(int now,int all)); // 发送文件名,返回0成功 int SysFile_SendFileName(SysFile_SendStruct *send); // 发送文件尺寸,返回0成功 int SysFile_SendFileInfo(SysFile_SendStruct *send); // 发送文件数据,返回0成功 int SysFile_SendFileData(SysFile_SendStruct *send); // 打包,成功返回0 int SysFile_PackData(u8 *out,u8 *in,int in_size); #endif