Merge pull request #10150 from kjbracey-arm/timer_sleepcheck

Timer: remove hard-coded lp_ticker knowledge
pull/10267/head
Cruz Monrreal 2019-03-28 17:09:36 -05:00 committed by GitHub
commit ab22ab8ce3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 8 additions and 10 deletions

View File

@ -72,11 +72,8 @@ public:
}
// When low power ticker is in use, then do not disable deep sleep.
Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(true)
Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(!data->interface->runs_in_deep_sleep)
{
#if DEVICE_LPTICKER
_lock_deepsleep = (data != get_lp_ticker_data());
#endif
}
/** Attach a function to be called by the Ticker, specifying the interval in seconds

View File

@ -18,7 +18,6 @@
#include "hal/ticker_api.h"
#include "hal/us_ticker_api.h"
#include "platform/mbed_critical.h"
#include "hal/lp_ticker_api.h"
namespace mbed {
@ -27,12 +26,10 @@ Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data(
reset();
}
Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data), _lock_deepsleep(true)
Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data),
_lock_deepsleep(!data->interface->runs_in_deep_sleep)
{
reset();
#if DEVICE_LPTICKER
_lock_deepsleep = (data != get_lp_ticker_data());
#endif
}
Timer::~Timer()

View File

@ -32,6 +32,7 @@ static const ticker_interface_t lp_interface = {
.fire_interrupt = lp_ticker_fire_interrupt,
.get_info = lp_ticker_get_info,
.free = lp_ticker_free,
.runs_in_deep_sleep = true,
};
static const ticker_data_t lp_data = {

View File

@ -74,7 +74,8 @@ static const ticker_interface_t lp_interface = {
lp_ticker_wrapper_set_interrupt,
lp_ticker_wrapper_fire_interrupt,
lp_ticker_wrapper_free,
lp_ticker_wrapper_get_info
lp_ticker_wrapper_get_info,
true
};
void lp_ticker_wrapper_irq_handler(ticker_irq_handler_type handler)

View File

@ -33,6 +33,7 @@ static const ticker_interface_t us_interface = {
.fire_interrupt = us_ticker_fire_interrupt,
.get_info = us_ticker_get_info,
.free = us_ticker_free,
.runs_in_deep_sleep = false,
};
static const ticker_data_t us_data = {

View File

@ -67,6 +67,7 @@ typedef struct {
void (*fire_interrupt)(void); /**< Fire interrupt right-away */
void (*free)(void); /**< Disable function */
const ticker_info_t *(*get_info)(void); /**< Return info about this ticker's implementation */
bool runs_in_deep_sleep; /**< Whether ticker operates in deep sleep */
} ticker_interface_t;
/** Ticker's event queue structure