From 1029a6e4a61b20698e00e29fc0c8c3877f1e7b0f Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 19 Feb 2017 17:36:04 -0800 Subject: altoslib: Add TeleMini v3 support eeprom, telemetry and monitor idle. This is just like TeleMini v2, except the ADC ranges are all difference as the voltage dividers are different and the ADC itself has a different range. Signed-off-by: Keith Packard --- altoslib/AltosLib.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index cfa1fa27..aec2c692 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -332,9 +332,11 @@ public class AltosLib { public static final int AO_LOG_FORMAT_TELEMEGA_OLD = 5; public static final int AO_LOG_FORMAT_EASYMINI = 6; public static final int AO_LOG_FORMAT_TELEMETRUM = 7; - public static final int AO_LOG_FORMAT_TELEMINI = 8; + public static final int AO_LOG_FORMAT_TELEMINI2 = 8; public static final int AO_LOG_FORMAT_TELEGPS = 9; public static final int AO_LOG_FORMAT_TELEMEGA = 10; + public static final int AO_LOG_FORMAT_DETHERM = 11; + public static final int AO_LOG_FORMAT_TELEMINI3 = 12; public static final int AO_LOG_FORMAT_NONE = 127; public static boolean isspace(int c) { -- cgit v1.2.3 From 6804ead7f7e54ff34b257e10e381dc52d5a61b06 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 22 Apr 2017 15:55:48 -0700 Subject: altoslib: Add TeleFireTwo eeprom support Signed-off-by: Keith Packard --- altoslib/AltosConvert.java | 4 ++ altoslib/AltosEepromChunk.java | 3 + altoslib/AltosEepromFile.java | 3 + altoslib/AltosEepromFireTwo.java | 118 +++++++++++++++++++++++++++++++++++++++ altoslib/AltosLib.java | 1 + altoslib/Makefile.am | 1 + 6 files changed, 130 insertions(+) create mode 100644 altoslib/AltosEepromFireTwo.java (limited to 'altoslib/AltosLib.java') diff --git a/altoslib/AltosConvert.java b/altoslib/AltosConvert.java index 0b413287..8617a12c 100644 --- a/altoslib/AltosConvert.java +++ b/altoslib/AltosConvert.java @@ -366,6 +366,10 @@ public class AltosConvert { return (c - 32) * 5/9; } + public static double psi_to_pa(double psi) { + return psi * 6894.76; + } + public static boolean imperial_units = false; public static AltosDistance distance = new AltosDistance(); diff --git a/altoslib/AltosEepromChunk.java b/altoslib/AltosEepromChunk.java index 36b5961b..32d9f8ea 100644 --- a/altoslib/AltosEepromChunk.java +++ b/altoslib/AltosEepromChunk.java @@ -90,6 +90,9 @@ public class AltosEepromChunk { case AltosLib.AO_LOG_FORMAT_TELEGPS: eeprom = new AltosEepromGPS(this, offset); break; + case AltosLib.AO_LOG_FORMAT_TELEFIRETWO: + eeprom = new AltosEepromFireTwo(this, offset); + break; default: throw new ParseException("unknown eeprom format " + log_format, 0); } diff --git a/altoslib/AltosEepromFile.java b/altoslib/AltosEepromFile.java index baeec730..5544ec37 100644 --- a/altoslib/AltosEepromFile.java +++ b/altoslib/AltosEepromFile.java @@ -109,6 +109,9 @@ public class AltosEepromFile extends AltosStateIterable { case AltosLib.AO_LOG_FORMAT_TELEGPS: body = new AltosEepromIterable(AltosEepromGPS.read(input)); break; + case AltosLib.AO_LOG_FORMAT_TELEFIRETWO: + body = new AltosEepromIterable(AltosEepromFireTwo.read(input)); + break; default: body = new AltosEepromIterable(new LinkedList()); break; diff --git a/altoslib/AltosEepromFireTwo.java b/altoslib/AltosEepromFireTwo.java new file mode 100644 index 00000000..dd510280 --- /dev/null +++ b/altoslib/AltosEepromFireTwo.java @@ -0,0 +1,118 @@ +/* + * Copyright © 2017 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.altoslib_11; + +import java.io.*; +import java.util.*; +import java.text.*; + +public class AltosEepromFireTwo extends AltosEeprom { + public static final int record_length = 32; + + public int record_length() { return record_length; } + + /* AO_LOG_FLIGHT elements */ + public int flight() { return data16(0); } + public int idle_pres() { return data16(2); } + public int idle_thrust() { return data16(4); } + + /* AO_LOG_STATE elements */ + public int state() { return data16(0); } + public int reason() { return data16(2); } + + /* AO_LOG_SENSOR elements */ + public int pres() { return data16(0); } + public int thrust() { return data16(2); } + public int temp(int i) { return data16(4+i*2); } + + public AltosEepromFireTwo (AltosEepromChunk chunk, int start) throws ParseException { + parse_chunk(chunk, start); + } + + private static final double r_above = 5600.0; + private static final double r_below = 10000.0; + private static final double v_adc = 3.3; + + private static double + firetwo_adc(int raw) { + return raw / 4095.0; + } + + private static double + adc_to_pa(int adc) { + + /* raw adc to processor voltage, then back through the + * voltage divider to the sensor voltage + */ + + double v = firetwo_adc(adc) * v_adc * (r_above + r_below) / r_below; + + /* Bound to ranges provided in sensor */ + if (v < 0.5) v = 0.5; + if (v > 4.5) v = 4.5; + + double psi = (v - 0.5) / 4.0 * 1600.0; + return AltosConvert.psi_to_pa(psi); + } + + public void update_state(AltosState state) { + super.update_state(state); + + switch (cmd) { + case AltosLib.AO_LOG_FLIGHT: + state.set_flight(flight()); + state.set_ground_pressure(adc_to_pa(idle_pres())); + break; + case AltosLib.AO_LOG_STATE: + state.set_state(state()); + break; + case AltosLib.AO_LOG_SENSOR: + state.set_pressure(adc_to_pa(pres())); + break; + } + } + + public AltosEepromFireTwo (String line) { + parse_string(line); + } + + static public LinkedList read(FileInputStream input) { + LinkedList firetwos = new LinkedList(); + + for (;;) { + try { + String line = AltosLib.gets(input); + if (line == null) + break; + try { + AltosEepromFireTwo firetwo = new AltosEepromFireTwo(line); + + if (firetwo.cmd != AltosLib.AO_LOG_INVALID) + firetwos.add(firetwo); + } catch (Exception e) { + System.out.printf ("exception\n"); + } + } catch (IOException ie) { + break; + } + } + + return firetwos; + } +} diff --git a/altoslib/AltosLib.java b/altoslib/AltosLib.java index aec2c692..a3f164d4 100644 --- a/altoslib/AltosLib.java +++ b/altoslib/AltosLib.java @@ -337,6 +337,7 @@ public class AltosLib { public static final int AO_LOG_FORMAT_TELEMEGA = 10; public static final int AO_LOG_FORMAT_DETHERM = 11; public static final int AO_LOG_FORMAT_TELEMINI3 = 12; + public static final int AO_LOG_FORMAT_TELEFIRETWO = 13; public static final int AO_LOG_FORMAT_NONE = 127; public static boolean isspace(int c) { diff --git a/altoslib/Makefile.am b/altoslib/Makefile.am index 3af12c99..26159421 100644 --- a/altoslib/Makefile.am +++ b/altoslib/Makefile.am @@ -49,6 +49,7 @@ altoslib_JAVA = \ AltosEepromMini.java \ AltosEepromGPS.java \ AltosEepromMonitor.java \ + AltosEepromFireTwo.java \ AltosFile.java \ AltosFlash.java \ AltosFlashListener.java \ -- cgit v1.2.3