Initial multiplatform support

pull/8/head
Mark Qvist 2022-01-10 02:41:09 +01:00
parent aca00b9884
commit bdde350b5b
2 changed files with 43 additions and 15 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
firmware/*.hex firmware/*.hex
firmware/*.key* firmware/*.key*
firmware/*.counter firmware/*.counter
firmware/*_latest*
firmware/device_db firmware/device_db
update/*.hex update/*.hex
update/*.zip update/*.zip

View File

@ -947,6 +947,7 @@ def main():
print("provisioned, so make that you are satisfied with your choices.\n") print("provisioned, so make that you are satisfied with your choices.\n")
fw_filename = models[selected_model][4] fw_filename = models[selected_model][4]
print("Serial port : "+str(selected_port.device))
print("Device type : "+str(products[selected_product])+" "+str(models[selected_model][3])) print("Device type : "+str(products[selected_product])+" "+str(models[selected_model][3]))
print("Platform : "+str(platforms[selected_platform])) print("Platform : "+str(platforms[selected_platform]))
print("Device MCU : "+str(mcus[selected_mcu])) print("Device MCU : "+str(mcus[selected_mcu]))
@ -962,16 +963,26 @@ def main():
exit() exit()
args.key = True args.key = True
args.port = selected_port args.port = selected_port.device
args.platform = selected_platform args.platform = selected_platform
args.hwrev = 0 args.hwrev = 1
mapped_model = selected_model mapped_model = selected_model
mapped_product = selected_product mapped_product = selected_product
args.update = False args.update = False
args.flash = True args.flash = True
print("\nDone") # TODO: Download firmware file from github here
exit() try:
RNS.log("Downloading latest frimware from GitHub...")
os.makedirs("./update", exist_ok=True)
urlretrieve(firmware_update_url+fw_filename, "update/"+fw_filename)
RNS.log("Firmware download completed")
except Exception as e:
RNS.log("Could not download firmware package")
RNS.log("The contained exception was: "+str(e))
exit()
rnode.disconnect()
if args.public: if args.public:
private_bytes = None private_bytes = None
@ -1021,8 +1032,9 @@ def main():
os.makedirs("./firmware", exist_ok=True) os.makedirs("./firmware", exist_ok=True)
if os.path.isdir("./firmware"): if os.path.isdir("./firmware"):
if os.path.isfile("./firmware/signing.key"): if os.path.isfile("./firmware/signing.key"):
RNS.log("Signing key already exists, not overwriting!") if not args.autoinstall:
RNS.log("Manually delete this key to create a new one.") RNS.log("Signing key already exists, not overwriting!")
RNS.log("Manually delete this key to create a new one.")
else: else:
file = open("./firmware/signing.key", "wb") file = open("./firmware/signing.key", "wb")
file.write(private_bytes) file.write(private_bytes)
@ -1034,7 +1046,8 @@ def main():
else: else:
RNS.log("The firmware directory does not exist, can't write key!") RNS.log("The firmware directory does not exist, can't write key!")
exit() if not args.autoinstall:
exit()
def get_flasher_call(platform, fw_filename): def get_flasher_call(platform, fw_filename):
from shutil import which from shutil import which
@ -1069,12 +1082,6 @@ def main():
elif platform == ROM.PLATFORM_ESP32: elif platform == ROM.PLATFORM_ESP32:
flasher = "./update/esptool.py" flasher = "./update/esptool.py"
if which(flasher) is not None: if which(flasher) is not None:
# esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB
# 0xe000 /home/markqvist/.arduino15/packages/esp32/hardware/esp32/2.0.2/tools/partitions/boot_app0.bin
# 0x1000 /tmp/arduino-sketch-0E260F46C421A84A7CBAD48E859C8E64/RNode_Firmware.ino.bootloader.bin
# 0x10000 /tmp/arduino-sketch-0E260F46C421A84A7CBAD48E859C8E64/RNode_Firmware.ino.bin
# 0x8000 /tmp/arduino-sketch-0E260F46C421A84A7CBAD48E859C8E64/RNode_Firmware.ino.partitions.bin
#
return [ return [
flasher, flasher,
"--chip", "esp32", "--chip", "esp32",
@ -1104,14 +1111,32 @@ def main():
if args.port: if args.port:
if args.flash: if args.flash:
if os.path.isfile("./firmware/"+fw_filename): from subprocess import call
if args.autoinstall:
fw_src = "./update/"
else:
fw_src = "./firmware/"
if os.path.isfile(fw_src+fw_filename):
try: try:
if fw_filename.endswith(".zip"):
RNS.log("Extracting firmware...")
unzip_status = call(get_flasher_call("unzip", fw_filename))
if unzip_status == 0:
RNS.log("Firmware extracted")
else:
RNS.log("Could not extract firmware from downloaded zip file")
exit()
RNS.log("Flashing RNode firmware to device on "+args.port) RNS.log("Flashing RNode firmware to device on "+args.port)
from subprocess import call from subprocess import call
flash_status = call(get_flasher_call()) flash_status = call(get_flasher_call(args.platform, fw_filename))
if flash_status == 0: if flash_status == 0:
RNS.log("Done flashing") RNS.log("Done flashing")
args.rom = True args.rom = True
if args.platform == ROM.PLATFORM_ESP32:
RNS.log("Waiting for ESP32 reset...")
time.sleep(5)
else: else:
exit() exit()
@ -1462,6 +1487,8 @@ def main():
if rnode.provisioned: if rnode.provisioned:
RNS.log("EEPROM Bootstrapping successful!") RNS.log("EEPROM Bootstrapping successful!")
rnode.hard_reset() rnode.hard_reset()
if args.autoinstall:
RNS.log("RNode Firmware autoinstallation complete!")
try: try:
os.makedirs("./firmware/device_db/", exist_ok=True) os.makedirs("./firmware/device_db/", exist_ok=True)
file = open("./firmware/device_db/"+serial_bytes.hex(), "wb") file = open("./firmware/device_db/"+serial_bytes.hex(), "wb")