esptool 5.1.dev1__tar.gz → 5.2.dev2__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 (180) hide show
  1. {esptool-5.1.dev1/esptool.egg-info → esptool-5.2.dev2}/PKG-INFO +4 -3
  2. {esptool-5.1.dev1 → esptool-5.2.dev2}/README.md +1 -0
  3. {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/__init__.py +1 -1
  4. {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/esp_port_manager.py +2 -2
  5. {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/redirector.py +3 -4
  6. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/__init__.py +7 -6
  7. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/cli_util.py +1 -1
  8. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/base_fields.py +21 -16
  9. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/base_operations.py +25 -20
  10. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/csv_table_parser.py +3 -5
  11. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/emulate_efuse_controller_base.py +5 -1
  12. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/emulate_efuse_controller.py +2 -2
  13. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/fields.py +9 -11
  14. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/mem_definition.py +1 -1
  15. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/operations.py +3 -2
  16. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +1 -1
  17. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/fields.py +6 -7
  18. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/mem_definition.py +1 -1
  19. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/operations.py +8 -6
  20. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +1 -1
  21. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/fields.py +5 -6
  22. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/mem_definition.py +1 -1
  23. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/operations.py +4 -2
  24. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +1 -1
  25. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/fields.py +8 -16
  26. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/mem_definition.py +1 -1
  27. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +1 -1
  28. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/fields.py +8 -9
  29. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/mem_definition.py +1 -1
  30. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +1 -1
  31. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/fields.py +7 -8
  32. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/mem_definition.py +1 -1
  33. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/operations.py +4 -2
  34. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +1 -1
  35. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/fields.py +10 -11
  36. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/mem_definition.py +1 -1
  37. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/operations.py +4 -2
  38. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +1 -1
  39. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/fields.py +11 -12
  40. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/mem_definition.py +1 -1
  41. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +1 -1
  42. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/fields.py +11 -15
  43. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/mem_definition.py +1 -1
  44. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +2 -2
  45. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/fields.py +104 -13
  46. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/mem_definition.py +19 -2
  47. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +1 -1
  48. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/fields.py +9 -10
  49. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/mem_definition.py +1 -1
  50. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +1 -1
  51. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/fields.py +10 -11
  52. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/mem_definition.py +1 -1
  53. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/operations.py +4 -2
  54. esptool-5.2.dev2/espefuse/efuse/esp32s31/__init__.py +5 -0
  55. esptool-5.2.dev2/espefuse/efuse/esp32s31/emulate_efuse_controller.py +92 -0
  56. esptool-5.2.dev2/espefuse/efuse/esp32s31/fields.py +443 -0
  57. esptool-5.2.dev2/espefuse/efuse/esp32s31/mem_definition.py +158 -0
  58. esptool-5.2.dev2/espefuse/efuse/esp32s31/operations.py +297 -0
  59. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/mem_definition_base.py +3 -3
  60. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/util.py +3 -3
  61. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c2.yaml +5 -2
  62. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c5.yaml +46 -46
  63. esptool-5.2.dev2/espefuse/efuse_defs/esp32p4_v3.0.yaml +174 -0
  64. esptool-5.2.dev2/espefuse/efuse_defs/esp32s31.yaml +122 -0
  65. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_interface.py +16 -9
  66. {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/__init__.py +20 -15
  67. {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/esp_hsm_sign/__init__.py +5 -3
  68. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/__init__.py +10 -48
  69. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/bin_image.py +41 -32
  70. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/cli_util.py +153 -6
  71. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/cmds.py +54 -40
  72. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/loader.py +56 -64
  73. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/logger.py +3 -1
  74. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/reset.py +1 -1
  75. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/__init__.py +2 -0
  76. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32.py +8 -7
  77. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c2.py +37 -27
  78. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c3.py +10 -3
  79. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c5.py +22 -5
  80. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c6.py +23 -6
  81. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32c61.py +13 -4
  82. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32h4.py +0 -2
  83. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32p4.py +92 -7
  84. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32s2.py +0 -2
  85. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32s3.py +0 -2
  86. esptool-5.2.dev2/esptool/targets/esp32s31.py +221 -0
  87. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp8266.py +2 -2
  88. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/1/README.md +1 -1
  89. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32.json +8 -0
  90. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c2.json +8 -0
  91. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c3.json +8 -0
  92. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c5.json +8 -0
  93. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c6.json +8 -0
  94. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32c61.json +8 -0
  95. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32h2.json +8 -0
  96. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32p4.json +8 -0
  97. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32p4rc1.json +8 -0
  98. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32s2.json +8 -0
  99. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp32s3.json +8 -0
  100. esptool-5.2.dev2/esptool/targets/stub_flasher/1/esp8266.json +8 -0
  101. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/uf2_writer.py +1 -1
  102. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/util.py +24 -21
  103. {esptool-5.1.dev1 → esptool-5.2.dev2/esptool.egg-info}/PKG-INFO +4 -3
  104. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/SOURCES.txt +9 -0
  105. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/requires.txt +2 -2
  106. {esptool-5.1.dev1 → esptool-5.2.dev2}/pyproject.toml +8 -6
  107. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32.json +0 -8
  108. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c2.json +0 -8
  109. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c3.json +0 -8
  110. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c5.json +0 -8
  111. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c6.json +0 -8
  112. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32c61.json +0 -8
  113. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32h2.json +0 -8
  114. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32p4.json +0 -8
  115. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32s2.json +0 -8
  116. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp32s3.json +0 -8
  117. esptool-5.1.dev1/esptool/targets/stub_flasher/1/esp8266.json +0 -8
  118. {esptool-5.1.dev1 → esptool-5.2.dev2}/LICENSE +0 -0
  119. {esptool-5.1.dev1 → esptool-5.2.dev2}/MANIFEST.in +0 -0
  120. {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server/__main__.py +0 -0
  121. {esptool-5.1.dev1 → esptool-5.2.dev2}/esp_rfc2217_server.py +0 -0
  122. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/__main__.py +0 -0
  123. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/__init__.py +0 -0
  124. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32/__init__.py +0 -0
  125. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c2/__init__.py +0 -0
  126. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c3/__init__.py +0 -0
  127. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/__init__.py +0 -0
  128. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c5/operations.py +0 -0
  129. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/__init__.py +0 -0
  130. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c6/operations.py +0 -0
  131. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32c61/__init__.py +0 -0
  132. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h2/__init__.py +0 -0
  133. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/__init__.py +0 -0
  134. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h21/operations.py +0 -0
  135. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/__init__.py +0 -0
  136. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32h4/operations.py +0 -0
  137. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/__init__.py +0 -0
  138. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32p4/operations.py +0 -0
  139. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/__init__.py +0 -0
  140. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s2/operations.py +0 -0
  141. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse/esp32s3/__init__.py +0 -0
  142. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32.yaml +0 -0
  143. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c3.yaml +0 -0
  144. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c6.yaml +0 -0
  145. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32c61.yaml +0 -0
  146. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h2.yaml +0 -0
  147. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h21.yaml +0 -0
  148. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
  149. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32h4.yaml +0 -0
  150. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32p4.yaml +0 -0
  151. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32s2.yaml +0 -0
  152. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse/efuse_defs/esp32s3.yaml +0 -0
  153. {esptool-5.1.dev1 → esptool-5.2.dev2}/espefuse.py +0 -0
  154. {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/__main__.py +0 -0
  155. {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure/esp_hsm_sign/exceptions.py +0 -0
  156. {esptool-5.1.dev1 → esptool-5.2.dev2}/espsecure.py +0 -0
  157. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/__main__.py +0 -0
  158. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/config.py +0 -0
  159. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32h2.py +0 -0
  160. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/esp32h21.py +0 -0
  161. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
  162. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
  163. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/README.md +0 -0
  164. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32.json +0 -0
  165. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c2.json +0 -0
  166. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c3.json +0 -0
  167. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c5.json +0 -0
  168. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c6.json +0 -0
  169. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32c61.json +0 -0
  170. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32h2.json +0 -0
  171. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32p4.json +0 -0
  172. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32s2.json +0 -0
  173. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp32s3.json +0 -0
  174. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool/targets/stub_flasher/2/esp8266.json +0 -0
  175. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/dependency_links.txt +0 -0
  176. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/entry_points.txt +0 -0
  177. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.egg-info/top_level.txt +0 -0
  178. {esptool-5.1.dev1 → esptool-5.2.dev2}/esptool.py +0 -0
  179. {esptool-5.1.dev1 → esptool-5.2.dev2}/setup.cfg +0 -0
  180. {esptool-5.1.dev1 → esptool-5.2.dev2}/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.dev2
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<2
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
@@ -7,7 +7,7 @@ import sys
7
7
  import rich_click as click
8
8
 
9
9
  import esptool
10
- from esptool.cli_util import ChipType, ResetModeType
10
+ from esptool.cli_util import BaudRateType, ChipType, ResetModeType, SerialPortType
11
11
  from esptool.logger import log
12
12
 
13
13
  from espefuse.cli_util import Group
@@ -53,7 +53,7 @@ __all__ = [
53
53
  @click.option(
54
54
  "--baud",
55
55
  "-b",
56
- type=int,
56
+ type=BaudRateType(),
57
57
  default=esptool.ESPLoader.ESP_ROM_BAUD,
58
58
  envvar="ESPTOOL_BAUD",
59
59
  help="Serial port baud rate used when flashing/reading.",
@@ -62,7 +62,7 @@ __all__ = [
62
62
  "--port",
63
63
  "-p",
64
64
  envvar="ESPTOOL_PORT",
65
- type=click.Path(),
65
+ type=SerialPortType(),
66
66
  help="Serial port device.",
67
67
  )
68
68
  @click.option(
@@ -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
@@ -222,16 +223,21 @@ class BaseCommands:
222
223
  f"({self.CHIP_NAME} != {self.esp.CHIP_NAME})"
223
224
  )
224
225
 
226
+ @classmethod
227
+ def _close_port(
228
+ cls,
229
+ esp: esptool.ESPLoader | EmulateEfuseControllerBase | None,
230
+ external_esp: bool = False,
231
+ ) -> None:
232
+ """Close the serial port if it was opened internally."""
233
+ if esp is not None and not external_esp and isinstance(esp, esptool.ESPLoader):
234
+ esp._port.close()
235
+
225
236
  def __enter__(self):
226
237
  return self
227
238
 
228
239
  def __exit__(self, exc_type, exc_value, traceback):
229
- if (
230
- self.esp is not None
231
- and not self.external_esp
232
- and isinstance(self.esp, esptool.ESPLoader)
233
- ):
234
- self.esp._port.close()
240
+ self._close_port(self.esp, self.external_esp)
235
241
 
236
242
  ################################# CLI definitions #################################
237
243
 
@@ -850,9 +856,9 @@ class BaseCommands:
850
856
  for block in self.efuses.blocks:
851
857
  burn_list_a_block = [e for e in burn_efuses_list if e.block == block.id]
852
858
  if len(burn_list_a_block):
853
- log.print(" from BLOCK%d" % (block.id))
859
+ log.print(f" from BLOCK{block.id}")
854
860
  for field in burn_list_a_block:
855
- log.print(" - %s" % (field.name))
861
+ log.print(f" - {field.name}")
856
862
  if (
857
863
  self.efuses.blocks[field.block].get_coding_scheme()
858
864
  != self.efuses.REGS.CODING_SCHEME_NONE
@@ -990,7 +996,7 @@ class BaseCommands:
990
996
  ]
991
997
  if error:
992
998
  raise esptool.FatalError(
993
- "%s must be readable, stop this operation!" % efuse_name
999
+ f"{efuse_name} must be readable, stop this operation!"
994
1000
  )
995
1001
  else:
996
1002
  for block in self.efuses.Blocks.BLOCKS:
@@ -1000,8 +1006,8 @@ class BaseCommands:
1000
1006
  self.efuses[block.key_purpose].get()
1001
1007
  ):
1002
1008
  raise esptool.FatalError(
1003
- "%s must be readable, stop this operation!"
1004
- % efuse_name
1009
+ f"{efuse_name} must be readable, "
1010
+ f"stop this operation!"
1005
1011
  )
1006
1012
  break
1007
1013
  # make full list of which efuses will be disabled
@@ -1013,8 +1019,8 @@ class BaseCommands:
1013
1019
  ]
1014
1020
  names = ", ".join(e.name for e in all_disabling)
1015
1021
  log.print(
1016
- "Permanently read-disabling eFuse%s %s"
1017
- % ("s" if len(all_disabling) > 1 else "", names)
1022
+ f"Permanently read-disabling eFuse"
1023
+ f"{'s' if len(all_disabling) > 1 else ''} {names}"
1018
1024
  )
1019
1025
  efuse.disable_read()
1020
1026
 
@@ -1055,8 +1061,8 @@ class BaseCommands:
1055
1061
  ]
1056
1062
  names = ", ".join(e.name for e in all_disabling)
1057
1063
  log.print(
1058
- "Permanently write-disabling eFuse%s %s"
1059
- % ("s" if len(all_disabling) > 1 else "", names)
1064
+ f"Permanently write-disabling eFuse"
1065
+ f"{'s' if len(all_disabling) > 1 else ''} {names}"
1060
1066
  )
1061
1067
  efuse.disable_write()
1062
1068
 
@@ -1166,11 +1172,10 @@ class BaseCommands:
1166
1172
  )
1167
1173
  data_block.reverse()
1168
1174
  log.print(
1169
- "bit_number: "
1170
- "[%-03d]........................................................[0]"
1171
- % (data_block.len - 1)
1175
+ f"bit_number: [{data_block.len - 1:03d}]"
1176
+ f"........................................................[0]"
1172
1177
  )
1173
- log.print("BLOCK%-2d :" % block_obj.id, data_block)
1178
+ log.print(f"BLOCK{block_obj.id:>2d} :", data_block)
1174
1179
  block_obj.print_block(data_block, "regs_to_write", debug=True)
1175
1180
  block_obj.save(data_block.bytes[::-1])
1176
1181
 
@@ -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 >>"""