X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroidLink.java;fp=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroidLink.java;h=0000000000000000000000000000000000000000;hp=a443b6e987e8fce060001c06d1ca84b70a62cde2;hb=8b53f860eb3171cd43e4bd0e440f2889bd810662;hpb=4a257455b2dc57069c41e1845daf66239c5cbe1d diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java deleted file mode 100644 index a443b6e9..00000000 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidLink.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright © 2015 Keith Packard - * - * 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; 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 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ - -package org.altusmetrum.AltosDroid; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.UUID; - -import android.os.Handler; - -import org.altusmetrum.altoslib_13.*; - -public abstract class AltosDroidLink extends AltosLink { - - Handler handler; - - Thread input_thread = null; - - public double frequency() { - return frequency; - } - - public int telemetry_rate() { - return telemetry_rate; - } - - public void save_frequency() { - AltosPreferences.set_frequency(0, frequency); - } - - public void save_telemetry_rate() { - AltosPreferences.set_telemetry_rate(0, telemetry_rate); - } - - Object closed_lock = new Object(); - boolean closing = false; - boolean closed = false; - - public boolean closed() { - synchronized(closed_lock) { - return closing; - } - } - - void connected() throws InterruptedException { - input_thread = new Thread(this); - input_thread.start(); - - // Configure the newly connected device for telemetry - print("~\nE 0\n"); - set_monitor(false); - AltosDebug.debug("ConnectThread: connected"); - - /* Let TelemetryService know we're connected - */ - handler.obtainMessage(TelemetryService.MSG_CONNECTED, this).sendToTarget(); - - /* Notify other waiting threads that we're connected now - */ - notifyAll(); - } - - public void closing() { - synchronized(closed_lock) { - AltosDebug.debug("Marked closing true"); - closing = true; - } - } - - private boolean actually_closed() { - synchronized(closed_lock) { - return closed; - } - } - - abstract void close_device(); - - public void close() { - AltosDebug.debug("close(): begin"); - - closing(); - - flush_output(); - - synchronized (closed_lock) { - AltosDebug.debug("Marked closed true"); - closed = true; - } - - close_device(); - - synchronized(this) { - - if (input_thread != null) { - AltosDebug.debug("close(): stopping input_thread"); - try { - AltosDebug.debug("close(): input_thread.interrupt()....."); - input_thread.interrupt(); - AltosDebug.debug("close(): input_thread.join()....."); - input_thread.join(); - } catch (Exception e) {} - input_thread = null; - } - notifyAll(); - } - } - - abstract int write(byte[] buffer, int len); - - abstract int read(byte[] buffer, int len); - - private static final int buffer_size = 64; - - private byte[] in_buffer = new byte[buffer_size]; - private byte[] out_buffer = new byte[buffer_size]; - private int buffer_len = 0; - private int buffer_off = 0; - private int out_buffer_off = 0; - - private byte[] debug_chars = new byte[buffer_size]; - private int debug_off; - - private void debug_input(byte b) { - if (b == '\n') { - AltosDebug.debug(" " + new String(debug_chars, 0, debug_off)); - debug_off = 0; - } else { - if (debug_off < buffer_size) - debug_chars[debug_off++] = b; - } - } - - private void disconnected() { - if (closed()) { - AltosDebug.debug("disconnected after closed"); - return; - } - - AltosDebug.debug("Sending disconnected message"); - handler.obtainMessage(TelemetryService.MSG_DISCONNECTED, this).sendToTarget(); - } - - public int getchar() { - - if (actually_closed()) - return ERROR; - - while (buffer_off == buffer_len) { - buffer_len = read(in_buffer, buffer_size); - if (buffer_len < 0) { - AltosDebug.debug("ERROR returned from getchar()"); - disconnected(); - return ERROR; - } - buffer_off = 0; - } -// if (AltosDebug.D) -// debug_input(in_buffer[buffer_off]); - return in_buffer[buffer_off++]; - } - - public void flush_output() { - super.flush_output(); - - if (actually_closed()) { - out_buffer_off = 0; - return; - } - - while (out_buffer_off != 0) { - int sent = write(out_buffer, out_buffer_off); - - if (sent <= 0) { - AltosDebug.debug("flush_output() failed"); - out_buffer_off = 0; - break; - } - - if (sent < out_buffer_off) - System.arraycopy(out_buffer, 0, out_buffer, sent, out_buffer_off - sent); - - out_buffer_off -= sent; - } - } - - public void putchar(byte c) { - out_buffer[out_buffer_off++] = c; - if (out_buffer_off == buffer_size) - flush_output(); - } - - public void print(String data) { - byte[] bytes = data.getBytes(); -// AltosDebug.debug(data.replace('\n', '\\')); - for (byte b : bytes) - putchar(b); - } - - public AltosDroidLink(Handler handler) { - this.handler = handler; - } -}