read `MCUSERIAL` output channel from ECU

This commit is contained in:
kifir23917 2025-02-22 01:57:18 +03:00 committed by rusefillc
parent e0b961e8ca
commit 6d44596476
2 changed files with 78 additions and 11 deletions

View File

@ -0,0 +1,64 @@
package com.rusefi.maintenance;
import com.devexperts.logging.Logging;
import com.opensr5.ini.field.IniField;
import com.rusefi.SerialPortScanner;
import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.core.SensorCentral;
import com.rusefi.io.UpdateOperationCallbacks;
import com.rusefi.panama.PanamaHelper;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicInteger;
import static com.devexperts.logging.Logging.getLogging;
public class OutputChannelsHelper {
private static final Logging log = getLogging(OutputChannelsHelper.class);
public static Optional<Integer> readMcuSerial(
final SerialPortScanner.PortResult ecuPort,
final UpdateOperationCallbacks callbacks
) {
return BinaryProtocolExecutor.executeWithSuspendedPortScanner(
ecuPort.port,
callbacks,
(binaryProtocol) -> {
try {
return readMcuSerial(binaryProtocol, callbacks);
} catch (final Exception e) {
log.error("Reading `MCUSERIAL` output channel failed:", e);
callbacks.logLine("Reading `MCUSERIAL` output channel failed");
return Optional.empty();
}
},
Optional.empty(),
false
);
}
private static Optional<Integer> readMcuSerial(
final BinaryProtocol binaryProtocol,
final UpdateOperationCallbacks callbacks
) {
callbacks.logLine("Reading `MCUSERIAL` output channel...");
Optional<Integer> result = Optional.empty();
final IniField mcuSerialField = PanamaHelper.getIniField(binaryProtocol);
if (mcuSerialField != null) {
final AtomicInteger mcuSerial = new AtomicInteger();
SensorCentral.getInstance().addListener(() -> {
mcuSerial.set(PanamaHelper.getMcuSerial(mcuSerialField));
});
if (binaryProtocol.requestOutputChannels()) {
callbacks.logLine(String.format("`MCUSERIAL` is %d", mcuSerial.get()));
result = Optional.of(mcuSerial.get());
} else {
callbacks.logLine("Failed to request output channels...");
}
} else {
callbacks.logLine("Please update firmware to use this feature...");
}
return result;
}
}

View File

@ -1,7 +1,9 @@
package com.rusefi.maintenance; package com.rusefi.maintenance;
import com.opensr5.ini.field.IniField;
import com.rusefi.SerialPortScanner; import com.rusefi.SerialPortScanner;
import com.rusefi.binaryprotocol.BinaryProtocolLocalCache; import com.rusefi.binaryprotocol.BinaryProtocolLocalCache;
import com.rusefi.config.generated.TsOutputs;
import com.rusefi.io.UpdateOperationCallbacks; import com.rusefi.io.UpdateOperationCallbacks;
import com.rusefi.panama.PanamaClient; import com.rusefi.panama.PanamaClient;
import com.rusefi.ui.basic.InstanceNameEditor; import com.rusefi.ui.basic.InstanceNameEditor;
@ -39,13 +41,12 @@ public enum TuneUploader {
return false; return false;
} }
// todo! final Optional<Integer> receivedMcuSerial = OutputChannelsHelper.readMcuSerial(ecuPort, callbacks);
// IniField mcuSerialField = PanamaHelper.getIniField(linkManager); if (!receivedMcuSerial.isPresent()) {
// if (mcuSerialField == null) { callbacks.logLine("Failed to read `MCUSERIAL` output channel");
// addMessage("Please update firmware to use this feature"); return false;
// return; }
// } final int mcuSerial = receivedMcuSerial.get();
int mcuSerial = 1231234; // todo
final String calibrationsToUploadFileName = CALIBRATIONS_TO_UPLOAD_FILE_NAME + ".msq"; final String calibrationsToUploadFileName = CALIBRATIONS_TO_UPLOAD_FILE_NAME + ".msq";
if (PanamaClient.uploadFile(panamaUrl, if (PanamaClient.uploadFile(panamaUrl,
@ -54,18 +55,20 @@ public enum TuneUploader {
mcuSerial mcuSerial
)) { )) {
callbacks.logLine(String.format( callbacks.logLine(String.format(
"File `%s` is successfully uploaded to `%s` for `%s`", "File `%s` is successfully uploaded to `%s` for `%s` (MCUSERIAL=%d)",
calibrationsToUploadFileName, calibrationsToUploadFileName,
panamaUrl, panamaUrl,
instanceName instanceName,
mcuSerial
)); ));
result = true; result = true;
} else { } else {
callbacks.logLine(String.format( callbacks.logLine(String.format(
"Failed to upload file `%s` to `%s` for `%s`", "Failed to upload file `%s` to `%s` for `%s` (MCUSERIAL=%d)",
calibrationsToUploadFileName, calibrationsToUploadFileName,
panamaUrl, panamaUrl,
instanceName instanceName,
mcuSerial
)); ));
} }
return result; return result;