RX buffer reader was simplified

This commit is contained in:
2024-03-13 22:38:55 +07:00
parent 839dbee16e
commit a6849cd900

View File

@@ -15,7 +15,7 @@ BluetoothDispatcher::BluetoothDispatcher(BluetoothSerial *controller, const char
_controller = controller; _controller = controller;
} }
bool BluetoothDispatcher::initialize(volatile bool loop_on_fail, int readTimeoutMS) { bool BluetoothDispatcher::initialize(int readTimeoutMS) {
_controller->enableSSP(); _controller->enableSSP();
_controller->onConfirmRequest([this](uint16_t pin) { _controller->onConfirmRequest([this](uint16_t pin) {
_onConfirmRequest(pin); _onConfirmRequest(pin);
@@ -31,8 +31,7 @@ bool BluetoothDispatcher::initialize(volatile bool loop_on_fail, int readTimeout
bool success = _controller->begin(_device_name, false); bool success = _controller->begin(_device_name, false);
if (!success) { if (!success) {
ESP_LOGI(_tag, "Failed to initialize Bluetooth controller!"); ESP_LOGI(_tag, "Failed to initialize Bluetooth controller!");
while (loop_on_fail); assert(false);
return false;
} else { } else {
ESP_LOGI(_tag, "Bluetooth host initialized"); ESP_LOGI(_tag, "Bluetooth host initialized");
return true; return true;
@@ -45,23 +44,19 @@ void BluetoothDispatcher::onNewPackageReceived(NewPackageCallback newPackageRece
void BluetoothDispatcher::tick(const char message_delimeter) { void BluetoothDispatcher::tick(const char message_delimeter) {
/* Call the callback, if new package received */ /* Call the callback, if new package received */
while (_controller->available()) { _buffer += (char) _controller->read(); } /* Warning! Logging below can cause errors and freezes */
if (_buffer.lastIndexOf(message_delimeter) != -1) { while (_controller->available()) {
char buffer[_buffer_size]; int c = _controller->read();
auto messageEnd = _buffer.indexOf(message_delimeter) - 1; if (c == -1) {
if (messageEnd == -1) { _buffer.clear();
} else if (c == message_delimeter) {
if (_newPackageReceivedCb) {
_newPackageReceivedCb(_buffer.buf);
}
_buffer.clear(); _buffer.clear();
} else { } 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();
} }
} }