RX buffer reader was simplified
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user