diff --git a/pom.xml b/pom.xml index c9b2ee0..87bf403 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ JavaUSBTool javausbtool - 0.3-SNAPSHOT + 0.4-SNAPSHOT https://github.com/developersu/javausbtool/ diff --git a/src/main/java/javausbtool/AppPreferences.java b/src/main/java/javausbtool/AppPreferences.java index e1b2942..fd56495 100644 --- a/src/main/java/javausbtool/AppPreferences.java +++ b/src/main/java/javausbtool/AppPreferences.java @@ -63,4 +63,7 @@ public class AppPreferences { public int getReadBufferSize(){ return preferences.getInt("read_buffer_size", 512); } public void setReadBufferSize(int value){ preferences.putInt("read_buffer_size", value); } + + public boolean getBufAsHex(){ return preferences.getBoolean("buf_as_hex", false); } + public void setBufAsHex(boolean value){preferences.putBoolean("buf_as_hex", value);} } \ No newline at end of file diff --git a/src/main/java/javausbtool/JFXMain.java b/src/main/java/javausbtool/JFXMain.java index 34f48ed..7aa81a4 100644 --- a/src/main/java/javausbtool/JFXMain.java +++ b/src/main/java/javausbtool/JFXMain.java @@ -28,7 +28,7 @@ import javausbtool.controllers.LandingPageController; public class JFXMain extends Application { - public static final String appVersion = "v0.3"; + public static final String appVersion = "v0.4"; @Override public void start(Stage primaryStage) throws Exception{ diff --git a/src/main/java/javausbtool/controllers/LandingPageController.java b/src/main/java/javausbtool/controllers/LandingPageController.java index 13b351f..4d9c506 100644 --- a/src/main/java/javausbtool/controllers/LandingPageController.java +++ b/src/main/java/javausbtool/controllers/LandingPageController.java @@ -46,7 +46,7 @@ public class LandingPageController implements Initializable { readBufferSizeTf; @FXML - private Label saveToLbl, sendFileLbl; + private Label saveToLbl, sendFileLbl, decHexReprLbl; @FXML private CheckBox handleKernelDrvDetachCb, @@ -60,6 +60,9 @@ public class LandingPageController implements Initializable { private RadioButton readOnStartRb, writeOnStartRb; + @FXML + private MenuButton dexHexMenuItem; + private String previouslyOpenedPath; private File writeOnStartFile; private Task usbCommunications; @@ -77,14 +80,89 @@ public class LandingPageController implements Initializable { handleKernelDrvDetachCb.setSelected(pref.getHandleKernelDrvAutoDetach()); mandatorySoftResetCb.setSelected(pref.getSoftResetOnHandle()); - readBufferSizeTf.setText(Integer.toString(pref.getReadBufferSize())); + if (pref.getBufAsHex()) + readBufferSizeTf.setText(String.format("%x", pref.getReadBufferSize())); + else + readBufferSizeTf.setText(String.format("%d", pref.getReadBufferSize())); vidTf.setTextFormatter(getNumericTextFormatter()); pidTf.setTextFormatter(getNumericTextFormatter()); devConfigurationTf.setTextFormatter(getNumericTextFormatter()); devConfigurationTf.setTextFormatter(getNumericTextFormatter()); - readBufferSizeTf.setTextFormatter(getNumericTextFormatter()); + MenuItem decItem = new MenuItem("Dec"); + decItem.setOnAction(event -> { + dexHexMenuItem.setText("Dec"); + + String oldValue = decHexReprLbl.getText(); + + readBufferSizeTf.setTextFormatter(new TextFormatter<>(change -> { + String text = change.getControlNewText(); + if (text.matches("^[0-9]{0,}$")) { + if (! text.isEmpty()) { + try { + decHexReprLbl.setText(String.format("0x%x", Integer.parseInt(text))); + } + catch (Exception e){ + return null; + } + } + return change; + } + return null; + })); + + if (! oldValue.isEmpty()){ + try { + int val = Integer.parseInt(oldValue, 10); + readBufferSizeTf.setText(Integer.toString(val)); + decHexReprLbl.setText(String.format("0x%x", val)); + } + catch (Exception e){ + readBufferSizeTf.setText("0"); + decHexReprLbl.setText("0x0"); + } + } + }); + MenuItem hexItem = new MenuItem("Hex"); + + hexItem.setOnAction(event -> { + dexHexMenuItem.setText("Hex"); + + String oldValue = decHexReprLbl.getText(); + + readBufferSizeTf.setTextFormatter(new TextFormatter<>(change -> { + String text = change.getControlNewText(); + if (text.matches("^[0-9a-fA-F]{0,}$")) { + if (! text.isEmpty() ) { + try { + decHexReprLbl.setText(String.format("%d", Integer.parseInt(text, 16))); + } + catch (Exception e){ + return null; + } + } + return change; + } + return null; + })); + + if (! oldValue.isEmpty()){ + try { + int val = Integer.decode(oldValue); + readBufferSizeTf.setText(String.format("%x", val)); + decHexReprLbl.setText(Integer.toString(val)); + } + catch (Exception e){ + e.printStackTrace(); + readBufferSizeTf.setText("0"); + decHexReprLbl.setText("0"); + } + } + }); + + dexHexMenuItem.getItems().add(decItem); + dexHexMenuItem.getItems().add(hexItem); saveToLbl.setText(pref.getSaveTo()); changeSaveToBtn.setOnAction(event -> setSaveToFolder()); @@ -99,6 +177,11 @@ public class LandingPageController implements Initializable { startBtn.setOnAction(event -> startProcess()); stopBtn.setOnAction(event -> stopProcess()); + + if (pref.getBufAsHex()) + hexItem.fire(); + else + decItem.fire(); } private TextFormatter getNumericTextFormatter(){ @@ -109,6 +192,12 @@ public class LandingPageController implements Initializable { }); } + private int getBufferSize() throws NumberFormatException { + if (dexHexMenuItem.getText().equals("Dec")) + return Integer.parseInt(readBufferSizeTf.getText()); + return Integer.parseInt(readBufferSizeTf.getText(), 16); + } + private void setSaveToFolder() { DirectoryChooser dirChooser = new DirectoryChooser(); dirChooser.setTitle("Save files to..."); @@ -140,6 +229,8 @@ public class LandingPageController implements Initializable { } private void startProcess(){ + System.out.println(getBufferSize()); + logArea.clear(); if (writeOnStartRb.isSelected() && writeOnStartFile == null){ logArea.appendText("'Write on start' option selected but no file defined\n"); @@ -158,7 +249,7 @@ public class LandingPageController implements Initializable { Integer.parseInt(devConfigurationTf.getText()), handleKernelDrvDetachCb.isSelected(), mandatorySoftResetCb.isSelected(), - Integer.parseInt(readBufferSizeTf.getText()), + getBufferSize(), saveToLbl.getText(), readOnStartRb.isSelected(), writeOnStartFile @@ -211,9 +302,11 @@ public class LandingPageController implements Initializable { pref.setSaveTo(saveToLbl.getText()); try { - if ((intValue = Integer.parseInt(readBufferSizeTf.getText())) > 0) + if ( (intValue = getBufferSize()) > 0) pref.setReadBufferSize(intValue); } catch (NumberFormatException e){ e.printStackTrace(); } + + pref.setBufAsHex(dexHexMenuItem.getText().equals("Hex")); } } diff --git a/src/main/java/javausbtool/usb/UsbLoop.java b/src/main/java/javausbtool/usb/UsbLoop.java index 2a1d2c6..4f7d103 100644 --- a/src/main/java/javausbtool/usb/UsbLoop.java +++ b/src/main/java/javausbtool/usb/UsbLoop.java @@ -29,9 +29,6 @@ import java.nio.IntBuffer; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -/** - * Tinfoil processing - * */ class UsbLoop { private LogPrinter logPrinter; @@ -55,7 +52,7 @@ class UsbLoop { this.readBufferCapacity = readBufferCapacity; this.readCounter = 0; - logPrinter.print("============= UsbProtocol ============="); + logPrinter.print("============= USB ============="); this.saveRepliesFolder = new File(saveRepliesTo+File.separator+ LocalTime.now().format(DateTimeFormatter.ofPattern("HH-mm-ss"))); saveRepliesFolder.mkdirs(); diff --git a/src/main/resources/landingPage.fxml b/src/main/resources/landingPage.fxml index 123ab4c..331d712 100644 --- a/src/main/resources/landingPage.fxml +++ b/src/main/resources/landingPage.fxml @@ -4,6 +4,7 @@ + @@ -70,13 +71,15 @@ - + - +