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.
Adafruit_WebSerial_ESPTool/script/stubgen.py

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()