#include "iap.h"
#include "CommandsDefine.h"
#include "ProjectConfig.h"
#include "usart.h"
#include "string.h"
#include "Helper.h"
/* 进行更新，传送更新代码
  正确的响应：烧写传过来的代码
	发送格式:
  包起始标识
	+CMD0x06_Request_UpdateSend
	+[2字节的数据长度，=200或最后一帧的数据个数]
	+200字节的程序代码
	+包尾标识	
	
	返回：握手包。
		包起始标识
		+CMD0xC0_Readback_CMDOK
		+[2字节的数据长度，=1]
		+CMD0x06_Request_UpdateSend
		+包尾标识	
	异常：如果程序在APP中，可能返回错误	Error0x01_CannotRunAtApp
*/
void CMD0x0C_Request_UpdateSwitch_process(u8 *pData,u16 dataLen,u8 bIsContentBitInverted_Recv,u8 bIsContentBitInverted_SendBack)
{
#ifdef RUNNING_WHERE_AT_BOOT
		u8 responseResult=0;
		//Check point 1
		if(Updating==0)
		{
			responseResult=1;
		}
		//check point 2
		if ((responseResult==0) && (UpdateVerifyStage1OK==0))
				responseResult=1;

		if (responseResult==0)
		{
			u32 data;
			u32 u32Count=(UpdateRecvedContentBytes+sizeof(u32)-1)/sizeof(u32);			
			for(int i=0;i<u32Count;i++)
			{
				data=(*(vu32*)(FLASH_ADDR_UPDATE_TEMP_AREA+i*sizeof(u32)));
				STMFLASH_Write((FLASH_ADDR_APP+i*sizeof(u32)),&data,1);
			}
		}			

		//response!!!
		u8 dataBytes=1;

		USART_WR_BUF[0]=responseResult;

		USART6_Send(CMD0x0C_Request_UpdateSwitch,dataBytes,bIsContentBitInverted_SendBack);			
#else
		Command_SendbackErrorMessage(Error0x01_CannotRunAtApp,1);
#endif
}



