Skip to content

Commit 534a3d2

Browse files
committed
Timer: remove hard-coded lp_ticker knowledge
The knowledge that lp_ticker runs in deep sleep was hard-coded with a comparison check of a ticker_data_t pointer against get_lp_ticker_data. Remove this hard-coded check, which adds a linker dependency against the low power ticker even if not being used - put a flag into the ticker_interface_t. A future extension might be to move this flag into the ticker_info_t provided by the HAL, but for the moment keep the assumption that lp_ticker does run, us_ticker doesn't.
1 parent 6b84b14 commit 534a3d2

File tree

6 files changed

+8
-10
lines changed

6 files changed

+8
-10
lines changed

drivers/Ticker.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,8 @@ class Ticker : public TimerEvent, private NonCopyable<Ticker> {
7272
}
7373

7474
// When low power ticker is in use, then do not disable deep sleep.
75-
Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(true)
75+
Ticker(const ticker_data_t *data) : TimerEvent(data), _function(0), _lock_deepsleep(!data->interface->runs_in_deep_sleep)
7676
{
77-
#if DEVICE_LPTICKER
78-
_lock_deepsleep = (data != get_lp_ticker_data());
79-
#endif
8077
}
8178

8279
/** Attach a function to be called by the Ticker, specifying the interval in seconds

drivers/Timer.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "hal/ticker_api.h"
1919
#include "hal/us_ticker_api.h"
2020
#include "platform/mbed_critical.h"
21-
#include "hal/lp_ticker_api.h"
2221

2322
namespace mbed {
2423

@@ -27,12 +26,10 @@ Timer::Timer() : _running(), _start(), _time(), _ticker_data(get_us_ticker_data(
2726
reset();
2827
}
2928

30-
Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data), _lock_deepsleep(true)
29+
Timer::Timer(const ticker_data_t *data) : _running(), _start(), _time(), _ticker_data(data),
30+
_lock_deepsleep(!data->interface->runs_in_deep_sleep)
3131
{
3232
reset();
33-
#if DEVICE_LPTICKER
34-
_lock_deepsleep = (data != get_lp_ticker_data());
35-
#endif
3633
}
3734

3835
Timer::~Timer()

hal/mbed_lp_ticker_api.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ static const ticker_interface_t lp_interface = {
3232
.fire_interrupt = lp_ticker_fire_interrupt,
3333
.get_info = lp_ticker_get_info,
3434
.free = lp_ticker_free,
35+
.runs_in_deep_sleep = true,
3536
};
3637

3738
static const ticker_data_t lp_data = {

hal/mbed_lp_ticker_wrapper.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ static const ticker_interface_t lp_interface = {
7474
lp_ticker_wrapper_set_interrupt,
7575
lp_ticker_wrapper_fire_interrupt,
7676
lp_ticker_wrapper_free,
77-
lp_ticker_wrapper_get_info
77+
lp_ticker_wrapper_get_info,
78+
true
7879
};
7980

8081
void lp_ticker_wrapper_irq_handler(ticker_irq_handler_type handler)

hal/mbed_us_ticker_api.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ static const ticker_interface_t us_interface = {
2929
.fire_interrupt = us_ticker_fire_interrupt,
3030
.get_info = us_ticker_get_info,
3131
.free = us_ticker_free,
32+
.runs_in_deep_sleep = false,
3233
};
3334

3435
static const ticker_data_t us_data = {

hal/ticker_api.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ typedef struct {
6767
void (*fire_interrupt)(void); /**< Fire interrupt right-away */
6868
void (*free)(void); /**< Disable function */
6969
const ticker_info_t *(*get_info)(void); /**< Return info about this ticker's implementation */
70+
bool runs_in_deep_sleep; /**< Whether ticker operates in deep sleep */
7071
} ticker_interface_t;
7172

7273
/** Ticker's event queue structure

0 commit comments

Comments
 (0)