src/eric7/MicroPython/Devices/STLinkDevices.py

Fri, 21 Mar 2025 18:11:36 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 21 Mar 2025 18:11:36 +0100
branch
eric7
changeset 11184
33a600dd86f4
parent 11167
a3f5af773bc7
permissions
-rw-r--r--

Corrected the device interface for STLiink devices.

9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
11090
f5f5f5803935 Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11034
diff changeset
3 # Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the device interface class for STM32 STLink boards.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QStandardPaths, QUrl, pyqtSlot
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtWidgets import QMenu
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
10806
2f6df822e3b9 Moved some functions to the EricUtilities package for consistency and adapted the code base accordingly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10683
diff changeset
16 from eric7 import EricUtilities, Preferences
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from eric7.EricWidgets import EricFileDialog, EricMessageBox
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricWidgets.EricApplication import ericApp
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from eric7.EricWidgets.EricProcessDialog import EricProcessDialog
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from eric7.SystemUtilities import FileSystemUtilities
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from ..MicroPythonWidget import HAS_QTCHART
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from . import FirmwareGithubUrls
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from .DeviceBase import BaseDevice
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 class STLinkDevice(BaseDevice):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
11167
a3f5af773bc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11090
diff changeset
29 Class implementing the device for STM32 STLink boards.
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 DeviceVolumeName = "NODE_"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 def __init__(self, microPythonWidget, deviceType, parent=None):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Constructor
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param microPythonWidget reference to the main MicroPython widget
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type MicroPythonWidget
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param deviceType device type assigned to this device interface
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @param parent reference to the parent object
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 @type QObject
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 super().__init__(microPythonWidget, deviceType, parent)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self._submitMode = "paste" # use 'paste' mode
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.__createSTLinkMenu()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 def setButtons(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 Public method to enable the supported action buttons.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 super().setButtons()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.microPython.setActionButtons(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 run=True, repl=True, files=True, chart=HAS_QTCHART
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def forceInterrupt(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Public method to determine the need for an interrupt when opening the
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 serial connection.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @return flag indicating an interrupt is needed
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @rtype bool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 return False
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 def deviceName(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 Public method to get the name of the device.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 @return name of the device
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 @rtype str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 return self.tr("STM32 STLink")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 def canStartRepl(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 Public method to determine, if a REPL can be started.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 @return tuple containing a flag indicating it is safe to start a REPL
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 and a reason why it cannot.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @rtype tuple of (bool, str)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 return True, ""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 def canStartPlotter(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 Public method to determine, if a Plotter can be started.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 @return tuple containing a flag indicating it is safe to start a
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 Plotter and a reason why it cannot.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 @rtype tuple of (bool, str)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 return True, ""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 def canRunScript(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 Public method to determine, if a script can be executed.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 @return tuple containing a flag indicating it is safe to start a
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 Plotter and a reason why it cannot.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @rtype tuple of (bool, str)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 return True, ""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 def runScript(self, script):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 Public method to run the given Python script.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @param script script to be executed
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @type str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 pythonScript = script.split("\n")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.sendCommands(pythonScript)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 def canStartFileManager(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 Public method to determine, if a File Manager can be started.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @return tuple containing a flag indicating it is safe to start a
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 File Manager and a reason why it cannot.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 @rtype tuple of (bool, str)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 return True, ""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 def getDocumentationUrl(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 Public method to get the device documentation URL.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 @return documentation URL of the device
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @rtype str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 return Preferences.getMicroPython("MicroPythonDocuUrl")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 def getFirmwareUrl(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 Public method to get the device firmware download URL.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 @return firmware download URL of the device
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 @rtype str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 return Preferences.getMicroPython("MicroPythonFirmwareUrl")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 def __createSTLinkMenu(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 Private method to create the STLink submenu.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.__stlinkMenu = QMenu(self.tr("STLink Functions"))
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.__showMpyAct = self.__stlinkMenu.addAction(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 self.tr("Show MicroPython Versions"), self.__showFirmwareVersions
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 self.__stlinkMenu.addSeparator()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.__stlinkInfoAct = self.__stlinkMenu.addAction(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.tr("Show STLink Device Information"), self.__showDeviceInfo
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 self.__stlinkMenu.addSeparator()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self.__flashMpyAct = self.__stlinkMenu.addAction(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.tr("Flash MicroPython Firmware"), self.__flashMicroPython
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 self.__stlinkMenu.addSeparator()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self.__resetAct = self.__stlinkMenu.addAction(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 self.tr("Reset Device"), self.__resetDevice
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 def addDeviceMenuEntries(self, menu):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 Public method to add device specific entries to the given menu.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 @param menu reference to the context menu
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 @type QMenu
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 connected = self.microPython.isConnected()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 linkConnected = self.microPython.isLinkConnected()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.__showMpyAct.setEnabled(connected)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.__stlinkInfoAct.setEnabled(not linkConnected)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 self.__flashMpyAct.setEnabled(not linkConnected)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 self.__resetAct.setEnabled(connected)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 menu.addMenu(self.__stlinkMenu)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 def hasFlashMenuEntry(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 Public method to check, if the device has its own flash menu entry.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 @return flag indicating a specific flash menu entry
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @rtype bool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 return True
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 def __stlinkToolAvailable(self, toolname):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 Private method to check the availability of the given STLink tool.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 Note: supported tools are st-info and st-flash
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 @param toolname name of the tool to be checked
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 @type str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 @return flag indicating the availability of the given STLink tool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 @rtype bool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 @exception ValueError raised to indicate an illegal tool name
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 if toolname not in ("st-info", "st-flash"):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 raise ValueError("Illegal tool name given.")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 preferencesKey = "StInfoPath" if toolname == "st-info" else "StFlashPath"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 available = False
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 program = Preferences.getMicroPython(preferencesKey)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 if not program:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 program = toolname
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 if FileSystemUtilities.isinpath(program):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 available = True
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 else:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 if FileSystemUtilities.isExecutable(program):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 available = True
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 if not available:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 msg = (
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 self.tr(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 """The STLink information tool <b>st-info</b> cannot be found or"""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 """ is not executable. Ensure it is in the search path or"""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """ configure it on the MicroPython configuration page."""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 if toolname == "st-info"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 else self.tr(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 """The STLink firmware flashing tool <b>st-flash</b> cannot be"""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 """ found or is not executable. Ensure it is in the search path"""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 """ or configure it on the MicroPython configuration page."""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 EricMessageBox.critical(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 self.microPython,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 self.tr("{0} not available").format(toolname),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 msg,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 return available
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 def __stflashAvailable(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 Private method to check the availability of the 'st-flash' firmware flashing
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 tool.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 @return flag indicating the availability of the 'st-flash' firmware flashing
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 tool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 @rtype bool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 return self.__stlinkToolAvailable("st-flash")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 def __stinfoAvailable(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 Private method to check the availability of the 'st-info' tool.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 @return flag indicating the availability of the 'st-info' tool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 @rtype bool
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 return self.__stlinkToolAvailable("st-flash")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 @pyqtSlot()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 def __flashMicroPython(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 Private slot to flash a MicroPython firmware.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 if self.__stflashAvailable():
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 ok2continue = EricMessageBox.question(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 None,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 self.tr("Flash MicroPython Firmware"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 self.tr(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 """Ensure that only one STLink device is connected. Press OK"""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 """ to continue."""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 ),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 EricMessageBox.Cancel | EricMessageBox.Ok,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 EricMessageBox.Cancel,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 if ok2continue:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 program = Preferences.getMicroPython("StFlashPath")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 if not program:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 program = "st-flash"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 downloadsPath = QStandardPaths.standardLocations(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 QStandardPaths.StandardLocation.DownloadLocation
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 )[0]
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 firmware = EricFileDialog.getOpenFileName(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 self.microPython,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 self.tr("Flash MicroPython Firmware"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 downloadsPath,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 self.tr("MicroPython Firmware Files (*.hex *.bin);; All Files (*)"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 if firmware and os.path.exists(firmware):
9972
68ac01294544 Corrected some code style and formatting issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9958
diff changeset
296 args = ["--connect-under-reset"]
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 if os.path.splitext(firmware)[-1].lower() == ".hex":
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 args.extend(["--format", "ihex", "write", firmware])
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 else:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 args.extend(["write", firmware, "0x08000000"])
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 dlg = EricProcessDialog(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 outputTitle=self.tr("'st-flash' Output"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 windowTitle=self.tr("Flash MicroPython Firmware"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 showInput=False,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 combinedOutput=True,
10933
95a15b70f7bb Refactored some packages, modules and code to allow extracting the 'EricXxx' packages into a library project.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10806
diff changeset
306 monospacedFont=Preferences.getEditorOtherFonts(
95a15b70f7bb Refactored some packages, modules and code to allow extracting the 'EricXxx' packages into a library project.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10806
diff changeset
307 "MonospacedFont"
95a15b70f7bb Refactored some packages, modules and code to allow extracting the 'EricXxx' packages into a library project.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10806
diff changeset
308 ),
95a15b70f7bb Refactored some packages, modules and code to allow extracting the 'EricXxx' packages into a library project.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10806
diff changeset
309 encoding=Preferences.getSystem("IOEncoding"),
11006
a671918232f3 Modified modal dialog usage to always include a valid parent (needed for Wayland).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10933
diff changeset
310 parent=self.microPython,
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 res = dlg.startProcess(program, args)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 if res:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 dlg.exec()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 @pyqtSlot()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 def __showDeviceInfo(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 Private slot to show some information about connected STLink devices.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 if self.__stinfoAvailable():
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 program = Preferences.getMicroPython("StInfoPath")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 if not program:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 program = "st-info"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 dlg = EricProcessDialog(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 self.tr("'st-info' Output"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 self.tr("STLink Device Information"),
10933
95a15b70f7bb Refactored some packages, modules and code to allow extracting the 'EricXxx' packages into a library project.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10806
diff changeset
329 monospacedFont=Preferences.getEditorOtherFonts("MonospacedFont"),
95a15b70f7bb Refactored some packages, modules and code to allow extracting the 'EricXxx' packages into a library project.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10806
diff changeset
330 encoding=Preferences.getSystem("IOEncoding"),
11006
a671918232f3 Modified modal dialog usage to always include a valid parent (needed for Wayland).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10933
diff changeset
331 parent=self.microPython,
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 res = dlg.startProcess(program, ["--probe"])
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 if res:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 dlg.exec()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 @pyqtSlot()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 def __showFirmwareVersions(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 Private slot to show the firmware version of the connected device and the
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 available firmware version.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 if self.microPython.isConnected():
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 if self._deviceData["mpy_name"] != "micropython":
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 EricMessageBox.critical(
11034
7b8a21fd2d58 Extended the EricMessageBox module to determine a parent widget if none was given and extended the EricApplication class to store a reference to the main widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11006
diff changeset
346 self.microPython,
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 self.tr("Show MicroPython Versions"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 self.tr(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """The firmware of the connected device cannot be"""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 """ determined or the board does not run MicroPython."""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 """ Aborting..."""
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 ),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 else:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 ui = ericApp().getObject("UserInterface")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 request = QNetworkRequest(QUrl(FirmwareGithubUrls["micropython"]))
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 reply = ui.networkAccessManager().head(request)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 reply.finished.connect(lambda: self.__firmwareVersionResponse(reply))
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 @pyqtSlot(QNetworkReply)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 def __firmwareVersionResponse(self, reply):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 Private slot handling the response of the latest version request.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 @param reply reference to the reply object
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 @type QNetworkReply
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 latestUrl = reply.url().toString()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 tag = latestUrl.rsplit("/", 1)[-1]
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 while tag and not tag[0].isdecimal():
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 # get rid of leading non-decimal characters
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 tag = tag[1:]
10806
2f6df822e3b9 Moved some functions to the EricUtilities package for consistency and adapted the code base accordingly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10683
diff changeset
373 latestVersion = EricUtilities.versionToTuple(tag)
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 if self._deviceData["mpy_version"] == "unknown":
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 currentVersionStr = self.tr("unknown")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 currentVersion = (0, 0, 0)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 else:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 currentVersionStr = self._deviceData["mpy_version"]
10806
2f6df822e3b9 Moved some functions to the EricUtilities package for consistency and adapted the code base accordingly.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10683
diff changeset
380 currentVersion = EricUtilities.versionToTuple(currentVersionStr)
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 msg = self.tr(
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 "<h4>MicroPython Version Information</h4>"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 "<table>"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 "<tr><td>Installed:</td><td>{0}</td></tr>"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 "<tr><td>Available:</td><td>{1}</td></tr>"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 "</table>"
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 ).format(currentVersionStr, tag)
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 if currentVersion < latestVersion:
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 msg += self.tr("<p><b>Update available!</b></p>")
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392 EricMessageBox.information(
11034
7b8a21fd2d58 Extended the EricMessageBox module to determine a parent widget if none was given and extended the EricApplication class to store a reference to the main widget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11006
diff changeset
393 self.microPython,
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 self.tr("MicroPython Version"),
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 msg,
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 )
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 @pyqtSlot()
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 def __resetDevice(self):
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 Private slot to reset the connected device.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 """
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9972
diff changeset
403 if self.microPython.isConnected():
11184
33a600dd86f4 Corrected the device interface for STLiink devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11167
diff changeset
404 out, err = self.executeCommands(
9989
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9972
diff changeset
405 "import machine\nmachine.reset()\n", mode=self._submitMode
286c2a21f36f MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9972
diff changeset
406 )
11184
33a600dd86f4 Corrected the device interface for STLiink devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11167
diff changeset
407 if not err:
33a600dd86f4 Corrected the device interface for STLiink devices.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11167
diff changeset
408 self.microPython.insertData(out + b"\r\n")
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
411 def createDevice(microPythonWidget, deviceType, _vid, _pid, _boardName, _serialNumber):
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 Function to instantiate a MicroPython device object.
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 @param microPythonWidget reference to the main MicroPython widget
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 @type MicroPythonWidget
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 @param deviceType device type assigned to this device interface
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 @type str
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
419 @param _vid vendor ID (unused)
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 @type int
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
421 @param _pid product ID (unused)
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 @type int
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
423 @param _boardName name of the board (unused)
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 @type str
10683
779cda568acb Changed the source code and the source code documentation to improve the indication of unused method/function arguments.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10439
diff changeset
425 @param _serialNumber serial number of the board (unused)
9958
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 @type str
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427 @return reference to the instantiated device object
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
428 @rtype PyBoardDevice
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 """
a78b83d1062a MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 return STLinkDevice(microPythonWidget, deviceType)

eric ide

mercurial