You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

46 lines
1.1 KiB

#pragma once
#include <functional>
#include <list>
#include "basic/base.hpp"
namespace iflytop {
using namespace std;
class ZIRQDispatcher {
public:
typedef enum {
konHAL_UARTEx_RxEventCallback,
konHAL_UART_TxCpltCallback,
konHAL_UART_TxHalfCpltCallback,
konHAL_UART_RxCpltCallback,
konHAL_UART_RxHalfCpltCallback,
konHAL_UART_ErrorCallback,
konHAL_UART_AbortCpltCallback,
konHAL_UART_AbortTransmitCpltCallback,
konHAL_UART_AbortReceiveCpltCallback,
} uart_irq_t;
typedef struct {
UART_HandleTypeDef *huart;
uint16_t Size;
} uart_irq_data_t;
public:
typedef function<void(zchip_tim_t *)> ontimirq_t;
typedef function<void(uart_irq_t irq_type, uart_irq_data_t data)> on_uart_irq_t;
list<ontimirq_t> m_ontimirqs;
list<on_uart_irq_t> m_onuartirqs;
public:
static ZIRQDispatcher &instance();
void regTimIrqListener(ontimirq_t listener);
void regUartIrqListener(on_uart_irq_t cb);
public:
void _callOnTimIrq(zchip_tim_t *tim);
void _callOnUartIrq(uart_irq_t irq_type, uart_irq_data_t data);
};
} // namespace iflytop