--- /dev/null
+package com.codesrc.scsi2sd.io;
+
+public interface IProgress {
+ void ReportProgress(double progress);
+}
void saveDiskConfig(int index, byte[] data);
void saveCommit();
- void writeImage(int deviceId, File file, int sectorStart) throws IOException;
+ void writeImage(int deviceId, File file, int sectorStart, IProgress progress) throws IOException;
boolean supportsTerminator();
boolean supportsSynchronous();
}
@Override
- public void writeImage(int deviceId, File file, int sectorStart) throws IOException
+ public void writeImage(int deviceId, File file, int sectorStart, IProgress progress) throws IOException
{
// Only supported on the flash device
// Erase the flash device
var is = new BufferedInputStream(new FileInputStream(file));
for (int sector = 0; sector < sectors; ++sector) {
+ var percentComplete = ((double) sector) / sectors;
+ progress.ReportProgress(percentComplete);
if (sector % 100 == 0)
{
- var percentComplete = 100.0 * sector / sectors;
- System.out.print(percentComplete);
+ System.out.print(100 * percentComplete);
System.out.println("% complete");
}
byte[] writeCmd = new byte[519];
}
@Override
- public void writeImage(int deviceId, File file, int sectorStart) throws IOException
+ public void writeImage(int deviceId, File file, int sectorStart, IProgress progress) throws IOException
{
throw new UnsupportedOperationException("Not implemented yet");
}
} catch (NumberFormatException e) {
}
+ this.storageDevice = 0;
+ var storageDeviceText = children.getOrDefault("storageDevice", "0");
+ try {
+ var intValue = Integer.valueOf(storageDeviceText);
+ if (intValue >= 0 && intValue < 256) {
+ this.storageDevice = intValue;
+ }
+ } catch (NumberFormatException e) {
+ }
this.sdSectorStart = 0;
var sdSectorStartText = children.getOrDefault("sdSectorStart", "0");
.append(Integer.toString(this.deviceTypeModifier, 16))
.append("</deviceTypeModifier>\n")
+ .append("\n\n")
+ .append(" <!-- ********************************************************\n")
+ .append(" 0 SD.\n")
+ .append(" 1 Flash.\n")
+ .append(" ********************************************************* -->\n")
+ .append(" <storageDevice>").append(this.storageDevice).append("</storageDevice>\n")
+ .append("\n\n")
+
.append("\n\n")
.append(" <!-- ********************************************************\n")
.append(" SD card offset, as a sector number (always 512 bytes).\n")
import com.codesrc.scsi2sd.model.DiskList;
import javafx.application.Platform;
import javafx.fxml.FXML;
+import javafx.geometry.Pos;
+import javafx.scene.Group;
import javafx.scene.control.*;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
+import javafx.stage.Stage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
{
URL stylesheet = MainController.class.getResource("/css/main.css");
scene.getStylesheets().add(stylesheet.toString());
- }
+ }
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
private void loadDefault()
{
+ writeImageToDevice();
+
var root = new ConfigRoot();
root.setBoardConfig(new BoardConfig());
root.setDiskList(new DiskList(2l*1024*1024*1024/512));
return; // User cancelled.
}
+ Stage stage = new Stage();
try {
// TODO allow selection of device.
+
+ //Scene scene = new Scene(this.window.getScene().getRoot(), 300, 75);
+ Scene scene = new Scene(new Group(), 300, 75);
+ stage.setScene(scene);
+ stage.setTitle("Image Progress");
+
+ final ProgressBar pb = new ProgressBar(0);
+ final HBox hb = new HBox();
+ hb.setSpacing(5);
+ hb.setAlignment(Pos.CENTER);
+ hb.getChildren().addAll(new Label("Writing Image"), pb);
+
+ final VBox vb = new VBox();
+ vb.setSpacing(5);
+ vb.getChildren().addAll(new Label(), hb);
+ scene.setRoot(vb);
+ stage.show();
+
this.getDevice().writeImage(
deviceList.get(0).getStorageDevices().size() - 1,
theFile,
0);
-
} catch (Exception e) {
+ e.printStackTrace();
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Imaging failed");
alert.setContentText(e.getLocalizedMessage());
alert.show();
+ } finally {
+ stage.hide();
}
}
}