#ifndef __IAP_H__
#define __IAP_H__
#include "sys.h"  
#include "stmflash.h"
#include "CommandsDefine.h"
//////////////////////////////////////////////////////////////////////////////////	 
// 			2023/8/X GHz_ljw
//////////////////////////////////////////////////////////////////////////////////      
typedef  void (*iapfun)(void);				//定义一个函数类型的参数.  
#define FLASH_APP_STATE_OK 0xABCD1234 //32位标志


#define FLASH_BOOT_ADDR		ADDR_FLASH_SECTOR_0 // 0x08000000  	//Boot起始地址(存放在FLASH)
#define FLASH_ADDR_BOOTWRITE_INFO_START ADDR_FLASH_SECTOR_4// 0x08010000   include app_state,hardware_version,see struct BootWriteFlashInfoStruct
#define FLASH_ADDR_APP		ADDR_FLASH_SECTOR_5 //0x08020000  	//第一个应用程序起始地址(存放在FLASH)
#define FLASH_ADDR_UPDATE_TEMP_AREA ADDR_FLASH_SECTOR_10 //0x080C0000
											//保留Bootloader使用(共128KB)	   
												
extern void iap_load_app(u32 appxaddr);			//跳转到APP程序执行
extern void iap_write_appbin_at_tempArea(u32 receivedBytes,u8 *appbuf,u32 appsize);	//在指定地址开始,写入bin
extern void iap_write_bootbin(u32 receivedBytes,u8 *appbuf,u32 appsize);

struct BootWriteFlashInfoStruct
{
	VersionInfo BootVersion;
	u32 App_State;
	u32 HardVersion;
	u8  UpdateTimeStamp[16];
	u32 Reserved1;
  u32 reserved2;	
};

extern int iap_check_appstate(void);	//检查固件有效性
extern void iap_clear_appstate(void);	//清除固件有效标志
extern void iap_set_appstate(void);	//设置固件有效标志

extern void iap_ReadBootWriteInfo(struct BootWriteFlashInfoStruct * info);
extern void iap_UpdateBootWriteInfo(struct BootWriteFlashInfoStruct * info);
extern void iap_WriteBootVersionInfo(void);
#endif







































