@@ -89,6 +89,7 @@ ESP8266Interface::ESP8266Interface()
8989 _sock_i[i].open = false ;
9090 _sock_i[i].sport = 0 ;
9191 }
92+ _esp.uart_enable_input (false );
9293}
9394#endif
9495
@@ -125,6 +126,7 @@ ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug, PinName r
125126 _sock_i[i].open = false ;
126127 _sock_i[i].sport = 0 ;
127128 }
129+ _esp.uart_enable_input (false );
128130}
129131
130132ESP8266Interface::~ESP8266Interface ()
@@ -224,13 +226,15 @@ void ESP8266Interface::_connect_async()
224226 nsapi_error_t status = _init ();
225227 if (status != NSAPI_ERROR_OK) {
226228 _connect_retval = status;
229+ _esp.uart_enable_input (false );
227230 _software_conn_stat = IFACE_STATUS_DISCONNECTED;
228231 // _conn_stat_cb will be called from refresh_conn_state_cb
229232 return ;
230233 }
231234
232235 if (!_esp.dhcp (true , 1 )) {
233236 _connect_retval = NSAPI_ERROR_DHCP_FAILURE;
237+ _esp.uart_enable_input (false );
234238 _software_conn_stat = IFACE_STATUS_DISCONNECTED;
235239 // _conn_stat_cb will be called from refresh_conn_state_cb
236240 return ;
@@ -253,6 +257,7 @@ void ESP8266Interface::_connect_async()
253257 _connect_retval = NSAPI_ERROR_CONNECTION_TIMEOUT;
254258 }
255259 if (_connect_retval != NSAPI_ERROR_OK) {
260+ _esp.uart_enable_input (false );
256261 _software_conn_stat = IFACE_STATUS_DISCONNECTED;
257262 }
258263 _if_connected.notify_all ();
@@ -304,6 +309,7 @@ int ESP8266Interface::connect()
304309 _cmutex.lock ();
305310 }
306311 _software_conn_stat = IFACE_STATUS_CONNECTING;
312+ _esp.uart_enable_input (true );
307313 _connect_retval = NSAPI_ERROR_NO_CONNECTION;
308314 MBED_ASSERT (!_connect_event_id);
309315 _conn_timer.stop ();
@@ -404,6 +410,7 @@ void ESP8266Interface::_disconnect_async()
404410 }
405411
406412 _power_off ();
413+ _software_conn_stat = IFACE_STATUS_DISCONNECTED;
407414 _if_connected.notify_all ();
408415
409416 } else {
@@ -418,8 +425,8 @@ void ESP8266Interface::_disconnect_async()
418425 }
419426 }
420427 _cmutex.unlock ();
421- _software_conn_stat = IFACE_STATUS_DISCONNECTED;
422428
429+ _esp.uart_enable_input (false );
423430 if (_disconnect_event_id == 0 ) {
424431 if (_conn_stat_cb) {
425432 _conn_stat_cb (NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _conn_stat);
@@ -481,17 +488,31 @@ int ESP8266Interface::disconnect()
481488
482489const char *ESP8266Interface::get_ip_address ()
483490{
491+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
492+ _esp.uart_enable_input (true );
493+ }
494+
484495 const char *ip_buff = _esp.ip_addr ();
485496 if (!ip_buff || strcmp (ip_buff, " 0.0.0.0" ) == 0 ) {
486- return NULL ;
497+ ip_buff = NULL ;
498+ }
499+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
500+ _esp.uart_enable_input (false );
487501 }
488-
489502 return ip_buff;
490503}
491504
492505const char *ESP8266Interface::get_mac_address ()
493506{
494- return _esp.mac_addr ();
507+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
508+ _esp.uart_enable_input (true );
509+ }
510+ const char *ret = _esp.mac_addr ();
511+
512+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
513+ _esp.uart_enable_input (false );
514+ }
515+ return ret;
495516}
496517
497518const char *ESP8266Interface::get_gateway ()
@@ -506,7 +527,17 @@ const char *ESP8266Interface::get_netmask()
506527
507528int8_t ESP8266Interface::get_rssi ()
508529{
509- return _esp.rssi ();
530+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
531+ _esp.uart_enable_input (true );
532+ }
533+
534+ int8_t ret = _esp.rssi ();
535+
536+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
537+ _esp.uart_enable_input (false );
538+ }
539+
540+ return ret;
510541}
511542
512543int ESP8266Interface::scan (WiFiAccessPoint *res, unsigned count)
@@ -523,13 +554,25 @@ int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count, scan_mode mode,
523554 return NSAPI_ERROR_PARAMETER;
524555 }
525556
557+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
558+ _esp.uart_enable_input (true );
559+ }
560+
526561 nsapi_error_t status = _init ();
527562 if (status != NSAPI_ERROR_OK) {
528563 return status;
564+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
565+ _esp.uart_enable_input (false );
566+ }
529567 }
530568
531- return _esp.scan (res, count, (mode == SCANMODE_ACTIVE ? ESP8266::SCANMODE_ACTIVE : ESP8266::SCANMODE_PASSIVE),
532- t_max, t_min);
569+ int ret = _esp.scan (res, count, (mode == SCANMODE_ACTIVE ? ESP8266::SCANMODE_ACTIVE : ESP8266::SCANMODE_PASSIVE),
570+ t_max, t_min);
571+
572+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
573+ _esp.uart_enable_input (false );
574+ }
575+ return ret;
533576}
534577
535578bool ESP8266Interface::_get_firmware_ok ()
@@ -555,6 +598,7 @@ nsapi_error_t ESP8266Interface::_init(void)
555598 if (!_initialized) {
556599 _pwr_pin.power_off ();
557600 _pwr_pin.power_on ();
601+
558602 if (_reset () != NSAPI_ERROR_OK) {
559603 return NSAPI_ERROR_DEVICE_ERROR;
560604 }
0 commit comments