#ifndef __IAP_H__
#define __IAP_H__

#include "main.h"
#include "string.h"
#include "stdio.h"
#include "usart.h"

typedef  void (*iapfun)(void);				//定义一个函数类型的参数.

#define FLASH_APP1_ADDR		0x08010000  	//第一个应用程序起始地址(存放在FLASH)
											//保留0X08000000~0X0800FFFF的空间为IAP使用
/* 启动选项 */
#define Startup_Normal 	0xFFFFFFFF	///< 正常启动   跳转到APP1
#define Startup_Update 	0xAAAAAAAA	///< 升级再启动 
#define Startup_Reset  	0x5555AAAA	///< ***恢复出厂 目前没使用***
#define Startup_APP2  	0x5555BBBB	///< ***跳转到APP2***
#define StartBytes_IAP   ((uint32_t)0xA55A55AA) //远程升级的起始字节
#define EndBytes_IAP     ((uint32_t)0x5AA5AA55) //远程升级的结束字节





void Process_CMD_IAP_Update(void);
void Set_Update_Down(void);
void Res_Update_Down(void);
void Start_BootLoader(void);
void Set_App2_Flag(void);
void iap_load_app(uint32_t appxaddr);			//执行flash里面的app程序

void iap_write_appbin(uint32_t appxaddr,uint8_t *appbuf,uint32_t applen);	//在指定地址开始,写入bin

#endif
