diff --git a/OtaUpdate/Widget.cpp b/OtaUpdate/Widget.cpp index e736d66..8e6ad13 100644 --- a/OtaUpdate/Widget.cpp +++ b/OtaUpdate/Widget.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -53,7 +54,8 @@ Widget::Widget(QWidget *parent) : QWidget(parent) { setAcceptDrops(true); } -Widget::~Widget() {} +Widget::~Widget() { +} void Widget::start() { m_progressBar->setValue(0); @@ -90,6 +92,9 @@ void Widget::start() { void Widget::onCdcDeviceDiscovered(const QSerialPortInfo &info) { auto status = m_updater->open(info); LOG(info) << "open cdc port: " << info.portName().toStdString() << ", status: " << status; + if (!status) { + QTimer::singleShot(0, this, [this]() { m_updater->startSearchDevice(); }); + } } void Widget::onSelectButtonClicked() { diff --git a/Peripheral/CdcUpdater.cpp b/Peripheral/CdcUpdater.cpp index f317308..9bd5e57 100644 --- a/Peripheral/CdcUpdater.cpp +++ b/Peripheral/CdcUpdater.cpp @@ -42,9 +42,7 @@ CdcUpdater::~CdcUpdater() { void CdcUpdater::start(const QString &path, const QSerialPortInfo &info) { if (info.isNull()) { - if (m_timerId < 0) { - m_timerId = startTimer(1000); - } + startSearchDevice(); } else { open(info); } @@ -54,6 +52,12 @@ void CdcUpdater::start(const QString &path, const QSerialPortInfo &info) { emit progressChanged(++m_progress); } +void CdcUpdater::startSearchDevice() { + if (m_timerId < 0) { + m_timerId = startTimer(1000); + } +} + bool CdcUpdater::open(const QSerialPortInfo &info) { m_serialPort = std::make_shared(info); connect(m_serialPort.get(), &QSerialPort::readyRead, this, &CdcUpdater::onReadyRead); diff --git a/Peripheral/CdcUpdater.h b/Peripheral/CdcUpdater.h index 9e8b52b..e84b541 100644 --- a/Peripheral/CdcUpdater.h +++ b/Peripheral/CdcUpdater.h @@ -37,6 +37,7 @@ public: CdcUpdater(QObject *parent = nullptr); ~CdcUpdater(); void start(const QString &path, const QSerialPortInfo &info = QSerialPortInfo()); + void startSearchDevice(); bool open(const QSerialPortInfo &info); static std::optional searchDevice();