diff --git a/src/ui/configuration/SerialSettingsDialog.cc b/src/ui/configuration/SerialSettingsDialog.cc index 8056afdcc7a9d439d6d15768c5704f6c0e0acb66..e8b48faee441e1ad7a7ef96843d1c74a950ef9a8 100644 --- a/src/ui/configuration/SerialSettingsDialog.cc +++ b/src/ui/configuration/SerialSettingsDialog.cc @@ -148,6 +148,7 @@ void SettingsDialog::fillPortsParameters() void SettingsDialog::fillPortsInfo() { ui->serialPortInfoListBox->clear(); + QList list = QSerialPortInfo::availablePorts(); foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { QStringList list; list << info.portName() diff --git a/src/ui/px4_configuration/PX4Bootloader.cc b/src/ui/px4_configuration/PX4Bootloader.cc index eabd11ffd8b4b019437e4adf70f015430754838f..51c6d3310b4ae9b85269879f4ac0a5b711a887f9 100644 --- a/src/ui/px4_configuration/PX4Bootloader.cc +++ b/src/ui/px4_configuration/PX4Bootloader.cc @@ -119,6 +119,12 @@ Again: bool PX4Bootloader::write(QSerialPort* port, const uint8_t* data, qint64 maxSize) { + // Make sure we don't overflow output buffer + while (port->bytesToWrite() > 50) { + int bump = 0; + bump++; + } + qint64 bytesWritten = port->write((const char*)data, maxSize); if (bytesWritten == -1) { _errorString = tr("Write failed: %1").arg(port->errorString()); @@ -147,34 +153,35 @@ bool PX4Bootloader::write(QSerialPort* port, const uint8_t byte) bool PX4Bootloader::read(QSerialPort* port, uint8_t* data, qint64 maxSize, bool warnOnError, int readTimeout) { - qint64 bytesRead; - - if (port->bytesAvailable() < maxSize) { - if (!port->waitForReadyRead(readTimeout)) { - _errorString = tr("Timeout waiting for read bytes available: %1").arg(port->errorString()); + qint64 bytesToRead = 0; + + while (bytesToRead < maxSize) { + if (port->bytesAvailable() == 0) { + if (!port->waitForReadyRead(readTimeout)) { + _errorString = tr("Timeout waiting for byte to be available"); + if (warnOnError) { + qWarning() << _errorString; + } + return false; + } + Q_ASSERT(port->bytesAvailable() != 0); + } + + qint64 bytesRead; + bytesRead = port->read((char*)&data[bytesToRead], maxSize); + + if (bytesRead == -1) { + _errorString = tr("Read failed: Could not read 1 byte, error: %1").arg(port->errorString()); if (warnOnError) { qWarning() << _errorString; } return false; + } else { + Q_ASSERT(bytesRead != 0); + bytesToRead += bytesRead; } } - bytesRead = port->read((char*)data, maxSize); - if (bytesRead == -1) { - _errorString = tr("Read failed: Could not read %1 resonse, error: 12").arg(port->errorString()); - if (warnOnError) { - qWarning() << _errorString; - } - return false; - } - if (bytesRead != maxSize) { - _errorString = tr("In correct number of bytes returned for read: actual(%1) expected(%2)").arg(bytesRead).arg(maxSize); - if (warnOnError) { - qWarning() << _errorString; - } - return false; - } - return true; }