From: Keith Packard Date: Tue, 9 Jun 2020 03:52:09 +0000 (-0700) Subject: altosui: Adjust max log setting for storage block size X-Git-Tag: 1.9.3~1^2~23 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=e142c4bd6f2fbab74fb7b7cea7e9a19234ed0123 altosui: Adjust max log setting for storage block size Need to round log sizes down to a multiple of the block size so that erasing works sensibly on the device. Signed-off-by: Keith Packard --- diff --git a/altoslib/AltosConfigData.java b/altoslib/AltosConfigData.java index dc9fd6b3..2d22e7b6 100644 --- a/altoslib/AltosConfigData.java +++ b/altoslib/AltosConfigData.java @@ -735,7 +735,7 @@ public class AltosConfigData { dest.set_flight_log_max_enabled(max_enabled); dest.set_radio_enable(radio_enable); - dest.set_flight_log_max_limit(log_space() / 1024); + dest.set_flight_log_max_limit(log_space() >> 10, storage_erase_unit >> 10); dest.set_flight_log_max(flight_log_max); dest.set_ignite_mode(ignite_mode); dest.set_pad_orientation(pad_orientation); @@ -828,7 +828,7 @@ public class AltosConfigData { link.printf("c a %d %d\n", plus, minus); /* HAS_LOG */ - if (flight_log_max != 0) + if (flight_log_max != 0 && flight_log_max != AltosLib.MISSING) link.printf("c l %d\n", flight_log_max); /* HAS_IGNITE */ diff --git a/altosui/AltosConfigFC.java b/altosui/AltosConfigFC.java index 66afd8a0..20ca311e 100644 --- a/altosui/AltosConfigFC.java +++ b/altosui/AltosConfigFC.java @@ -232,7 +232,9 @@ public class AltosConfigFC implements ActionListener { try { /* bounds check stuff */ - if (config_ui.flight_log_max() > data.log_space() / 1024) { + if (config_ui.flight_log_max() != AltosLib.MISSING && + config_ui.flight_log_max() > data.log_space() / 1024) + { JOptionPane.showMessageDialog(owner, String.format("Requested flight log, %dk, is larger than the available space, %dk.\n", config_ui.flight_log_max(), diff --git a/altosui/AltosConfigFCUI.java b/altosui/AltosConfigFCUI.java index 2eb6ae75..b7dc70bf 100644 --- a/altosui/AltosConfigFCUI.java +++ b/altosui/AltosConfigFCUI.java @@ -1271,16 +1271,18 @@ public class AltosConfigFCUI return AltosLib.MISSING; } - public void set_flight_log_max_limit(int new_flight_log_max_limit) { + public void set_flight_log_max_limit(int new_flight_log_max_limit, int new_storage_erase_unit) { flight_log_max_limit = new_flight_log_max_limit; if (new_flight_log_max_limit != AltosLib.MISSING) { flight_log_max_value.removeAllItems(); for (int i = 8; i >= 1; i--) { int size = flight_log_max_limit / i; + if (new_storage_erase_unit != 0) + size &= ~(new_storage_erase_unit - 1); flight_log_max_value.addItem(String.format("%d (%d flights)", size, i)); } } - if (flight_log_max != 0) + if (flight_log_max != 0 && flight_log_max != AltosLib.MISSING) set_flight_log_max(flight_log_max); } diff --git a/altosuilib/AltosEepromDelete.java b/altosuilib/AltosEepromDelete.java index ff1b15c8..214ae530 100644 --- a/altosuilib/AltosEepromDelete.java +++ b/altosuilib/AltosEepromDelete.java @@ -45,11 +45,13 @@ public class AltosEepromDelete implements Runnable { serial_line.printf("d %d\n", log.flight); for (;;) { /* It can take a while to erase the flash... */ - String line = serial_line.get_reply(20000); + String line = serial_line.get_reply(200000); if (line == null) throw new TimeoutException(); if (line.equals("Erased")) break; + if (line.equals("Failed to erase")) + throw new IOException(line); if (line.startsWith("No such")) throw new IOException(line); } diff --git a/telegps/TeleGPSConfigUI.java b/telegps/TeleGPSConfigUI.java index 1a951309..7c5d186e 100644 --- a/telegps/TeleGPSConfigUI.java +++ b/telegps/TeleGPSConfigUI.java @@ -874,14 +874,18 @@ public class TeleGPSConfigUI return parse_int("flight log max", flight_log_max_value.getSelectedItem().toString(), true); } - public void set_flight_log_max_limit(int new_flight_log_max_limit) { + public void set_flight_log_max_limit(int new_flight_log_max_limit, int new_storage_erase_unit) { flight_log_max_limit = new_flight_log_max_limit; - flight_log_max_value.removeAllItems(); - for (int i = 8; i >= 1; i--) { - int size = flight_log_max_limit / i; - flight_log_max_value.addItem(String.format("%d (%d flights)", size, i)); + if (new_flight_log_max_limit != AltosLib.MISSING) { + flight_log_max_value.removeAllItems(); + for (int i = 8; i >= 1; i--) { + int size = flight_log_max_limit / i; + if (new_storage_erase_unit != 0) + size &= ~(new_storage_erase_unit - 1); + flight_log_max_value.addItem(String.format("%d (%d flights)", size, i)); + } } - if (flight_log_max != 0) + if (flight_log_max != 0 && flight_log_max != AltosLib.MISSING) set_flight_log_max(flight_log_max); }