341 self.__cpyMenu = QMenu(self.tr("CircuitPython Functions")) |
341 self.__cpyMenu = QMenu(self.tr("CircuitPython Functions")) |
342 self.__cpyMenu.addAction( |
342 self.__cpyMenu.addAction( |
343 self.tr("Show CircuitPython Versions"), self.showCircuitPythonVersions |
343 self.tr("Show CircuitPython Versions"), self.showCircuitPythonVersions |
344 ) |
344 ) |
345 self.__cpyMenu.addSeparator() |
345 self.__cpyMenu.addSeparator() |
|
346 self.__bootloaderAct = self.__cpyMenu.addAction( |
|
347 self.tr("Activate Bootloader"), self.__activateBootloader |
|
348 ) |
346 self.__flashCpyAct = self.__cpyMenu.addMenu(self.__flashMenu) |
349 self.__flashCpyAct = self.__cpyMenu.addMenu(self.__flashMenu) |
347 self.__cpyMenu.addSeparator() |
350 self.__cpyMenu.addSeparator() |
348 self.__cpyMenu.addMenu(self.__libraryMenu) |
351 self.__cpyMenu.addMenu(self.__libraryMenu) |
349 self.__cpyMenu.addSeparator() |
352 self.__cpyMenu.addSeparator() |
350 self.__resetAct = self.__cpyMenu.addAction( |
353 self.__resetAct = self.__cpyMenu.addAction( |
403 connected = self.microPython.isConnected() |
406 connected = self.microPython.isConnected() |
404 linkConnected = self.microPython.isLinkConnected() |
407 linkConnected = self.microPython.isLinkConnected() |
405 |
408 |
406 self.__flashCpyAct.setEnabled(not linkConnected) |
409 self.__flashCpyAct.setEnabled(not linkConnected) |
407 self.__resetAct.setEnabled(connected) |
410 self.__resetAct.setEnabled(connected) |
|
411 self.__bootloaderAct.setEnabled(connected) |
408 |
412 |
409 menu.addMenu(self.__cpyMenu) |
413 menu.addMenu(self.__cpyMenu) |
410 |
414 |
411 @pyqtSlot() |
415 @pyqtSlot() |
412 def __aboutToShowLibraryMenu(self): |
416 def __aboutToShowLibraryMenu(self): |
460 """ |
464 """ |
461 from ..UF2FlashDialog import UF2FlashDialog |
465 from ..UF2FlashDialog import UF2FlashDialog |
462 |
466 |
463 dlg = UF2FlashDialog(boardType="circuitpython") |
467 dlg = UF2FlashDialog(boardType="circuitpython") |
464 dlg.exec() |
468 dlg.exec() |
|
469 |
|
470 @pyqtSlot() |
|
471 def __activateBootloader(self): |
|
472 """ |
|
473 Private slot to switch the board into 'bootloader' mode. |
|
474 """ |
|
475 if self.microPython.isConnected(): |
|
476 self.microPython.deviceInterface().execute( |
|
477 "import microcontroller as mc\n" |
|
478 "mc.on_next_reset(mc.RunMode.BOOTLOADER)\n" |
|
479 "mc.reset()\n", |
|
480 mode=self._submitMode, |
|
481 ) |
465 |
482 |
466 @pyqtSlot() |
483 @pyqtSlot() |
467 def __showTeensyFlashInstructions(self): |
484 def __showTeensyFlashInstructions(self): |
468 """ |
485 """ |
469 Private slot to show a message box because Teensy does not support |
486 Private slot to show a message box because Teensy does not support |
1510 filename = os.path.join(workspace, name) |
1527 filename = os.path.join(workspace, name) |
1511 if os.path.exists(filename): |
1528 if os.path.exists(filename): |
1512 os.remove(filename) |
1529 os.remove(filename) |
1513 |
1530 |
1514 return True, "" |
1531 return True, "" |
1515 # TODO: not implemented yet |
|
1516 |
1532 |
1517 ################################################################## |
1533 ################################################################## |
1518 ## Methods below implement Bluetooth related methods |
1534 ## Methods below implement Bluetooth related methods |
1519 ################################################################## |
1535 ################################################################## |
1520 |
1536 |