altosdroid: Skip updating hidden UI elements
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / AltosBluetooth.java
index 9fcc4eba68a2016419417b65133019c3a4bf76c0..484efaf833a6ee4ad2e41ddc13e771d60473e82f 100644 (file)
@@ -31,7 +31,7 @@ import android.os.Handler;
 //import android.os.Message;
 import android.util.Log;
 
-import org.altusmetrum.AltosLib.*;
+import org.altusmetrum.altoslib_5.*;
 
 public class AltosBluetooth extends AltosLink {
 
@@ -162,16 +162,41 @@ public class AltosBluetooth extends AltosLink {
                }
        }
 
-       public int getchar() {
+       public void putchar(byte c) {
+               byte[] bytes = { c };
+               if (D) Log.d(TAG, "print(): begin");
                try {
                        wait_connected();
-                       return input.read();
+                       output.write(bytes);
+                       if (D) Log.d(TAG, "print(): Wrote byte: '" + c + "'");
                } catch (IOException e) {
                        connection_lost();
-               } catch (java.lang.InterruptedException e) {
+               } catch (InterruptedException e) {
                        connection_lost();
                }
-               return AltosLink.ERROR;
+       }
+
+       private static final int buffer_size = 1024;
+
+       private byte[] buffer = new byte[buffer_size];
+       private int buffer_len = 0;
+       private int buffer_off = 0;
+
+       public int getchar() {
+               while (buffer_off == buffer_len) {
+                       try {
+                               wait_connected();
+                               buffer_len = input.read(buffer);
+                               buffer_off = 0;
+                       } catch (IOException e) {
+                               connection_lost();
+                               return AltosLink.ERROR;
+                       } catch (java.lang.InterruptedException e) {
+                               connection_lost();
+                               return AltosLink.ERROR;
+                       }
+               }
+               return buffer[buffer_off++];
        }
 
        public void close() {