import os import shutil import gzip from datetime import date import sys def genOtaBin(path): arr = [] arr.append(1) arr.append(0) arr.append(0) arr.append(0) for x in range(24): arr.append(255) arr.append(154) arr.append(152) arr.append(67) arr.append(71) for x in range(4064): arr.append(255) arr.append(0) arr.append(0) arr.append(0) arr.append(0) for x in range(4092): arr.append(255) with open(path + "ota.bin", "wb") as f: f.write(bytearray(arr)) # write gzip firmware file def gzip_bin(bin_file, gzip_file): with open(bin_file,"rb") as fp: with gzip.open(gzip_file, "wb", compresslevel = 9) as f: shutil.copyfileobj(fp, f) def getVersion(path_define): f = open(path_define, "r") lines = f.readlines() f.close() today = date.today() search = ["_MAJOR", "_MINOR", "_PATCH"] version = today.strftime("%y%m%d") + "_ahoy_" versionnumber = "ahoy_v" for line in lines: if(line.find("VERSION_") != -1): for s in search: p = line.find(s) if(p != -1): version += line[p+13:].rstrip() + "." versionnumber += line[p+13:].rstrip() + "." return [version, versionnumber] def renameFw(path_define, env): version = getVersion(path_define)[0] os.mkdir("firmware/") fwDir = "" if env[:7] == "esp8266": fwDir = "ESP8266/" elif env[:7] == "esp8285": fwDir = "ESP8285/" elif env[:7] == "esp32-w": fwDir = "ESP32/" elif env[:8] == "esp32-s2": fwDir = "ESP32-S2/" elif env[:4] == "open": fwDir = "ESP32-S3/" elif env[:8] == "esp32-c3": fwDir = "ESP32-C3/" os.mkdir("firmware/" + fwDir) sha = os.getenv("SHA",default="sha") dst = "firmware/" + fwDir fname = version[:-1] + "_" + sha + "_" + env + ".bin" os.rename("src/.pio/build/" + env + "/firmware.bin", dst + fname) if env[:5] == "esp32": os.rename("src/.pio/build/" + env + "/bootloader.bin", dst + "bootloader.bin") os.rename("src/.pio/build/" + env + "/partitions.bin", dst + "partitions.bin") genOtaBin(dst) if env[:7] == "esp8285": gzip_bin(dst + fname, dst + fname[:-4] + ".gz") if len(sys.argv) == 1: print("name=" + getVersion("src/defines.h")[1][:-1]) else: # arg1: environment renameFw("src/defines.h", sys.argv[1])