重构设备类定义, 使用继承简化代码;
This commit is contained in:
@@ -3,10 +3,11 @@ import hashlib
|
||||
from math import ceil
|
||||
from tqdm import tqdm
|
||||
from pathlib import Path
|
||||
from serial import Serial
|
||||
|
||||
from . import tools
|
||||
from . import function
|
||||
from .tools import ByteConv, IntelHex
|
||||
from .function import protocols, file_upgrade
|
||||
from .DeviceSerial import DeviceSerial
|
||||
|
||||
ParamMap_LaminaAdapter = {
|
||||
# 1 - Hex
|
||||
@@ -120,27 +121,59 @@ ParamMap_LaminaAdapter = {
|
||||
0x190: ["Datetime", 4, 16],
|
||||
}
|
||||
|
||||
MemoryMap_SLCP001 = {
|
||||
'image_size': 0x100000, # 镜像文件大小
|
||||
'app_size': 0x040000, # 应用程序大小
|
||||
'boot_size': 0x010000, # Boot程序大小
|
||||
|
||||
class LaminaAdapter:
|
||||
'boot_addr': 0x000000, # Boot程序地址
|
||||
'main_addr': 0x010000, # main程序地址
|
||||
'back_addr': 0x0BC000, # back程序地址
|
||||
'main_header': 0x0FC000, # main信息地址
|
||||
'back_header': 0x0FE000, # back信息地址
|
||||
}
|
||||
MemoryMap_460 = {
|
||||
'image_size': 0x058000, # 镜像文件大小
|
||||
'app_size': 0x024000, # 应用程序大小
|
||||
'boot_size': 0x010000, # Boot程序大小
|
||||
|
||||
'boot_addr': 0x000000, # Boot程序地址
|
||||
'main_addr': 0x00C000, # main程序地址
|
||||
'back_addr': 0x030000, # back程序地址
|
||||
'main_header': 0x054000, # main信息地址
|
||||
'back_header': 0x056000, # back信息地址
|
||||
}
|
||||
|
||||
class LaminaAdapter(DeviceSerial):
|
||||
""" 叠光适配器\优化器
|
||||
使用继承方式实现功能
|
||||
"""
|
||||
def __init__(self, com_name="COM16", addr_645=[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA], addr_modbus=0x01, **kwargs):
|
||||
# 初始化串口通信
|
||||
if com_name is not None:
|
||||
com_config = {}
|
||||
com_config['baudrate'] = kwargs['baudrate'] if 'baudrate' in kwargs.keys() else 115200
|
||||
com_config['parity'] = kwargs['parity'] if 'parity' in kwargs.keys() else 'N'
|
||||
com_config['bytesize'] = kwargs['bytesize'] if 'bytesize' in kwargs.keys() else 8
|
||||
com_config['stopbits'] = kwargs['stopbits'] if 'stopbits' in kwargs.keys() else 1
|
||||
self.__com = Serial(com_name, **com_config)
|
||||
else:
|
||||
self.__com =None
|
||||
|
||||
self.flag_print = 'frame_print' in kwargs.keys()
|
||||
self.time_out = kwargs['time_out'] if 'time_out' in kwargs.keys() else 1
|
||||
self.time_gap = kwargs['time_gap'] if 'time_gap' in kwargs.keys() else 0.01
|
||||
self.retry = kwargs['retry'] if 'retry' in kwargs.keys() else 1
|
||||
self.retry_sub = kwargs['retry_sub'] if 'retry_sub' in kwargs.keys() else 1
|
||||
def __init__(self, com_name,
|
||||
addr_645=[0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA],
|
||||
addr_modbus=0x01, type_dev='SLCP101', **kwargs):
|
||||
""" 调用超类实现函数初始化 """
|
||||
super().__init__(com_name,
|
||||
callbacks=(lambda : protocols.make_frame_dlt645(self.block),
|
||||
lambda frame: protocols.check_frame_dlt645(frame, self.block)),
|
||||
**kwargs)
|
||||
|
||||
self.device = type_dev
|
||||
match type_dev:
|
||||
case 'SLCP001':
|
||||
self.make_package = lambda *args, **kwargs: GeneratePackage('SLCP001', *args, **kwargs)
|
||||
self.make_image = lambda *args, **kwargs: GenerateImage('SLCP001', *args, **kwargs)
|
||||
case 'SLCP101':
|
||||
self.make_package = lambda *args, **kwargs: GeneratePackage('SLCP101', *args, **kwargs)
|
||||
self.make_image = lambda *args, **kwargs: GenerateImage('SLCP101', *args, **kwargs)
|
||||
case 'SLCP102':
|
||||
self.make_package = lambda *args, **kwargs: GeneratePackage('SLCP102', *args, **kwargs)
|
||||
self.make_image = lambda *args, **kwargs: GenerateImage('SLCP102', *args, **kwargs)
|
||||
case 'DLSY001':
|
||||
self.make_package = lambda *args, **kwargs: GeneratePackage('DLSY001', *args, **kwargs)
|
||||
self.make_image = lambda *args, **kwargs: GenerateImage('DLSY001', *args, **kwargs)
|
||||
case _:
|
||||
self.make_package = None
|
||||
self.make_image = None
|
||||
|
||||
self.block = {
|
||||
'addr' : addr_645,
|
||||
@@ -150,160 +183,215 @@ class LaminaAdapter:
|
||||
'data_define': ParamMap_LaminaAdapter,
|
||||
},
|
||||
}
|
||||
self.output = {
|
||||
'result': False,
|
||||
'code_func': 0x00,
|
||||
}
|
||||
self.log = {
|
||||
'send': 0,
|
||||
'read': 0,
|
||||
'keep-fail': 0,
|
||||
'record': {
|
||||
'config': None,
|
||||
'data': None,
|
||||
},
|
||||
}
|
||||
|
||||
def __read_frame(self) -> bool:
|
||||
""" 使用帧字节超时策略读报文帧, 并进行解析数据, 打印异常 """
|
||||
frame_recv = b''
|
||||
time_start, time_current, flag_frame = time.time(), time.time(), False
|
||||
while (time_current - time_start) < self.time_out:
|
||||
time.sleep(self.time_gap)
|
||||
bytes_read = self.__com.read_all()
|
||||
time_current = time.time()
|
||||
if flag_frame and len(bytes_read) == 0:
|
||||
break
|
||||
elif len(bytes_read):
|
||||
flag_frame = True
|
||||
frame_recv += bytes_read
|
||||
try:
|
||||
self.output = function.frame.check_frame_dlt645(frame_recv, self.block)
|
||||
if self.flag_print:
|
||||
print("Read Frame: ", tools.ByteConv.trans_list_to_str(frame_recv))
|
||||
except Exception as ex:
|
||||
print("Error Info: ", ex)
|
||||
if self.flag_print and frame_recv:
|
||||
print("Fail Data: " , tools.ByteConv.trans_list_to_str(frame_recv))
|
||||
self.output['result'] = False
|
||||
|
||||
return self.output['result']
|
||||
|
||||
def __transfer_data(self, frame: bytearray) -> bool:
|
||||
""" 报文数据传输 """
|
||||
if self.__com is None:
|
||||
print(tools.ByteConv.trans_list_to_str(frame))
|
||||
return False
|
||||
|
||||
fail_count = 0
|
||||
while fail_count < self.retry:
|
||||
frame_discard = self.__com.read_all()
|
||||
self.__com.write(frame)
|
||||
self.log['send'] += 1
|
||||
|
||||
if self.flag_print and frame_discard:
|
||||
print("Discard Data: " , frame_discard)
|
||||
if self.flag_print:
|
||||
print("Send Frame: ", tools.ByteConv.trans_list_to_str(frame))
|
||||
|
||||
if self.__read_frame():
|
||||
if 'Regs' in self.output.keys():
|
||||
function.frame.print_display(self.output['Regs'])
|
||||
self.log['read'] += 1
|
||||
break
|
||||
else:
|
||||
fail_count += 1
|
||||
if fail_count >= self.log['keep-fail']:
|
||||
self.log['keep-fail'] = fail_count
|
||||
time.sleep(2*self.time_out)
|
||||
|
||||
return fail_count < self.retry
|
||||
|
||||
def frame_read(self, daddr=0x60, dlen=0x50):
|
||||
def frame_read(self, daddr=0x60, dlen=0x50) -> bool:
|
||||
self.block['data']['type'] = 'read'
|
||||
self.block['data']['data_addr'] = daddr
|
||||
self.block['data']['data_len'] = dlen
|
||||
frame = function.frame.make_frame_dlt645(self.block)
|
||||
return self._transfer_data()
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
def frame_write_one(self, daddr=0x85, dval=-900):
|
||||
def frame_write_one(self, daddr=0x85, dval=-900) -> bool:
|
||||
self.block['data']['type'] = 'write_one'
|
||||
self.block['data']['data_addr'] = daddr
|
||||
self.block['data']['data_val'] = dval
|
||||
frame = function.frame.make_frame_dlt645(self.block)
|
||||
item_coff = self.block['data_define'][daddr][2] if len(self.block['data_define'][daddr]) > 2 else 1
|
||||
self.block['data_val'] = int(dval * item_coff)
|
||||
return self._transfer_data()
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
def frame_write_dual(self, daddr=0x91, dval=600):
|
||||
def frame_write_dual(self, daddr=0x91, dval=600) -> bool:
|
||||
self.block['data']['type'] = 'write_dual'
|
||||
self.block['data']['data_addr'] = daddr
|
||||
self.block['data']['data_val'] = dval
|
||||
frame = function.frame.make_frame_dlt645(self.block)
|
||||
item_coff = self.block['data_define'][daddr][2] if len(self.block['data_define'][daddr]) > 2 else 1
|
||||
self.block['data_val'] = int(dval * item_coff)
|
||||
return self._transfer_data()
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
def frame_write_str(self, daddr=0x82, dval=[0x06, 0x05, 0x04, 0x03, 0x02, 0x01]):
|
||||
def frame_write_str(self, daddr=0x82, dval=[0x06, 0x05, 0x04, 0x03, 0x02, 0x01]) -> bool:
|
||||
self.block['data']['type'] = 'write_str'
|
||||
self.block['data']['data_addr'] = daddr
|
||||
self.block['data']['data_val'] = dval
|
||||
frame = function.frame.make_frame_dlt645(self.block)
|
||||
return self._transfer_data()
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
def frame_update(self, path_bin):
|
||||
def frame_update(self, path_file: Path, makefile: bool = False) -> bool:
|
||||
""" 程序升级
|
||||
注意: 在使用单板升级测试时, 需要关闭低电压检测功能, 否则无法启动升级流程;
|
||||
|
||||
"""
|
||||
param_saved = self.flag_print, self.retry, self.time_out
|
||||
self.flag_print = False
|
||||
try:
|
||||
status = 'init' # 初始化
|
||||
if not path_file.exists():
|
||||
raise Exception("工程编译目标文件不存在.")
|
||||
if makefile and self.make_package is not None:
|
||||
self.block['data']['file'] = self.make_package(path_file)
|
||||
else:
|
||||
self.block['data']['file'] = path_file.read_bytes()
|
||||
|
||||
self.block['data']['type'] = 'update'
|
||||
self.block['data']['step'] = 'start'
|
||||
self.block['data']['index'] = 0
|
||||
self.block['data']['file'] = Path(path_bin).read_bytes()
|
||||
self.block['data']['header_offset'] = 184
|
||||
# 启动帧
|
||||
frame_master = bytearray(function.frame.make_frame_dlt645(self.block))
|
||||
self.block['data']['type'] = 'update'
|
||||
self.block['data']['header_offset'] = 184
|
||||
|
||||
if not self.__transfer_data(frame_master):
|
||||
status = 'start' # 启动帧
|
||||
self.block['data']['step'] = 'start'
|
||||
self.block['data']['index'] = 0
|
||||
assert self._transfer_data()
|
||||
|
||||
self.block["data"]['file_block_size'] = self.output['upgrade']['length']
|
||||
# 避免接收到延迟返回报文
|
||||
time.sleep(self.time_out)
|
||||
|
||||
status = 'trans' # 文件传输
|
||||
self.retry = 3
|
||||
self.time_out = 1.5
|
||||
self.block["data"]['step'] = 'trans'
|
||||
self.block['data']['index'] = 0
|
||||
frame_total = ceil((len(self.block["data"]['file']) - self.block['data']['header_offset']) / self.block["data"]['file_block_size'])
|
||||
for idx in tqdm(range(frame_total), desc="File Transmitting"):
|
||||
self.block["data"]['index'] = idx
|
||||
assert self._transfer_data()
|
||||
|
||||
status = 'end' # 结束升级
|
||||
self.time_out = 1
|
||||
self.block["data"]['step'] = 'end'
|
||||
self.block["data"]['index'] += 1
|
||||
assert self._transfer_data()
|
||||
except Exception as ex:
|
||||
""" 通用异常处理 """
|
||||
self.flag_print, self.retry, self.time_out = param_saved
|
||||
print('Upgrade Fail: start')
|
||||
return False
|
||||
self.block["data"]['file_block_size'] = self.output['upgrade']['length']
|
||||
|
||||
# 避免接收到延迟返回报文
|
||||
time.sleep(self.time_out)
|
||||
|
||||
# 文件传输
|
||||
self.retry = 3
|
||||
self.time_out = 1.5
|
||||
self.block["data"]['step'] = 'trans'
|
||||
self.block['data']['index'] = 0
|
||||
frame_total = ceil((len(self.block["data"]['file']) - self.block['data']['header_offset']) / self.block["data"]['file_block_size'])
|
||||
for idx in tqdm(range(frame_total), desc="File Transmitting"):
|
||||
self.block["data"]['index'] = idx
|
||||
frame_master = function.frame.make_frame_dlt645(self.block)
|
||||
if not self.__transfer_data(frame_master):
|
||||
self.flag_print, self.retry, self.time_out = param_saved
|
||||
print(f'Upgrade Fail: trans data in {idx}')
|
||||
return False
|
||||
|
||||
# 结束升级
|
||||
self.time_out = 1
|
||||
self.block["data"]['step'] = 'end'
|
||||
self.block["data"]['index'] += 1
|
||||
frame_master = function.frame.make_frame_dlt645(self.block)
|
||||
if not self.__transfer_data(frame_master):
|
||||
self.flag_print, self.retry, self.time_out = param_saved
|
||||
print(f'Upgrade Fail: end')
|
||||
report = f'Upgrade Fail: {status}'
|
||||
report += f', Frame in {self.block["data"]["index"]}' if status == 'trans' else ''
|
||||
report += f'\n Error by {ex}' if not isinstance(ex, AssertionError) else ''
|
||||
print(report)
|
||||
return False
|
||||
|
||||
self.flag_print, self.retry, self.time_out = param_saved
|
||||
return True
|
||||
|
||||
|
||||
def GeneratePackage(type_dev: str, path_hex: Path, **kwargs) -> bytearray:
|
||||
""" 生成升级包 """
|
||||
config = {
|
||||
'prod_type': [0x45, 0x00], # 产品类型
|
||||
'method_compress': False, # 文件压缩
|
||||
'prog_id': list(type_dev.encode('ascii')), # 程序识别号
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
match type_dev:
|
||||
case 'SLCP001':
|
||||
MemoryMap = MemoryMap_SLCP001
|
||||
case 'SLCP101':
|
||||
MemoryMap = MemoryMap_460
|
||||
case 'SLCP102':
|
||||
MemoryMap = MemoryMap_460
|
||||
case 'DLSY001':
|
||||
MemoryMap = MemoryMap_460
|
||||
case _:
|
||||
raise Exception("Unknow device.")
|
||||
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=MemoryMap['app_size'])
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(path_hex.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Package generated successfully.")
|
||||
print(f"File name: {path_hex.name}")
|
||||
print(f"File Info:")
|
||||
print(f"\t header_length={len(main_header)}, bin_length={len(bin_main)}[{hex(len(bin_main))}]")
|
||||
|
||||
# 组装镜像
|
||||
Image = [0xFF] * (len(main_header) + len(encrypt_main))
|
||||
offset_image = 0
|
||||
Image[offset_image: offset_image + len(main_header)] = main_header
|
||||
offset_image += len(main_header)
|
||||
Image[offset_image: offset_image + len(encrypt_main)] = encrypt_main
|
||||
|
||||
# 额外处理
|
||||
if 'output_bin' in kwargs.keys() and kwargs['output_bin']:
|
||||
(path_hex / (path_hex.stem + '.bin')).write_bytes(bin_main)
|
||||
|
||||
return bytearray(Image)
|
||||
|
||||
def GenerateImage(type_dev: str, path_boot: Path, path_main: Path, path_back: Path, **kwargs) ->bytearray:
|
||||
""" 镜像生成 """
|
||||
config = {
|
||||
'prod_type': [0x45, 0x00], # 产品类型
|
||||
'method_compress': False, # 文件压缩
|
||||
'prog_id': list(type_dev.encode('ascii')), # 程序识别号
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
match type_dev:
|
||||
case 'SLCP001':
|
||||
MemoryMap = MemoryMap_SLCP001
|
||||
case 'SLCP101':
|
||||
MemoryMap = MemoryMap_460
|
||||
case 'SLCP102':
|
||||
MemoryMap = MemoryMap_460
|
||||
case 'DLSY001':
|
||||
MemoryMap = MemoryMap_460
|
||||
case _:
|
||||
raise Exception("Unknow device.")
|
||||
|
||||
bin_boot = IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=MemoryMap['boot_size'])
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=MemoryMap['app_size'])
|
||||
bin_back = IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=MemoryMap['app_size'])
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(path_main.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_back)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_back))
|
||||
config['hex_name'] = list(path_back.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
# 组装镜像
|
||||
Image = [0xFF] * MemoryMap['image_size']
|
||||
Image[MemoryMap['boot_addr']: MemoryMap['boot_addr'] + len(bin_boot)] = bin_boot
|
||||
Image[MemoryMap['main_addr']: MemoryMap['main_addr'] + len(bin_main)] = bin_main
|
||||
Image[MemoryMap['back_addr']: MemoryMap['back_addr'] + len(bin_back)] = bin_back
|
||||
Image[MemoryMap['main_header']: MemoryMap['main_header'] + len(main_header)] = main_header
|
||||
Image[MemoryMap['back_header']: MemoryMap['back_header'] + len(back_header)] = back_header
|
||||
|
||||
# Log打印
|
||||
print("Merge Image generated successfully.")
|
||||
print(f"Main File:")
|
||||
print(f"\t header_length={len(main_header)}, bin_length={len(bin_main)}[{hex(len(bin_main))}]")
|
||||
print(f"Back File:")
|
||||
print(f"\t header_length={len(back_header)}, bin_length={len(bin_back)}[{hex(len(bin_back))}]")
|
||||
|
||||
# 额外文件
|
||||
if 'output_header' in kwargs.keys() and kwargs['output_header']:
|
||||
(path_main.parent / (path_main.stem + '.header')).write_bytes(main_header)
|
||||
(path_back.parent / (path_back.stem + '.header')).write_bytes(back_header)
|
||||
if 'output_bin' in kwargs.keys() and kwargs['output_bin']:
|
||||
(path_main.parent / (path_main.stem + '.bin')).write_bytes(bin_main)
|
||||
(path_back.parent / (path_back.stem + '.bin')).write_bytes(bin_back)
|
||||
if 'output_encrypt' in kwargs.keys() and kwargs['output_encrypt']:
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = file_upgrade.file_encryption(bin_back)
|
||||
(path_main.parent / (path_main.stem + '.encrypt')).write_bytes(encrypt_main)
|
||||
(path_back.parent / (path_back.stem + '.encrypt')).write_bytes(encrypt_back)
|
||||
|
||||
return bytearray(Image)
|
||||
|
||||
def GeneratePackage_SLCP001_p4a0(path_hex: Path):
|
||||
""" 叠光适配器-460平台版本 生成升级包 """
|
||||
config = {
|
||||
@@ -313,16 +401,16 @@ def GeneratePackage_SLCP001_p4a0(path_hex: Path):
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x040000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x040000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Package generated successfully.")
|
||||
@@ -348,16 +436,16 @@ def GeneratePackage_SLCP101_p460(path_hex: Path):
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x024000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x024000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Package generated successfully.")
|
||||
@@ -384,16 +472,16 @@ def GeneratePackage_SLCP102_p460(path_hex: Path):
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x024000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x024000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Package generated successfully.")
|
||||
@@ -420,28 +508,28 @@ def GenerateImage_SLCP001_p4a0(path_boot: Path, path_main: Path, path_back: Path
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_boot = tools.IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x010000)
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x0CC000)
|
||||
bin_back = tools.IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x040000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = function.file_upgrade.file_encryption(bin_back)
|
||||
bin_boot = IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x010000)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x0CC000)
|
||||
bin_back = IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x040000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = file_upgrade.file_encryption(bin_back)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(path_main.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_back)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (back_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Merge Image generated successfully.")
|
||||
@@ -475,28 +563,28 @@ def GenerateImage_SLCP101_p460(path_boot: Path, path_main: Path, path_back: Path
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_boot = tools.IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x00C000)
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x024000)
|
||||
bin_back = tools.IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x024000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = function.file_upgrade.file_encryption(bin_back)
|
||||
bin_boot = IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x00C000)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x024000)
|
||||
bin_back = IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x024000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = file_upgrade.file_encryption(bin_back)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(path_main.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_back)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (back_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Merge Image generated successfully.")
|
||||
@@ -530,28 +618,28 @@ def GenerateImage_SLCP102_p460(path_boot: Path, path_main: Path, path_back: Path
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_boot = tools.IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x00C000)
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x024000)
|
||||
bin_back = tools.IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x024000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = function.file_upgrade.file_encryption(bin_back)
|
||||
bin_boot = IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x00C000)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x024000)
|
||||
bin_back = IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x024000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = file_upgrade.file_encryption(bin_back)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(path_main.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_back)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (back_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Merge Image generated successfully.")
|
||||
@@ -585,16 +673,16 @@ def GeneratePackage_DLSY001_p460(path_hex: Path):
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x024000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=0x024000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Package generated successfully.")
|
||||
@@ -621,28 +709,28 @@ def GenerateImage_DLSY001_p460(path_boot: Path, path_main: Path, path_back: Path
|
||||
'prog_type': 'app', # 程序类型
|
||||
'area_code': [0x00, 0x00], # 地区
|
||||
}
|
||||
bin_boot = tools.IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x00C000)
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x024000)
|
||||
bin_back = tools.IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x024000)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = function.file_upgrade.file_encryption(bin_back)
|
||||
bin_boot = IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=0x00C000)
|
||||
bin_main = IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=0x024000)
|
||||
bin_back = IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=0x024000)
|
||||
encrypt_main = file_upgrade.file_encryption(bin_main)
|
||||
encrypt_back = file_upgrade.file_encryption(bin_back)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['file_length'] = ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(path_main.name.encode())[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (main_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_back)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = tools.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'] += [0] * (64 - len(config['hex_name']))
|
||||
if (back_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
if (back_header:=file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Merge Image generated successfully.")
|
||||
|
||||
Reference in New Issue
Block a user