You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import urllib.request
|
|
import re
|
|
import base64
|
|
import zlib
|
|
import json
|
|
|
|
ESPTOOL_URL = "https://raw.githubusercontent.com/espressif/esptool/master/esptool/stub_flasher.py"
|
|
STUB_HEADERS = {
|
|
"esp8266": "ESP8266ROM.STUB_CODE",
|
|
"esp32": "ESP32ROM.STUB_CODE",
|
|
"esp32s2": "ESP32S2ROM.STUB_CODE",
|
|
"esp32s3": "ESP32S3ROM.STUB_CODE",
|
|
"esp32c3": "ESP32C3ROM.STUB_CODE",
|
|
"esp32h2": "ESP32H2BETA2ROM.STUB_CODE",
|
|
"esp32c2": "ESP32C2ROM.STUB_CODE",
|
|
}
|
|
STUB_REGEX = ' = eval\(zlib.decompress\(base64\.b64decode\((.*?)\)\)\)'
|
|
|
|
print("Downloading esptool.py from GitHub...")
|
|
with urllib.request.urlopen(ESPTOOL_URL) as f:
|
|
esptool_code = f.read().decode('utf-8')
|
|
|
|
print("Extracting Stubs from esptool.py...")
|
|
stubs = {}
|
|
for key, header in STUB_HEADERS.items():
|
|
match = re.search(header + STUB_REGEX, esptool_code, flags=(re.MULTILINE + re.DOTALL))
|
|
if match:
|
|
print(f"Found {key}!")
|
|
stubs[key] = eval(match.group(1))
|
|
|
|
print("Converting Stubs to JSON...")
|
|
for key, stub in stubs.items():
|
|
code = eval(zlib.decompress(base64.b64decode(stub)))
|
|
print("\nProcessing " + key)
|
|
print("Text size:", str(len(code["text"])) + " bytes")
|
|
print("Data size:", str(len(code["data"])) + " bytes")
|
|
|
|
print(code["text"])
|
|
print(base64.b64encode(code["text"]))
|
|
code["text"] = base64.b64encode(code["text"]).decode("utf-8")
|
|
code["data"] = base64.b64encode(code["data"]).decode("utf-8")
|
|
|
|
jsondata = json.dumps(code)
|
|
|
|
f = open("../src/stubs/" + key + ".json", "w+")
|
|
f.write(jsondata)
|
|
f.close()
|