@@ -49,6 +49,7 @@ const char Flasher::VERSION_CMD[8] = "version";
4949const char Flasher::BOARD_ID_CMD [9 ] = " board_id" ;
5050const char Flasher::FLASH_FW_CMD [9 ] = " flash_fw" ;
5151const char Flasher::CHECK_SIGNATURE_CMD [16 ] = " check_signature" ;
52+ const char Flasher::DISCONNECT_CMD [11 ] = " disconnect" ;
5253
5354void 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+ }
0 commit comments