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; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19 package org.altusmetrum.altoslib_11;
25 public class AltosEepromHeader extends AltosEeprom {
29 public int config_a, config_b, config_c;
33 public int record_length () { return 0; }
35 /* XXX pull rest of config data to state */
36 public void update_state(AltosState state) {
38 case AltosLib.AO_LOG_CONFIG_VERSION:
40 case AltosLib.AO_LOG_MAIN_DEPLOY:
42 case AltosLib.AO_LOG_APOGEE_DELAY:
44 case AltosLib.AO_LOG_RADIO_CHANNEL:
46 case AltosLib.AO_LOG_CALLSIGN:
47 state.set_callsign(data);
49 case AltosLib.AO_LOG_ACCEL_CAL:
50 state.set_accel_g(config_a, config_b);
52 case AltosLib.AO_LOG_RADIO_CAL:
54 case AltosLib.AO_LOG_MANUFACTURER:
56 case AltosLib.AO_LOG_PRODUCT:
59 case AltosLib.AO_LOG_LOG_FORMAT:
60 state.set_log_format(config_a);
62 case AltosLib.AO_LOG_SERIAL_NUMBER:
63 state.set_serial(config_a);
65 case AltosLib.AO_LOG_BARO_RESERVED:
67 state.baro.reserved = config_a;
69 case AltosLib.AO_LOG_BARO_SENS:
71 state.baro.sens = config_a;
73 case AltosLib.AO_LOG_BARO_OFF:
75 state.baro.off = config_a;
77 case AltosLib.AO_LOG_BARO_TCS:
79 state.baro.tcs = config_a;
81 case AltosLib.AO_LOG_BARO_TCO:
83 state.baro.tco = config_a;
85 case AltosLib.AO_LOG_BARO_TREF:
87 state.baro.tref = config_a;
89 case AltosLib.AO_LOG_BARO_TEMPSENS:
91 state.baro.tempsens = config_a;
93 case AltosLib.AO_LOG_BARO_CRC:
95 state.baro.crc = config_a;
97 case AltosLib.AO_LOG_IMU_CAL:
98 state.set_accel_zero(config_a, config_b, config_c);
100 case AltosLib.AO_LOG_SOFTWARE_VERSION:
101 state.set_firmware_version(data);
103 case AltosLib.AO_LOG_FREQUENCY:
104 case AltosLib.AO_LOG_APOGEE_LOCKOUT:
105 case AltosLib.AO_LOG_RADIO_RATE:
106 case AltosLib.AO_LOG_IGNITE_MODE:
108 case AltosLib.AO_LOG_PAD_ORIENTATION:
109 state.set_pad_orientation(config_a);
111 case AltosLib.AO_LOG_RADIO_ENABLE:
112 case AltosLib.AO_LOG_AES_KEY:
113 case AltosLib.AO_LOG_APRS:
114 case AltosLib.AO_LOG_BEEP_SETTING:
115 case AltosLib.AO_LOG_TRACKER_SETTING:
116 case AltosLib.AO_LOG_PYRO_TIME:
117 case AltosLib.AO_LOG_APRS_ID:
119 case AltosLib.AO_LOG_ALTITUDE_32:
120 state.set_altitude_32(config_a);
125 public void write(PrintStream out) {
127 case AltosLib.AO_LOG_CONFIG_VERSION:
128 out.printf("# Config version: %s\n", data);
130 case AltosLib.AO_LOG_MAIN_DEPLOY:
131 out.printf("# Main deploy: %s\n", config_a);
133 case AltosLib.AO_LOG_APOGEE_DELAY:
134 out.printf("# Apogee delay: %s\n", config_a);
136 case AltosLib.AO_LOG_RADIO_CHANNEL:
137 out.printf("# Radio channel: %s\n", config_a);
139 case AltosLib.AO_LOG_CALLSIGN:
140 out.printf("# Callsign: %s\n", data);
142 case AltosLib.AO_LOG_ACCEL_CAL:
143 out.printf ("# Accel cal: %d %d\n", config_a, config_b);
145 case AltosLib.AO_LOG_RADIO_CAL:
146 out.printf ("# Radio cal: %d\n", config_a);
148 case AltosLib.AO_LOG_MAX_FLIGHT_LOG:
149 out.printf ("# Max flight log: %d\n", config_a);
151 case AltosLib.AO_LOG_MANUFACTURER:
152 out.printf ("# Manufacturer: %s\n", data);
154 case AltosLib.AO_LOG_PRODUCT:
155 out.printf ("# Product: %s\n", data);
157 case AltosLib.AO_LOG_SERIAL_NUMBER:
158 out.printf ("# Serial number: %d\n", config_a);
160 case AltosLib.AO_LOG_SOFTWARE_VERSION:
161 out.printf ("# Software version: %s\n", data);
163 case AltosLib.AO_LOG_BARO_RESERVED:
164 out.printf ("# Baro reserved: %d\n", config_a);
166 case AltosLib.AO_LOG_BARO_SENS:
167 out.printf ("# Baro sens: %d\n", config_a);
169 case AltosLib.AO_LOG_BARO_OFF:
170 out.printf ("# Baro off: %d\n", config_a);
172 case AltosLib.AO_LOG_BARO_TCS:
173 out.printf ("# Baro tcs: %d\n", config_a);
175 case AltosLib.AO_LOG_BARO_TCO:
176 out.printf ("# Baro tco: %d\n", config_a);
178 case AltosLib.AO_LOG_BARO_TREF:
179 out.printf ("# Baro tref: %d\n", config_a);
181 case AltosLib.AO_LOG_BARO_TEMPSENS:
182 out.printf ("# Baro tempsens: %d\n", config_a);
184 case AltosLib.AO_LOG_BARO_CRC:
185 out.printf ("# Baro crc: %d\n", config_a);
187 case AltosLib.AO_LOG_IMU_CAL:
188 out.printf ("# IMU cal: %d %d %d\n", config_a, config_b, config_c);
190 case AltosLib.AO_LOG_FREQUENCY:
191 case AltosLib.AO_LOG_APOGEE_LOCKOUT:
192 case AltosLib.AO_LOG_RADIO_RATE:
193 case AltosLib.AO_LOG_IGNITE_MODE:
195 case AltosLib.AO_LOG_PAD_ORIENTATION:
196 out.printf("# Pad orientation: %d\n", config_a);
198 case AltosLib.AO_LOG_RADIO_ENABLE:
199 case AltosLib.AO_LOG_AES_KEY:
200 case AltosLib.AO_LOG_APRS:
201 case AltosLib.AO_LOG_BEEP_SETTING:
202 case AltosLib.AO_LOG_TRACKER_SETTING:
203 case AltosLib.AO_LOG_PYRO_TIME:
204 case AltosLib.AO_LOG_APRS_ID:
206 case AltosLib.AO_LOG_ALTITUDE_32:
207 out.printf("# Altitude-32: %d\n", config_a);
212 public AltosEepromHeader (String[] tokens) {
216 if (tokens[0].equals("Config") && tokens[1].equals("version:")) {
217 cmd = AltosLib.AO_LOG_CONFIG_VERSION;
219 } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) {
220 cmd = AltosLib.AO_LOG_MAIN_DEPLOY;
221 config_a = Integer.parseInt(tokens[2]);
222 } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) {
223 cmd = AltosLib.AO_LOG_APOGEE_DELAY;
224 config_a = Integer.parseInt(tokens[2]);
225 } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) {
226 cmd = AltosLib.AO_LOG_RADIO_CHANNEL;
227 config_a = Integer.parseInt(tokens[2]);
228 } else if (tokens[0].equals("Callsign:")) {
229 cmd = AltosLib.AO_LOG_CALLSIGN;
230 data = tokens[1].replaceAll("\"","");
231 } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) {
232 cmd = AltosLib.AO_LOG_ACCEL_CAL;
233 config_a = Integer.parseInt(tokens[3]);
234 config_b = Integer.parseInt(tokens[5]);
235 } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
236 cmd = AltosLib.AO_LOG_RADIO_CAL;
237 config_a = Integer.parseInt(tokens[2]);
238 } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
239 cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG;
240 config_a = Integer.parseInt(tokens[3]);
241 } else if (tokens[0].equals("manufacturer")) {
242 cmd = AltosLib.AO_LOG_MANUFACTURER;
244 } else if (tokens[0].equals("product")) {
245 cmd = AltosLib.AO_LOG_PRODUCT;
247 } else if (tokens[0].equals("serial-number")) {
248 cmd = AltosLib.AO_LOG_SERIAL_NUMBER;
249 config_a = Integer.parseInt(tokens[1]);
250 } else if (tokens[0].equals("log-format")) {
251 cmd = AltosLib.AO_LOG_LOG_FORMAT;
252 config_a = Integer.parseInt(tokens[1]);
253 } else if (tokens[0].equals("altitude-32")) {
254 cmd = AltosLib.AO_LOG_ALTITUDE_32;
255 config_a = Integer.parseInt(tokens[1]);
256 } else if (tokens[0].equals("software-version")) {
257 cmd = AltosLib.AO_LOG_SOFTWARE_VERSION;
260 } else if (tokens[0].equals("ms5607")) {
261 if (tokens[1].equals("reserved:")) {
262 cmd = AltosLib.AO_LOG_BARO_RESERVED;
263 config_a = Integer.parseInt(tokens[2]);
264 } else if (tokens[1].equals("sens:")) {
265 cmd = AltosLib.AO_LOG_BARO_SENS;
266 config_a = Integer.parseInt(tokens[2]);
267 } else if (tokens[1].equals("off:")) {
268 cmd = AltosLib.AO_LOG_BARO_OFF;
269 config_a = Integer.parseInt(tokens[2]);
270 } else if (tokens[1].equals("tcs:")) {
271 cmd = AltosLib.AO_LOG_BARO_TCS;
272 config_a = Integer.parseInt(tokens[2]);
273 } else if (tokens[1].equals("tco:")) {
274 cmd = AltosLib.AO_LOG_BARO_TCO;
275 config_a = Integer.parseInt(tokens[2]);
276 } else if (tokens[1].equals("tref:")) {
277 cmd = AltosLib.AO_LOG_BARO_TREF;
278 config_a = Integer.parseInt(tokens[2]);
279 } else if (tokens[1].equals("tempsens:")) {
280 cmd = AltosLib.AO_LOG_BARO_TEMPSENS;
281 config_a = Integer.parseInt(tokens[2]);
282 } else if (tokens[1].equals("crc:")) {
283 cmd = AltosLib.AO_LOG_BARO_CRC;
284 config_a = Integer.parseInt(tokens[2]);
286 cmd = AltosLib.AO_LOG_INVALID;
289 } else if (tokens[0].equals("IMU") && tokens[1].equals("cal")) {
290 cmd = AltosLib.AO_LOG_IMU_CAL;
291 config_a = Integer.parseInt(tokens[3]);
292 config_b = Integer.parseInt(tokens[5]);
293 config_c = Integer.parseInt(tokens[7]);
294 } else if (tokens[0].equals("Pad") && tokens[1].equals("orientation:")) {
295 cmd = AltosLib.AO_LOG_PAD_ORIENTATION;
296 config_a = Integer.parseInt(tokens[2]);
299 } catch (Exception e) {
304 static public LinkedList<AltosEeprom> read(FileInputStream input) {
305 LinkedList<AltosEeprom> headers = new LinkedList<AltosEeprom>();
309 String line = AltosLib.gets(input);
312 AltosEepromHeader header = new AltosEepromHeader(line);
316 } catch (IOException ie) {
324 static public void write (PrintStream out, LinkedList<AltosEepromHeader> headers) {
325 out.printf("# Comments\n");
326 for (AltosEepromHeader header : headers) {
332 public AltosEepromHeader (String line) {
333 this(line.split("\\s+"));