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_3;
24 public class AltosEepromHeader extends AltosEeprom {
28 public int config_a, config_b;
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:
57 case AltosLib.AO_LOG_LOG_FORMAT:
58 state.log_format = config_a;
60 case AltosLib.AO_LOG_SERIAL_NUMBER:
61 state.set_serial(config_a);
63 case AltosLib.AO_LOG_BARO_RESERVED:
65 state.baro.reserved = config_a;
67 case AltosLib.AO_LOG_BARO_SENS:
69 state.baro.sens = config_a;
71 case AltosLib.AO_LOG_BARO_OFF:
73 state.baro.off = config_a;
75 case AltosLib.AO_LOG_BARO_TCS:
77 state.baro.tcs = config_a;
79 case AltosLib.AO_LOG_BARO_TCO:
81 state.baro.tco = config_a;
83 case AltosLib.AO_LOG_BARO_TREF:
85 state.baro.tref = config_a;
87 case AltosLib.AO_LOG_BARO_TEMPSENS:
89 state.baro.tempsens = config_a;
91 case AltosLib.AO_LOG_BARO_CRC:
93 state.baro.crc = config_a;
95 case AltosLib.AO_LOG_SOFTWARE_VERSION:
96 state.set_firmware_version(data);
101 public void write(PrintStream out) {
103 case AltosLib.AO_LOG_CONFIG_VERSION:
104 out.printf("# Config version: %s\n", data);
106 case AltosLib.AO_LOG_MAIN_DEPLOY:
107 out.printf("# Main deploy: %s\n", config_a);
109 case AltosLib.AO_LOG_APOGEE_DELAY:
110 out.printf("# Apogee delay: %s\n", config_a);
112 case AltosLib.AO_LOG_RADIO_CHANNEL:
113 out.printf("# Radio channel: %s\n", config_a);
115 case AltosLib.AO_LOG_CALLSIGN:
116 out.printf("# Callsign: %s\n", data);
118 case AltosLib.AO_LOG_ACCEL_CAL:
119 out.printf ("# Accel cal: %d %d\n", config_a, config_b);
121 case AltosLib.AO_LOG_RADIO_CAL:
122 out.printf ("# Radio cal: %d\n", config_a);
124 case AltosLib.AO_LOG_MAX_FLIGHT_LOG:
125 out.printf ("# Max flight log: %d\n", config_a);
127 case AltosLib.AO_LOG_MANUFACTURER:
128 out.printf ("# Manufacturer: %s\n", data);
130 case AltosLib.AO_LOG_PRODUCT:
131 out.printf ("# Product: %s\n", data);
133 case AltosLib.AO_LOG_SERIAL_NUMBER:
134 out.printf ("# Serial number: %d\n", config_a);
136 case AltosLib.AO_LOG_SOFTWARE_VERSION:
137 out.printf ("# Software version: %s\n", data);
139 case AltosLib.AO_LOG_BARO_RESERVED:
140 out.printf ("# Baro reserved: %d\n", config_a);
142 case AltosLib.AO_LOG_BARO_SENS:
143 out.printf ("# Baro sens: %d\n", config_a);
145 case AltosLib.AO_LOG_BARO_OFF:
146 out.printf ("# Baro off: %d\n", config_a);
148 case AltosLib.AO_LOG_BARO_TCS:
149 out.printf ("# Baro tcs: %d\n", config_a);
151 case AltosLib.AO_LOG_BARO_TCO:
152 out.printf ("# Baro tco: %d\n", config_a);
154 case AltosLib.AO_LOG_BARO_TREF:
155 out.printf ("# Baro tref: %d\n", config_a);
157 case AltosLib.AO_LOG_BARO_TEMPSENS:
158 out.printf ("# Baro tempsens: %d\n", config_a);
160 case AltosLib.AO_LOG_BARO_CRC:
161 out.printf ("# Baro crc: %d\n", config_a);
166 public AltosEepromHeader (String[] tokens) {
170 if (tokens[0].equals("Config") && tokens[1].equals("version:")) {
171 cmd = AltosLib.AO_LOG_CONFIG_VERSION;
173 } else if (tokens[0].equals("Main") && tokens[1].equals("deploy:")) {
174 cmd = AltosLib.AO_LOG_MAIN_DEPLOY;
175 config_a = Integer.parseInt(tokens[2]);
176 } else if (tokens[0].equals("Apogee") && tokens[1].equals("delay:")) {
177 cmd = AltosLib.AO_LOG_APOGEE_DELAY;
178 config_a = Integer.parseInt(tokens[2]);
179 } else if (tokens[0].equals("Radio") && tokens[1].equals("channel:")) {
180 cmd = AltosLib.AO_LOG_RADIO_CHANNEL;
181 config_a = Integer.parseInt(tokens[2]);
182 } else if (tokens[0].equals("Callsign:")) {
183 cmd = AltosLib.AO_LOG_CALLSIGN;
184 data = tokens[1].replaceAll("\"","");
185 } else if (tokens[0].equals("Accel") && tokens[1].equals("cal")) {
186 cmd = AltosLib.AO_LOG_ACCEL_CAL;
187 config_a = Integer.parseInt(tokens[3]);
188 config_b = Integer.parseInt(tokens[5]);
189 } else if (tokens[0].equals("Radio") && tokens[1].equals("cal:")) {
190 cmd = AltosLib.AO_LOG_RADIO_CAL;
191 config_a = Integer.parseInt(tokens[2]);
192 } else if (tokens[0].equals("Max") && tokens[1].equals("flight") && tokens[2].equals("log:")) {
193 cmd = AltosLib.AO_LOG_MAX_FLIGHT_LOG;
194 config_a = Integer.parseInt(tokens[3]);
195 } else if (tokens[0].equals("manufacturer")) {
196 cmd = AltosLib.AO_LOG_MANUFACTURER;
198 } else if (tokens[0].equals("product")) {
199 cmd = AltosLib.AO_LOG_PRODUCT;
201 } else if (tokens[0].equals("serial-number")) {
202 cmd = AltosLib.AO_LOG_SERIAL_NUMBER;
203 config_a = Integer.parseInt(tokens[1]);
204 } else if (tokens[0].equals("log-format")) {
205 cmd = AltosLib.AO_LOG_LOG_FORMAT;
206 config_a = Integer.parseInt(tokens[1]);
207 } else if (tokens[0].equals("software-version")) {
208 cmd = AltosLib.AO_LOG_SOFTWARE_VERSION;
211 } else if (tokens[0].equals("ms5607")) {
212 if (tokens[1].equals("reserved:")) {
213 cmd = AltosLib.AO_LOG_BARO_RESERVED;
214 config_a = Integer.parseInt(tokens[2]);
215 } else if (tokens[1].equals("sens:")) {
216 cmd = AltosLib.AO_LOG_BARO_SENS;
217 config_a = Integer.parseInt(tokens[2]);
218 } else if (tokens[1].equals("off:")) {
219 cmd = AltosLib.AO_LOG_BARO_OFF;
220 config_a = Integer.parseInt(tokens[2]);
221 } else if (tokens[1].equals("tcs:")) {
222 cmd = AltosLib.AO_LOG_BARO_TCS;
223 config_a = Integer.parseInt(tokens[2]);
224 } else if (tokens[1].equals("tco:")) {
225 cmd = AltosLib.AO_LOG_BARO_TCO;
226 config_a = Integer.parseInt(tokens[2]);
227 } else if (tokens[1].equals("tref:")) {
228 cmd = AltosLib.AO_LOG_BARO_TREF;
229 config_a = Integer.parseInt(tokens[2]);
230 } else if (tokens[1].equals("tempsens:")) {
231 cmd = AltosLib.AO_LOG_BARO_TEMPSENS;
232 config_a = Integer.parseInt(tokens[2]);
233 } else if (tokens[1].equals("crc:")) {
234 cmd = AltosLib.AO_LOG_BARO_CRC;
235 config_a = Integer.parseInt(tokens[2]);
237 cmd = AltosLib.AO_LOG_INVALID;
242 } catch (Exception e) {
247 static public LinkedList<AltosEeprom> read(FileInputStream input) {
248 LinkedList<AltosEeprom> headers = new LinkedList<AltosEeprom>();
252 String line = AltosLib.gets(input);
255 AltosEepromHeader header = new AltosEepromHeader(line);
259 } catch (IOException ie) {
267 static public void write (PrintStream out, LinkedList<AltosEepromHeader> headers) {
268 out.printf("# Comments\n");
269 for (AltosEepromHeader header : headers) {
275 public AltosEepromHeader (String line) {
276 this(line.split("\\s+"));