mirror of
https://github.com/daveallie/crosspoint-reader.git
synced 2026-02-06 23:57:39 +03:00
feature: adding a default wifi option
This commit is contained in:
parent
cd1a441d2b
commit
145c7338a9
@ -207,17 +207,17 @@ bool WifiCredentialStore::connectToDefaultWifi(int timeoutMs) const {
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.disconnect(false);
|
||||
delay(100);
|
||||
|
||||
|
||||
Serial.printf("[%lu] [WCS] Scanning for SSID: %s\n", millis(), defaultSSID.c_str());
|
||||
WiFi.scanNetworks(false);
|
||||
|
||||
|
||||
const unsigned long scanStart = millis();
|
||||
int16_t scanResult = WiFi.scanComplete();
|
||||
while (scanResult == WIFI_SCAN_RUNNING && millis() - scanStart < 3000) {
|
||||
delay(100);
|
||||
scanResult = WiFi.scanComplete();
|
||||
}
|
||||
|
||||
|
||||
if (scanResult > 0) {
|
||||
bool ssidFound = false;
|
||||
for (int i = 0; i < scanResult; i++) {
|
||||
@ -227,9 +227,9 @@ bool WifiCredentialStore::connectToDefaultWifi(int timeoutMs) const {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WiFi.scanDelete();
|
||||
|
||||
|
||||
if (!ssidFound) {
|
||||
Serial.printf("[%lu] [WCS] SSID not found in scan results, skipping connection attempt\n", millis());
|
||||
return false;
|
||||
@ -260,7 +260,6 @@ bool WifiCredentialStore::connectToDefaultWifi(int timeoutMs) const {
|
||||
void WifiCredentialStore::ensureWifiConnected(ActivityWithSubactivity& activity, GfxRenderer& renderer,
|
||||
MappedInputManager& mappedInput, const std::function<void()>& onSuccess,
|
||||
const std::function<void()>& onCancel, int timeoutMs) {
|
||||
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
onSuccess();
|
||||
return;
|
||||
@ -276,12 +275,13 @@ void WifiCredentialStore::ensureWifiConnected(ActivityWithSubactivity& activity,
|
||||
|
||||
// Auto-connect failed - show WiFi selection list
|
||||
Serial.printf("[%lu] [WCS] Auto-connect failed, showing WiFi selection\n", millis());
|
||||
activity.enterNewActivity(new WifiSelectionActivity(renderer, mappedInput, [&activity, onSuccess, onCancel](bool connected) {
|
||||
activity.exitActivity();
|
||||
if (connected) {
|
||||
onSuccess();
|
||||
} else {
|
||||
onCancel();
|
||||
}
|
||||
}));
|
||||
activity.enterNewActivity(
|
||||
new WifiSelectionActivity(renderer, mappedInput, [&activity, onSuccess, onCancel](bool connected) {
|
||||
activity.exitActivity();
|
||||
if (connected) {
|
||||
onSuccess();
|
||||
} else {
|
||||
onCancel();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
@ -368,7 +368,7 @@ void OpdsBookBrowserActivity::checkAndConnectWifi() {
|
||||
WIFI_STORE.loadFromFile();
|
||||
const bool hasDefaultSSID = !WIFI_STORE.getDefaultSSID().empty();
|
||||
const bool alreadyConnected = (WiFi.status() == WL_CONNECTED);
|
||||
|
||||
|
||||
if (hasDefaultSSID && !alreadyConnected) {
|
||||
statusMessage = "Connecting to WiFi...";
|
||||
updateRequired = true;
|
||||
@ -377,12 +377,10 @@ void OpdsBookBrowserActivity::checkAndConnectWifi() {
|
||||
WIFI_STORE.ensureWifiConnected(
|
||||
*this, renderer, mappedInput,
|
||||
[this]() {
|
||||
state = BrowserState::LOADING;
|
||||
statusMessage = "Loading...";
|
||||
updateRequired = true;
|
||||
fetchFeed(currentPath);
|
||||
state = BrowserState::LOADING;
|
||||
statusMessage = "Loading...";
|
||||
updateRequired = true;
|
||||
fetchFeed(currentPath);
|
||||
},
|
||||
[this]() {
|
||||
onGoHome();
|
||||
});
|
||||
[this]() { onGoHome(); });
|
||||
}
|
||||
|
||||
@ -348,8 +348,8 @@ void WifiSelectionActivity::loop() {
|
||||
displaySetDefaultPrompt();
|
||||
}
|
||||
onComplete(true);
|
||||
}else if (mappedInput.wasPressed(MappedInputManager::Button::Back)) {
|
||||
// Skip saving, complete anyway
|
||||
} else if (mappedInput.wasPressed(MappedInputManager::Button::Back)) {
|
||||
// Skip saving, complete anyway
|
||||
onComplete(true);
|
||||
}
|
||||
return;
|
||||
|
||||
@ -27,7 +27,7 @@ enum class WifiSelectionState {
|
||||
CONNECTING, // Attempting to connect
|
||||
CONNECTED, // Successfully connected
|
||||
SAVE_PROMPT, // Asking user if they want to save the password
|
||||
SET_DEFAULT_PROMPT, // Asking user if they want to set as default
|
||||
SET_DEFAULT_PROMPT, // Asking user if they want to set as default
|
||||
CONNECTION_FAILED, // Connection failed
|
||||
FORGET_PROMPT // Asking user if they want to forget the network
|
||||
};
|
||||
@ -104,9 +104,9 @@ class WifiSelectionActivity final : public ActivityWithSubactivity {
|
||||
|
||||
public:
|
||||
explicit WifiSelectionActivity(GfxRenderer& renderer, MappedInputManager& mappedInput,
|
||||
const std::function<void(bool connected)>& onComplete,
|
||||
bool fromSettingsScreen = false)
|
||||
: ActivityWithSubactivity("WifiSelection", renderer, mappedInput), onComplete(onComplete),
|
||||
const std::function<void(bool connected)>& onComplete, bool fromSettingsScreen = false)
|
||||
: ActivityWithSubactivity("WifiSelection", renderer, mappedInput),
|
||||
onComplete(onComplete),
|
||||
fromSettingsScreen(fromSettingsScreen) {}
|
||||
void onEnter() override;
|
||||
void onExit() override;
|
||||
|
||||
@ -12,7 +12,7 @@ namespace {
|
||||
constexpr int PAGE_ITEMS = 23;
|
||||
constexpr int SKIP_PAGE_MS = 700;
|
||||
constexpr unsigned long IGNORE_INPUT_MS = 300;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void WifiConnectionsActivity::taskTrampoline(void* param) {
|
||||
auto* self = static_cast<WifiConnectionsActivity*>(param);
|
||||
@ -32,12 +32,7 @@ void WifiConnectionsActivity::onEnter() {
|
||||
|
||||
WIFI_STORE.loadFromFile();
|
||||
|
||||
xTaskCreate(&WifiConnectionsActivity::taskTrampoline, "WifiConnectionsTask",
|
||||
4096,
|
||||
this,
|
||||
1,
|
||||
&displayTaskHandle
|
||||
);
|
||||
xTaskCreate(&WifiConnectionsActivity::taskTrampoline, "WifiConnectionsTask", 4096, this, 1, &displayTaskHandle);
|
||||
}
|
||||
|
||||
void WifiConnectionsActivity::onExit() {
|
||||
@ -68,7 +63,7 @@ void WifiConnectionsActivity::loop() {
|
||||
WIFI_STORE.loadFromFile();
|
||||
const std::string currentDefault = WIFI_STORE.getDefaultSSID();
|
||||
const bool isDefault = (selectedNetwork == currentDefault);
|
||||
|
||||
|
||||
// Handle settings menu
|
||||
if (mappedInput.wasReleased(MappedInputManager::Button::Up) ||
|
||||
mappedInput.wasReleased(MappedInputManager::Button::Left)) {
|
||||
@ -113,13 +108,16 @@ void WifiConnectionsActivity::loop() {
|
||||
// "Add new connection" selected - launch WiFi selection
|
||||
xSemaphoreTake(renderingMutex, portMAX_DELAY);
|
||||
exitActivity();
|
||||
enterNewActivity(new WifiSelectionActivity(renderer, mappedInput, [this](bool connected) {
|
||||
// Reload credentials after WiFi selection
|
||||
WIFI_STORE.loadFromFile();
|
||||
exitActivity();
|
||||
enterTime = millis(); // Reset enter time to ignore input after subactivity exits
|
||||
updateRequired = true;
|
||||
}, true)); // true = fromSettingsScreen (always save password and disconnect after)
|
||||
enterNewActivity(new WifiSelectionActivity(
|
||||
renderer, mappedInput,
|
||||
[this](bool connected) {
|
||||
// Reload credentials after WiFi selection
|
||||
WIFI_STORE.loadFromFile();
|
||||
exitActivity();
|
||||
enterTime = millis(); // Reset enter time to ignore input after subactivity exits
|
||||
updateRequired = true;
|
||||
},
|
||||
true)); // true = fromSettingsScreen (always save password and disconnect after)
|
||||
xSemaphoreGive(renderingMutex);
|
||||
} else {
|
||||
// Regular credential selected
|
||||
@ -231,9 +229,8 @@ void WifiConnectionsActivity::render() {
|
||||
const std::string currentDefault = WIFI_STORE.getDefaultSSID();
|
||||
const bool isDefault = (selectedNetwork == currentDefault);
|
||||
|
||||
const char* defaultText = settingsSelection == 0
|
||||
? (isDefault ? "> Remove Default" : "> Set Default")
|
||||
: (isDefault ? " Remove Default" : " Set Default");
|
||||
const char* defaultText = settingsSelection == 0 ? (isDefault ? "> Remove Default" : "> Set Default")
|
||||
: (isDefault ? " Remove Default" : " Set Default");
|
||||
const char* deleteText = settingsSelection == 1 ? "> Delete" : " Delete";
|
||||
renderer.drawCenteredText(UI_10_FONT_ID, centerY + 20, defaultText);
|
||||
renderer.drawCenteredText(UI_10_FONT_ID, centerY + 40, deleteText);
|
||||
@ -250,7 +247,7 @@ void WifiConnectionsActivity::render() {
|
||||
const auto pageStartIndex = selectorIndex / PAGE_ITEMS * PAGE_ITEMS;
|
||||
const std::string& defaultSSID = WIFI_STORE.getDefaultSSID();
|
||||
renderer.fillRect(0, 60 + (selectorIndex % PAGE_ITEMS) * 30 - 2, pageWidth - 1, 30);
|
||||
|
||||
|
||||
for (size_t i = pageStartIndex; i < totalItems && i < pageStartIndex + PAGE_ITEMS; i++) {
|
||||
std::string displayText;
|
||||
if (i == 0) {
|
||||
@ -268,4 +265,3 @@ void WifiConnectionsActivity::render() {
|
||||
|
||||
renderer.displayBuffer();
|
||||
}
|
||||
|
||||
|
||||
@ -23,10 +23,7 @@ class WifiConnectionsActivity final : public ActivityWithSubactivity {
|
||||
void loop() override;
|
||||
|
||||
private:
|
||||
enum class State {
|
||||
LIST,
|
||||
SETTINGS_MENU
|
||||
};
|
||||
enum class State { LIST, SETTINGS_MENU };
|
||||
|
||||
TaskHandle_t displayTaskHandle = nullptr;
|
||||
SemaphoreHandle_t renderingMutex = nullptr;
|
||||
@ -47,4 +44,3 @@ class WifiConnectionsActivity final : public ActivityWithSubactivity {
|
||||
void deleteNetwork();
|
||||
void cancelSettings();
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user