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.
pull/5369/head
Przemyslaw Stekiel 2017-10-02 09:53:13 +02:00
parent 1566395323
commit 5da5b28f96
4 changed files with 56 additions and 2 deletions

View File

@ -34,6 +34,20 @@ extern "C" {
* @{
*/
typedef void (*ticker_irq_handler_type)(const ticker_data_t *const);
/** Set low power ticker IRQ handler
*
* @param ticker_irq_handler IRQ handler to be connected
*
* @return previous ticker IRQ handler
*
* @note by default IRQ handler is set to ticker_irq_handler()
* @note this function is primarily for testing purposes and it's not required part of HAL implementation
*
*/
ticker_irq_handler_type set_lp_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler);
/** Get low power ticker's data
*
* @return The low power ticker data

View File

@ -19,6 +19,8 @@
static ticker_event_queue_t events = { 0 };
static ticker_irq_handler_type irq_handler = ticker_irq_handler;
static const ticker_interface_t lp_interface = {
.init = lp_ticker_init,
.read = lp_ticker_read,
@ -39,9 +41,20 @@ const ticker_data_t* get_lp_ticker_data(void)
return &lp_data;
}
ticker_irq_handler_type set_lp_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler)
{
ticker_irq_handler_type prev_irq_handler = irq_handler;
irq_handler = ticker_irq_handler;
return prev_irq_handler;
}
void lp_ticker_irq_handler(void)
{
ticker_irq_handler(&lp_data);
if (irq_handler) {
irq_handler(&lp_data);
}
}
#endif

View File

@ -17,6 +17,8 @@
static ticker_event_queue_t events = { 0 };
static ticker_irq_handler_type irq_handler = ticker_irq_handler;
static const ticker_interface_t us_interface = {
.init = us_ticker_init,
.read = us_ticker_read,
@ -37,7 +39,18 @@ const ticker_data_t* get_us_ticker_data(void)
return &us_data;
}
ticker_irq_handler_type set_us_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler)
{
ticker_irq_handler_type prev_irq_handler = irq_handler;
irq_handler = ticker_irq_handler;
return prev_irq_handler;
}
void us_ticker_irq_handler(void)
{
ticker_irq_handler(&us_data);
if (irq_handler) {
irq_handler(&us_data);
}
}

View File

@ -31,6 +31,20 @@ extern "C" {
* @{
*/
typedef void (*ticker_irq_handler_type)(const ticker_data_t *const);
/** Set ticker IRQ handler
*
* @param ticker_irq_handler IRQ handler to be connected
*
* @return previous ticker IRQ handler
*
* @note by default IRQ handler is set to ticker_irq_handler()
* @note this function is primarily for testing purposes and it's not required part of HAL implementation
*
*/
ticker_irq_handler_type set_us_ticker_irq_handler(ticker_irq_handler_type ticker_irq_handler);
/** Get ticker's data
*
* @return The low power ticker data