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
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
|