Skip to content

Commit 291dd1d

Browse files
Merge pull request #5234 from mprse/feature-hal-spec-ticker_irq_handler_set
Add API to set ticker IRQ handler.
2 parents 07e2819 + 6eab387 commit 291dd1d

File tree

4 files changed

+54
-2
lines changed

4 files changed

+54
-2
lines changed

hal/lp_ticker_api.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,19 @@ extern "C" {
3434
* @{
3535
*/
3636

37+
typedef void (*ticker_irq_handler_type)(const ticker_data_t *const);
38+
39+
/** Set low power ticker IRQ handler
40+
*
41+
* @param ticker_irq_handler IRQ handler to be connected
42+
*
43+
* @return previous ticker IRQ handler
44+
*
45+
* @note by default IRQ handler is set to ticker_irq_handler()
46+
*
47+
*/
48+
ticker_irq_handler_type set_lp_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler);
49+
3750
/** Get low power ticker's data
3851
*
3952
* @return The low power ticker data

hal/mbed_lp_ticker_api.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
static ticker_event_queue_t events = { 0 };
2121

22+
static ticker_irq_handler_type irq_handler = ticker_irq_handler;
23+
2224
static const ticker_interface_t lp_interface = {
2325
.init = lp_ticker_init,
2426
.read = lp_ticker_read,
@@ -39,9 +41,20 @@ const ticker_data_t* get_lp_ticker_data(void)
3941
return &lp_data;
4042
}
4143

44+
ticker_irq_handler_type set_lp_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler)
45+
{
46+
ticker_irq_handler_type prev_irq_handler = irq_handler;
47+
48+
irq_handler = ticker_irq_handler;
49+
50+
return prev_irq_handler;
51+
}
52+
4253
void lp_ticker_irq_handler(void)
4354
{
44-
ticker_irq_handler(&lp_data);
55+
if (irq_handler) {
56+
irq_handler(&lp_data);
57+
}
4558
}
4659

4760
#endif

hal/mbed_us_ticker_api.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
static ticker_event_queue_t events = { 0 };
1919

20+
static ticker_irq_handler_type irq_handler = ticker_irq_handler;
21+
2022
static const ticker_interface_t us_interface = {
2123
.init = us_ticker_init,
2224
.read = us_ticker_read,
@@ -37,7 +39,18 @@ const ticker_data_t* get_us_ticker_data(void)
3739
return &us_data;
3840
}
3941

42+
ticker_irq_handler_type set_us_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler)
43+
{
44+
ticker_irq_handler_type prev_irq_handler = irq_handler;
45+
46+
irq_handler = ticker_irq_handler;
47+
48+
return prev_irq_handler;
49+
}
50+
4051
void us_ticker_irq_handler(void)
4152
{
42-
ticker_irq_handler(&us_data);
53+
if (irq_handler) {
54+
irq_handler(&us_data);
55+
}
4356
}

hal/us_ticker_api.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,19 @@ extern "C" {
3131
* @{
3232
*/
3333

34+
typedef void (*ticker_irq_handler_type)(const ticker_data_t *const);
35+
36+
/** Set ticker IRQ handler
37+
*
38+
* @param ticker_irq_handler IRQ handler to be connected
39+
*
40+
* @return previous ticker IRQ handler
41+
*
42+
* @note by default IRQ handler is set to ticker_irq_handler()
43+
*
44+
*/
45+
ticker_irq_handler_type set_us_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler);
46+
3447
/** Get ticker's data
3548
*
3649
* @return The low power ticker data

0 commit comments

Comments
 (0)