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.
 
 
 

68 lines
1.5 KiB

#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