src/eric7/MicroPython/Devices/TeensyDevices.py

Mon, 13 Feb 2023 17:49:52 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 13 Feb 2023 17:49:52 +0100
branch
eric7
changeset 9756
9854647c8c5c
parent 9755
src/eric7/MicroPython/TeensyDevices.py@1a09700229e7
child 9763
52f982c08301
permissions
-rw-r--r--

Reorganized the MicroPython package.

9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the device interface class for Teensy boards with MicroPython.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import QProcess, QUrl, pyqtSlot
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtNetwork import QNetworkRequest
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtWidgets import QMenu
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from eric7 import Globals, Preferences
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from eric7.EricWidgets import EricMessageBox
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from eric7.EricWidgets.EricApplication import ericApp
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
18 from . import FirmwareGithubUrls
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
19 from .DeviceBase import BaseDevice
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
20 from ..MicroPythonWidget import HAS_QTCHART
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
9756
9854647c8c5c Reorganized the MicroPython package.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9755
diff changeset
23 class TeensyDevice(BaseDevice):
9755
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Class implementing the device for Teensy boards with MicroPython.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 def __init__(self, microPythonWidget, deviceType, parent=None):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 Constructor
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param microPythonWidget reference to the main MicroPython widget
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type MicroPythonWidget
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param deviceType device type assigned to this device interface
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @type str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @param parent reference to the parent object
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @type QObject
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 super().__init__(microPythonWidget, deviceType, parent)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__createTeensyMenu()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 def setButtons(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 Public method to enable the supported action buttons.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 super().setButtons()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.microPython.setActionButtons(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 run=True, repl=True, files=True, chart=HAS_QTCHART
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 def forceInterrupt(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 Public method to determine the need for an interrupt when opening the
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 serial connection.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 @return flag indicating an interrupt is needed
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @rtype bool
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 return False
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 def deviceName(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 Public method to get the name of the device.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @return name of the device
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @rtype str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 return self.tr("Teensy")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 def canStartRepl(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 Public method to determine, if a REPL can be started.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 @return tuple containing a flag indicating it is safe to start a REPL
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 and a reason why it cannot.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 @rtype tuple of (bool, str)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 return True, ""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 def canStartPlotter(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 Public method to determine, if a Plotter can be started.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 @return tuple containing a flag indicating it is safe to start a
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 Plotter and a reason why it cannot.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @rtype tuple of (bool, str)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 return True, ""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 def canRunScript(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 Public method to determine, if a script can be executed.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 @return tuple containing a flag indicating it is safe to start a
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Plotter and a reason why it cannot.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 @rtype tuple of (bool, str)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 return True, ""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 def runScript(self, script):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 Public method to run the given Python script.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @param script script to be executed
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @type str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 pythonScript = script.split("\n")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.sendCommands(pythonScript)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 def canStartFileManager(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 Public method to determine, if a File Manager can be started.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @return tuple containing a flag indicating it is safe to start a
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 File Manager and a reason why it cannot.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @rtype tuple of (bool, str)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 return True, ""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 def getDocumentationUrl(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 Public method to get the device documentation URL.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @return documentation URL of the device
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 @rtype str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 return Preferences.getMicroPython("MicroPythonDocuUrl")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 def getFirmwareUrl(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 Public method to get the device firmware download URL.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 @return firmware download URL of the device
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @rtype str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 return Preferences.getMicroPython("MicroPythonFirmwareUrl")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 def __createTeensyMenu(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 Private method to create the microbit submenu.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.__teensyMenu = QMenu(self.tr("Teensy Functions"))
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 self.__showMpyAct = self.__teensyMenu.addAction(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.tr("Show MicroPython Versions"), self.__showFirmwareVersions
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 self.__teensyMenu.addSeparator()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 self.__teensyMenu.addAction(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 self.tr("MicroPython Flash Instructions"), self.__showFlashInstructions
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.__flashMpyAct = self.__teensyMenu.addAction(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 self.tr("Flash MicroPython Firmware"), self.__startTeensyLoader
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 self.__flashMpyAct.setToolTip(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 self.tr("Start the 'Teensy Loader' application to flash the Teensy device.")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def addDeviceMenuEntries(self, menu):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 Public method to add device specific entries to the given menu.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @param menu reference to the context menu
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @type QMenu
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 connected = self.microPython.isConnected()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 linkConnected = self.microPython.isLinkConnected()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 self.__showMpyAct.setEnabled(connected)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 self.__flashMpyAct.setEnabled(not linkConnected)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 menu.addMenu(self.__teensyMenu)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 @pyqtSlot()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 def __showFirmwareVersions(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 Private slot to show the firmware version of the connected device and the
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 available firmware version.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 if self.microPython.isConnected():
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 if self._deviceData["mpy_name"] != "micropython":
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 EricMessageBox.critical(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 None,
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 self.tr("Show MicroPython Versions"),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 self.tr(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 """The firmware of the connected device cannot be"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """ determined or the board does not run MicroPython."""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 """ Aborting..."""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 ),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 else:
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 ui = ericApp().getObject("UserInterface")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 request = QNetworkRequest(QUrl(FirmwareGithubUrls["micropython"]))
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 reply = ui.networkAccessManager().head(request)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 reply.finished.connect(lambda: self.__firmwareVersionResponse(reply))
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 def __firmwareVersionResponse(self, reply):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 Private method handling the response of the latest version request.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 @param reply reference to the reply object
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 @type QNetworkReply
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 latestUrl = reply.url().toString()
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 tag = latestUrl.rsplit("/", 1)[-1]
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 while tag and not tag[0].isdecimal():
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 # get rid of leading non-decimal characters
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 tag = tag[1:]
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 latestVersion = Globals.versionToTuple(tag)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 if self._deviceData["mpy_version"] == "unknown":
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 currentVersionStr = self.tr("unknown")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 currentVersion = (0, 0, 0)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 else:
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 currentVersionStr = self._deviceData["mpy_version"]
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 currentVersion = Globals.versionToTuple(currentVersionStr)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 msg = self.tr(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 "<h4>MicroPython Version Information</h4>"
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 "<table>"
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 "<tr><td>Installed:</td><td>{0}</td></tr>"
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 "<tr><td>Available:</td><td>{1}</td></tr>"
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 "</table>"
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 ).format(currentVersionStr, tag)
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 if currentVersion < latestVersion:
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 msg += self.tr("<p><b>Update available!</b></p>")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 EricMessageBox.information(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 None,
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 self.tr("MicroPython Version"),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 msg,
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 def __showFlashInstructions(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 Private method to show a message box with instruction to flash the Teensy.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 EricMessageBox.information(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 self.microPython,
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 self.tr("Flash MicroPython Firmware"),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 self.tr(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 """<p>Teensy 4.0 and Teensy 4.1 are flashed using the 'Teensy Loader'"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 """ application. Make sure you downloaded the MicroPython or"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 """ CircuitPython .hex file.</p>"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 """<p>See <a href="{0}">the PJRC Teensy web site</a>"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 """ for details.</p>"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 ).format("https://www.pjrc.com/teensy/loader.html"),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 def __startTeensyLoader(self):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 Private method to start the 'Teensy Loader' application.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 Note: The application must be accessible via the application search path.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 ok, _ = QProcess.startDetached("teensy")
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 if not ok:
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 EricMessageBox.warning(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 self.microPython,
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 self.tr("Start 'Teensy Loader'"),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.tr(
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 """<p>The 'Teensy Loader' application <b>teensy</b> could not"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 """ be started. Ensure it is in the application search path or"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """ start it manually.</p>"""
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 ),
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 )
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 def createDevice(microPythonWidget, deviceType, vid, pid, boardName, serialNumber):
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 Function to instantiate a MicroPython device object.
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @param microPythonWidget reference to the main MicroPython widget
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 @type MicroPythonWidget
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 @param deviceType device type assigned to this device interface
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 @type str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 @param vid vendor ID
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 @type int
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 @param pid product ID
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 @type int
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 @param boardName name of the board
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 @type str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 @param serialNumber serial number of the board
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 @type str
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 @return reference to the instantiated device object
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 @rtype PyBoardDevice
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 """
1a09700229e7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 return TeensyDevice(microPythonWidget, deviceType)

eric ide

mercurial