
#ifndef __STAPP_H__
#define	__STAPP_H__

#include "config.h"

//-----------------------------------------------------

#define APP_SAVE_NONE			0
#define	APP_SAVE_NORFLASH		1	// 外部norflash中
#define	APP_SAVE_EXRAM			2	// 外部RAM中
#define	APP_SAVE_INFLASH		3	// 直接在FLASH区域中(Cortex-M4处理器禁止使用该方式)

#ifndef APP_SAVE_TO
#define	APP_SAVE_TO		APP_SAVE_NONE		//
#endif

//-----------------------------------------------------

// 升级文件头
typedef struct
{
// 0x00
	char fileName[32];		// 文件名称
// 0x20
	u32 dataSize;			// 数据字节数
	u32	dataChecksum;		// 数据累加校验和

// 0x28
	u8	reserved1[0x30-0x28];	// 保留区1

// 0x30
	u8	reserved2[0x64-0x30];	// 保留区2

// 0x64
	u8	reserved3[0x80-0x64];	// 保留区3

// 0x80
	u8	reserved4[0x100-0x80];	// 保留区4
}__attribute__ ((packed)) AppFileHead;


// 数据文件控制结构
typedef struct
{
	int enflag;				// 文件有效标志
	AppFileHead fileHead;	// 升级文件头描述

	u8 pAppBuff[1024];		// 升级数据存储地址

}AppFileCtrl;

//-----------------------------------------------------

#ifdef _IN_STAPP_C
AppFileCtrl g_appFile;
#else
extern AppFileCtrl g_appFile;
#endif

//-----------------------------------------------------

// 支持的数据包长度
#define	SUPPORT_LEN_1		128		// for xmodem
#define	SUPPORT_LEN_2		1024	// for xmodem or ethernet

void InitSaveApp(void);
int SaveAppData(int idx, u8 * pBuf, int len, u32 ofst);
int IsAppReceiveDone(void);
int IsSaveDataCorrect(void);
void StartAppUpdate(int reboot);
u32 GetAppSaveDataCrc(u32 addr, u32 size);

//-----------------------------------------------------

#endif
