add wifi esp07s

This commit is contained in:
Wang_Weigen 2022-04-13 17:15:30 +08:00
parent e6d53292ca
commit 0605f45908
2 changed files with 294 additions and 270 deletions

View File

@ -0,0 +1,10 @@
#ifndef ADAPTER_WIFI_H
#define ADAPTER_WIFI_H
#define CONFIG_WIFI_RESET (0)
#define CONFIG_WIFI_RESTORE (1)
#define CONFIG_WIFI_BAUDRATE (2)
#endif

View File

@ -20,24 +20,71 @@
#include <adapter.h> #include <adapter.h>
#include <at_agent.h> #include <at_agent.h>
#include "../adapter_wifi.h"
#include <stdlib.h>
#define LEN_PARA_BUF 128 #define LEN_PARA_BUF 128
#define SOCKET_PROTOCOL_TCP (6)
#define SOCKET_PROTOCOL_UDP (17)
static int Esp07sWifiSetDown(struct Adapter *adapter_at); static int Esp07sWifiSetDown(struct Adapter *adapter_at);
/** /**
* @description: enter AT command mode * @description: check AT startup status
* @param at_agent - wifi device agent pointer * @param at_agent - wifi device agent pointer
* @return success: EOK * @return success: EOK
*/ */
static int Esp07sWifiInitAtCmd(ATAgentType at_agent) static int Esp07sWifiTestAtCmd(ATAgentType at_agent)
{ {
ATOrderSend(at_agent, REPLY_TIME_OUT, NULL, "+++"); int ret = 0;
PrivTaskDelay(100);
ATOrderSend(at_agent, REPLY_TIME_OUT, NULL, "a"); ret = AtCmdConfigAndCheck(at_agent, "AT", "OK");
PrivTaskDelay(500); if(ret < 0) {
printf("%s %d cmd[AT] config failed!\n",__func__,__LINE__);
ret = -1;
}
return ret;
}
static int Esp07sUartOpen(struct Adapter *adapter)
{
if (NULL == adapter) {
return -1;
}
/* Open device in read-write mode */
adapter->fd = PrivOpen(ADAPTER_ESP07S_DRIVER, O_RDWR);
if (adapter->fd < 0) {
printf("Esp07sWifiOpen get serial %s fd error\n", ADAPTER_ESP07S_DRIVER);
return -1;
}
/* set serial config, serial_baud_rate = 115200 */
struct SerialDataCfg cfg;
memset(&cfg, 0 ,sizeof(struct SerialDataCfg));
cfg.serial_baud_rate = BAUD_RATE_115200;
cfg.serial_data_bits = DATA_BITS_8;
cfg.serial_stop_bits = STOP_BITS_1;
cfg.serial_parity_mode = PARITY_NONE;
cfg.serial_bit_order = BIT_ORDER_LSB;
cfg.serial_invert_mode = NRZ_NORMAL;
cfg.serial_buffer_size = SERIAL_RB_BUFSZ;
#ifdef ADAPTER_ESP07S_DRIVER_EXT_PORT
cfg.ext_uart_no = ADAPTER_ESP07S_DRIVER_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif
struct PrivIoctlCfg ioctl_cfg;
ioctl_cfg.ioctl_driver_type = SERIAL_TYPE;
ioctl_cfg.args = &cfg;
PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg);
PrivTaskDelay(1000);
printf("esp07s uart config ready\n");
return 0; return 0;
} }
@ -49,11 +96,7 @@ static int Esp07sWifiInitAtCmd(ATAgentType at_agent)
static int Esp07sWifiOpen(struct Adapter *adapter) static int Esp07sWifiOpen(struct Adapter *adapter)
{ {
/*step1: open esp07s serial port*/ /*step1: open esp07s serial port*/
adapter->fd = PrivOpen(ADAPTER_ESP07S_DRIVER, O_RDWR); Esp07sUartOpen(adapter);
if (adapter->fd < 0) {
printf("Esp07sWifiOpen get serial %s fd error\n", ADAPTER_ESP07S_DRIVER);
return -1;
}
/*step2: init AT agent*/ /*step2: init AT agent*/
if (!adapter->agent) { if (!adapter->agent) {
@ -79,7 +122,9 @@ static int Esp07sWifiOpen(struct Adapter *adapter)
*/ */
static int Esp07sWifiClose(struct Adapter *adapter) static int Esp07sWifiClose(struct Adapter *adapter)
{ {
return Esp07sWifiSetDown(adapter); Esp07sWifiSetDown(adapter);
PrivClose(adapter->fd);
return 0;
} }
/** /**
@ -98,8 +143,6 @@ static int Esp07sWifiSend(struct Adapter *adapter, const void *data, size_t len)
printf("Esp07sWifiSend can not find agent!\n"); printf("Esp07sWifiSend can not find agent!\n");
} }
__exit:
return result; return result;
} }
@ -121,8 +164,6 @@ static int Esp07sWifiReceive(struct Adapter *adapter, void *rev_buffer, size_t b
printf("Esp07sWifiReceive can not find agent!\n"); printf("Esp07sWifiReceive can not find agent!\n");
} }
__exit:
return result; return result;
} }
@ -136,46 +177,69 @@ static int Esp07sWifiSetUp(struct Adapter *adapter)
uint8 wifi_ssid[LEN_PARA_BUF] = "AIIT-Guest"; uint8 wifi_ssid[LEN_PARA_BUF] = "AIIT-Guest";
uint8 wifi_pwd[LEN_PARA_BUF] = ""; uint8 wifi_pwd[LEN_PARA_BUF] = "";
char cmd[LEN_PARA_BUF]; char cmd[LEN_PARA_BUF];
int ret = 0;
char *result = NULL;
struct ATAgent *agent = adapter->agent; struct ATAgent *agent = adapter->agent;
/* wait esp07s device startup finish */ /* wait esp07s device startup finish */
PrivTaskDelay(5000); PrivTaskDelay(2000);
Esp07sWifiInitAtCmd(agent); if(Esp07sWifiTestAtCmd(agent) < 0)
{
printf("wifi at cmd startup failed.\n");
return -1;
}
/* config as softAP+station mode */
ret = AtCmdConfigAndCheck(agent, "AT+CWMODE=3", "OK");
if(ret < 0) {
printf("%s %d cmd[AT+CWMODE=3] config failed!\n",__func__,__LINE__);
return -1;
}
/* connect the router */
memset(cmd,0,sizeof(cmd)); memset(cmd,0,sizeof(cmd));
strcpy(cmd,"AT+FCLR\r"); strncpy(cmd,"AT+CWJAP=",strlen("AT+CWJAP="));
ATOrderSend(agent, REPLY_TIME_OUT, NULL, cmd); strncat(cmd,"\"",1);
PrivTaskDelay(20000); strncat(cmd,wifi_ssid,strlen(wifi_ssid));
strncat(cmd,"\"",1);
strncat(cmd,",",1);
strncat(cmd,"\"",1);
strncat(cmd,wifi_pwd,strlen(wifi_pwd));
strncat(cmd,"\"",1);
// strcat(cmd,"\r\n");
Esp07sWifiInitAtCmd(agent); ret = AtCmdConfigAndCheck(agent, cmd, "OK");
if(ret < 0) {
printf("%s %d cmd[%s] connect[%s] failed!\n",__func__,__LINE__,cmd,wifi_ssid);
return -1;
}
memset(cmd,0,sizeof(cmd)); /* check the wifi ip address */
strcpy(cmd,"AT+WSSSID="); ATReplyType reply = CreateATReply(256);
strcat(cmd,wifi_ssid); if (NULL == reply) {
strcat(cmd,"\r"); printf("%s %d at_create_resp failed!\n",__func__,__LINE__);
ATOrderSend(agent, REPLY_TIME_OUT, NULL, cmd); return -1;
PrivTaskDelay(2500); }
ret = ATOrderSend(agent, REPLY_TIME_OUT, reply, "AT+CIFSR");
if(ret < 0){
printf("%s %d ATOrderSend AT+CIFSR failed.\n",__func__,__LINE__);
ret = -1;
goto __exit;
}
memset(cmd,0,sizeof(cmd)); result = GetReplyText(reply);
strcpy(cmd,"AT+WSKEY=OPEN,NONE,"); if (!result) {
strcat(cmd,wifi_pwd); printf("%s %n get reply failed.\n",__func__,__LINE__);
strcat(cmd,"\r"); ret = -1;
ATOrderSend(agent, REPLY_TIME_OUT, NULL, cmd); goto __exit;
PrivTaskDelay(2500); }
printf("[%s]\n", result);
memset(cmd,0,sizeof(cmd)); __exit:
strcpy(cmd,"AT+WMODE=sta\r"); DeleteATReply(reply);
ATOrderSend(agent, REPLY_TIME_OUT, NULL, cmd);
PrivTaskDelay(2500);
memset(cmd,0,sizeof(cmd)); return ret;
strcat(cmd,"AT+Z\r");
ATOrderSend(agent, REPLY_TIME_OUT, NULL, cmd);
PrivTaskDelay(10000);
return 0;
} }
/** /**
@ -185,10 +249,8 @@ static int Esp07sWifiSetUp(struct Adapter *adapter)
*/ */
static int Esp07sWifiSetDown(struct Adapter *adapter) static int Esp07sWifiSetDown(struct Adapter *adapter)
{ {
Esp07sWifiInitAtCmd(adapter->agent); ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+RESTORE");
PrivTaskDelay(2000);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+FCLR\r");
PrivTaskDelay(20000);
return 0; return 0;
} }
@ -203,50 +265,31 @@ static int Esp07sWifiSetDown(struct Adapter *adapter)
*/ */
static int Esp07sWifiSetAddr(struct Adapter *adapter, const char *ip, const char *gateway, const char *netmask) static int Esp07sWifiSetAddr(struct Adapter *adapter, const char *ip, const char *gateway, const char *netmask)
{ {
#define ESP07S_SET_ADDR_EXPRESSION "+ok=%[^,],%[^,],%[^,],%[^,]\r" int ret = 0;
char *dhcp_mode =NULL; char cmd[LEN_PARA_BUF];
char *ip_str = NULL;
char *gw_str = NULL;
char *mask_str = NULL;
dhcp_mode = (char *) PrivCalloc(1, 8); /* e.g. AT+CIPSTA_DEF="192.168.6.100","192.168.6.1","255.255.255.0" */
ip_str = (char *) PrivCalloc(1, 17); memset(cmd,0,sizeof(cmd));
gw_str = (char *) PrivCalloc(1, 17); strncpy(cmd,"AT+CIPAP_DEF=",strlen(" AT+CIPAP_DEF="));
mask_str = (char *) PrivCalloc(1, 17); strncat(cmd,"\"",1);
strncat(cmd,ip,strlen(ip));
strncat(cmd,"\"",1);
strncat(cmd,",",1);
strncat(cmd,"\"",1);
strncat(cmd,gateway,strlen(gateway));
strncat(cmd,"\"",1);
strncat(cmd,",",1);
strncat(cmd,"\"",1);
strncat(cmd,netmask,strlen(netmask));
strncat(cmd,"\"",1);
Esp07sWifiInitAtCmd(adapter->agent); ret = AtCmdConfigAndCheck(adapter->agent, cmd, "OK");
if(ret < 0) {
x_err_t result = EOK; printf("%s %d cmd[%s] config ip failed!\n",__func__,__LINE__,cmd);
return -1;
ATReplyType reply = CreateATReply(64);
if (NULL == reply) {
printf("at_create_resp failed ! \n");
result = ENOMEMORY;
goto __exit;
} }
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+WANN=%s,%s,%s,%s\r", "dhcp", ip, netmask, gateway); return 0;
PrivTaskDelay(2500);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, "AT+WANN\r");
PrivTaskDelay(2500);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+Z\r");
PrivTaskDelay(10000);
const char * result_buf = GetReplyText(reply);
char* str = strstr(result_buf, "+ok=");
ParseATReply(str, ESP07S_SET_ADDR_EXPRESSION, dhcp_mode,ip_str,mask_str,gw_str);
printf("after configure:\n mode:%s\n ip:%s\n netmask:%s\n gateway:%s\n", dhcp_mode, ip_str, mask_str, gw_str);
__exit:
if (reply) {
DeleteATReply(reply);
}
return result;
} }
/** /**
@ -257,46 +300,24 @@ __exit:
*/ */
static int Esp07sWifiPing(struct Adapter *adapter, const char *destination) static int Esp07sWifiPing(struct Adapter *adapter, const char *destination)
{ {
char *ping_result = NONE; char cmd[LEN_PARA_BUF];
char *dst = NONE; int ret = 0;
ping_result = (char *) PrivCalloc(1, 17);
dst = (char *) PrivCalloc(1, 17);
strcpy(dst, destination);
strcat(dst, "\r");
Esp07sWifiInitAtCmd(adapter->agent); memset(cmd,0,sizeof(cmd));
strncpy(cmd,"AT+PING=",strlen("AT+PING="));
strncat(cmd,"\"",1);
strncat(cmd,destination,strlen(destination));
strncat(cmd,"\"",1);
uint32 result = EOK; ret = AtCmdConfigAndCheck(adapter->agent, cmd, "OK"); ///< config as softAP+station mode
if(ret < 0) {
ATReplyType reply = CreateATReply(64); printf("%s %d ping [%s] failed!\n",__func__,__LINE__,destination);
if (NULL == reply) { return -1;
printf("at_create_resp failed ! \n");
result = ENOMEMORY;
goto __exit;
} }
//ping baidu.com printf("ping [%s] ok\n", destination);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, "AT+PING=%s", dst);
PrivTaskDelay(2500); return 0;
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+Z\r");
PrivTaskDelay(10000);
const char * result_buf = GetReplyText(reply);
char* str = strstr(result_buf, "+ok=");
ParseATReply(str, "+ok=%s\r", ping_result);
printf("ping www.baidu.com(36.152.44.95) result is:%s\n", ping_result);
__exit:
if (reply) {
DeleteATReply(reply);
}
return result;
} }
/** /**
@ -306,97 +327,7 @@ __exit:
*/ */
static int Esp07sWifiNetstat(struct Adapter *adapter) static int Esp07sWifiNetstat(struct Adapter *adapter)
{ {
#define ESP07S_NETSTAT_RESP_SIZE 320 return 0;
#define ESP07S_NETSTAT_TYPE_SIZE 10
#define ESP07S_NETSTAT_IPADDR_SIZE 17
#define ESP07S_WANN_EXPRESSION "+ok=%[^,],%[^,],%[^,],%[^,]\r"
#define ESP07S_LANN_EXPRESSION "+ok=%[^,],%[^,]\r"
#define ESP07S_WMODE_EXPRESSION "+ok=%s\r"
ATReplyType reply = NULL;
struct ATAgent *agent = adapter->agent;
uint32 result;
char * result_buf = NULL;
char * str = NULL;
/* sta/ap */
char *work_mode = NULL;
/* dhcp/static */
char *ip_mode = NULL;
char *local_ipaddr = NULL;
char *gateway = NULL;
char *netmask = NULL;
local_ipaddr = (char *) PrivCalloc(1, ESP07S_NETSTAT_IPADDR_SIZE);
gateway = (char *) PrivCalloc(1, ESP07S_NETSTAT_IPADDR_SIZE);
netmask = (char *) PrivCalloc(1, ESP07S_NETSTAT_IPADDR_SIZE);
work_mode = (char *) PrivCalloc(1, ESP07S_NETSTAT_IPADDR_SIZE);
ip_mode = (char *) PrivCalloc(1, ESP07S_NETSTAT_IPADDR_SIZE);
reply = CreateATReply(ESP07S_NETSTAT_RESP_SIZE);
if (reply == NULL) {
result = ENOMEMORY;
goto __exit;
}
ATOrderSend(agent, REPLY_TIME_OUT, NULL, "+++");
PrivTaskDelay(100);
ATOrderSend(agent, REPLY_TIME_OUT, NULL, "a");
PrivTaskDelay(2500);
ATOrderSend(agent, REPLY_TIME_OUT, reply, "AT+WMODE\r");
PrivTaskDelay(2500);
result_buf = GetReplyText(reply);
str = strstr(result_buf, "+ok=");
/* parse the third line of response data, get the network connection information */
ParseATReply(str, ESP07S_WMODE_EXPRESSION, work_mode);
if (work_mode[0]=='S') {
if (ATOrderSend(agent, REPLY_TIME_OUT, reply, "AT+WANN\r") < 0) {
goto __exit;
}
PrivTaskDelay(2500);
GetReplyText(reply);
str = strstr(result_buf, "+ok=");
/* parse the third line of response data, get the network connection information */
ParseATReply(str, ESP07S_WANN_EXPRESSION, ip_mode, local_ipaddr, netmask, gateway);
} else {
ATOrderSend(agent, REPLY_TIME_OUT, reply, "AT+LANN\r");
PrivTaskDelay(2500);
GetReplyText(reply);
str = strstr(result_buf, "+ok=");
/* parse the third line of response data, get the network connection information */
ParseATReply(str, ESP07S_LANN_EXPRESSION, local_ipaddr, netmask);
}
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+Z\r");
PrivTaskDelay(10000);
printf("work mode: %s\n", work_mode);
if (work_mode[0]=='S')
printf("ip mode: %s\nlocal ip: %s\nnetmask: %s\ngateway: %s\n", ip_mode, local_ipaddr, netmask, gateway);
else
printf("local ip: %s\nnetmask: %s\n", local_ipaddr, netmask);
return EOK;
__exit:
if (reply)
DeleteATReply(reply);
if (local_ipaddr)
PrivFree(local_ipaddr);
if (netmask)
PrivFree(netmask);
if (gateway)
PrivFree(gateway);
if (work_mode)
PrivFree(work_mode);
} }
/** /**
@ -410,79 +341,161 @@ __exit:
*/ */
static int Esp07sWifiConnect(struct Adapter *adapter, enum NetRoleType net_role, const char *ip, const char *port, enum IpType ip_type) static int Esp07sWifiConnect(struct Adapter *adapter, enum NetRoleType net_role, const char *ip, const char *port, enum IpType ip_type)
{ {
int result = EOK; int ret = EOK;
ATReplyType reply = NONE;
char cmd[LEN_PARA_BUF]; char cmd[LEN_PARA_BUF];
struct ATAgent *agent = adapter->agent; struct ATAgent *agent = adapter->agent;
reply = CreateATReply(64);
if (reply == NONE) {
printf("no memory for reply struct.");
return ENOMEMORY;
}
Esp07sWifiInitAtCmd(adapter->agent);
memset(cmd,0,sizeof(cmd)); memset(cmd,0,sizeof(cmd));
strcpy(cmd,"AT+NETP=TCP,"); if(adapter->socket.protocal == SOCKET_PROTOCOL_TCP && net_role == CLIENT) //esp07s as tcp client to connect server
if(net_role == CLIENT)
strcat(cmd,"CLIENT,");
else if(net_role == SERVER)
strcat(cmd,"SERVER,");
strcat(cmd,port);
strcat(cmd,",");
if(ip_type == IPV4)
strcat(cmd,ip);
else if(ip_type == IPV6)
{ {
//e.g. AT+CIPSTART="TCP","192.168.3.116",8080 protocol, server IP and port
strncpy(cmd,"AT+CIPSTART=\"TCP\",",strlen("AT+CIPSTART=\"TCP\","));
strncat(cmd,"\"",1);
strncpy(cmd, ip, strlen(ip));
strncat(cmd, "\"", 1);
strncat(cmd, ",", 1);
strncat(cmd, port, strlen(port));
ret = AtCmdConfigAndCheck(agent, cmd, "OK");
if(ret < 0) {
printf("%s %d tcp connect [%s] failed!\n",__func__,__LINE__,ip);
return -1;
} }
strcat(cmd,"\r"); }
ATOrderSend(agent, REPLY_TIME_OUT, NULL, cmd); else if(adapter->socket.protocal == SOCKET_PROTOCOL_UDP)
PrivTaskDelay(2500); {
//e.g. AT+CIPSTART="UDP","192.168.3.116",8080,2233,0 UDP protocol, server IP, port,local port,udp mode
strncpy(cmd,"AT+CIPSTART=\"UDP\",",strlen("AT+CIPSTART=\"UDP\","));
strncat(cmd,"\"",1);
strncpy(cmd, ip, strlen(ip));
strncat(cmd, "\"", 1);
strncat(cmd, ",", 1);
strncat(cmd, port, strlen(port));
strncat(cmd, ",", 1);
strncat(cmd, "2233", strlen("2233")); ///< local port
strncat(cmd, ",", 1);
strncat(cmd, "0", 1); ///< udp transparent transmission mode must be 0
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+Z\r"); ret = AtCmdConfigAndCheck(agent, cmd, "OK");
PrivTaskDelay(10000); if(ret < 0) {
printf("%s %d udp connect [%s] failed!\n",__func__,__LINE__,ip);
return -1;
}
}
ret = AtCmdConfigAndCheck(agent, "AT+CIPMODE=1", "OK"); ///< config as transparent transmission
if(ret < 0) {
printf("%s %d cmd[%s] config as transparent transmission failed!\n",__func__,__LINE__,cmd);
return -1;
}
ATOrderSend(agent, REPLY_TIME_OUT, NULL, "AT+CIPSEND");
printf("[%s] connection config as transparent transmission\n",adapter->socket.protocal == SOCKET_PROTOCOL_UDP ? "udp" : "tcp");
adapter->net_role = net_role; adapter->net_role = net_role;
__exit: return 0;
if (reply) {
DeleteATReply(reply);
} }
return result; /**
* @description: wifi disconnect function
* @param adapter - wifi device pointer
* @return success: 0, failure: -1
*/
static int Esp07sWifiDisconnect(struct Adapter *adapter)
{
int ret = EOK;
char cmd[LEN_PARA_BUF];
struct ATAgent *agent = adapter->agent;
memset(cmd,0,sizeof(cmd));
/* step1: stop transparent transmission mode */
ATOrderSend(agent, REPLY_TIME_OUT, NULL, "+++");
/* step2: exit transparent transmission mode */
ret = AtCmdConfigAndCheck(agent, "AT+CIPMODE=0", "OK");
if(ret < 0) {
printf("%s %d cmd[AT+CIPMODE=0] exit failed!\n",__func__,__LINE__);
return -1;
}
/* step3: disconnect */
ret = AtCmdConfigAndCheck(agent, "AT+CIPCLOSE", "OK");
if(ret < 0) {
printf("%s %d cmd [AT+CIPCLOSE] disconnect failed!\n",__func__,__LINE__);
return -1;
}
return 0;
} }
static int Esp07sWifiIoctl(struct Adapter *adapter, int cmd, void *args) static int Esp07sWifiIoctl(struct Adapter *adapter, int cmd, void *args)
{ {
if (OPE_INT != cmd) { int32_t ret = 0;
printf("Esp07sWifiIoctl only support OPE_INT, do not support %d\n", cmd); char baud_str[LEN_PARA_BUF];
return -1; struct SerialDataCfg cfg;
} char at_cmd[LEN_PARA_BUF];
uint32_t baud_rate = 0 ;
uint32_t baud_rate = *((uint32_t *)args); switch (cmd)
{
case CONFIG_WIFI_RESET: /* reset wifi */
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+RST");
break;
case CONFIG_WIFI_RESTORE: /* resore wifi */
ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, "AT+RESTORE");
break;
case CONFIG_WIFI_BAUDRATE:
/* step1: config mcu uart*/
baud_rate = *((uint32_t *)args);
memset(at_cmd, 0, sizeof(at_cmd));
memset(baud_str, 0, sizeof(baud_str));
memset(&cfg, 0 ,sizeof(struct SerialDataCfg));
cfg.serial_baud_rate = baud_rate;
cfg.serial_data_bits = DATA_BITS_8;
cfg.serial_stop_bits = STOP_BITS_1;
cfg.serial_parity_mode = PARITY_NONE;
cfg.serial_bit_order = BIT_ORDER_LSB;
cfg.serial_invert_mode = NRZ_NORMAL;
cfg.serial_buffer_size = SERIAL_RB_BUFSZ;
struct SerialDataCfg serial_cfg;
memset(&serial_cfg, 0 ,sizeof(struct SerialDataCfg));
serial_cfg.serial_baud_rate = baud_rate;
serial_cfg.serial_data_bits = DATA_BITS_8;
serial_cfg.serial_stop_bits = STOP_BITS_1;
serial_cfg.serial_buffer_size = SERIAL_RB_BUFSZ;
serial_cfg.serial_parity_mode = PARITY_NONE;
serial_cfg.serial_bit_order = BIT_ORDER_LSB;
serial_cfg.serial_invert_mode = NRZ_NORMAL;
#ifdef ADAPTER_ESP07S_DRIVER_EXT_PORT #ifdef ADAPTER_ESP07S_DRIVER_EXT_PORT
serial_cfg.ext_uart_no = ADAPTER_ESP07S_DRIVER_EXT_PORT; cfg.ext_uart_no = ADAPTER_ESP07S_DRIVER_EXT_PORT;
serial_cfg.port_configure = PORT_CFG_INIT; cfg.port_configure = PORT_CFG_INIT;
#endif #endif
struct PrivIoctlCfg ioctl_cfg; struct PrivIoctlCfg ioctl_cfg;
ioctl_cfg.ioctl_driver_type = SERIAL_TYPE; ioctl_cfg.ioctl_driver_type = SERIAL_TYPE;
ioctl_cfg.args = &serial_cfg; ioctl_cfg.args = &cfg;
PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg);
printf("Esp07sWifiIoctl success\n");
return 0; /* step2: config wifi uart*/
itoa(baud_rate, baud_str, 10);
strncpy(at_cmd, "AT+UART_DEF=", strlen("AT+UART_DEF="));
strncat(at_cmd, baud_str, strlen(baud_str));
strncat(at_cmd, ",", 1);
strncat(at_cmd, "8", 1);
strncat(at_cmd, ",", 1);
strncat(at_cmd, "1", 1);
strncat(at_cmd, ",", 1);
strncat(at_cmd, "0", 1);
strncat(at_cmd, ",", 1);
strncat(at_cmd, "3", 1);
ret = AtCmdConfigAndCheck(adapter->agent, at_cmd, "OK");
if(ret < 0) {
printf("%s %d cmd [%s] config uart failed!\n",__func__,__LINE__,at_cmd);
ret = -1;
}
break;
default:
ret = -1;
break;
}
return ret;
} }
static const struct IpProtocolDone esp07s_wifi_done = static const struct IpProtocolDone esp07s_wifi_done =
@ -500,7 +513,7 @@ static const struct IpProtocolDone esp07s_wifi_done =
.connect = Esp07sWifiConnect, .connect = Esp07sWifiConnect,
.send = Esp07sWifiSend, .send = Esp07sWifiSend,
.recv = Esp07sWifiReceive, .recv = Esp07sWifiReceive,
.disconnect = NULL, .disconnect = Esp07sWifiDisconnect,
}; };
/** /**
@ -510,13 +523,14 @@ static const struct IpProtocolDone esp07s_wifi_done =
AdapterProductInfoType Esp07sWifiAttach(struct Adapter *adapter) AdapterProductInfoType Esp07sWifiAttach(struct Adapter *adapter)
{ {
struct AdapterProductInfo *product_info = PrivMalloc(sizeof(struct AdapterProductInfo)); struct AdapterProductInfo *product_info = PrivMalloc(sizeof(struct AdapterProductInfo));
if (!product_info) { if (!product_info)
{
printf("Esp07sWifiAttach Attach malloc product_info error\n"); printf("Esp07sWifiAttach Attach malloc product_info error\n");
PrivFree(product_info); PrivFree(product_info);
return NULL; return NULL;
} }
strcpy(product_info->model_name, ADAPTER_WIFI_ESP07S); strncpy(product_info->model_name, ADAPTER_WIFI_ESP07S, strlen(ADAPTER_WIFI_ESP07S));
product_info->model_done = (void *)&esp07s_wifi_done; product_info->model_done = (void *)&esp07s_wifi_done;