esptool 5.3.dev2__tar.gz → 5.3.1__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.
- {esptool-5.3.dev2/esptool.egg-info → esptool-5.3.1}/PKG-INFO +6 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/README.md +4 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esp_rfc2217_server/__init__.py +150 -149
- {esptool-5.3.dev2 → esptool-5.3.1}/esp_rfc2217_server/__main__.py +9 -9
- {esptool-5.3.dev2 → esptool-5.3.1}/esp_rfc2217_server/esp_port_manager.py +102 -101
- {esptool-5.3.dev2 → esptool-5.3.1}/esp_rfc2217_server.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/__init__.py +6 -7
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/cli_util.py +4 -5
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/base_fields.py +4 -8
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/base_operations.py +8 -7
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/emulate_efuse_controller_base.py +2 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32/fields.py +2 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c2/emulate_efuse_controller.py +3 -5
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c2/fields.py +2 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c2/operations.py +3 -2
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c3/fields.py +2 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c5/fields.py +2 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c5/operations.py +3 -2
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c6/operations.py +4 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c61/fields.py +3 -8
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c61/operations.py +4 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32e22/fields.py +2 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h2/fields.py +3 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h2/operations.py +4 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h21/fields.py +3 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h21/operations.py +4 -12
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h4/fields.py +3 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h4/operations.py +4 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32p4/fields.py +3 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32p4/operations.py +4 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s2/fields.py +3 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s3/fields.py +3 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s31/emulate_efuse_controller.py +4 -7
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s31/fields.py +29 -23
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s31/operations.py +4 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/mem_definition_base.py +2 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/util.py +19 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32c5.yaml +35 -34
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32h21.yaml +76 -86
- esptool-5.3.1/espefuse/efuse_defs/esp32s31.yaml +138 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_interface.py +5 -6
- {esptool-5.3.dev2 → esptool-5.3.1}/espsecure/__init__.py +4 -6
- {esptool-5.3.dev2 → esptool-5.3.1}/espsecure/esp_hsm_sign/__init__.py +3 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espsecure/esp_hsm_sign/exceptions.py +1 -2
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/__init__.py +201 -45
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/bin_image.py +8 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/cli_util.py +5 -5
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/cmds.py +563 -23
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/loader.py +323 -66
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/logger.py +29 -27
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/reset.py +52 -14
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/__init__.py +1 -2
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32.py +7 -7
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32c3.py +3 -22
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32c5.py +2 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32c6.py +1 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32c61.py +1 -20
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32e22.py +1 -12
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32h2.py +1 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32h21.py +21 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32h4.py +2 -5
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32p4.py +3 -35
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32s2.py +1 -12
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32s3.py +3 -22
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32s31.py +46 -28
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/2/README.md +1 -1
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32c2.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32c3.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32c5.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32c6.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32c61.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32h2.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32h4.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32p4-rev1.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32p4.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32s2.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32s3.json +30 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp32s31.json +8 -0
- esptool-5.3.1/esptool/targets/stub_flasher/2/esp8266.json +8 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/util.py +30 -1
- {esptool-5.3.dev2 → esptool-5.3.1/esptool.egg-info}/PKG-INFO +6 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool.egg-info/SOURCES.txt +1 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool.egg-info/requires.txt +3 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/pyproject.toml +6 -2
- {esptool-5.3.dev2 → esptool-5.3.1}/setup.py +1 -0
- esptool-5.3.dev2/espefuse/efuse_defs/esp32s31.yaml +0 -122
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32c2.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32c3.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32c5.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32c6.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32c61.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32h2.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32h4.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32p4-rev1.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32p4.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32s2.json +0 -8
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp32s3.json +0 -29
- esptool-5.3.dev2/esptool/targets/stub_flasher/2/esp8266.json +0 -8
- {esptool-5.3.dev2 → esptool-5.3.1}/LICENSE +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/MANIFEST.in +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esp_rfc2217_server/redirector.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/__main__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/csv_table_parser.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32/operations.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c2/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c2/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c3/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c3/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c3/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c3/operations.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c5/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c5/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c5/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c6/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c6/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c6/fields.py +4 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c6/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c61/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c61/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32c61/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32e22/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32e22/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32e22/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32e22/operations.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h2/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h2/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h2/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h21/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h21/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h21/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h4/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h4/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32h4/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32p4/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32p4/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32p4/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s2/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s2/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s2/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s2/operations.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s3/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s3/emulate_efuse_controller.py +3 -3
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s3/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s3/operations.py +4 -4
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s31/__init__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse/esp32s31/mem_definition.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32c2.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32c3.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32c6.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32c61.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32e22.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32h2.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32h2_v0.0_v1.1.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32h4.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32p4.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32p4_v3.0.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32s2.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse/efuse_defs/esp32s3.yaml +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espefuse.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espsecure/__main__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/espsecure.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/__main__.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/config.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp32c2.py +1 -1
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/esp8266.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/README.md +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32c2.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32c3.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32c5.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32c6.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32h2.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32p4-rev1.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32s2.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp32s3.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/1/esp8266.json +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/2/LICENSE-APACHE +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/targets/stub_flasher/2/LICENSE-MIT +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool/uf2_writer.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool.egg-info/dependency_links.txt +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool.egg-info/entry_points.txt +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool.egg-info/top_level.txt +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/esptool.py +0 -0
- {esptool-5.3.dev2 → esptool-5.3.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: esptool
|
|
3
|
-
Version: 5.3.
|
|
3
|
+
Version: 5.3.1
|
|
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+
|
|
@@ -28,6 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: bitstring!=4.2.0,>=3.1.6
|
|
30
30
|
Requires-Dist: cryptography>=43.0.0
|
|
31
|
+
Requires-Dist: cryptography<49.0.0; platform_system == "Darwin" and platform_machine == "x86_64"
|
|
31
32
|
Requires-Dist: pyserial>=3.3
|
|
32
33
|
Requires-Dist: reedsolo<1.8,>=1.5.3
|
|
33
34
|
Requires-Dist: PyYAML>=5.1
|
|
@@ -60,6 +61,10 @@ A Python-based, open-source, platform-independent serial utility for flashing, p
|
|
|
60
61
|
|
|
61
62
|
Visit the [documentation](https://docs.espressif.com/projects/esptool/) or run `esptool -h`.
|
|
62
63
|
|
|
64
|
+
## Flasher Stub
|
|
65
|
+
|
|
66
|
+
esptool uploads a small [flasher stub](https://docs.espressif.com/projects/esptool/en/latest/esptool/flasher-stub.html) program to the chip to improve flashing performance and work around ROM bootloader limitations. The stub is developed in the [esp-flasher-stub](https://github.com/espressif/esp-flasher-stub) repository. Prebuilt binaries are bundled with esptool releases.
|
|
67
|
+
|
|
63
68
|
## Contribute
|
|
64
69
|
|
|
65
70
|
If you're interested in contributing to esptool, please check the [contributions guide](https://docs.espressif.com/projects/esptool/en/latest/contributing.html).
|
|
@@ -9,6 +9,10 @@ A Python-based, open-source, platform-independent serial utility for flashing, p
|
|
|
9
9
|
|
|
10
10
|
Visit the [documentation](https://docs.espressif.com/projects/esptool/) or run `esptool -h`.
|
|
11
11
|
|
|
12
|
+
## Flasher Stub
|
|
13
|
+
|
|
14
|
+
esptool uploads a small [flasher stub](https://docs.espressif.com/projects/esptool/en/latest/esptool/flasher-stub.html) program to the chip to improve flashing performance and work around ROM bootloader limitations. The stub is developed in the [esp-flasher-stub](https://github.com/espressif/esp-flasher-stub) repository. Prebuilt binaries are bundled with esptool releases.
|
|
15
|
+
|
|
12
16
|
## Contribute
|
|
13
17
|
|
|
14
18
|
If you're interested in contributing to esptool, please check the [contributions guide](https://docs.espressif.com/projects/esptool/en/latest/contributing.html).
|
|
@@ -1,149 +1,150 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2009-2015 Chris Liechti
|
|
2
|
-
# SPDX-FileContributor: 2020-2024 Espressif Systems (Shanghai) CO LTD
|
|
3
|
-
# SPDX-License-Identifier: BSD-3-Clause
|
|
4
|
-
#
|
|
5
|
-
# Redirect data from a TCP/IP connection to a serial port and vice versa using RFC 2217.
|
|
6
|
-
|
|
7
|
-
###################################################################################
|
|
8
|
-
# redirect data from a TCP/IP connection to a serial port and vice versa
|
|
9
|
-
# using RFC 2217
|
|
10
|
-
#
|
|
11
|
-
# (C) 2009-2015 Chris Liechti <cliechti@gmx.net>
|
|
12
|
-
#
|
|
13
|
-
# SPDX-License-Identifier: BSD-3-Clause
|
|
14
|
-
|
|
15
|
-
import logging
|
|
16
|
-
import socket
|
|
17
|
-
import sys
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
from
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
logging.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
ser
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
ser.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
srv.
|
|
92
|
-
srv.
|
|
93
|
-
srv.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
#
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
ser.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
ser.
|
|
136
|
-
|
|
137
|
-
#
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
1
|
+
# SPDX-FileCopyrightText: 2009-2015 Chris Liechti
|
|
2
|
+
# SPDX-FileContributor: 2020-2024 Espressif Systems (Shanghai) CO LTD
|
|
3
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
4
|
+
#
|
|
5
|
+
# Redirect data from a TCP/IP connection to a serial port and vice versa using RFC 2217.
|
|
6
|
+
|
|
7
|
+
###################################################################################
|
|
8
|
+
# redirect data from a TCP/IP connection to a serial port and vice versa
|
|
9
|
+
# using RFC 2217
|
|
10
|
+
#
|
|
11
|
+
# (C) 2009-2015 Chris Liechti <cliechti@gmx.net>
|
|
12
|
+
#
|
|
13
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
14
|
+
|
|
15
|
+
import logging
|
|
16
|
+
import socket
|
|
17
|
+
import sys
|
|
18
|
+
|
|
19
|
+
import serial
|
|
20
|
+
|
|
21
|
+
from esp_rfc2217_server.redirector import Redirector
|
|
22
|
+
from esptool.util import check_deprecated_py_suffix
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def main():
|
|
26
|
+
check_deprecated_py_suffix("esp_rfc2217_server")
|
|
27
|
+
import argparse
|
|
28
|
+
|
|
29
|
+
parser = argparse.ArgumentParser(
|
|
30
|
+
description="RFC 2217 Serial to Network (TCP/IP) redirector.",
|
|
31
|
+
epilog="NOTE: no security measures are implemented. "
|
|
32
|
+
"Anyone can remotely connect to this service over the network.\n"
|
|
33
|
+
"Only one connection at once is supported. "
|
|
34
|
+
"When the connection is terminated it waits for the next connect.",
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
parser.add_argument("SERIALPORT")
|
|
38
|
+
|
|
39
|
+
parser.add_argument(
|
|
40
|
+
"-p",
|
|
41
|
+
"--localport",
|
|
42
|
+
type=int,
|
|
43
|
+
help="local TCP port, default: %(default)s",
|
|
44
|
+
metavar="TCPPORT",
|
|
45
|
+
default=2217,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
parser.add_argument(
|
|
49
|
+
"-v",
|
|
50
|
+
"--verbose",
|
|
51
|
+
dest="verbosity",
|
|
52
|
+
action="count",
|
|
53
|
+
help="print more diagnostic messages (option can be given multiple times)",
|
|
54
|
+
default=0,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
parser.add_argument(
|
|
58
|
+
"--r0",
|
|
59
|
+
help="Use delays necessary for ESP32 revision 0 chips",
|
|
60
|
+
action="store_true",
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
args = parser.parse_args()
|
|
64
|
+
|
|
65
|
+
if args.verbosity > 3:
|
|
66
|
+
args.verbosity = 3
|
|
67
|
+
level = (logging.WARNING, logging.INFO, logging.DEBUG, logging.NOTSET)[
|
|
68
|
+
args.verbosity
|
|
69
|
+
]
|
|
70
|
+
logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.INFO)
|
|
71
|
+
logging.getLogger("rfc2217").setLevel(level)
|
|
72
|
+
|
|
73
|
+
# connect to serial port
|
|
74
|
+
ser = serial.serial_for_url(args.SERIALPORT, do_not_open=True, exclusive=True)
|
|
75
|
+
ser.timeout = 3 # required so that the reader thread can exit
|
|
76
|
+
# reset control line as no _remote_ "terminal" has been connected yet
|
|
77
|
+
ser.dtr = False
|
|
78
|
+
ser.rts = False
|
|
79
|
+
|
|
80
|
+
logging.info("RFC 2217 TCP/IP to Serial redirector - type Ctrl-C / BREAK to quit")
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
ser.open()
|
|
84
|
+
except serial.SerialException as e:
|
|
85
|
+
logging.error(f"Could not open serial port {ser.name}: {e}")
|
|
86
|
+
sys.exit(1)
|
|
87
|
+
|
|
88
|
+
logging.info(f"Serving serial port: {ser.name}")
|
|
89
|
+
settings = ser.get_settings()
|
|
90
|
+
|
|
91
|
+
srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
92
|
+
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
93
|
+
srv.bind(("", args.localport))
|
|
94
|
+
srv.listen(1)
|
|
95
|
+
logging.info(f"TCP/IP port: {args.localport}")
|
|
96
|
+
|
|
97
|
+
try:
|
|
98
|
+
host_ip = socket.gethostbyname(socket.gethostname())
|
|
99
|
+
except OSError:
|
|
100
|
+
# CI/minimal containers often have no DNS for gethostname(); the server
|
|
101
|
+
# is still reachable on loopback.
|
|
102
|
+
host_ip = "127.0.0.1"
|
|
103
|
+
wait_msg = (
|
|
104
|
+
"Waiting for connection ... use the 'rfc2217://"
|
|
105
|
+
f"{host_ip}:{args.localport}?ign_set_control' as a PORT"
|
|
106
|
+
)
|
|
107
|
+
logging.info(wait_msg)
|
|
108
|
+
|
|
109
|
+
while True:
|
|
110
|
+
srv.settimeout(5)
|
|
111
|
+
client_socket = None
|
|
112
|
+
try:
|
|
113
|
+
while client_socket is None:
|
|
114
|
+
try:
|
|
115
|
+
client_socket, addr = srv.accept()
|
|
116
|
+
except TimeoutError:
|
|
117
|
+
print(".", end="", flush=True)
|
|
118
|
+
except KeyboardInterrupt:
|
|
119
|
+
print("") # resetting inline print
|
|
120
|
+
logging.info("Exited with keyboard interrupt")
|
|
121
|
+
break
|
|
122
|
+
try:
|
|
123
|
+
logging.info(f"Connected by {addr[0]}:{addr[1]}")
|
|
124
|
+
client_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
125
|
+
ser.rts = True
|
|
126
|
+
ser.dtr = True
|
|
127
|
+
# enter network <-> serial loop
|
|
128
|
+
r = Redirector(ser, client_socket, args.verbosity > 0, args.r0)
|
|
129
|
+
try:
|
|
130
|
+
r.shortcircuit()
|
|
131
|
+
finally:
|
|
132
|
+
logging.info("Disconnected")
|
|
133
|
+
r.stop()
|
|
134
|
+
client_socket.close()
|
|
135
|
+
ser.dtr = False
|
|
136
|
+
ser.rts = False
|
|
137
|
+
# Restore port settings (may have been changed by RFC 2217
|
|
138
|
+
# capable client)
|
|
139
|
+
ser.apply_settings(settings)
|
|
140
|
+
except KeyboardInterrupt:
|
|
141
|
+
print(flush=True)
|
|
142
|
+
break
|
|
143
|
+
except OSError as msg:
|
|
144
|
+
logging.error(str(msg))
|
|
145
|
+
|
|
146
|
+
logging.info("--- exit ---")
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
if __name__ == "__main__":
|
|
150
|
+
main()
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
-
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
-
#
|
|
4
|
-
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
-
|
|
6
|
-
import esp_rfc2217_server
|
|
7
|
-
|
|
8
|
-
if __name__ == "__main__":
|
|
9
|
-
esp_rfc2217_server.main()
|
|
1
|
+
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
+
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
|
|
6
|
+
import esp_rfc2217_server
|
|
7
|
+
|
|
8
|
+
if __name__ == "__main__":
|
|
9
|
+
esp_rfc2217_server.main()
|
|
@@ -1,101 +1,102 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
-
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
-
#
|
|
4
|
-
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
-
import os
|
|
6
|
-
import threading
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
cfg =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
self.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
self.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
reset_thread
|
|
52
|
-
reset_thread.
|
|
53
|
-
reset_thread.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
reset_thread
|
|
59
|
-
reset_thread.
|
|
60
|
-
reset_thread.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
1
|
+
# SPDX-FileCopyrightText: 2014-2024 Fredrik Ahlberg, Angus Gratton,
|
|
2
|
+
# Espressif Systems (Shanghai) CO LTD, other contributors as noted.
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
import os
|
|
6
|
+
import threading
|
|
7
|
+
|
|
8
|
+
import serial
|
|
9
|
+
import serial.rfc2217
|
|
10
|
+
from serial.rfc2217 import (
|
|
11
|
+
COM_PORT_OPTION,
|
|
12
|
+
SET_CONTROL,
|
|
13
|
+
SET_CONTROL_DTR_OFF,
|
|
14
|
+
SET_CONTROL_DTR_ON,
|
|
15
|
+
SET_CONTROL_RTS_OFF,
|
|
16
|
+
SET_CONTROL_RTS_ON,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from esptool.config import load_config_file
|
|
20
|
+
from esptool.reset import (
|
|
21
|
+
DEFAULT_RESET_DELAY,
|
|
22
|
+
ClassicReset,
|
|
23
|
+
CustomReset,
|
|
24
|
+
HardReset,
|
|
25
|
+
UnixTightReset,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
cfg, _ = load_config_file(verbose=True)
|
|
29
|
+
cfg = cfg["esptool"]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class EspPortManager(serial.rfc2217.PortManager):
|
|
33
|
+
"""
|
|
34
|
+
The beginning of the reset sequence is detected and the proper reset sequence
|
|
35
|
+
is applied in a thread. The rest of the reset sequence received is just ignored
|
|
36
|
+
and not sent to the serial port.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, serial_port, connection, esp32r0_delay, logger=None):
|
|
40
|
+
self.esp32r0_delay = esp32r0_delay
|
|
41
|
+
self.is_download_mode = False
|
|
42
|
+
super().__init__(serial_port, connection, logger)
|
|
43
|
+
|
|
44
|
+
def _telnet_process_subnegotiation(self, suboption):
|
|
45
|
+
if suboption[0:1] == COM_PORT_OPTION and suboption[1:2] == SET_CONTROL:
|
|
46
|
+
if suboption[2:3] == SET_CONTROL_DTR_OFF:
|
|
47
|
+
self.is_download_mode = False
|
|
48
|
+
self.serial.dtr = False
|
|
49
|
+
return
|
|
50
|
+
elif suboption[2:3] == SET_CONTROL_RTS_OFF and not self.is_download_mode:
|
|
51
|
+
reset_thread = threading.Thread(target=self._hard_reset_thread)
|
|
52
|
+
reset_thread.daemon = True
|
|
53
|
+
reset_thread.name = "hard_reset_thread"
|
|
54
|
+
reset_thread.start()
|
|
55
|
+
return
|
|
56
|
+
elif suboption[2:3] == SET_CONTROL_DTR_ON and not self.is_download_mode:
|
|
57
|
+
self.is_download_mode = True
|
|
58
|
+
reset_thread = threading.Thread(target=self._reset_thread)
|
|
59
|
+
reset_thread.daemon = True
|
|
60
|
+
reset_thread.name = "reset_thread"
|
|
61
|
+
reset_thread.start()
|
|
62
|
+
return
|
|
63
|
+
elif suboption[2:3] in [
|
|
64
|
+
SET_CONTROL_DTR_ON,
|
|
65
|
+
SET_CONTROL_RTS_ON,
|
|
66
|
+
SET_CONTROL_RTS_OFF,
|
|
67
|
+
]:
|
|
68
|
+
return
|
|
69
|
+
# only in cases not handled above do the original implementation in PortManager
|
|
70
|
+
super()._telnet_process_subnegotiation(suboption)
|
|
71
|
+
|
|
72
|
+
def _hard_reset_thread(self):
|
|
73
|
+
"""
|
|
74
|
+
The reset logic used for hard resetting the chip.
|
|
75
|
+
"""
|
|
76
|
+
if self.logger:
|
|
77
|
+
self.logger.info("Activating hard reset in thread")
|
|
78
|
+
cfg_custom_hard_reset_sequence = cfg.get("custom_hard_reset_sequence")
|
|
79
|
+
if cfg_custom_hard_reset_sequence is not None:
|
|
80
|
+
CustomReset(self.serial, cfg_custom_hard_reset_sequence)()
|
|
81
|
+
else:
|
|
82
|
+
HardReset(self.serial)()
|
|
83
|
+
|
|
84
|
+
def _reset_thread(self):
|
|
85
|
+
"""
|
|
86
|
+
The reset logic is used from esptool because the RTS and DTR signals
|
|
87
|
+
cannot be retransmitted through RFC 2217 with proper timing.
|
|
88
|
+
"""
|
|
89
|
+
if self.logger:
|
|
90
|
+
self.logger.info("Activating reset in thread")
|
|
91
|
+
|
|
92
|
+
delay = DEFAULT_RESET_DELAY
|
|
93
|
+
if self.esp32r0_delay:
|
|
94
|
+
delay += 0.5
|
|
95
|
+
|
|
96
|
+
cfg_custom_reset_sequence = cfg.get("custom_reset_sequence")
|
|
97
|
+
if cfg_custom_reset_sequence is not None:
|
|
98
|
+
CustomReset(self.serial, cfg_custom_reset_sequence)()
|
|
99
|
+
elif os.name != "nt":
|
|
100
|
+
UnixTightReset(self.serial, delay)()
|
|
101
|
+
else:
|
|
102
|
+
ClassicReset(self.serial, delay)()
|
|
File without changes
|
|
@@ -7,20 +7,19 @@ import sys
|
|
|
7
7
|
import rich_click as click
|
|
8
8
|
|
|
9
9
|
import esptool
|
|
10
|
-
from esptool.cli_util import BaudRateType, ChipType, ResetModeType, SerialPortType
|
|
11
|
-
from esptool.logger import log
|
|
12
|
-
|
|
13
10
|
from espefuse.cli_util import Group
|
|
14
11
|
from espefuse.efuse.base_operations import BaseCommands
|
|
15
12
|
from espefuse.efuse_interface import (
|
|
16
13
|
DEPRECATED_COMMANDS,
|
|
17
|
-
get_esp,
|
|
18
|
-
init_commands,
|
|
19
|
-
SUPPORTED_COMMANDS,
|
|
20
14
|
SUPPORTED_BURN_COMMANDS,
|
|
21
|
-
SUPPORTED_READ_COMMANDS,
|
|
22
15
|
SUPPORTED_CHIPS,
|
|
16
|
+
SUPPORTED_COMMANDS,
|
|
17
|
+
SUPPORTED_READ_COMMANDS,
|
|
18
|
+
get_esp,
|
|
19
|
+
init_commands,
|
|
23
20
|
)
|
|
21
|
+
from esptool.cli_util import BaudRateType, ChipType, ResetModeType, SerialPortType
|
|
22
|
+
from esptool.logger import log
|
|
24
23
|
from esptool.util import check_deprecated_py_suffix
|
|
25
24
|
|
|
26
25
|
__all__ = [
|
|
@@ -6,17 +6,16 @@ from typing import Any
|
|
|
6
6
|
|
|
7
7
|
import rich_click as click
|
|
8
8
|
from click.parser import OptionParser, ParsingState, _unpack_args
|
|
9
|
-
from esptool.cli_util import Group as EsptoolGroup
|
|
10
|
-
from esptool.logger import log
|
|
11
9
|
|
|
12
10
|
from espefuse.efuse_interface import (
|
|
13
11
|
DEPRECATED_COMMANDS,
|
|
14
|
-
init_commands,
|
|
15
12
|
SUPPORTED_BURN_COMMANDS,
|
|
16
|
-
SUPPORTED_READ_COMMANDS,
|
|
17
13
|
SUPPORTED_COMMANDS,
|
|
14
|
+
SUPPORTED_READ_COMMANDS,
|
|
15
|
+
init_commands,
|
|
18
16
|
)
|
|
19
|
-
|
|
17
|
+
from esptool.cli_util import Group as EsptoolGroup
|
|
18
|
+
from esptool.logger import log
|
|
20
19
|
|
|
21
20
|
click.rich_click.USE_CLICK_SHORT_HELP = True
|
|
22
21
|
click.rich_click.COMMAND_GROUPS = {
|