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.

67 lines
1.5 KiB

2 years ago
  1. #pragma once
  2. #include <functional>
  3. #include "../chip/iflytop_no_os.h"
  4. namespace iflytop {
  5. using namespace std;
  6. class ZUART {
  7. public:
  8. typedef struct {
  9. const char *name;
  10. UART_HandleTypeDef *huart;
  11. int32_t rxbuffersize = 128;
  12. int32_t rxovertime_ms = 3;
  13. } cfg_t;
  14. typedef function<void(uint8_t *data, size_t len)> callback_t;
  15. private:
  16. const char *m_name;
  17. UART_HandleTypeDef *m_huart;
  18. uint8_t *m_rxBuffer;
  19. volatile int32_t m_rxBufferPos;
  20. int32_t m_rxBufferLen;
  21. volatile uint32_t m_lastRxTime;
  22. int32_t m_rxovertime_ms = 3;
  23. uint8_t onebyte;
  24. bool m_isRxing = false;
  25. volatile bool m_dataIsReady = false;
  26. callback_t m_cb;
  27. public:
  28. ZUART() {}
  29. void initialize(cfg_t *cfg, callback_t cb);
  30. void initialize(cfg_t *cfg);
  31. void setrxcb(callback_t cb) { m_cb = cb; }
  32. bool tx(const char *data);
  33. bool tx(uint8_t *data, size_t len);
  34. bool startRxIt();
  35. void clearRxData();
  36. public:
  37. void HAL_UART_TxCpltCallback();
  38. void HAL_UART_TxHalfCpltCallback();
  39. void HAL_UART_RxCpltCallback();
  40. void HAL_UART_RxHalfCpltCallback();
  41. void HAL_UART_ErrorCallback();
  42. void HAL_UART_AbortCpltCallback();
  43. void HAL_UART_AbortTransmitCpltCallback();
  44. void HAL_UART_AbortReceiveCpltCallback();
  45. UART_HandleTypeDef *getHuart() { return m_huart; }
  46. private:
  47. IRQn_Type getUartIRQType();
  48. bool dataIsReady();
  49. void periodicJob();
  50. };
  51. } // namespace iflytop