summaryrefslogtreecommitdiff
path: root/altosuilib/AltosFlashUI.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2018-10-20 17:29:36 -0700
committerKeith Packard <keithp@keithp.com>2018-10-20 17:31:57 -0700
commit48e221cca00c9f925ff57588dd782842705f7a23 (patch)
treeeb64bb356655472f56589b074b74f1112b63772b /altosuilib/AltosFlashUI.java
parent345e3c37a1cf619392b54589bb91b4caf7844810 (diff)
altoslib: When flashing hardware, pull USB data from device if needed
If we fail to extract USB vid/pid and product values from the device ROM, use the data discovered over USB when the device was originally discovered. Also, use the USB product to select appropriate .ihx files instead of only using the USB vid/pid. This will help people avoid using the wrong file when reflashing devices. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosuilib/AltosFlashUI.java')
-rw-r--r--altosuilib/AltosFlashUI.java44
1 files changed, 20 insertions, 24 deletions
diff --git a/altosuilib/AltosFlashUI.java b/altosuilib/AltosFlashUI.java
index b91776aa..ffb39b8c 100644
--- a/altosuilib/AltosFlashUI.java
+++ b/altosuilib/AltosFlashUI.java
@@ -45,7 +45,7 @@ public class AltosFlashUI
File file;
// Debug connection
- AltosDevice device;
+ AltosUSBDevice device;
AltosLink link;
@@ -205,14 +205,20 @@ public class AltosFlashUI
}
static class AltosHexfileFilter extends javax.swing.filechooser.FileFilter {
- int product;
String head;
String description;
- public AltosHexfileFilter(int product, String head, String description) {
- this.product = product;
- this.head = head;
- this.description = description;
+ public AltosHexfileFilter(String usb_product) {
+ int l;
+
+ /* Trim off any trailing variants (1.0a vs 1.0) */
+ for (l = usb_product.length(); l > 0; l--) {
+ char c = usb_product.charAt(l-1);
+ if (c < 'a' || 'z' < c)
+ break;
+ }
+ head = usb_product.substring(0, l).toLowerCase();
+ description = String.format("%s Image File", usb_product);
}
public boolean accept(File file) {
@@ -224,14 +230,6 @@ public class AltosFlashUI
}
}
- static AltosHexfileFilter[] filters = {
- new AltosHexfileFilter(AltosLib.product_telemetrum, "telemetrum", "TeleMetrum Image"),
- new AltosHexfileFilter(AltosLib.product_teledongle, "teledongle", "TeleDongle Image"),
- new AltosHexfileFilter(AltosLib.product_telemega, "telemega", "TeleMega Image"),
- new AltosHexfileFilter(AltosLib.product_easymini, "easymini", "EasyMini Image"),
- new AltosHexfileFilter(AltosLib.product_easymega, "easymega", "EasyMega Image"),
- };
-
boolean select_source_file() {
JFileChooser hexfile_chooser = new JFileChooser();
@@ -241,18 +239,14 @@ public class AltosFlashUI
hexfile_chooser.setDialogTitle("Select Flash Image");
- for (int i = 0; i < filters.length; i++) {
- hexfile_chooser.addChoosableFileFilter(filters[i]);
- }
javax.swing.filechooser.FileFilter ihx_filter = new FileNameExtensionFilter("Flash Image", "ihx");
hexfile_chooser.addChoosableFileFilter(ihx_filter);
hexfile_chooser.setFileFilter(ihx_filter);
if (!is_pair_programmed() && !device.matchProduct(AltosLib.product_altusmetrum)) {
- for (int i = 0; i < filters.length; i++) {
- if (device != null && device.matchProduct(filters[i].product))
- hexfile_chooser.setFileFilter(filters[i]);
- }
+ AltosHexfileFilter filter = new AltosHexfileFilter(device.usb_product());
+ hexfile_chooser.addChoosableFileFilter(filter);
+ hexfile_chooser.setFileFilter(filter);
}
int returnVal = hexfile_chooser.showOpenDialog(frame);
@@ -270,7 +264,7 @@ public class AltosFlashUI
boolean select_device() {
int product = AltosLib.product_any;
- device = AltosDeviceUIDialog.show(frame, AltosLib.product_any);
+ device = AltosDeviceUIDialog.show_usb(frame, AltosLib.product_any);
if (device == null)
return false;
@@ -393,10 +387,12 @@ public class AltosFlashUI
else
programmer = new AltosSelfFlash(ui.file, link, this);
- final AltosRomconfig current_config = programmer.target_romconfig();
+ final AltosRomconfig current_config = programmer.target_romconfig(device.usb_id(), device.usb_product());
final AltosRomconfig image_config = programmer.image_romconfig();
+ System.out.printf("product %s current %s image %s\n", device.usb_product(), current_config, image_config);
+
final Semaphore await_rom_config = new Semaphore(0);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
@@ -539,7 +535,7 @@ public class AltosFlashUI
}
if (!matched) {
System.out.printf("Identified new device %s\n", d.toShortString());
- device = d;
+ device = (AltosUSBDevice) d;
break;
}
}