AP menu
All checks were successful
ESP32 Build & Release / build (push) Successful in 6m40s

This commit is contained in:
2026-09-12 13:47:34 +02:00
parent d691febfe4
commit 3708674bbb
14 changed files with 289 additions and 120 deletions

View File

@@ -887,34 +887,45 @@ static void view_storage(void)
lv_obj_set_style_pad_all(stat_box, 8, 0);
lv_obj_set_scrollbar_mode(stat_box, LV_SCROLLBAR_MODE_OFF);
lv_obj_t *key_lbl = lv_label_create(stat_box);
lv_obj_set_width(key_lbl, 125);
lv_obj_set_style_text_font(key_lbl, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(key_lbl, lv_color_hex(0x00E5FF), 0);
lv_label_set_text(key_lbl,
"CACHED CARDS:\n"
"ART CROPS:\n\n"
"STORAGE USED:\n"
"PERCENT USED:\n"
"DECK CAPACITY:");
lv_obj_align(key_lbl, LV_ALIGN_TOP_LEFT, 0, 0);
struct {
const char *key;
char val[32];
} stat_rows[5];
snprintf(stat_rows[0].val, sizeof(stat_rows[0].val), "%d", json_c);
stat_rows[0].key = "CACHED CARDS:";
snprintf(stat_rows[1].val, sizeof(stat_rows[1].val), "%d", jpg_c);
stat_rows[1].key = "ART CROPS:";
snprintf(stat_rows[2].val, sizeof(stat_rows[2].val), "%d / %d KB", (int)(used_b / 1024), (int)(total_b / 1024));
stat_rows[2].key = "STORAGE USED:";
lv_obj_t *val_lbl = lv_label_create(stat_box);
lv_obj_set_width(val_lbl, 70);
lv_obj_set_style_text_font(val_lbl, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(val_lbl, lv_color_hex(COLOR_AMBER), 0);
lv_obj_set_style_text_align(val_lbl, LV_TEXT_ALIGN_RIGHT, 0);
int percent = total_b > 0 ? (int)((used_b * 100) / total_b) : 0;
lv_label_set_text_fmt(val_lbl,
"%d\n"
"%d\n\n"
"%d KB\n"
"%d%%\n"
"~120-140",
json_c, jpg_c,
(int)(used_b / 1024),
percent);
lv_obj_align(val_lbl, LV_ALIGN_TOP_RIGHT, 0, 0);
snprintf(stat_rows[3].val, sizeof(stat_rows[3].val), "%d%%", percent);
stat_rows[3].key = "PERCENT USED:";
snprintf(stat_rows[4].val, sizeof(stat_rows[4].val), "~100 (EDH)");
stat_rows[4].key = "DECK CAPACITY:";
for (int i = 0; i < 5; i++) {
int y_pos = (i < 2) ? (i * 20) : (i * 20 + 8);
lv_obj_t *k = lv_label_create(stat_box);
lv_label_set_text(k, stat_rows[i].key);
lv_obj_set_style_text_font(k, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(k, lv_color_hex(0x00E5FF), 0);
lv_obj_align(k, LV_ALIGN_TOP_LEFT, 0, y_pos);
lv_obj_t *v = lv_label_create(stat_box);
lv_label_set_text(v, stat_rows[i].val);
lv_obj_set_width(v, 90);
lv_label_set_long_mode(v, LV_LABEL_LONG_DOT);
lv_obj_set_style_text_font(v, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(v, lv_color_hex(COLOR_AMBER), 0);
lv_obj_set_style_text_align(v, LV_TEXT_ALIGN_RIGHT, 0);
lv_obj_align(v, LV_ALIGN_TOP_RIGHT, 0, y_pos);
}
/* Action 0: Clear Cards Button */
lv_obj_t *btn0 = lv_obj_create(lv_scr_act());
@@ -990,54 +1001,66 @@ static void view_device_info(void)
const char *ssid = wifi_manager_get_connected_ssid();
int rssi = wifi_manager_get_rssi();
char wifi_line[32];
char wifi_line[64];
if (wifi_manager_connected() && ssid && strlen(ssid) > 0) {
snprintf(wifi_line, sizeof(wifi_line), "%s (%ddB)", ssid, rssi);
} else {
snprintf(wifi_line, sizeof(wifi_line), "Disconnected");
}
lv_obj_t *lbl_keys = lv_label_create(box);
lv_obj_set_width(lbl_keys, 75);
lv_obj_set_style_text_font(lbl_keys, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(lbl_keys, lv_color_hex(0x00E5FF), 0);
lv_label_set_text(lbl_keys,
"VERSION:\n"
"WI-FI:\n"
"IP ADDR:\n"
"HOTSPOT:\n"
"STORAGE:\n"
"CARDS:\n"
"FREE RAM:\n"
"ENCODER:\n"
"HARDWARE:\n"
"RFID:");
lv_obj_align(lbl_keys, LV_ALIGN_TOP_LEFT, 0, 0);
struct {
const char *key;
char val[64];
} rows[10];
lv_obj_t *lbl_vals = lv_label_create(box);
lv_obj_set_width(lbl_vals, 117);
lv_obj_set_style_text_font(lbl_vals, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(lbl_vals, lv_color_hex(COLOR_AMBER), 0);
lv_obj_set_style_text_align(lbl_vals, LV_TEXT_ALIGN_RIGHT, 0);
lv_label_set_text_fmt(lbl_vals,
"%s\n"
"%s\n"
"%s\n"
"192.168.4.1\n"
"%d / %d KB\n"
"%d cached\n"
"%d KB\n"
"%d steps\n"
"ESP32+ST7789\n"
"MFRC522",
ota_manager_get_current_version(),
wifi_line,
wifi_manager_get_ip(),
(int)(used_b / 1024), (int)(total_b / 1024),
json_c,
(int)(free_heap / 1024),
(int)encoder_get_steps_per_detent());
lv_obj_align(lbl_vals, LV_ALIGN_TOP_RIGHT, 0, 0);
snprintf(rows[0].val, sizeof(rows[0].val), "%s", ota_manager_get_current_version());
rows[0].key = "VERSION:";
snprintf(rows[1].val, sizeof(rows[1].val), "%s", wifi_line);
rows[1].key = "WI-FI:";
snprintf(rows[2].val, sizeof(rows[2].val), "%s", wifi_manager_get_ip());
rows[2].key = "IP ADDR:";
snprintf(rows[3].val, sizeof(rows[3].val), "192.168.4.1");
rows[3].key = "HOTSPOT:";
snprintf(rows[4].val, sizeof(rows[4].val), "%d / %d KB", (int)(used_b / 1024), (int)(total_b / 1024));
rows[4].key = "STORAGE:";
snprintf(rows[5].val, sizeof(rows[5].val), "%d cached", json_c);
rows[5].key = "CARDS:";
snprintf(rows[6].val, sizeof(rows[6].val), "%d KB", (int)(free_heap / 1024));
rows[6].key = "FREE RAM:";
snprintf(rows[7].val, sizeof(rows[7].val), "%d steps", (int)encoder_get_steps_per_detent());
rows[7].key = "ENCODER:";
snprintf(rows[8].val, sizeof(rows[8].val), "ESP32+ST7789");
rows[8].key = "HARDWARE:";
snprintf(rows[9].val, sizeof(rows[9].val), "MFRC522");
rows[9].key = "RFID:";
for (int i = 0; i < 10; i++) {
int y_pos = i * 20;
lv_obj_t *k = lv_label_create(box);
lv_label_set_text(k, rows[i].key);
lv_obj_set_style_text_font(k, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(k, lv_color_hex(0x00E5FF), 0);
lv_obj_align(k, LV_ALIGN_TOP_LEFT, 0, y_pos);
lv_obj_t *v = lv_label_create(box);
lv_label_set_text(v, rows[i].val);
lv_obj_set_width(v, 120);
lv_label_set_long_mode(v, LV_LABEL_LONG_DOT);
lv_obj_set_style_text_font(v, &lv_font_montserrat_14, 0);
lv_obj_set_style_text_color(v, lv_color_hex(COLOR_AMBER), 0);
lv_obj_set_style_text_align(v, LV_TEXT_ALIGN_RIGHT, 0);
lv_obj_align(v, LV_ALIGN_TOP_RIGHT, 0, y_pos);
}
lv_obj_t *hint = lv_label_create(lv_scr_act());
lv_label_set_text(hint, "CLICK: MENU");
@@ -1561,6 +1584,7 @@ static void handle_new_card(const char *uid)
char *name = NULL;
esp_err_t ret = storage_manager_lookup_name(uid, &name);
if (ret != ESP_OK || name == NULL) {
wifi_manager_set_power_save(false);
app_set_view(APP_STATE_REGISTRATION);
view_unmapped(uid);
buzzer_chirp(392, 80);
@@ -1757,6 +1781,9 @@ static void handle_encoder_click(void)
} else {
if (s_storage_option_idx == 0) {
storage_manager_clear_all_cards(true);
s_card_name[0] = '\0';
s_uid[0] = '\0';
s_waiting_fetch = false;
buzzer_chirp(1046, 100);
s_storage_confirm_dialog = false;
view_storage();
@@ -1778,6 +1805,9 @@ static void handle_encoder_click(void)
case APP_STATE_SCANNER:
case APP_STATE_CARD_VIEW:
case APP_STATE_REGISTRATION:
if (cur == APP_STATE_REGISTRATION) {
wifi_manager_set_power_save(true);
}
if (cur == APP_STATE_CARD_VIEW && s_card_name[0] != '\0' && !s_waiting_fetch) {
char jp[72];
snprintf(jp, sizeof(jp), STORAGE_CARDS_DIR "/%s.json", s_uid);
@@ -1961,6 +1991,9 @@ static void ui_task(void *arg)
buzzer_chirp(1046, 50);
vTaskDelay(pdMS_TO_TICKS(40));
buzzer_chirp(1318, 70);
if (app_get_view() == APP_STATE_REGISTRATION) {
wifi_manager_set_power_save(true);
}
app_set_view(APP_STATE_MENU);
view_menu();
}