diff options
| author | Keith Packard <keithp@keithp.com> | 2012-07-16 15:35:11 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-07-16 15:35:11 -0700 | 
| commit | 52196975c447851f14619213c1de5101d334eebc (patch) | |
| tree | 8a6809034944bb24314874568372e1926772d10e /altoslib/AltosLink.java | |
| parent | 0edb5616a70fd480317acc99ec3c28c662aa8556 (diff) | |
altosui: Move serial datastream parser to altoslib
instead of having it in altosui
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosLink.java')
| -rw-r--r-- | altoslib/AltosLink.java | 47 | 
1 files changed, 47 insertions, 0 deletions
diff --git a/altoslib/AltosLink.java b/altoslib/AltosLink.java index 779c8496..d59e73ba 100644 --- a/altoslib/AltosLink.java +++ b/altoslib/AltosLink.java @@ -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;  | 
