Public Access
The MeshCore preset is the default for a new device, in the Settings and in the radio before the Scanner is opened. The setting now accepts it: it only took the 7 Meshtastic presets, so MeshCore picked in the App was not saved. Messages on MeshCore's public channel are decrypted with the channel's published key (AES-128, checked with 2 bytes of HMAC-SHA256): the row shows who says they sent it and the start of the text, the details the sender, the time and the whole text. Other channels and private messages stay encrypted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk
84 lines
3.8 KiB
C++
84 lines
3.8 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
#include <string>
|
|
|
|
#include "event_bus.h"
|
|
#include "key_value_store.h"
|
|
|
|
namespace roro {
|
|
|
|
enum class Setting : uint8_t {
|
|
SetupDone, // bool: first-boot wizard completed
|
|
LongName, // string, 1..39 bytes
|
|
ShortName, // string, 1..4 bytes
|
|
Region, // string, a known Region ("EU868")
|
|
RegionConfirmed, // bool: nothing transmits until true
|
|
Timezone, // string, POSIX TZ
|
|
Brightness, // int, 10..100 %
|
|
DimTimeoutS, // int, 5..600, below OffTimeoutS
|
|
OffTimeoutS, // int, 10..3600, above DimTimeoutS
|
|
Sound, // bool
|
|
ProbeMacRaw, // bool: probe-request Logs keep raw MAC addresses
|
|
WifiEnabled, // bool: the Wi-Fi Service stays Connected when a Saved Network is in range
|
|
GnssEnabled, // bool: the GNSS Service reads the receiver (M2, Q58)
|
|
CoordinatesDms, // bool: show degrees, minutes and seconds instead of decimal degrees (Q64)
|
|
LoraPreset, // int: the LoRa Scanner's preset, an index into lora::scanPreset (M3, Q95): MeshCore by default
|
|
Dns1, // string: the first DNS server, an IPv4 address (S1, Q108, Q109)
|
|
Dns2, // string: the second, or empty
|
|
DnsAlways, // bool: use them on Automatic (DHCP) networks too, instead of DHCP's
|
|
Ntp1, // string: the first NTP server, a host name or an IPv4 address (S1, Q110)
|
|
Ntp2, // string: the second, or empty
|
|
GnssQuietForLora, // bool: put the GNSS receiver in standby while the LoRa radio listens (issue #20)
|
|
CheckUpdates, // bool: look for a newer release on Gitea once a day (R1, Q165)
|
|
DebugConsole, // bool: the Debug Console listens on Wi-Fi (ADR 0010, Q189: off unless switched on)
|
|
DebugToken, // string: its token, tidied (debug_auth.h); empty until the console is first switched on
|
|
HelpTold, // bool: this device has been told about the help key once (issue #69, Q201)
|
|
VpnConfig, // string: the WireGuard tunnel as a .conf (wg_config.h), private key included: never shown (issue #8)
|
|
VpnAuto, // bool: the tunnel starts whenever Wi-Fi is connected (Q247: off unless switched on)
|
|
SshHosts, // string: the SSH App's saved hosts, one user@host[:port] a line (issue #2, ssh_hosts.h)
|
|
SshKnown, // string: the fingerprint each server showed first, one "host:port fingerprint" a line
|
|
SshKey, // string: this device's own SSH private key, as OpenSSH writes one: never shown
|
|
SshPublic, // string: its public half, the line to put in a server's authorized_keys
|
|
SshFont, // int: the terminal's font, 0 (smallest) to 4
|
|
Count
|
|
};
|
|
|
|
// Typed, validated settings in internal flash. Every accepted change is persisted immediately and
|
|
// announced with a SettingChanged event; rejected values leave the current value untouched.
|
|
class Settings {
|
|
public:
|
|
Settings(KeyValueStore& store, EventBus& bus);
|
|
|
|
// Reads every setting; missing or invalid stored values fall back to defaults.
|
|
void load();
|
|
|
|
int32_t getInt(Setting s) const;
|
|
bool getBool(Setting s) const;
|
|
const std::string& getString(Setting s) const;
|
|
|
|
bool setInt(Setting s, int32_t value);
|
|
bool setBool(Setting s, bool value);
|
|
bool setString(Setting s, const std::string& value);
|
|
|
|
bool canTransmit() const { return getBool(Setting::RegionConfirmed); }
|
|
|
|
static const char* key(Setting s);
|
|
|
|
private:
|
|
struct Value {
|
|
int32_t i = 0;
|
|
std::string str;
|
|
};
|
|
|
|
bool validInt(Setting s, int32_t value) const;
|
|
bool validString(Setting s, const std::string& value) const;
|
|
void changed(Setting s);
|
|
|
|
KeyValueStore& store_;
|
|
EventBus& bus_;
|
|
std::array<Value, static_cast<size_t>(Setting::Count)> values_;
|
|
};
|
|
|
|
} // namespace roro
|