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