def METHOD_NAME(self, output_file, stack_file_name, stack_type, stack_addr=None):
    self.output_tar = tarfile.open(output_file, "w:gz", format=tarfile.USTAR_FORMAT)
    fw_directory = tarfile.TarInfo(self.COPRO_TAR_DIR)
    fw_directory.mode = 0o755
    fw_directory.type = tarfile.DIRTYPE
    self.output_tar.addfile(fw_directory)
    stack_file = os.path.join(self.mcu_copro, stack_file_name)
    # Form Manifest
    manifest = dict(MANIFEST_TEMPLATE)
    manifest["manifest"]["timestamp"] = timestamp()
    copro_bin = CoproBinary(stack_file)
    self.logger.info(f"Bundling {copro_bin.img_sig.get_version()}")
    stack_type_code = get_stack_type(stack_type)
    manifest["copro"]["radio"]["version"].update(
        {
            "type": stack_type_code,
            "major": copro_bin.img_sig.version_major,
            "minor": copro_bin.img_sig.version_minor,
            "sub": copro_bin.img_sig.version_sub,
            "branch": copro_bin.img_sig.version_branch,
            "release": copro_bin.img_sig.version_build,
        }
    )
    if not stack_addr:
        stack_addr = copro_bin.get_flash_load_addr()
        self.logger.info(f"Using guessed flash address 0x{stack_addr:x}")
    # Old FUS Update
    self.addFile(
        manifest["copro"]["fus"]["files"],
        "stm32wb5x_FUS_fw_for_fus_0_5_3.bin",
        condition="==0.5.3",
        address="0x080EC000",
    )
    # New FUS Update
    self.addFile(
        manifest["copro"]["fus"]["files"],
        "stm32wb5x_FUS_fw.bin",
        condition=">0.5.3",
        address="0x080EC000",
    )
    # BLE Full Stack
    self.addFile(
        manifest["copro"]["radio"]["files"],
        stack_file_name,
        address=f"0x{stack_addr:X}",
    )
    # Save manifest
    manifest_data = json.dumps(manifest, indent=4).encode("utf-8")
    info = tarfile.TarInfo(self._getFileName("Manifest.json"))
    info.size = len(manifest_data)
    self.output_tar.addfile(info, BytesIO(manifest_data))
    self.output_tar.close()