diff options
Diffstat (limited to 'altoslib/AltosConfigData.java')
| -rw-r--r-- | altoslib/AltosConfigData.java | 197 | 
1 files changed, 138 insertions, 59 deletions
| diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 45a88783..b4478da9 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -26,31 +26,54 @@ public class AltosConfigData implements Iterable<String> {  	/* 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)) { @@ -85,6 +108,9 @@ public class AltosConfigData implements Iterable<String> {  			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; @@ -130,71 +156,124 @@ public class AltosConfigData implements Iterable<String> {  		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 | 
