添加备份程序打包功能;
This commit is contained in:
@@ -26,22 +26,6 @@ def test_communication(time_out=2):
|
|||||||
print(f"Success Rate: {dev_lamina.log['read'] / dev_lamina.log['send'] * 100}%")
|
print(f"Success Rate: {dev_lamina.log['read'] / dev_lamina.log['send'] * 100}%")
|
||||||
dev_lamina.flag_print, dev_lamina.retry, dev_lamina.time_out = param_saved
|
dev_lamina.flag_print, dev_lamina.retry, dev_lamina.time_out = param_saved
|
||||||
|
|
||||||
|
|
||||||
def make_Pakeage(fp: Path, func):
|
|
||||||
""" 生成升级包 """
|
|
||||||
|
|
||||||
hex_update = fp
|
|
||||||
file_package = fp.parent / f'{hex_update.stem}.dat'
|
|
||||||
file_update_bin = fp.parent / f'{hex_update.stem}.bin'
|
|
||||||
|
|
||||||
data_package, data_update_bin = func(hex_update)
|
|
||||||
|
|
||||||
file_package.write_bytes(data_package)
|
|
||||||
file_update_bin.write_bytes(data_update_bin)
|
|
||||||
|
|
||||||
return file_package
|
|
||||||
|
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
if 0:
|
if 0:
|
||||||
dev_lamina.frame_read(0xA9, 1) # 读ADC参考电压
|
dev_lamina.frame_read(0xA9, 1) # 读ADC参考电压
|
||||||
|
|||||||
@@ -316,14 +316,14 @@ class LaminaAdapter(DeviceSerial):
|
|||||||
|
|
||||||
def GeneratePackage(type_dev: str, path_hex: Path, **kwargs) -> bytearray:
|
def GeneratePackage(type_dev: str, path_hex: Path, **kwargs) -> bytearray:
|
||||||
""" 生成升级包 """
|
""" 生成升级包 """
|
||||||
|
if 'upgrade_backup' in kwargs.keys():
|
||||||
|
upgrade_backup = kwargs['upgrade_backup']
|
||||||
config = {
|
config = {
|
||||||
'prod_type': [0x45, 0x00], # 产品类型
|
'prod_type': [0x45, 0x00], # 产品类型
|
||||||
'method_compress': False, # 文件压缩
|
'method_compress': False, # 文件压缩
|
||||||
'prog_id': list(type_dev.encode('ascii')), # 程序识别号
|
'prog_id': list(type_dev.encode('ascii')), # 程序识别号
|
||||||
'prog_type': 'app', # 程序类型
|
'prog_type': 'app', # 程序类型
|
||||||
'area_code': [0x00, 0x00], # 地区
|
'area_code': [0x00, 0x00], # 地区
|
||||||
# 升级方式(0-片外缓冲, 1-片内缓冲, 2-升级备份)
|
|
||||||
'upgrade_type': [0x02, 0x00] if 'upgrade_backup' in kwargs.keys() else [0x00, 0x00],
|
|
||||||
}
|
}
|
||||||
match type_dev:
|
match type_dev:
|
||||||
case 'SLCP001':
|
case 'SLCP001':
|
||||||
@@ -346,6 +346,8 @@ def GeneratePackage(type_dev: str, path_hex: Path, **kwargs) -> bytearray:
|
|||||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||||
config['hex_name'] = list(path_hex.name.encode())[:64]
|
config['hex_name'] = list(path_hex.name.encode())[:64]
|
||||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||||
|
if upgrade_backup:
|
||||||
|
config['prog_id'][:4] = b'BACK'
|
||||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||||
raise Exception("Header tag oversize. ")
|
raise Exception("Header tag oversize. ")
|
||||||
|
|
||||||
@@ -355,17 +357,10 @@ def GeneratePackage(type_dev: str, path_hex: Path, **kwargs) -> bytearray:
|
|||||||
print(f"\t header_length={len(main_header)}, bin_length={len(bin_main)}[{hex(len(bin_main))}]")
|
print(f"\t header_length={len(main_header)}, bin_length={len(bin_main)}[{hex(len(bin_main))}]")
|
||||||
|
|
||||||
# 组装镜像
|
# 组装镜像
|
||||||
if 'upgrade_backup' in kwargs.keys():
|
Image = [0xFF] * (len(main_header) + len(encrypt_main))
|
||||||
""" 备份程序填充部分字节以便阻止旧版程序进行升级 """
|
|
||||||
dummy_data = bytearray([0x00] * 8)
|
|
||||||
else:
|
|
||||||
dummy_data = []
|
|
||||||
Image = [0xFF] * (len(main_header) + len(dummy_data) + len(encrypt_main))
|
|
||||||
offset_image = 0
|
offset_image = 0
|
||||||
Image[offset_image: offset_image + len(main_header)] = main_header
|
Image[offset_image: offset_image + len(main_header)] = main_header
|
||||||
offset_image += len(main_header)
|
offset_image += len(main_header)
|
||||||
Image[offset_image: offset_image + len(dummy_data)] = dummy_data
|
|
||||||
offset_image += len(dummy_data)
|
|
||||||
Image[offset_image: offset_image + len(encrypt_main)] = encrypt_main
|
Image[offset_image: offset_image + len(encrypt_main)] = encrypt_main
|
||||||
|
|
||||||
# 额外处理
|
# 额外处理
|
||||||
@@ -417,6 +412,7 @@ def GenerateImage(type_dev: str, path_boot: Path, path_main: Path, path_back: Pa
|
|||||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_back))
|
config['file_length'] = ByteConv.conv_int_to_array(len(bin_back))
|
||||||
config['hex_name'] = list(path_back.name.encode())[:64]
|
config['hex_name'] = list(path_back.name.encode())[:64]
|
||||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||||
|
config['prog_id'][:4] = b'BACK'
|
||||||
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
||||||
raise Exception("Header tag oversize. ")
|
raise Exception("Header tag oversize. ")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user