altosuilib: Show a more useful message when the flash target device is unknown
[fw/altos] / altosuilib / AltosFlashUI.java
index 802e8eb3ca764a30589ecff335ad45d73ff90fdb..6dc80272a6772089517ef07bf9da02b0551efd19 100644 (file)
@@ -16,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altosuilib_12;
+package org.altusmetrum.altosuilib_13;
 
 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_12.*;
+import org.altusmetrum.altoslib_13.*;
 
 public class AltosFlashUI
        extends AltosUIDialog
@@ -278,6 +278,12 @@ public class AltosFlashUI
        }
 
        boolean rom_config_matches (AltosRomconfig a, AltosRomconfig b) {
+               if (a == null || b == null)
+                       return (a == null && b == null);
+
+               if (!a.valid || !b.valid)
+                       return false;
+
                if (a.usb_id != null && b.usb_id != null &&
                    (a.usb_id.vid != b.usb_id.vid ||
                     a.usb_id.pid != b.usb_id.pid))
@@ -294,16 +300,27 @@ public class AltosFlashUI
                AltosRomconfig  new_config;
 
                if (!rom_config_matches(existing_config, image_config)) {
-                       int ret = JOptionPane.showConfirmDialog(this,
-                                                               String.format("Device is %04x:%04x %s\nImage is %04x:%04x %s\nFlash anyways?",
-                                                                             existing_config.usb_id.vid,
-                                                                             existing_config.usb_id.pid,
-                                                                             existing_config.usb_product,
-                                                                             image_config.usb_id.vid,
-                                                                             image_config.usb_id.pid,
-                                                                             image_config.usb_product),
-                                                               "Image doesn't match Device",
-                                                               JOptionPane.YES_NO_OPTION);
+                       int ret;
+                       if (existing_config == null || !existing_config.valid) {
+                               ret = JOptionPane.showConfirmDialog(this,
+                                                                   String.format("Cannot determine target device type\nImage is %04x:%04x %s\nFlash anyways?",
+                                                                                 image_config.usb_id.vid,
+                                                                                 image_config.usb_id.pid,
+                                                                                 image_config.usb_product),
+                                                                   "Unknown Target Device",
+                                                                   JOptionPane.YES_NO_OPTION);
+                       } else {
+                               ret = JOptionPane.showConfirmDialog(this,
+                                                                   String.format("Device is %04x:%04x %s\nImage is %04x:%04x %s\nFlash anyways?",
+                                                                                 existing_config.usb_id.vid,
+                                                                                 existing_config.usb_id.pid,
+                                                                                 existing_config.usb_product,
+                                                                                 image_config.usb_id.vid,
+                                                                                 image_config.usb_id.pid,
+                                                                                 image_config.usb_product),
+                                                                   "Image doesn't match Device",
+                                                                   JOptionPane.YES_NO_OPTION);
+                       }
                        if (ret != JOptionPane.YES_OPTION)
                                return false;
                }