Buffer size could be set as hex value

This commit is contained in:
Dmitry Isaenko 2020-05-07 00:20:17 +03:00
parent abd52d5c0b
commit d3a399c59f
6 changed files with 110 additions and 14 deletions

View file

@ -8,7 +8,7 @@
<name>JavaUSBTool</name>
<artifactId>javausbtool</artifactId>
<version>0.3-SNAPSHOT</version>
<version>0.4-SNAPSHOT</version>
<url>https://github.com/developersu/javausbtool/</url>
<description>

View file

@ -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);}
}

View file

@ -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{

View file

@ -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<Void> 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"));
}
}

View file

@ -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();

View file

@ -4,6 +4,7 @@
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.MenuButton?>
<?import javafx.scene.control.ProgressBar?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.Separator?>
@ -70,13 +71,15 @@
</children>
</HBox>
<Separator prefWidth="200.0" />
<HBox alignment="CENTER_LEFT" spacing="5.0">
<HBox alignment="CENTER_LEFT" spacing="8.0">
<children>
<Label text="NS read buffer size:" />
<Label text="NS read buffer size (bytes):" />
<TextField fx:id="readBufferSizeTf" />
<Label text="(e.g. 512 or 4096)" />
<MenuButton fx:id="dexHexMenuItem" mnemonicParsing="false" prefWidth="80.0" />
<Label fx:id="decHexReprLbl" prefWidth="150.0" />
</children>
</HBox>
<HBox alignment="CENTER_LEFT" spacing="5.0" />
<RadioButton fx:id="readOnStartRb" mnemonicParsing="false" text="Read on start" />
<HBox alignment="CENTER_LEFT" spacing="5.0">
<children>