X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosui%2FAltosFlashUI.java;h=ff9cb95dcc87558b05f5ae79846858232647bc18;hb=d2e6efa810b7fccc5af937386a40ae5af064bf26;hp=7e4cddb12dd0b1cd31b42082b08467cd1c76cb2a;hpb=2cdb90d9214f8e66b3574cbd9c5ed073a7861681;p=fw%2Faltos diff --git a/altosui/AltosFlashUI.java b/altosui/AltosFlashUI.java index 7e4cddb1..ff9cb95d 100644 --- a/altosui/AltosFlashUI.java +++ b/altosui/AltosFlashUI.java @@ -23,7 +23,7 @@ import javax.swing.*; import javax.swing.filechooser.FileNameExtensionFilter; import java.io.*; import java.util.concurrent.*; -import org.altusmetrum.altoslib_2.*; +import org.altusmetrum.altoslib_3.*; import org.altusmetrum.altosuilib_1.*; public class AltosFlashUI @@ -69,9 +69,18 @@ public class AltosFlashUI }; private boolean is_pair_programmed() { - String name = file.getName(); - for (int i = 0; i < pair_programmed.length; i++) { - if (name.startsWith(pair_programmed[i])) + + if (file != null) { + String name = file.getName(); + for (int i = 0; i < pair_programmed.length; i++) { + if (name.startsWith(pair_programmed[i])) + return true; + } + } + if (device != null) { + if (!device.matchProduct(AltosLib.product_altusmetrum) && + (device.matchProduct(AltosLib.product_teledongle) || + device.matchProduct(AltosLib.product_telebt))) return true; } return false; @@ -192,7 +201,7 @@ public class AltosFlashUI } public boolean accept(File file) { - return file.getName().startsWith(head) && file.getName().endsWith(".ihx"); + return !file.isFile() || (file.getName().startsWith(head) && file.getName().endsWith(".ihx")); } public String getDescription() { @@ -222,14 +231,11 @@ public class AltosFlashUI javax.swing.filechooser.FileFilter ihx_filter = new FileNameExtensionFilter("Flash Image", "ihx"); hexfile_chooser.addChoosableFileFilter(ihx_filter); hexfile_chooser.setFileFilter(ihx_filter); - - if (!device.matchProduct(AltosLib.product_altusmetrum)) { + + if (!is_pair_programmed() && !device.matchProduct(AltosLib.product_altusmetrum)) { for (int i = 0; i < filters.length; i++) { - System.out.printf ("device %s filter %d\n", device, filters[i].product); - if (device != null && device.matchProduct(filters[i].product)) { - System.out.printf ("select filter %s\n", filters[i].head); + if (device != null && device.matchProduct(filters[i].product)) hexfile_chooser.setFileFilter(filters[i]); - } } } @@ -241,7 +247,7 @@ public class AltosFlashUI if (file == null) return false; AltosUIPreferences.set_firmwaredir(file.getParentFile()); - + return true; } @@ -359,7 +365,7 @@ public class AltosFlashUI flash_task flasher; - private boolean open_device() { + private boolean open_device() throws InterruptedException { try { link = new AltosSerial(device); if (is_pair_programmed()) @@ -371,7 +377,15 @@ public class AltosFlashUI while (!link.is_loader()) { link.to_loader(); - java.util.List devices = AltosUSBDevice.list(AltosLib.product_altusmetrum); + java.util.List devices = null; + + for (int tries = 0; tries < 10; tries++) { + Thread.sleep(100); + devices = AltosUSBDevice.list(AltosLib.product_altusmetrum); + if (devices.size() != 0) + break; + } + if (devices.size() == 1) device = devices.get(0); else { @@ -402,8 +416,12 @@ public class AltosFlashUI return; if (!select_source_file()) return; - if (!open_device()) + try { + if (!open_device()) + return; + } catch (InterruptedException ie) { return; + } build_dialog(); flash_task f = new flash_task(this); } @@ -419,4 +437,4 @@ public class AltosFlashUI frame = in_frame; } -} \ No newline at end of file +}