dynamically dispatch USART IRQs

The different modes (configurations) will have different interrupt
handlers, so we need to dispatch them via config_func_ptrs
This commit is contained in:
Harald Welte
2016-03-20 16:43:12 +01:00
parent dde112e71c
commit 3bafe43376
4 changed files with 35 additions and 13 deletions

View File

@@ -22,6 +22,10 @@ typedef struct {
void (*exit) (void);
/* main loop content for given configuration */
void (*run) (void);
/* Interrupt handler for USART1 */
void (*usart0_irq) (void);
/* Interrupt handler for USART1 */
void (*usart1_irq) (void);
} conf_func;
static const conf_func config_func_ptrs[] = {
@@ -48,6 +52,8 @@ static const conf_func config_func_ptrs[] = {
.init = mode_cardemu_init,
.exit = mode_cardemu_exit,
.run = mode_cardemu_run,
.usart0_irq = mode_cardemu_usart0_irq,
.usart1_irq = mode_cardemu_usart1_irq,
},
#endif
#ifdef HAVE_MITM
@@ -81,6 +87,16 @@ void USBDDriverCallbacks_ConfigurationChanged(uint8_t cfgnum)
simtrace_config = cfgnum;
}
void USART1_IrqHandler(void)
{
config_func_ptrs[simtrace_config].usart1_irq();
}
void USART0_IrqHandler(void)
{
config_func_ptrs[simtrace_config].usart0_irq();
}
/*------------------------------------------------------------------------------
* Main
*------------------------------------------------------------------------------*/