From e142c4bd6f2fbab74fb7b7cea7e9a19234ed0123 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Mon, 8 Jun 2020 20:52:09 -0700 Subject: [PATCH] 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 --- altoslib/AltosConfigData.java | 4 ++-- altosui/AltosConfigFC.java | 4 +++- altosui/AltosConfigFCUI.java | 6 ++++-- altosuilib/AltosEepromDelete.java | 4 +++- telegps/TeleGPSConfigUI.java | 16 ++++++++++------ 5 files changed, 22 insertions(+), 12 deletions(-) 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); } -- 2.30.2