#if 0
#include <stdio.h>
#include <string.h>
#include "uart_dev.h"
#include "com.h"
#include "driver.h"

//static int dataCount;
//static unsigned char TestDataBuf[1000];
	
extern G_USART usart1;
extern volatile DT_BOOLEAN g_UpSenDataIP;

tagComDataRecv g_ComDataRecv;    //命令缓冲区
static unsigned char gs_SendBuffer[SENDBUFFER_LEN];  //串口发送缓冲区

/******************************************************************************
* Function: Com_SendData
* Description:发送数据
* Calls: none
* Called By: 
* Input:   pDataBuffer-数据缓冲区  dataLen- 数据长度addr - 地址cmdtype -命令类型
* Ouput: 
* Return: 
* others: 
* History:
*         1.luoyang created 2018-02-04
*
*******************************************************************************/
void Com_SendData(unsigned char *pDataBuffer,unsigned int dataLen,unsigned char addr,unsigned char cmdtype)
{
	unsigned short FrameLen = 0;
	unsigned char checkSum;
	int i;	

	//无数据或错误操作
	if(NULL == pDataBuffer )
	{
		dataLen = 0;
	}

	//数据超过缓冲区长度
	if(dataLen > SENDDATA_LEN_MAX)
	{
		  dataLen = SENDDATA_LEN_MAX;
	}
	FrameLen = FRAME_HEAD_LEN + dataLen;
	//组帧	
	memset(gs_SendBuffer, 0, sizeof(gs_SendBuffer));
	gs_SendBuffer[FRAME_HEAD_L] = 0x4A;             //帧头
	gs_SendBuffer[FRAME_HEAD_H] = 0x59;	
	gs_SendBuffer[FRAME_LENGTH_L] = FrameLen & 0xFF;   //帧长	
	gs_SendBuffer[FRAME_LENGTH_H] = (FrameLen >> 8) & 0xFF;
	gs_SendBuffer[FRAME_DEVICE_TYPE] = 0x02;            //装置类型
	gs_SendBuffer[FRAME_DEVICE_ADDR] = addr;            //装置地址	
	gs_SendBuffer[FRAME_TYPE] = 0x02;                //帧类型,传感器到设备
	gs_SendBuffer[FRAME_CMD_TYPE] = cmdtype;   //命令类型
	//拷贝数据
	if(dataLen > 0)
	{
		memcpy(&gs_SendBuffer[FRAME_DATE_START],pDataBuffer,dataLen);
	}
	
	//计算校验码
	for(i = 0,checkSum = 0; i < FrameLen-1; i++)
	{	
		checkSum += gs_SendBuffer[i];
	}
	
	gs_SendBuffer[FrameLen - 1] = checkSum;  //校验码
	//发送
	drv_Send(gs_SendBuffer, FrameLen); 
	
	/*if ((dataCount-10)>=999) 
		dataCount=0;
	memcpy(TestDataBuf+dataCount, gs_SendBuffer, FrameLen);
	dataCount = dataCount+FrameLen;*/
}

/******************************************************************************
* Function: Handle_upSend_Data
* Description:解析协议,上送数据
* Calls: none
* Called By: 
* Input:   pDataBuffer-数据缓冲区  dataLen- 数据长度addr - 地址cmdtype -命令类型
* Ouput: 
* Return: 
* others: 
* History:
*         1.luoyang created 2018-02-04
*
*******************************************************************************/
void Handle_upSend_Data(unsigned char *pFrame)
{
	unsigned char addr,temp,cmdType;	
	unsigned char  Data[30], workMode=0;
	//float xValue=0,yValue=0,zValue=0;
	unsigned short int upFreq=0;

	//命令类型
	cmdType = pFrame [FRAME_CMD_TYPE];
	
	switch (cmdType)
	{
			//设定地址
			case COMMAND_TYPE_SET_ADDR: 
				addr = pFrame[FRAME_DATE_START];
				SetAddress(addr);
				Data[0] = 0xFF;  //成功
				Com_SendData(Data,1,addr,COMMAND_TYPE_SET_ADDR);
				break;
			//查询地址	
			case COMMAND_TYPE_SCAN_ADDR: 
				addr = ReadAddress();
				Data[0] = addr;  //实际地址
				Com_SendData(Data,1,0xFF,COMMAND_TYPE_SCAN_ADDR);
				break;
			//查询数据传输方式
			case COMMAND_TYPE_GET_WORKMODE:
				addr = ReadAddress();
			  ReadWorkMode(&workMode, &upFreq);
			  Data[0] = workMode; 
			  memcpy(Data + 1,(void*)&upFreq,2);	
				Com_SendData(Data,3,addr,COMMAND_TYPE_GET_WORKMODE);
				break;
			//设定数据传输方式
			case COMMAND_TYPE_SET_WORKMODE:
				addr = ReadAddress();
			  workMode = pFrame[FRAME_DATE_START];
			  upFreq = 256*(pFrame[(FRAME_DATE_START+2)])+pFrame[(FRAME_DATE_START+1)];
			  SetWorkMode(workMode, upFreq);
			  Data[0] = 0xFF;  //成功
				Com_SendData(Data,1,addr,COMMAND_TYPE_SET_WORKMODE);
				break;
			//读取数据
			/*case COMMAND_TYPE_GETDATA: //数据		
				addr = ReadAddress();
				//获取测量值,归一化处理
				if(SD_SUCCESS != GetAngleMeasureValue(&xValue,&yValue,&zValue))
				{
					return;
				}					
				//X值
				memcpy(Data,(void*)&xValue,4);			  
				//Y值
				memcpy(Data + 4,(void*)&yValue,4);
				//Z值
				memcpy(Data + 8,(void*)&zValue,4);
				//发送
				Com_SendData(Data,12,addr,COMMAND_TYPE_GETDATA);
				break;*/
			//角度校正
			case COMMAND_TYPE_SCALE: //矫正		
				addr = ReadAddress();
				AngleScale();           //校正
				Data[0] = 0xFF;        //成功
				Com_SendData(Data,1,addr,COMMAND_TYPE_SCALE);
				break;
			//清除角度校正
			case COMMAND_TYPE_SCALE_RESET:
				addr = ReadAddress();
				AngleScale_Reset();  //校正复位
				Data[0] = 0xFF;                 //成功			
				Com_SendData(Data,1,addr,COMMAND_TYPE_SCALE_RESET);
				break;	
			//召原始数据
			case COMMAND_TYPE_CALL_ORIGINALVALUE:
				temp = pFrame[FRAME_DATE_START];;  //1:x,2:y
				StartWave(temp);
				break;
			//读取装置信息
			case COMMAND_TYPE_CALLINFO:				
				addr = ReadAddress();
				temp = GetSensorInfo(Data);				
				Com_SendData(Data,temp,addr,COMMAND_TYPE_CALLINFO);				
				break;
			default:
				break;
	}
}

/******************************************************************************
* Function: UpSendDataActive
* Description:主动上送数据
* Calls: none
* Called By: 
* Input:   
* Ouput: 
* Return: 
* others: 
* History:
*         1.luoyang created 2018-02-04
*
*******************************************************************************/
void UpSendDataActive(void)
{	
	unsigned char addr;	
	unsigned char  Data[30] ;
	float xValue,yValue,zValue;
	
	if(SD_TRUE != g_UpSenDataIP)
		return;
	
	addr = ReadAddress();
	//获取测量值,归一化处理
	GetAngleMeasureValue(&xValue,&yValue,&zValue);	
	//X值
	memcpy(Data,(void*)&xValue,4);			  
	//Y值
	memcpy(Data + 4,(void*)&yValue,4);
	//Z值
	memcpy(Data + 8,(void*)&zValue,4);
	//发送
	Com_SendData(Data,12,addr,COMMAND_TYPE_GETDATA);
  g_UpSenDataIP = SD_FALSE;
}

/******************************************************************************
* Function: UpSendDataCall
* Description:应答上送数据
* Calls: none
* Called By: 
* Input:   
* Ouput: 
* Return: 
* others: 
* History:
*         1.luoyang created 2018-02-04
*
*******************************************************************************/
void UpSendDataCall(void)
{	
	unsigned char addr;	
	unsigned char  Data[30] ;
	float xValue=0,yValue=0,zValue=0;
	
	addr = ReadAddress();
	//获取测量值,归一化处理
	GetAngleMeasureValue(&xValue,&yValue,&zValue);	
	//X值
	memcpy(Data,(void*)&xValue,4);			  
	//Y值
	memcpy(Data + 4,(void*)&yValue,4);
	//Z值
	memcpy(Data + 8,(void*)&zValue,4);
	//发送
	Com_SendData(Data,12,addr,COMMAND_TYPE_GETDATA);

}

/******************************************************************************
* Function: CheckComData
* Description:从接受缓冲区中解析命令
* Calls: none
* Called By: 
* Input:   
* Ouput: 
* Return: 
* others: 
* History:
*         1.L.Y. created  20180210
*
*******************************************************************************/
void CheckComData(void)
{
	unsigned char counter = 0;
	unsigned char *pBuffer;
  unsigned char readIP;

	while(g_ComDataRecv.ReadIP != g_ComDataRecv.WriteIP)
	{
		//置锁标识
		g_ComDataRecv.Lock = SD_TRUE;
		readIP = g_ComDataRecv.ReadIP;
		g_ComDataRecv.ReadIP = (g_ComDataRecv.ReadIP + 1) % ASDU_MUN;
		//置位锁标识
		g_ComDataRecv.Lock = SD_FALSE;
        
		pBuffer = (DT_UINT8 *)g_ComDataRecv.AsduFrame[readIP];
		//处理数据帧
		Handle_upSend_Data(pBuffer); 	
		counter ++;
		//最多处理三帧
		if(counter >= 3)
		{
			break;
		}
	}
}
/******************************************************************************
* Function: Com_RecvFram_Handle
* Description:串口收满一帧数据回调函数
* Calls: none
* Called By: 
* Input:   
* Ouput: 
* Return: 
* others: 
* History:
*         1.L.Y. created  20180210
*
*******************************************************************************/
DT_VOID Com_RecvFram_Handle()
{
	DT_UINT8 WriteIP;

	WriteIP = g_ComDataRecv.WriteIP;

    //长度超范围
	if(usart1.FrameLen > ASDU_LEN_MAX)
	{
		return;
	}	
	if (usart1.RecvBuf[FRAME_CMD_TYPE]==COMMAND_TYPE_GETDATA)
	{
		myDelay_ms(2);
		UpSendDataCall();
		return;
	}
	//满
	if((WriteIP + 1) % ASDU_MUN == g_ComDataRecv.ReadIP)
	{
		if(SD_TRUE == g_ComDataRecv.Lock)
		{
				return;
		}
		//修改写指针,扔掉旧数据
		g_ComDataRecv.ReadIP = (g_ComDataRecv.ReadIP + (ASDU_MUN / 4)) % ASDU_MUN;
		
	}
	memcpy((DT_UINT8 *)g_ComDataRecv.AsduFrame[WriteIP],usart1.RecvBuf,usart1.FrameLen);
	//改变写指针
	g_ComDataRecv.WriteIP = (WriteIP + 1) % ASDU_MUN;	
}
#endif