from pathlib import Path from device.LaminaAdapter import LaminaAdapter from device.LaminaAdapter import GenerateImage_DLSY001_p460, GeneratePackage_DLSY001_p460 def Process2(): """ 优化器-DLSY001 镜像生成流程 """ root = Path(r"D:\WorkingProject\LightStackOptimizer\software\lamina_optimizer\lamina_optimizer\Debug") # result = Path(r"test\p460_o1\result") result = root # 正常启动镜像 hex_boot = Path(r"test\p460_o1\bootloader.hex") hex_main = root / r"lamina_optimizer.hex" hex_back = root / r"lamina_optimizer.hex" hex_update = root / r"lamina_optimizer.hex" file_image = result / f'{hex_main.stem}_ROM.bin' file_main_header = result / 'DLSY001_header_main.bin' file_back_header = result / 'DLSY001_header_back.bin' file_package = result / f'{hex_update.stem}.dat' file_bin = result / f'{hex_update.stem}.bin' data_bins = GenerateImage_DLSY001_p460(hex_boot, hex_main, hex_back) data_package, data_bin = GeneratePackage_DLSY001_p460(hex_update) file_image.write_bytes(data_bins[0].copy()) file_main_header.write_bytes(data_bins[1].copy()) file_back_header.write_bytes(data_bins[2].copy()) file_package.write_bytes(data_package) file_bin.write_bytes(data_bin) # 异常镜像-主分区md5错误 file_image1 = result / f'{file_image.stem}_b1.bin' data_image = data_bins[0].copy() data_image[0x054018: 0x05401A] = [0x00, 0x01] file_image1.write_bytes(data_image) # 异常镜像-备份分区md5错误 file_image2 = result / f'{file_image.stem}_b2.bin' data_image = data_bins[0].copy() data_image[0x056018: 0x05601A] = [0x00, 0x01] file_image2.write_bytes(data_image) # 异常镜像-双分区md5错误 file_image3 = result / f'{file_image.stem}_b3.bin' data_image = data_bins[0].copy() data_image[0x054018: 0x05401A] = [0x00, 0x01] data_image[0x056018: 0x05601A] = [0x00, 0x01] file_image3.write_bytes(data_image) def Process(type_dev: str, path_boot: Path, path_project: Path, makePackages: bool =True, makeImage: bool = True): """ 镜像生成流程 """ root_boot = path_boot root_main = path_project result = root_main # 程序文件名适配 if type_dev[:4] == 'DLSY': program_name = 'lamina_optimizer' else: program_name = 'lamina_adapter' # 正常启动镜像 hex_boot = root_boot / "bootloader.hex" hex_main = root_main / f"{program_name}.hex" hex_back = root_main / f"{program_name}_back.hex" file_image = result / f'{hex_main.stem}_ROM.bin' file_package = result / f'{hex_main.stem}.dat' file_package_backup = result / f'{hex_back.stem}.dat' dev_lamina = LaminaAdapter(None, type_dev=type_dev) if makePackages: if hex_main.exists(): data_package = dev_lamina.make_package(hex_main) file_package.write_bytes(data_package) if hex_back.exists(): data_package_backup = dev_lamina.make_package(hex_back, upgrade_backup=True) file_package_backup.write_bytes(data_package_backup) if makeImage: if (not hex_boot.exists()) or (not hex_main.exists()) or (not hex_back.exists()): raise Exception("缺失必要程序文件") data_image = dev_lamina.make_image(hex_boot, hex_main, hex_back, output_header=True, output_bin=True) file_image.write_bytes(data_image) # 异常镜像-主分区md5错误 file_image1 = result / f'{file_image.stem}_b1.bin' data_image_copy = data_image if type_dev == 'SLCP001': data_image_copy[0x0FC018: 0x0FC01A] = [0x00, 0x01] else: data_image_copy[0x054018: 0x05401A] = [0x00, 0x01] file_image1.write_bytes(data_image_copy) # 异常镜像-备份分区md5错误 file_image2 = result / f'{file_image.stem}_b2.bin' data_image_copy = data_image if type_dev == 'SLCP001': data_image_copy[0x0FE018: 0x0FE01A] = [0x00, 0x01] else: data_image_copy[0x056018: 0x05601A] = [0x00, 0x01] file_image2.write_bytes(data_image_copy) # 异常镜像-双分区md5错误 file_image3 = result / f'{file_image.stem}_b3.bin' data_image_copy = data_image if type_dev == 'SLCP001': data_image_copy[0x0FE018: 0x0FE01A] = [0x00, 0x01] data_image_copy[0x0FC018: 0x0FC01A] = [0x00, 0x01] else: data_image_copy[0x054018: 0x05401A] = [0x00, 0x01] data_image_copy[0x056018: 0x05601A] = [0x00, 0x01] file_image3.write_bytes(data_image_copy) if __name__ == "__main__": path_boot1 = Path(r"D:\WorkingProject\LightStackAdapter\software\umon\4A0-PROJ_STACKLIGHT_PARALLEL_ADAPTOR") path_boot2 = Path(r"D:\WorkingProject\LightStackAdapter\software\umon\460-PROJ_STACKLIGHT_PARALLEL_ADAPTOR") path_boot3 = Path(r"D:\WorkingProject\LightStackAdapter\software\umon\460-PROJ_STACKLIGHT_OPTIMIZER") path_main1 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\lamina_adapter\Debug") path_main2 = Path(r"D:\WorkingProject\LightStackOptimizer\software\lamina_optimizer\lamina_optimizer\Debug") path_main3 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V1\lamina_adapter\Debug") path_main4 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V3.01\lamina_adapter\Debug") path_main5 = Path(r"D:\WorkingProject\LightStackAdapter\software\lamina_adapter\release\device_V2.03\lamina_adapter\Debug") mode_config = { 'SLCP001': ('SLCP001', path_boot1, path_main3), 'SLCP101': ('SLCP101', path_boot2, path_main5), 'SLCP102': ('SLCP102', path_boot2, path_main4), 'DLSY001': ('DLSY001', path_boot3, path_main2), 'SLCP102_error': ('SLCP101', path_boot2, path_main4), } # Process0(path_boot1, path_main) # 适配器SLCP001 # Process1(path_boot2, path_main) # 适配器SLCP101 # Process1_v2(path_boot2, path_main) # 适配器SLCP102 # Process2() Process(*mode_config['SLCP101'])