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.

45 lines
1.1 KiB

1 year ago
  1. #pragma once
  2. #include <functional>
  3. #include <list>
  4. #include "basic/base.hpp"
  5. namespace iflytop {
  6. using namespace std;
  7. class ZIRQDispatcher {
  8. public:
  9. typedef enum {
  10. konHAL_UARTEx_RxEventCallback,
  11. konHAL_UART_TxCpltCallback,
  12. konHAL_UART_TxHalfCpltCallback,
  13. konHAL_UART_RxCpltCallback,
  14. konHAL_UART_RxHalfCpltCallback,
  15. konHAL_UART_ErrorCallback,
  16. konHAL_UART_AbortCpltCallback,
  17. konHAL_UART_AbortTransmitCpltCallback,
  18. konHAL_UART_AbortReceiveCpltCallback,
  19. } uart_irq_t;
  20. typedef struct {
  21. UART_HandleTypeDef *huart;
  22. uint16_t Size;
  23. } uart_irq_data_t;
  24. public:
  25. typedef function<void(zchip_tim_t *)> ontimirq_t;
  26. typedef function<void(uart_irq_t irq_type, uart_irq_data_t data)> on_uart_irq_t;
  27. list<ontimirq_t> m_ontimirqs;
  28. list<on_uart_irq_t> m_onuartirqs;
  29. public:
  30. static ZIRQDispatcher &instance();
  31. void regTimIrqListener(ontimirq_t listener);
  32. void regUartIrqListener(on_uart_irq_t cb);
  33. public:
  34. void _callOnTimIrq(zchip_tim_t *tim);
  35. void _callOnUartIrq(uart_irq_t irq_type, uart_irq_data_t data);
  36. };
  37. } // namespace iflytop