src/eric7/MicroPython/TeensyDevices.py

Sun, 12 Feb 2023 18:11:20 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 12 Feb 2023 18:11:20 +0100
branch
eric7
changeset 9755
1a09700229e7
permissions
-rw-r--r--

MicroPython
- Added support for Teensy 4.0 and 4.1 devices with MicroPython.

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

eric ide

mercurial