/* Version information */
public String manufacturer;
public String product;
- public String version;
- public int log_format;
public int serial;
+ public int flight;
+ public int log_format;
+ public String version;
/* Strings returned */
public LinkedList<String> lines;
/* Config information */
- public int config_major;
- public int config_minor;
+ /* HAS_FLIGHT*/
public int main_deploy;
public int apogee_delay;
- public int radio_channel;
- public int radio_setting;
+ public int apogee_lockout;
+
+ /* HAS_RADIO */
public int radio_frequency;
public String callsign;
- public int accel_cal_plus, accel_cal_minus;
+ public int radio_enable;
public int radio_calibration;
+ /* Old HAS_RADIO values */
+ public int radio_channel;
+ public int radio_setting;
+
+ /* HAS_ACCEL */
+ public int accel_cal_plus, accel_cal_minus;
+ public int pad_orientation;
+
+ /* HAS_LOG */
public int flight_log_max;
+
+ /* HAS_IGNITE */
public int ignite_mode;
- public int stored_flight;
+
+ /* HAS_AES */
+ public String aes_key;
+
+ /* AO_PYRO_NUM */
+ public AltosPyro[] pyros;
+ public int npyro;
+ public int pyro;
+
+ /* Storage info replies */
public int storage_size;
public int storage_erase_unit;
- public AltosPyro[] pyros;
+ /* Log listing replies */
+ public int stored_flight;
+
public static String get_string(String line, String label) throws ParseException {
if (line.startsWith(label)) {
if (stored_flight == 0)
return 1;
return 0;
+ case AltosLib.AO_LOG_FORMAT_TELEMETRY:
+ case AltosLib.AO_LOG_FORMAT_TELESCIENCE:
+ return 1;
default:
if (flight_log_max <= 0)
return 1;
return 0;
}
- public AltosConfigData(AltosLink link) throws InterruptedException, TimeoutException {
- link.printf("c s\nf\nl\nv\n");
+ public void reset() {
lines = new LinkedList<String>();
+
+ serial = -1;
radio_setting = 0;
radio_frequency = 0;
- stored_flight = 0;
- serial = -1;
pyros = null;
+ npyro = 0;
+ pyro = 0;
+ }
+
+ public void parse_line(String line) {
+ lines.add(line);
+ /* Version replies */
+ try { manufacturer = get_string(line, "manufacturer"); } catch (Exception e) {}
+ try { product = get_string(line, "product"); } catch (Exception e) {}
+ try { serial = get_int(line, "serial-number"); } catch (Exception e) {}
+ try { flight = get_int(line, "current-flight"); } catch (Exception e) {}
+ try { log_format = get_int(line, "log-format"); } catch (Exception e) {}
+ try { version = get_string(line, "software-version"); } catch (Exception e) {}
+
+ /* Version also contains MS5607 info, which we ignore here */
+
+ /* Config show replies */
- int npyro = 0;
- int pyro = 0;
+ /* HAS_FLIGHT */
+ try { main_deploy = get_int(line, "Main deploy:"); } catch (Exception e) {}
+ try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {}
+ try { apogee_lockout = get_int(line, "Apogee lockout:"); } catch (Exception e) {}
+
+ /* HAS_RADIO */
+ try {
+ radio_frequency = get_int(line, "Frequency:");
+ if (radio_frequency < 0)
+ radio_frequency = 434550;
+ } catch (Exception e) {}
+ try { callsign = get_string(line, "Callsign:"); } catch (Exception e) {}
+ try { radio_enable = get_int(line, "Radio enable:"); } catch (Exception e) {}
+ try { radio_calibration = get_int(line, "Radio cal:"); } catch (Exception e) {}
+
+ /* Old HAS_RADIO values */
+ try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {}
+ try { radio_setting = get_int(line, "Radio setting:"); } catch (Exception e) {}
+
+ /* HAS_ACCEL */
+ try {
+ if (line.startsWith("Accel cal")) {
+ String[] bits = line.split("\\s+");
+ if (bits.length >= 6) {
+ accel_cal_plus = Integer.parseInt(bits[3]);
+ accel_cal_minus = Integer.parseInt(bits[5]);
+ }
+ }
+ } catch (Exception e) {}
+ try { pad_orientation = get_int(line, "Pad orientation:"); } catch (Exception e) {}
+
+ /* HAS_LOG */
+ try { flight_log_max = get_int(line, "Max flight log:"); } catch (Exception e) {}
+
+ /* HAS_IGNITE */
+ try { ignite_mode = get_int(line, "Ignite mode:"); } catch (Exception e) {}
+
+ /* HAS_AES */
+ try { aes_key = get_string(line, "AES key:"); } catch (Exception e) {}
+
+ /* AO_PYRO_NUM */
+ try {
+ npyro = get_int(line, "Pyro-count:");
+ pyros = new AltosPyro[npyro];
+ pyro = 0;
+ } catch (Exception e) {}
+ if (npyro > 0) {
+ try {
+ AltosPyro p = new AltosPyro(pyro, line);
+ if (pyro < npyro - 1)
+ pyros[pyro++] = p;
+ } catch (Exception e) {}
+ }
+
+ /* Storage info replies */
+ try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {}
+ try { storage_erase_unit = get_int(line, "Storage erase unit"); } catch (Exception e) {}
+
+ /* Log listing replies */
+ try { get_int(line, "flight"); stored_flight++; } catch (Exception e) {}
+ }
+
+ public AltosConfigData() {
+ this.reset();
+ }
+
+ private void read_link(AltosLink link, String finished) throws InterruptedException, TimeoutException {
for (;;) {
String line = link.get_reply();
if (line == null)
throw new TimeoutException();
if (line.contains("Syntax error"))
continue;
- lines.add(line);
- if (pyro < npyro - 1) {
- if (pyros == null)
- pyros = new AltosPyro[npyro];
- try {
- pyros[pyro] = new AltosPyro(pyro, line);
- } catch (ParseException e) {
- }
- ++pyro;
- continue;
- }
- try { serial = get_int(line, "serial-number"); } catch (Exception e) {}
- try { log_format = get_int(line, "log-format"); } catch (Exception e) {}
- try { main_deploy = get_int(line, "Main deploy:"); } catch (Exception e) {}
- try { apogee_delay = get_int(line, "Apogee delay:"); } catch (Exception e) {}
- try { radio_channel = get_int(line, "Radio channel:"); } catch (Exception e) {}
- try { radio_setting = get_int(line, "Radio setting:"); } catch (Exception e) {}
- try {
- radio_frequency = get_int(line, "Frequency:");
- if (radio_frequency < 0)
- radio_frequency = 434550;
- } catch (Exception e) {}
- try {
- if (line.startsWith("Accel cal")) {
- String[] bits = line.split("\\s+");
- if (bits.length >= 6) {
- accel_cal_plus = Integer.parseInt(bits[3]);
- accel_cal_minus = Integer.parseInt(bits[5]);
- }
- }
- } catch (Exception e) {}
- try { radio_calibration = get_int(line, "Radio cal:"); } catch (Exception e) {}
- try { flight_log_max = get_int(line, "Max flight log:"); } catch (Exception e) {}
- try { ignite_mode = get_int(line, "Ignite mode:"); } catch (Exception e) {}
- try { callsign = get_string(line, "Callsign:"); } catch (Exception e) {}
- try { version = get_string(line,"software-version"); } catch (Exception e) {}
- try { product = get_string(line,"product"); } catch (Exception e) {}
- try { manufacturer = get_string(line,"manufacturer"); } catch (Exception e) {}
-
- try { get_int(line, "flight"); stored_flight++; } catch (Exception e) {}
- try { storage_size = get_int(line, "Storage size:"); } catch (Exception e) {}
- try { storage_erase_unit = get_int(line, "Storage erase unit"); } catch (Exception e) {}
- try { npyro = get_int(line, "Pyro-count:"); pyro = 0; } catch (Exception e) {}
+ this.parse_line(line);
/* signals the end of the version info */
- if (line.startsWith("software-version"))
+ if (line.startsWith(finished))
break;
}
}
+ public AltosConfigData(AltosLink link) throws InterruptedException, TimeoutException {
+ this.reset();
+ link.printf("c s\nf\nv\n");
+ read_link(link, "software-version");
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEMETRY:
+ case AltosLib.AO_LOG_FORMAT_TELESCIENCE:
+ break;
+ default:
+ link.printf("l\n");
+ read_link(link, "done");
+ }
+ }
+
}
\ No newline at end of file