Skip to content

Commit 89afbf0

Browse files
committed
Send disconnect command to bootloader
- send disconnect command to bootloader
1 parent dcb02b3 commit 89afbf0

3 files changed

Lines changed: 44 additions & 22 deletions

File tree

flasher.cpp

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const char Flasher::VERSION_CMD[8] = "version";
4949
const char Flasher::BOARD_ID_CMD[9] = "board_id";
5050
const char Flasher::FLASH_FW_CMD[9] = "flash_fw";
5151
const char Flasher::CHECK_SIGNATURE_CMD[16] = "check_signature";
52+
const char Flasher::DISCONNECT_CMD[11] = "disconnect";
5253

5354
void Worker::doWork()
5455
{
@@ -154,11 +155,11 @@ void Flasher::loopHandler()
154155
isConnected = true;
155156

156157
} else {
157-
emit connectUsbToPc("Trying to connect!");
158+
emit showStatusMsg("Trying to connect!");
158159
}
159160

160161
} else {
161-
emit connectUsbToPc("Trying to connect!");
162+
emit showStatusMsg("Trying to connect!");
162163
}
163164

164165
if ((!isConnected) && (m_timerTryConnect.hasExpired(TRY_TO_CONNECT_TIMEOUT_IN_MS))) {
@@ -178,7 +179,7 @@ void Flasher::loopHandler()
178179

179180
case FlasherStates::CONNECTED:
180181

181-
emit connectedSerialPort();
182+
emit showStatusMsg("Connected");
182183
if(m_serialPort->isOpen()) {
183184
getVersion();
184185

@@ -193,12 +194,30 @@ void Flasher::loopHandler()
193194
break;
194195

195196
case FlasherStates::DISCONNECTED:
197+
{
198+
bool isDisconnectedSuccess = true;
196199
m_isTryConnectStart = false;
197-
m_serialPort->closeConn();
198-
if(!(m_serialPort->isOpen())) {
199-
emit disconnectedSerialPort();
200+
201+
if (m_serialPort->isOpen()) {
202+
203+
if (m_serialPort->isBootloaderDetected()) {
204+
isDisconnectedSuccess = this->sendDisconnectCmd();
205+
}
206+
207+
m_serialPort->closeConn();
208+
}
209+
210+
if (isDisconnectedSuccess) {
211+
emit showStatusMsg("Disconnected");
212+
213+
} else {
214+
emit showStatusMsg("Unplug board!");
200215
}
216+
217+
this->setState(FlasherStates::IDLE);
218+
201219
break;
220+
}
202221

203222
case FlasherStates::BOARD_ID:
204223

@@ -262,7 +281,14 @@ void Flasher::loopHandler()
262281
std::tuple<bool, QString, QString> flashingInfo = this->startFlash();
263282
this->showInfoMsgAtTheEndOfFlashing(std::get<1>(flashingInfo), std::get<2>(flashingInfo));
264283
emit clearProgress();
265-
this->setState(FlasherStates::IDLE);
284+
285+
if (std::get<0>(flashingInfo)) {
286+
m_serialPort->closeConn();
287+
this->setState(FlasherStates::TRY_TO_CONNECT);
288+
289+
} else {
290+
this->setState(FlasherStates::IDLE);
291+
}
266292
break;
267293
}
268294

@@ -627,3 +653,10 @@ void Flasher::showInfoMsgAtTheEndOfFlashing(const QString& title, const QString&
627653
msgBox.setStandardButtons(QMessageBox::Ok);
628654
msgBox.exec();
629655
}
656+
657+
bool Flasher::sendDisconnectCmd()
658+
{
659+
m_serialPort->write(DISCONNECT_CMD, sizeof(DISCONNECT_CMD));
660+
m_serialPort->waitForReadyRead(SERIAL_TIMEOUT_IN_MS);
661+
return checkAck();
662+
}

flasher.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,7 @@ Q_OBJECT
102102
signals:
103103
void updateProgress(const qint64& dataPosition, const qint64& firmwareSize);
104104
void clearProgress();
105-
void connectUsbToPc(const QString& text);
106-
void connectedSerialPort();
107-
void disconnectedSerialPort();
105+
void showStatusMsg(const QString& text);
108106
void failedToConnect();
109107
void openSerialPortInThread();
110108
void closeSerialPortInThread();
@@ -118,6 +116,7 @@ public slots:
118116

119117
private:
120118
void showInfoMsgAtTheEndOfFlashing(const QString& title, const QString& description);
119+
bool sendDisconnectCmd();
121120

122121
std::shared_ptr<SerialPort> m_serialPort;
123122
std::unique_ptr<QFile> m_fileFirmware;
@@ -159,6 +158,7 @@ public slots:
159158
static const char BOARD_ID_CMD[9];
160159
static const char FLASH_FW_CMD[9];
161160
static const char CHECK_SIGNATURE_CMD[16];
161+
static const char DISCONNECT_CMD[11];
162162
};
163163

164164
#endif // FLASHER_H

mainwindow.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,7 @@ MainWindow::MainWindow(std::shared_ptr<Flasher> flasher, QWidget *parent) :
7070
m_ui->progressBar->setValue(0);
7171
});
7272

73-
connect(m_flasher.get(), &Flasher::connectUsbToPc, this, [&] (const QString& text) { this->showStatusMessage(text); });
74-
75-
connect(m_flasher.get(), &Flasher::connectedSerialPort, this, [&] (void) {
76-
this->showStatusMessage(tr("Connected"));
77-
m_ui->actionConnect->setEnabled(false);
78-
m_ui->actionDisconnect->setEnabled(true);
79-
});
80-
81-
connect(m_flasher.get(), &Flasher::disconnectedSerialPort, this, [&] (void) {
82-
this->showStatusMessage(tr("Disconnected"));
83-
this->closeSerialPortUi();
84-
});
73+
connect(m_flasher.get(), &Flasher::showStatusMsg, this, [&] (const QString& text) { this->showStatusMessage(text); });
8574

8675
connect(m_flasher.get(), &Flasher::failedToConnect, this, [&] (void) {
8776
this->showStatusMessage(tr("Failed to connect!"));

0 commit comments

Comments
 (0)