*
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
#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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user