#include "command.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "timer.h"
extern uint8_t CocheData[64];      //ʱݻ
extern uint8_t count;              //ռ
extern int Hardware_StartSector;
extern int Hardware_EndSector;
extern alt_u8 uart0_tx_state;//0״̬
/*ݴݻ洢*/
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(UART_HANDLE hUART0,uint8_t *p){
	uint32_t addr=0;
	uint8_t data[3];
	uint8_t rx_len = 0;
	uint8_t get_data_flag = 0;
	
//	uart_tx(CM3DS_MPS2_UART0, p ,18);
	UARTx_Tx(hUART0,p ,26);
	uart0_tx_state = UART_TX_BUSY;//Ǵ0״̬Ϊæ

//	while(FLAG_USART1_IT == 1);
//	FLAG_USART1_IT = 0;
	while(1)
	{
		rx_len = UARTx_Rx(hUART0,(alt_u8 *)data); //Ӵڽյ
		printf("rx_len = %d",rx_len);
		if(rx_len)
		{
			get_data_flag = 1;
		}
		else
		{
			get_data_flag = 0;
		}
	}

	addr=data[0];
	addr=(addr<<8)|data[1];
	addr=(addr<<8)|data[2];
	return addr;

	return addr;
}
void CMD_FlashErase(UART_HANDLE hUART0,uint8_t CMD)
{
	uint32_t addr,addr_end;     //flashҪĵַ
	uint32_t Blockdata = 0;    //ҪĿĸ
	uint32_t i;
	int eraseSector;
	uart0_tx_state = UART_TX_BUSY;//Ǵ0״̬Ϊæ
	addr = CMD_QAM(hUART0,"Ҫʼַ:\n");
	Hardware_StartSector = (addr & 0xFFFF0000) >> 16;; //Ҫʼַ
	addr_end = CMD_QAM(hUART0,"\nҪĽַ:");
	if((addr >= Hardware1_StA) && (addr_end > addr))
	{
		if(CMD == SectorErase){
//			printf("start Erase: 0x%X\n",addr);
			UARTx_Tx(hUART0, (alt_u8 *)"start Erase\n",sizeof("start Erase\n"));
			Hardware_EndSector = (addr_end & 0xFFFF0000) >> 16;
			for(i=Hardware_StartSector; i<=Hardware_EndSector; i++)
			{
				eraseSector = (eraseSector & 0) | (i << 8) | 0x02;
//				printf("Erasing Application 1 Hardware sector %d\r\n", i);
				UARTx_Tx(hUART0, (alt_u8 *)"Erasing Application 1 Hardware sector %d\r\n",sizeof("Erasing Application 1 Hardware sector %d\r\n"));
				IOWR(EPCQ_CONTROLLER_AVL_CSR_BASE, 0x3, eraseSector);
			}
//			printf("Erase completed!\r\n"); //ɹ
			UARTx_Tx(hUART0, (alt_u8 *)"Erase completed!\r\n",sizeof("Erase completed!\r\n"));
		}
	}
	else
	{
//		printf("Erase error!\r\n"); //ʧ
//		printf("\nҪĵַϹ涨Ҫĵַ");
		UARTx_Tx(hUART0, (alt_u8 *)"Erase error!\r\n",sizeof("Erase error!\r\n"));
		uart0_tx_state = UART_TX_BUSY;//Ǵ0״̬Ϊæ
		UARTx_Tx(hUART0, (alt_u8 *)"\nҪĵַϹ涨Ҫĵַ\n\r",sizeof("\nҪĵַϹ涨Ҫĵַ\n\r") - 1);
		uart0_tx_state = UART_TX_BUSY;//Ǵ0״̬Ϊæ
	}
}

