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.
|
|
#pragma once
#include <functional>
#include "basic/base.hpp"
#include "chip_tim_irq_shceduler.hpp"
namespace iflytop { using namespace std; class ZUART { public: typedef struct { const char *name; UART_HandleTypeDef *huart; int32_t rxbuffersize = 128; int32_t rxovertime_ms = 3; } cfg_t; typedef function<void(uint8_t *data, size_t len)> callback_t;
private: const char *m_name; UART_HandleTypeDef *m_huart;
uint8_t *m_rxBuffer; volatile int32_t m_rxBufferPos; int32_t m_rxBufferLen;
volatile uint32_t m_lastRxTime;
int32_t m_rxovertime_ms = 3;
uint8_t onebyte;
bool m_isRxing = false; volatile bool m_dataIsReady = false;
callback_t m_cb;
public: ZUART() {} void initialize(cfg_t *cfg, callback_t cb); void initialize(cfg_t *cfg);
void setrxcb(callback_t cb) { m_cb = cb; }
bool tx(const char *data); bool tx(uint8_t *data, size_t len); bool startRxIt();
void clearRxData();
public: void HAL_UART_TxCpltCallback(); void HAL_UART_TxHalfCpltCallback(); void HAL_UART_RxCpltCallback(); void HAL_UART_RxHalfCpltCallback(); void HAL_UART_ErrorCallback(); void HAL_UART_AbortCpltCallback(); void HAL_UART_AbortTransmitCpltCallback(); void HAL_UART_AbortReceiveCpltCallback();
UART_HandleTypeDef *getHuart() { return m_huart; }
private: IRQn_Type getUartIRQType(); bool dataIsReady(); void periodicJob(); };
} // namespace iflytop
|