Now we back up current .ini-file into `prev_calibrations.ini` file before updating firmware #7357

This commit is contained in:
kifir23917 2025-01-30 19:49:28 +03:00 committed by rusefillc
parent 14a264e99d
commit abb40ca09a
1 changed files with 34 additions and 5 deletions

View File

@ -9,17 +9,32 @@ import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.io.UpdateOperationCallbacks;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;
import static com.devexperts.logging.Logging.getLogging;
import static com.rusefi.binaryprotocol.BinaryProtocol.iniFileProvider;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
public class CalibrationsBackuper {
private static final Logging log = getLogging(CalibrationsBackuper.class);
private static final String PREVIOUS_CALIBRATIONS_INI = "prev_calibrations.ini";
private static final String PREVIOUS_CALIBRATIONS_BINARY = "prev_calibrations.zip";
private static final String PREVIOUS_CALIBRATIONS_XML = "prev_calibrations.msq";
private static Optional<ConfigurationImageMetaVersion0_0> readMeta(
private static class CalibrationsMeta {
private final String iniFilePath;
private final ConfigurationImageMetaVersion0_0 meta;
CalibrationsMeta(final String iniFilePath, final ConfigurationImageMetaVersion0_0 meta) {
this.iniFilePath = iniFilePath;
this.meta = meta;
}
}
private static Optional<CalibrationsMeta> readMeta(
final BinaryProtocol binaryProtocol,
final UpdateOperationCallbacks callbacks
) {
@ -29,7 +44,10 @@ public class CalibrationsBackuper {
final IniFileModel iniFile = iniFileProvider.provide(signature);
final int pageSize = iniFile.getMetaInfo().getTotalSize();
callbacks.logLine(String.format("Page size is %d", pageSize));
return Optional.of(new ConfigurationImageMetaVersion0_0(pageSize, signature));
return Optional.of(new CalibrationsMeta(
iniFile.getIniFilePath(),
new ConfigurationImageMetaVersion0_0(pageSize, signature)
));
} catch (final IOException e) {
log.error("Failed to read meta:", e);
callbacks.logLine("Failed to read meta");
@ -46,17 +64,28 @@ public class CalibrationsBackuper {
callbacks,
(binaryProtocol) -> {
try {
final Optional<ConfigurationImageMetaVersion0_0> meta = readMeta(binaryProtocol, callbacks);
final Optional<CalibrationsMeta> meta = readMeta(binaryProtocol, callbacks);
if (meta.isPresent()) {
final CalibrationsMeta receivedMeta = meta.get();
callbacks.logLine("Reading current calibrations...");
final ConfigurationImageWithMeta image = binaryProtocol.readFullImageFromController(meta.get());
final ConfigurationImageWithMeta image = binaryProtocol.readFullImageFromController(
receivedMeta.meta
);
final Path iniFilePath = Paths.get(receivedMeta.iniFilePath);
callbacks.logLine(String.format("Backing up current file %s...", iniFilePath));
Files.copy(
iniFilePath,
Paths.get(PREVIOUS_CALIBRATIONS_INI),
REPLACE_EXISTING
);
callbacks.logLine(String.format("%s file is backed up", iniFilePath.getFileName()));
callbacks.logLine("Save current calibrations to files...");
binaryProtocol.saveConfigurationImageToFiles(
image,
PREVIOUS_CALIBRATIONS_BINARY,
PREVIOUS_CALIBRATIONS_XML
);
callbacks.logLine("Current calibrations are saved to files");
callbacks.logLine("Current calibrations are backed up to files");
return true;
} else {
return false;