+
+ class flash_task implements Runnable {
+ AltosFlashUI ui;
+ Thread t;
+ AltosFlash flash;
+
+ public void run () {
+ try {
+ flash = new AltosFlash(ui.file, ui.debug_dongle);
+ flash.addActionListener(ui);
+
+ final AltosRomconfig current_config = flash.romconfig();
+
+ final Semaphore await_rom_config = new Semaphore(0);
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ ui.flash = flash;
+ ui.update_rom_config_info(current_config);
+ System.out.printf("Done updating rom config info\n");
+ await_rom_config.release();
+ }
+ });
+ System.out.printf("Waiting for rom configuration updates\n");
+ await_rom_config.acquire();
+ System.out.printf("Got rom config update\n");
+
+ if (ui.rom_config != null) {
+ System.out.printf("rom_config not null\n");
+ flash.set_romconfig(ui.rom_config);
+ flash.flash();
+ }
+ } catch (InterruptedException ee) {
+ final Exception e = ee;
+ System.out.printf("exception %s\n", e.toString());
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ ui.exception(e);
+ }
+ });
+ } catch (IOException ee) {
+ final Exception e = ee;
+ System.out.printf("exception %s\n", e.toString());
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ ui.exception(e);
+ }
+ });
+ } catch (AltosSerialInUseException ee) {
+ final Exception e = ee;
+ System.out.printf("exception %s\n", e.toString());
+ SwingUtilities.invokeLater(new Runnable() {
+ public void run() {
+ ui.exception(e);
+ }
+ });
+ } finally {
+ if (flash != null)
+ flash.close();
+ }
+ }
+
+ public flash_task(AltosFlashUI in_ui) {
+ ui = in_ui;
+ t = new Thread(this);
+ t.start();
+ }
+ }
+
+ flash_task flasher;
+
+ /*
+ * Execute the steps for flashing
+ * a device. Note that this returns immediately;
+ * this dialog is not modal
+ */
+ void showDialog() {
+ if (!select_debug_dongle())
+ return;
+ if (!select_source_file())
+ return;
+ build_dialog();
+ flash_task f = new flash_task(this);
+ }
+
+ static void show(JFrame frame) {
+ AltosFlashUI ui = new AltosFlashUI(frame);
+
+ ui.showDialog();
+ }
+
+ public AltosFlashUI(JFrame in_frame) {
+ super(in_frame, "Program Altusmetrum Device", false);
+
+ frame = in_frame;
+ }