From 9a4aeec1b2563048f6a94607d0cde0dd43c652d9 Mon Sep 17 00:00:00 2001 From: Brian Daniels Date: Thu, 13 Oct 2016 13:50:16 -0500 Subject: [PATCH] Waiting before call to deepsleep to allow buffers to flush --- TESTS/mbed_drivers/lp_timeout/main.cpp | 14 ++++++++++++-- TESTS/mbed_hal/lp_ticker/main.cpp | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/TESTS/mbed_drivers/lp_timeout/main.cpp b/TESTS/mbed_drivers/lp_timeout/main.cpp index 6effbe39090..8d4412b5010 100644 --- a/TESTS/mbed_drivers/lp_timeout/main.cpp +++ b/TESTS/mbed_drivers/lp_timeout/main.cpp @@ -43,8 +43,18 @@ void lp_timeout_1s_deepsleep(void) { complete = false; - /* - * We use here lp_ticker_read() instead of us_ticker_read() for start and + /* + * Since deepsleep() may shut down the UART peripheral, we wait for 10ms + * to allow for hardware serial buffers to completely flush. + + * This should be replaced with a better function that checks if the + * hardware buffers are empty. However, such an API does not exist now, + * so we'll use the wait_ms() function for now. + */ + wait_ms(10); + + /* + * We use here lp_ticker_read() instead of us_ticker_read() for start and * end because the microseconds timer might be disable during deepsleep. */ timestamp_t start = lp_ticker_read(); diff --git a/TESTS/mbed_hal/lp_ticker/main.cpp b/TESTS/mbed_hal/lp_ticker/main.cpp index a634ff6a73a..b706087d1d6 100644 --- a/TESTS/mbed_hal/lp_ticker/main.cpp +++ b/TESTS/mbed_hal/lp_ticker/main.cpp @@ -65,12 +65,22 @@ void lp_ticker_1s_deepsleep() complete = false; uint32_t delay_ts; + /* + * Since deepsleep() may shut down the UART peripheral, we wait for 10ms + * to allow for hardware serial buffers to completely flush. + + * This should be replaced with a better function that checks if the + * hardware buffers are empty. However, such an API does not exist now, + * so we'll use the wait_ms() function for now. + */ + wait_ms(10); + ticker_set_handler(lp_ticker_data, cb_done); ticker_remove_event(lp_ticker_data, &delay_event); delay_ts = lp_ticker_read() + 1000000; - /* - * We use here lp_ticker_read() instead of us_ticker_read() for start and + /* + * We use here lp_ticker_read() instead of us_ticker_read() for start and * end because the microseconds timer might be disable during deepsleep. */ timestamp_t start = lp_ticker_read();