SHA256
ESP32: сохранить до 8 Wi-Fi сетей и ускорить burn
This commit is contained in:
+108
-5
@@ -27,6 +27,7 @@
|
||||
#define SWIPE_THRESHOLD 48
|
||||
#define TAP_CANCEL_THRESHOLD 18
|
||||
#define MAX_SCAN_RESULTS 8
|
||||
#define MAX_SAVED_WIFI_NETWORKS 8
|
||||
#define WIFI_CONNECT_TIMEOUT_MS 12000
|
||||
#define WIFI_RECONNECT_FAST_MS 10000
|
||||
#define WIFI_RECONNECT_SLOW_MS 30000
|
||||
@@ -144,6 +145,8 @@ static uint32_t gLastHandledTouchSequence = 0;
|
||||
static String gWifiSavedSsid;
|
||||
static String gWifiSavedPassword;
|
||||
static String gWifiSelectedSsid;
|
||||
static String gKnownWifiSsids[MAX_SAVED_WIFI_NETWORKS];
|
||||
static String gKnownWifiPasswords[MAX_SAVED_WIFI_NETWORKS];
|
||||
static String gWifiStatusMessage = "No Wi-Fi configured";
|
||||
static String gScanResults[MAX_SCAN_RESULTS];
|
||||
static int gScanResultCount = 0;
|
||||
@@ -182,6 +185,10 @@ static void handleSwipe(SwipeDirection swipe);
|
||||
static void loadPrefs();
|
||||
static void saveWifiPrefs();
|
||||
static void clearWifiPrefs();
|
||||
static void clearSavedWifiList();
|
||||
static int findKnownWifiIndex(const String &ssid);
|
||||
static String savedPasswordForSsid(const String &ssid);
|
||||
static void upsertKnownWifi(const String &ssid, const String &password);
|
||||
static void saveServerPrefs();
|
||||
static void saveAccountPrefs();
|
||||
static void beginSavedWifi();
|
||||
@@ -334,10 +341,86 @@ static void showMessageAt(const String &text, lv_coord_t y) {
|
||||
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, y);
|
||||
}
|
||||
|
||||
static void clearSavedWifiList() {
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS; ++i) {
|
||||
gKnownWifiSsids[i] = "";
|
||||
gKnownWifiPasswords[i] = "";
|
||||
}
|
||||
}
|
||||
|
||||
static int findKnownWifiIndex(const String &ssid) {
|
||||
if (ssid.isEmpty()) {
|
||||
return -1;
|
||||
}
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS; ++i) {
|
||||
if (gKnownWifiSsids[i] == ssid) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
static String savedPasswordForSsid(const String &ssid) {
|
||||
int index = findKnownWifiIndex(ssid);
|
||||
return index >= 0 ? gKnownWifiPasswords[index] : "";
|
||||
}
|
||||
|
||||
static String splitFixedWidth(const String &value, size_t chunkSize) {
|
||||
if (chunkSize == 0 || value.isEmpty()) {
|
||||
return value;
|
||||
}
|
||||
|
||||
String out;
|
||||
for (size_t i = 0; i < value.length(); ++i) {
|
||||
if (i > 0 && (i % chunkSize) == 0) {
|
||||
out += '\n';
|
||||
}
|
||||
out += value.charAt(i);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
static void upsertKnownWifi(const String &ssid, const String &password) {
|
||||
if (ssid.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int existing = findKnownWifiIndex(ssid);
|
||||
if (existing >= 0) {
|
||||
gKnownWifiPasswords[existing] = password;
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS; ++i) {
|
||||
if (gKnownWifiSsids[i].isEmpty()) {
|
||||
gKnownWifiSsids[i] = ssid;
|
||||
gKnownWifiPasswords[i] = password;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS - 1; ++i) {
|
||||
gKnownWifiSsids[i] = gKnownWifiSsids[i + 1];
|
||||
gKnownWifiPasswords[i] = gKnownWifiPasswords[i + 1];
|
||||
}
|
||||
gKnownWifiSsids[MAX_SAVED_WIFI_NETWORKS - 1] = ssid;
|
||||
gKnownWifiPasswords[MAX_SAVED_WIFI_NETWORKS - 1] = password;
|
||||
}
|
||||
|
||||
static void loadPrefs() {
|
||||
clearSavedWifiList();
|
||||
gWifiSavedSsid = gPrefs.getString("wifi_ssid", "");
|
||||
gWifiSavedPassword = gPrefs.getString("wifi_pass", "");
|
||||
gWifiKnownGood = gPrefs.getBool("wifi_known_good", false);
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS; ++i) {
|
||||
String ssidKey = String("wifi_ssid_") + i;
|
||||
String passKey = String("wifi_pass_") + i;
|
||||
gKnownWifiSsids[i] = gPrefs.getString(ssidKey.c_str(), "");
|
||||
gKnownWifiPasswords[i] = gPrefs.getString(passKey.c_str(), "");
|
||||
}
|
||||
if (!gWifiSavedSsid.isEmpty() && findKnownWifiIndex(gWifiSavedSsid) < 0) {
|
||||
upsertKnownWifi(gWifiSavedSsid, gWifiSavedPassword);
|
||||
}
|
||||
gSolanaRpcUrl = gPrefs.getString("solana_rpc", "https://api.devnet.solana.com");
|
||||
gShineServerUrl = gPrefs.getString("shine_server", "https://shineup.me");
|
||||
gLoginValue = gPrefs.getString("login", "");
|
||||
@@ -358,6 +441,17 @@ static void saveWifiPrefs() {
|
||||
gPrefs.putString("wifi_ssid", gWifiSavedSsid);
|
||||
gPrefs.putString("wifi_pass", gWifiSavedPassword);
|
||||
gPrefs.putBool("wifi_known_good", gWifiKnownGood);
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS; ++i) {
|
||||
String ssidKey = String("wifi_ssid_") + i;
|
||||
String passKey = String("wifi_pass_") + i;
|
||||
if (gKnownWifiSsids[i].isEmpty()) {
|
||||
gPrefs.remove(ssidKey.c_str());
|
||||
gPrefs.remove(passKey.c_str());
|
||||
} else {
|
||||
gPrefs.putString(ssidKey.c_str(), gKnownWifiSsids[i]);
|
||||
gPrefs.putString(passKey.c_str(), gKnownWifiPasswords[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void saveServerPrefs() {
|
||||
@@ -382,6 +476,7 @@ static void clearWifiPrefs() {
|
||||
gWifiSavedSsid = "";
|
||||
gWifiSavedPassword = "";
|
||||
gWifiSelectedSsid = "";
|
||||
clearSavedWifiList();
|
||||
gWifiKnownGood = false;
|
||||
gWifiReconnectEnabled = false;
|
||||
gWifiDisconnectedSinceMs = 0;
|
||||
@@ -418,7 +513,13 @@ static String wifiSavedLabel() {
|
||||
if (gWifiSavedSsid.isEmpty()) {
|
||||
return "Saved: none";
|
||||
}
|
||||
return String("Saved: ") + gWifiSavedSsid;
|
||||
int knownCount = 0;
|
||||
for (int i = 0; i < MAX_SAVED_WIFI_NETWORKS; ++i) {
|
||||
if (!gKnownWifiSsids[i].isEmpty()) {
|
||||
knownCount++;
|
||||
}
|
||||
}
|
||||
return String("Saved: ") + gWifiSavedSsid + " (" + knownCount + ")";
|
||||
}
|
||||
|
||||
static String wifiHomeSummary() {
|
||||
@@ -652,6 +753,7 @@ static bool connectWifiNow(const String &ssid, const String &password) {
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
gWifiSavedSsid = ssid;
|
||||
gWifiSavedPassword = password;
|
||||
upsertKnownWifi(ssid, password);
|
||||
gWifiKnownGood = true;
|
||||
gWifiReconnectEnabled = true;
|
||||
gWifiDisconnectedSinceMs = 0;
|
||||
@@ -830,7 +932,7 @@ static void networkSelectCb(lv_event_t *event) {
|
||||
SCREEN_WIFI,
|
||||
"ENTER PASSWORD",
|
||||
String("SSID: ") + gWifiSelectedSsid,
|
||||
"",
|
||||
savedPasswordForSsid(gWifiSelectedSsid),
|
||||
true);
|
||||
}
|
||||
|
||||
@@ -1276,12 +1378,13 @@ static void drawSecretShowScreen() {
|
||||
if (gSecretConfigured) {
|
||||
showMessageAt("Current secret in base58:", 56);
|
||||
lv_obj_t *label = lv_label_create(gRoot);
|
||||
lv_label_set_text(label, gSecretBase58.c_str());
|
||||
String secretLines = splitFixedWidth(gSecretBase58, 10);
|
||||
lv_label_set_text(label, secretLines.c_str());
|
||||
lv_obj_set_width(label, 420);
|
||||
lv_label_set_long_mode(label, LV_LABEL_LONG_WRAP);
|
||||
lv_obj_set_style_text_font(label, &lv_font_montserrat_16, 0);
|
||||
lv_obj_set_style_text_font(label, &lv_font_montserrat_20, 0);
|
||||
lv_obj_set_style_text_color(label, lv_color_hex(0xD9E1EA), 0);
|
||||
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 112);
|
||||
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 102);
|
||||
} else {
|
||||
showMessageAt("Secret not set", 96);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user