#include "command.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
extern uint8_t CocheData[64];      //ʱݻ
extern uint8_t count;              //ռ
extern uint32_t Flash_Address;           //Ҫĵַ
extern uint8_t FLAG_FrameData;
extern volatile uint16_t Time;
extern volatile uint8_t flag;
extern int Hardware1_StartAddress, Hardware1_EndAddress;
extern int Hardware2_StartAddress, Hardware2_EndAddress;
extern int Hardware_StartSector;
extern int Hardware_EndSector;

/*ݴݻ洢*/
char CopyCocheData(uint8_t *dat, uint16_t len) {          
	uint8_t i;                      
	
	if(len>=count){                   //ȽϽճ;len ַ count ʵʽյַ
		i = count;
	  count = 0;
	for (char j = 0; j < i; j++)
		dat[j] = CocheData[j];        //ݴӻⱻһ֡ƻʱڴͷŻ
	return i;                         //ؽյݳ
	}
	else{
	  i=len;
		count = 0;
		for(char j=0;j<len;j++)
		  dat[j] = CocheData[j];
	return i;
	}
}
uint32_t CMD_QAM(uint8_t *p){
  uint32_t addr=0;
	uint8_t data[3];
	
//	uart_tx(CM3DS_MPS2_UART0, p ,18);
	UARTx_Tx(hUART0,p ,18);
	while(FLAG_FrameData==0);
	
	FLAG_FrameData = 0;
	CopyCocheData(data,sizeof(data));
	
	addr=data[0];
	addr=(addr<<8)|data[1];
	addr=(addr<<8)|data[2];
	return addr;
}
void CMD_FlashErase(uint8_t CMD)
{
	uint32_t addr;     //flashҪĵַ 
	uint32_t Sectordata = 0;    //Ҫĸ
	uint32_t Blockdata = 0;    //ҪĿĸ
	uint32_t i;
	addr = CMD_QAM("24λĵַ:\n");
	Hardware_StartSector = addr; //ͨڽҪ
	printf("0x%X\n",addr);
	if(CMD == SectorErase){
		Sectordata = CMD_QAM("\nSectorĸ:");
		printf("%d\n",Sectordata);
		printf("start Erase: 0x%X\n",addr);
		Hardware_EndSector = Hardware_StartSector + Sectordata;
		for(i=Hardware_StartSector; i<=Hardware_EndSector; i++)
		{
			eraseSector = (eraseSector & 0) | (i << 8) | 0x02;
			printf("Erasing Application 1 Hardware sector %d\r\n", i);
			IOWR(EPCQ_CONTROLLER_AVL_CSR_BASE, 0x3, eraseSector);
		}
		printf("SectorErase OK\n");
	}
	else if(SubsectorErase){

	}
}
