micropeak: Add flight stats pane
[fw/altos] / micropeak / MicroData.java
index 783ae40f7a459c5f1d6f22f024c3d4045bd35482..ec9b83d8179e0902bc82c74de968bfac996b9e54 100644 (file)
@@ -22,6 +22,87 @@ import java.io.*;
 import java.util.*;
 import org.altusmetrum.AltosLib.*;
 
+abstract class MicroIterator implements Iterator<Double> {
+       int             i;
+       MicroData       data;
+
+       public boolean hasNext() {
+               return i < data.pressures.length;
+       }
+
+       public MicroIterator (MicroData data) {
+               this.data = data;
+               i = 0;
+       }
+
+       public void remove() {
+       }
+}
+
+class MicroHeightIterator extends MicroIterator {
+       public Double next() {
+               return data.height(i++);
+       }
+
+       public MicroHeightIterator(MicroData data) {
+               super(data);
+       }
+}
+
+class MicroHeightIterable implements Iterable<Double> {
+       MicroData       data;
+
+       public Iterator<Double> iterator() {
+               return new MicroHeightIterator(data);
+       }
+
+       public MicroHeightIterable(MicroData data) {
+               this.data = data;
+       }
+}
+
+class MicroSpeedIterator extends MicroIterator {
+       public Double next() {
+               return data.speed(i++);
+       }
+       public MicroSpeedIterator(MicroData data) {
+               super(data);
+       }
+}
+
+class MicroSpeedIterable implements Iterable<Double> {
+       MicroData       data;
+
+       public Iterator<Double> iterator() {
+               return new MicroSpeedIterator(data);
+       }
+
+       public MicroSpeedIterable(MicroData data) {
+               this.data = data;
+       }
+}
+
+class MicroAccelIterator extends MicroIterator {
+       public Double next() {
+               return data.acceleration(i++);
+       }
+       public MicroAccelIterator(MicroData data) {
+               super(data);
+       }
+}
+
+class MicroAccelIterable implements Iterable<Double> {
+       MicroData       data;
+
+       public Iterator<Double> iterator() {
+               return new MicroAccelIterator(data);
+       }
+
+       public MicroAccelIterable(MicroData data) {
+               this.data = data;
+       }
+}
+
 public class MicroData {
        public int              ground_pressure;
        public int              min_pressure;
@@ -143,6 +224,18 @@ public class MicroData {
                return AltosConvert.pressure_to_altitude(pressures[i]);
        }
 
+       public Iterable<Double> heights() {
+               return new MicroHeightIterable(this);
+       }
+
+       public Iterable<Double> speeds() {
+               return new MicroSpeedIterable(this);
+       }
+
+       public Iterable<Double> accels() {
+               return new MicroAccelIterable(this);
+       }
+
        int fact(int n) {
                if (n == 0)
                        return 1;
@@ -266,5 +359,12 @@ public class MicroData {
                        throw new IOException();
                }
        }
+
+       public MicroData() {
+               ground_pressure = 101000;
+               min_pressure = 101000;
+               pressures = new int[1];
+               pressures[0] = 101000;
+       }
        
 }