diff --git a/dashboard/elements/ComPortRow.cpp b/dashboard/elements/ComPortRow.cpp index 4d3e7db..d9198f0 100644 --- a/dashboard/elements/ComPortRow.cpp +++ b/dashboard/elements/ComPortRow.cpp @@ -59,7 +59,7 @@ QWidget *ComPortRow::generateElement() { auto *comPortComboBox = new ModeIndexCombobox("comBox",index); ComPortWidgetModel model = ComPortWidgetModel(); - auto availableComPorts = model.loadAvailableComPorts(); + auto availableComPorts = model.loadAvailableComPorts(); auto availableSets = model.getAvailableSets(); for (auto &availableComPort: *availableComPorts) { diff --git a/dashboard/models/ComBundle.cpp b/dashboard/models/ComBundle.cpp index ead0321..c8ac4f5 100644 --- a/dashboard/models/ComBundle.cpp +++ b/dashboard/models/ComBundle.cpp @@ -10,10 +10,10 @@ bool ComBundle::isOutputInBundle(int id){ return this->outputs.contains(id); } -ComBundle::ComBundle(QString port){ +ComBundle::ComBundle(QString port, bool delayBoot){ this->port = new SerialPort(port.toStdString().c_str()); - if (this->port->getPortName().find("due") != std::string::npos){ - //sleep for x seconds to allow for due boards to reset + if (delayBoot){ + //sleep for x seconds to allow for boards to reset (i.e. Arduino due) std::this_thread::sleep_for(std::chrono::seconds(3)); } } diff --git a/dashboard/models/ComBundle.h b/dashboard/models/ComBundle.h index cb0a92c..10d1c8d 100644 --- a/dashboard/models/ComBundle.h +++ b/dashboard/models/ComBundle.h @@ -12,7 +12,7 @@ class ComBundle{ public: - ComBundle(QString port); + ComBundle(QString port, bool delayBoot); void setOutputs(QMap outputsToSet) { this->outputs = outputsToSet; }; bool isOutputInBundle(int id); SerialPort *getSerialPort() { return this->port; }; diff --git a/dashboard/workers/MFSWorker.cpp b/dashboard/workers/MFSWorker.cpp index 73cf767..a71e5c6 100644 --- a/dashboard/workers/MFSWorker.cpp +++ b/dashboard/workers/MFSWorker.cpp @@ -1,5 +1,7 @@ #include "MFSWorker.h" +#include + #include "outputmenu/handlers/sethandler.h" #include "settings/ComSettingsHandler.h" #include "utils/InputReader.h" @@ -198,8 +200,27 @@ void MFSWorker::loadRunningPortsAndSets() { int successfullyConnected = 0; setHandler.updateSets(); setHandler.loadSets(); + + auto *comPorts = new QList(); + for (const QSerialPortInfo &serialPortInfo : QSerialPortInfo::availablePorts()) { + Logger::getInstance()->logDebug("Found com port: " + serialPortInfo.portName().toStdString() + + " | " + serialPortInfo.description().toStdString()); + comPorts->append(serialPortInfo.portName() + " | " + serialPortInfo.description()); + } + for (const auto &comSetting: comSettings) { - auto *bundle = new ComBundle(comSetting.first); + //remove slash from port string + const auto portStringNoSlash = comSetting.first.mid(4); + const auto portString = portStringNoSlash + ' '; + bool addDelayToAllowReset = false; + for_each(comPorts->begin(), comPorts->end(), [&](const QString &port) { + if (port.contains(portString)) { + if (port.toLower().contains("due")) { + addDelayToAllowReset = true; + } + } + }); + auto *bundle = new ComBundle(comSetting.first, addDelayToAllowReset); if (comSetting.second != -1) { Logger::getInstance()->logDebug("Loading set: " + std::to_string(comSetting.second)); auto set = setHandler.getSetById(QString::number(comSetting.second));