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