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_10;
24 public class AltosEepromHeader extends AltosEeprom {
28 public int config_a, config_b, config_c;
32 public int record_length () { return 0; }
34 /* XXX pull rest of config data to state */
35 public void update_state(AltosState state) {
37 case AltosLib.AO_LOG_CONFIG_VERSION:
39 case AltosLib.AO_LOG_MAIN_DEPLOY:
41 case AltosLib.AO_LOG_APOGEE_DELAY:
43 case AltosLib.AO_LOG_RADIO_CHANNEL:
45 case AltosLib.AO_LOG_CALLSIGN:
46 state.set_callsign(data);
48 case AltosLib.AO_LOG_ACCEL_CAL:
49 state.set_accel_g(config_a, config_b);
51 case AltosLib.AO_LOG_RADIO_CAL:
53 case AltosLib.AO_LOG_MANUFACTURER:
55 case AltosLib.AO_LOG_PRODUCT:
58 case AltosLib.AO_LOG_LOG_FORMAT:
59 state.set_log_format(config_a);
61 case AltosLib.AO_LOG_SERIAL_NUMBER:
62 state.set_serial(config_a);
64 case AltosLib.AO_LOG_BARO_RESERVED:
66 state.baro.reserved = config_a;
68 case AltosLib.AO_LOG_BARO_SENS:
70 state.baro.sens = config_a;
72 case AltosLib.AO_LOG_BARO_OFF:
74 state.baro.off = config_a;
76 case AltosLib.AO_LOG_BARO_TCS:
78 state.baro.tcs = config_a;
80 case AltosLib.AO_LOG_BARO_TCO:
82 state.baro.tco = config_a;
84 case AltosLib.AO_LOG_BARO_TREF:
86 state.baro.tref = config_a;
88 case AltosLib.AO_LOG_BARO_TEMPSENS:
90 state.baro.tempsens = config_a;
92 case AltosLib.AO_LOG_BARO_CRC:
94 state.baro.crc = config_a;
96 case AltosLib.AO_LOG_IMU_CAL:
97 state.set_accel_zero(config_a, config_b, config_c);
99 case AltosLib.AO_LOG_SOFTWARE_VERSION:
100 state.set_firmware_version(data);
102 case AltosLib.AO_LOG_FREQUENCY:
103 case AltosLib.AO_LOG_APOGEE_LOCKOUT:
104 case AltosLib.AO_LOG_RADIO_RATE:
105 case AltosLib.AO_LOG_IGNITE_MODE:
107 case AltosLib.AO_LOG_PAD_ORIENTATION:
108 state.set_pad_orientation(config_a);
110 case AltosLib.AO_LOG_RADIO_ENABLE:
111 case AltosLib.AO_LOG_AES_KEY:
112 case AltosLib.AO_LOG_APRS:
113 case AltosLib.AO_LOG_BEEP_SETTING:
114 case AltosLib.AO_LOG_TRACKER_SETTING:
115 case AltosLib.AO_LOG_PYRO_TIME:
116 case AltosLib.AO_LOG_APRS_ID:
118 case AltosLib.AO_LOG_ALTITUDE_32:
119 state.set_altitude_32(config_a);
124 public void write(PrintStream out) {
126 case AltosLib.AO_LOG_CONFIG_VERSION:
127 out.printf("# Config version: %s\n", data);
129 case AltosLib.AO_LOG_MAIN_DEPLOY:
130 out.printf("# Main deploy: %s\n", config_a);
132 case AltosLib.AO_LOG_APOGEE_DELAY:
133 out.printf("# Apogee delay: %s\n", config_a);
135 case AltosLib.AO_LOG_RADIO_CHANNEL:
136 out.printf("# Radio channel: %s\n", config_a);
138 case AltosLib.AO_LOG_CALLSIGN:
139 out.printf("# Callsign: %s\n", data);
141 case AltosLib.AO_LOG_ACCEL_CAL:
142 out.printf ("# Accel cal: %d %d\n", config_a, config_b);
144 case AltosLib.AO_LOG_RADIO_CAL:
145 out.printf ("# Radio cal: %d\n", config_a);
147 case AltosLib.AO_LOG_MAX_FLIGHT_LOG:
148 out.printf ("# Max flight log: %d\n", config_a);
150 case AltosLib.AO_LOG_MANUFACTURER:
151 out.printf ("# Manufacturer: %s\n", data);
153 case AltosLib.AO_LOG_PRODUCT:
154 out.printf ("# Product: %s\n", data);
156 case AltosLib.AO_LOG_SERIAL_NUMBER:
157 out.printf ("# Serial number: %d\n", config_a);
159 case AltosLib.AO_LOG_SOFTWARE_VERSION:
160 out.printf ("# Software version: %s\n", data);
162 case AltosLib.AO_LOG_BARO_RESERVED:
163 out.printf ("# Baro reserved: %d\n", config_a);
165 case AltosLib.AO_LOG_BARO_SENS:
166 out.printf ("# Baro sens: %d\n", config_a);
168 case AltosLib.AO_LOG_BARO_OFF:
169 out.printf ("# Baro off: %d\n", config_a);
171 case AltosLib.AO_LOG_BARO_TCS:
172 out.printf ("# Baro tcs: %d\n", config_a);
174 case AltosLib.AO_LOG_BARO_TCO:
175 out.printf ("# Baro tco: %d\n", config_a);
177 case AltosLib.AO_LOG_BARO_TREF:
178 out.printf ("# Baro tref: %d\n", config_a);
180 case AltosLib.AO_LOG_BARO_TEMPSENS:
181 out.printf ("# Baro tempsens: %d\n", config_a);
183 case AltosLib.AO_LOG_BARO_CRC:
184 out.printf ("# Baro crc: %d\n", config_a);
186 case AltosLib.AO_LOG_IMU_CAL:
187 out.printf ("# IMU cal: %d %d %d\n", config_a, config_b, config_c);
189 case AltosLib.AO_LOG_FREQUENCY:
190 case AltosLib.AO_LOG_APOGEE_LOCKOUT:
191 case AltosLib.AO_LOG_RADIO_RATE:
192 case AltosLib.AO_LOG_IGNITE_MODE:
194 case AltosLib.AO_LOG_PAD_ORIENTATION:
195 out.printf("# Pad orientation: %d\n", config_a);
197 case AltosLib.AO_LOG_RADIO_ENABLE:
198 case AltosLib.AO_LOG_AES_KEY:
199 case AltosLib.AO_LOG_APRS:
200 case AltosLib.AO_LOG_BEEP_SETTING:
201 case AltosLib.AO_LOG_TRACKER_SETTING:
202 case AltosLib.AO_LOG_PYRO_TIME:
203 case AltosLib.AO_LOG_APRS_ID:
205 case AltosLib.AO_LOG_ALTITUDE_32:
206 out.printf("# Altitude-32: %d\n", config_a);
211 public AltosEepromHeader (String[] tokens) {
215 if (tokens[0].equals("Config") && tokens[1].equals("version:")) {
216 cmd = AltosLib.AO_LOG_CONFIG_VERSION;
218 } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) {
219 cmd = AltosLib.AO_LOG_MAIN_DEPLOY;
220 config_a = Integer.parseInt(tokens[2]);
221 } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) {
222 cmd = AltosLib.AO_LOG_APOGEE_DELAY;
223 config_a = Integer.parseInt(tokens[2]);
224 } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) {
225 cmd = AltosLib.AO_LOG_RADIO_CHANNEL;
226 config_a = Integer.parseInt(tokens[2]);
227 } else if (tokens[0].equals("Callsign:")) {
228 cmd = AltosLib.AO_LOG_CALLSIGN;
229 data = tokens[1].replaceAll("\"","");
230 } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) {
231 cmd = AltosLib.AO_LOG_ACCEL_CAL;
232 config_a = Integer.parseInt(tokens[3]);
233 config_b = Integer.parseInt(tokens[5]);
234 } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
235 cmd = AltosLib.AO_LOG_RADIO_CAL;
236 config_a = Integer.parseInt(tokens[2]);
237 } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
238 cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG;
239 config_a = Integer.parseInt(tokens[3]);
240 } else if (tokens[0].equals("manufacturer")) {
241 cmd = AltosLib.AO_LOG_MANUFACTURER;
243 } else if (tokens[0].equals("product")) {
244 cmd = AltosLib.AO_LOG_PRODUCT;
246 } else if (tokens[0].equals("serial-number")) {
247 cmd = AltosLib.AO_LOG_SERIAL_NUMBER;
248 config_a = Integer.parseInt(tokens[1]);
249 } else if (tokens[0].equals("log-format")) {
250 cmd = AltosLib.AO_LOG_LOG_FORMAT;
251 config_a = Integer.parseInt(tokens[1]);
252 } else if (tokens[0].equals("altitude-32")) {
253 cmd = AltosLib.AO_LOG_ALTITUDE_32;
254 config_a = Integer.parseInt(tokens[1]);
255 } else if (tokens[0].equals("software-version")) {
256 cmd = AltosLib.AO_LOG_SOFTWARE_VERSION;
259 } else if (tokens[0].equals("ms5607")) {
260 if (tokens[1].equals("reserved:")) {
261 cmd = AltosLib.AO_LOG_BARO_RESERVED;
262 config_a = Integer.parseInt(tokens[2]);
263 } else if (tokens[1].equals("sens:")) {
264 cmd = AltosLib.AO_LOG_BARO_SENS;
265 config_a = Integer.parseInt(tokens[2]);
266 } else if (tokens[1].equals("off:")) {
267 cmd = AltosLib.AO_LOG_BARO_OFF;
268 config_a = Integer.parseInt(tokens[2]);
269 } else if (tokens[1].equals("tcs:")) {
270 cmd = AltosLib.AO_LOG_BARO_TCS;
271 config_a = Integer.parseInt(tokens[2]);
272 } else if (tokens[1].equals("tco:")) {
273 cmd = AltosLib.AO_LOG_BARO_TCO;
274 config_a = Integer.parseInt(tokens[2]);
275 } else if (tokens[1].equals("tref:")) {
276 cmd = AltosLib.AO_LOG_BARO_TREF;
277 config_a = Integer.parseInt(tokens[2]);
278 } else if (tokens[1].equals("tempsens:")) {
279 cmd = AltosLib.AO_LOG_BARO_TEMPSENS;
280 config_a = Integer.parseInt(tokens[2]);
281 } else if (tokens[1].equals("crc:")) {
282 cmd = AltosLib.AO_LOG_BARO_CRC;
283 config_a = Integer.parseInt(tokens[2]);
285 cmd = AltosLib.AO_LOG_INVALID;
288 } else if (tokens[0].equals("IMU") && tokens[1].equals("cal")) {
289 cmd = AltosLib.AO_LOG_IMU_CAL;
290 config_a = Integer.parseInt(tokens[3]);
291 config_b = Integer.parseInt(tokens[5]);
292 config_c = Integer.parseInt(tokens[7]);
293 } else if (tokens[0].equals("Pad") && tokens[1].equals("orientation:")) {
294 cmd = AltosLib.AO_LOG_PAD_ORIENTATION;
295 config_a = Integer.parseInt(tokens[2]);
298 } catch (Exception e) {
303 static public LinkedList<AltosEeprom> read(FileInputStream input) {
304 LinkedList<AltosEeprom> headers = new LinkedList<AltosEeprom>();
308 String line = AltosLib.gets(input);
311 AltosEepromHeader header = new AltosEepromHeader(line);
315 } catch (IOException ie) {
323 static public void write (PrintStream out, LinkedList<AltosEepromHeader> headers) {
324 out.printf("# Comments\n");
325 for (AltosEepromHeader header : headers) {
331 public AltosEepromHeader (String line) {
332 this(line.split("\\s+"));