Skip to content

Commit 5da5b28

Browse files
committed
Add API to set ticker IRQ handler.
This API is added primarily for testing purposes, to be able to test HAL drivers without using upper layers to handle ticker interrupt. By default IRQ handler is set to ticker_irq_handler() for us ticker and lp ticker - original one. Usage example (setting custom ticker irq handler): void my_irq_handler(const ticker_data_t *const) { // handle interrupt } ticker_irq_handler_type old_handler = set_us_ticker_irq_handler(my_irq_handler); Respectively for lp timer set_lp_ticker_irq_handler() API should be used.
1 parent 1566395 commit 5da5b28

File tree

4 files changed

+56
-2
lines changed

4 files changed

+56
-2
lines changed

hal/lp_ticker_api.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ 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+
* @note this function is primarily for testing purposes and it's not required part of HAL implementation
47+
*
48+
*/
49+
ticker_irq_handler_type set_lp_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler);
50+
3751
/** Get low power ticker's data
3852
*
3953
* @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: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,20 @@ 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+
* @note this function is primarily for testing purposes and it's not required part of HAL implementation
44+
*
45+
*/
46+
ticker_irq_handler_type set_us_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler);
47+
3448
/** Get ticker's data
3549
*
3650
* @return The low power ticker data

0 commit comments

Comments
 (0)