/************************************************************************************
 * @Copyright (c)    :(C)2021, Qindao ieslab Co., Ltd
 * @FileName         :nb_uart_driver.h
 * @Author           :QDIES PLATFORM TEAM
 * @Version          :V1.1
 * @Date             :2021-07
 * @Description      :
 ************************************************************************************/

#ifndef __BLE_UART_DRIVER_H
#define	__BLE_UART_DRIVER_H

#include "ddl.h"
#include "type.h"
#include "UWater_uart_driver.h"

#ifdef __cplusplus
extern "C"
{
#endif

#define BLE_TX_PORT			LPUART1_TX_PORT		//蓝牙串口发送
#define BLE_TX_PIN			LPUART1_TX_PIN
#define BLE_RX_PORT			LPUART1_RX_PORT		//蓝牙串口接收
#define BLE_RX_PIN			LPUART1_RX_PIN
#define BLE_LP_COM			1					//是否为LPUART，1：是，0否，与下述串口对应
#define BLE_UART_REALCOM	M0P_LPUART1			//底层寄存器定义的串口，有别与串口驱动模块的定义

#define BLE_AT_RCV_BUF_SIZE		64
#define BLE_AT_SCAN_MAC_TOTAL	20					//扫描缓冲区数组个数

//UART查询的状态信息
#define BLE_UART_ING          	((s8)-1)           	//查询中
#define BLE_UART_FINISH         ((s8)-2)           	//完成
#define BLE_UART_ERROR          ((s8)-3)           	//错误帧
#define BLE_UART_OK             ((s8)-4)          	//正确帧

#define BLE_UP_BUF_SIZE     256
#define BLE_AT_UP_BUF_SIZE          50
/*************************************普通使用者无需关心下述宏定义******************************************/
//串口接收状态机中的状态变量BLE_S0-BLE_S10
enum{
	BLE_S0 = 10	,
	BLE_S1		,
	BLE_S2		,
	BLE_S3		,
	BLE_S4		,
	BLE_S5		,
	BLE_S6		,
	BLE_S7		,
	BLE_S8		,
	BLE_S9		,
	BLE_S10		,
};



enum
{
	BLE_cst_AT_NOMAL_RCV = 0,//透传接收
	BLE_cst_AT_OK_ERROR		,//正确错误，设置
	BLE_cst_AT_AT			,//AT?
	BLE_cst_AT_QUERY		,
	BLE_cst_AT_SCAN_RCV		,//接收扫描数据
};


//串口通信结构体
typedef struct
{
	u16 send_len;		//记录发送的总长度
	u16 send_count;		//记录发送的当前位置
	u8 *send_buf;		//发送缓冲区首地址
	u8 send_style;		//记录发送指令，确定应答接收方式
	s8 rev_ack_flag;	//接收状态标志位
	u8 ble_rcv_flag;	//蓝牙接收到透传数据
	u8 ble_rev_buf[BLE_UP_BUF_SIZE];
	u16 ble_rcv_len;
//	u16 rev_len;		//蓝牙接收数据长度
} BLE_UART_COMM;

typedef struct
{
	u8 mac[6];			//MAC地址
	u8 adv_data[11];	//广播数据
	mtype16_ rssi;			//信号
} BLE_SLAVE_INFO, *P_BLE_SLAVE_INFO;

//******************************* 外部变量***************************************



//******************************* 外部接口函数***********************************
//#define NBUartReceiveIT BleUartReceiveIT
void BleUartSend(u8 *buf, u16 len, u8 style);
s8 BleCheckAtAck(void);
u8 BleUartChkStyle(void);
void BleUartChangeStyle(u8 style);
void BleUartReceiveIT(void);
u8 BleRcvAtData(u8 **p_data);

#if BLE_CENTRAL_SLAVE_MOD
void BleClrMacBuf(void);			//清除扫描缓存
u8 BleGetScanDevInfo(BLE_SLAVE_INFO **p_data);//获取扫描到的设备信息
u8 BleGetScanCompleteFlag(void);
void BleClrScanCompleteFlag(void);
#endif

u8 BleRcvFrameDataFlag(void);
void BleClrRcvFrameDataFlag(void);
void BleGetUartRcvData(u8 **rev_data,u16 *data_len);
u8 BleCheckIfResetFlag(void);
void BleClrIfResetFlag(void);

#ifdef __cplusplus
}
#endif

#endif	/* __BLE_UART_DRIVER_H */

