diff --git a/src/comm/SerialLink.cc b/src/comm/SerialLink.cc index a4398aede5f8c731d143f8af54bede44e98b697a..8a656df04cc332a0bf3c3afb53c9f29c33bd5d57 100644 --- a/src/comm/SerialLink.cc +++ b/src/comm/SerialLink.cc @@ -62,7 +62,7 @@ SerialLink::~SerialLink() bool SerialLink::_isBootloader() { - QList portList = QSerialPortInfo::availablePorts(); + QList portList = QSerialPortInfo::availablePorts(); if( portList.count() == 0){ return false; } @@ -581,14 +581,3 @@ void SerialConfiguration::loadSettings(QSettings& settings, const QString& root) if(settings.contains("portName")) _portName = settings.value("portName").toString(); settings.endGroup(); } - -QList SerialConfiguration::getCurrentPorts() -{ - QList ports; - QList portList = QSerialPortInfo::availablePorts(); - foreach (const QSerialPortInfo &info, portList) - { - ports.append(info.systemLocation()); - } - return ports; -} diff --git a/src/comm/SerialLink.h b/src/comm/SerialLink.h index b641d113e4daff22a3e495a24f199acdef39f409..181c5cfa912fee1f52fa1871b2ff8adbf5bf8274 100644 --- a/src/comm/SerialLink.h +++ b/src/comm/SerialLink.h @@ -81,9 +81,6 @@ public: void saveSettings(QSettings& settings, const QString& root); void updateSettings(); - /*! @brief Get a list of the currently available ports */ - static QList getCurrentPorts(); - private: int _baud; int _dataBits; diff --git a/src/ui/QGCLinkConfiguration.cc b/src/ui/QGCLinkConfiguration.cc index 01bbca8d66061d23ef68305bbc725dd69766cf6e..936490a257028a6e9ae78653384e4bc9c68f1f82 100644 --- a/src/ui/QGCLinkConfiguration.cc +++ b/src/ui/QGCLinkConfiguration.cc @@ -142,6 +142,7 @@ void QGCLinkConfiguration::_fixUnnamed(LinkConfiguration* config) #ifdef Q_OS_WIN32 tname.replace("\\\\.\\", ""); #else + tname.replace("/dev/cu.", ""); tname.replace("/dev/", ""); #endif config->setName(QString("Serial Device on %1").arg(tname)); diff --git a/src/ui/SerialConfigurationWindow.cc b/src/ui/SerialConfigurationWindow.cc index f5b2a2420a24d2ff6d0b721bf906d286a194c5a9..ddefb2d845faa7bffbda0578a79745f26485c926 100644 --- a/src/ui/SerialConfigurationWindow.cc +++ b/src/ui/SerialConfigurationWindow.cc @@ -32,6 +32,7 @@ This file is part of the QGROUNDCONTROL project #include #include #include +#include #include #include @@ -42,7 +43,6 @@ This file is part of the QGROUNDCONTROL project SerialConfigurationWindow::SerialConfigurationWindow(SerialConfiguration *config, QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags) - , _userConfigured(false) { _ui.setupUi(this); Q_ASSERT(config != NULL); @@ -112,16 +112,15 @@ SerialConfigurationWindow::SerialConfigurationWindow(SerialConfiguration *config } // Connect the individual user interface inputs - connect(_ui.portName, SIGNAL(editTextChanged(QString)), this, SLOT(setPortName(QString))); - connect(_ui.portName, SIGNAL(currentIndexChanged(QString)), this, SLOT(setPortName(QString))); - connect(_ui.baudRate, SIGNAL(activated(int)), this, SLOT(setBaudRate(int))); - connect(_ui.flowControlCheckBox,SIGNAL(toggled(bool)), this, SLOT(enableFlowControl(bool))); - connect(_ui.parNone, SIGNAL(toggled(bool)), this, SLOT(setParityNone(bool))); - connect(_ui.parOdd, SIGNAL(toggled(bool)), this, SLOT(setParityOdd(bool))); - connect(_ui.parEven, SIGNAL(toggled(bool)), this, SLOT(setParityEven(bool))); - connect(_ui.dataBitsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setDataBits(int))); - connect(_ui.stopBitsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setStopBits(int))); - connect(_ui.advCheckBox, SIGNAL(clicked(bool)), _ui.advGroupBox, SLOT(setVisible(bool))); + connect(_ui.portName, SIGNAL(currentIndexChanged(int)), this, SLOT(setPortName(int))); + connect(_ui.baudRate, SIGNAL(activated(int)), this, SLOT(setBaudRate(int))); + connect(_ui.flowControlCheckBox,SIGNAL(toggled(bool)), this, SLOT(enableFlowControl(bool))); + connect(_ui.parNone, SIGNAL(toggled(bool)), this, SLOT(setParityNone(bool))); + connect(_ui.parOdd, SIGNAL(toggled(bool)), this, SLOT(setParityOdd(bool))); + connect(_ui.parEven, SIGNAL(toggled(bool)), this, SLOT(setParityEven(bool))); + connect(_ui.dataBitsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setDataBits(int))); + connect(_ui.stopBitsSpinBox, SIGNAL(valueChanged(int)), this, SLOT(setStopBits(int))); + connect(_ui.advCheckBox, SIGNAL(clicked(bool)), _ui.advGroupBox, SLOT(setVisible(bool))); _ui.advCheckBox->setCheckable(true); _ui.advCheckBox->setChecked(false); @@ -179,26 +178,38 @@ void SerialConfigurationWindow::hideEvent(QHideEvent* event) bool SerialConfigurationWindow::setupPortList() { - // Get the ports available on this system - QList ports = SerialConfiguration::getCurrentPorts(); - QString storedName = _config->portName(); - bool storedFound = false; - // Add the ports in reverse order, because we prepend them to the list - for (int i = ports.count() - 1; i >= 0; --i) + bool changed = false; + // Iterate found ports + QList portList = QSerialPortInfo::availablePorts(); + foreach (const QSerialPortInfo &info, portList) { - // Prepend newly found port to the list - if (_ui.portName->findText(ports[i]) < 0) + QString name = info.portName(); + // Append newly found port to the list + if (_ui.portName->findText(name) < 0) { - _ui.portName->insertItem(0, ports[i]); - if (!_userConfigured) _ui.portName->setEditText(ports[i]); + // We show the user the "short name" but store the full port name + _ui.portName->addItem(name, QVariant(info.systemLocation())); + changed = true; } - // Check if the stored link name is still present - if (ports[i].contains(storedName) || storedName.contains(ports[i])) - storedFound = true; } - if (storedFound) - _ui.portName->setEditText(storedName); - return (ports.count() > 0); + // See if configured port (if any) is present + if(changed) { + int idx = _ui.portName->count() - 1; + if(!_config->portName().isEmpty()) { + idx = _ui.portName->findData(QVariant(_config->portName())); + if(idx < 0) { + idx = 0; + } + } + _ui.portName->setCurrentIndex(idx); + if(_ui.portName->count() > 0) { + _ui.portName->setEditText(_ui.portName->itemText(idx)); + } + if(_config->portName().isEmpty()) { + setPortName(idx); + } + } + return (_ui.portName->count() > 0); } void SerialConfigurationWindow::enableFlowControl(bool flow) @@ -221,16 +232,13 @@ void SerialConfigurationWindow::setParityEven(bool accept) if (accept) _config->setParity(QSerialPort::EvenParity); } -void SerialConfigurationWindow::setPortName(QString port) +void SerialConfigurationWindow::setPortName(int index) { -#ifdef Q_OS_WIN - port = port.split("-").first(); -#endif - port = port.trimmed(); - if (_config->portName() != port) { - _config->setPortName(port); + // Get the full port name and store it in the config + QString pname = _ui.portName->itemData(index).toString(); + if (_config->portName() != pname) { + _config->setPortName(pname); } - userConfigured = true; } void SerialConfigurationWindow::setBaudRate(int index) diff --git a/src/ui/SerialConfigurationWindow.h b/src/ui/SerialConfigurationWindow.h index 60f066f22c40af7ab6a055bf2b5e81583c3b7568..ba21793c85ad15f28587efa6793469afaf8caf2e 100644 --- a/src/ui/SerialConfigurationWindow.h +++ b/src/ui/SerialConfigurationWindow.h @@ -53,7 +53,7 @@ public slots: void setParityNone(bool accept); void setParityOdd(bool accept); void setParityEven(bool accept); - void setPortName(QString port); + void setPortName(int index); void setBaudRate(int index); void setDataBits(int bits); void setStopBits(int bits); @@ -72,8 +72,6 @@ protected: bool userConfigured; ///< Switch to detect if current values are user-selected and shouldn't be overriden private: - - bool _userConfigured; Ui::serialSettings _ui; SerialConfiguration* _config; QTimer* _portCheckTimer; diff --git a/src/ui/SerialSettings.ui b/src/ui/SerialSettings.ui index 415e372e70efe5ea66e3c5eb42f817be24a6c995..4025803fa507841a68b43af39908f3ae1db95df7 100644 --- a/src/ui/SerialSettings.ui +++ b/src/ui/SerialSettings.ui @@ -32,16 +32,19 @@ - The serial port to which the system is connected. All ports listed here should work. + The serial port to which the system is connected. - The serial port to which the system is connected. All ports listed here should work. + The serial port to which the system is connected. - The serial port to which the system is connected. All ports listed here should work. + The serial port to which the system is connected. - true + false + + + 100 QComboBox::AdjustToContents