积累更新
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
import time
|
||||
import hashlib
|
||||
from math import ceil
|
||||
from tqdm import tqdm
|
||||
from pathlib import Path
|
||||
from serial import Serial
|
||||
from function.file_upgrade import build_header_new, file_encryption, parser_version_info
|
||||
from function.tools.ByteConv import conv_int_to_array, trans_list_to_str
|
||||
from function.tools.IntelHex import file_IntelHex_to_Bin
|
||||
from function.frame import check_frame_modbus, make_frame_modbus, print_display
|
||||
|
||||
from . import tools
|
||||
from . import function
|
||||
|
||||
ParamMap_LaminaController = {
|
||||
# 1 - Hex
|
||||
@@ -168,20 +167,20 @@ class LaminaController:
|
||||
flag_frame = True
|
||||
frame_recv += bytes_read
|
||||
try:
|
||||
self.output = check_frame_modbus(frame_recv, self.block['data'])
|
||||
self.output = function.frame.check_frame_modbus(frame_recv, self.block['data'])
|
||||
if self.flag_print:
|
||||
print("Read Frame: ", trans_list_to_str(frame_recv))
|
||||
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: " , trans_list_to_str(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(trans_list_to_str(frame))
|
||||
print(tools.ByteConv.trans_list_to_str(frame))
|
||||
return False
|
||||
|
||||
fail_count = 0
|
||||
@@ -193,12 +192,12 @@ class LaminaController:
|
||||
if self.flag_print and frame_discard:
|
||||
print("Discard Data: " , frame_discard)
|
||||
if self.flag_print:
|
||||
print("Send Frame: ", trans_list_to_str(frame))
|
||||
print("Send Frame: ", tools.ByteConv.trans_list_to_str(frame))
|
||||
|
||||
time.sleep(10 * self.time_gap)
|
||||
if self.__read_frame():
|
||||
if (self.flag_print is not None) and 'Regs' in self.output.keys():
|
||||
print_display(self.output['Regs'])
|
||||
function.frame.print_display(self.output['Regs'])
|
||||
self.log['read'] += 1
|
||||
break
|
||||
else:
|
||||
@@ -213,7 +212,7 @@ class LaminaController:
|
||||
self.block['data']['type'] = 'read'
|
||||
self.block['data']['data_addr'] = daddr
|
||||
self.block['data']['data_len'] = dlen
|
||||
frame = make_frame_modbus(self.block['data'])
|
||||
frame = function.frame.make_frame_modbus(self.block['data'])
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
@@ -222,7 +221,7 @@ class LaminaController:
|
||||
self.block['data']['data_addr'] = daddr
|
||||
item_coff = self.block['data']['data_define'][daddr][2] if len(self.block['data']['data_define'][daddr]) > 2 else 1
|
||||
self.block['data']['data_val'] = int(dval * item_coff)
|
||||
frame = make_frame_modbus(self.block['data'])
|
||||
frame = function.frame.make_frame_modbus(self.block['data'])
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
@@ -231,7 +230,7 @@ class LaminaController:
|
||||
self.block['data']['data_addr'] = daddr
|
||||
item_coff = self.block['data']['data_define'][daddr][2] if len(self.block['data']['data_define'][daddr]) > 2 else 1
|
||||
self.block['data']['data_val'] = int(dval * item_coff)
|
||||
frame = make_frame_modbus(self.block['data'])
|
||||
frame = function.frame.make_frame_modbus(self.block['data'])
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
@@ -239,7 +238,7 @@ class LaminaController:
|
||||
self.block['data']['type'] = 'write_str'
|
||||
self.block['data']['data_addr'] = daddr
|
||||
self.block['data']['data_val'] = dval
|
||||
frame = make_frame_modbus(self.block['data'])
|
||||
frame = function.frame.make_frame_modbus(self.block['data'])
|
||||
|
||||
return self.__transfer_data(frame)
|
||||
|
||||
@@ -254,7 +253,7 @@ class LaminaController:
|
||||
# 读取config
|
||||
self.block['data']['type'] = 'record_cfg'
|
||||
self.block['data']['step'] = 'start'
|
||||
frame_master = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
|
||||
ret, pbar = True, None
|
||||
frame_data_cfg = []
|
||||
@@ -264,7 +263,7 @@ class LaminaController:
|
||||
if self.output['record']['seq'] == 0:
|
||||
pbar = tqdm(total=self.output['record']['total'] + 1, desc="Record Config Reading")
|
||||
self.block['data']['step'] = 'next'
|
||||
frame_master = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
elif (self.output['record']['seq']) >= self.output['record']['total']:
|
||||
ret = False
|
||||
pbar and pbar.update()
|
||||
@@ -273,7 +272,7 @@ class LaminaController:
|
||||
# 读取data
|
||||
self.block['data']['type'] = 'record_data'
|
||||
self.block['data']['step'] = 'start'
|
||||
frame_master = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
|
||||
ret, pbar = True, None
|
||||
frame_data_record = []
|
||||
@@ -283,7 +282,7 @@ class LaminaController:
|
||||
if self.output['record']['seq'] == 0:
|
||||
pbar = tqdm(total=self.output['record']['total'] + 1, desc="Record Data Reading")
|
||||
self.block['data']['step'] = 'next'
|
||||
frame_master = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
elif (self.output['record']['seq']) >= self.output['record']['total']:
|
||||
ret = False
|
||||
pbar and pbar.update()
|
||||
@@ -441,7 +440,7 @@ class LaminaController:
|
||||
# 启动帧
|
||||
self.block['data']['step'] = 'start'
|
||||
self.block['data']['index'] = 0
|
||||
frame_master = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
if not self.__transfer_data(frame_master):
|
||||
self.flag_print, self.retry, self.time_out = param_saved
|
||||
print('Upgrade Fail: start')
|
||||
@@ -459,7 +458,7 @@ class LaminaController:
|
||||
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 = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
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}')
|
||||
@@ -469,7 +468,7 @@ class LaminaController:
|
||||
self.time_out = 1
|
||||
self.block["data"]['step'] = 'end'
|
||||
self.block["data"]['index'] += 1
|
||||
frame_master = make_frame_modbus(self.block['data'])
|
||||
frame_master = function.frame.make_frame_modbus(self.block['data'])
|
||||
if not self.__transfer_data(frame_master):
|
||||
self.flag_print, self.retry, self.time_out = param_saved
|
||||
print(f'Upgrade Fail: end')
|
||||
@@ -490,17 +489,17 @@ def GeneratePackage_DLSP001_p280039(path_hex: Path):
|
||||
'upgrade_type': [0x00, 0x00], # 升级方式(0-片外缓冲, 1-片内缓冲, 2-升级备份)
|
||||
}
|
||||
|
||||
bin_main = file_IntelHex_to_Bin(path_hex.read_text(), len_max=2 * 0x014000, conv_end=False)
|
||||
encrypt_main = file_encryption(bin_main)
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_hex.read_text(), len_max=2 * 0x014000, conv_end=False)
|
||||
encrypt_main = function.file_upgrade.file_encryption(bin_main)
|
||||
|
||||
info_version = parser_version_info(bin_main, 0x88000)
|
||||
info_version = function.file_upgrade.parser_version_info(bin_main, 0x88000)
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['file_length'] = conv_int_to_array(len(bin_main))
|
||||
config['file_length'] = tools.ByteConv.conv_int_to_array(len(bin_main))
|
||||
config['hex_name'] = list(info_version['name'])[:64]
|
||||
config['hex_name'] += [0] * (64 - len(config['hex_name']))
|
||||
if (main_header:=build_header_new(config)) is None:
|
||||
if (main_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
print("Package generated successfully.")
|
||||
@@ -529,28 +528,28 @@ def GenerateImage_DLSP001_p280039(path_boot: Path, path_main: Path, path_back: P
|
||||
'upgrade_type': [0x00, 0x00], # 升级方式(0-片外缓冲, 1-片内缓冲, 2-升级备份)
|
||||
}
|
||||
|
||||
bin_boot = file_IntelHex_to_Bin(path_boot.read_text(), len_max=2 * 0x004000, conv_end=False)
|
||||
bin_main = file_IntelHex_to_Bin(path_main.read_text(), len_max=2 * 0x014000, conv_end=False)
|
||||
bin_back = file_IntelHex_to_Bin(path_back.read_text(), len_max=2 * 0x014000, conv_end=False)
|
||||
bin_boot = tools.IntelHex.file_IntelHex_to_Bin(path_boot.read_text(), len_max=2 * 0x004000, conv_end=False)
|
||||
bin_main = tools.IntelHex.file_IntelHex_to_Bin(path_main.read_text(), len_max=2 * 0x014000, conv_end=False)
|
||||
bin_back = tools.IntelHex.file_IntelHex_to_Bin(path_back.read_text(), len_max=2 * 0x014000, conv_end=False)
|
||||
|
||||
md5_ctx = hashlib.md5()
|
||||
md5_ctx.update(bin_main)
|
||||
config["md5"] = list(md5_ctx.digest())
|
||||
config['upgrade_type'] = [0x00, 0x00] # 主程序-片外缓冲
|
||||
config['file_length'] = conv_int_to_array(len(bin_main))
|
||||
config['file_length'] = tools.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:=build_header_new(config)) is None:
|
||||
if (main_header:=function.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['upgrade_type'] = [0x02, 0x00] # 备份程序
|
||||
config['file_length'] = conv_int_to_array(len(bin_back))
|
||||
config['file_length'] = tools.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:=build_header_new(config)) is None:
|
||||
if (back_header:=function.file_upgrade.build_header_new(config)) is None:
|
||||
raise Exception("Header tag oversize. ")
|
||||
|
||||
main_header_buffer = bytearray()
|
||||
@@ -559,8 +558,8 @@ def GenerateImage_DLSP001_p280039(path_boot: Path, path_main: Path, path_back: P
|
||||
back_header_buffer = bytearray()
|
||||
for byte_org in back_header:
|
||||
back_header_buffer.extend(bytearray([0x00, byte_org]))
|
||||
main_encrypt = file_encryption(bin_main)
|
||||
back_encrypt = file_encryption(bin_back)
|
||||
main_encrypt = function.file_upgrade.file_encryption(bin_main)
|
||||
back_encrypt = function.file_upgrade.file_encryption(bin_back)
|
||||
|
||||
print("Merge Image generated successfully.")
|
||||
print(f"Main File:")
|
||||
|
||||
Reference in New Issue
Block a user