altoslib: Flush settings restoration commands after accel cal
[fw/altos] / altoslib / AltosDebug.java
index 76c13d57a399187079d9d4f0820eaedf4a36fa22..24a2593303c0f4bc16bbee37debaf73527208d83 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -15,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_2;
+package org.altusmetrum.altoslib_12;
 
 import java.io.*;
 
@@ -52,17 +53,14 @@ public class AltosDebug {
        public static final byte GET_CHIP_ID =          0x68;
 
 
-       AltosLink       link;
+       private AltosLink       link;
 
        boolean debug_mode;
 
-       void ensure_debug_mode() {
+       void ensure_debug_mode() throws InterruptedException {
                if (!debug_mode) {
                        link.printf("D\n");
-                       try {
-                               link.flush_input();
-                       } catch (InterruptedException ie) {
-                       }
+                       link.flush_input();
                        debug_mode = true;
                }
        }
@@ -81,13 +79,16 @@ public class AltosDebug {
        }
 
        public void close() {
-               link.close();
+               try {
+                       link.close();
+               } catch (InterruptedException ie) {
+               }
        }
 
        /*
         * Write target memory
         */
-       public void write_memory(int address, byte[] bytes, int start, int len) {
+       public void write_memory(int address, byte[] bytes, int start, int len) throws InterruptedException {
                ensure_debug_mode();
 //             dump_memory("write_memory", address, bytes, start, len);
                link.printf("O %x %x\n", len, address);
@@ -95,7 +96,7 @@ public class AltosDebug {
                        link.printf("%02x", bytes[start + i]);
        }
 
-       public void write_memory(int address, byte[] bytes) {
+       public void write_memory(int address, byte[] bytes) throws InterruptedException {
                write_memory(address, bytes, 0, bytes.length);
        }
 
@@ -112,7 +113,11 @@ public class AltosDebug {
                int i = 0;
                int start = 0;
                while (i < length) {
-                       String  line = link.get_reply().trim();
+                       String  line = link.get_reply();
+                       if (line == null)
+                               throw new IOException("No reply");
+
+                       line = line.trim();
                        if (!AltosLib.ishex(line) || line.length() % 2 != 0)
                                throw new IOException(
                                        String.format
@@ -132,7 +137,7 @@ public class AltosDebug {
        /*
         * Write raw bytes to the debug link using the 'P' command
         */
-       public void write_bytes(byte[] bytes) throws IOException {
+       public void write_bytes(byte[] bytes) throws IOException, InterruptedException {
                int i = 0;
                ensure_debug_mode();
                while (i < bytes.length) {
@@ -147,7 +152,7 @@ public class AltosDebug {
                }
        }
 
-       public void write_byte(byte b) throws IOException {
+       public void write_byte(byte b) throws IOException, InterruptedException {
                byte[] bytes = { b };
                write_bytes(bytes);
        }
@@ -257,12 +262,12 @@ public class AltosDebug {
                return true;
        }
 
-       public AltosRomconfig romconfig() {
+       public AltosRomconfig romconfig() throws InterruptedException {
                try {
                        byte[] bytes = read_memory(0xa0, 10);
-                       return new AltosRomconfig(bytes, 0);
+                       AltosHexfile hexfile = new AltosHexfile (bytes, 0xa0);
+                       return new AltosRomconfig(hexfile);
                } catch (IOException ie) {
-               } catch (InterruptedException ie) {
                }
                return new AltosRomconfig();
        }
@@ -277,4 +282,4 @@ public class AltosDebug {
        public AltosDebug (AltosLink link) {
                this.link = link;
        }
-}
\ No newline at end of file
+}