Merge remote-tracking branch 'origin/micropeak-logging'
authorKeith Packard <keithp@keithp.com>
Fri, 11 Jan 2013 05:48:12 +0000 (21:48 -0800)
committerKeith Packard <keithp@keithp.com>
Fri, 11 Jan 2013 05:48:12 +0000 (21:48 -0800)
altoslib/AltosRecord.java
altoslib/AltosRecordMM.java
altoslib/AltosRecordNone.java
altoslib/AltosRecordTM.java
altoslib/AltosState.java
src/drivers/ao_cc1120.c

index 091695154fea3cc01a2a5fecf7b2afebed47e218..2c4b6fa5398c0042de71b6bb9f0525727c26534f 100644 (file)
@@ -126,6 +126,8 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable
                return tick - o.tick;
        }
 
+       abstract public AltosRecord clone();
+
        public void copy(AltosRecord old) {
                seen = old.seen;
                version = old.version;
@@ -144,16 +146,6 @@ public abstract class AltosRecord implements Comparable <AltosRecord>, Cloneable
                kalman_height = old.kalman_height;
        }
 
-       public AltosRecord clone() {
-               try {
-                       AltosRecord n = (AltosRecord) super.clone();
-                       n.copy(this);
-                       return n;
-               } catch (CloneNotSupportedException e) {
-                       return null;
-               }
-       }
-
        public AltosRecord() {
                seen = 0;
                version = 0;
index 9f5292346a61e773aee88f2aa22e290fda86590f..546f305537ef162909883f427ae12629c7f8fa94 100644 (file)
@@ -131,10 +131,10 @@ public class AltosRecordMM extends AltosRecord {
                mag = old.mag;
        }
 
+
+
        public AltosRecordMM clone() {
-               AltosRecordMM n = (AltosRecordMM) super.clone();
-               n.copy(this);
-               return n;
+               return new AltosRecordMM(this);
        }
 
        void make_missing() {
@@ -167,6 +167,10 @@ public class AltosRecordMM extends AltosRecord {
                make_missing();
        }
 
+       public AltosRecordMM(AltosRecordMM old) {
+               copy(old);
+       }
+
        public AltosRecordMM() {
                super();
                make_missing();
index ca0a5fe32a6f4bf954f49d1436b6f69b3c238107..d4ea305f86859fa3154f00682f4ed2ae3a99da31 100644 (file)
@@ -28,6 +28,10 @@ public class AltosRecordNone extends AltosRecord {
                super.copy(old);
        }
 
+       public AltosRecordNone clone() {
+               return new AltosRecordNone(this);
+       }
+
        public AltosRecordNone() {
                super();
        }
index 9530be31fc4f26579cfb672654a6551b1b08d2bf..f6ed496690c127b521b70ee16420604bce09c708 100644 (file)
@@ -149,9 +149,7 @@ public class AltosRecordTM extends AltosRecord {
        }
 
        public AltosRecordTM clone() {
-               AltosRecordTM   n = (AltosRecordTM) super.clone();
-               n.copy(this);
-               return n;
+               return new AltosRecordTM(this);
        }
 
        void make_missing() {
@@ -177,6 +175,10 @@ public class AltosRecordTM extends AltosRecord {
                make_missing();
        }
 
+       public AltosRecordTM(AltosRecordTM old) {
+               copy(old);
+       }
+       
        public AltosRecordTM() {
                super();
                make_missing();
index 218c598ab5d80d6a4e264b86a1a9d25209b5f933..4f59c840c4f6d02acc8e862a27578b9ed4534c0a 100644 (file)
@@ -200,10 +200,10 @@ public class AltosState {
                                }
                                ngps++;
                        }
-               } else
-                       pad_alt = ground_altitude;
-
-               data.new_gps = false;
+               } else {
+                       if (ngps == 0)
+                               pad_alt = ground_altitude;
+               }
 
                gps_waiting = MIN_PAD_SAMPLES - npad;
                if (gps_waiting < 0)
index d9b2e5bfb64891926bacb23db5d13e6f31ec3184..8068740f91782483e6f83329a4f439d2c778b5a5 100644 (file)
@@ -862,6 +862,7 @@ ao_radio_rx_wait(void)
        do {
                if (ao_radio_mcu_wake)
                        ao_radio_check_marc_status();
+               ao_alarm(AO_MS_TO_TICKS(100));
                ao_arch_block_interrupts();
                rx_waiting = 1;
                while (rx_data_cur - rx_data_consumed < AO_FEC_DECODE_BLOCK &&
@@ -873,6 +874,7 @@ ao_radio_rx_wait(void)
                }
                rx_waiting = 0;
                ao_arch_release_interrupts();
+               ao_clear_alarm();
        } while (ao_radio_mcu_wake);
        if (ao_radio_abort)
                return 0;