micropython-stubber 1.23.0__py3-none-any.whl → 1.23.1.post1__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.
Files changed (110) hide show
  1. {micropython_stubber-1.23.0.dist-info → micropython_stubber-1.23.1.post1.dist-info}/METADATA +32 -14
  2. micropython_stubber-1.23.1.post1.dist-info/RECORD +159 -0
  3. micropython_stubber-1.23.1.post1.dist-info/entry_points.txt +5 -0
  4. mpflash/README.md +40 -4
  5. mpflash/mpflash/add_firmware.py +1 -1
  6. mpflash/mpflash/ask_input.py +1 -1
  7. {stubber → mpflash/mpflash}/basicgit.py +3 -13
  8. mpflash/mpflash/bootloader/__init__.py +2 -37
  9. mpflash/mpflash/bootloader/activate.py +60 -0
  10. mpflash/mpflash/bootloader/detect.py +82 -0
  11. mpflash/mpflash/bootloader/manual.py +10 -11
  12. mpflash/mpflash/bootloader/micropython.py +2 -0
  13. mpflash/mpflash/bootloader/touch1200.py +13 -22
  14. mpflash/mpflash/cli_download.py +2 -2
  15. mpflash/mpflash/cli_flash.py +13 -16
  16. mpflash/mpflash/cli_group.py +18 -5
  17. mpflash/mpflash/cli_list.py +8 -2
  18. mpflash/mpflash/cli_main.py +3 -5
  19. mpflash/mpflash/common.py +3 -1
  20. mpflash/mpflash/config.py +2 -1
  21. mpflash/mpflash/connected.py +11 -8
  22. mpflash/mpflash/download.py +9 -5
  23. mpflash/mpflash/downloaded.py +1 -1
  24. mpflash/mpflash/{flash.py → flash/__init__.py} +3 -3
  25. mpflash/mpflash/{flash_esp.py → flash/esp.py} +1 -1
  26. mpflash/mpflash/{flash_stm32.py → flash/stm32.py} +4 -3
  27. mpflash/mpflash/{flash_stm32_dfu.py → flash/stm32_dfu.py} +1 -1
  28. mpflash/mpflash/{flash_uf2.py → flash/uf2/__init__.py} +19 -20
  29. mpflash/mpflash/{flash_uf2_linux.py → flash/uf2/linux.py} +12 -11
  30. mpflash/mpflash/{flash_uf2_macos.py → flash/uf2/macos.py} +11 -6
  31. mpflash/mpflash/{flash_uf2_windows.py → flash/uf2/windows.py} +11 -6
  32. mpflash/mpflash/{worklist.py → flash/worklist.py} +8 -9
  33. mpflash/mpflash/list.py +26 -9
  34. mpflash/mpflash/mpboard_id/__init__.py +1 -1
  35. mpflash/mpflash/mpboard_id/add_boards.py +3 -7
  36. mpflash/mpflash/mpboard_id/board_id.py +1 -1
  37. mpflash/mpflash/mpremoteboard/__init__.py +57 -17
  38. {stubber/utils → mpflash/mpflash}/versions.py +31 -24
  39. mpflash/poetry.lock +16 -5
  40. mpflash/pyproject.toml +4 -3
  41. stubber/__init__.py +1 -1
  42. stubber/board/createstubs.py +4 -4
  43. stubber/board/createstubs_db.py +5 -5
  44. stubber/board/createstubs_db_min.py +1 -1
  45. stubber/board/createstubs_db_mpy.mpy +0 -0
  46. stubber/board/createstubs_mem.py +5 -5
  47. stubber/board/createstubs_mem_min.py +1 -1
  48. stubber/board/createstubs_mem_mpy.mpy +0 -0
  49. stubber/board/createstubs_min.py +1 -1
  50. stubber/board/createstubs_mpy.mpy +0 -0
  51. stubber/bulk/mcu_stubber.py +28 -45
  52. stubber/codemod/enrich.py +1 -1
  53. stubber/codemod/merge_docstub.py +1 -1
  54. stubber/codemod/utils.py +2 -3
  55. stubber/commands/build_cmd.py +1 -1
  56. stubber/commands/cli.py +6 -12
  57. stubber/commands/clone_cmd.py +3 -2
  58. stubber/commands/config_cmd.py +1 -1
  59. stubber/commands/enrich_folder_cmd.py +1 -1
  60. stubber/commands/get_core_cmd.py +1 -1
  61. stubber/commands/get_docstubs_cmd.py +6 -3
  62. stubber/commands/get_frozen_cmd.py +6 -3
  63. stubber/commands/get_mcu_cmd.py +53 -12
  64. stubber/commands/merge_cmd.py +2 -3
  65. stubber/commands/publish_cmd.py +2 -3
  66. stubber/commands/stub_cmd.py +1 -1
  67. stubber/commands/switch_cmd.py +2 -2
  68. stubber/commands/variants_cmd.py +2 -3
  69. stubber/downloader.py +2 -1
  70. stubber/freeze/common.py +7 -3
  71. stubber/freeze/freeze_folder.py +2 -2
  72. stubber/freeze/freeze_manifest_2.py +19 -6
  73. stubber/freeze/get_frozen.py +8 -4
  74. stubber/get_cpython.py +15 -4
  75. stubber/minify.py +11 -6
  76. stubber/publish/candidates.py +20 -7
  77. stubber/publish/defaults.py +4 -9
  78. stubber/publish/merge_docstubs.py +4 -2
  79. stubber/publish/missing_class_methods.py +5 -3
  80. stubber/publish/package.py +8 -4
  81. stubber/publish/pathnames.py +2 -2
  82. stubber/publish/publish.py +2 -2
  83. stubber/publish/pypi.py +6 -2
  84. stubber/publish/stubpackage.py +39 -17
  85. stubber/rst/classsort.py +2 -1
  86. stubber/rst/lookup.py +1 -0
  87. stubber/rst/reader.py +12 -20
  88. stubber/rst/report_return.py +12 -4
  89. stubber/rst/rst_utils.py +2 -1
  90. stubber/stubs_from_docs.py +1 -1
  91. stubber/tools/manifestfile.py +1 -2
  92. stubber/update_fallback.py +2 -2
  93. stubber/update_module_list.py +1 -1
  94. stubber/utils/__init__.py +2 -1
  95. stubber/utils/config.py +18 -8
  96. stubber/utils/manifest.py +2 -4
  97. stubber/utils/post.py +2 -1
  98. stubber/utils/repos.py +4 -5
  99. stubber/utils/stubmaker.py +1 -1
  100. stubber/utils/typed_config_toml.py +5 -2
  101. stubber/variants.py +1 -1
  102. micropython_stubber-1.23.0.dist-info/RECORD +0 -159
  103. micropython_stubber-1.23.0.dist-info/entry_points.txt +0 -3
  104. mpflash/mpflash/flash_stm32_cube.py +0 -111
  105. mpflash/mpflash/vendor/versions.py +0 -119
  106. {micropython_stubber-1.23.0.dist-info → micropython_stubber-1.23.1.post1.dist-info}/LICENSE +0 -0
  107. {micropython_stubber-1.23.0.dist-info → micropython_stubber-1.23.1.post1.dist-info}/WHEEL +0 -0
  108. /mpflash/{mpflash/vendor/basicgit.py → basicgit.py} +0 -0
  109. /mpflash/mpflash/{flash_uf2_boardid.py → flash/uf2/boardid.py} +0 -0
  110. /mpflash/mpflash/{uf2disk.py → flash/uf2/uf2disk.py} +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: micropython-stubber
3
- Version: 1.23.0
3
+ Version: 1.23.1.post1
4
4
  Summary: Tooling to create and maintain stubs for MicroPython
5
5
  Home-page: https://github.com/Josverl/micropython-stubber#readme
6
6
  License: MIT
@@ -26,7 +26,7 @@ Requires-Dist: executing (>=2.0.1,<3.0.0)
26
26
  Requires-Dist: importlib-metadata (>=1.0,<2.0) ; python_version < "3.8"
27
27
  Requires-Dist: libcst (>=1.1.0,<2.0.0)
28
28
  Requires-Dist: loguru (>=0.6,<0.8)
29
- Requires-Dist: mpflash (>=0.8.6,<0.9.0)
29
+ Requires-Dist: mpflash (>=1.0.0,<2.0.0)
30
30
  Requires-Dist: mpremote (>=1.23.0,<2.0.0)
31
31
  Requires-Dist: mypy (==1.9.0)
32
32
  Requires-Dist: mypy-gitlab-code-quality (>=1.1.0,<2.0.0)
@@ -38,13 +38,14 @@ Requires-Dist: pyright (>=1.1.341,<2.0.0)
38
38
  Requires-Dist: pyserial (>=3.5,<4.0)
39
39
  Requires-Dist: pysondb-v2 (>=2.1.0,<3.0.0)
40
40
  Requires-Dist: python-minifier (>=2.7.0,<3.0.0) ; python_version < "3.12"
41
- Requires-Dist: requests (>=2.28.0,<3.0.0)
41
+ Requires-Dist: requests (>=2.32.3,<3.0.0)
42
42
  Requires-Dist: rich-click (>=1.8.3,<2.0.0)
43
43
  Requires-Dist: tabulate (>=0.9.0,<0.10.0)
44
44
  Requires-Dist: tenacity (>=8.2.2,<9.0.0)
45
45
  Requires-Dist: tomli (>=2.0.1,<3.0.0) ; python_version < "3.11"
46
46
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
47
47
  Requires-Dist: typed-config (>=1.3.0,<2.0.0)
48
+ Requires-Dist: urllib3 (>=2.2.2,<3.0.0)
48
49
  Project-URL: Documentation, https://micropython-stubber.readthedocs.io/
49
50
  Project-URL: Repository, https://github.com/Josverl/micropython-stubber
50
51
  Description-Content-Type: text/markdown
@@ -171,7 +172,7 @@ for more info see [**Renaming a branch**](https://docs.github.com/en/repositorie
171
172
 
172
173
  ## Licensing
173
174
 
174
- MicroPython-Stubber is licensed under the MIT license, and all contributions should follow this [LICENSE](LICENSE).
175
+ Both `MicroPython-Stubber` and `mpflash` are licensed under the MIT license, and all contributions should follow this [LICENSE](LICENSE).
175
176
 
176
177
 
177
178
  # Contributions
@@ -183,35 +184,52 @@ MicroPython-Stubber is licensed under the MIT license, and all contributions sho
183
184
  <table>
184
185
  <tbody>
185
186
  <tr>
186
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Josverl"><img src="https://avatars2.githubusercontent.com/u/981654?v=4?s=100" width="100px;" alt="Jos Verlinde"/><br /><sub><b>Jos Verlinde</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/commits?author=josverl" title="Code">💻</a> <a href="#research-josverl" title="Research">🔬</a> <a href="#ideas-josverl" title="Ideas, Planning, & Feedback">🤔</a> <a href="#content-josverl" title="Content">🖋</a> <a href="#stubs-josverl" title="MicroPython stubs">📚</a> <a href="#test-josverl" title="Test">✔</a></td>
187
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Josverl"><img src="https://avatars2.githubusercontent.com/u/981654?v=4?s=100" width="100px;" alt="Jos Verlinde"/><br /><sub><b>Jos Verlinde</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/commits?author=josverl" title="Code">💻</a> <a href="#research-josverl" title="Research">🔬</a> <a href="#ideas-josverl" title="Ideas, Planning, & Feedback">🤔</a> <a href="#content-josverl" title="Content">🖋</a> <a href="#stubs-josverl" title="MicroPython stubs">🖍️</a> <a href="#test-josverl" title="Test">✅</a> <a href="#mpflash-josverl" title="mpflash">💥</a></td>
187
188
  <td align="center" valign="top" width="14.28%"><a href="https://thonny.org/"><img src="https://avatars1.githubusercontent.com/u/46202078?v=4?s=100" width="100px;" alt="Thonny, Python IDE for beginners"/><br /><sub><b>Thonny, Python IDE for beginners</b></sub></a><br /><a href="#ideas-thonny" title="Ideas, Planning, & Feedback">🤔</a> <a href="#research-thonny" title="Research">🔬</a></td>
188
- <td align="center" valign="top" width="14.28%"><a href="https://micropython.org/"><img src="https://avatars1.githubusercontent.com/u/6298560?v=4?s=100" width="100px;" alt="MicroPython"/><br /><sub><b>MicroPython</b></sub></a><br /><a href="#data-micropython" title="Data">🔣</a> <a href="#stubs-micropython" title="MicroPython stubs">📚</a></td>
189
+ <td align="center" valign="top" width="14.28%"><a href="https://micropython.org/"><img src="https://avatars1.githubusercontent.com/u/6298560?v=4?s=100" width="100px;" alt="MicroPython"/><br /><sub><b>MicroPython</b></sub></a><br /><a href="#data-micropython" title="Data">🔣</a> <a href="#stubs-micropython" title="MicroPython stubs">🖍️</a></td>
189
190
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/microsoft/pyright"><img src="https://avatars.githubusercontent.com/u/6154722?v=4?s=100" width="100px;" alt="pyright"/><br /><sub><b>pyright</b></sub></a><br /><a href="#tool-pyright" title="Tools">🔧</a></td>
190
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/loboris"><img src="https://avatars3.githubusercontent.com/u/6280349?v=4?s=100" width="100px;" alt="Boris Lovosevic"/><br /><sub><b>Boris Lovosevic</b></sub></a><br /><a href="#data-loboris" title="Data">🔣</a> <a href="#stubs-loboris" title="MicroPython stubs">📚</a></td>
191
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/pfalcon"><img src="https://avatars3.githubusercontent.com/u/500451?v=4?s=100" width="100px;" alt="Paul Sokolovsky"/><br /><sub><b>Paul Sokolovsky</b></sub></a><br /><a href="#data-pfalcon" title="Data">🔣</a> <a href="#stubs-pfalcon" title="MicroPython stubs">📚</a></td>
192
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/pycopy"><img src="https://avatars0.githubusercontent.com/u/67273174?v=4?s=100" width="100px;" alt="pycopy"/><br /><sub><b>pycopy</b></sub></a><br /><a href="#data-pycopy" title="Data">🔣</a> <a href="#stubs-pycopy" title="MicroPython stubs">📚</a></td>
191
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/loboris"><img src="https://avatars3.githubusercontent.com/u/6280349?v=4?s=100" width="100px;" alt="Boris Lovosevic"/><br /><sub><b>Boris Lovosevic</b></sub></a><br /><a href="#data-loboris" title="Data">🔣</a> <a href="#stubs-loboris" title="MicroPython stubs">🖍️</a></td>
192
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/pfalcon"><img src="https://avatars3.githubusercontent.com/u/500451?v=4?s=100" width="100px;" alt="Paul Sokolovsky"/><br /><sub><b>Paul Sokolovsky</b></sub></a><br /><a href="#data-pfalcon" title="Data">🔣</a> <a href="#stubs-pfalcon" title="MicroPython stubs">🖍️</a></td>
193
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/pycopy"><img src="https://avatars0.githubusercontent.com/u/67273174?v=4?s=100" width="100px;" alt="pycopy"/><br /><sub><b>pycopy</b></sub></a><br /><a href="#data-pycopy" title="Data">🔣</a> <a href="#stubs-pycopy" title="MicroPython stubs">🖍️</a></td>
193
194
  </tr>
194
195
  <tr>
195
196
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/pycom"><img src="https://avatars2.githubusercontent.com/u/16415153?v=4?s=100" width="100px;" alt="Pycom"/><br /><sub><b>Pycom</b></sub></a><br /><a href="#infra-pycom" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
196
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/BradenM"><img src="https://avatars1.githubusercontent.com/u/5913808?v=4?s=100" width="100px;" alt="Braden Mars"/><br /><sub><b>Braden Mars</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3ABradenM" title="Bug reports">🐛</a> <a href="https://github.com/Josverl/micropython-stubber/commits?author=BradenM" title="Code">💻</a> <a href="#stubs-BradenM" title="MicroPython stubs">📚</a> <a href="#platform-BradenM" title="Packaging/porting to new platform">📦</a></td>
197
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/BradenM"><img src="https://avatars1.githubusercontent.com/u/5913808?v=4?s=100" width="100px;" alt="Braden Mars"/><br /><sub><b>Braden Mars</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3ABradenM" title="Bug reports">🐛</a> <a href="https://github.com/Josverl/micropython-stubber/commits?author=BradenM" title="Code">💻</a> <a href="#stubs-BradenM" title="MicroPython stubs">🖍️</a> <a href="#platform-BradenM" title="Packaging/porting to new platform">📦</a></td>
197
198
  <td align="center" valign="top" width="14.28%"><a href="https://binary.com.au/"><img src="https://avatars2.githubusercontent.com/u/175909?v=4?s=100" width="100px;" alt="James Manners"/><br /><sub><b>James Manners</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/commits?author=jmannau" title="Code">💻</a> <a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Ajmannau" title="Bug reports">🐛</a></td>
198
- <td align="center" valign="top" width="14.28%"><a href="http://patrickwalters.us/"><img src="https://avatars0.githubusercontent.com/u/4002194?v=4?s=100" width="100px;" alt="Patrick"/><br /><sub><b>Patrick</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Aaskpatrickw" title="Bug reports">🐛</a> <a href="https://github.com/Josverl/micropython-stubber/commits?author=askpatrickw" title="Code">💻</a> <a href="#stubs-askpatrickw" title="MicroPython stubs">📚</a></td>
199
+ <td align="center" valign="top" width="14.28%"><a href="http://patrickwalters.us/"><img src="https://avatars0.githubusercontent.com/u/4002194?v=4?s=100" width="100px;" alt="Patrick"/><br /><sub><b>Patrick</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Aaskpatrickw" title="Bug reports">🐛</a> <a href="https://github.com/Josverl/micropython-stubber/commits?author=askpatrickw" title="Code">💻</a> <a href="#stubs-askpatrickw" title="MicroPython stubs">🖍️</a></td>
199
200
  <td align="center" valign="top" width="14.28%"><a href="https://opencollective.com/pythonseverywhere"><img src="https://avatars3.githubusercontent.com/u/16009100?v=4?s=100" width="100px;" alt="Paul m. p. P."/><br /><sub><b>Paul m. p. P.</b></sub></a><br /><a href="#ideas-pmp-p" title="Ideas, Planning, & Feedback">🤔</a> <a href="#research-pmp-p" title="Research">🔬</a></td>
200
201
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/edreamleo"><img src="https://avatars0.githubusercontent.com/u/592928?v=4?s=100" width="100px;" alt="Edward K. Ream"/><br /><sub><b>Edward K. Ream</b></sub></a><br /><a href="#plugin-edreamleo" title="Plugin/utility libraries">🔌</a></td>
201
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/dastultz"><img src="https://avatars3.githubusercontent.com/u/4334042?v=4?s=100" width="100px;" alt="Daryl Stultz"/><br /><sub><b>Daryl Stultz</b></sub></a><br /><a href="#stubs-dastultz" title="MicroPython stubs">📚</a></td>
202
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/dastultz"><img src="https://avatars3.githubusercontent.com/u/4334042?v=4?s=100" width="100px;" alt="Daryl Stultz"/><br /><sub><b>Daryl Stultz</b></sub></a><br /><a href="#stubs-dastultz" title="MicroPython stubs">🖍️</a></td>
202
203
  </tr>
203
204
  <tr>
204
205
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/cabletie"><img src="https://avatars1.githubusercontent.com/u/2356734?v=4?s=100" width="100px;" alt="Keeping things together"/><br /><sub><b>Keeping things together</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Acabletie" title="Bug reports">🐛</a></td>
205
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/vbolshakov"><img src="https://avatars2.githubusercontent.com/u/2453324?v=4?s=100" width="100px;" alt="vbolshakov"/><br /><sub><b>vbolshakov</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Avbolshakov" title="Bug reports">🐛</a> <a href="#stubs-vbolshakov" title="MicroPython stubs">📚</a></td>
206
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/vbolshakov"><img src="https://avatars2.githubusercontent.com/u/2453324?v=4?s=100" width="100px;" alt="vbolshakov"/><br /><sub><b>vbolshakov</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Avbolshakov" title="Bug reports">🐛</a> <a href="#stubs-vbolshakov" title="MicroPython stubs">🖍️</a></td>
206
207
  <td align="center" valign="top" width="14.28%"><a href="https://lemariva.com/"><img src="https://avatars2.githubusercontent.com/u/15173329?v=4?s=100" width="100px;" alt="Mauro Riva"/><br /><sub><b>Mauro Riva</b></sub></a><br /><a href="#blog-lemariva" title="Blogposts">📝</a> <a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3Alemariva" title="Bug reports">🐛</a></td>
207
208
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/MathijsNL"><img src="https://avatars0.githubusercontent.com/u/1612886?v=4?s=100" width="100px;" alt="MathijsNL"/><br /><sub><b>MathijsNL</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3AMathijsNL" title="Bug reports">🐛</a></td>
208
- <td align="center" valign="top" width="14.28%"><a href="http://comingsoon.tm/"><img src="https://avatars0.githubusercontent.com/u/13251689?v=4?s=100" width="100px;" alt="Callum Jacob Hays"/><br /><sub><b>Callum Jacob Hays</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3ACallumJHays" title="Bug reports">🐛</a> <a href="#test-CallumJHays" title="Test">✔</a></td>
209
+ <td align="center" valign="top" width="14.28%"><a href="http://comingsoon.tm/"><img src="https://avatars0.githubusercontent.com/u/13251689?v=4?s=100" width="100px;" alt="Callum Jacob Hays"/><br /><sub><b>Callum Jacob Hays</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3ACallumJHays" title="Bug reports">🐛</a> <a href="#test-CallumJHays" title="Test">✅</a></td>
209
210
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/v923z"><img src="https://avatars0.githubusercontent.com/u/1310472?v=4?s=100" width="100px;" alt="Zoltán Vörös"/><br /><sub><b>Zoltán Vörös</b></sub></a><br /><a href="#data-v923z" title="Data">🔣</a></td>
210
211
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/vincent-l-j"><img src="https://avatars.githubusercontent.com/u/20021376?v=4?s=100" width="100px;" alt="vincent-l-j"/><br /><sub><b>vincent-l-j</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/commits?author=vincent-l-j" title="Documentation">📖</a></td>
211
212
  </tr>
212
213
  <tr>
213
214
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/yegorLitvinov"><img src="https://avatars.githubusercontent.com/u/20367310?v=4?s=100" width="100px;" alt="Egor Litvinov"/><br /><sub><b>Egor Litvinov</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/issues?q=author%3AyegorLitvinov" title="Bug reports">🐛</a></td>
214
215
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/samskiter"><img src="https://avatars.githubusercontent.com/u/1271643?v=4?s=100" width="100px;" alt="Sam Duke"/><br /><sub><b>Sam Duke</b></sub></a><br /><a href="https://github.com/Josverl/micropython-stubber/commits?author=samskiter" title="Code">💻</a></td>
216
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/shariltumin"><img src="https://avatars.githubusercontent.com/u/186120?v=4?s=100" width="100px;" alt="shariltumin"/><br /><sub><b>shariltumin</b></sub></a><br /><a href="#mpflash-shariltumin" title="mpflash">💥</a> <a href="#test-shariltumin" title="Test">✅</a></td>
217
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/mattytrentini"><img src="https://avatars.githubusercontent.com/u/194201?v=4?s=100" width="100px;" alt="Matt Trentini"/><br /><sub><b>Matt Trentini</b></sub></a><br /><a href="#mpflash-mattytrentini" title="mpflash">💥</a> <a href="#test-mattytrentini" title="Test">✅</a></td>
218
+ <td align="center" valign="top" width="14.28%"><a href="http://scruss.com/blog/"><img src="https://avatars.githubusercontent.com/u/425706?v=4?s=100" width="100px;" alt="Stewart Russell"/><br /><sub><b>Stewart Russell</b></sub></a><br /><a href="#mpflash-scruss" title="mpflash">💥</a> <a href="#test-scruss" title="Test">✅</a></td>
219
+ <td align="center" valign="top" width="14.28%"><a href="https://www.gitlab.com/alelec"><img src="https://avatars.githubusercontent.com/u/3318786?v=4?s=100" width="100px;" alt="Andrew Leech"/><br /><sub><b>Andrew Leech</b></sub></a><br /><a href="#mpflash-andrewleech" title="mpflash">💥</a> <a href="#test-andrewleech" title="Test">✅</a></td>
220
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/wovo"><img src="https://avatars.githubusercontent.com/u/9039468?v=4?s=100" width="100px;" alt="Wouter van Ooijen"/><br /><sub><b>Wouter van Ooijen</b></sub></a><br /><a href="#mpflash-wovo" title="mpflash">💥</a> <a href="#test-wovo" title="Test">✅</a></td>
221
+ </tr>
222
+ <tr>
223
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/shaneapowell"><img src="https://avatars.githubusercontent.com/u/12113620?v=4?s=100" width="100px;" alt="Shane Powell"/><br /><sub><b>Shane Powell</b></sub></a><br /><a href="#mpflash-shaneapowell" title="mpflash">💥</a> <a href="#test-shaneapowell" title="Test">✅</a></td>
224
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/robert-hh"><img src="https://avatars.githubusercontent.com/u/12476868?v=4?s=100" width="100px;" alt="Robert Hammelrath"/><br /><sub><b>Robert Hammelrath</b></sub></a><br /><a href="#mpflash-robert-hh" title="mpflash">💥</a> <a href="#test-robert-hh" title="Test">✅</a></td>
225
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/beetlegigg"><img src="https://avatars.githubusercontent.com/u/34552737?v=4?s=100" width="100px;" alt="Bg"/><br /><sub><b>Bg</b></sub></a><br /><a href="#mpflash-beetlegigg" title="mpflash">💥</a> <a href="#test-beetlegigg" title="Test">✅</a></td>
226
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/rkompass"><img src="https://avatars.githubusercontent.com/u/90282516?v=4?s=100" width="100px;" alt="Raul Kompaß"/><br /><sub><b>Raul Kompaß</b></sub></a><br /><a href="#mpflash-rkompass" title="mpflash">💥</a> <a href="#test-rkompass" title="Test">✅</a></td>
227
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/garryp4"><img src="https://avatars.githubusercontent.com/u/96994876?v=4?s=100" width="100px;" alt="garryp4"/><br /><sub><b>garryp4</b></sub></a><br /><a href="#mpflash-garryp4" title="mpflash">💥</a> <a href="#test-garryp4" title="Test">✅</a></td>
228
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/shanepowell-ast"><img src="https://avatars.githubusercontent.com/u/102747617?v=4?s=100" width="100px;" alt="Shane Powell"/><br /><sub><b>Shane Powell</b></sub></a><br /><a href="#mpflash-shanepowell-ast" title="mpflash">💥</a> <a href="#test-shanepowell-ast" title="Test">✅</a></td>
229
+ <td align="center" valign="top" width="14.28%"><a href="https://andypiper.org/"><img src="https://avatars.githubusercontent.com/u/552452?v=4?s=100" width="100px;" alt="Andy Piper"/><br /><sub><b>Andy Piper</b></sub></a><br /><a href="#mpflash-andypiper" title="mpflash">💥</a> <a href="#test-andypiper" title="Test">✅</a></td>
230
+ </tr>
231
+ <tr>
232
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/DavesCodeMusings"><img src="https://avatars.githubusercontent.com/u/61114342?v=4?s=100" width="100px;" alt="David Horton"/><br /><sub><b>David Horton</b></sub></a><br /><a href="#mpflash-DavesCodeMusings" title="mpflash">💥</a> <a href="#test-DavesCodeMusings" title="Test">✅</a></td>
215
233
  </tr>
216
234
  </tbody>
217
235
  </table>
@@ -0,0 +1,159 @@
1
+ mpflash/README.md,sha256=A6nAq_2AQnyrJuEdxviVARW7KVf2Swx1QanltQCig9k,15824
2
+ mpflash/basicgit.py,sha256=b6-gdK_DT0dmW3jEY9T0cjKR-TSEQOSl9U9sRcJh538,9257
3
+ mpflash/libusb_flash.ipynb,sha256=sw5MVQvPmH-DJy9kOdXyO80BSjEPMEXf_GJsGk3usrc,6428
4
+ mpflash/mpflash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ mpflash/mpflash/add_firmware.py,sha256=h-Nu9AnXO6ug2CurmgLoUVG1gNy6CA1NjwQl1nUoMZ4,3330
6
+ mpflash/mpflash/ask_input.py,sha256=EsPPlPS_wLC8j9f4o68yKIcqex0dV5tRH7k3rP3spG0,8710
7
+ mpflash/mpflash/basicgit.py,sha256=r_bI2U6QYFiS8ypUd6KtrjyZjK4JCANyK80L6wEzFoU,9213
8
+ mpflash/mpflash/bootloader/__init__.py,sha256=cRIxVRtUc4jZAgtFggRNhEn0BW-9WFpzm5xRy5B4B2U,105
9
+ mpflash/mpflash/bootloader/activate.py,sha256=sN2YuIuFGjLBd_PdG6P3N1yLuLyjnsVWDksrTMhzr_M,2301
10
+ mpflash/mpflash/bootloader/detect.py,sha256=eXL_JPcowb8g0tpZmj9DQXYbpfZFoSrzq86lScKhkT4,2608
11
+ mpflash/mpflash/bootloader/manual.py,sha256=qGInguhYil4v8EkUxPFlxzvs3m__KraPAj3LAKbV1Ts,3069
12
+ mpflash/mpflash/bootloader/micropython.py,sha256=0KDrfdZPtK7fLaxh-_4VxSO-u4IUj7qCyNVw9-LQ74M,517
13
+ mpflash/mpflash/bootloader/touch1200.py,sha256=tL2H4ERh0-YSdR8_v6aK_pDRPMjMevHWUGq4-TTFcWo,1083
14
+ mpflash/mpflash/cli_download.py,sha256=_9JGBZ0zXtHe3W61rZmsrKRLQQaF58yLsnHYarejyuM,3531
15
+ mpflash/mpflash/cli_flash.py,sha256=U64IAqwTVeYubXTUO6UXY9SiS_e5NsQwyPYxf1juX8s,7166
16
+ mpflash/mpflash/cli_group.py,sha256=JFBtp4qhakJeQkuupEoObHeSFke8eWIU1HjnOZ-JfH0,2504
17
+ mpflash/mpflash/cli_list.py,sha256=51iLSehG9vWOvgeovJ8UYBjKkdnZStG1gAgYa0Cheog,2340
18
+ mpflash/mpflash/cli_main.py,sha256=cElgh8Soq3U5TEAvrrD1sj7NDi-Eb-pei3QcMI0tlwE,1094
19
+ mpflash/mpflash/common.py,sha256=O-Zb8ASNmEFmBD5JVgVtS1RyGUXJI2o4WH99dr6RMRg,5884
20
+ mpflash/mpflash/config.py,sha256=h2Oq7kSe40tOnglpo02wkpaPHxHNVqyB3uGxreIu57U,1029
21
+ mpflash/mpflash/connected.py,sha256=LtyNWloEtEOKvmnTCSSNOADT0KeVbtjHpDQwu4dot2o,3053
22
+ mpflash/mpflash/download.py,sha256=mckR3pdMFQMYBKNmKBEJm9bJnTtQEnkuQ1vWYXcRRv8,13941
23
+ mpflash/mpflash/downloaded.py,sha256=YPN0LDf8DSDvdB9gbVny61bvaJHIDbUs81XUwftTb1c,4808
24
+ mpflash/mpflash/errors.py,sha256=6lUhVtECY3syV2bBGKzegGH4pPKXhevvhYQZd74sy6o,238
25
+ mpflash/mpflash/flash/__init__.py,sha256=xX2ZJGNX9xpX2s8V7SEJ1It7eOEbl8WkdFzpRd3TLzk,2041
26
+ mpflash/mpflash/flash/esp.py,sha256=LcOgjpE4zmPawHNwSd_6WFkaIYYazA__rf3ihGXR7I0,2228
27
+ mpflash/mpflash/flash/stm32.py,sha256=W8SJ2_8FGXyMS6cRcZpfOvOM8iOC_cn4vK8xd8tKzI4,555
28
+ mpflash/mpflash/flash/stm32_dfu.py,sha256=uTn06H0ZezzCv5O0hvry8ohBtuZXHe_GX2zNUfCxu58,2986
29
+ mpflash/mpflash/flash/uf2/__init__.py,sha256=PWEVxzZEca3pfLx_Qy5c4zlHH4W5fAjd0BmDTkS7s6g,2766
30
+ mpflash/mpflash/flash/uf2/boardid.py,sha256=2s4K3QiKWK5HKFKWYsDV3hI8alfWSxEOMeurER3eZtM,408
31
+ mpflash/mpflash/flash/uf2/linux.py,sha256=4azbcx_YqLZ3RyYNWljejHG_Y6SU-wREL8hhkTYqCjI,4099
32
+ mpflash/mpflash/flash/uf2/macos.py,sha256=sncXJsc2FVfm9rvLDjcEu7ZIyrDeHmazHiNQTUaf1Y0,1187
33
+ mpflash/mpflash/flash/uf2/uf2disk.py,sha256=dQ8_U6e3qkFOyfXZDpWAsvEBIlMr-ZzLkzTDD8SADqM,286
34
+ mpflash/mpflash/flash/uf2/windows.py,sha256=k9Yv71YswPnLx-Z5rf4KjhtVkEWr8SU8EXpeRv87h3A,1290
35
+ mpflash/mpflash/flash/worklist.py,sha256=1uBvn-T35Oey04g6xxNxo5t68q5_tp18eZcRAamF0tY,5828
36
+ mpflash/mpflash/list.py,sha256=Qt_3AUgA6LqejfGETgaa49fzqlI-m_OvsPosr6xMBMY,3464
37
+ mpflash/mpflash/logger.py,sha256=BAVrSXMGZLfSDRFbtVBtvb7Rl0sTJxooCgBS5t-6bXo,1057
38
+ mpflash/mpflash/mpboard_id/__init__.py,sha256=rQrPCN30GP-lfB2a2deA-lQ6iKvaKPK_xbtBoIavGsM,3716
39
+ mpflash/mpflash/mpboard_id/add_boards.py,sha256=ehQn560S0XxAD3nsUMo4o_f6w8XTVAfO0GCnfTKa6-4,9379
40
+ mpflash/mpflash/mpboard_id/board.py,sha256=yQ8IDHQS09AelvTvmPhpmsL4oX3L7IXGqHorkxDOkoE,1114
41
+ mpflash/mpflash/mpboard_id/board_id.py,sha256=wzGrxJu_ciOVT7n2861lhoKmPAjh1QjWnAdfcqNUUqc,2871
42
+ mpflash/mpflash/mpboard_id/board_info.zip,sha256=F6YowS96DAqjten4ySe4MXgZwPtE-saZOUfY5OQkqKk,19759
43
+ mpflash/mpflash/mpboard_id/store.py,sha256=lQQgHSxcaM_ZURcfZNSUv3-ZJjUKMC_xEOOSdpzVvBU,1493
44
+ mpflash/mpflash/mpremoteboard/__init__.py,sha256=oB0HwQOBhTtI4KR46_FvXZ_I6V5xuuxQ3MPeR6lVGVk,9240
45
+ mpflash/mpflash/mpremoteboard/mpy_fw_info.py,sha256=BTupe4rZDTs3UHRqvs429XqWHCchSpwa05yACOiOt5U,4413
46
+ mpflash/mpflash/mpremoteboard/runner.py,sha256=YUmo5Y0aOgMaww8CXSdNdgXD-wRKncILuMZ0OB_2qRU,4646
47
+ mpflash/mpflash/vendor/click_aliases.py,sha256=K98inhtze8td1dw312kexJS7OX_0ojlptPQ5Z0SHxJY,3065
48
+ mpflash/mpflash/vendor/dfu.py,sha256=jGsiD3lbSV1Ar9qJubhoY_hy-L8FI-K55aow8vgwoYQ,5590
49
+ mpflash/mpflash/vendor/pydfu.py,sha256=1ObubGsPFrQ7T9M3JRlIPNIG2xx8uYffaEe0Y6bdf_g,19937
50
+ mpflash/mpflash/vendor/readme.md,sha256=ZVg7kuUYyXcWcrWkaSJ0CunwebCqu2SiS2sqDadwrT8,84
51
+ mpflash/mpflash/versions.py,sha256=x5VrdVfWhZJfH7tZmwu2vVx-mPrK1iunYSpSce9VUXU,4492
52
+ mpflash/poetry.lock,sha256=JBMsMo9yzGVD9SdckwbYHFDUnHfg-wHzUQYg6K93APg,118420
53
+ mpflash/pyproject.toml,sha256=r8RxT8MwjaEAfKHJj7THC6KmUqiTFKpjtJpP31MbMeY,1695
54
+ mpflash/stm32_udev_rules.md,sha256=LJelvFFA8w9mBcEUDA02SZ4yzNKfUFL_NWLNUb6geWY,2622
55
+ stubber/__init__.py,sha256=6KpMPO6c9ZEvZBPPZx5uuHwyJypuElaoMoTPmiTw7d0,46
56
+ stubber/board/board_info.csv,sha256=3BBwHOtKfq_U0Xl8iWgNsN3akhbNMjb-TIeusDwtTXQ,8434
57
+ stubber/board/boot.py,sha256=TEBSaKXY_TYJy9YrTRWv22m8jZRefaRNiwM8xNAlH5M,1086
58
+ stubber/board/createstubs.py,sha256=sXSMviwCmlXL2tjyMq18L2L7Y4fOzMVFHdrqAXMxo7A,31936
59
+ stubber/board/createstubs_db.py,sha256=RS6ywP7m_C22HEQs_rhvLn5OgNnN5dKrCwdjjwzG7cQ,29558
60
+ stubber/board/createstubs_db_min.py,sha256=W4GQ1iDV7M-2QZ4EfuBQ7M-ZrqzKU_adOZ-Y7WykEJ8,11142
61
+ stubber/board/createstubs_db_mpy.mpy,sha256=oHZUyh-iTIzMN_hUFyDauX8WL8ghj-YKFpTfOQRReDM,9536
62
+ stubber/board/createstubs_lvgl.py,sha256=LDlY2AxT5S_IZ5twi2wK9gm3SnHsDt9inrpCLOYmZIk,26476
63
+ stubber/board/createstubs_lvgl_min.py,sha256=9L9JsZUCY0E5x4F_Uyckkd8GjiB_49guU6DN-u7XhgU,26466
64
+ stubber/board/createstubs_lvgl_mpy.mpy,sha256=ex-nlq2V5e8anQBJvRWEEc-FzU7nlwg5NSrZ8vOadIA,9267
65
+ stubber/board/createstubs_mem.py,sha256=9VTkI51ReZdBGh7U0cnJsg6D3jZcO4srmGCpk_y-FpI,27953
66
+ stubber/board/createstubs_mem_min.py,sha256=T4joCuKAxUf1Op6kVtc4dZ4TSnIHrKNIZ5qUsSyAkJs,10713
67
+ stubber/board/createstubs_mem_mpy.mpy,sha256=QpuonHENnSzxDYQTOhxo9f8D8YV84KlzSLzjzUh9AOI,9118
68
+ stubber/board/createstubs_min.py,sha256=6PLxTD8XD7JGeTfJ_97DuJf-6iDbkMKCbKLHFvQE3KM,13405
69
+ stubber/board/createstubs_mpy.mpy,sha256=Nj0rwiGFEkCiaQcs-AiYcDp3NvPY2Hr-1xPRBBf9HwM,12388
70
+ stubber/board/fw_info.py,sha256=BTupe4rZDTs3UHRqvs429XqWHCchSpwa05yACOiOt5U,4413
71
+ stubber/board/info.py,sha256=0FCQZ5J3KFDbYe0D5iOuwhmZUUBVASPU7-L6fA7ZRGc,5446
72
+ stubber/board/main.py,sha256=l-5RCT-MMV93SkVwXh3guzx_kxFIJciSEgH1e4UrqT8,394
73
+ stubber/board/modulelist.txt,sha256=LH3tz0w9MxZEAoYRl0JPmVSrYlbsrhkHd9lBP9z2h88,2653
74
+ stubber/board/pyrightconfig.json,sha256=4jEkjN3pTfa8Ok5wxW0_W2mAOWIjKZPq5GRsk8oTBN4,1342
75
+ stubber/bulk/mcu_stubber.py,sha256=JtzXy48ercd6sLB2m0KsEw3lAPgBa_-EnuxOC1aqRug,15294
76
+ stubber/codemod/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ stubber/codemod/_partials/__init__.py,sha256=SKt5UKja7SGdJ2PIQLp7-CURTQ-EimrswhW-ZTaRBEk,1382
78
+ stubber/codemod/_partials/db_main.py,sha256=yvl1ydyiWJDhNmuH7P_5b85Crfrh2CAroA_i_8aCqIw,3856
79
+ stubber/codemod/_partials/lvgl_main.py,sha256=ANMJr4XpWyLHhk3ZHsR0YnGe8fNtIi58YOdN6TLay1o,1887
80
+ stubber/codemod/_partials/modules_reader.py,sha256=kIYUxrCNtR7K1D0NVxePuNjhPoPkOx9qbjh-mdW1IVs,1966
81
+ stubber/codemod/add_comment.py,sha256=qGaa-sF3WyeLZwa5FPyT_Yp-ARFruKlBIIe0tayUiTk,1912
82
+ stubber/codemod/add_method.py,sha256=AbHmfwjgTYWes3XrqPGk0-FjKxnGQuDLXbE5APhApF4,2544
83
+ stubber/codemod/board.py,sha256=WVeUbVOV8MlDAyr5JLhOLdlmyFdlOpdRunjdzM_ULsM,11564
84
+ stubber/codemod/enrich.py,sha256=hvrRxonYD-5mtRF_4dJzVvoVio329_XxKuTUzDW5IfY,5291
85
+ stubber/codemod/merge_docstub.py,sha256=5cyPT-tA1QnpDqtp70SjXSZx7nJ626X3y2JRzhQLgyA,12395
86
+ stubber/codemod/modify_list.py,sha256=_YTj3E44dwb7QaRqKaIq0IWg-BzH69AZRqTr3QMkFnY,2064
87
+ stubber/codemod/utils.py,sha256=7I69E23wnlwABTbfszq6lZN7PNA7H5y4_KiSEu0fJ84,2403
88
+ stubber/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ stubber/commands/build_cmd.py,sha256=pvgXZ6QidZqMJ1dlaHC8w2SVXpIxXRYtc7Rz9oqwUsI,2379
90
+ stubber/commands/cli.py,sha256=wbQE_FOzezRx1Z2xdW3_8zID1OoEDZmFMjsE9EA_swA,1507
91
+ stubber/commands/clone_cmd.py,sha256=knY7AV0oDHdybfY9rA-mSAm8Q5YjqFZ1yV7YxDy0Wmk,2687
92
+ stubber/commands/config_cmd.py,sha256=uqIKHED8n1OyMRrMLmlfVGwMWkqN6wwRiTvpcLtS91M,962
93
+ stubber/commands/enrich_folder_cmd.py,sha256=m6Fu6WC3yzpSMQajVVRVFcJ_5Dci8lK0vCcci5XhVVk,1796
94
+ stubber/commands/get_core_cmd.py,sha256=u4dObHXQzuCMYilv6-w4py6AYIdl97wCM4ilVlKLx9U,2238
95
+ stubber/commands/get_docstubs_cmd.py,sha256=Lm-b5xevPOKhKXz0piJshBEubxNqpsKoA84z0llj_pk,2983
96
+ stubber/commands/get_frozen_cmd.py,sha256=4nU_-UMk3Bx1Adf959N__fkNVTRwptp_xhL3KsWGMB4,3906
97
+ stubber/commands/get_mcu_cmd.py,sha256=jRtHK6STwR_woH4Mu-Goy0xlg4xUEX_Rc6xwz9Q8mgA,2693
98
+ stubber/commands/merge_cmd.py,sha256=YYMQHxCgT701tLGaLPMx3dEuoHuL5UG4LGZ_wu6Z8wg,1603
99
+ stubber/commands/publish_cmd.py,sha256=bdUgVL5XEKni7BBIX749RgdHPPlyUjhs7hq2SUzU-18,2786
100
+ stubber/commands/stub_cmd.py,sha256=CEMASBL6H5jAHydkh_ibANvE02FEAtTF6Q-fig0xAqQ,1169
101
+ stubber/commands/switch_cmd.py,sha256=qfJxshcKZggHsmGX-FBpLj06PAnIfHFU6hmCcFv-n34,1819
102
+ stubber/commands/variants_cmd.py,sha256=4EMwkouIGhllQluVFoVJoD-sCtIr7peEogCxZev6kjU,1232
103
+ stubber/cst_transformer.py,sha256=Er9kww4hgdeQ9dARMx8lB5PLIvPaKjtKJMe8BofKOzY,6301
104
+ stubber/data/board_info.csv,sha256=3BBwHOtKfq_U0Xl8iWgNsN3akhbNMjb-TIeusDwtTXQ,8434
105
+ stubber/data/board_info.json,sha256=LbyNo3qeij8bY_PRTxWoS5nFuDv6VyaRTKGiXC_-zRQ,57210
106
+ stubber/data/micropython_tags.csv,sha256=95Y4zBefqi65QNvQy5bJXr7Fw8sVHmspeo2rnyLZECQ,1894
107
+ stubber/data/requirements-core-micropython.txt,sha256=mRQ8Sj-PqYP74lVgpWWXSYkVJilSKVsjijoLARQNAwY,1279
108
+ stubber/data/requirements-core-pycopy.txt,sha256=UKZooNXL7GbojDwmaiBTxHEQzzd-H8kI6l5eJCX-oyk,1012
109
+ stubber/downloader.py,sha256=J2MHge4AhAU98M93IH-2JEhzYVEfYSeIZGlxEaWdoTE,1169
110
+ stubber/freeze/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
+ stubber/freeze/common.py,sha256=fbrHINPTtWQpdhwz-n9xiOGUVZL1pa5xFNAss5YnEpY,2599
112
+ stubber/freeze/freeze_folder.py,sha256=E3Kb7PparM77jW4xAOgrQ2cW-SFWiLDYaKih5viF5pA,2421
113
+ stubber/freeze/freeze_manifest_2.py,sha256=S1t9pGumQyrE-umhon2pndQGhxTw0smnJE5mTsphBz8,4015
114
+ stubber/freeze/get_frozen.py,sha256=4sIhYJvCz186n6JajpamepzPqJmtqD6rrjmF9CJXPmk,5201
115
+ stubber/get_cpython.py,sha256=g_HeVdzePLBIQkBSOm43v7nDhRxpR2ynhl62pRiasbY,3773
116
+ stubber/get_lobo.py,sha256=I6bVpcGX7TaD4CI9UID8R9brOG-bBdeL07j1WsTXQH4,1717
117
+ stubber/minify.py,sha256=lt8Fub09upOL1isZUBOQd14-jRaedPD8DHX_pheAQMs,14650
118
+ stubber/publish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
+ stubber/publish/bump.py,sha256=M9ePaH-K1lbh-OVyPNAv6uxumDtHe3cOD2rXeAMWDqY,3176
120
+ stubber/publish/candidates.py,sha256=VqeE8WFOlwOULo0SFDyxOI9emP1bjQ7nqyfGxHMjgCY,10545
121
+ stubber/publish/database.py,sha256=fH_-Zjd_JHTEaW2Yf8kEB6DQduKrmZl9R-67mNYE3HI,605
122
+ stubber/publish/defaults.py,sha256=x9E03Im7d7aCAotRSg2vjTl0bbxG-X8Sa2pxc9n61EQ,1492
123
+ stubber/publish/enums.py,sha256=BRzoSjLxYPLcEHySaFprY1ndLLdUetqRjYJmi5CW7xU,756
124
+ stubber/publish/helpers.py,sha256=XRN9KZgPtIEgVW6NSmZunvTiT0UqP_rr63lM69hcqbs,687
125
+ stubber/publish/merge_docstubs.py,sha256=fNOVOCjzgNwVnrssUeMQspV6YT5XJn2RIyuMEsCoY30,5217
126
+ stubber/publish/missing_class_methods.py,sha256=skS8DDI2m_C2oHQeMUCbPAuEl1HYrzONXgweAOvn-ls,1782
127
+ stubber/publish/package.py,sha256=b6G4HOdSXybuBLnOuKoXXbW9U0_j2-WM1dZ0SR6R8j0,5140
128
+ stubber/publish/pathnames.py,sha256=ZnQv31BoGZVu0FylwgM-GF-lu_G-MZDlIl9aRgYexG8,1752
129
+ stubber/publish/publish.py,sha256=o-sOOssjxhTUkn7SHSx2G4PyT63hUVEGS8Lf4nulxXo,3825
130
+ stubber/publish/pypi.py,sha256=Ml-rX25XX2lvNN4XhmFmPsPB-L7lMVqp1mLVQWksOe4,1230
131
+ stubber/publish/stubpackage.py,sha256=hIMVY4iMI48fJnpRFcl6alsgwn1RSeHsHU5NjKtHIMM,44060
132
+ stubber/rst/__init__.py,sha256=8KUzMFNdDU9X6U1VMU1q5bGu_KGxB1XNcJhzNg7tF98,284
133
+ stubber/rst/classsort.py,sha256=Ap9GsrDz34UGZSqWvhr7LWSvtWL0vgB0owMbfcJLKqI,2577
134
+ stubber/rst/lookup.py,sha256=UukjRxy1posEunJrEeVczbkIWQMpmz0Kiw0b_AgKh5Q,19750
135
+ stubber/rst/output_dict.py,sha256=tH_32ZTNj7BndvY2YcZCa1uB-lLeyJUeltoEkTT_Np8,14354
136
+ stubber/rst/reader.py,sha256=HFPem4oxfkWh39Rt4GOGvGUzh1yfM_ENAEm1QoaVE_4,32795
137
+ stubber/rst/report_return.py,sha256=M_7c0gCU9uq1UTplDOYuKHTxDi9uGwBB5qDfidGUdvU,2947
138
+ stubber/rst/rst_utils.py,sha256=K4DAnShcIGXaLBr7oqu5KNSaJL6evElo26bxQQYLrLY,17276
139
+ stubber/stubber.py,sha256=sScRIAq7vvUZUS9Mzh4Ne6ny0qpsReGNqo0u8vtZXEc,1596
140
+ stubber/stubs_from_docs.py,sha256=ugKYknJnRpvtAWQBl2TqwIxCD-BxN8bEZmMu37axJeg,2741
141
+ stubber/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
+ stubber/tools/manifestfile.py,sha256=12DBJlmiybPv7qo9-X-eT7N53xuP3csUOzsE-Fe5oto,25097
143
+ stubber/tools/readme.md,sha256=NJ_g0oeeExhiRs2lMQVekccnR_c2lGLt-snu1RnUIx0,278
144
+ stubber/update_fallback.py,sha256=DVlym7rRWJHs9rC8niiAyeDi5C_Id9BkEkXjS14sSvI,4796
145
+ stubber/update_module_list.py,sha256=O9huvx6-4VEJ45iBAviQrSlqaOuWia410j-jwUGfDdE,3884
146
+ stubber/utils/__init__.py,sha256=FzTO7K7X4pBCRxbZjl15JyRNusidLX7uk_DgYMcIFzM,228
147
+ stubber/utils/config.py,sha256=H0D0ntWwJfBw7kunX9gkRoGL5cXhMdQLwF0WgHwp7ag,4794
148
+ stubber/utils/makeversionhdr.py,sha256=65VXDavYQU5GnR8OfbFAXAq6RCAtLdbEM-a7a3UiLxc,1899
149
+ stubber/utils/manifest.py,sha256=ROGiUEZsvMZ-8c8uUYMU_Uh8_HddY3u96vkUH2o8BH0,3149
150
+ stubber/utils/post.py,sha256=ykux4VF_DAVe0mgSf9wXdUs78DRPr-7WH9QMenhtfpE,2757
151
+ stubber/utils/repos.py,sha256=4UqrjuthC548sRmrps-43y8IqHcjLABVRp-f-vTNPoo,5740
152
+ stubber/utils/stubmaker.py,sha256=FqD5pmXNk_xyjeRc2S3ORlv8ZPrcGwiXFL14r3DobSU,5097
153
+ stubber/utils/typed_config_toml.py,sha256=-8VtE4UF1U7RX6Gc12lgHMaKPt5PTKddRjqiuVE8xt4,2573
154
+ stubber/variants.py,sha256=6k8CC7ZyfNkMIsEcBtYeBUqpBrQ5OVIbu1lqqySaxOk,3686
155
+ micropython_stubber-1.23.1.post1.dist-info/LICENSE,sha256=2zsOXlYgl9W7_XGXcncAXIYfvSVlyNcVBycC6hhlKhA,1542
156
+ micropython_stubber-1.23.1.post1.dist-info/METADATA,sha256=U8ll8ZRmjm2N69Lxis4YD6GGmtH6miIwgqq6Jil_ZWM,23896
157
+ micropython_stubber-1.23.1.post1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
158
+ micropython_stubber-1.23.1.post1.dist-info/entry_points.txt,sha256=JoR8NWh8t6pbDyn0WOMCIfRfDQAOGxqbOgJWuxv3Cxw,116
159
+ micropython_stubber-1.23.1.post1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ [console_scripts]
2
+ mpflash=mpflash.cli_main:mpflash
3
+ mpremote=mpremote.main:main
4
+ stubber=stubber.stubber:stubber_cli
5
+
mpflash/README.md CHANGED
@@ -11,8 +11,8 @@ This tool was initially created to be used in a CI/CD pipeline to automate the p
11
11
  `mpflash` has been tested on:
12
12
  - OS: Windows x64, Linux X64, but not (yet) macOS.
13
13
  - Micropython (hardware) ports:
14
- - `rp2`, using `.uf2`, using filecopy (macos not tested yet)
15
- - `samd`, using ` .uf2`, using filecopy (macos not tested yet)
14
+ - `rp2`, using `.uf2`, using filecopy
15
+ - `samd`, using ` .uf2`, using filecopy
16
16
  - `esp32`, using `.bin`, using esptool,
17
17
  - `esp8266`, using `.bin`, using esptool
18
18
  - `stm32`, using ` .dfu`, using pydfu
@@ -25,7 +25,7 @@ Not yet implemented: `nrf`, `cc3200`, `mimxrt`
25
25
  3. Flash one or all connected MicroPython boards with a specific firmware or version.
26
26
 
27
27
  ## Installation
28
- To install mpflash, you can use pip: `pip install mpflash`
28
+ To install mpflash, you can use: `pipx install mpflash` or `pip install mpflash`
29
29
 
30
30
  ## Basic usage
31
31
  You can use mpflash to perform various operations on your MicroPython boards. Here is an example of basic usage:
@@ -36,6 +36,32 @@ You can use mpflash to perform various operations on your MicroPython boards. He
36
36
  | `mpflash download` | Download the MicroPython firmware(s) for the connected board(s) |
37
37
  | `mpflash flash` | Flash the latest stable firmware to the connected board(s) |
38
38
 
39
+ ## selecting or ignoring specific serial ports
40
+
41
+ You can use the `--serial` option to select a specific serial port to flash, or the `--ignore` option to ignore a specific serial port.
42
+ both options can be specified multiple times
43
+ Both can be globs (e.g. COM*) or exact port names (e.g. COM1)
44
+ in addition there is a --bluetooth option to simplify ignoring bluetooth ports
45
+
46
+ ```
47
+ --serial,--serial-port -s SERIALPORT Serial port(s) (or globs) to list. [default: *] > > --ignore -i SERIALPORT Serial port(s) (or globs) to ignore. Defaults to MPFLASH_IGNORE. │
48
+ --bluetooth/--no-bluetooth -b/-nb Include bluetooth ports in the list [default: no-bluetooth]
49
+ ```
50
+
51
+ ## Distinguishing similar boards
52
+ The `mpflash list` command will list all connected boards, but sometimes you have multiple boards of the same type connected.
53
+ To help you identify the boards, you can add a board_info.toml file to the top/default folder for the board.
54
+ This file can contain a description of the board, which will be shown in the list and json output.
55
+ ```toml
56
+ description = "Blue Norwegian actuator"
57
+ ```
58
+
59
+ If you want the board to be ignored by mpflash, you can add the following to the board_info.toml file:
60
+ ```toml
61
+ [mpflash]
62
+ ignore = true
63
+ ```
64
+
39
65
 
40
66
  ## Linux permissions to access usb devices
41
67
  In order to flash the firmware to the board, you need to have the correct permissions to access the USB devices.
@@ -69,7 +95,7 @@ To download the MicroPython firmware for some boards, use the following command:
69
95
 
70
96
  These will try to download the prebuilt MicroPython firmware for the boards from https://micropython.org/download/ and save it in your downloads folder in the `firmware` directory.
71
97
  The stable version (default) is determined based on the most recent published release,
72
- other versions are `--version preview` and `--version x.y.z` to download the latest preview or version x.y.z respectively.
98
+ other options are `--version stable`, `--version preview` and `--version x.y.z` to download the latest stable, preview or version x.y.z respectively.
73
99
 
74
100
  By default the firmware will be downloaded to your OS's preferred `Downloads/firmware` folder, but you can speciy a different directory using the `--dir` option.
75
101
 
@@ -92,8 +118,18 @@ After you have downloaded a firmware you can flash the firmware to a board usin
92
118
  This will (try to) autodetect the connected boards, and determine the correct firmware to flash to each board.
93
119
 
94
120
  - `mpflash flash` will flash the latest stable firmware to all connected boards.
121
+ If you have a board withouth a running micropython version, you will need to specify the board and the serial port to flash.
95
122
  - `mpflash flash --serial ? --board ?` will prompt to select a specific serial port and board to flash. (the firmware must be dowloaded earlier)
96
123
 
124
+ In order to flash the firmware some boards need to be put in bootloader mode, this is done automatically by mpflash where possible and supported by the boards hardware and current bootloader.
125
+ The supported `--bootloader` options are:
126
+
127
+ - `touch1200` bootloader is activated by connecting to the board at 1200 baud
128
+ - `mpy` using micropython to enter the bootloader
129
+ - `manual` manual intervention is needed to enter the bootloader
130
+ - `none` mpflash assumes the board is ready to flash
131
+
132
+ For ESP32 and ESP8266 boards the `esptool` is used to flash the firmware, and this includes activating the bootloader.
97
133
 
98
134
  ### Flashing all connected boards with the latest stable firmware
99
135
  ```bash
@@ -11,7 +11,7 @@ from mpremote.mip import _rewrite_url as rewrite_url # type: ignore
11
11
 
12
12
  from mpflash.common import FWInfo
13
13
  from mpflash.config import config
14
- from mpflash.vendor.versions import get_preview_mp_version, get_stable_mp_version
14
+ from mpflash.versions import get_preview_mp_version, get_stable_mp_version
15
15
 
16
16
 
17
17
  def add_firmware(
@@ -14,7 +14,7 @@ from .config import config
14
14
  from .mpboard_id import (get_known_boards_for_port, get_known_ports,
15
15
  known_stored_boards)
16
16
  from .mpremoteboard import MPRemoteBoard
17
- from .vendor.versions import micropython_versions
17
+ from .versions import micropython_versions
18
18
 
19
19
 
20
20
  def ask_missing_params(
@@ -14,16 +14,11 @@ from github import Auth, Github
14
14
  from loguru import logger as log
15
15
  from packaging.version import parse
16
16
 
17
- # from stubber.utils.versions import get_stable_mp_version
18
- from mpflash.vendor.versions import get_stable_mp_version
19
-
20
- # from stubber.utils.versions import SET_PREVIEW
17
+ # from mpflash.versions import SET_PREVIEW
21
18
 
22
19
  # Token with no permissions to avoid throttling
23
20
  # https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#getting-a-higher-rate-limit
24
- PAT_NO_ACCESS = (
25
- "github_pat" + "_11AAHPVFQ0qAkDnSUaMKSp" + "_ZkDl5NRRwBsUN6EYg9ahp1Dvj4FDDONnXVgimxC2EtpY7Q7BUKBoQ0Jq72X"
26
- )
21
+ PAT_NO_ACCESS = "github_pat" + "_11AAHPVFQ0qAkDnSUaMKSp" + "_ZkDl5NRRwBsUN6EYg9ahp1Dvj4FDDONnXVgimxC2EtpY7Q7BUKBoQ0Jq72X"
27
22
  PAT = os.environ.get("GITHUB_TOKEN") or PAT_NO_ACCESS
28
23
  GH_CLIENT = Github(auth=Auth.Token(PAT))
29
24
 
@@ -40,9 +35,7 @@ def _run_local_git(
40
35
  if repo:
41
36
  if isinstance(repo, str):
42
37
  repo = Path(repo)
43
- result = subprocess.run(
44
- cmd, capture_output=capture_output, check=True, cwd=repo.absolute().as_posix(), encoding="utf-8"
45
- )
38
+ result = subprocess.run(cmd, capture_output=capture_output, check=True, cwd=repo.absolute().as_posix(), encoding="utf-8")
46
39
  else:
47
40
  result = subprocess.run(cmd, capture_output=capture_output, check=True, encoding="utf-8")
48
41
  except (NotADirectoryError, FileNotFoundError) as e: # pragma: no cover
@@ -74,9 +67,6 @@ def clone(remote_repo: str, path: Path, shallow: bool = False, tag: Optional[str
74
67
  cmd = ["git", "clone"]
75
68
  if shallow:
76
69
  cmd += ["--depth", "1"]
77
- if tag in {"stable"}:
78
- tag = get_stable_mp_version()
79
-
80
70
  if tag in {"preview", "latest", "master"}:
81
71
  tag = None
82
72
  cmd += [remote_repo, "--branch", tag, str(path)] if tag else [remote_repo, str(path)]
@@ -1,37 +1,2 @@
1
- import time
2
-
3
- from mpflash.common import BootloaderMethod
4
- from mpflash.errors import MPFlashError
5
- from mpflash.logger import log
6
- from mpflash.mpremoteboard import MPRemoteBoard
7
-
8
- from .manual import enter_bootloader_manual
9
- from .micropython import enter_bootloader_mpy
10
- from .touch1200 import enter_bootloader_cdc_1200bps
11
-
12
-
13
- def enter_bootloader(
14
- mcu: MPRemoteBoard,
15
- method: BootloaderMethod = BootloaderMethod.MPY,
16
- timeout: int = 10,
17
- wait_after: int = 2,
18
- ):
19
- """Enter the bootloader mode for the board"""
20
- if method == BootloaderMethod.NONE:
21
- # NO bootloader requested, so must be OK to flash
22
- return True
23
-
24
- log.info(f"Entering bootloader on {mcu.board} on {mcu.serialport} using method: {method.value}")
25
- if method == BootloaderMethod.MPY:
26
- result = enter_bootloader_mpy(mcu, timeout=timeout)
27
- elif method == BootloaderMethod.MANUAL:
28
- result = enter_bootloader_manual(mcu, timeout=timeout)
29
- elif method == BootloaderMethod.TOUCH_1200:
30
- result = enter_bootloader_cdc_1200bps(mcu, timeout=timeout)
31
- else:
32
- raise MPFlashError(f"Unknown bootloader method {method}")
33
- if result:
34
- time.sleep(wait_after)
35
- else:
36
- log.error(f"Failed to enter bootloader on {mcu.serialport}")
37
- return result
1
+ from .activate import enter_bootloader # type: ignore
2
+ from .detect import in_bootloader # type: ignore
@@ -0,0 +1,60 @@
1
+ import time
2
+
3
+ from mpflash.bootloader.detect import in_bootloader
4
+ from mpflash.common import BootloaderMethod
5
+ from mpflash.errors import MPFlashError
6
+ from mpflash.logger import log
7
+ from mpflash.mpremoteboard import MPRemoteBoard
8
+
9
+ from .manual import enter_bootloader_manual
10
+ from .micropython import enter_bootloader_mpy
11
+ from .touch1200 import enter_bootloader_touch_1200bps
12
+
13
+ BL_OPTIONS = {
14
+ "stm32": [BootloaderMethod.TOUCH_1200, BootloaderMethod.MPY, BootloaderMethod.MANUAL],
15
+ "rp2": [BootloaderMethod.TOUCH_1200, BootloaderMethod.MPY, BootloaderMethod.MANUAL],
16
+ "samd": [BootloaderMethod.TOUCH_1200, BootloaderMethod.MPY, BootloaderMethod.MANUAL],
17
+ "esp32": [BootloaderMethod.NONE],
18
+ "esp8266": [BootloaderMethod.NONE],
19
+ }
20
+
21
+
22
+ def enter_bootloader(
23
+ mcu: MPRemoteBoard,
24
+ method: BootloaderMethod = BootloaderMethod.MPY,
25
+ timeout: int = 10,
26
+ wait_after: int = 2,
27
+ ):
28
+ """Enter the bootloader mode for the board"""
29
+ if method == BootloaderMethod.NONE:
30
+ # NO bootloader requested, so must be OK to flash
31
+ return True
32
+ elif method == BootloaderMethod.AUTO:
33
+ # build a list of options to try for this board
34
+ bl_list = BL_OPTIONS.get(mcu.port, [BootloaderMethod.MPY, BootloaderMethod.MANUAL])
35
+ else:
36
+ bl_list = [method, BootloaderMethod.MANUAL]
37
+ log.info(f"Entering bootloader on {mcu.serialport} using methods {[bl.value for bl in bl_list]}")
38
+ for method in bl_list:
39
+ try:
40
+ if method == BootloaderMethod.MPY:
41
+ result = enter_bootloader_mpy(mcu, timeout=timeout)
42
+ elif method == BootloaderMethod.MANUAL:
43
+ result = enter_bootloader_manual(mcu, timeout=timeout)
44
+ elif method == BootloaderMethod.TOUCH_1200:
45
+ result = enter_bootloader_touch_1200bps(mcu, timeout=timeout)
46
+ except MPFlashError as e:
47
+ log.warning(f"Failed to enter bootloader on {mcu.serialport} using {method.value}")
48
+ log.exception(e)
49
+ result = False
50
+ if not result:
51
+ # try a next method
52
+ continue
53
+
54
+ # todo - check every second or so for up to max wait time
55
+ time.sleep(wait_after)
56
+ # check if bootloader was entered
57
+ if in_bootloader(mcu):
58
+ return True
59
+
60
+ return result