altosui: Move serial datastream parser to altoslib
authorKeith Packard <keithp@keithp.com>
Mon, 16 Jul 2012 22:35:11 +0000 (15:35 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 16 Jul 2012 22:35:11 +0000 (15:35 -0700)
instead of having it in altosui

Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosLink.java
altosui/AltosSerial.java

index 779c849606dfe22dfabe2e87b20d538a98ce38f5..d59e73ba6eca2a690da98f0d46e9db7e6c870919 100644 (file)
@@ -24,6 +24,11 @@ import java.util.*;
 import java.text.*;
 
 public abstract class AltosLink {
+
+       public final static int ERROR = -1;
+       public final static int TIMEOUT = -2;
+
+       public abstract int getchar();
        public abstract void print(String data);
        public abstract void close();
 
@@ -88,6 +93,48 @@ public abstract class AltosLink {
        }
 
 
+       public void run () {
+               int c;
+               byte[] line_bytes = null;
+               int line_count = 0;
+
+               try {
+                       for (;;) {
+                               c = getchar();
+                               if (Thread.interrupted())
+                                       break;
+                               if (c == ERROR) {
+                                       add_telem (new AltosLine());
+                                       add_reply (new AltosLine());
+                                       break;
+                               }
+                               if (c == TIMEOUT)
+                                       continue;
+                               if (c == '\r')
+                                       continue;
+                               synchronized(this) {
+                                       if (c == '\n') {
+                                               if (line_count != 0) {
+                                                       add_bytes(line_bytes, line_count);
+                                                       line_count = 0;
+                                               }
+                                       } else {
+                                               if (line_bytes == null) {
+                                                       line_bytes = new byte[256];
+                                               } else if (line_count == line_bytes.length) {
+                                                       byte[] new_line_bytes = new byte[line_count * 2];
+                                                       System.arraycopy(line_bytes, 0, new_line_bytes, 0, line_count);
+                                                       line_bytes = new_line_bytes;
+                                               }
+                                               line_bytes[line_count] = (byte) c;
+                                               line_count++;
+                                       }
+                               }
+                       }
+               } catch (InterruptedException e) {
+               }
+       }
+
        public String get_reply(int timeout) throws InterruptedException {
                boolean can_cancel = can_cancel_reply();
                String  reply = null;
index 35704d40202519965462f6892b9668d99807dfb0..c4e9c69720339e0d0a4b474f87319986fc4dd33b 100644 (file)
@@ -53,46 +53,8 @@ public class AltosSerial extends AltosLink implements Runnable {
        int line_count;
        Frame frame;
 
-       public void run () {
-               int c;
-               byte[] line_bytes = null;
-               int line_count = 0;
-
-               try {
-                       for (;;) {
-                               c = libaltos.altos_getchar(altos, 0);
-                               if (Thread.interrupted())
-                                       break;
-                               if (c == libaltosConstants.LIBALTOS_ERROR) {
-                                       add_telem (new AltosLine());
-                                       add_reply (new AltosLine());
-                                       break;
-                               }
-                               if (c == libaltosConstants.LIBALTOS_TIMEOUT)
-                                       continue;
-                               if (c == '\r')
-                                       continue;
-                               synchronized(this) {
-                                       if (c == '\n') {
-                                               if (line_count != 0) {
-                                                       add_bytes(line_bytes, line_count);
-                                                       line_count = 0;
-                                               }
-                                       } else {
-                                               if (line_bytes == null) {
-                                                       line_bytes = new byte[256];
-                                               } else if (line_count == line_bytes.length) {
-                                                       byte[] new_line_bytes = new byte[line_count * 2];
-                                                       System.arraycopy(line_bytes, 0, new_line_bytes, 0, line_count);
-                                                       line_bytes = new_line_bytes;
-                                               }
-                                               line_bytes[line_count] = (byte) c;
-                                               line_count++;
-                                       }
-                               }
-                       }
-               } catch (InterruptedException e) {
-               }
+       public int getchar() {
+               return libaltos.altos_getchar(altos, 0);
        }
 
        public void flush_output() {