2 * Copyright © 2013 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
18 package org.altusmetrum.altoslib_1;
24 public class AltosEepromHeader extends AltosEeprom {
28 public int config_a, config_b;
32 public void update_state(AltosState state) {
34 case AltosLib.AO_LOG_CONFIG_VERSION:
36 case AltosLib.AO_LOG_MAIN_DEPLOY:
38 case AltosLib.AO_LOG_APOGEE_DELAY:
40 case AltosLib.AO_LOG_RADIO_CHANNEL:
42 case AltosLib.AO_LOG_CALLSIGN:
43 state.callsign = data;
45 case AltosLib.AO_LOG_ACCEL_CAL:
46 state.accel_plus_g = config_a;
47 state.accel_minus_g = config_b;
49 case AltosLib.AO_LOG_RADIO_CAL:
51 case AltosLib.AO_LOG_MANUFACTURER:
53 case AltosLib.AO_LOG_PRODUCT:
55 case AltosLib.AO_LOG_LOG_FORMAT:
56 state.log_format = config_a;
58 case AltosLib.AO_LOG_SERIAL_NUMBER:
59 state.serial = config_a;
61 case AltosLib.AO_LOG_BARO_RESERVED:
62 state.baro.reserved = config_a;
64 case AltosLib.AO_LOG_BARO_SENS:
65 state.baro.sens = config_a;
67 case AltosLib.AO_LOG_BARO_OFF:
68 state.baro.off = config_a;
70 case AltosLib.AO_LOG_BARO_TCS:
71 state.baro.tcs = config_a;
73 case AltosLib.AO_LOG_BARO_TCO:
74 state.baro.tco = config_a;
76 case AltosLib.AO_LOG_BARO_TREF:
77 state.baro.tref = config_a;
79 case AltosLib.AO_LOG_BARO_TEMPSENS:
80 state.baro.tempsens = config_a;
82 case AltosLib.AO_LOG_BARO_CRC:
83 state.baro.crc = config_a;
85 case AltosLib.AO_LOG_SOFTWARE_VERSION:
90 public void write(PrintStream out) {
92 case AltosLib.AO_LOG_CONFIG_VERSION:
93 out.printf("# Config version: %s\n", data);
95 case AltosLib.AO_LOG_MAIN_DEPLOY:
96 out.printf("# Main deploy: %s\n", config_a);
98 case AltosLib.AO_LOG_APOGEE_DELAY:
99 out.printf("# Apogee delay: %s\n", config_a);
101 case AltosLib.AO_LOG_RADIO_CHANNEL:
102 out.printf("# Radio channel: %s\n", config_a);
104 case AltosLib.AO_LOG_CALLSIGN:
105 out.printf("# Callsign: %s\n", data);
107 case AltosLib.AO_LOG_ACCEL_CAL:
108 out.printf ("# Accel cal: %d %d\n", config_a, config_b);
110 case AltosLib.AO_LOG_RADIO_CAL:
111 out.printf ("# Radio cal: %d\n", config_a);
113 case AltosLib.AO_LOG_MAX_FLIGHT_LOG:
114 out.printf ("# Max flight log: %d\n", config_a);
116 case AltosLib.AO_LOG_MANUFACTURER:
117 out.printf ("# Manufacturer: %s\n", data);
119 case AltosLib.AO_LOG_PRODUCT:
120 out.printf ("# Product: %s\n", data);
122 case AltosLib.AO_LOG_SERIAL_NUMBER:
123 out.printf ("# Serial number: %d\n", config_a);
125 case AltosLib.AO_LOG_SOFTWARE_VERSION:
126 out.printf ("# Software version: %s\n", data);
128 case AltosLib.AO_LOG_BARO_RESERVED:
129 out.printf ("# Baro reserved: %d\n", config_a);
131 case AltosLib.AO_LOG_BARO_SENS:
132 out.printf ("# Baro sens: %d\n", config_a);
134 case AltosLib.AO_LOG_BARO_OFF:
135 out.printf ("# Baro off: %d\n", config_a);
137 case AltosLib.AO_LOG_BARO_TCS:
138 out.printf ("# Baro tcs: %d\n", config_a);
140 case AltosLib.AO_LOG_BARO_TCO:
141 out.printf ("# Baro tco: %d\n", config_a);
143 case AltosLib.AO_LOG_BARO_TREF:
144 out.printf ("# Baro tref: %d\n", config_a);
146 case AltosLib.AO_LOG_BARO_TEMPSENS:
147 out.printf ("# Baro tempsens: %d\n", config_a);
149 case AltosLib.AO_LOG_BARO_CRC:
150 out.printf ("# Baro crc: %d\n", config_a);
155 public AltosEepromHeader (String[] tokens) {
159 if (tokens[0].equals("Config") && tokens[1].equals("version:")) {
160 cmd = AltosLib.AO_LOG_CONFIG_VERSION;
162 } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) {
163 cmd = AltosLib.AO_LOG_MAIN_DEPLOY;
164 config_a = Integer.parseInt(tokens[2]);
165 } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) {
166 cmd = AltosLib.AO_LOG_APOGEE_DELAY;
167 config_a = Integer.parseInt(tokens[2]);
168 } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) {
169 cmd = AltosLib.AO_LOG_RADIO_CHANNEL;
170 config_a = Integer.parseInt(tokens[2]);
171 } else if (tokens[0].equals("Callsign:")) {
172 cmd = AltosLib.AO_LOG_CALLSIGN;
173 data = tokens[1].replaceAll("\"","");
174 } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) {
175 cmd = AltosLib.AO_LOG_ACCEL_CAL;
176 config_a = Integer.parseInt(tokens[3]);
177 config_b = Integer.parseInt(tokens[5]);
178 } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
179 cmd = AltosLib.AO_LOG_RADIO_CAL;
180 config_a = Integer.parseInt(tokens[2]);
181 } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
182 cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG;
183 config_a = Integer.parseInt(tokens[3]);
184 } else if (tokens[0].equals("manufacturer")) {
185 cmd = AltosLib.AO_LOG_MANUFACTURER;
187 } else if (tokens[0].equals("product")) {
188 cmd = AltosLib.AO_LOG_PRODUCT;
190 } else if (tokens[0].equals("serial-number")) {
191 cmd = AltosLib.AO_LOG_SERIAL_NUMBER;
192 config_a = Integer.parseInt(tokens[1]);
193 } else if (tokens[0].equals("log-format")) {
194 cmd = AltosLib.AO_LOG_LOG_FORMAT;
195 config_a = Integer.parseInt(tokens[1]);
196 } else if (tokens[0].equals("software-version")) {
197 cmd = AltosLib.AO_LOG_SOFTWARE_VERSION;
200 } else if (tokens[0].equals("ms5607")) {
201 if (tokens[1].equals("reserved:")) {
202 cmd = AltosLib.AO_LOG_BARO_RESERVED;
203 config_a = Integer.parseInt(tokens[2]);
204 } else if (tokens[1].equals("sens:")) {
205 cmd = AltosLib.AO_LOG_BARO_SENS;
206 config_a = Integer.parseInt(tokens[2]);
207 } else if (tokens[1].equals("off:")) {
208 cmd = AltosLib.AO_LOG_BARO_OFF;
209 config_a = Integer.parseInt(tokens[2]);
210 } else if (tokens[1].equals("tcs:")) {
211 cmd = AltosLib.AO_LOG_BARO_TCS;
212 config_a = Integer.parseInt(tokens[2]);
213 } else if (tokens[1].equals("tco:")) {
214 cmd = AltosLib.AO_LOG_BARO_TCO;
215 config_a = Integer.parseInt(tokens[2]);
216 } else if (tokens[1].equals("tref:")) {
217 cmd = AltosLib.AO_LOG_BARO_TREF;
218 config_a = Integer.parseInt(tokens[2]);
219 } else if (tokens[1].equals("tempsens:")) {
220 cmd = AltosLib.AO_LOG_BARO_TEMPSENS;
221 config_a = Integer.parseInt(tokens[2]);
222 } else if (tokens[1].equals("crc:")) {
223 cmd = AltosLib.AO_LOG_BARO_CRC;
224 config_a = Integer.parseInt(tokens[2]);
226 cmd = AltosLib.AO_LOG_INVALID;
231 } catch (Exception e) {
236 static public LinkedList<AltosEeprom> read(FileInputStream input) {
237 LinkedList<AltosEeprom> headers = new LinkedList<AltosEeprom>();
241 String line = AltosLib.gets(input);
244 AltosEepromHeader header = new AltosEepromHeader(line);
248 } catch (IOException ie) {
256 static public void write (PrintStream out, LinkedList<AltosEepromHeader> headers) {
257 out.printf("# Comments\n");
258 for (AltosEepromHeader header : headers) {
264 public AltosEepromHeader (String line) {
265 this(line.split("\\s+"));