From: Michael McMaster Date: Tue, 16 Mar 2021 13:14:28 +0000 (+1000) Subject: Fixes for v3/4/5 reconnection X-Git-Url: http://git.codesrc.com/gitweb.cgi?a=commitdiff_plain;h=9d3f16bab2261039dbe31be856cfde122e232b10;p=scsi2sd-util.git Fixes for v3/4/5 reconnection --- diff --git a/scsi2sd.io/scsi2sd.io.iml b/scsi2sd.io/scsi2sd.io.iml index 3e40fe6..d415012 100644 --- a/scsi2sd.io/scsi2sd.io.iml +++ b/scsi2sd.io/scsi2sd.io.iml @@ -6,6 +6,7 @@ + diff --git a/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/UsbDeviceManagerImpl.java b/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/UsbDeviceManagerImpl.java index 5d3dd7b..410b461 100755 --- a/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/UsbDeviceManagerImpl.java +++ b/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/UsbDeviceManagerImpl.java @@ -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"); diff --git a/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V3FirmwareUsbDevice.java b/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V3FirmwareUsbDevice.java index faad4e4..6959673 100644 --- a/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V3FirmwareUsbDevice.java +++ b/scsi2sd.io/src/main/java/com/codesrc/scsi2sd/io/V3FirmwareUsbDevice.java @@ -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); diff --git a/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/MainController.java b/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/MainController.java index 9494263..d427b6f 100644 --- a/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/MainController.java +++ b/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/MainController.java @@ -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 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 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); diff --git a/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/StatusTabController.java b/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/StatusTabController.java index 7248fdd..cd5d172 100644 --- a/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/StatusTabController.java +++ b/scsi2sd.ui/src/main/java/com/codesrc/scsi2sd/presentation/StatusTabController.java @@ -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) { diff --git a/scsi2sd.ui/src/main/resources/fx/statusTab.fxml b/scsi2sd.ui/src/main/resources/fx/statusTab.fxml index 1210aaf..8f47612 100644 --- a/scsi2sd.ui/src/main/resources/fx/statusTab.fxml +++ b/scsi2sd.ui/src/main/resources/fx/statusTab.fxml @@ -16,12 +16,14 @@ +