esptool 5.1.dev1__tar.gz → 5.2.dev1__tar.gz

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 (170) hide show
  1. {esptool-5.1.dev1/esptool.egg-info → esptool-5.2.dev1}/PKG-INFO +4 -3
  2. {esptool-5.1.dev1 → esptool-5.2.dev1}/README.md +1 -0
  3. {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/__init__.py +1 -1
  4. {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/esp_port_manager.py +2 -2
  5. {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/redirector.py +3 -4
  6. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/__init__.py +4 -3
  7. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/cli_util.py +1 -1
  8. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/base_fields.py +21 -16
  9. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/base_operations.py +14 -14
  10. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/csv_table_parser.py +3 -5
  11. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/emulate_efuse_controller_base.py +5 -1
  12. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/emulate_efuse_controller.py +2 -2
  13. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/fields.py +9 -11
  14. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/mem_definition.py +1 -1
  15. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/operations.py +3 -2
  16. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +1 -1
  17. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/fields.py +6 -7
  18. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/mem_definition.py +1 -1
  19. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/operations.py +8 -6
  20. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +1 -1
  21. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/fields.py +5 -6
  22. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/mem_definition.py +1 -1
  23. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/operations.py +4 -2
  24. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +1 -1
  25. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/fields.py +8 -16
  26. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/mem_definition.py +1 -1
  27. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +1 -1
  28. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/fields.py +8 -9
  29. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/mem_definition.py +1 -1
  30. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +1 -1
  31. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/fields.py +7 -8
  32. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/mem_definition.py +1 -1
  33. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/operations.py +4 -2
  34. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +1 -1
  35. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/fields.py +10 -11
  36. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/mem_definition.py +1 -1
  37. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/operations.py +4 -2
  38. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +1 -1
  39. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/fields.py +11 -12
  40. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/mem_definition.py +1 -1
  41. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +1 -1
  42. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/fields.py +11 -15
  43. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/mem_definition.py +1 -1
  44. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +2 -2
  45. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/fields.py +104 -13
  46. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/mem_definition.py +19 -2
  47. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +1 -1
  48. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/fields.py +9 -10
  49. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/mem_definition.py +1 -1
  50. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +1 -1
  51. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/fields.py +10 -11
  52. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/mem_definition.py +1 -1
  53. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/operations.py +4 -2
  54. esptool-5.2.dev1/espefuse/efuse/esp32s31/__init__.py +5 -0
  55. esptool-5.2.dev1/espefuse/efuse/esp32s31/emulate_efuse_controller.py +92 -0
  56. esptool-5.2.dev1/espefuse/efuse/esp32s31/fields.py +443 -0
  57. esptool-5.2.dev1/espefuse/efuse/esp32s31/mem_definition.py +158 -0
  58. esptool-5.2.dev1/espefuse/efuse/esp32s31/operations.py +297 -0
  59. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/mem_definition_base.py +3 -3
  60. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/util.py +3 -3
  61. esptool-5.2.dev1/espefuse/efuse_defs/esp32p4_v3.0.yaml +174 -0
  62. esptool-5.2.dev1/espefuse/efuse_defs/esp32s31.yaml +122 -0
  63. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_interface.py +2 -0
  64. {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/__init__.py +20 -15
  65. {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/esp_hsm_sign/__init__.py +5 -3
  66. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/__init__.py +52 -13
  67. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/bin_image.py +41 -32
  68. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/cli_util.py +10 -6
  69. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/cmds.py +15 -19
  70. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/loader.py +34 -23
  71. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/logger.py +1 -1
  72. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/reset.py +1 -1
  73. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/__init__.py +2 -0
  74. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32.py +8 -7
  75. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c2.py +20 -19
  76. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c3.py +10 -1
  77. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c5.py +22 -5
  78. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c6.py +23 -4
  79. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32c61.py +13 -4
  80. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32p4.py +32 -5
  81. esptool-5.2.dev1/esptool/targets/esp32s31.py +221 -0
  82. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp8266.py +2 -2
  83. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/README.md +1 -1
  84. esptool-5.2.dev1/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
  85. esptool-5.2.dev1/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
  86. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/uf2_writer.py +1 -1
  87. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/util.py +24 -21
  88. {esptool-5.1.dev1 → esptool-5.2.dev1/esptool.egg-info}/PKG-INFO +4 -3
  89. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/SOURCES.txt +9 -0
  90. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/requires.txt +2 -2
  91. {esptool-5.1.dev1 → esptool-5.2.dev1}/pyproject.toml +7 -5
  92. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c5.json +0 -8
  93. {esptool-5.1.dev1 → esptool-5.2.dev1}/LICENSE +0 -0
  94. {esptool-5.1.dev1 → esptool-5.2.dev1}/MANIFEST.in +0 -0
  95. {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server/__main__.py +0 -0
  96. {esptool-5.1.dev1 → esptool-5.2.dev1}/esp_rfc2217_server.py +0 -0
  97. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/__main__.py +0 -0
  98. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/__init__.py +0 -0
  99. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32/__init__.py +0 -0
  100. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c2/__init__.py +0 -0
  101. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c3/__init__.py +0 -0
  102. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/__init__.py +0 -0
  103. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c5/operations.py +0 -0
  104. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/__init__.py +0 -0
  105. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c6/operations.py +0 -0
  106. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32c61/__init__.py +0 -0
  107. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h2/__init__.py +0 -0
  108. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/__init__.py +0 -0
  109. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h21/operations.py +0 -0
  110. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/__init__.py +0 -0
  111. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32h4/operations.py +0 -0
  112. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/__init__.py +0 -0
  113. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32p4/operations.py +0 -0
  114. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/__init__.py +0 -0
  115. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s2/operations.py +0 -0
  116. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse/esp32s3/__init__.py +0 -0
  117. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32.yaml +0 -0
  118. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c2.yaml +0 -0
  119. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c3.yaml +0 -0
  120. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c5.yaml +0 -0
  121. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c6.yaml +0 -0
  122. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32c61.yaml +0 -0
  123. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h2.yaml +0 -0
  124. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h21.yaml +0 -0
  125. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
  126. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32h4.yaml +0 -0
  127. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32p4.yaml +0 -0
  128. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32s2.yaml +0 -0
  129. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse/efuse_defs/esp32s3.yaml +0 -0
  130. {esptool-5.1.dev1 → esptool-5.2.dev1}/espefuse.py +0 -0
  131. {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/__main__.py +0 -0
  132. {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure/esp_hsm_sign/exceptions.py +0 -0
  133. {esptool-5.1.dev1 → esptool-5.2.dev1}/espsecure.py +0 -0
  134. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/__main__.py +0 -0
  135. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/config.py +0 -0
  136. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32h2.py +0 -0
  137. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32h21.py +0 -0
  138. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32h4.py +0 -0
  139. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32s2.py +0 -0
  140. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/esp32s3.py +0 -0
  141. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32.json +0 -0
  142. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
  143. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
  144. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
  145. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32c61.json +0 -0
  146. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
  147. /esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32p4.json → /esptool-5.2.dev1/esptool/targets/stub_flasher/1/esp32p4rc1.json +0 -0
  148. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
  149. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
  150. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
  151. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
  152. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
  153. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/README.md +0 -0
  154. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32.json +0 -0
  155. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
  156. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
  157. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c5.json +0 -0
  158. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
  159. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32c61.json +0 -0
  160. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
  161. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32p4.json +0 -0
  162. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
  163. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
  164. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool/targets/stub_flasher/2/esp8266.json +0 -0
  165. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/dependency_links.txt +0 -0
  166. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/entry_points.txt +0 -0
  167. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.egg-info/top_level.txt +0 -0
  168. {esptool-5.1.dev1 → esptool-5.2.dev1}/esptool.py +0 -0
  169. {esptool-5.1.dev1 → esptool-5.2.dev1}/setup.cfg +0 -0
  170. {esptool-5.1.dev1 → esptool-5.2.dev1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: esptool
3
- Version: 5.1.dev1
3
+ Version: 5.2.dev1
4
4
  Summary: A serial utility for flashing, provisioning, and interacting with Espressif SoCs.
5
5
  Author: Fredrik Ahlberg (themadinventor), Angus Gratton (projectgus), Espressif Systems
6
6
  License: GPLv2+
@@ -31,7 +31,7 @@ Requires-Dist: pyserial>=3.3
31
31
  Requires-Dist: reedsolo<1.8,>=1.5.3
32
32
  Requires-Dist: PyYAML>=5.1
33
33
  Requires-Dist: intelhex
34
- Requires-Dist: rich_click
34
+ Requires-Dist: rich_click<1.9.0
35
35
  Requires-Dist: click<9
36
36
  Provides-Extra: dev
37
37
  Requires-Dist: pyelftools; extra == "dev"
@@ -44,7 +44,7 @@ Requires-Dist: czespressif; extra == "dev"
44
44
  Provides-Extra: hsm
45
45
  Requires-Dist: python-pkcs11; extra == "hsm"
46
46
  Provides-Extra: docs
47
- Requires-Dist: esp-docs~=1.10; extra == "docs"
47
+ Requires-Dist: esp-docs~=2.1; extra == "docs"
48
48
  Requires-Dist: sphinx-tabs; extra == "docs"
49
49
  Dynamic: license-file
50
50
 
@@ -53,6 +53,7 @@ Dynamic: license-file
53
53
  A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
54
54
 
55
55
  [![Test esptool](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [![Build esptool](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
56
+ [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/espressif/esptool/master.svg)](https://results.pre-commit.ci/latest/github/espressif/esptool/master)
56
57
 
57
58
  ## Documentation
58
59
 
@@ -3,6 +3,7 @@
3
3
  A Python-based, open-source, platform-independent serial utility for flashing, provisioning, and interacting with Espressif SoCs.
4
4
 
5
5
  [![Test esptool](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/test_esptool.yml) [![Build esptool](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml/badge.svg?branch=master)](https://github.com/espressif/esptool/actions/workflows/build_esptool.yml)
6
+ [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/espressif/esptool/master.svg)](https://results.pre-commit.ci/latest/github/espressif/esptool/master)
6
7
 
7
8
  ## Documentation
8
9
 
@@ -134,7 +134,7 @@ def main():
134
134
  except KeyboardInterrupt:
135
135
  print(flush=True)
136
136
  break
137
- except socket.error as msg:
137
+ except OSError as msg:
138
138
  logging.error(str(msg))
139
139
 
140
140
  logging.info("--- exit ---")
@@ -38,7 +38,7 @@ class EspPortManager(serial.rfc2217.PortManager):
38
38
  def __init__(self, serial_port, connection, esp32r0_delay, logger=None):
39
39
  self.esp32r0_delay = esp32r0_delay
40
40
  self.is_download_mode = False
41
- super(EspPortManager, self).__init__(serial_port, connection, logger)
41
+ super().__init__(serial_port, connection, logger)
42
42
 
43
43
  def _telnet_process_subnegotiation(self, suboption):
44
44
  if suboption[0:1] == COM_PORT_OPTION and suboption[1:2] == SET_CONTROL:
@@ -66,7 +66,7 @@ class EspPortManager(serial.rfc2217.PortManager):
66
66
  ]:
67
67
  return
68
68
  # only in cases not handled above do the original implementation in PortManager
69
- super(EspPortManager, self)._telnet_process_subnegotiation(suboption)
69
+ super()._telnet_process_subnegotiation(suboption)
70
70
 
71
71
  def _hard_reset_thread(self):
72
72
  """
@@ -5,12 +5,11 @@
5
5
  import threading
6
6
  import time
7
7
  import logging
8
- import socket
9
8
 
10
9
  from esp_rfc2217_server.esp_port_manager import EspPortManager
11
10
 
12
11
 
13
- class Redirector(object):
12
+ class Redirector:
14
13
  def __init__(self, serial_instance, socket, debug=False, esp32r0delay=False):
15
14
  self.serial = serial_instance
16
15
  self.socket = socket
@@ -54,7 +53,7 @@ class Redirector(object):
54
53
  if data:
55
54
  # escape outgoing data when needed (Telnet IAC (0xff) character)
56
55
  self.write(b"".join(self.rfc2217.escape(data)))
57
- except socket.error as msg:
56
+ except OSError as msg:
58
57
  self.log.error("{}".format(msg))
59
58
  # probably got disconnected
60
59
  break
@@ -74,7 +73,7 @@ class Redirector(object):
74
73
  if not data:
75
74
  break
76
75
  self.serial.write(b"".join(self.rfc2217.filter(data)))
77
- except socket.error as msg:
76
+ except OSError as msg:
78
77
  self.log.error("{}".format(msg))
79
78
  # probably got disconnected
80
79
  break
@@ -93,9 +93,10 @@ __all__ = [
93
93
  "Use with caution!",
94
94
  )
95
95
  @click.option(
96
- "--postpone",
97
- is_flag=True,
98
- help="Postpone burning some eFuses from BLOCK0 at the end.",
96
+ "--postpone/--no-postpone",
97
+ default=True,
98
+ help="Postpone burning some eFuses from BLOCK0 at the end "
99
+ "(enabled by default, can be disabled with --no-postpone).",
99
100
  )
100
101
  @click.option(
101
102
  "--extend-efuse-table",
@@ -220,7 +220,7 @@ class Group(EsptoolGroup):
220
220
  commands = init_commands(port=None, chip=ctx.obj["chip"], skip_connect=True)
221
221
  commands.add_cli_commands(self)
222
222
  elif len(used_cmds) == 0:
223
- self.get_help(ctx)
223
+ log.print(self.get_help(ctx))
224
224
  ctx.exit()
225
225
 
226
226
  cmd_groups = self.repeat_read_commands(used_cmds, cmd_groups)
@@ -17,7 +17,7 @@ from esptool.logger import log
17
17
  from . import util
18
18
 
19
19
 
20
- class CheckArgValue(object):
20
+ class CheckArgValue:
21
21
  def __init__(self, efuses, name):
22
22
  self.efuses = efuses
23
23
  self.name = name
@@ -85,7 +85,7 @@ class CheckArgValue(object):
85
85
  return check_arg_value(efuse, new_value)
86
86
 
87
87
 
88
- class EfuseProtectBase(object):
88
+ class EfuseProtectBase:
89
89
  # This class is used by EfuseBlockBase and EfuseFieldBase
90
90
  read_disable_bit: int | list[int] | None
91
91
  write_disable_bit: int | list[int] | None
@@ -214,9 +214,7 @@ class EfuseBlockBase(EfuseProtectBase):
214
214
  elif coding_scheme == self.parent.REGS.CODING_SCHEME_RS:
215
215
  return self.len * 4
216
216
  else:
217
- raise esptool.FatalError(
218
- "Coding scheme (%d) not supported" % (coding_scheme)
219
- )
217
+ raise esptool.FatalError(f"Coding scheme ({coding_scheme}) not supported")
220
218
 
221
219
  def get_coding_scheme(self):
222
220
  if self.id == 0:
@@ -255,7 +253,7 @@ class EfuseBlockBase(EfuseProtectBase):
255
253
  words = self.get_words()
256
254
  data = BitArray()
257
255
  for word in reversed(words):
258
- data.append("uint:32=%d" % word)
256
+ data.append(f"uint:32={word}")
259
257
  self.bitarray.overwrite(data, pos=0)
260
258
  if print_info:
261
259
  self.print_block(self.bitarray, "read_regs")
@@ -264,13 +262,13 @@ class EfuseBlockBase(EfuseProtectBase):
264
262
  if self.parent.debug or debug:
265
263
  bit_string.pos = 0
266
264
  log.print(
267
- "%-15s (%-16s) [%-2d] %s:"
268
- % (self.name, " ".join(self.alias)[:16], self.id, comment),
265
+ f"{self.name:<15s} ({' '.join(self.alias)[:16]:<16s}) "
266
+ f"[{self.id:<2d}] {comment}:",
269
267
  " ".join(
270
268
  [
271
- "%08x" % word
269
+ f"{word:08x}"
272
270
  for word in bit_string.readlist(
273
- "%d*uint:32" % (bit_string.len / 32)
271
+ f"{int(bit_string.len / 32)}*uint:32"
274
272
  )[::-1]
275
273
  ]
276
274
  ),
@@ -285,8 +283,8 @@ class EfuseBlockBase(EfuseProtectBase):
285
283
  return False
286
284
  if len(wr_data.bytes) != len(self.bitarray.bytes):
287
285
  raise esptool.FatalError(
288
- "Data does not fit: the block%d size is %d bytes, data is %d bytes"
289
- % (self.id, len(self.bitarray.bytes), len(wr_data.bytes))
286
+ f"Data does not fit: block{self.id} size "
287
+ f"{len(self.bitarray.bytes)} bytes, data {len(wr_data.bytes)} bytes"
290
288
  )
291
289
  self.check_wr_rd_protect()
292
290
 
@@ -468,7 +466,7 @@ class EfuseBlockBase(EfuseProtectBase):
468
466
  self.wr_bitarray.set(0)
469
467
 
470
468
 
471
- class EspEfusesBase(object):
469
+ class EspEfusesBase:
472
470
  """
473
471
  Wrapper object to manage the efuse fields in a connected ESP bootloader
474
472
  """
@@ -538,8 +536,14 @@ class EspEfusesBase(object):
538
536
  log.print("Re-connecting...")
539
537
  baudrate = esp._port.baudrate
540
538
  port = esp._port.port
539
+ connect_mode = (
540
+ "usb-reset"
541
+ if esp._get_pid() == esp.USB_JTAG_SERIAL_PID
542
+ else "default-reset"
543
+ )
544
+ log.print(f"Port: {port}, Baudrate: {baudrate}, Connect mode: {connect_mode}")
541
545
  esp._port.close()
542
- return esptool.detect_chip(port, baudrate)
546
+ return esptool.detect_chip(port, baudrate, connect_mode)
543
547
 
544
548
  def get_index_block_by_name(self, name):
545
549
  for block in self.blocks:
@@ -674,8 +678,9 @@ class EspEfusesBase(object):
674
678
  @staticmethod
675
679
  def confirm(action, do_not_confirm):
676
680
  log.print(
677
- "%s%s\nThis is an irreversible operation!"
678
- % (action, "" if action.endswith("\n") else ". ")
681
+ "{}{}\nThis is an irreversible operation!".format(
682
+ action, "" if action.endswith("\n") else ". "
683
+ )
679
684
  )
680
685
  if not do_not_confirm:
681
686
  log.print("Type 'BURN' (all capitals) to continue.", flush=True)
@@ -9,7 +9,8 @@ import io
9
9
  import os
10
10
  import json
11
11
  import sys
12
- from typing import Any, BinaryIO, Callable, TextIO
12
+ from typing import Any, BinaryIO, TextIO
13
+ from collections.abc import Callable
13
14
 
14
15
  import espsecure
15
16
  import rich_click as click
@@ -850,9 +851,9 @@ class BaseCommands:
850
851
  for block in self.efuses.blocks:
851
852
  burn_list_a_block = [e for e in burn_efuses_list if e.block == block.id]
852
853
  if len(burn_list_a_block):
853
- log.print(" from BLOCK%d" % (block.id))
854
+ log.print(f" from BLOCK{block.id}")
854
855
  for field in burn_list_a_block:
855
- log.print(" - %s" % (field.name))
856
+ log.print(f" - {field.name}")
856
857
  if (
857
858
  self.efuses.blocks[field.block].get_coding_scheme()
858
859
  != self.efuses.REGS.CODING_SCHEME_NONE
@@ -990,7 +991,7 @@ class BaseCommands:
990
991
  ]
991
992
  if error:
992
993
  raise esptool.FatalError(
993
- "%s must be readable, stop this operation!" % efuse_name
994
+ f"{efuse_name} must be readable, stop this operation!"
994
995
  )
995
996
  else:
996
997
  for block in self.efuses.Blocks.BLOCKS:
@@ -1000,8 +1001,8 @@ class BaseCommands:
1000
1001
  self.efuses[block.key_purpose].get()
1001
1002
  ):
1002
1003
  raise esptool.FatalError(
1003
- "%s must be readable, stop this operation!"
1004
- % efuse_name
1004
+ f"{efuse_name} must be readable, "
1005
+ f"stop this operation!"
1005
1006
  )
1006
1007
  break
1007
1008
  # make full list of which efuses will be disabled
@@ -1013,8 +1014,8 @@ class BaseCommands:
1013
1014
  ]
1014
1015
  names = ", ".join(e.name for e in all_disabling)
1015
1016
  log.print(
1016
- "Permanently read-disabling eFuse%s %s"
1017
- % ("s" if len(all_disabling) > 1 else "", names)
1017
+ f"Permanently read-disabling eFuse"
1018
+ f"{'s' if len(all_disabling) > 1 else ''} {names}"
1018
1019
  )
1019
1020
  efuse.disable_read()
1020
1021
 
@@ -1055,8 +1056,8 @@ class BaseCommands:
1055
1056
  ]
1056
1057
  names = ", ".join(e.name for e in all_disabling)
1057
1058
  log.print(
1058
- "Permanently write-disabling eFuse%s %s"
1059
- % ("s" if len(all_disabling) > 1 else "", names)
1059
+ f"Permanently write-disabling eFuse"
1060
+ f"{'s' if len(all_disabling) > 1 else ''} {names}"
1060
1061
  )
1061
1062
  efuse.disable_write()
1062
1063
 
@@ -1166,11 +1167,10 @@ class BaseCommands:
1166
1167
  )
1167
1168
  data_block.reverse()
1168
1169
  log.print(
1169
- "bit_number: "
1170
- "[%-03d]........................................................[0]"
1171
- % (data_block.len - 1)
1170
+ f"bit_number: [{data_block.len - 1:03d}]"
1171
+ f"........................................................[0]"
1172
1172
  )
1173
- log.print("BLOCK%-2d :" % block_obj.id, data_block)
1173
+ log.print(f"BLOCK{block_obj.id:>2d} :", data_block)
1174
1174
  block_obj.print_block(data_block, "regs_to_write", debug=True)
1175
1175
  block_obj.save(data_block.bytes[::-1])
1176
1176
 
@@ -180,7 +180,7 @@ class CSVFuseTable(list):
180
180
  print_error(p, n, state)
181
181
 
182
182
 
183
- class FuseDefinition(object):
183
+ class FuseDefinition:
184
184
  def __init__(self):
185
185
  self.field_name = ""
186
186
  self.group = ""
@@ -261,11 +261,9 @@ class FuseDefinition(object):
261
261
 
262
262
  class InputError(RuntimeError):
263
263
  def __init__(self, e):
264
- super(InputError, self).__init__(e)
264
+ super().__init__(e)
265
265
 
266
266
 
267
267
  class ValidationError(InputError):
268
268
  def __init__(self, p, message):
269
- super(ValidationError, self).__init__(
270
- f"Entry {p.field_name} invalid: {message}"
271
- )
269
+ super().__init__(f"Entry {p.field_name} invalid: {message}")
@@ -10,7 +10,7 @@ from bitstring import BitStream
10
10
  from esptool.logger import log
11
11
 
12
12
 
13
- class EmulateEfuseControllerBase(object):
13
+ class EmulateEfuseControllerBase:
14
14
  """The class for virtual efuse operations. Using for HOST_TEST."""
15
15
 
16
16
  CHIP_NAME = ""
@@ -19,6 +19,7 @@ class EmulateEfuseControllerBase(object):
19
19
  Blocks = None
20
20
  Fields = None
21
21
  REGS = None
22
+ USB_JTAG_SERIAL_PID = 0x1001
22
23
 
23
24
  def __init__(self, efuse_file=None, debug=False):
24
25
  self.debug = debug
@@ -76,6 +77,9 @@ class EmulateEfuseControllerBase(object):
76
77
  blk = self.Blocks.get(self.Blocks.BLOCKS[block])
77
78
  self.write_reg(blk.wr_addr + (4 * n), value)
78
79
 
80
+ def _get_pid(self):
81
+ return -1
82
+
79
83
  """ << esptool method end """
80
84
 
81
85
  def handle_writing_event(self, addr, value):
@@ -22,7 +22,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
22
22
  self.Blocks = EfuseDefineBlocks
23
23
  self.Fields = EfuseDefineFields(None)
24
24
  self.REGS = EfuseDefineRegisters
25
- super(EmulateEfuseController, self).__init__(efuse_file, debug)
25
+ super().__init__(efuse_file, debug)
26
26
 
27
27
  """ esptool method start >> """
28
28
 
@@ -39,7 +39,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
39
39
  if addr == self.REGS.APB_CTL_DATE_ADDR:
40
40
  return self.REGS.APB_CTL_DATE_V << self.REGS.APB_CTL_DATE_S
41
41
  else:
42
- return super(EmulateEfuseController, self).read_reg(addr)
42
+ return super().read_reg(addr)
43
43
 
44
44
  """ << esptool method end """
45
45
 
@@ -27,7 +27,7 @@ class EfuseBlock(base_fields.EfuseBlockBase):
27
27
  else:
28
28
  if parent.coding_scheme is None:
29
29
  parent.read_coding_scheme()
30
- super(EfuseBlock, self).__init__(parent, param, skip_read=skip_read)
30
+ super().__init__(parent, param, skip_read=skip_read)
31
31
 
32
32
  def apply_coding_scheme(self):
33
33
  data = self.get_raw(from_read=False)[::-1]
@@ -82,8 +82,7 @@ class EspEfuses(base_fields.EspEfusesBase):
82
82
  self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
83
83
  if esp.CHIP_NAME != "ESP32":
84
84
  raise esptool.FatalError(
85
- "Expected the 'esp' param for ESP32 chip but got for '%s'."
86
- % (esp.CHIP_NAME)
85
+ f"Expected the 'esp' param for ESP32 chip but got for '{esp.CHIP_NAME}'."
87
86
  )
88
87
  self.blocks = [
89
88
  EfuseBlock(self, self.Blocks.get(block), skip_read=skip_connect)
@@ -115,7 +114,7 @@ class EspEfuses(base_fields.EspEfusesBase):
115
114
  ]
116
115
  else:
117
116
  raise esptool.FatalError(
118
- "The coding scheme (%d) - is not supported" % self.coding_scheme
117
+ f"The coding scheme ({self.coding_scheme}) - is not supported"
119
118
  )
120
119
  if self["MAC_VERSION"].get() == 1:
121
120
  self.efuses += [
@@ -297,13 +296,12 @@ class EfuseMacField(EfuseField):
297
296
  def get_and_check(raw_mac, stored_crc):
298
297
  computed_crc = EfuseMacField.calc_crc(raw_mac)
299
298
  if computed_crc == stored_crc:
300
- valid_msg = "(CRC 0x%02x OK)" % stored_crc
299
+ valid_msg = f"(CRC {stored_crc:#04x} OK)"
301
300
  else:
302
- valid_msg = "(CRC 0x%02x invalid - calculated 0x%02x)" % (
303
- stored_crc,
304
- computed_crc,
301
+ valid_msg = (
302
+ f"(CRC {stored_crc:#04x} invalid - calculated {computed_crc:#04x})"
305
303
  )
306
- return "%s %s" % (util.hexify(raw_mac, ":"), valid_msg)
304
+ return " ".join([util.hexify(raw_mac, ":"), valid_msg])
307
305
 
308
306
  @staticmethod
309
307
  def calc_crc(raw_mac):
@@ -356,7 +354,7 @@ class EfuseMacField(EfuseField):
356
354
 
357
355
  bitarray_mac = self.convert_to_bitstring(new_value)
358
356
  print_field(self, bitarray_mac)
359
- super(EfuseMacField, self).save(new_value)
357
+ super().save(new_value)
360
358
 
361
359
  crc_val = self.calc_crc(new_value)
362
360
  crc_field = self.parent["CUSTOM_MAC_CRC"]
@@ -389,7 +387,7 @@ class EfuseWafer(EfuseField):
389
387
  return revision
390
388
 
391
389
  def save(self, new_value):
392
- raise esptool.FatalError("Burning %s is not supported" % self.name)
390
+ raise esptool.FatalError(f"Burning {self.name} is not supported")
393
391
 
394
392
 
395
393
  class EfusePkg(EfuseField):
@@ -107,7 +107,7 @@ class EfuseDefineFields(EfuseFieldsBase):
107
107
  file_name = file_name + ".yaml"
108
108
  dir_name, _ = os.path.split(dir_name)
109
109
  efuse_file = os.path.join(dir_name, "efuse_defs", file_name)
110
- with open(f"{efuse_file}", "r") as r_file:
110
+ with open(f"{efuse_file}") as r_file:
111
111
  e_desc = yaml.safe_load(r_file)
112
112
  super().__init__(e_desc, extend_efuse_table)
113
113
 
@@ -295,8 +295,9 @@ class ESP32Commands(BaseCommands):
295
295
  if chip_revision < 300:
296
296
  raise esptool.FatalError(
297
297
  "Incorrect chip revision for Secure boot v2. "
298
- "Detected: v%d.%d. Expected: >= v3.0"
299
- % (chip_revision / 100, chip_revision % 100)
298
+ "Detected: v{}.{}. Expected: >= v3.0".format(
299
+ chip_revision // 100, chip_revision % 100
300
+ )
300
301
  )
301
302
 
302
303
  digest = espsecure._digest_sbv2_public_key(keyfile)
@@ -23,7 +23,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
23
23
  self.Blocks = EfuseDefineBlocks
24
24
  self.Fields = EfuseDefineFields(None)
25
25
  self.REGS = EfuseDefineRegisters
26
- super(EmulateEfuseController, self).__init__(efuse_file, debug)
26
+ super().__init__(efuse_file, debug)
27
27
  self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
28
28
 
29
29
  """ esptool method start >>"""
@@ -29,7 +29,7 @@ class EfuseBlock(base_fields.EfuseBlockBase):
29
29
 
30
30
  def __init__(self, parent, param, skip_read=False):
31
31
  parent.read_coding_scheme()
32
- super(EfuseBlock, self).__init__(parent, param, skip_read=skip_read)
32
+ super().__init__(parent, param, skip_read=skip_read)
33
33
 
34
34
  def apply_coding_scheme(self):
35
35
  data = self.get_raw(from_read=False)[::-1]
@@ -72,8 +72,7 @@ class EspEfuses(base_fields.EspEfusesBase):
72
72
  self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
73
73
  if esp.CHIP_NAME != "ESP32-C2":
74
74
  raise esptool.FatalError(
75
- "Expected the 'esp' param for ESP32-C2 chip but got for '%s'."
76
- % (esp.CHIP_NAME)
75
+ f"Expected the 'esp' param for ESP32-C2 chip but got for '{esp.CHIP_NAME}'."
77
76
  )
78
77
  if not skip_connect:
79
78
  flags = self._esp.get_security_info()["flags"]
@@ -225,7 +224,7 @@ class EspEfuses(base_fields.EspEfusesBase):
225
224
  xtal_freq = self.get_crystal_freq()
226
225
  if xtal_freq not in [26, 40]:
227
226
  raise esptool.FatalError(
228
- "The eFuse supports only xtal=26M and 40M (xtal was %d)" % xtal_freq
227
+ f"The eFuse supports only xtal=26M and 40M (xtal was {xtal_freq})"
229
228
  )
230
229
 
231
230
  self.update_reg(self.REGS.EFUSE_DAC_CONF_REG, self.REGS.EFUSE_DAC_NUM_M, 0xFF)
@@ -259,7 +258,7 @@ class EspEfuses(base_fields.EspEfusesBase):
259
258
  ]
260
259
  block.err_bitarray.pos = 0
261
260
  for word in reversed(words):
262
- block.err_bitarray.overwrite(BitArray("uint:32=%d" % word))
261
+ block.err_bitarray.overwrite(BitArray(f"uint:32={word}"))
263
262
  block.num_errors = block.err_bitarray.count(True)
264
263
  block.fail = block.num_errors != 0
265
264
  else:
@@ -352,7 +351,7 @@ class EfuseMacField(EfuseField):
352
351
  mac = self.get_raw(from_read)[::-1]
353
352
  else:
354
353
  mac = self.get_raw(from_read)
355
- return f"{util.hexify(mac, ':')} {self.check()}"
354
+ return " ".join([util.hexify(mac, ":"), self.check()])
356
355
 
357
356
  def save(self, new_value):
358
357
  def print_field(e, new_value):
@@ -363,7 +362,7 @@ class EfuseMacField(EfuseField):
363
362
  if self.name == "CUSTOM_MAC":
364
363
  bitarray_mac = self.convert_to_bitstring(new_value)
365
364
  print_field(self, bitarray_mac)
366
- super(EfuseMacField, self).save(new_value)
365
+ super().save(new_value)
367
366
  else:
368
367
  raise esptool.FatalError("Writing Factory MAC address is not supported.")
369
368
 
@@ -105,7 +105,7 @@ class EfuseDefineFields(EfuseFieldsBase):
105
105
  file_name = file_name + ".yaml"
106
106
  dir_name, _ = os.path.split(dir_name)
107
107
  efuse_file = os.path.join(dir_name, "efuse_defs", file_name)
108
- with open(f"{efuse_file}", "r") as r_file:
108
+ with open(f"{efuse_file}") as r_file:
109
109
  e_desc = yaml.safe_load(r_file)
110
110
  super().__init__(e_desc, extend_efuse_table)
111
111
 
@@ -152,9 +152,10 @@ class ESP32C2Commands(BaseCommands):
152
152
  keypurpose_list
153
153
  ):
154
154
  raise esptool.FatalError(
155
- "The number of blocks (%d), datafile (%d) and "
156
- "keypurpose (%d) should be the same."
157
- % (len(block_name_list), len(datafile_list), len(keypurpose_list))
155
+ "The number of blocks ({}), datafile ({}) and "
156
+ "keypurpose ({}) should be the same.".format(
157
+ len(block_name_list), len(datafile_list), len(keypurpose_list)
158
+ )
158
159
  )
159
160
 
160
161
  assert 1 <= len(block_name_list) <= 2, "Unexpected case"
@@ -277,9 +278,10 @@ class ESP32C2Commands(BaseCommands):
277
278
  num_bytes = self.efuses["BLOCK_KEY0_HI_128"].bit_len // 8
278
279
  if len(digest) != num_bytes:
279
280
  raise esptool.FatalError(
280
- "Incorrect digest size %d. "
281
- "Digest must be %d bytes (%d bits) of raw binary key data."
282
- % (len(digest), num_bytes, num_bytes * 8)
281
+ "Incorrect digest size {}. "
282
+ "Digest must be {} bytes ({} bits) of raw binary key data.".format(
283
+ len(digest), num_bytes, num_bytes * 8
284
+ )
283
285
  )
284
286
  self.burn_key(
285
287
  ["BLOCK_KEY0"],
@@ -21,7 +21,7 @@ class EmulateEfuseController(EmulateEfuseControllerBase):
21
21
  self.Blocks = EfuseDefineBlocks
22
22
  self.Fields = EfuseDefineFields(None)
23
23
  self.REGS = EfuseDefineRegisters
24
- super(EmulateEfuseController, self).__init__(efuse_file, debug)
24
+ super().__init__(efuse_file, debug)
25
25
  self.write_reg(self.REGS.EFUSE_CMD_REG, 0)
26
26
 
27
27
  """ esptool method start >>"""
@@ -29,7 +29,7 @@ class EfuseBlock(base_fields.EfuseBlockBase):
29
29
 
30
30
  def __init__(self, parent, param, skip_read=False):
31
31
  parent.read_coding_scheme()
32
- super(EfuseBlock, self).__init__(parent, param, skip_read=skip_read)
32
+ super().__init__(parent, param, skip_read=skip_read)
33
33
 
34
34
  def apply_coding_scheme(self):
35
35
  data = self.get_raw(from_read=False)[::-1]
@@ -72,8 +72,7 @@ class EspEfuses(base_fields.EspEfusesBase):
72
72
  self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
73
73
  if esp.CHIP_NAME != "ESP32-C3":
74
74
  raise esptool.FatalError(
75
- "Expected the 'esp' param for ESP32-C3 chip but got for '%s'."
76
- % (esp.CHIP_NAME)
75
+ f"Expected the 'esp' param for ESP32-C3 chip but got for '{esp.CHIP_NAME}'."
77
76
  )
78
77
  if not skip_connect:
79
78
  flags = self._esp.get_security_info()["flags"]
@@ -368,7 +367,7 @@ class EfuseMacField(EfuseField):
368
367
  mac = self.get_raw(from_read)[::-1]
369
368
  else:
370
369
  mac = self.get_raw(from_read)
371
- return "%s %s" % (util.hexify(mac, ":"), self.check())
370
+ return " ".join([util.hexify(mac, ":"), self.check()])
372
371
 
373
372
  def save(self, new_value):
374
373
  def print_field(e, new_value):
@@ -379,7 +378,7 @@ class EfuseMacField(EfuseField):
379
378
  if self.name == "CUSTOM_MAC":
380
379
  bitarray_mac = self.convert_to_bitstring(new_value)
381
380
  print_field(self, bitarray_mac)
382
- super(EfuseMacField, self).save(new_value)
381
+ super().save(new_value)
383
382
  else:
384
383
  # Writing the BLOCK1 (MAC_SPI_8M_0) default MAC is not possible,
385
384
  # as it's written in the factory.
@@ -446,4 +445,4 @@ class EfuseKeyPurposeField(EfuseField):
446
445
  if self.name == "KEY_PURPOSE_5" and str_new_value.startswith("XTS_AES"):
447
446
  # see SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK in esp-idf
448
447
  raise esptool.FatalError(f"{self.name} can not have {str_new_value} key due to a hardware bug (please see TRM for more details)")
449
- return super(EfuseKeyPurposeField, self).save(raw_val)
448
+ return super().save(raw_val)
@@ -139,7 +139,7 @@ class EfuseDefineFields(EfuseFieldsBase):
139
139
  file_name = file_name + ".yaml"
140
140
  dir_name, _ = os.path.split(dir_name)
141
141
  efuse_file = os.path.join(dir_name, "efuse_defs", file_name)
142
- with open(f"{efuse_file}", "r") as r_file:
142
+ with open(f"{efuse_file}") as r_file:
143
143
  e_desc = yaml.safe_load(r_file)
144
144
  super().__init__(e_desc, extend_efuse_table)
145
145
 
@@ -293,8 +293,10 @@ class ESP32C3Commands(BaseCommands):
293
293
  digest = espsecure._digest_sbv2_public_key(datafile)
294
294
  if len(digest) != num_bytes:
295
295
  raise esptool.FatalError(
296
- "Incorrect digest size %d. Digest must be %d bytes (%d bits) "
297
- "of raw binary key data." % (len(digest), num_bytes, num_bytes * 8)
296
+ "Incorrect digest size {}. Digest must be {} bytes ({} bits) "
297
+ "of raw binary key data.".format(
298
+ len(digest), num_bytes, num_bytes * 8
299
+ )
298
300
  )
299
301
  digest_list.append(digest)
300
302