35 lines
941 B
C++
35 lines
941 B
C++
#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();
|
||
|
|
}
|
||
|
|
}
|