]> localhost Git - scsi2sd-util.git/commitdiff
Fixes for v3/4/5 reconnection
authorMichael McMaster <michael@codesrc.com>
Tue, 16 Mar 2021 13:14:28 +0000 (23:14 +1000)
committerMichael McMaster <michael@codesrc.com>
Tue, 16 Mar 2021 13:14:28 +0000 (23:14 +1000)
scsi2sd.io/scsi2sd.io.iml
scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/UsbDeviceManagerImpl.java
scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V3FirmwareUsbDevice.java
scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/MainController.java
scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/StatusTabController.java
scsi2sd.ui/src/main/resources/fx/statusTab.fxml

index 3e40fe60b1343c5c3aa591f24253587e075d4263..d415012fa202b0ec06e9131a702527a2e52fcc14 100644 (file)
@@ -6,6 +6,7 @@
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
index 5d3dd7ba43a5169060c26f3c3e0a830aacddd9da..410b461a1b5b38b939c160a3dec40e3d3f6f8824 100755 (executable)
@@ -161,7 +161,8 @@ class UsbDeviceManagerImpl implements UsbDeviceManager, HidServicesListener, Usb
     private void detached(HidDevice hidDevice) {
         UsbDevice attachedDevice = hidDevices.get(hidDevice);
         if (attachedDevice != null) {
-            hidDevices.remove(attachedDevice);
+            // UI only supports one device for now
+            hidDevices.clear();
 
             LOGGER.info("Detached SCSI2SD");
 
index faad4e4ea1ca69d88342c11d194990a1fe8b6646..695967319fd6b00b6bd00602152d6fd49c0f29bd 100644 (file)
@@ -208,7 +208,7 @@ public class V3FirmwareUsbDevice implements UsbDevice {
                     new StorageDevice(
                             this.storageDeviceList.size(),
                             devTypeEnum,
-                            capacity * 512L,
+                            capacity,
                             devTypeEnum == StorageDeviceType.NOR_FLASH
                     )
             );
@@ -317,7 +317,6 @@ public class V3FirmwareUsbDevice implements UsbDevice {
             writeCmd[4] = HidPacketProtocol.intToUint8(sector >> 8); // Sector number
             writeCmd[5] = HidPacketProtocol.intToUint8(sector); // Sector number
 
-            var buf = new byte[512];
             is.readNBytes(writeCmd, 6, 512);
 
             protocolDevice.sendHIDPacket(writeCmd, 1);
index 949426370b8335722b0cab60278198e057300051..d427b6f88a009fd276038ef081361972182ccd03 100644 (file)
@@ -191,7 +191,7 @@ public class MainController implements FXController, DocumentObserver {
             configs.add(disk);
         }
 
-        var sdCapacity = device.getSdCapacity();
+        var sdCapacity = device.getStorageDevices().get(0).get_capacity();
         var fallbackSize = Math.max(2l*1024*1024*1024/512, lastSectorUsed + DiskList.reservedSize);
         var diskList = new DiskList(sdCapacity > 0 ? sdCapacity : fallbackSize);
         configs.forEach(c -> diskList.add(c));
@@ -312,12 +312,12 @@ public class MainController implements FXController, DocumentObserver {
                 root.setBoardConfig(boardConfig);
 
                 int maxDisks = 7;
-                var sdCapacity = 0;
+                long sdCapacity = 0;
                 List<UsbDevice> deviceList = this.usbDeviceManager.getDevices();
                 if (!deviceList.isEmpty())
                 {
                     maxDisks = deviceList.get(0).getMaxDisks();
-                    sdCapacity = deviceList.get(0).getSdCapacity();
+                    sdCapacity = deviceList.get(0).getStorageDevices().get(0).get_capacity();
                 }
 
                 var lastSectorUsed = 0l;
@@ -462,6 +462,11 @@ public class MainController implements FXController, DocumentObserver {
 
     private void writeImageToDevice()
     {
+        List<UsbDevice> deviceList = this.usbDeviceManager.getDevices();
+        if (deviceList.isEmpty()) {
+            return;
+        }
+
         FileChooser fileChooser = new FileChooser();
         fileChooser.setTitle("Open disk image");
 
@@ -472,7 +477,11 @@ public class MainController implements FXController, DocumentObserver {
         }
 
         try {
-            this.getDevice().writeImage(theFile, 0);
+            // TODO allow selection of device.
+            this.getDevice().writeImage(
+                    deviceList.get(0).getStorageDevices().size() - 1,
+                    theFile,
+                    0);
 
         } catch (Exception e) {
             Alert alert = new Alert(Alert.AlertType.ERROR);
index 7248fddad0c7dfce269e0066a5543937429001f5..cd5d1722de58803d2a40bdce5a30b0cb417a6764 100644 (file)
@@ -41,6 +41,7 @@ public class StatusTabController implements FXController {
     @FXML private Label hwVersion;
     @FXML private Label fwVersion;
     @FXML private Label sdCapacity;
+    @FXML private Label flashCapacity;
 
     public StatusTabController(ScreensConfiguration screens, UsbDeviceManager usbDeviceManager) {
         this.screens = screens;
@@ -82,15 +83,32 @@ public class StatusTabController implements FXController {
         hwVersion.setText(device.getHardwareDescription());
         fwVersion.setText(device.getFirmwareDescription());
 
+        showCapacity(device, StorageDeviceType.SD, sdCapacity);
+        showCapacity(device, StorageDeviceType.NOR_FLASH, flashCapacity);
+    }
+
+    private void showCapacity(UsbDevice device, StorageDeviceType storageDeviceType, Label label) {
         StringBuilder sdSizeStr = new StringBuilder();
-        long sectors = device.getSdCapacity();
-        float gbSize = sectors * 512.0f / 1024 / 1024 / 1024;
-        sdSizeStr.append(String.format("%.1f", gbSize)).append("GiB")
-                .append(" (").append(sectors).append(" sectors)");
-        if (sectors < (2 * 1024 * 1024 *1024 / 512)) {
+        var storageDevices = device.getStorageDevices();
+        long sectors = storageDevices.stream()
+                .filter(sd -> sd.get_storageDeviceType() == storageDeviceType)
+                .map(sd -> sd.get_capacity())
+                .reduce(0l, Long::sum);
+
+        if (sectors >= 2097152) {
+            float gbSize = sectors * 512.0f / 1024 / 1024 / 1024;
+            sdSizeStr.append(String.format("%.1f", gbSize)).append("GiB");
+        } else {
+            float mbSize = sectors * 512.0f / 1024 / 1024;
+            sdSizeStr.append(String.format("%.1f", mbSize)).append("MiB");
+        }
+
+        sdSizeStr.append(" (").append(sectors).append(" sectors)");
+        if (storageDeviceType == StorageDeviceType.SD &&
+                sectors < (2 * 1024 * 1024 *1024 / 512)) {
             sdSizeStr.append(" ! Obsolete Card");
         }
-        sdCapacity.setText(sdSizeStr.toString());
+        label.setText(sdSizeStr.toString());
     }
 
     public void handleUsbDisconnected(UsbDeviceDisconnectedEvent usbDeviceDisconnectedEvent) {
index 1210aafbe1cbcd85b7389383cafbe5d79ab5da2e..8f476126daa3ad00d9a59e8d65eba4fd5ff81887 100644 (file)
                 <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                 <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
                 <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
             </rowConstraints>
             <children>
                 <Label text="Status" />
                 <Label alignment="TOP_LEFT" text="Hardware Version" GridPane.rowIndex="1" />
                 <Label text="Firmware Version" GridPane.rowIndex="2" />
                 <Label text="SD Capacity" GridPane.rowIndex="3" />
+                <Label text="NOR Flash Capacity" GridPane.rowIndex="4" />
 
                 <Label text="-" fx:id="status" GridPane.columnIndex="1" />
 
@@ -30,6 +32,8 @@
                 <Label text="-" fx:id="hwVersion" GridPane.columnIndex="1" GridPane.rowIndex="1" />
 
                 <Label text="-" fx:id="sdCapacity" GridPane.columnIndex="1" GridPane.rowIndex="3" />
+                <Label text="-" fx:id="flashCapacity" GridPane.columnIndex="1" GridPane.rowIndex="4" />
+
             </children>
         </GridPane>
     </children>