X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosuilib%2FAltosFlashUI.java;h=6b78aea7f69a2706a3e2d439159ec2ecfe42a6f5;hb=427e67f9e8914327243c0fdd1379365fe4e03623;hp=b91776aa198ebb120c4b0a633c3a4d21ff1830cf;hpb=c2c7873695ee2dc1b6fd153b67accad9693937aa;p=fw%2Faltos diff --git a/altosuilib/AltosFlashUI.java b/altosuilib/AltosFlashUI.java index b91776aa..6b78aea7 100644 --- a/altosuilib/AltosFlashUI.java +++ b/altosuilib/AltosFlashUI.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altosuilib_13; +package org.altusmetrum.altosuilib_14; import java.awt.*; import java.awt.event.*; @@ -24,7 +24,7 @@ import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_13.*; +import org.altusmetrum.altoslib_14.*; public class AltosFlashUI extends AltosUIDialog @@ -45,7 +45,7 @@ public class AltosFlashUI File file; // Debug connection - AltosDevice device; + AltosUSBDevice device; AltosLink link; @@ -64,8 +64,7 @@ public class AltosFlashUI "telemetrum-v1", "telemini-v1", "telenano", - "teleshield", - "teleterra" + "teleshield" }; private static final String[] pair_programmed_devices = { @@ -78,8 +77,7 @@ public class AltosFlashUI "TeleMetrum-v1", "TeleMini-v1", "TeleNano", - "TeleShield", - "TeleTerra" + "TeleShield" }; private boolean is_pair_programmed() { @@ -133,7 +131,7 @@ public class AltosFlashUI Insets il = new Insets(4,4,4,4); Insets ir = new Insets(4,4,4,4); - pane = getContentPane(); + pane = getScrollablePane(); pane.setLayout(new GridBagLayout()); c = new GridBagConstraints(); @@ -205,14 +203,29 @@ 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; + int dash; + + /* Trim off any trailing variants (1.0a vs 1.0) */ + for (dash = usb_product.length(); dash > 0; dash--) { + char c = usb_product.charAt(dash-1); + if (c == '-') + break; + } + if (dash == 0) + dash = usb_product.length(); + + for (l = usb_product.length(); l > dash; 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 +237,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 +246,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 +271,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; @@ -325,7 +326,7 @@ public class AltosFlashUI return false; } - if (existing_config.radio_calibration_broken) { + if (existing_config != null && existing_config.radio_calibration_broken) { int ret = JOptionPane.showConfirmDialog(this, String.format("Radio calibration value %d may be incorrect\nFlash anyways?", existing_config.radio_calibration), @@ -393,10 +394,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() { @@ -485,12 +488,24 @@ public class AltosFlashUI public void run () { try { AltosLink link = null; + boolean new_device = false; for (;;) { System.out.printf("Attempting to open %s\n", device.toShortString()); - link = new AltosSerial(device); + for (int i = 0; i < 20; i++) { + link = new AltosSerial(device); + + if (link != null) + break; + if (!new_device) + break; + + System.out.printf("Waiting for device to become ready\n"); + + Thread.sleep(1000); + } if (link == null) throw new IOException(String.format("%s: open failed", device.toShortString())); @@ -539,7 +554,8 @@ public class AltosFlashUI } if (!matched) { System.out.printf("Identified new device %s\n", d.toShortString()); - device = d; + device = (AltosUSBDevice) d; + new_device = true; break; } } @@ -630,7 +646,7 @@ public class AltosFlashUI super(in_owner, "Open Flash Target Device", true); owner = in_owner; - Container pane = getContentPane(); + Container pane = getScrollablePane(); GridBagConstraints c = new GridBagConstraints(); Insets i = new Insets(4,4,4,4);