Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

730 rindas
17 KiB

#include "OTA_H.h"
#include "eflash_drv.h"
#include "uart.h"
#include "bsp.h"
#include "pit.h"
#include "pit32_drv.h"
#include "ioctrl_drv.h"
#include "usb_drv.h"
#include "usb_const.h"
#include "meg.h" 
#include "Flash.h"
#include "wdt_drv.h"
/****************test************************/
extern unsigned int number1 ;
unsigned int ota_lt7689(unsigned char * updata_p,unsigned int length , unsigned int flash_addr)
{
	
				EFLASH_Init(g_sys_clk/1000);
				EFLASH_SetWritePermission();
				EFLASH_Write(flash_addr,updata_p,length);
				EFLASH_ClrWritePermission();
				return 0;
}
unsigned int ota_ui(unsigned int addr , unsigned char * ota_lt_buf , unsigned int length,unsigned short offset)//2048 一页
{
//		for(unsigned char i=0;i<1;i++)
//		{
//			pWrBuf = &(vcom_buf[id][i*2048]);                  
//			pageAddr = (vcom_rp[id].wrAddr+i*2048)/2048; 			
			W25N01GV_WritePageAddr_Data(ota_lt_buf,offset,addr,length);
//		}
	
			return 0;
}
/*   Idle interrupt reception(SCI1)   */
/*For debug */
uint8_t Rx_Buffer_short[512] = {0}; //256
uint8_t Rx_Buffer1_short[512] = {0}; //256
uint16_t Rx_Count_short = 0;
#include "dmac_drv.h"
#define Uart_Channel	2        //DMA channel
DMA_CHANNEL_REG *sci_dma_channel[2][DMAC_CHNUM] = {{(DMA_CHANNEL_REG *)(DMA1_BASE_ADDR ),(DMA_CHANNEL_REG *)(DMA1_BASE_ADDR + 0x58 ),
									(DMA_CHANNEL_REG *)(DMA1_BASE_ADDR + 0xB0 ),(DMA_CHANNEL_REG *)(DMA1_BASE_ADDR + 0x108)},
												   {(DMA_CHANNEL_REG *)(DMA2_BASE_ADDR ),(DMA_CHANNEL_REG *)(DMA2_BASE_ADDR + 0x58 ),
									(DMA_CHANNEL_REG *)(DMA2_BASE_ADDR + 0xB0 ),(DMA_CHANNEL_REG *)(DMA2_BASE_ADDR + 0x108)}};//global struct variable for for Channel registers
DMA_CONTROL_REG *sci_dma_control[2] = {(DMA_CONTROL_REG*)(DMA1_BASE_ADDR+0x2C0),
																				(DMA_CONTROL_REG*)(DMA2_BASE_ADDR+0x2C0)};//global struct variable for for DMAC registers
uint16_t dma_uartRX(UART_TypeDef *UARTx,uint8_t n, uint8_t *dest,uint32_t len)
{
	uint8_t dmaNum = 0;
	uint16_t ret = 0;
	uint16_t temp = 0;
	if(UARTx == SCI2)
	{
		dmaNum =1;
	}
	else					//SCI1 SCI3
	{
		dmaNum =0;
	}
	sci_dma_control[dmaNum]->DMA_CHEN &= (~(CHANNEL_WRITE_ENABLE(n)|CHANNEL_ENABLE(n)));////DMA disable
	sci_dma_control[dmaNum]->DMA_CONFIG = 0;
	sci_dma_channel[dmaNum][n]->DMA_SADDR = (uint32_t)&UARTx->SCIDRL;
	sci_dma_channel[dmaNum][n]->DMA_DADDR = (uint32_t)dest;
	sci_dma_channel[dmaNum][n]->DMA_CTRL = DIEC|SNOCHG|P2M_DMA;
	sci_dma_channel[dmaNum][n]->DMA_CTRL_HIGH =  len;
	sci_dma_control[dmaNum]->DMA_CONFIG = 1;
	sci_dma_channel[dmaNum][n]->DMA_CFG = (HS_SEL_SRC_HARD)|(HS_SEL_DST_SOFT)|(FIFO_EMPTY)|(CH_PRIOR2);
	if(UARTx == SCI1)
	{
		sci_dma_channel[dmaNum][n]->DMA_CFG_HIGH = (0xb<<7);
	}
	else if(UARTx == SCI2)
	{
		sci_dma_channel[dmaNum][n]->DMA_CFG_HIGH = (0x0<<7);
	}
	else
	{
		sci_dma_channel[dmaNum][n]->DMA_CFG_HIGH = (0xd<<7);
	}
	sci_dma_control[dmaNum]->DMA_CHEN |= (CHANNEL_WRITE_ENABLE(n)|CHANNEL_ENABLE(n));
	 return ret;
}
uint32_t DMA_uart_GetRecvLen(UART_TypeDef *UARTx,uint8_t n)
{
  uint8_t dmaNum = 0;
	if(UARTx == SCI2)
	{
		dmaNum =1;
	}
	else					//SCI1 SCI3
	{
		dmaNum =0;
	}
	return sci_dma_channel[dmaNum][n]->DMA_CTRL_HIGH;
}
void SCI1_DMA_Init(unsigned int pclk,unsigned int bound)
{
	uint32_t band_rate=0;
	NVIC_Init(0, 0, SCI1_IRQn, 2);
	SCI1->SCIBRDF=(((pclk*8/bound)+1)/2)&0x003f;
	band_rate =(pclk*4/bound)>>6;
	SCI1->SCIBDH  =(uint8_t)((band_rate>>8)&0x00ff);
	SCI1->SCIBDL  =(uint8_t)(band_rate&0x00ff);
	SCI1->SCICR1 &=~(1<<4);	//Data frame??1+8+1
	SCI1->SCICR1 &=~(1<<1);	//No verification
	SCI1->SCIRXTOCTR = 64;
	SCI1->SCIFCR = 0;
	SCI1->SCIFCR  |= (SCIFCR_RFEN|SCIFCR_RXFLSEL_1_8|SCIFCR_TXFLSEL_1_8);	//RX FIFOenable
	SCI1->SCIFCR2 |= (SCIFCR2_RXFCLR|SCIFCR2_RXFTOE);	//clean fifo , time over
	SCI1->SCICR1  |=  SCICR1_ILT_MASK; 					//Idle frame starts from end bit
	SCI1->SCICR2  |= (SCICR2_TE_MASK|SCICR2_RE_MASK|SCICR2_ILIE_MASK);	//Idle interrupt, receive, send enable
//	SCI3->SCICR2  |= SCICR2_RE_MASK;
	SCI1->SCIDCR |= SCIDCR_RXDMAE_MASK;	//Uart_DMA enable
	dma_uartRX(SCI1,Uart_Channel, Rx_Buffer_short,256);
}
void SCI3_DMA_Init(unsigned int pclk,unsigned int bound)
{
	uint32_t band_rate=0;
	NVIC_Init(0, 0, SCI3_IRQn, 2);
	SCI3->SCIBRDF=(((pclk*8/bound)+1)/2)&0x003f;
	band_rate =(pclk*4/bound)>>6;
	SCI3->SCIBDH  =(uint8_t)((band_rate>>8)&0x00ff);
	SCI3->SCIBDL  =(uint8_t)(band_rate&0x00ff);
	SCI3->SCICR1 &=~(1<<4);	//Data frame??1+8+1
	SCI3->SCICR1 &=~(1<<1);	//No verification
	SCI3->SCIRXTOCTR = 64;
	SCI3->SCIFCR = 0;
	SCI3->SCIFCR  |= (SCIFCR_RFEN|SCIFCR_RXFLSEL_1_8|SCIFCR_TXFLSEL_1_8);	//RX FIFOenable
	SCI3->SCIFCR2 |= (SCIFCR2_RXFCLR|SCIFCR2_RXFTOE);	//clean fifo , time over
	SCI3->SCICR1  |=  SCICR1_ILT_MASK; 					//Idle frame starts from end bit
	SCI3->SCICR2  |= (SCICR2_TE_MASK|SCICR2_RE_MASK|SCICR2_ILIE_MASK);	//Idle interrupt, receive, send enable
//	SCI3->SCICR2  |= SCICR2_RE_MASK;
	SCI3->SCIDCR |= SCIDCR_RXDMAE_MASK;	//Uart_DMA enable
	dma_uartRX(SCI3,Uart_Channel, Rx_Buffer_short,256);//256
}
//void SCI1_IRQHandler(void)
//{
//	uint16_t tmp,ret;
//	uint8_t clear_idle_flag;
//	UART_TypeDef *UARTx=SCI1;
//	//UART_Enter idle interrupt
//	if(UARTx->SCISR1 & SCISR1_IDLE_MASK)      //The receiver is idle
//	{			
//			//清除标志位
//		while((UARTx->SCIFSR&SCIFSR_REMPTY_MASK) == 0) //FIFO not empty, Wait for the received data to be transmitted to DMA
//		{
//			if( UARTx->SCIFSR& (SCIFSR_RFULL_MASK|SCIFSR_RTOS_MASK) )  //FIFO overflow??receive time-out
//			{
//				break;
//			}
//		}
//		tmp = UARTx->SCIDRL;
//		UARTx->SCIFCR2 |= SCIFCR2_RXFCLR;
//		Rx_Count_short = DMA_uart_GetRecvLen(UARTx,Uart_Channel);
////		gUsartRx.Flag = 1;
//		printf("len:%d\r\n",Rx_Count_short);
//	//	SCI3->SCICR2  |= SCICR2_RE_MASK;
//	//	SCI3->SCIDCR |= SCIDCR_RXDMAE_MASK;	//Uart_DMA enable
////		for(unsigned char i = 0 ; i < Rx_Count_short;i++ )
////		{
////				printf(" %x ",Rx_Buffer_short[i]);
////		}
////		number1++;
//		dma_uartRX(UARTx,Uart_Channel, Rx_Buffer_short,256);
//		ota_lt7689_flag=1;
//					
//				clear_idle_flag	=	SCI1->SCIDRL;
//				clear_idle_flag	= SCI1->SCISR1;
//	}
//}
 unsigned char ui_buf[2050];
 unsigned int ui_offset=0;
 
 unsigned short block = 0;
 unsigned int page = 0;
 unsigned int ui_addr =0x00000000;
 
//extern  unsigned short block1 = 512;
//extern	 unsigned int ui_addr1 =0x00100000;
//extern   unsigned int page =64*512	  32768
 unsigned char last_flag = 0;
 unsigned char dma_flag = 0;
//	SCI3 DMA
#if 0
void SCI3_IRQHandler(void)
{
	uint16_t tmp,ret;
	uint8_t clear_idle_flag;
	UART_TypeDef *UARTx=SCI3;
	//UART_Enter idle interrupt
	if(UARTx->SCISR1 & SCISR1_IDLE_MASK)      //The receiver is idle
	{			
			//清除标志位
		while((UARTx->SCIFSR&SCIFSR_REMPTY_MASK) == 0) //FIFO not empty, Wait for the received data to be transmitted to DMA
		{
			if( UARTx->SCIFSR& (SCIFSR_RFULL_MASK|SCIFSR_RTOS_MASK) )  //FIFO overflow??receive time-out
			{
				break;
			}
		}
		tmp = UARTx->SCIDRL;
		UARTx->SCIFCR2 |= SCIFCR2_RXFCLR;
		
		
		Rx_Count_short = DMA_uart_GetRecvLen(UARTx,Uart_Channel);
//		gUsartRx.Flag = 1;
		printf("len:%d\r\n",Rx_Count_short);
	clear_idle_flag	=	SCI1->SCIDRL;
	clear_idle_flag	= SCI1->SCISR1;
		dma_uartRX(UARTx,Uart_Channel, Rx_Buffer_short,256);//256 212
	//	SCI3->SCICR2  |= SCICR2_RE_MASK;
	//	SCI3->SCIDCR |= SCIDCR_RXDMAE_MASK;	//Uart_DMA enable
		printf("R:");
		for(unsigned char i = 0 ; i < Rx_Count_short;i++ )
		{
				printf(" %x ",Rx_Buffer_short[i]);
		}
		printf("\r\n");
//	number1+=Rx_Count_short;
//		ui_offset+=Rx_Count_short;
		
//			dma_flag++;
//		
//			dma_flag %= 2;
			
//		printf("dma_flag=%d\r\n",dma_flag);
//		if(dma_flag==0)
//		printf("\r\n**\r\n");
//		for(unsigned char i = 0 ; i < Rx_Count_short; i++)
//		printf(" %x",Rx_Buffer_short[i]);
//		printf("\r\n %x \r\n",CalCheckSum(Rx_Buffer_short,Rx_Count_short-1));
		ota_analysis(Rx_Buffer_short,Rx_Count_short);
		//双缓冲
//		if(dma_flag==1)
//		dma_uartRX(UARTx,Uart_Channel, Rx_Buffer1_short,256);
		
		
//	if(Rx_Count_short<256)
//	{
//		last_flag = 1;
//		ota_lt7689_flag=1;
//	}
	
//	ota_lt7689_flag=1;
					
	
//	if(Rx_Count_short<256)
//	printf("number1=%d\r\n",number1);
	
//	for(unsigned char i =0;i<Rx_Count_short;i++)
//	{
//		printf(" %x",Rx_Buffer_short[i]);
//	}
//	
//	printf("\r\n");
	
	}
}
#endif
// SCI3 接收 空闲中断
#if 1 
void SCI3_IRQHandler(void)
{
//	uint8_t ch = 0;
//	printf("SCI3!\r\n");
//	WDT_FeedDog();
	if ((SCI3->SCISR1 & 0x20) == 0x20)
	{
		
//		Rx_Buffer_short[Rx_Count_short++]=SCI3->SCIDRL;
//		ui_buf[ui_offset++]=SCI3->SCIDRL;
//		number1++;
//		ch = SCI3->SCIDRL;
//		number1++;
		
//		if(ui_offset%256==0)
//		{
//				ota_lt7689_flag=1;
//			
////				ui_buf_length=0;
//		}
//		else if(ui_offset>256)
//		{
//			ota_lt7689_flag=1;			
//		}
//		printf("flag=%d %d\r\n",ota_lt7689_flag,number1);
		
#if 1  //3-enhance 
			unsigned char ch = SCI3->SCIDRL;
//			wifi_buf[mes_length++] =SCI3->SCIDRL;
		#if 1  //状态机接收
//			printf("%d\r\n",rev_status);
			if(rev_status == 0)  //A5
			{
					if(ch==0xA5)
					{
								
								wifi_buf[mes_length++] = ch;
								rev_status = 1;
					}
					else
					{
							rev_status = 0;
							mes_length = 0;
					}
			}
			else if (rev_status == 1) //5A
			{
					if(ch==0x5A)
					{
								wifi_buf[mes_length++] = ch;
								rev_status = 2;
					}
					else
					{
							rev_status = 0;
							mes_length = 0;
					}			
			}
			else if (rev_status == 2) // 01
			{
					if(ch==0x01)
					{
								wifi_buf[mes_length++] = ch;
								rev_status = 3;
					}
					else
					{
							rev_status = 0;
							mes_length = 0;
					}			
			}
			else if (rev_status == 3) // 包序号
			{				
					wifi_buf[mes_length++] = ch;
					rev_status = 4;
			}	
			else if(rev_status==4) //消息类型
			{
//						if(ch==0x20||ch==0x21||ch==0x03)
					wifi_buf[mes_length++] = ch;
					rev_status = 5;
			}
			else if(rev_status==5) //数据长度
			{
					datalength =ch;
					wifi_buf[mes_length++] = datalength;
					rev_status = 6;					
			}
			else if(rev_status==6) //命令
			{
					wifi_buf[mes_length++] = ch;
					
					rev_status = 7;					
			}			
			else if(rev_status==7) //子命令
			{
					wifi_buf[mes_length++] = ch;
					
					rev_status = 8;					
			}
			else if(rev_status==8) //值或者校验码
			{
					
					if((datalength-2)==0) //校验码
					{
							wifi_buf[mes_length++] = ch;
							datalength =0;
							ota_lt7689_flag = 1;
							rev_status =0;						
						
					}
					else //值
					{
								wifi_buf[mes_length++] = ch;
//								printf("%d %d\r\n",mes_length,datalength + 6);
							
							 if(mes_length == datalength + 6) //
								 rev_status = 9;
//								printf("datalength=%d\r\n",datalength);
					}
				
			}
			else if(rev_status==9) //校验码
			{
					wifi_buf[mes_length++] = ch;
					datalength =0;
//					printf("\r\nrev:%d",mes_length);
//					for(unsigned char i = 0 ; i < mes_length ; i++)
//						printf(" %x",wifi_buf[i]);
//					printf("\r\n");
//						ota_analysis(wifi_buf,mes_length);
//						mes_length = 0;
//						rev_status =0;				
			
#if 1 //中断接收 app执行后续
					
					ota_lt7689_flag = 1;
					rev_status =0;
#endif				
			}
		#endif
		
#endif
		
	}
#if 0
	if((SCI3->SCISR1 & 0x10) == 0x10) //空闲中断
	{
			//清除标志位
				unsigned char clear_idle_flag;
				clear_idle_flag	=	SCI3->SCIDRL;
				clear_idle_flag	= SCI3->SCISR1;
		
//			printf("ui_offset=%d\r\n",ui_offset);
		
//				if(ui_buf_length==2048)
//				{
//					ui_buf_length=0;
//				}
				
//				if(ui_offset==2048)
//				{
//					ui_offset=0;
//				}
				
//				printf("number1=%d\r\n",number1);
		
		
		
		/*
		ota_lt7689_flag=1;	
		printf("R:");
		for(unsigned char i = 0 ; i < mes_length;i++ )
		{
				printf(" %x ",wifi_buf[i]);
		}
		printf("\r\n");
		ota_analysis(wifi_buf,mes_length);
		*/
//		printf("rev:%d\r\n",mes_length);
//		for(unsigned char i = 0 ; i < mes_length;i++ )
//		{
//				printf(" %x ",wifi_buf[i]);
//		}
//		printf("\r\n");
		ota_analysis(wifi_buf,mes_length);
		mes_length = 0;
	}
#endif
//				printf("flag %d\r\n",ota_lt7689_flag);
}
#endif
							/*	3-enhance OTA 接口*/
#if 1
unsigned char inf_wifi_buf[20] = {0};
unsigned char inf_wifi_buf_length = 0;
unsigned char pkg_seq = 0;
unsigned char wifi_buf[256] = {0};
unsigned char mes_length = 0;
unsigned char rev_status = 0;
unsigned char rev_datalength=0;	//判断消息接收长度
unsigned char datalength=0; 		//缓存消息长度
unsigned short ota_seq = 0;
//分析报文
unsigned char ota_analysis(unsigned char * rev_wifi_buf,unsigned short len)
{
//		unsigned char check_number = CalCheckSum( inf_wifi_buf, len);
		//校验码不正确
		printf("check:%x\r\n",CalCheckSum( (char *)rev_wifi_buf, len-1));
		if(rev_wifi_buf[len-1]!= CalCheckSum( (char *)rev_wifi_buf, len-1))
		{
				printf("%x check_number_erro!\r\n",CalCheckSum( (char *)rev_wifi_buf, len-1));
//				return 1;
		}
		if((rev_wifi_buf[0]!=0xA5)&&(rev_wifi_buf[1]!=0x5A)&&(rev_wifi_buf[2]!=0x01))
		{
				printf("illegal_new!\r\n");
//				return 2;
		}
		
		
		pkg_seq = rev_wifi_buf[3];
		
		//
		unsigned char send_length=inf_wifi_ack(inf_wifi_buf,pkg_seq);
		
		inf_wifi_buf[send_length] = CalCheckSum( (char *)inf_wifi_buf,send_length);
		send_length++;
		//发送ACK
		send_meg_wifi(inf_wifi_buf,send_length);
		printf("S:");
		for(unsigned char i = 0 ; i < send_length;i++)
		{
			printf(" %x",inf_wifi_buf[i]);
		}
		printf("\r\n");
		inf_wifi_buf_length = 0;
		
//		printf("send_wifi!\r\n");
	return 0;
}
// 通知WIFI 数据包校验错误
unsigned char inf_wifi_data_check_error(unsigned char * inf_wifi_buf,unsigned char pkg_seq)
{
		//封装协议
		inf_wifi_buf[inf_wifi_buf_length++] = 0xa5;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x5a;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
//		pkg_seq++;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;//pkg_seq;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x21;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
		
		inf_wifi_buf[inf_wifi_buf_length++] = 0x26;
		
	
		
	
	
	return inf_wifi_buf_length;
}
//通知WiFi固件校验错误 
unsigned char inf_wifi_bin_check_error(unsigned char * inf_wifi_buf,unsigned char pkg_seq)
{
		//封装协议
		inf_wifi_buf[inf_wifi_buf_length++] = 0xa5;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x5a;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
//		pkg_seq++;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;// pkg_seq;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x21;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
		
		inf_wifi_buf[inf_wifi_buf_length++] = 0x27;
		
	
		
	
	
	return inf_wifi_buf_length;
	
	
}
//通知WIFI OTA 完成
unsigned char inf_wifi_ota_suc(unsigned char * inf_wifi_buf,unsigned char pkg_seq)
{
	
		//封装协议
		inf_wifi_buf[inf_wifi_buf_length++] = 0xa5;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x5a;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
//		pkg_seq++;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;//pkg_seq;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x21;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
		
		inf_wifi_buf[inf_wifi_buf_length++] = 0x27;
		
	
		
	
	
	return inf_wifi_buf_length;
}
//通知 WIFI 开始发送固件内容
unsigned char inf_wifi_ota_start(unsigned char * inf_wifi_buf,unsigned char pkg_seq)
{
			//封装协议
		inf_wifi_buf[inf_wifi_buf_length++] = 0xa5;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x5a;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
//		pkg_seq++;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x21;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x03;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
		
		inf_wifi_buf[inf_wifi_buf_length++] = 0x28;
	
	
	return inf_wifi_buf_length;
}
// 用于确认 收到的消息
unsigned char inf_wifi_ack(unsigned char * inf_wifi_buf,unsigned char pkg_seq)
{
	
		//封装协议
		inf_wifi_buf[inf_wifi_buf_length++] = 0xa5;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x5a;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
//		pkg_seq++;
		inf_wifi_buf[inf_wifi_buf_length++] = pkg_seq;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x03;
		inf_wifi_buf[inf_wifi_buf_length++] = 0x00;
//		inf_wifi_buf[inf_wifi_buf_length++] = 0x02;
//		inf_wifi_buf[inf_wifi_buf_length++] = 0x01;
//		
//		inf_wifi_buf[inf_wifi_buf_length++] = 0x27;	
	
		
	return inf_wifi_buf_length;
}
 unsigned char CalCheckSum( char * buf,unsigned short len)
{
    int checkSum=0;
     char *pBuf=(buf); //jump to len byte
    unsigned short bufLen=len;
    // printf ("Start cal checksum: ");
    for (int i=0;i<bufLen;i++){
        checkSum +=pBuf[i];
        //printf("    0x%x", pBuf[i]);
    }
// printf("\r\nExpect checksum: 0x%x", pBuf[bufLen]);
    checkSum = checkSum%(0x100);
    //printf("\r\nCal checksum: 0x%x", checkSum);
    return checkSum;
}
//UART3 - WIFI
unsigned char send_meg_wifi(unsigned char * send_buf,unsigned char length)
{
		printf("ack:");
	for(unsigned char i = 0 ; i < length ; i++)
	printf(" %x",send_buf[i]);
		printf("\r\n");
	
	for( unsigned char i = 0 ; i < length ; i++)
	{
			while ((SCI3->SCISR1 & 0x40) == 0x00)
			{
			};
			SCI3->SCIDRL = send_buf[i];//(uint8_t)ch; //SCI1->SCIDRL = (uint8_t)data;	
	}
		return 0 ;
}
#endif