Add FTP username and password settings to configuration

This commit is contained in:
altsysrq 2026-01-05 21:13:16 -06:00
parent 5bf721ae42
commit 1978739b43
2 changed files with 25 additions and 9 deletions

View File

@ -9,44 +9,53 @@
// Define the static settings list // Define the static settings list
namespace { namespace {
constexpr int settingsCount = 14; constexpr int settingsCount = 16;
const SettingInfo settingsList[settingsCount] = { const SettingInfo settingsList[settingsCount] = {
// Should match with SLEEP_SCREEN_MODE // Should match with SLEEP_SCREEN_MODE
{"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, {"Dark", "Light", "Custom", "Cover"}}, {"Sleep Screen", SettingType::ENUM, &CrossPointSettings::sleepScreen, nullptr, {"Dark", "Light", "Custom", "Cover"}},
{"Status Bar", SettingType::ENUM, &CrossPointSettings::statusBar, {"None", "No Progress", "Full"}}, {"Status Bar", SettingType::ENUM, &CrossPointSettings::statusBar, nullptr, {"None", "No Progress", "Full"}},
{"Extra Paragraph Spacing", SettingType::TOGGLE, &CrossPointSettings::extraParagraphSpacing, {}}, {"Extra Paragraph Spacing", SettingType::TOGGLE, &CrossPointSettings::extraParagraphSpacing, nullptr, {}},
{"Short Power Button Click", SettingType::TOGGLE, &CrossPointSettings::shortPwrBtn, {}}, {"Short Power Button Click", SettingType::TOGGLE, &CrossPointSettings::shortPwrBtn, nullptr, {}},
{"Reading Orientation", {"Reading Orientation",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::orientation, &CrossPointSettings::orientation,
nullptr,
{"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}}, {"Portrait", "Landscape CW", "Inverted", "Landscape CCW"}},
{"Front Button Layout", {"Front Button Layout",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::frontButtonLayout, &CrossPointSettings::frontButtonLayout,
nullptr,
{"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}}, {"Bck, Cnfrm, Lft, Rght", "Lft, Rght, Bck, Cnfrm", "Lft, Bck, Cnfrm, Rght"}},
{"Side Button Layout (reader)", {"Side Button Layout (reader)",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::sideButtonLayout, &CrossPointSettings::sideButtonLayout,
nullptr,
{"Prev, Next", "Next, Prev"}}, {"Prev, Next", "Next, Prev"}},
{"Reader Font Family", {"Reader Font Family",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::fontFamily, &CrossPointSettings::fontFamily,
nullptr,
{"Bookerly", "Noto Sans", "Open Dyslexic"}}, {"Bookerly", "Noto Sans", "Open Dyslexic"}},
{"Reader Font Size", SettingType::ENUM, &CrossPointSettings::fontSize, {"Small", "Medium", "Large", "X Large"}}, {"Reader Font Size", SettingType::ENUM, &CrossPointSettings::fontSize, nullptr, {"Small", "Medium", "Large", "X Large"}},
{"Reader Line Spacing", SettingType::ENUM, &CrossPointSettings::lineSpacing, {"Tight", "Normal", "Wide"}}, {"Reader Line Spacing", SettingType::ENUM, &CrossPointSettings::lineSpacing, nullptr, {"Tight", "Normal", "Wide"}},
{"Reader Paragraph Alignment", {"Reader Paragraph Alignment",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::paragraphAlignment, &CrossPointSettings::paragraphAlignment,
nullptr,
{"Justify", "Left", "Center", "Right"}}, {"Justify", "Left", "Center", "Right"}},
{"Time to Sleep", {"Time to Sleep",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::sleepTimeout, &CrossPointSettings::sleepTimeout,
nullptr,
{"1 min", "5 min", "10 min", "15 min", "30 min"}}, {"1 min", "5 min", "10 min", "15 min", "30 min"}},
{"Refresh Frequency", {"Refresh Frequency",
SettingType::ENUM, SettingType::ENUM,
&CrossPointSettings::refreshFrequency, &CrossPointSettings::refreshFrequency,
nullptr,
{"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}}, {"1 page", "5 pages", "10 pages", "15 pages", "30 pages"}},
{"Check for updates", SettingType::ACTION, nullptr, {}}, {"FTP Username", SettingType::TEXT, nullptr, &CrossPointSettings::ftpUsername, {}},
{"FTP Password", SettingType::TEXT, nullptr, &CrossPointSettings::ftpPassword, {}},
{"Check for updates", SettingType::ACTION, nullptr, nullptr, {}},
}; };
} // namespace } // namespace
@ -137,6 +146,10 @@ void SettingsActivity::toggleCurrentSetting() {
} else if (setting.type == SettingType::ENUM && setting.valuePtr != nullptr) { } else if (setting.type == SettingType::ENUM && setting.valuePtr != nullptr) {
const uint8_t currentValue = SETTINGS.*(setting.valuePtr); const uint8_t currentValue = SETTINGS.*(setting.valuePtr);
SETTINGS.*(setting.valuePtr) = (currentValue + 1) % static_cast<uint8_t>(setting.enumValues.size()); SETTINGS.*(setting.valuePtr) = (currentValue + 1) % static_cast<uint8_t>(setting.enumValues.size());
} else if (setting.type == SettingType::TEXT && setting.stringValuePtr != nullptr) {
// For now, TEXT settings are display-only in this UI
// In a future version, this could launch a text input dialog
return;
} else if (setting.type == SettingType::ACTION) { } else if (setting.type == SettingType::ACTION) {
if (std::string(setting.name) == "Check for updates") { if (std::string(setting.name) == "Check for updates") {
xSemaphoreTake(renderingMutex, portMAX_DELAY); xSemaphoreTake(renderingMutex, portMAX_DELAY);
@ -195,6 +208,8 @@ void SettingsActivity::render() const {
} else if (settingsList[i].type == SettingType::ENUM && settingsList[i].valuePtr != nullptr) { } else if (settingsList[i].type == SettingType::ENUM && settingsList[i].valuePtr != nullptr) {
const uint8_t value = SETTINGS.*(settingsList[i].valuePtr); const uint8_t value = SETTINGS.*(settingsList[i].valuePtr);
valueText = settingsList[i].enumValues[value]; valueText = settingsList[i].enumValues[value];
} else if (settingsList[i].type == SettingType::TEXT && settingsList[i].stringValuePtr != nullptr) {
valueText = SETTINGS.*(settingsList[i].stringValuePtr);
} }
const auto width = renderer.getTextWidth(UI_10_FONT_ID, valueText.c_str()); const auto width = renderer.getTextWidth(UI_10_FONT_ID, valueText.c_str());
renderer.drawText(UI_10_FONT_ID, pageWidth - 20 - width, settingY, valueText.c_str(), i != selectedSettingIndex); renderer.drawText(UI_10_FONT_ID, pageWidth - 20 - width, settingY, valueText.c_str(), i != selectedSettingIndex);

View File

@ -11,13 +11,14 @@
class CrossPointSettings; class CrossPointSettings;
enum class SettingType { TOGGLE, ENUM, ACTION }; enum class SettingType { TOGGLE, ENUM, ACTION, TEXT };
// Structure to hold setting information // Structure to hold setting information
struct SettingInfo { struct SettingInfo {
const char* name; // Display name of the setting const char* name; // Display name of the setting
SettingType type; // Type of setting SettingType type; // Type of setting
uint8_t CrossPointSettings::* valuePtr; // Pointer to member in CrossPointSettings (for TOGGLE/ENUM) uint8_t CrossPointSettings::* valuePtr; // Pointer to member in CrossPointSettings (for TOGGLE/ENUM)
std::string CrossPointSettings::* stringValuePtr; // Pointer to string member (for TEXT)
std::vector<std::string> enumValues; std::vector<std::string> enumValues;
}; };