Fix for initialization of some variables when preferences.cfg is used

Better case handling in set_callsign()

Reverted high precision info in oled long/latt, until concept for a
better representation.

Signed-off-by: Thomas Osterried <dl9sau@darc.de>
pull/7/head
Thomas Osterried 2022-12-25 15:14:49 +01:00
rodzic 787ed2ba97
commit 8fcf124384
1 zmienionych plików z 37 dodań i 17 usunięć

Wyświetl plik

@ -139,6 +139,9 @@ extern void do_send_status_message_about_shutdown_to_aprsis();
// Variables for APRS packaging // Variables for APRS packaging
String Tcall; //your Call Sign for normal position reports String Tcall; //your Call Sign for normal position reports
#if !defined(CALLSIGN)
#define CALLSIGN "N0CALL"
#endif
String aprsSymbolTable = APRS_SYMBOL_TABLE; String aprsSymbolTable = APRS_SYMBOL_TABLE;
String aprsSymbol = APRS_SYMBOL; String aprsSymbol = APRS_SYMBOL;
String relay_path; String relay_path;
@ -1212,21 +1215,29 @@ String prepareCallsign(const String& callsign){
tmpString += callsign.charAt(i); tmpString += callsign.charAt(i);
} }
} }
tmpString.toUpperCase();
return tmpString; return tmpString;
} }
void set_callsign() { void set_callsign() {
Tcall = prepareCallsign(String(CALLSIGN));
#ifdef ENABLE_PREFERENCES #ifdef ENABLE_PREFERENCES
Tcall = preferences.getString(PREF_APRS_CALLSIGN, ""); String s = prepareCallsign(preferences.getString(PREF_APRS_CALLSIGN, ""));
if (Tcall.isEmpty()){ #else
preferences.putString(PREF_APRS_CALLSIGN, String(CALLSIGN)); String s = "";
#if defined(ENABLE_SYSLOG)
syslog_log(LOG_DEBUG, String("FlashWrite preferences: set_Callsign()"));
#endif
Tcall = preferences.getString(PREF_APRS_CALLSIGN);
}
#endif #endif
if (s.isEmpty()) {
s = prepareCallsign(String(CALLSIGN));
if (s.isEmpty()) {
s = String("N0CALL");
}
#ifdef ENABLE_PREFERENCES
preferences.putString(PREF_APRS_CALLSIGN, s);
#if defined(ENABLE_SYSLOG)
syslog_log(LOG_DEBUG, String("FlashWrite preferences: set_Callsign()"));
#endif
#endif
}
Tcall = s;
} }
// telemetry frames // telemetry frames
@ -1722,6 +1733,14 @@ boolean readFile(fs::FS &fs, const char *filename) {
Serial.printf("readFile: Checked preferences.cfg: is ok. Found %s. Filesize: %d\r\n", PREF_APRS_CALLSIGN, file.size()); Serial.printf("readFile: Checked preferences.cfg: is ok. Found %s. Filesize: %d\r\n", PREF_APRS_CALLSIGN, file.size());
Serial.println("readFile: Preferences: reading from /preferences.cfg"); Serial.println("readFile: Preferences: reading from /preferences.cfg");
load_preferences_cfg_file(); load_preferences_cfg_file();
// needed here, because callsign is not initialized by load_preferences_from_flash()
String s = jsonElementFromPreferenceCFGString(PREF_APRS_CALLSIGN, 0);
s = prepareCallsign(s);
if (s.isEmpty())
s = prepareCallsign(String(CALLSIGN));
if (s.isEmpty())
s = String("N0CALL");
preferences.putString(PREF_APRS_CALLSIGN, s);
} else { } else {
Serial.println("readFile: Preferences: /preferences.cfg not available, using default values from flash"); Serial.println("readFile: Preferences: /preferences.cfg not available, using default values from flash");
err = true; err = true;
@ -2082,25 +2101,25 @@ void load_preferences_from_flash()
aprsSymbolTable = preferences.getString(PREF_APRS_SYMBOL_TABLE, ""); aprsSymbolTable = preferences.getString(PREF_APRS_SYMBOL_TABLE, "");
if (aprsSymbolTable.isEmpty()){ if (aprsSymbolTable.isEmpty()){
preferences.putString(PREF_APRS_SYMBOL_TABLE, APRS_SYMBOL_TABLE); preferences.putString(PREF_APRS_SYMBOL_TABLE, aprsSymbolTable.length() != 1 ? APRS_SYMBOL_TABLE : aprsSymbolTable);
aprsSymbolTable = preferences.getString(PREF_APRS_SYMBOL_TABLE); aprsSymbolTable = preferences.getString(PREF_APRS_SYMBOL_TABLE);
} }
aprsSymbol = preferences.getString(PREF_APRS_SYMBOL, ""); aprsSymbol = preferences.getString(PREF_APRS_SYMBOL, "");
if (aprsSymbol.isEmpty()){ if (aprsSymbol.isEmpty()){
preferences.putString(PREF_APRS_SYMBOL, APRS_SYMBOL); preferences.putString(PREF_APRS_SYMBOL, APRS_SYMBOL);
aprsSymbol = preferences.getString(PREF_APRS_SYMBOL, APRS_SYMBOL); aprsSymbol = preferences.getString(PREF_APRS_SYMBOL, aprsSymbol.length() != 1 ? APRS_SYMBOL : aprsSymbol);
} }
if (!preferences.getBool(PREF_APRS_COMMENT_INIT)){ if (!preferences.getBool(PREF_APRS_COMMENT_INIT)){
preferences.putBool(PREF_APRS_COMMENT_INIT, true); preferences.putBool(PREF_APRS_COMMENT_INIT, true);
preferences.putString(PREF_APRS_COMMENT, MY_COMMENT); preferences.putString(PREF_APRS_COMMENT, aprsComment);
} }
aprsComment = preferences.getString(PREF_APRS_COMMENT, ""); aprsComment = preferences.getString(PREF_APRS_COMMENT, "");
if (!preferences.getBool(PREF_APRS_RELAY_PATH_INIT)){ if (!preferences.getBool(PREF_APRS_RELAY_PATH_INIT)){
preferences.putBool(PREF_APRS_RELAY_PATH_INIT, true); preferences.putBool(PREF_APRS_RELAY_PATH_INIT, true);
preferences.putString(PREF_APRS_RELAY_PATH, DIGI_PATH); preferences.putString(PREF_APRS_RELAY_PATH, relay_path);
} }
relay_path = preferences.getString(PREF_APRS_RELAY_PATH, ""); relay_path = preferences.getString(PREF_APRS_RELAY_PATH, "");
@ -2180,14 +2199,14 @@ void load_preferences_from_flash()
if (!preferences.getBool(PREF_APRS_LATITUDE_PRESET_INIT)){ if (!preferences.getBool(PREF_APRS_LATITUDE_PRESET_INIT)){
preferences.putBool(PREF_APRS_LATITUDE_PRESET_INIT, true); preferences.putBool(PREF_APRS_LATITUDE_PRESET_INIT, true);
preferences.putString(PREF_APRS_LATITUDE_PRESET, LATITUDE_PRESET); preferences.putString(PREF_APRS_LATITUDE_PRESET, aprsLatPreset.isEmpty() ? LATITUDE_PRESET : aprsLatPreset);
} }
aprsLatPreset = preferences.getString(PREF_APRS_LATITUDE_PRESET, ""); aprsLatPreset = preferences.getString(PREF_APRS_LATITUDE_PRESET, "");
//LatShownP = aprsLonPreset; //LatShownP = aprsLonPreset;
if (!preferences.getBool(PREF_APRS_LONGITUDE_PRESET_INIT)){ if (!preferences.getBool(PREF_APRS_LONGITUDE_PRESET_INIT)){
preferences.putBool(PREF_APRS_LONGITUDE_PRESET_INIT, true); preferences.putBool(PREF_APRS_LONGITUDE_PRESET_INIT, true);
preferences.putString(PREF_APRS_LONGITUDE_PRESET, LONGITUDE_PRESET); preferences.putString(PREF_APRS_LONGITUDE_PRESET, aprsLonPreset.isEmpty() ? LONGITUDE_PRESET : aprsLonPreset);
} }
aprsLonPreset = preferences.getString(PREF_APRS_LONGITUDE_PRESET, ""); aprsLonPreset = preferences.getString(PREF_APRS_LONGITUDE_PRESET, "");
//LongShownP = aprsLonPreset; //LongShownP = aprsLonPreset;
@ -2582,7 +2601,7 @@ void setup()
Serial.println("SPIFFS Mount Failed"); Serial.println("SPIFFS Mount Failed");
} }
// always call load_preferneces_from_flash. It updates the _INIT values, and will do some value checks // always call load_preferences_from_flash. It updates the _INIT values, and will do some value checks
load_preferences_from_flash(); load_preferences_from_flash();
if (clear_preferences){ if (clear_preferences){
@ -4010,7 +4029,8 @@ void loop()
// heigher precision 1/1000 arc-minute, if not > 36 knots (valid gps measurered speed). Idea behind: // heigher precision 1/1000 arc-minute, if not > 36 knots (valid gps measurered speed). Idea behind:
// 18.52 m/s are 36kn. We need abt 1s time for understanding the whole displayed line -> resolution of > 2 decimal points is not needed // 18.52 m/s are 36kn. We need abt 1s time for understanding the whole displayed line -> resolution of > 2 decimal points is not needed
// If we consider gps age of < 2s, we use 18kt as limit // If we consider gps age of < 2s, we use 18kt as limit
boolean may_use_heigh_precision = (gps.speed.knots() < 18 && gps.speed.isValid() && gps.speed.age() < 2000); //boolean may_use_heigh_precision = (gps.speed.knots() < 18 && gps.speed.isValid() && gps.speed.age() < 2000);
boolean may_use_heigh_precision = false; // ..until we have a better concept for displaying position in OLED.
// No, unforunately, the display is too small for additional degrees-"-"-delimiter // No, unforunately, the display is too small for additional degrees-"-"-delimiter
//aprsLatPreset_heigher_precision = create_lat_aprs((units & UNITS_SPEED_KN) ? "-" : "", gps.location.rawLat(), may_use_heigh_precision ? 3 : 2); //aprsLatPreset_heigher_precision = create_lat_aprs((units & UNITS_SPEED_KN) ? "-" : "", gps.location.rawLat(), may_use_heigh_precision ? 3 : 2);
//aprsLonPreset_heigher_precision = create_long_aprs((units & UNITS_SPEED_KN) ? "-" : "", gps.location.rawLng(), may_use_heigh_precision ? 3 : 2); //aprsLonPreset_heigher_precision = create_long_aprs((units & UNITS_SPEED_KN) ? "-" : "", gps.location.rawLng(), may_use_heigh_precision ? 3 : 2);