Skip to content

Commit 570954c

Browse files
author
Dominika Maziec
committed
UART in deep sleep mode when it is disconnected
1 parent f51bbe0 commit 570954c

File tree

3 files changed

+62
-7
lines changed

3 files changed

+62
-7
lines changed

components/wifi/esp8266-driver/ESP8266/ESP8266.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,4 +1275,9 @@ bool ESP8266::set_country_code_policy(bool track_ap, const char *country_code, i
12751275
return done;
12761276
}
12771277

1278+
int ESP8266::uart_enable_input(bool enabled)
1279+
{
1280+
return _serial.enable_input(enabled);
1281+
}
1282+
12781283
#endif

components/wifi/esp8266-driver/ESP8266/ESP8266.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,15 @@ class ESP8266 {
405405
static const int8_t WIFIMODE_STATION_SOFTAP = 3;
406406
static const int8_t SOCKET_COUNT = 5;
407407

408+
/**
409+
* Enables or disables uart input and deep sleep
410+
*
411+
* @param lock if TRUE, uart input is enabled and deep sleep is
412+
* locked if FALSE, uart input is disabled and deep sleep is
413+
* unlocked
414+
*/
415+
int uart_enable_input(bool lock);
416+
408417
private:
409418
// FW version
410419
struct fw_sdk_version _sdk_v;

components/wifi/esp8266-driver/ESP8266Interface.cpp

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

130132
ESP8266Interface::~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

482489
const 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

492505
const 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

497518
const char *ESP8266Interface::get_gateway()
@@ -506,7 +527,17 @@ const char *ESP8266Interface::get_netmask()
506527

507528
int8_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

512543
int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count)
@@ -523,13 +554,22 @@ 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;
529564
}
530565

531-
return _esp.scan(res, count, (mode == SCANMODE_ACTIVE ? ESP8266::SCANMODE_ACTIVE : ESP8266::SCANMODE_PASSIVE),
532-
t_max, t_min);
566+
int ret = _esp.scan(res, count, (mode == SCANMODE_ACTIVE ? ESP8266::SCANMODE_ACTIVE : ESP8266::SCANMODE_PASSIVE),
567+
t_max, t_min);
568+
569+
if (_software_conn_stat == IFACE_STATUS_DISCONNECTED) {
570+
_esp.uart_enable_input(false);
571+
}
572+
return ret;
533573
}
534574

535575
bool ESP8266Interface::_get_firmware_ok()
@@ -555,6 +595,7 @@ nsapi_error_t ESP8266Interface::_init(void)
555595
if (!_initialized) {
556596
_pwr_pin.power_off();
557597
_pwr_pin.power_on();
598+
558599
if (_reset() != NSAPI_ERROR_OK) {
559600
return NSAPI_ERROR_DEVICE_ERROR;
560601
}

0 commit comments

Comments
 (0)