mpflash 0.8.1b1__py3-none-any.whl → 0.8.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mpflash/cli_group.py +3 -2
- mpflash/common.py +1 -1
- mpflash/config.py +10 -0
- mpflash/download.py +77 -15
- mpflash/downloaded.py +23 -6
- mpflash/mpboard_id/__init__.py +4 -0
- mpflash/mpboard_id/board_id.py +19 -3
- mpflash/mpboard_id/store.py +2 -1
- {mpflash-0.8.1b1.dist-info → mpflash-0.8.2.dist-info}/METADATA +2 -1
- {mpflash-0.8.1b1.dist-info → mpflash-0.8.2.dist-info}/RECORD +13 -13
- {mpflash-0.8.1b1.dist-info → mpflash-0.8.2.dist-info}/WHEEL +1 -1
- {mpflash-0.8.1b1.dist-info → mpflash-0.8.2.dist-info}/LICENSE +0 -0
- {mpflash-0.8.1b1.dist-info → mpflash-0.8.2.dist-info}/entry_points.txt +0 -0
mpflash/cli_group.py
CHANGED
@@ -5,8 +5,8 @@ Additional comands are added in the submodules.
|
|
5
5
|
|
6
6
|
import rich_click as click
|
7
7
|
|
8
|
-
from .config import config
|
9
|
-
from .logger import make_quiet, set_loglevel
|
8
|
+
from .config import __version__, config
|
9
|
+
from .logger import log, make_quiet, set_loglevel
|
10
10
|
|
11
11
|
|
12
12
|
def cb_verbose(ctx, param, value):
|
@@ -17,6 +17,7 @@ def cb_verbose(ctx, param, value):
|
|
17
17
|
set_loglevel("TRACE")
|
18
18
|
else:
|
19
19
|
set_loglevel("DEBUG")
|
20
|
+
log.debug(f"version: {__version__}")
|
20
21
|
else:
|
21
22
|
set_loglevel("INFO")
|
22
23
|
config.verbose = False
|
mpflash/common.py
CHANGED
@@ -47,7 +47,7 @@ class FWInfo:
|
|
47
47
|
firmware: str = field(default="") # url or path to original firmware image
|
48
48
|
variant: str = field(default="") # MicroPython variant
|
49
49
|
preview: bool = field(default=False) # True if the firmware is a preview version
|
50
|
-
version: str = field(default="") # MicroPython version
|
50
|
+
version: str = field(default="") # MicroPython version (NO v prefix)
|
51
51
|
url: str = field(default="") # url to the firmware image download folder
|
52
52
|
build: str = field(default="0") # The build = number of commits since the last release
|
53
53
|
ext: str = field(default="") # the file extension of the firmware
|
mpflash/config.py
CHANGED
@@ -3,9 +3,18 @@
|
|
3
3
|
from pathlib import Path
|
4
4
|
from typing import List
|
5
5
|
|
6
|
+
import pkg_resources
|
6
7
|
import platformdirs
|
7
8
|
|
8
9
|
|
10
|
+
def get_version():
|
11
|
+
name = __package__ or "mpflash"
|
12
|
+
try:
|
13
|
+
return pkg_resources.get_distribution(name).version
|
14
|
+
except pkg_resources.DistributionNotFound:
|
15
|
+
return "Package not found"
|
16
|
+
|
17
|
+
|
9
18
|
class MPtoolConfig:
|
10
19
|
"""Centralized configuration for mpflash"""
|
11
20
|
|
@@ -19,3 +28,4 @@ class MPtoolConfig:
|
|
19
28
|
|
20
29
|
|
21
30
|
config = MPtoolConfig()
|
31
|
+
__version__ = get_version()
|
mpflash/download.py
CHANGED
@@ -19,8 +19,10 @@ from loguru import logger as log
|
|
19
19
|
from rich.progress import track
|
20
20
|
|
21
21
|
from mpflash.common import PORT_FWTYPES, FWInfo
|
22
|
+
from mpflash.downloaded import clean_downloaded_firmwares
|
22
23
|
from mpflash.errors import MPFlashError
|
23
24
|
from mpflash.mpboard_id import get_known_ports
|
25
|
+
from mpflash.vendor.versions import clean_version
|
24
26
|
|
25
27
|
# avoid conflict with the ujson used by MicroPython
|
26
28
|
jsonlines.ujson = None # type: ignore
|
@@ -32,8 +34,18 @@ MICROPYTHON_ORG_URL = "https://micropython.org/"
|
|
32
34
|
# Regexes to remove dates and hashes in the filename that just get in the way
|
33
35
|
RE_DATE = r"(-\d{8}-)"
|
34
36
|
RE_HASH = r"(.g[0-9a-f]+\.)"
|
35
|
-
# regex to extract the version from the firmware filename
|
36
|
-
|
37
|
+
# regex to extract the version and the build from the firmware filename
|
38
|
+
# group 1 is the version, group 2 is the build
|
39
|
+
RE_VERSION_PREVIEW = r"v([\d\.]+)-?(?:preview\.)?(\d+)?\."
|
40
|
+
# 'RPI_PICO_W-v1.23.uf2'
|
41
|
+
# 'RPI_PICO_W-v1.23.0.uf2'
|
42
|
+
# 'RPI_PICO_W-v1.23.0-406.uf2'
|
43
|
+
# 'RPI_PICO_W-v1.23.0-preview.406.uf2'
|
44
|
+
# 'RPI_PICO_W-v1.23.0-preview.4.uf2'
|
45
|
+
# 'RPI_PICO_W-v1.23.0.uf2'
|
46
|
+
# 'https://micropython.org/resources/firmware/RPI_PICO_W-20240531-v1.24.0-preview.10.gc1a6b95bf.uf2'
|
47
|
+
# 'https://micropython.org/resources/firmware/RPI_PICO_W-20240531-v1.24.0-preview.10.uf2'
|
48
|
+
# 'RPI_PICO_W-v1.24.0-preview.10.gc1a6b95bf.uf2'
|
37
49
|
|
38
50
|
|
39
51
|
# use functools.lru_cache to avoid needing to download pages multiple times
|
@@ -98,6 +110,7 @@ def board_firmware_urls(board_url: str, base_url: str, ext: str) -> List[str]:
|
|
98
110
|
# The first run takes ~60 seconds to run for 4 ports , all boards
|
99
111
|
# so it makes sense to cache the results and skip boards as soon as possible
|
100
112
|
def get_boards(ports: List[str], boards: List[str], clean: bool) -> List[FWInfo]:
|
113
|
+
# sourcery skip: use-getitem-for-re-match-groups
|
101
114
|
"""
|
102
115
|
Retrieves a list of firmware information for the specified ports and boards.
|
103
116
|
|
@@ -146,13 +159,15 @@ def get_boards(ports: List[str], boards: List[str], clean: bool) -> List[FWInfo]
|
|
146
159
|
# board["firmware"] = _url
|
147
160
|
# board["preview"] = "preview" in _url # type: ignore
|
148
161
|
if ver_match := re.search(RE_VERSION_PREVIEW, _url):
|
149
|
-
fw_info.version = ver_match
|
162
|
+
fw_info.version = clean_version(ver_match.group(1))
|
163
|
+
fw_info.build = ver_match.group(2) or "0"
|
164
|
+
fw_info.preview = fw_info.build != "0"
|
165
|
+
# # else:
|
166
|
+
# # board.$1= ""
|
167
|
+
# if "preview." in fw_info.version:
|
168
|
+
# fw_info.build = fw_info.version.split("preview.")[-1]
|
150
169
|
# else:
|
151
|
-
#
|
152
|
-
if "preview." in fw_info.version:
|
153
|
-
fw_info.build = fw_info.version.split("preview.")[-1]
|
154
|
-
else:
|
155
|
-
fw_info.build = "0"
|
170
|
+
# fw_info.build = "0"
|
156
171
|
|
157
172
|
fw_info.ext = Path(fw_info.firmware).suffix
|
158
173
|
fw_info.variant = fw_info.filename.split("-v")[0] if "-v" in fw_info.filename else ""
|
@@ -180,9 +195,21 @@ def download_firmwares(
|
|
180
195
|
force: bool = False,
|
181
196
|
clean: bool = True,
|
182
197
|
) -> int:
|
198
|
+
"""
|
199
|
+
Downloads firmware files based on the specified firmware folder, ports, boards, versions, force flag, and clean flag.
|
200
|
+
|
201
|
+
Args:
|
202
|
+
firmware_folder : The folder to save the downloaded firmware files.
|
203
|
+
ports : The list of ports to check for firmware.
|
204
|
+
boards : The list of boards to download firmware for.
|
205
|
+
versions : The list of versions to download firmware for.
|
206
|
+
force : A flag indicating whether to force the download even if the firmware file already exists.
|
207
|
+
clean : A flag indicating to clean the date from the firmware filename.
|
208
|
+
"""
|
183
209
|
skipped = downloaded = 0
|
184
|
-
if versions is None
|
185
|
-
|
210
|
+
versions = [] if versions is None else [clean_version(v) for v in versions]
|
211
|
+
# handle renamed boards
|
212
|
+
boards = add_renamed_boards(boards)
|
186
213
|
|
187
214
|
unique_boards = get_firmware_list(ports, boards, versions, clean)
|
188
215
|
|
@@ -191,6 +218,11 @@ def download_firmwares(
|
|
191
218
|
# relevant
|
192
219
|
|
193
220
|
log.info(f"Found {len(unique_boards)} relevant unique firmwares")
|
221
|
+
if not unique_boards:
|
222
|
+
log.error("No relevant firmwares could be found on https://micropython.org/download")
|
223
|
+
log.info(f"{versions=} {ports=} {boards=}")
|
224
|
+
log.info("Please check the website for the latest firmware files or try the preview version.")
|
225
|
+
return 0
|
194
226
|
|
195
227
|
firmware_folder.mkdir(exist_ok=True)
|
196
228
|
|
@@ -214,7 +246,9 @@ def download_firmwares(
|
|
214
246
|
continue
|
215
247
|
writer.write(board.to_dict())
|
216
248
|
downloaded += 1
|
217
|
-
|
249
|
+
if downloaded > 0:
|
250
|
+
clean_downloaded_firmwares(firmware_folder)
|
251
|
+
log.success(f"Downloaded {downloaded} firmwares, skipped {skipped} existing files.")
|
218
252
|
return downloaded + skipped
|
219
253
|
|
220
254
|
|
@@ -238,12 +272,15 @@ def get_firmware_list(ports: List[str], boards: List[str], versions: List[str],
|
|
238
272
|
board_urls = sorted(get_boards(ports, boards, clean), key=key_fw_ver_pre_ext_bld)
|
239
273
|
|
240
274
|
log.debug(f"Total {len(board_urls)} firmwares")
|
275
|
+
|
241
276
|
relevant = [
|
242
277
|
board
|
243
278
|
for board in board_urls
|
244
|
-
if board.
|
245
|
-
# and b["port"] in ["esp32", "rp2"]
|
279
|
+
if board.version in versions and board.build == "0" and board.board in boards and not board.preview
|
246
280
|
]
|
281
|
+
|
282
|
+
if preview:
|
283
|
+
relevant.extend([board for board in board_urls if board.board in boards and board.preview])
|
247
284
|
log.debug(f"Matching firmwares: {len(relevant)}")
|
248
285
|
# select the unique boards
|
249
286
|
unique_boards: List[FWInfo] = []
|
@@ -272,7 +309,7 @@ def download(
|
|
272
309
|
boards : The list of boards to download firmware for.
|
273
310
|
versions : The list of versions to download firmware for.
|
274
311
|
force : A flag indicating whether to force the download even if the firmware file already exists.
|
275
|
-
clean : A flag indicating whether to
|
312
|
+
clean : A flag indicating whether to clean the date from the firmware filename.
|
276
313
|
|
277
314
|
Returns:
|
278
315
|
int: The number of downloaded firmware files.
|
@@ -284,7 +321,7 @@ def download(
|
|
284
321
|
if not boards:
|
285
322
|
log.critical("No boards found, please connect a board or specify boards to download firmware for.")
|
286
323
|
raise MPFlashError("No boards found")
|
287
|
-
|
324
|
+
|
288
325
|
try:
|
289
326
|
destination.mkdir(exist_ok=True, parents=True)
|
290
327
|
except (PermissionError, FileNotFoundError) as e:
|
@@ -297,3 +334,28 @@ def download(
|
|
297
334
|
raise MPFlashError("Could not connect to micropython.org") from e
|
298
335
|
|
299
336
|
return result
|
337
|
+
|
338
|
+
|
339
|
+
def add_renamed_boards(boards: List[str]) -> List[str]:
|
340
|
+
"""
|
341
|
+
Adds the renamed boards to the list of boards.
|
342
|
+
|
343
|
+
Args:
|
344
|
+
boards : The list of boards to add the renamed boards to.
|
345
|
+
|
346
|
+
Returns:
|
347
|
+
List[str]: The list of boards with the renamed boards added.
|
348
|
+
|
349
|
+
"""
|
350
|
+
renamed = {
|
351
|
+
"PICO": ["RPI_PICO"],
|
352
|
+
"PICO_W": ["RPI_PICO_W"],
|
353
|
+
"GENERIC": ["ESP32_GENERIC", "ESP8266_GENERIC"], # just add both of them
|
354
|
+
}
|
355
|
+
_boards = boards.copy()
|
356
|
+
for board in boards:
|
357
|
+
if board in renamed and renamed[board] not in boards:
|
358
|
+
_boards.extend(renamed[board])
|
359
|
+
if board != board.upper() and board.upper() not in boards:
|
360
|
+
_boards.append(board.upper())
|
361
|
+
return _boards
|
mpflash/downloaded.py
CHANGED
@@ -24,10 +24,25 @@ def downloaded_firmwares(fw_folder: Path) -> List[FWInfo]:
|
|
24
24
|
return firmwares
|
25
25
|
|
26
26
|
|
27
|
+
def clean_downloaded_firmwares(fw_folder: Path) -> None:
|
28
|
+
"""
|
29
|
+
Remove duplicate entries from the firmware.jsonl file, keeping the latest one
|
30
|
+
uniqueness is based on the filename
|
31
|
+
"""
|
32
|
+
firmwares = downloaded_firmwares(fw_folder)
|
33
|
+
if not firmwares:
|
34
|
+
return
|
35
|
+
# keep the latest entry
|
36
|
+
unique_fw = {fw.filename: fw for fw in firmwares}
|
37
|
+
with jsonlines.open(fw_folder / "firmware.jsonl", "w") as writer:
|
38
|
+
for fw in unique_fw.values():
|
39
|
+
writer.write(fw.to_dict())
|
40
|
+
log.info(f"Removed duplicate entries from firmware.jsonl in {fw_folder}")
|
41
|
+
|
27
42
|
def find_downloaded_firmware(
|
28
43
|
*,
|
29
44
|
board_id: str,
|
30
|
-
version: str = "",
|
45
|
+
version: str = "", # v1.2.3
|
31
46
|
port: str = "",
|
32
47
|
variants: bool = False,
|
33
48
|
fw_folder: Optional[Path] = None,
|
@@ -43,16 +58,16 @@ def find_downloaded_firmware(
|
|
43
58
|
log.error("No firmware files found. Please download the firmware first.")
|
44
59
|
return []
|
45
60
|
# filter by version
|
46
|
-
version = clean_version(version
|
61
|
+
version = clean_version(version)
|
47
62
|
fw_list = filter_downloaded_fwlist(fw_list, board_id, version, port, variants, selector)
|
48
63
|
|
49
64
|
if not fw_list and trie < 3:
|
50
65
|
log.info(f"Try ({trie+1}) to find a firmware for the board {board_id}")
|
51
66
|
if trie == 1:
|
52
|
-
# ESP board naming conventions have changed by adding a PORT
|
67
|
+
# ESP board naming conventions have changed by adding a PORT prefix
|
53
68
|
if port.startswith("esp") and not board_id.startswith(port.upper()):
|
54
69
|
board_id = f"{port.upper()}_{board_id}"
|
55
|
-
# RP2 board naming conventions have changed by adding a
|
70
|
+
# RP2 board naming conventions have changed by adding a _RPI prefix
|
56
71
|
if port == "rp2" and not board_id.startswith("RPI_"):
|
57
72
|
board_id = f"RPI_{board_id}"
|
58
73
|
elif trie == 2:
|
@@ -75,7 +90,7 @@ def find_downloaded_firmware(
|
|
75
90
|
def filter_downloaded_fwlist(
|
76
91
|
fw_list: List[FWInfo],
|
77
92
|
board_id: str,
|
78
|
-
version: str,
|
93
|
+
version: str, # v1.2.3
|
79
94
|
port: str,
|
80
95
|
# preview: bool,
|
81
96
|
variants: bool,
|
@@ -86,7 +101,9 @@ def filter_downloaded_fwlist(
|
|
86
101
|
# never get a preview for an older version
|
87
102
|
fw_list = [fw for fw in fw_list if fw.preview]
|
88
103
|
else:
|
89
|
-
|
104
|
+
# FWInfo version has no v1.2.3 prefix
|
105
|
+
_version = clean_version(version, drop_v=True)
|
106
|
+
fw_list = [fw for fw in fw_list if fw.version == _version]
|
90
107
|
|
91
108
|
# filter by port
|
92
109
|
if port:
|
mpflash/mpboard_id/__init__.py
CHANGED
@@ -77,10 +77,14 @@ def known_stored_boards(port: str, versions: Optional[List[str]] = None) -> List
|
|
77
77
|
@lru_cache(maxsize=20)
|
78
78
|
def find_known_board(board_id: str) -> Board:
|
79
79
|
"""Find the board for the given BOARD_ID or 'board description' and return the board info as a Board object"""
|
80
|
+
# FIXME : functional overlap with:
|
81
|
+
# mpboard_id\board_id.py _find_board_id_by_description
|
80
82
|
info = read_known_boardinfo()
|
81
83
|
for board_info in info:
|
82
84
|
if board_id in (board_info.board_id, board_info.description):
|
83
85
|
if not board_info.cpu:
|
86
|
+
# safeguard for older board_info.json files
|
87
|
+
print(f"Board {board_id} has no CPU info, using port as CPU")
|
84
88
|
if " with " in board_info.description:
|
85
89
|
board_info.cpu = board_info.description.split(" with ")[-1]
|
86
90
|
else:
|
mpflash/mpboard_id/board_id.py
CHANGED
@@ -44,7 +44,23 @@ def _find_board_id_by_description(
|
|
44
44
|
"""
|
45
45
|
Find the MicroPython BOARD_ID based on the description in the firmware
|
46
46
|
using the pre-built board_info.json file
|
47
|
+
|
48
|
+
Parameters:
|
49
|
+
descr: str
|
50
|
+
Description of the board
|
51
|
+
short_descr: str
|
52
|
+
Short description of the board (optional)
|
53
|
+
version: str
|
54
|
+
Version of the MicroPython firmware
|
55
|
+
board_info: Path
|
56
|
+
Path to the board_info.json file (optional)
|
57
|
+
|
47
58
|
"""
|
59
|
+
# FIXME: functional overlap with
|
60
|
+
# src\mpflash\mpflash\mpboard_id\__init__.py find_known_board
|
61
|
+
|
62
|
+
if not short_descr and " with " in descr:
|
63
|
+
short_descr = descr.split(" with ")[0]
|
48
64
|
|
49
65
|
candidate_boards = read_known_boardinfo(board_info)
|
50
66
|
|
@@ -58,10 +74,10 @@ def _find_board_id_by_description(
|
|
58
74
|
# FIXME if latest stable is newer than the last version in the boardlist this will fail
|
59
75
|
log.trace(f"Version {version} not found in board info, using latest known version {known_versions[-1]}")
|
60
76
|
version = known_versions[-1]
|
61
|
-
version_matches
|
62
|
-
|
77
|
+
if version_matches := [b for b in candidate_boards if b.version.startswith(version)]:
|
78
|
+
candidate_boards = version_matches
|
79
|
+
else:
|
63
80
|
raise MPFlashError(f"No board info found for version {version}")
|
64
|
-
candidate_boards = version_matches
|
65
81
|
matches = [b for b in candidate_boards if b.description == descr]
|
66
82
|
if not matches and short_descr:
|
67
83
|
matches = [b for b in candidate_boards if b.description == short_descr]
|
mpflash/mpboard_id/store.py
CHANGED
@@ -13,10 +13,11 @@ HERE = Path(__file__).parent
|
|
13
13
|
|
14
14
|
|
15
15
|
def write_boardinfo_json(board_list: List[Board], *, folder: Path):
|
16
|
-
"""Writes the board information to JSON
|
16
|
+
"""Writes the board information to a JSON file.
|
17
17
|
|
18
18
|
Args:
|
19
19
|
board_list (List[Board]): The list of Board objects.
|
20
|
+
folder (Path): The folder where the compressed JSON file will be saved.
|
20
21
|
"""
|
21
22
|
import zipfile
|
22
23
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: mpflash
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.2
|
4
4
|
Summary: Flash and download tool for MicroPython firmwares
|
5
5
|
Home-page: https://github.com/Josverl/micropython-stubber/blob/main/src/mpflash/README.md
|
6
6
|
License: MIT
|
@@ -13,6 +13,7 @@ Classifier: Programming Language :: Python :: 3
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.9
|
14
14
|
Classifier: Programming Language :: Python :: 3.10
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
16
17
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
17
18
|
Classifier: Programming Language :: Python :: Implementation :: MicroPython
|
18
19
|
Classifier: Topic :: Software Development :: Build Tools
|
@@ -3,14 +3,14 @@ mpflash/add_firmware.py,sha256=u_g9mID557fptLEJ1Nld9n27V1R1og8uEkadm0O3YTw,3435
|
|
3
3
|
mpflash/ask_input.py,sha256=e54WfgktG7Ff8dBUknXioROq3lPNZ-eacUjfmUvFfS0,8496
|
4
4
|
mpflash/cli_download.py,sha256=6ctC4ga6q2LcpHUHMrz1trbePziQpuIFPbjcJnc3K7E,3645
|
5
5
|
mpflash/cli_flash.py,sha256=QHEb-e2ABjISfuGCWpTxOM7kkcTZSQxBXmVaWh3WVnE,7074
|
6
|
-
mpflash/cli_group.py,sha256
|
6
|
+
mpflash/cli_group.py,sha256=nrihkm74X8pX1jPM72W8ljoc5rYL6ggGOQFRaOldhLo,2038
|
7
7
|
mpflash/cli_list.py,sha256=Mdaf13gKZCoLp8Y2ja0L5rYMzkE_t3d4r62bF7isI3E,1997
|
8
8
|
mpflash/cli_main.py,sha256=yABFFf45TpPMcC1qEVARAWe4EI9zui2pUXjoPms0mq8,1030
|
9
|
-
mpflash/common.py,sha256=
|
10
|
-
mpflash/config.py,sha256=
|
9
|
+
mpflash/common.py,sha256=MmyLadb_z7bhVy6U8jb4f3pnBK8n7x28smFBcA9ZfGg,5608
|
10
|
+
mpflash/config.py,sha256=R7PomStIFHSTnLhpWhw9P2DL_b-8a8Wrja3aY-dPm6A,762
|
11
11
|
mpflash/connected.py,sha256=CBG_DJ33OPWAPbX-ICQpL1LcFOhNYpLUSB0Q5v7gi9s,3029
|
12
|
-
mpflash/download.py,sha256=
|
13
|
-
mpflash/downloaded.py,sha256=
|
12
|
+
mpflash/download.py,sha256=NErA2SJEhXnTElvq6z4BJl-L-5M_ETJpqX6pM0oubsg,14290
|
13
|
+
mpflash/downloaded.py,sha256=lxwRP-7gE9TO23jKG5Ov6TCsRA1kM8rzZEdceA163Uk,4520
|
14
14
|
mpflash/errors.py,sha256=Q5LR12Wo8iUCg5n_qq4GjdBdBflbvCOdKsRJ5InYRfI,96
|
15
15
|
mpflash/flash.py,sha256=JoskuwaHVYqeG4YW8kgbv26vPFnqDmkTz1VRs-pTRiY,2468
|
16
16
|
mpflash/flash_esp.py,sha256=dEc_B7-f1BMUGBMrwIm83ulcCqaS5MlrPAp3FCNgNfk,2311
|
@@ -24,12 +24,12 @@ mpflash/flash_uf2_macos.py,sha256=HGUg2HSw4qalfSP7npLYgos2WlVRxtOVTDcAnBL7qPY,10
|
|
24
24
|
mpflash/flash_uf2_windows.py,sha256=a-iIGPkwIoUXA7atCz0_uZp-kipSL24P-IE5ka1B1Mk,1025
|
25
25
|
mpflash/list.py,sha256=0TawTkwhjKPPj7nTHoDn8nQ54WOkGRurP1BJVeg956g,2963
|
26
26
|
mpflash/logger.py,sha256=dI_H_a7EOdQJyvoeRHQuYeZuTKYVUS3DUPTLhE9rkdM,1098
|
27
|
-
mpflash/mpboard_id/__init__.py,sha256=
|
27
|
+
mpflash/mpboard_id/__init__.py,sha256=9IS8E-4eimd_bclgGgWE1wGEx0IRzKnu5Jzl8pQih_g,3816
|
28
28
|
mpflash/mpboard_id/add_boards.py,sha256=OWclyLWf9L-pCVmZ22b-xQYfvi3yQVsJHmGMgMzWxoU,9684
|
29
29
|
mpflash/mpboard_id/board.py,sha256=CwtBux8y7GDUe7CADVxL8YefGRl9Fg8OAJBUhgaBYCI,1151
|
30
|
-
mpflash/mpboard_id/board_id.py,sha256=
|
30
|
+
mpflash/mpboard_id/board_id.py,sha256=uVBbqksE1S4RPO1kNAVk4-xJWj6vwAX6QeuE0ekkZEc,2964
|
31
31
|
mpflash/mpboard_id/board_info.zip,sha256=F6YowS96DAqjten4ySe4MXgZwPtE-saZOUfY5OQkqKk,19759
|
32
|
-
mpflash/mpboard_id/store.py,sha256=
|
32
|
+
mpflash/mpboard_id/store.py,sha256=4lLEff6a30lIOb4fOYYzanE4G4qfgikfprmpV1eUf2U,1536
|
33
33
|
mpflash/mpremoteboard/__init__.py,sha256=fJ_N1F6R3CfP9F7pmocb5l8yRvzmSmtHi4u_uTQHR1w,7683
|
34
34
|
mpflash/mpremoteboard/mpy_fw_info.py,sha256=6AQbN3jtQgllqWQYl4e-63KeEtV08EXk8_JnM6XBkvo,4554
|
35
35
|
mpflash/mpremoteboard/runner.py,sha256=-PgzAeBGbyXaAUlwyiw4mcINsP2U1XRRjP1_QdBrxpg,4786
|
@@ -40,8 +40,8 @@ mpflash/vendor/pydfu.py,sha256=_MdBRo1EeNeKDqFPSTB5tNL1jGSBJgsVeVjE5e7Pb8s,20542
|
|
40
40
|
mpflash/vendor/readme.md,sha256=iIIZxuLUIGHQ0KODzYVtMezsztvyxCXcNJp_AzwTIPk,86
|
41
41
|
mpflash/vendor/versions.py,sha256=thk1a5wEEhXIQoL0zZ7oooeFyQeSoI00CIUbZF0b3rI,3783
|
42
42
|
mpflash/worklist.py,sha256=MKHDynttVP3lsHSfb7DEqeQ2mRV0da96lD4lIcS_zQY,5962
|
43
|
-
mpflash-0.8.
|
44
|
-
mpflash-0.8.
|
45
|
-
mpflash-0.8.
|
46
|
-
mpflash-0.8.
|
47
|
-
mpflash-0.8.
|
43
|
+
mpflash-0.8.2.dist-info/entry_points.txt,sha256=Jk_visOhYOsZIcSP2Ms9hKqfKy1iorR-6dYltSoWCpY,52
|
44
|
+
mpflash-0.8.2.dist-info/LICENSE,sha256=mWpNhsIxWzetYNnTpr4eb3HtgsxGIC8KcYWxXEcxQvE,1077
|
45
|
+
mpflash-0.8.2.dist-info/METADATA,sha256=N1kDSCr4LilmXiMUdcs190wEJgNm_X8Vshh5D4GCRLo,15275
|
46
|
+
mpflash-0.8.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
47
|
+
mpflash-0.8.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|