altosui: Handle old TeleDongle receiving kalman telemetry packets
authorKeith Packard <keithp@keithp.com>
Fri, 3 Jun 2011 06:16:30 +0000 (23:16 -0700)
committerKeith Packard <keithp@keithp.com>
Fri, 3 Jun 2011 06:16:30 +0000 (23:16 -0700)
The telemetry packets now send the kalman height/speed/accel values
instead of the ad-hoc values. If received by an old TeleDongle box,
the speed value will be of the form 0x8000abcd, which will be printed
as a 32-bit value by TeleDongle. We only want the abcd part, which is
the speed * 16. Detect this automatically and compute the correct
values for all three.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosui/AltosTelemetry.java

index 91b6d0481436c536ae8f5d46f3ac1e04e91e4b2a..7d68b5b5394898c62698ee90bdcf05e519ed43e2 100644 (file)
@@ -326,6 +326,16 @@ public class AltosTelemetry extends AltosRecord {
                AltosParse.word(words[i++], "fp:");
                flight_pres = AltosParse.parse_int(words[i++]);
 
                AltosParse.word(words[i++], "fp:");
                flight_pres = AltosParse.parse_int(words[i++]);
 
+               /* Old TeleDongle code with kalman-reporting TeleMetrum code */
+               if ((flight_vel & 0xffff0000) == 0x80000000) {
+                       speed = ((short) flight_vel) / 16.0;
+                       acceleration = flight_accel / 16.0;
+                       height = flight_pres;
+                       flight_vel = MISSING;
+                       flight_pres = MISSING;
+                       flight_accel = MISSING;
+               }
+
                AltosParse.word(words[i++], "gp:");
                ground_pres = AltosParse.parse_int(words[i++]);
 
                AltosParse.word(words[i++], "gp:");
                ground_pres = AltosParse.parse_int(words[i++]);