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;
}
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();
}
}