@@ -89,6 +89,7 @@ ESP8266Interface::ESP8266Interface()
89
89
_sock_i[i].open = false ;
90
90
_sock_i[i].sport = 0 ;
91
91
}
92
+ _esp.uart_enable_input (false );
92
93
}
93
94
#endif
94
95
@@ -125,6 +126,7 @@ ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug, PinName r
125
126
_sock_i[i].open = false ;
126
127
_sock_i[i].sport = 0 ;
127
128
}
129
+ _esp.uart_enable_input (false );
128
130
}
129
131
130
132
ESP8266Interface::~ESP8266Interface ()
@@ -224,13 +226,15 @@ void ESP8266Interface::_connect_async()
224
226
nsapi_error_t status = _init ();
225
227
if (status != NSAPI_ERROR_OK) {
226
228
_connect_retval = status;
229
+ _esp.uart_enable_input (false );
227
230
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
228
231
// _conn_stat_cb will be called from refresh_conn_state_cb
229
232
return ;
230
233
}
231
234
232
235
if (!_esp.dhcp (true , 1 )) {
233
236
_connect_retval = NSAPI_ERROR_DHCP_FAILURE;
237
+ _esp.uart_enable_input (false );
234
238
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
235
239
// _conn_stat_cb will be called from refresh_conn_state_cb
236
240
return ;
@@ -253,6 +257,7 @@ void ESP8266Interface::_connect_async()
253
257
_connect_retval = NSAPI_ERROR_CONNECTION_TIMEOUT;
254
258
}
255
259
if (_connect_retval != NSAPI_ERROR_OK) {
260
+ _esp.uart_enable_input (false );
256
261
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
257
262
}
258
263
_if_connected.notify_all ();
@@ -304,6 +309,7 @@ int ESP8266Interface::connect()
304
309
_cmutex.lock ();
305
310
}
306
311
_software_conn_stat = IFACE_STATUS_CONNECTING;
312
+ _esp.uart_enable_input (true );
307
313
_connect_retval = NSAPI_ERROR_NO_CONNECTION;
308
314
MBED_ASSERT (!_connect_event_id);
309
315
_conn_timer.stop ();
@@ -404,6 +410,7 @@ void ESP8266Interface::_disconnect_async()
404
410
}
405
411
406
412
_power_off ();
413
+ _software_conn_stat = IFACE_STATUS_DISCONNECTED;
407
414
_if_connected.notify_all ();
408
415
409
416
} else {
@@ -418,8 +425,8 @@ void ESP8266Interface::_disconnect_async()
418
425
}
419
426
}
420
427
_cmutex.unlock ();
421
- _software_conn_stat = IFACE_STATUS_DISCONNECTED;
422
428
429
+ _esp.uart_enable_input (false );
423
430
if (_disconnect_event_id == 0 ) {
424
431
if (_conn_stat_cb) {
425
432
_conn_stat_cb (NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _conn_stat);
@@ -481,17 +488,31 @@ int ESP8266Interface::disconnect()
481
488
482
489
const char *ESP8266Interface::get_ip_address ()
483
490
{
491
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
492
+ _esp.uart_enable_input (true );
493
+ }
494
+
484
495
const char *ip_buff = _esp.ip_addr ();
485
496
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 );
487
501
}
488
-
489
502
return ip_buff;
490
503
}
491
504
492
505
const char *ESP8266Interface::get_mac_address ()
493
506
{
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;
495
516
}
496
517
497
518
const char *ESP8266Interface::get_gateway ()
@@ -506,7 +527,17 @@ const char *ESP8266Interface::get_netmask()
506
527
507
528
int8_t ESP8266Interface::get_rssi ()
508
529
{
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;
510
541
}
511
542
512
543
int ESP8266Interface::scan (WiFiAccessPoint *res, unsigned count)
@@ -523,13 +554,25 @@ int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count, scan_mode mode,
523
554
return NSAPI_ERROR_PARAMETER;
524
555
}
525
556
557
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
558
+ _esp.uart_enable_input (true );
559
+ }
560
+
526
561
nsapi_error_t status = _init ();
527
562
if (status != NSAPI_ERROR_OK) {
528
563
return status;
564
+ if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
565
+ _esp.uart_enable_input (false );
566
+ }
529
567
}
530
568
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;
533
576
}
534
577
535
578
bool ESP8266Interface::_get_firmware_ok ()
@@ -555,6 +598,7 @@ nsapi_error_t ESP8266Interface::_init(void)
555
598
if (!_initialized) {
556
599
_pwr_pin.power_off ();
557
600
_pwr_pin.power_on ();
601
+
558
602
if (_reset () != NSAPI_ERROR_OK) {
559
603
return NSAPI_ERROR_DEVICE_ERROR;
560
604
}
0 commit comments