#ifndef __DEBUG_H__
#define __DEBUG_H__

#endif

#ifndef __MFG_FACTORY_H__
#define __MFG_FACTORY_H__

#include <stdlib.h>
#include <stdint.h>
#include "control_comm.h"
#include "hardware_init.h"

#define    BYTE_MOVE(high_byte,low_byte)    ((high_byte << 8) | low_byte)

/**************************************************************************************************************
公共部分
***************************************************************************************************************/

#define     SOF_HIGH_BYTE_DEF       0XAA
#define     SOF_LOW_BYTE_DEF        0X55

#define     MAX_USART_RECIVE_LEN                48         //串口最多一次接受的数据量
#define     USART_RECIVE_DEPTHS                 10           //缓存的深度



#define     OPCODE_DEVICE_VERSION_QUERY					0xED00
#define     OPCODE_DEVICE_EUI64_QUERY					0xED01
#define     OPCODE_EXIT_FACTORY_TEST_MODE				0xED04

#define     OPCODE_KEY_TEST_QUERY						0xED06
#define     OPCODE_SCREEN_OFF						    0xED07
#define     OPCODE_PROXIMITY_TRIAGGER					0xED08
#define     OPCODE_TEMPTURE_QUERY						0xED09


//透传数据接受最大间隔时间，超时未接收到数据，停止一串数据接收
#define     DEF_TRANSPARENT_MAXIMUM_INTERVAL    100   //（ms）
typedef enum {DEAL_SUCCESS = 0, DEAL_ERROR = !DEAL_SUCCESS} DEAL_ErrorStatus;

//usart 数据接受
typedef struct 
{
	TP_u8 Data[MAX_USART_RECIVE_LEN]; //中断中接受到的数据
    
    TP_u8 Recive_len;   //接收到数据的长度
    
    TP_u8 Data_len;     //需要接受的数据
   
    TP_u8 time;         //时间
	
}RECIVE_USART_DATA_HANDLE;
//homebuf  buf缓存

typedef struct
{   
     TP_u8 Usart_buff[USART_RECIVE_DEPTHS][MAX_USART_RECIVE_LEN];  //homebus 缓存存放区
 _IO TP_u8 Usart_buff_len[USART_RECIVE_DEPTHS];   //homebus 缓存区长度
 _IO TP_u8 Buff_send_serial_num;   //BUFF发送序列
 _IO TP_u8 Download_serial_num;    //BUFF缓存序列
}RECIVE_USART_DATA_BUFF;
//协议中的功能码
typedef struct 
{
    //序列号
    //TP_u16 SEQ;
    //通道
    TP_u8 Channel_ID;// 
    //功能呢个码
    TP_u16 Opcode;
    //控制位
    TP_u8 ControlField;
    //数据
    TP_uc8* ARG;
    //长高度
    TP_u8 ARG_len;
}PROTOCOL_SEND_MSG;


void uart0_data_deal_init(void);
void uart_msg_deal(void);
void proximity_triagger_report(void);
u8 Usart_recive_deal(TP_uc8 *data,TP_uc8 len);
u8 uart_msg_recive(u8 RcvChar);
void ack_info(PROTOCOL_DEAL recv_data, TP_uc8* arg, TP_u8 len);
TP_u16 CreateCrc16_Self(const u8* msg, TP_u8 len) ;
static void send_crc_error_data(TP_u16 seq_data);
void uart_protocol_send(PROTOCOL_SEND_MSG send_protocol,TP_u16 SEQ);
#endif 


