* 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.*;
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
File file;
// Debug connection
- AltosDevice device;
+ AltosUSBDevice device;
AltosLink link;
"telemetrum-v1",
"telemini-v1",
"telenano",
- "teleshield",
- "teleterra"
+ "teleshield"
};
private static final String[] pair_programmed_devices = {
"TeleMetrum-v1",
"TeleMini-v1",
"TeleNano",
- "TeleShield",
- "TeleTerra"
+ "TeleShield"
};
private boolean is_pair_programmed() {
}
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) {
}
}
- 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();
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);
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;
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),
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() {
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()));
}
if (!matched) {
System.out.printf("Identified new device %s\n", d.toShortString());
- device = d;
+ device = (AltosUSBDevice) d;
+ new_device = true;
break;
}
}