/**
* author wulianwei
* title 通信模块AT基础指令
*/
#include "stm32f10x.h"
#include "sys.h"
#include "at.h"
//C库
#include <string.h>
#include <stdio.h>

extern uart_recv_t uart_recv;


//==========================================================
//	函数名称：	at_send_simple_cmd
//
//	函数功能：	发送命令
//
//	入口参数：	cmd：命令
//
//
//	说明：		
//==========================================================
void at_send_simple_cmd(char *cmd)
{
	
	uart_recv_clear();
	Usart_SendString(USART2, (unsigned char *)cmd, strlen((const char *)cmd));	
}


//==========================================================
//	函数名称：	at_send_cmd
//
//	函数功能：	发送命令
//
//	入口参数：	cmd：命令
//				res：需要检查的返回指令
//
//	返回参数：	0-成功	-1-失败
//
//	说明：		
//==========================================================
int at_send_cmd(char *cmd, char *res)
{
	
	int timeOut = 250;
	uart_recv_clear();
	Usart_SendString(USART2, (unsigned char *)cmd, strlen((const char *)cmd));
	if(!uart_recv_match_wait(res,timeOut))
	{
		//UsartPrintf(USART_DEBUG,"指令返回%d:%s\r\n",uart_recv.len,uart_recv.buf);
		uart_recv_clear();
		return 0;
	}
	uart_recv_clear();
	return -1;

}

//==========================================================
//	函数名称：	at_send_cmd
//
//	函数功能：	发送命令
//
//	入口参数：	cmd：命令
//				data：存储返回结果
//        size: 结果大小
//
//
//	说明：		
//==========================================================
void at_send_cmd_back(char *cmd, char data[], int size)
{
	
	int timeOut = 250;
	memset(data,0,size);
	uart_recv_clear();
	Usart_SendString(USART2, (unsigned char *)cmd, strlen(cmd));
	
	uart_recv_wait(timeOut);
	if(uart_recv.recv_flag == REV_OK)
	{
		snprintf((char*)data,size,"%s",(char*)uart_recv.buf);
		uart_recv_clear();
	}
	
}


//==========================================================
//	函数名称：	at_send_cmd_match_back
//
//	函数功能：	发送命令
//
//	入口参数：	cmd：命令
//        res: 匹配的字符串
//				data：存储返回结果
//        size: 结果大小
//
//	返回参数：	0-成功	-1-失败
//	说明：		
//==========================================================
int at_send_cmd_match_back(char *cmd,char *res, char data[], int size)
{
	
	int timeOut = 250;
	memset(data,0,size);
	uart_recv_clear();
	Usart_SendString(USART2, (unsigned char *)cmd, strlen(cmd));
	
	if(!uart_recv_match_wait(res,timeOut))
	{
		snprintf((char*)data,size,"%s",(char*)uart_recv.buf);
		uart_recv_clear();
		return 0;
	}
	uart_recv_clear();
	return -1;
}

//==========================================================
//	函数名称：	at_send_cmd_back_wait
//
//	函数功能：	发送命令
//
//	入口参数：	cmd：命令
//				data：存储返回结果
//        size: 结果大小
//        wait: 等待返回时间
//
//
//	说明：		
//==========================================================
void at_send_cmd_back_wait(char *cmd, char data[], int size, int wait)
{
	memset(data,0,size);
	uart_recv_clear();
	Usart_SendString(USART2, (unsigned char *)cmd, strlen((const char *)cmd));
	delay_ms(wait);
	snprintf((char*)data,size,"%s",(char*)uart_recv.buf);
  uart_recv_clear();
}

//==========================================================
//	函数名称：	at_send_byte
//
//	函数功能：	数据模式下发送数据
//
//	入口参数：	data: 数据
//				size: 数据大小
//
//	返回参数：	0-成功	-1-失败
//
//	说明：		
//==========================================================
int at_send_byte(char *data, int size, char *res)
{
	
	int timeOut = 250;
  
	uart_recv_clear();
	Usart_SendString(USART2, (unsigned char *)data, size);

	if(!uart_recv_match_wait(res,timeOut))
	{
		//uart_recv_clear();
		return 0;
	}
	//uart_recv_clear();
	return -1;
}
