@@ -91,6 +91,7 @@ ESP8266Interface::ESP8266Interface()
91
91
_sock_i[i].open = false ;
92
92
_sock_i[i].sport = 0 ;
93
93
}
94
+ _esp.uart_enable_input (false );
94
95
}
95
96
#endif
96
97
@@ -127,6 +128,7 @@ ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug, PinName r
127
128
_sock_i[i].open = false ;
128
129
_sock_i[i].sport = 0 ;
129
130
}
131
+ _esp.uart_enable_input (false );
130
132
}
131
133
132
134
ESP8266Interface::~ESP8266Interface ()
@@ -226,13 +228,15 @@ void ESP8266Interface::_connect_async()
226
228
nsapi_error_t status = _init ();
227
229
if (status != NSAPI_ERROR_OK) {
228
230
_connect_retval = status;
231
+ _esp.uart_enable_input (false );
229
232
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
230
233
// _conn_stat_cb will be called from refresh_conn_state_cb
231
234
return ;
232
235
}
233
236
234
237
if (!_esp.dhcp (true , 1 )) {
235
238
_connect_retval = NSAPI_ERROR_DHCP_FAILURE;
239
+ _esp.uart_enable_input (false );
236
240
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
237
241
// _conn_stat_cb will be called from refresh_conn_state_cb
238
242
return ;
@@ -255,6 +259,7 @@ void ESP8266Interface::_connect_async()
255
259
_connect_retval = NSAPI_ERROR_CONNECTION_TIMEOUT;
256
260
}
257
261
if (_connect_retval != NSAPI_ERROR_OK) {
262
+ _esp.uart_enable_input (false );
258
263
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
259
264
}
260
265
_if_connected.notify_all ();
@@ -306,6 +311,7 @@ int ESP8266Interface::connect()
306
311
_cmutex.lock ();
307
312
}
308
313
_software_conn_stat = IFACE_STATUS_CONNECTING;
314
+ _esp.uart_enable_input (true );
309
315
_connect_retval = NSAPI_ERROR_NO_CONNECTION;
310
316
MBED_ASSERT (!_connect_event_id);
311
317
_conn_timer.stop ();
@@ -406,6 +412,7 @@ void ESP8266Interface::_disconnect_async()
406
412
}
407
413
408
414
_power_off ();
415
+ _software_conn_stat = IFACE_STATUS_DISCONNECTED;
409
416
_if_connected.notify_all ();
410
417
411
418
} else {
@@ -420,8 +427,8 @@ void ESP8266Interface::_disconnect_async()
420
427
}
421
428
}
422
429
_cmutex.unlock ();
423
- _software_conn_stat = IFACE_STATUS_DISCONNECTED;
424
430
431
+ _esp.uart_enable_input (false );
425
432
if (_disconnect_event_id == 0 ) {
426
433
if (_conn_stat_cb) {
427
434
_conn_stat_cb (NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _conn_stat);
@@ -483,17 +490,31 @@ int ESP8266Interface::disconnect()
483
490
484
491
const char *ESP8266Interface::get_ip_address ()
485
492
{
493
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
494
+ _esp.uart_enable_input (true );
495
+ }
496
+
486
497
const char *ip_buff = _esp.ip_addr ();
487
498
if (!ip_buff || strcmp (ip_buff, " 0.0.0.0" ) == 0 ) {
488
- return NULL ;
499
+ ip_buff = NULL ;
500
+ }
501
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
502
+ _esp.uart_enable_input (false );
489
503
}
490
-
491
504
return ip_buff;
492
505
}
493
506
494
507
const char *ESP8266Interface::get_mac_address ()
495
508
{
496
- return _esp.mac_addr ();
509
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
510
+ _esp.uart_enable_input (true );
511
+ }
512
+ const char *ret = _esp.mac_addr ();
513
+
514
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
515
+ _esp.uart_enable_input (false );
516
+ }
517
+ return ret;
497
518
}
498
519
499
520
const char *ESP8266Interface::get_gateway ()
@@ -514,7 +535,17 @@ char *ESP8266Interface::get_interface_name(char *interface_name)
514
535
515
536
int8_t ESP8266Interface::get_rssi ()
516
537
{
517
- return _esp.rssi ();
538
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
539
+ _esp.uart_enable_input (true );
540
+ }
541
+
542
+ int8_t ret = _esp.rssi ();
543
+
544
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
545
+ _esp.uart_enable_input (false );
546
+ }
547
+
548
+ return ret;
518
549
}
519
550
520
551
int ESP8266Interface::scan (WiFiAccessPoint *res, unsigned count)
@@ -531,13 +562,25 @@ int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count, scan_mode mode,
531
562
return NSAPI_ERROR_PARAMETER;
532
563
}
533
564
565
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
566
+ _esp.uart_enable_input (true );
567
+ }
568
+
534
569
nsapi_error_t status = _init ();
535
570
if (status != NSAPI_ERROR_OK) {
536
571
return status;
572
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
573
+ _esp.uart_enable_input (false );
574
+ }
537
575
}
538
576
539
- return _esp.scan (res, count, (mode == SCANMODE_ACTIVE ? ESP8266::SCANMODE_ACTIVE : ESP8266::SCANMODE_PASSIVE),
540
- t_max, t_min);
577
+ int ret = _esp.scan (res, count, (mode == SCANMODE_ACTIVE ? ESP8266::SCANMODE_ACTIVE : ESP8266::SCANMODE_PASSIVE),
578
+ t_max, t_min);
579
+
580
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
581
+ _esp.uart_enable_input (false );
582
+ }
583
+ return ret;
541
584
}
542
585
543
586
bool ESP8266Interface::_get_firmware_ok ()
@@ -563,6 +606,7 @@ nsapi_error_t ESP8266Interface::_init(void)
563
606
if (!_initialized) {
564
607
_pwr_pin.power_off ();
565
608
_pwr_pin.power_on ();
609
+
566
610
if (_reset () != NSAPI_ERROR_OK) {
567
611
return NSAPI_ERROR_DEVICE_ERROR;
568
612
}
0 commit comments