diff options
| -rw-r--r-- | altoslib/AltosConfigData.java | 226 | ||||
| -rw-r--r-- | altoslib/AltosMs5607.java | 37 | ||||
| -rw-r--r-- | altoslib/AltosMs5607Query.java | 33 | ||||
| -rw-r--r-- | altosui/AltosConfig.java | 311 | ||||
| -rw-r--r-- | src/cc1111/ao_usb.c | 2 | ||||
| -rw-r--r-- | src/core/ao_cmd.c | 21 | ||||
| -rw-r--r-- | src/core/ao_config.c | 12 | ||||
| -rw-r--r-- | src/core/ao_stdio.c | 2 | ||||
| -rw-r--r-- | src/drivers/ao_btm.c | 2 | ||||
| -rw-r--r-- | src/drivers/ao_packet_master.c | 4 | 
10 files changed, 311 insertions, 339 deletions
| diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index 45a88783..ddc49e88 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -26,31 +26,53 @@ 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 +107,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 +155,152 @@ 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>(); -		radio_setting = 0; + +		manufacturer = "unknown"; +		product = "unknown"; +		serial = 0; +		flight = 0; +		log_format = AltosLib.AO_LOG_FORMAT_UNKNOWN; +		version = "unknown"; + +		main_deploy = 250; +		apogee_delay = 0; +		apogee_lockout = 0; +  		radio_frequency = 0; -		stored_flight = 0; -		serial = -1; +		callsign = "N0CALL"; +		radio_enable = -1; +		radio_calibration = 0; +		radio_channel = -1; +		radio_setting = -1; + +		accel_cal_plus = -1; +		accel_cal_minus = -1; +		pad_orientation = -1; + +		flight_log_max = 0; +		ignite_mode = -1; + +		aes_key = ""; + +		pyro = 0; +		npyro = 0;  		pyros = null; -		int npyro = 0; -		int pyro = 0; +		storage_size = -1; +		storage_erase_unit = -1; +		stored_flight = -1; +	} +	 +	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 */ + +		/* 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() { +		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 { +		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 diff --git a/altoslib/AltosMs5607.java b/altoslib/AltosMs5607.java index 148a9f92..318fea4d 100644 --- a/altoslib/AltosMs5607.java +++ b/altoslib/AltosMs5607.java @@ -82,6 +82,43 @@ public class AltosMs5607 {  		return pa;  	} +	public boolean parse_line(String line) { +		String[] items = line.split("\\s+"); +		if (line.startsWith("Pressure:")) { +			if (items.length >= 2) +				raw_pres = Integer.parseInt(items[1]); +		} else if (line.startsWith("Temperature:")) { +			if (items.length >= 2) +				raw_temp = Integer.parseInt(items[1]); +		} else if (line.startsWith("ms5607 reserved:")) { +			if (items.length >= 3) +				reserved = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 sens:")) { +			if (items.length >= 3) +				sens = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 off:")) { +			if (items.length >= 3) +				off = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 tcs:")) { +			if (items.length >= 3) +				tcs = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 tco:")) { +			if (items.length >= 3) +				tco = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 tref:")) { +			if (items.length >= 3) +				tref = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 tempsens:")) { +			if (items.length >= 3) +				tempsens = Integer.parseInt(items[2]); +		} else if (line.startsWith("ms5607 crc:")) { +			if (items.length >= 3) +				crc = Integer.parseInt(items[2]); +		} else if (line.startsWith("Altitude")) +			return false; +		return true; +	} +  	public AltosMs5607() {  		raw_pres = AltosRecord.MISSING;  		raw_temp = AltosRecord.MISSING; diff --git a/altoslib/AltosMs5607Query.java b/altoslib/AltosMs5607Query.java index 3c746795..1aaec334 100644 --- a/altoslib/AltosMs5607Query.java +++ b/altoslib/AltosMs5607Query.java @@ -27,38 +27,7 @@ class AltosMs5607Query extends AltosMs5607 {  			if (line == null) {  				throw new TimeoutException();  			} -			String[] items = line.split("\\s+"); -			if (line.startsWith("Pressure:")) { -				if (items.length >= 2) -					raw_pres = Integer.parseInt(items[1]); -			} else if (line.startsWith("Temperature:")) { -				if (items.length >= 2) -					raw_temp = Integer.parseInt(items[1]); -			} else if (line.startsWith("ms5607 reserved:")) { -				if (items.length >= 3) -					reserved = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 sens:")) { -				if (items.length >= 3) -					sens = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 off:")) { -				if (items.length >= 3) -					off = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 tcs:")) { -				if (items.length >= 3) -					tcs = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 tco:")) { -				if (items.length >= 3) -					tco = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 tref:")) { -				if (items.length >= 3) -					tref = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 tempsens:")) { -				if (items.length >= 3) -					tempsens = Integer.parseInt(items[2]); -			} else if (line.startsWith("ms5607 crc:")) { -				if (items.length >= 3) -					crc = Integer.parseInt(items[2]); -			} else if (line.startsWith("Altitude")) +			if (!parse_line(line))  				break;  		}  		convert(); diff --git a/altosui/AltosConfig.java b/altosui/AltosConfig.java index 4b0edec0..92191564 100644 --- a/altosui/AltosConfig.java +++ b/altosui/AltosConfig.java @@ -58,64 +58,12 @@ public class AltosConfig implements ActionListener {  	AltosDevice	device;  	AltosSerial	serial_line;  	boolean		remote; -	AltosConfigData	remote_config_data; -	double		remote_frequency; -	int_ref		serial; -	int_ref		log_format; -	int_ref		main_deploy; -	int_ref		apogee_delay; -	int_ref		apogee_lockout; -	int_ref		radio_channel; -	int_ref		radio_calibration; -	int_ref		flight_log_max; -	int_ref		ignite_mode; -	int_ref		pad_orientation; -	int_ref		radio_setting; -	int_ref		radio_frequency; -	int_ref		storage_size; -	int_ref		storage_erase_unit; -	int_ref		stored_flight; -	int_ref		radio_enable; -	string_ref	version; -	string_ref	product; -	string_ref	callsign; -	int_ref		npyro; -	AltosPyro[]	pyros; + +	AltosConfigData	data;  	AltosConfigUI	config_ui;  	boolean		serial_started;  	boolean		made_visible; -	boolean get_int(String line, String label, int_ref x) { -		if (line.startsWith(label)) { -			try { -				String tail = line.substring(label.length()).trim(); -				String[] tokens = tail.split("\\s+"); -				if (tokens.length > 0) { -					int	i = Integer.parseInt(tokens[0]); -					x.set(i); -					return true; -				} -			} catch (NumberFormatException ne) { -			} -		} -		return false; -	} - -	boolean get_string(String line, String label, string_ref s) { -		if (line.startsWith(label)) { -			String	quoted = line.substring(label.length()).trim(); - -			if (quoted.startsWith("\"")) -				quoted = quoted.substring(1); -			if (quoted.endsWith("\"")) -				quoted = quoted.substring(0,quoted.length()-1); -			s.set(quoted); -			return true; -		} else { -			return false; -		} -	} -  	void start_serial() throws InterruptedException, TimeoutException {  		serial_started = true;  		if (remote) @@ -131,8 +79,8 @@ public class AltosConfig implements ActionListener {  	}  	int log_limit() { -		if (storage_size.get() > 0 && storage_erase_unit.get() > 0) { -			int	log_limit = storage_size.get() - storage_erase_unit.get(); +		if (data.storage_size > 0 && data.storage_erase_unit > 0) { +			int	log_limit = data.storage_size - data.storage_erase_unit;  			if (log_limit > 0)  				return log_limit / 1024;  		} @@ -140,33 +88,33 @@ public class AltosConfig implements ActionListener {  	}  	void update_ui() { -		config_ui.set_serial(serial.get()); -		config_ui.set_product(product.get()); -		config_ui.set_version(version.get()); -		config_ui.set_main_deploy(main_deploy.get()); -		config_ui.set_apogee_delay(apogee_delay.get()); -		config_ui.set_apogee_lockout(apogee_lockout.get()); -		config_ui.set_radio_calibration(radio_calibration.get()); +		config_ui.set_serial(data.serial); +		config_ui.set_product(data.product); +		config_ui.set_version(data.version); +		config_ui.set_main_deploy(data.main_deploy); +		config_ui.set_apogee_delay(data.apogee_delay); +		config_ui.set_apogee_lockout(data.apogee_lockout); +		config_ui.set_radio_calibration(data.radio_calibration);  		config_ui.set_radio_frequency(frequency());  		boolean max_enabled = true; -		switch (log_format.get()) { +		switch (data.log_format) {  		case Altos.AO_LOG_FORMAT_TINY:  			max_enabled = false;  			break;  		default: -			if (stored_flight.get() >= 0) +			if (data.stored_flight >= 0)  				max_enabled = false;  			break;  		}  		config_ui.set_flight_log_max_enabled(max_enabled); -		config_ui.set_radio_enable(radio_enable.get()); +		config_ui.set_radio_enable(data.radio_enable);  		config_ui.set_flight_log_max_limit(log_limit()); -		config_ui.set_flight_log_max(flight_log_max.get()); -		config_ui.set_ignite_mode(ignite_mode.get()); -		config_ui.set_pad_orientation(pad_orientation.get()); -		config_ui.set_callsign(callsign.get()); -		config_ui.set_pyros(pyros); -		config_ui.set_has_pyro(npyro.get() > 0); +		config_ui.set_flight_log_max(data.flight_log_max); +		config_ui.set_ignite_mode(data.ignite_mode); +		config_ui.set_pad_orientation(data.pad_orientation); +		config_ui.set_callsign(data.callsign); +		config_ui.set_pyros(data.pyros); +		config_ui.set_has_pyro(data.npyro > 0);  		config_ui.set_clean();  		if (!made_visible) {  			made_visible = true; @@ -176,52 +124,6 @@ public class AltosConfig implements ActionListener {  	int	pyro; -	void process_line(String line) { -		if (line == null) { -			abort(); -			return; -		} -		if (line.equals("all finished")) { -			if (serial_line != null) -				update_ui(); -			return; -		} -		if (pyro < npyro.get()) { -			if (pyros == null) -				pyros = new AltosPyro[npyro.get()]; - -			try { -				pyros[pyro] = new AltosPyro(pyro, line); -			} catch (ParseException e) { -				System.out.printf ("pyro parse failed %s\n", line); -			} -			++pyro; -			return; -		} -		get_int(line, "serial-number", serial); -		get_int(line, "log-format", log_format); -		get_int(line, "Main deploy:", main_deploy); -		get_int(line, "Apogee delay:", apogee_delay); -		get_int(line, "Apogee lockout:", apogee_lockout); -		get_int(line, "Radio channel:", radio_channel); -		get_int(line, "Radio cal:", radio_calibration); -		get_int(line, "Max flight log:", flight_log_max); -		get_int(line, "Ignite mode:", ignite_mode); -		get_int(line, "Pad orientation:", pad_orientation); -		get_int(line, "Radio setting:", radio_setting); -		if (get_int(line, "Frequency:", radio_frequency)) -			if (radio_frequency.get() < 0) -				radio_frequency.set(434550); -		get_int(line, "Radio enable:", radio_enable); -		get_int(line, "Storage size:", storage_size); -		get_int(line, "Storage erase unit:", storage_erase_unit); -		get_int(line, "flight", stored_flight); -		get_string(line, "Callsign:", callsign); -		get_string(line,"software-version", version); -		get_string(line,"product", product); -		get_int(line, "Pyro-count:", npyro); -	} -  	final static int	serial_mode_read = 0;  	final static int	serial_mode_save = 1;  	final static int	serial_mode_reboot = 2; @@ -230,63 +132,33 @@ public class AltosConfig implements ActionListener {  		AltosConfig	config;  		int		serial_mode; -		void process_line(String line) { -			config.process_line(line); -		} -		void callback(String in_line) { -			final String line = in_line; +		void callback(String in_cmd) { +			final String cmd = in_cmd;  			Runnable r = new Runnable() {  					public void run() { -						process_line(line); +						if (cmd.equals("abort")) { +							abort(); +						} else if (cmd.equals("all finished")) { +							if (serial_line != null) +								update_ui(); +						}  					}  				};  			SwingUtilities.invokeLater(r);  		} -		void reset_data() { -			serial.set(0); -			log_format.set(Altos.AO_LOG_FORMAT_UNKNOWN); -			main_deploy.set(250); -			apogee_delay.set(0); -			apogee_lockout.set(0); -			radio_channel.set(0); -			radio_setting.set(0); -			radio_frequency.set(0); -			radio_calibration.set(1186611); -			radio_enable.set(-1); -			flight_log_max.set(0); -			ignite_mode.set(-1); -			pad_orientation.set(-1); -			storage_size.set(-1); -			storage_erase_unit.set(-1); -			stored_flight.set(-1); -			callsign.set("N0CALL"); -			version.set("unknown"); -			product.set("unknown"); -			pyro = 0; -			npyro.set(0); -		} -  		void get_data() { +			data = null;  			try { -				config.start_serial(); -				reset_data(); - -				config.serial_line.printf("c s\nf\nl\nv\n"); -				for (;;) { -					try { -						String line = config.serial_line.get_reply(5000); -						if (line == null) -							stop_serial(); -						callback(line); -						if (line.startsWith("software-version")) -							break; -					} catch (Exception e) { -						break; -					} -				} +				start_serial(); +				data = new AltosConfigData(config.serial_line);  			} catch (InterruptedException ie) {  			} catch (TimeoutException te) { +				try { +					stop_serial(); +					callback("abort"); +				} catch (InterruptedException ie) { +				}  			} finally {  				try {  					stop_serial(); @@ -299,37 +171,37 @@ public class AltosConfig implements ActionListener {  		void save_data() {  			try {  				double frequency = frequency(); -				boolean has_frequency = radio_frequency.get() > 0; -				boolean has_setting = radio_setting.get() > 0; +				boolean has_frequency = data.radio_frequency > 0; +				boolean has_setting = data.radio_setting > 0;  				start_serial(); -				serial_line.printf("c m %d\n", main_deploy.get()); -				serial_line.printf("c d %d\n", apogee_delay.get()); -				serial_line.printf("c L %d\n", apogee_lockout.get()); +				serial_line.printf("c m %d\n", data.main_deploy); +				serial_line.printf("c d %d\n", data.apogee_delay); +				serial_line.printf("c L %d\n", data.apogee_lockout);  				if (!remote) -					serial_line.printf("c f %d\n", radio_calibration.get()); +					serial_line.printf("c f %d\n", data.radio_calibration);  				serial_line.set_radio_frequency(frequency,  								has_frequency,  								has_setting, -								radio_calibration.get()); +								data.radio_calibration);  				if (remote) {  					serial_line.stop_remote();  					serial_line.set_radio_frequency(frequency);  					AltosUIPreferences.set_frequency(device.getSerial(), frequency);  					serial_line.start_remote();  				} -				serial_line.printf("c c %s\n", callsign.get()); -				if (flight_log_max.get() != 0) -					serial_line.printf("c l %d\n", flight_log_max.get()); -				if (radio_enable.get() >= 0) -					serial_line.printf("c e %d\n", radio_enable.get()); -				if (ignite_mode.get() >= 0) -					serial_line.printf("c i %d\n", ignite_mode.get()); -				if (pad_orientation.get() >= 0) -					serial_line.printf("c o %d\n", pad_orientation.get()); -				if (pyros.length > 0) { -					for (int p = 0; p < pyros.length; p++) { +				serial_line.printf("c c %s\n", data.callsign); +				if (data.flight_log_max != 0) +					serial_line.printf("c l %d\n", data.flight_log_max); +				if (data.radio_enable >= 0) +					serial_line.printf("c e %d\n", data.radio_enable); +				if (data.ignite_mode >= 0) +					serial_line.printf("c i %d\n", data.ignite_mode); +				if (data.pad_orientation >= 0) +					serial_line.printf("c o %d\n", data.pad_orientation); +				if (data.pyros.length > 0) { +					for (int p = 0; p < data.pyros.length; p++) {  						serial_line.printf("c P %s\n", -								   pyros[p].toString()); +								   data.pyros[p].toString());  					}  				}  				serial_line.printf("c w\n"); @@ -413,25 +285,25 @@ public class AltosConfig implements ActionListener {  	}  	double frequency() { -		return AltosConvert.radio_to_frequency(radio_frequency.get(), -						       radio_setting.get(), -						       radio_calibration.get(), -						       radio_channel.get()); +		return AltosConvert.radio_to_frequency(data.radio_frequency, +						       data.radio_setting, +						       data.radio_calibration, +						       data.radio_channel);  	}  	void set_frequency(double freq) { -		int	frequency = radio_frequency.get(); -		int	setting = radio_setting.get(); +		int	frequency = data.radio_frequency; +		int	setting = data.radio_setting;  		if (frequency > 0) { -			radio_frequency.set((int) Math.floor (freq * 1000 + 0.5)); -			radio_channel.set(0); +			data.radio_frequency = (int) Math.floor (freq * 1000 + 0.5); +			data.radio_channel = 0;  		} else if (setting > 0) { -			radio_setting.set(AltosConvert.radio_frequency_to_setting(freq, -										  radio_calibration.get())); -			radio_channel.set(0); +			data.radio_setting =AltosConvert.radio_frequency_to_setting(freq, +										    data.radio_calibration); +			data.radio_channel = 0;  		} else { -			radio_channel.set(AltosConvert.radio_frequency_to_channel(freq)); +			data.radio_channel = AltosConvert.radio_frequency_to_channel(freq);  		}  	} @@ -448,21 +320,21 @@ public class AltosConfig implements ActionListener {  			return;  		} -		main_deploy.set(config_ui.main_deploy()); -		apogee_delay.set(config_ui.apogee_delay()); -		apogee_lockout.set(config_ui.apogee_lockout()); -		radio_calibration.set(config_ui.radio_calibration()); +		data.main_deploy = config_ui.main_deploy(); +		data.apogee_delay = config_ui.apogee_delay(); +		data.apogee_lockout = config_ui.apogee_lockout(); +		data.radio_calibration = config_ui.radio_calibration();  		set_frequency(config_ui.radio_frequency()); -		flight_log_max.set(config_ui.flight_log_max()); -		if (radio_enable.get() >= 0) -			radio_enable.set(config_ui.radio_enable()); -		if (ignite_mode.get() >= 0) -			ignite_mode.set(config_ui.ignite_mode()); -		if (pad_orientation.get() >= 0) -			pad_orientation.set(config_ui.pad_orientation()); -		callsign.set(config_ui.callsign()); -		if (npyro.get() > 0) { -			pyros = config_ui.pyros(); +		data.flight_log_max = config_ui.flight_log_max(); +		if (data.radio_enable >= 0) +			data.radio_enable = config_ui.radio_enable(); +		if (data.ignite_mode >= 0) +			data.ignite_mode = config_ui.ignite_mode(); +		if (data.pad_orientation >= 0) +			data.pad_orientation = config_ui.pad_orientation(); +		data.callsign = config_ui.callsign(); +		if (data.npyro > 0) { +			data.pyros = config_ui.pyros();  		}  		run_serial_thread(serial_mode_save);  	} @@ -491,27 +363,6 @@ public class AltosConfig implements ActionListener {  	public AltosConfig(JFrame given_owner) {  		owner = given_owner; -		serial = new int_ref(0); -		log_format = new int_ref(Altos.AO_LOG_FORMAT_UNKNOWN); -		main_deploy = new int_ref(250); -		apogee_delay = new int_ref(0); -		apogee_lockout = new int_ref(0); -		radio_channel = new int_ref(0); -		radio_setting = new int_ref(0); -		radio_frequency = new int_ref(0); -		radio_calibration = new int_ref(1186611); -		radio_enable = new int_ref(-1); -		flight_log_max = new int_ref(0); -		ignite_mode = new int_ref(-1); -		pad_orientation = new int_ref(-1); -		storage_size = new int_ref(-1); -		storage_erase_unit = new int_ref(-1); -		stored_flight = new int_ref(-1); -		callsign = new string_ref("N0CALL"); -		version = new string_ref("unknown"); -		product = new string_ref("unknown"); -		npyro = new int_ref(0); -  		device = AltosDeviceDialog.show(owner, Altos.product_any);  		if (device != null) {  			try { diff --git a/src/cc1111/ao_usb.c b/src/cc1111/ao_usb.c index 81e9074e..f66e807c 100644 --- a/src/cc1111/ao_usb.c +++ b/src/cc1111/ao_usb.c @@ -411,7 +411,7 @@ ao_usb_getchar(void) __critical  {  	int	c; -	while ((c = ao_usb_pollchar()) == -1) +	while ((c = ao_usb_pollchar()) == AO_READ_AGAIN)  		ao_sleep(&ao_stdin_ready);  	return c;  } diff --git a/src/core/ao_cmd.c b/src/core/ao_cmd.c index a3330974..3d086a57 100644 --- a/src/core/ao_cmd.c +++ b/src/core/ao_cmd.c @@ -265,12 +265,25 @@ ao_reboot(void)  static void  version(void)  { -	printf("manufacturer     %s\n", ao_manufacturer); -	printf("product          %s\n", ao_product); -	printf("serial-number    %u\n", ao_serial_number); +	printf("manufacturer     %s\n" +	       "product          %s\n" +	       "serial-number    %u\n" +#if HAS_FLIGHT +	       "current-flight   %u\n" +#endif +#if HAS_LOG +	       "log-format       %u\n" +#endif +	       , ao_manufacturer +	       , ao_product +	       , ao_serial_number +#if HAS_FLIGHT +	       , ao_flight_number +#endif  #if HAS_LOG -	printf("log-format       %u\n", ao_log_format); +	       , ao_log_format  #endif +		);  #if HAS_MS5607  	ao_ms5607_info();  #endif diff --git a/src/core/ao_config.c b/src/core/ao_config.c index df40ff90..63158158 100644 --- a/src/core/ao_config.c +++ b/src/core/ao_config.c @@ -529,15 +529,15 @@ __code struct ao_config_var ao_config_vars[] = {  	  ao_config_callsign_set,	ao_config_callsign_show },  	{ "e <0 disable, 1 enable>\0Enable telemetry and RDF",  	  ao_config_radio_enable_set, ao_config_radio_enable_show }, +	{ "f <cal>\0Radio calib (cal = rf/(xtal/2^16))", +	  ao_config_radio_cal_set,  	ao_config_radio_cal_show },  #endif /* HAS_RADIO */  #if HAS_ACCEL  	{ "a <+g> <-g>\0Accel calib (0 for auto)",  	  ao_config_accel_calibrate_set,ao_config_accel_calibrate_show }, +	{ "o <0 antenna up, 1 antenna down>\0Set pad orientation", +	  ao_config_pad_orientation_set,ao_config_pad_orientation_show },  #endif /* HAS_ACCEL */ -#if HAS_RADIO -	{ "f <cal>\0Radio calib (cal = rf/(xtal/2^16))", -	  ao_config_radio_cal_set,  	ao_config_radio_cal_show }, -#endif /* HAS_RADIO */  #if HAS_LOG  	{ "l <size>\0Flight log size (kB)",  	  ao_config_log_set,		ao_config_log_show }, @@ -546,10 +546,6 @@ __code struct ao_config_var ao_config_vars[] = {  	{ "i <0 dual, 1 apogee, 2 main>\0Set igniter mode",  	  ao_config_ignite_mode_set,	ao_config_ignite_mode_show },  #endif -#if HAS_ACCEL -	{ "o <0 antenna up, 1 antenna down>\0Set pad orientation", -	  ao_config_pad_orientation_set,ao_config_pad_orientation_show }, -#endif  #if HAS_AES  	{ "k <32 hex digits>\0Set AES encryption key",  	  ao_config_key_set, ao_config_key_show }, diff --git a/src/core/ao_stdio.c b/src/core/ao_stdio.c index 4a832487..1748dfe8 100644 --- a/src/core/ao_stdio.c +++ b/src/core/ao_stdio.c @@ -98,7 +98,7 @@ __xdata uint8_t ao_stdin_ready;  char  getchar(void) __reentrant  { -	char c; +	int c;  	ao_arch_critical(  		int8_t stdio = ao_cur_stdio; diff --git a/src/drivers/ao_btm.c b/src/drivers/ao_btm.c index f3816047..c862200a 100644 --- a/src/drivers/ao_btm.c +++ b/src/drivers/ao_btm.c @@ -120,7 +120,7 @@ uint8_t  ao_btm_get_line(void)  {  	uint8_t ao_btm_reply_len = 0; -	char c; +	int c;  	for (;;) { diff --git a/src/drivers/ao_packet_master.c b/src/drivers/ao_packet_master.c index 481232df..023c788b 100644 --- a/src/drivers/ao_packet_master.c +++ b/src/drivers/ao_packet_master.c @@ -20,7 +20,7 @@  static char  ao_packet_getchar(void)  { -	char c; +	int c;  	while ((c = ao_packet_pollchar()) == AO_READ_AGAIN) {  		if (!ao_packet_enable)  			break; @@ -35,7 +35,7 @@ ao_packet_getchar(void)  static void  ao_packet_echo(void) __reentrant  { -	char	c; +	int	c;  	while (ao_packet_enable) {  		c = ao_packet_getchar();  		if (c != AO_READ_AGAIN) | 
