void esp8266Tx(char *str)
{
	usart0Print("AT+CIPSEND=0,");
	usart0LongInt(strLen(str));
	usart0Print("\r\n");
	/* How to make sure get ">"? */
	usart0Print(str);
}
boolean esp8266Cmd(char *cmd, char *response)
{
	INT8U err;
	char *str;
	
	esp8266RxBufferFlash();
	usart0Print(cmd);
	usart0Print("\r\n");
	while (1) {
		err = usart0Read(&str, ESP8266_SHORT_TIMEOUT);
		if (err == OS_ERR_TIMEOUT) {
			return FALSE;
		} else if (strCmp(str, response)) {
			return TRUE;
		}
	}
}
void serial(void *pdata)
{
	char *str;

	(void)pdata;
	while (1) {
		usart0Read(&str);
		usart0Print(str);
	}
}
boolean esp8266ConnectAP(char *name, char *password)
{
	INT8U err;
	char *str;
	
	esp8266RxBufferFlash();
	usart0Print("AT+CWJAP=\"");
	usart0Print(name);
	usart0Print("\",\"");
	usart0Print(password);
	usart0Print("\"\r\n");
	while (1) {
		err = usart0Read(&str, ESP8266_LONG_TIMEOUT);
		if (err == OS_ERR_TIMEOUT) {
			return FALSE;
		} else if (strCmp(str, "OK")) {
			return TRUE;
		} else if (strCmp(str, "FAIL")) {
			return FALSE;
		}
	}
}
boolean esp8266GetIP(char *buf)
{
	INT8U err;
	char *str;
	boolean result;
	
	result = FALSE;
	esp8266RxBufferFlash();
	usart0Print("AT+CIFSR\r\n");
	while (1) {
		err = usart0Read(&str, ESP8266_SHORT_TIMEOUT);
		if (err == OS_ERR_TIMEOUT || strCmp(str, "OK")) {
			break;
		} else if (*str >= '0' && *str <= '9') {
			if (!strCmp(str, "192.168.4.1")) {
				strCpy(str, buf);
				result = TRUE;
			}
		}
	}
	return result;
}