From 4c6da771ec9e6129aadbfd866c98d54444426251 Mon Sep 17 00:00:00 2001 From: Terrence Date: Thu, 17 Oct 2024 18:34:51 +0800 Subject: [PATCH] add versions.py for ota upgrade --- .gitignore | 1 + publish.py | 51 ----------------- versions.py | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 51 deletions(-) delete mode 100644 publish.py create mode 100644 versions.py diff --git a/.gitignore b/.gitignore index e6c7479e..760157e6 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ sdkconfig.old sdkconfig dependencies.lock .env +releases/ \ No newline at end of file diff --git a/publish.py b/publish.py deleted file mode 100644 index cc7c6445..00000000 --- a/publish.py +++ /dev/null @@ -1,51 +0,0 @@ -#! /usr/bin/env python3 -from dotenv import load_dotenv -load_dotenv() - -import os -import oss2 -import json - -def get_version(): - with open('CMakeLists.txt', 'r') as f: - for line in f: - if line.startswith('set(PROJECT_VER'): - return line.split('"')[1] - return '0.0.0' - -def upload_bin_to_oss(bin_path, oss_key): - auth = oss2.Auth(os.environ['OSS_ACCESS_KEY_ID'], os.environ['OSS_ACCESS_KEY_SECRET']) - bucket = oss2.Bucket(auth, os.environ['OSS_ENDPOINT'], os.environ['OSS_BUCKET_NAME']) - bucket.put_object(oss_key, open(bin_path, 'rb')) - - -if __name__ == '__main__': - # 获取版本号 - version = get_version() - print(f'version: {version}') - - # 上传 bin 文件到 OSS - upload_bin_to_oss('build/xiaozhi.bin', f'firmwares/xiaozhi-{version}.bin') - - # File URL - file_url = os.path.join(os.environ['OSS_BUCKET_URL'], f'firmwares/xiaozhi-{version}.bin') - print(f'Uploaded bin to OSS: {file_url}') - - firmware_json = { - "version": version, - "url": file_url - } - with open(f"build/firmware.json", "w") as f: - json.dump(firmware_json, f, indent=4) - - # copy firmware.json to server - firmware_config_path = os.environ['FIRMWARE_CONFIG_PATH'] - ret = os.system(f'scp build/firmware.json {firmware_config_path}') - if ret != 0: - print(f'Failed to copy firmware.json to server') - exit(1) - print(f'Copied firmware.json to server: {firmware_config_path}') - - - - diff --git a/versions.py b/versions.py new file mode 100644 index 00000000..75af42fa --- /dev/null +++ b/versions.py @@ -0,0 +1,158 @@ +#! /usr/bin/env python3 +from dotenv import load_dotenv +load_dotenv() + +import os +import struct +import zipfile +import oss2 +import json + +def get_chip_id_string(chip_id): + return { + 0x0000: "esp32", + 0x0002: "esp32s2", + 0x0005: "esp32c3", + 0x0009: "esp32s3", + 0x000C: "esp32c2", + 0x000D: "esp32c6", + 0x0010: "esp32h2", + 0x0011: "esp32c5", + 0x0012: "esp32p4", + 0x0017: "esp32c5", + }[chip_id] + +def get_flash_size(flash_size): + MB = 1024 * 1024 + return { + 0x00: 1 * MB, + 0x01: 2 * MB, + 0x02: 4 * MB, + 0x03: 8 * MB, + 0x04: 16 * MB, + 0x05: 32 * MB, + 0x06: 64 * MB, + 0x07: 128 * MB, + }[flash_size] + +def get_app_desc(data): + magic = struct.unpack("> 4) + chip_id = get_chip_id_string(data[0xC]) + # get segments + segment_count = data[0x1] + segments = [] + offset = 0x18 + for i in range(segment_count): + segment_size = struct.unpack("