diff options
| -rw-r--r-- | altoslib/AltosEepromDownload.java | 20 | ||||
| -rw-r--r-- | altosuilib/AltosEepromMonitorUI.java | 10 | 
2 files changed, 21 insertions, 9 deletions
diff --git a/altoslib/AltosEepromDownload.java b/altoslib/AltosEepromDownload.java index 78a1f4be..00b20272 100644 --- a/altoslib/AltosEepromDownload.java +++ b/altoslib/AltosEepromDownload.java @@ -75,7 +75,8 @@ public class AltosEepromDownload implements Runnable {  	}  	boolean			done; -	boolean			start; +	int			prev_state; +	int			state_block;  	void LogEeprom(AltosEeprom r) throws IOException {  		if (r.cmd != AltosLib.AO_LOG_INVALID) { @@ -140,7 +141,6 @@ public class AltosEepromDownload implements Runnable {  		state = new AltosState();  		done = false; -		start = true;  		if (flights.config_data.serial < 0)  			throw new IOException("no serial number found"); @@ -154,12 +154,8 @@ public class AltosEepromDownload implements Runnable {  		/* Now scan the eeprom, reading blocks of data and converting to .eeprom file form */  		state_block = log.start_block; +		prev_state = AltosLib.ao_flight_startup;  		for (block = log.start_block; !done && block < log.end_block; block++) { -			monitor.set_value(state.state_name(), -					  state.state, -					  block - state_block, -					  block - log.start_block); -  			AltosEepromChunk	eechunk = new AltosEepromChunk(link, block, block == log.start_block);  			/* @@ -177,6 +173,16 @@ public class AltosEepromDownload implements Runnable {  			}  			CaptureEeprom (eechunk, log_format); + +			if (state.state != prev_state && state.state != AltosLib.ao_flight_invalid) { +				state_block = block; +				prev_state = state.state; +			} + +			monitor.set_value(state.state_name(), +					  state.state, +					  block - state_block, +					  block - log.start_block);  		}  		CheckFile(true);  		if (eeprom_file != null) { diff --git a/altosuilib/AltosEepromMonitorUI.java b/altosuilib/AltosEepromMonitorUI.java index b72dfdf4..d2d95678 100644 --- a/altosuilib/AltosEepromMonitorUI.java +++ b/altosuilib/AltosEepromMonitorUI.java @@ -167,15 +167,21 @@ public class AltosEepromMonitorUI extends AltosUIDialog implements AltosEepromMo  			pos = lblock / 1000.0;  			s = String.format("block %d", block);  		} else { +			if (state == AltosLib.ao_flight_invalid) +				state = 0;  			if (state_block > 100)  				state_block = 100;  			if (state < min_state) state = min_state; -			if (state >= max_state) state = max_state - 1; +			if (state > max_state) state = max_state; + +			if (state == max_state) +				state_block = 0; +  			state -= min_state;  			int	nstate = max_state - min_state; -			double	spos = (double) (state - min_state) / (double) nstate; +			double	spos = (double) state / (double) nstate;  			double	bpos = state_block / 100.0;  			pos = spos + bpos / nstate;  | 
