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