]> localhost Git - scsi2sd-util.git/commitdiff
Add progress bar while writing an image
authorMichael McMaster <michael@codesrc.com>
Mon, 5 Apr 2021 10:09:11 +0000 (20:09 +1000)
committerMichael McMaster <michael@codesrc.com>
Mon, 5 Apr 2021 10:09:11 +0000 (20:09 +1000)
scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/IProgress.java [new file with mode: 0644]
scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/UsbDevice.java
scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V3FirmwareUsbDevice.java
scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V6FirmwareUsbDevice.java
scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/model/DiskConfig.java
scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/MainController.java

diff --git a/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/IProgress.java b/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/IProgress.java
new file mode 100644 (file)
index 0000000..bbc0f81
--- /dev/null
@@ -0,0 +1,5 @@
+package com.codesrc.scsi2sd.io;
+
+public interface IProgress {
+    void ReportProgress(double progress);
+}
index 5590f11d05c8871d5f3809af306af921f8298b6d..36c6c8adf94b63f8bbf87755f5d198e58d4f5133 100644 (file)
@@ -41,7 +41,7 @@ public interface UsbDevice {
     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();
index 695967319fd6b00b6bd00602152d6fd49c0f29bd..75d4871b512e74626f9a918a617be5aa64b51b36 100644 (file)
@@ -276,7 +276,7 @@ public class V3FirmwareUsbDevice implements UsbDevice {
     }
 
     @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
@@ -303,10 +303,11 @@ public class V3FirmwareUsbDevice implements UsbDevice {
         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];
index 62fb84e638551fa91f6672538326af7561d2d4bc..622df6c0621c479325a48cb07f1118917a38dd68 100644 (file)
@@ -174,7 +174,7 @@ public class V6FirmwareUsbDevice implements UsbDevice {
     }
 
     @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");
     }
index cb0a587e80f2e1eef592c68b3d3d33e84a9dfd92..8d03c33a97606214fe37a5ab3381b08403abe741 100644 (file)
@@ -450,6 +450,15 @@ public class DiskConfig {
         } 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");
@@ -562,6 +571,14 @@ public class DiskConfig {
             .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")
index d427b6f88a009fd276038ef081361972182ccd03..ef8ec64640af7e27b12c2e3d2572bb1ac1cb0b62 100644 (file)
@@ -28,10 +28,15 @@ import com.codesrc.scsi2sd.model.DiskConfig;
 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;
 
@@ -109,7 +114,7 @@ public class MainController implements FXController, DocumentObserver {
        {
                URL stylesheet = MainController.class.getResource("/css/main.css");
                scene.getStylesheets().add(stylesheet.toString());
-       }
+    }
 
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -416,6 +421,8 @@ public class MainController implements FXController, DocumentObserver {
 
     private void loadDefault()
     {
+        writeImageToDevice();
+
         var root = new ConfigRoot();
         root.setBoardConfig(new BoardConfig());
         root.setDiskList(new DiskList(2l*1024*1024*1024/512));
@@ -476,18 +483,39 @@ public class MainController implements FXController, DocumentObserver {
             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();
         }
     }
 }