Updated translations.
8096
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3
|
# Copyright (c) 2021 Detlev Offenbach <detlev@die-offenbachs.de> |
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 a dialog to flash any UF2 capable device. |
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
|
import shutil |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication, QThread, QEventLoop |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
from PyQt5.QtWidgets import QDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
from E5Gui.E5PathPicker import E5PathPickerModes |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
from .Ui_UF2FlashDialog import Ui_UF2FlashDialog |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
import UI.PixmapCache |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
import Utilities |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
from . import MicroPythonDevices |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
SupportedUF2Boards = { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
"circuitpython": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
"volumes": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
(0x03EB, 0x2402): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
"SAMD21", # SAMD21 Board |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
"SAME54", # SAME54 Board |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
(0x04D8, 0xEC44): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
"PYCUBEDBOOT", # PyCubedv04 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
(0x04D8, 0xEC63): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
"BOOT", # CircuitBrains Basic |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
(0x04D8, 0xEC64): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
"BOOT", # CircuitBrains Deluxe |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
(0x04D8, 0xED5F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
"UCHIPYBOOT", # uChip CircuitPython |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
(0x04D8, 0xEDB3): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
"USBHUBBOOT", # Programmable USB Hub |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
(0x04D8, 0xEDBE): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
"SAM32BOOT", # SAM32 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
(0x04D8, 0xEF66): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
"SENSEBOX", # senseBox MCU |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
(0x1209, 0x2017): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
"MINISAMBOOT", # Mini SAM M4 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
(0x1209, 0x4D44): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
"ROBOM0BOOT", # Robo HAT MM1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
"ROBOM4BOOT", # Robo HAT MM1 M4 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
(0x1209, 0x4DDD): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
"SapBOOT", # CP Sapling |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
(0x1209, 0x7102): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
"MINISAMBOOT", # Mini SAM M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
(0x1209, 0x805A): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
"BASTBLE", # Bast BLE |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
(0x1209, 0xE3E2): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
"StackRduino", # StackRduino M0 PRO |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
(0x1209, 0xF501): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
"M4SHIMBOOT", # M4-Shim |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
(0x16D0, 0x0CDA): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
"AUTOMAT", # automat |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
(0x1B4F, 0x0019): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
"QwiicMicro", # Sparkfun Qwiic Micro |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
(0x1B4F, 0x0D22): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
"SPARKFUN", # Sparkfun SAMD21 Mini Breakout |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
(0x1B4F, 0x0D23): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
"SPARKFUN", # Sparkfun SAMD21 Dev Breakout |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
(0x1D50, 0x6110): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
"ROBOTICS", # Robotics |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
(0x1D50, 0x6112): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
"RCBOOT", # Wattuino RC |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
(0x1D50, 0x6160): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
"BLUEMICRO", # BlueMicro |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
(0x230A, 0x00E9): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
"TAU_BOOT", # Tau |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
(0x2341, 0x0057): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
"NANOBOOT", # NANO 33 IoT |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
(0x2341, 0x8053): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
"MKR1300", # MKR1300 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
(0x239A, 0x000F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
"ITSYBOOT", # ItsyBitsy M0 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
(0x239A, 0x0013): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
"METROBOOT", # Metro M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
(0x239A, 0x0015): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
"FEATHERBOOT", # Feather M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
(0x239A, 0x0018): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
"CPLAYBOOT", # CPlay Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
(0x239A, 0x001B): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
"FEATHERBOOT", # Feather M0 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
(0x239A, 0x001C): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
"GEMMABOOT", # Gemma M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
(0x239A, 0x001E): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
"TRINKETBOOT", # Trinket M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
(0x239A, 0x0021): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
"METROM4BOOT", # Metro M4 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
(0x239A, 0x0022): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
"ARCADE-D5", # Feather Arcade D51 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
"FEATHERBOOT", # Feather M4 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
(0x239A, 0x0024): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
"RADIOBOOT", # Radiofruit M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
(0x239A, 0x0027): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
"PIRKEYBOOT", # pIRKey M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
(0x239A, 0x0029): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
"ARGONBOOT ", # Argon |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
"BORONBOOT ", # Boron |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
"FTHR840BOOT", # Feather nRF52840 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
"MDBT50QBOOT", # Raytac MDBT50Q-RX |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
"MDK840DONGL", # MDK nRF52840 USB Dongle |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
"WS52840EVK", # Waveshare nRF52840 Eval |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
"XENONBOOT ", # Xenon |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
(0x239A, 0x002B): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
"ARCADE-D5", # Itsy Arcade D51 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
"ITSYM4BOOT", # ItsyBitsy M4 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
(0x239A, 0x002D): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
"CRICKITBOOT", # crickit |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
(0x239A, 0x002F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
"TRELM4BOOT", # Trellis M4 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
(0x239A, 0x0031): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
"GCM4BOOT", # Grand Central M4 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
(0x239A, 0x0033): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
"PYBADGEBOOT", # PyBadge |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
(0x239A, 0x0034): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
"BADGELCBOOT", # BadgeLC |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
"PEWBOOT", # PewPew |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
(0x239A, 0x0035): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169
|
"MKRZEROBOOT", # MKRZero |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170
|
"PORTALBOOT", # PyPortal M4 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
(0x239A, 0x0037): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173
|
"METROM4BOOT", # Metro M4 AirLift |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
(0x239A, 0x003D): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
"PYGAMERBOOT", # PyGamer |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178
|
(0x239A, 0x003F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179
|
"METR840BOOT", # Metro nRF52840 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181
|
(0x239A, 0x0045): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182
|
"CPLAYBTBOOT", # Circuit Playground nRF52840 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184
|
(0x239A, 0x0047): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185
|
"MASKM4BOOT", # Hallowing Mask M4 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187
|
(0x239A, 0x0049): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188
|
"HALLOM4BOOT", # HalloWing M4 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190
|
(0x239A, 0x004D): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191
|
"SNEKBOOT", # snekboard |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193
|
(0x239A, 0x0051): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194
|
"ITSY840BOOT", # ItsyBitsy nRF52840 Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196
|
(0x239A, 0x0057): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197
|
"SERPENTBOOT", # Serpente |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199
|
(0x239A, 0x0061): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200
|
"SOLBOOT", # Sol |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202
|
(0x239A, 0x0063): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203
|
"NANO33BOOT", # Nano 33 BLE |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205
|
(0x239A, 0x0065): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206
|
"ND6BOOT", # ndBit6 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208
|
(0x239A, 0x006B): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209
|
"shIRtty", # shIRtty |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211
|
(0x239A, 0x0071): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212
|
"CLUEBOOT", # CLUE nRF52840 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214
|
(0x239A, 0x0079): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215
|
"ARAMBOOT", # ARAMCON Badge 2019 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217
|
(0x239A, 0x007D): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218
|
"BOOKBOOT", # The Open Book Feather |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220
|
(0x239A, 0x007F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221
|
"BADGEBOOT", # OHS2020 Badge |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223
|
(0x239A, 0x0087): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224
|
"FTHRSNSBOOT", # Feather nRF52840 Sense |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226
|
(0x239A, 0x0093): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227
|
"ISVITABoot", # IkigaiSense Vita nRF52840 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229
|
(0x239A, 0x0095): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230
|
"UARTLOGBOOT", # UARTLogger II |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232
|
(0x239A, 0x009F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233
|
"ADM840BOOT", # AtelierDuMaker NRF52840 Breakout |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235
|
(0x239A, 0x00AF): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236
|
"FLUFFBOOT", # Fluff M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
238
|
(0x239A, 0x00B3): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239
|
"NICENANO", # nice!nano |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241
|
(0x239A, 0x00B5): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242
|
"E54XBOOT", # SAME54 Xplained |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244
|
(0x239A, 0x00B9): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245
|
"ND7BOOT", # ndBit7 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247
|
(0x239A, 0x00BF): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248
|
"BADGEBOOT", # BLM Badge |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250
|
(0x239A, 0x00C3): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251
|
"GEMINIBOOT", # Gemini |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253
|
(0x239A, 0x00CB): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254
|
"QTPY_BOOT", # QT Py M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256
|
(0x239A, 0x00CD): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257
|
"FTHRCANBOOT", # Feather M4 CAN Express |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259
|
(0x239A, 0x00EF): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260
|
"TRINKEYBOOT", # NeoPixel Trinkey M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262
|
(0x239A, 0x00F5): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263
|
"STARBOOT", # Binary Star |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265
|
(0x239A, 0xB000): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266
|
"HALLOWBOOT", # Hallowing M0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268
|
(0x239A, 0xE005): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269
|
"HONKBOOT", # Big Honking Button |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271
|
(0x2886, 0x000D): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272
|
"Grove Zero", # Grove Zero |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274
|
(0x2886, 0x002F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
275
|
"Seeed XIAO", # Seeeduino XIAO |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276
|
"Arduino", # Seeeduino XIAO |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
277
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278
|
(0x2886, 0xF00E): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
279
|
"PITAYAGO", # Pitaya Go |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281
|
(0x2886, 0xF00F): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282
|
"nRF52840M2", # MakerDiary nRF52840 M.2 Module |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284
|
(0x3171, 0x0100): [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285
|
"CMDBOOT", # COMMANDER |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
286
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288
|
"instructions": QCoreApplication.translate( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289
|
"UF2FlashDialog", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290
|
"<h3>CircuitPython Board</h3>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291
|
"<p>In order to prepare the board for flashing follow these" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292
|
" steps:</p><ol>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293
|
"<li>Switch your device to 'bootloader' mode by double-pressing" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294
|
" the reset button.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295
|
"<li>Wait until the device has entered 'bootloader' mode.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296
|
"<li>(If this does not happen, then try shorter or longer" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297
|
" pauses between presses.)</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298
|
"<li>Ensure the boot volume is available (this may require" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299
|
" mounting it).</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300
|
"<li>Select the firmware file to be flashed and click the" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301
|
" flash button.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302
|
"</ol>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304
|
"firmware": "CircuitPython", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
307
|
"rp2040": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308
|
"volumes": [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310
|
], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311
|
"instructions": QCoreApplication.translate( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312
|
"UF2FlashDialog", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
313
|
"<h3>Pi Pico (RP2040) Board</h3>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314
|
"<p>In order to prepare the board for flashing follow these" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315
|
" steps:</p><ol>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316
|
"<li>Plug in your board while holding the BOOTSEL button.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317
|
"<li>Wait until the device has entered 'bootloader' mode.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318
|
"<li>Ensure the boot volume is available (this may require" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319
|
" mounting it).</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320
|
"<li>Select the firmware file to be flashed and click the" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321
|
" flash button.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
322
|
"</ol>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
323
|
), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
324
|
"firmware": "MicroPython", |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
325
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326
|
} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
328
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329
|
def getFoundDevices(boardType=""): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
331
|
Function to get the list of known serial devices supporting UF2. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
332
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
333
|
@param boardType specific board type to search for |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
334
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335
|
@return list of tuples with the board type, the port description, the |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336
|
VID and PID |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
337
|
@rtype list of tuple of (str, str, int, int) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339
|
from PyQt5.QtSerialPort import QSerialPortInfo |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
340
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341
|
foundDevices = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
343
|
availablePorts = QSerialPortInfo.availablePorts() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344
|
for port in availablePorts: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
345
|
vid = port.vendorIdentifier() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346
|
pid = port.productIdentifier() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348
|
if vid == 0 and pid == 0: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
349
|
# no device detected at port |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
350
|
continue |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
351
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
352
|
for board in SupportedUF2Boards: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353
|
if not boardType or (board == boardType): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354
|
if (vid, pid) in SupportedUF2Boards[board]["volumes"]: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355
|
foundDevices.append(( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356
|
board, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357
|
port.description(), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358
|
(vid, pid), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359
|
)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361
|
return foundDevices |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364
|
class UF2FlashDialog(QDialog, Ui_UF2FlashDialog): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366
|
Class implementing a dialog to flash any UF2 capable device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368
|
DeviceTypeRole = Qt.UserRole |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369
|
DeviceVidPidRole = Qt.UserRole + 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371
|
def __init__(self, boardType="", parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375
|
@param boardType specific board type to show the dialog for |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380
|
super(UF2FlashDialog, self).__init__(parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381
|
self.setupUi(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
382
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
383
|
self.refreshButton.setIcon(UI.PixmapCache.getIcon("rescan")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
384
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
385
|
self.firmwarePicker.setMode(E5PathPickerModes.OpenFileMode) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
386
|
self.firmwarePicker.setFilters( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387
|
self.tr("MicroPython/CircuitPython Files (*.uf2);;" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388
|
"All Files (*)")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
389
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
390
|
self.bootPicker.setMode(E5PathPickerModes.DirectoryShowFilesMode) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
391
|
self.bootPicker.setEnabled(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
392
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393
|
self.__mandatoryStyleSheet = ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394
|
"QLineEdit {border: 2px solid;border-color: #800000}" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396
|
self.__manualType = "<manual>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398
|
self.__boardType = boardType |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400
|
self.__populate() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
401
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
402
|
self.__updateFlashButton() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
403
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
404
|
def __populate(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
406
|
Private method to (re-)populate the dialog. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
407
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
408
|
# save the currently selected device |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
409
|
currentDevice = self.devicesComboBox.currentText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
410
|
firmwareFile = self.firmwarePicker.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
412
|
# clear the entries first |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413
|
self.devicesComboBox.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
414
|
self.firmwarePicker.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415
|
self.bootPicker.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
416
|
self.infoLabel.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
417
|
self.infoEdit.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
419
|
# now populate the entries with data |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
420
|
devices = getFoundDevices(boardType=self.__boardType) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
421
|
if len(devices) == 0: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
422
|
# no device detected |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
423
|
devices = filter( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
424
|
lambda x: x[0] in SupportedUF2Boards, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
425
|
MicroPythonDevices.getFoundDevices()[0] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
426
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
427
|
if devices: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
428
|
self.__showSpecificInstructions(list(devices)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
429
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
430
|
self.__showAllInstructions() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
431
|
self.devicesComboBox.addItem("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
432
|
self.devicesComboBox.addItem(self.tr("Manual Select")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
433
|
self.devicesComboBox.setItemData(1, self.__manualType, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
434
|
self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
435
|
elif len(devices) == 1: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
436
|
self.devicesComboBox.addItem(devices[0][1]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
437
|
self.devicesComboBox.setItemData( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
438
|
0, devices[0][0], self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
439
|
self.devicesComboBox.setItemData( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
440
|
0, devices[0][2], self.DeviceVidPidRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
441
|
self.devicesComboBox.addItem(self.tr("Manual Select")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
442
|
self.devicesComboBox.setItemData(1, self.__manualType, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
443
|
self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
444
|
self.on_devicesComboBox_currentIndexChanged(0) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
445
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
446
|
self.devicesComboBox.addItem("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
447
|
for index, (boardType, description, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
448
|
vidpid) in enumerate(sorted(devices), 1): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
449
|
self.devicesComboBox.addItem(description) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
450
|
self.devicesComboBox.setItemData( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
451
|
index, boardType, self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
452
|
self.devicesComboBox.setItemData( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
453
|
index, vidpid, self.DeviceVidPidRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
454
|
self.devicesComboBox.addItem(self.tr("Manual Select")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
455
|
self.devicesComboBox.setItemData(index + 1, self.__manualType, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
456
|
self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
457
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
458
|
# reselect the remembered device, if it is still there |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
459
|
if currentDevice: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
460
|
self.devicesComboBox.setCurrentText(currentDevice) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
461
|
self.firmwarePicker.setText(firmwareFile) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
462
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
463
|
self.devicesComboBox.setCurrentIndex(0) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
464
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
465
|
def __updateFlashButton(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
466
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
467
|
Private method to update the state of the Flash button and the retest |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
468
|
button. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
469
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
470
|
firmwareFile = self.firmwarePicker.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
471
|
if self.devicesComboBox.currentData(self.DeviceTypeRole) is not None: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
472
|
if bool(firmwareFile) and os.path.exists(firmwareFile): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
473
|
self.firmwarePicker.setStyleSheet("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
474
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
475
|
self.firmwarePicker.setStyleSheet(self.__mandatoryStyleSheet) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
476
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
477
|
if bool(self.bootPicker.text()): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
478
|
self.bootPicker.setStyleSheet("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
479
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
480
|
self.bootPicker.setStyleSheet(self.__mandatoryStyleSheet) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
481
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
482
|
self.firmwarePicker.setStyleSheet("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
483
|
self.bootPicker.setStyleSheet("") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
484
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485
|
enable = ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486
|
bool(self.bootPicker.text()) and |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487
|
bool(firmwareFile) and |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488
|
os.path.exists(firmwareFile) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490
|
self.flashButton.setEnabled(enable) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492
|
def __showAllInstructions(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494
|
Private method to show instructions for resetting devices to bootloader |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495
|
mode. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
496
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
497
|
self.infoLabel.setText(self.tr("Reset Instructions:")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
498
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
499
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500
|
"<h4>No known devices detected.</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
501
|
"<p>Follow the appropriate instructions below to set <b>one</b>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
502
|
" board into 'bootloader' mode. Press <b>Refresh</b> when ready." |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
503
|
"</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
504
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
505
|
for boardType in SupportedUF2Boards: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
506
|
htmlText += "<hr/>" + SupportedUF2Boards[boardType]["instructions"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
507
|
self.infoEdit.setHtml(htmlText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
508
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
509
|
def __showSpecificInstructions(self, devices): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
510
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
511
|
Private method to show instructions for resetting devices to bootloader |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
512
|
mode for a list of detected devices. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
513
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514
|
@param devices list of detected devices |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
515
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
516
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
517
|
boardTypes = set(x[0] for x in devices) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
518
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
519
|
self.infoLabel.setText(self.tr("Reset Instructions:")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
520
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521
|
if self.__boardType: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
522
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523
|
"<h4>Flash {0} Firmware</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524
|
"<p>Follow the instructions below to set <b>one</b> board into" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
525
|
" 'bootloader' mode. Press <b>Refresh</b> when ready.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526
|
"<hr/>{1}" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
527
|
).format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528
|
SupportedUF2Boards[self.__boardType]["firmware"], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529
|
SupportedUF2Boards[self.__boardType]["instructions"], |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
530
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
532
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
533
|
"<h4>Potentially UF2 capable devices found</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
534
|
"<p>Found these potentially UF2 capable devices:</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
535
|
"<ul><li>{0}</li></ul>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
536
|
"<p>Follow the instructions below to set <b>one</b> board into" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
537
|
" 'bootloader' mode. Press <b>Refresh</b> when ready.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
538
|
).format( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
539
|
"</li><li>".join(sorted(x[1] for x in devices)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
541
|
for boardType in sorted(boardTypes): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
542
|
htmlText += ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
543
|
"<hr/>" + SupportedUF2Boards[boardType]["instructions"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
544
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
545
|
self.infoEdit.setHtml(htmlText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
546
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547
|
def __showTypedInstructions(self, boardType): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
548
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
549
|
Private method to show instructions for resetting devices to bootloader |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
550
|
mode for a specific board type. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552
|
@param boardType type of the board to show instructions for |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
553
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555
|
self.infoLabel.setText(self.tr("Reset Instructions:")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
557
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
558
|
"<h4>No known devices detected.</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
559
|
"<p>Follow the instructions below to set <b>one</b> board into" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
560
|
" 'bootloader' mode. Press <b>Refresh</b> when ready.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
561
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
562
|
htmlText += "<hr/>" + SupportedUF2Boards[boardType]["instructions"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
563
|
self.infoEdit.setHtml(htmlText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
564
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
565
|
def __showManualInstructions(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
566
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
567
|
Private method to show instructions for flashing devices manually. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
568
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
569
|
self.infoLabel.setText(self.tr("Flash Instructions:")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
570
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
571
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
572
|
"<h4>Flash method 'manual' selected.</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
573
|
"<p>Follow the instructions below to flash a device by entering" |
8097
|
574
|
" the data manually.</p><ol>" |
8096
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
575
|
"<li>Change the device to 'bootloader' mode.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
576
|
"<li>Wait until the device has entered 'bootloader' mode.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
577
|
"<li>Ensure the boot volume is available (this may require" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
578
|
" mounting it) and select its path.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
579
|
"<li>Select the firmware file to be flashed and click the" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
580
|
" flash button.</li>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
581
|
"</ol>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
582
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
583
|
for boardType in SupportedUF2Boards: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
584
|
htmlText += "<hr/>" + SupportedUF2Boards[boardType]["instructions"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585
|
self.infoEdit.setHtml(htmlText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587
|
def __showNoVolumeInformation(self, volumes): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
588
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
589
|
Private method to show information about the expected boot volume(s). |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
590
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591
|
@param volumes list of expected volume names |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
592
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
594
|
self.infoLabel.setText(self.tr("Boot Volume not found:")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597
|
"<h4>No Boot Volume detected.</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
598
|
"<p>Please ensure that the boot volume of the device to be flashed" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
599
|
" is available. " |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
600
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
601
|
if len(volumes) == 1: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
602
|
htmlText += self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
603
|
"This volume should be named <b>{0}</b>." |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
604
|
" Press <b>Refresh</b> when ready.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
605
|
).format(volumes[0]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
606
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
607
|
htmlText += self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
608
|
"This volume should have one of these names.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
609
|
"<ul><li>{0}</li></ul>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610
|
"<p>Press <b>Refresh</b> when ready.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
611
|
).format("</li><li>".join(sorted(volumes))) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
612
|
self.infoEdit.setHtml(htmlText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
613
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
614
|
def __showMultipleVolumesInformation(self, volumePaths): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
615
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
616
|
Private method to show information because multiple devices of the |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
617
|
same type are ready for flashing. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
618
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
619
|
Note: This is a dangerous situation! |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
620
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
621
|
@param volumePaths list of volume paths |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
622
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
623
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
624
|
self.infoLabel.setText(self.tr("Multiple Boot Volumes found:")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
625
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
626
|
htmlText = self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
627
|
"<h4>Multiple Boot Volumes were found</h4>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
628
|
"<p>These volume paths were found.</p><ul><li>{0}</li></ul>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
629
|
"<p>Please ensure that only one device of a type is ready for" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
630
|
" flashing. Press <b>Refresh</b> when ready.</p>" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
631
|
).format("</li><li>".join(sorted(volumePaths))) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
632
|
self.infoEdit.setHtml(htmlText) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
633
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
634
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
635
|
def on_flashButton_clicked(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637
|
Private slot to flash the selected MicroPython or CircuitPython |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638
|
firmware onto the device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
639
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
640
|
boardType = self.devicesComboBox.currentData(self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
641
|
firmwarePath = self.firmwarePicker.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642
|
volumePath = self.bootPicker.text() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643
|
if os.path.exists(firmwarePath) and os.path.exists(volumePath): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644
|
firmwareType = SupportedUF2Boards[boardType]["firmware"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645
|
self.infoLabel.setText( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646
|
self.tr("Flashing {0}").format(firmwareType)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647
|
self.infoEdit.setHtml(self.tr( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648
|
"<p>Flashing the {0} firmware to the device. Please wait" |
8097
|
649
|
" until the device resets automatically.</p>" |
8096
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650
|
).format(firmwareType)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651
|
QCoreApplication.processEvents(QEventLoop.ExcludeUserInputEvents) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
652
|
shutil.copy2(firmwarePath, volumePath) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
653
|
QThread.sleep(1) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654
|
self.on_refreshButton_clicked() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
655
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
657
|
def on_refreshButton_clicked(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
658
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
659
|
Private slot to refresh the dialog. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661
|
self.__populate() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
662
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663
|
@pyqtSlot(int) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664
|
def on_devicesComboBox_currentIndexChanged(self, index): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666
|
Private slot to handle the selection of a board. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668
|
@param index selected index |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669
|
@type int |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671
|
vidpid = self.devicesComboBox.itemData(index, self.DeviceVidPidRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672
|
boardType = self.devicesComboBox.itemData(index, self.DeviceTypeRole) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
673
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
674
|
self.bootPicker.setEnabled(boardType == self.__manualType) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
675
|
if boardType == self.__manualType: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
676
|
self.__showManualInstructions() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
677
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
678
|
if vidpid is None: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
679
|
if boardType is None: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
680
|
self.bootPicker.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
681
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
682
|
volumes = SupportedUF2Boards[boardType]["volumes"][vidpid] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
683
|
foundVolumes = [] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
684
|
for volume in volumes: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
685
|
foundVolumes += Utilities.findVolume(volume, findAll=True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
686
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
687
|
if len(foundVolumes) == 0: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
688
|
self.__showNoVolumeInformation(volumes) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
689
|
self.bootPicker.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
690
|
elif len(foundVolumes) == 1: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
691
|
self.bootPicker.setText(foundVolumes[0]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
693
|
self.__showMultipleVolumesInformation() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694
|
self.bootPicker.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
695
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
696
|
self.__updateFlashButton() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
697
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
698
|
@pyqtSlot(str) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699
|
def on_firmwarePicker_textChanged(self, text): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
701
|
Private slot handling a change of the firmware file. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
702
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
703
|
@param text current text of the firmware edit |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
704
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
705
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
706
|
self.__updateFlashButton() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
707
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
708
|
@pyqtSlot(str) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
709
|
def on_bootPicker_textChanged(self, text): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
710
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
711
|
Private slot handling a change of the boot volume. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
712
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
713
|
@param text current text of the boot volume edit |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
714
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
715
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
716
|
self.__updateFlashButton() |