Files
MicroH7Board.Firmware/UartReader.cpp
T

35 lines
941 B
C++
Raw Normal View History

2025-05-13 02:03:18 +03:00
#include "UartReader.h"
extern UART_HandleTypeDef huart1;
static UartReader* volatile _uartReader = nullptr;
UartReader::UartReader(){
_uartReader = this;
}
void UartReader::start(LineCallback lineCallback) {
_lineCallback = lineCallback;
HAL_UART_Receive_IT(&huart1, _writeBuffer, 1);
}
void UartReader::onDataRx(){
if(_writeBuffer[_rxSize] == '\r'){
_writeBuffer[_rxSize] = 0;
auto tmp = _writeBuffer;
_writeBuffer = _readBuffer;
_readBuffer = tmp;
auto lineSize = _rxSize;
_rxSize = 0;
_lineCallback(reinterpret_cast<const char*>(_readBuffer), lineSize);
HAL_UART_Receive_IT(&huart1, &_writeBuffer[_rxSize], 1);
}else{
_rxSize++;
HAL_UART_Receive_IT(&huart1, &_writeBuffer[_rxSize], 1);
}
}
extern "C" void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if(huart == &huart1) {
_uartReader->onDataRx();
}
}