From a6849cd900532d776633df1af7d58636b59aa27e Mon Sep 17 00:00:00 2001 From: gogacoder Date: Wed, 13 Mar 2024 22:38:55 +0700 Subject: [PATCH] RX buffer reader was simplified --- src/RF/BluetoothDispatcher.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/src/RF/BluetoothDispatcher.cpp b/src/RF/BluetoothDispatcher.cpp index f955572..1e2f388 100644 --- a/src/RF/BluetoothDispatcher.cpp +++ b/src/RF/BluetoothDispatcher.cpp @@ -15,7 +15,7 @@ BluetoothDispatcher::BluetoothDispatcher(BluetoothSerial *controller, const char _controller = controller; } -bool BluetoothDispatcher::initialize(volatile bool loop_on_fail, int readTimeoutMS) { +bool BluetoothDispatcher::initialize(int readTimeoutMS) { _controller->enableSSP(); _controller->onConfirmRequest([this](uint16_t pin) { _onConfirmRequest(pin); @@ -31,8 +31,7 @@ bool BluetoothDispatcher::initialize(volatile bool loop_on_fail, int readTimeout bool success = _controller->begin(_device_name, false); if (!success) { ESP_LOGI(_tag, "Failed to initialize Bluetooth controller!"); - while (loop_on_fail); - return false; + assert(false); } else { ESP_LOGI(_tag, "Bluetooth host initialized"); return true; @@ -45,23 +44,19 @@ void BluetoothDispatcher::onNewPackageReceived(NewPackageCallback newPackageRece void BluetoothDispatcher::tick(const char message_delimeter) { /* Call the callback, if new package received */ - while (_controller->available()) { _buffer += (char) _controller->read(); } - if (_buffer.lastIndexOf(message_delimeter) != -1) { - char buffer[_buffer_size]; - auto messageEnd = _buffer.indexOf(message_delimeter) - 1; - if (messageEnd == -1) { + /* Warning! Logging below can cause errors and freezes */ + while (_controller->available()) { + int c = _controller->read(); + if (c == -1) { + _buffer.clear(); + } else if (c == message_delimeter) { + if (_newPackageReceivedCb) { + _newPackageReceivedCb(_buffer.buf); + } _buffer.clear(); } else { - _buffer.substring(0, messageEnd, buffer); + _buffer += (char) c; } - ESP_LOGD(_tag, "Received new buffer %s", buffer); - if (_newPackageReceivedCb) { - _newPackageReceivedCb(buffer); - } - _buffer.clear(); - } - if (_buffer.length() > _real_buffer_size) { - _buffer.clear(); } }