As TeleGPS doesn't have flight states, the EEProm download progress
bar shouldn't show 'state invalid', and it should use a different
scale for each block.
Fix this by having AltosConfigData know which devices have state based
on their log format, then mark the progress bar state limits as
'invalid/invalid' instead of 'boost/landed'. Then have the progress
bar use that to set a more reasonable scale for each block.
Signed-off-by: Keith Packard <keithp@keithp.com>
dest.set_tracker_interval(tracker_interval);
}
dest.set_tracker_interval(tracker_interval);
}
+ public boolean log_has_state() {
+ switch (log_format) {
+ case AltosLib.AO_LOG_FORMAT_TELEGPS:
+ return false;
+ }
+ return true;
+ }
+
public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException {
/* HAS_FLIGHT */
public void save(AltosLink link, boolean remote) throws InterruptedException, TimeoutException {
/* HAS_FLIGHT */
flights = given_flights;
success = false;
flights = given_flights;
success = false;
- monitor.set_states(AltosLib.ao_flight_boost, AltosLib.ao_flight_landed);
+ if (flights.config_data.log_has_state())
+ monitor.set_states(AltosLib.ao_flight_boost, AltosLib.ao_flight_landed);
+ else
+ monitor.set_states(AltosLib.ao_flight_invalid, AltosLib.ao_flight_invalid);
int min_state, max_state;
ActionListener listener;
int min_state, max_state;
ActionListener listener;
+ static final int progress_max = 10000;
+
public AltosEepromMonitorUI(JFrame owner) {
super (owner, "Download Flight Data", false);
public AltosEepromMonitorUI(JFrame owner) {
super (owner, "Download Flight Data", false);
pbar = new JProgressBar();
pbar.setMinimum(0);
pbar = new JProgressBar();
pbar.setMinimum(0);
+ pbar.setMaximum(progress_max);
pbar.setValue(0);
pbar.setString("startup");
pbar.setStringPainted(true);
pbar.setValue(0);
pbar.setString("startup");
pbar.setStringPainted(true);
}
private void set_value_internal(String state_name, int state, int state_block, int block) {
}
private void set_value_internal(String state_name, int state, int state_block, int block) {
- if (state_block > 100)
- state_block = 100;
- if (state < min_state) state = min_state;
- if (state >= max_state) state = max_state - 1;
- state -= min_state;
-
- int pos = state * 100 + state_block;
+ double pos;
+ String s;
+
+ if (min_state == AltosLib.ao_flight_invalid) {
+ int lblock = block;
+ if (lblock > 1000)
+ lblock = 1000;
+ pos = lblock / 1000.0;
+ s = String.format("block %d", block);
+ } else {
+ if (state_block > 100)
+ state_block = 100;
+ if (state < min_state) state = min_state;
+ if (state >= max_state) state = max_state - 1;
+ state -= min_state;
+
+ int nstate = max_state - min_state;
+
+ double spos = (double) (state - min_state) / (double) nstate;
+ double bpos = state_block / 100.0;
+
+ pos = spos + bpos / nstate;
+
+ s = String.format("block %d state %s", block, state_name);
+ }
- pbar.setString(String.format("block %d state %s", block, state_name));
- pbar.setValue(pos);
+ pbar.setString(s);
+ pbar.setValue((int) (pos * progress_max));
}
public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {
}
public void set_value(String in_state_name, int in_state, int in_state_block, int in_block) {