#ifndef __ESP8266_H
#define __ESP8266_H

#include "stm32f10x.h"

#define UDP 0
#define TCP 1

//#define ESP_SendString(message) USART2_SendStr(message)
#define ESP_SendString(message) USART2_DMA_SendStr(message)

//EN,IO控制模块掉电,0表示掉电; 1表示正常上电工作
#define RCC_CH_PD 		RCC_APB2Periph_GPIOA
#define PORT_CH_PD		GPIOA
#define PIN_CH_PD		GPIO_Pin_1

//RST复位
#define RCC_RESET 		RCC_APB2Periph_GPIOA
#define PORT_RESET		GPIOA
#define PIN_RESET		GPIO_Pin_0

//EN硬件掉电控制引脚,接3.3V开始工作 
#define ESP_CH_PD_0()	GPIO_ResetBits(PORT_CH_PD,PIN_CH_PD);
#define ESP_CH_PD_1()	GPIO_SetBits(PORT_CH_PD,PIN_CH_PD);

//RST硬件复位引脚
#define ESP_RESET_0()	GPIO_ResetBits(PORT_RESET,PIN_RESET);
#define ESP_RESET_1()	GPIO_SetBits(PORT_RESET,PIN_RESET);

//供外部调用的函数
void ESP_Init(void);
void ESP_HardReset(void);
void ESP_SoftReset(void);
void ESP_PowerOn(void);
void ESP_PowerOff(void);
void ESP_SetSendDataFlag(u8 val);
u8 ESP_GetSendDataFlag(void);
u8 ESP_WaitResponse(char *AckStr, u16 timeout);//等待ESP8266返回指定的应答字符串
u8 ESP_JoinAP(char *ssid, char *pwd, u16 timeout);//加入AP
u8 ESP_StartMux(u8 type, char *addr, u16 port, u16 timeout);//建立tcp链接或者注册UDP端口号,单路模式
u8 ESP_SendTcpUdp(char *str, u16 timeout);//单路连接时(+CIPMUX=0)发送TCP或UDP数据包
u8 ESP_SendTcpMux(u8 chid, char *senddata, u16 timeout);//多路连接时(+CIPMUX=1)发送TCP数据包
u8 ESP_SendData(char *_server, u16 port, char *SendStr);//send the HTTP PUT request
u8 ESP_StartServer(u16 port);
u8 ESP_CloseServer(void);

#endif
