From 865c4859d710870245ae7954e729edcaf442a921 Mon Sep 17 00:00:00 2001 From: Luke Hoersten Date: Sun, 14 Jun 2026 20:11:21 -0500 Subject: Default name = MAC; brief wake on boot; drop dead touch defences MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Seed viewport_name with the full base MAC, colons stripped (e8:f6:0a:e0:90:94 → "e8f60ae09094"). Stable across reboots, globally unique, 12 alphanumeric chars — well inside the mDNS hostname limit even with the "viewport-" prefix. - Add a mac_str field to viewport_state and expose it as the new "mac" key in GET /state and as a "mac" line on the info screen. - "Configured" no longer requires a viewport_name (it always has the MAC default); the scrypted URL alone gates outbound POSTs and the loading-vs-info screen choice. - Strip viewport_name[0] fallbacks in http_api / mdns / local_screens now that the field is never empty. - Replace the wake-on-boot-stays-on behaviour with a ~600 ms flash followed by sleep — long enough for the FT5426 touch IC to come out of its initial unresponsive state, short enough that an idle device doesn't burn the backlight. - Drop the touch defensive cruft added when we were chasing a PoE-power theory: the DEV_MODE=0x00 write at init, the touch_reset_pulse() call at init, and the runtime wedge-self-heal in the polling loop didn't actually fix anything — the wake-on-boot flash did. Also delete the display_touch_reset_pulse() helper since it now has zero callers. --- main/local_screens.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'main/local_screens.c') diff --git a/main/local_screens.c b/main/local_screens.c index f25754d..5c72f26 100644 --- a/main/local_screens.c +++ b/main/local_screens.c @@ -199,6 +199,7 @@ esp_err_t local_screens_show_info(void) // is on a 3 KiB stack and can't carry ~1.6 KiB of locals here. Single // caller protected by display ownership, so static is fine. static char vp_name[64]; + static char mac_str[18]; static char scrypt[256]; static char lines[INFO_MAX_LINES][INFO_LINE_BYTES]; bool configured; @@ -212,8 +213,10 @@ esp_err_t local_screens_show_info(void) viewport_state_lock(); viewport_state_t *st = viewport_state_get(); strncpy(vp_name, st->viewport_name, sizeof(vp_name)); + strncpy(mac_str, st->mac_str, sizeof(mac_str)); strncpy(scrypt, st->scrypted_url, sizeof(scrypt)); vp_name[sizeof(vp_name) - 1] = '\0'; + mac_str[sizeof(mac_str) - 1] = '\0'; scrypt[sizeof(scrypt) - 1] = '\0'; configured = st->configured; state = st->state; @@ -237,8 +240,7 @@ esp_err_t local_screens_show_info(void) // 8-char label is prefixed. Long names get visibly truncated; ok for // an info dump on a 480-wide screen. char host[32]; - if (vp_name[0]) snprintf(host, sizeof(host), "viewport-%.15s.local", vp_name); - else snprintf(host, sizeof(host), "viewport.local"); + snprintf(host, sizeof(host), "viewport-%.15s.local", vp_name); char scrypt_short[32]; if (!scrypt[0]) { @@ -292,7 +294,8 @@ esp_err_t local_screens_show_info(void) snprintf(lines[n_lines++], INFO_LINE_BYTES, fmt, ##__VA_ARGS__); \ } while (0) - ADD("name %s", vp_name[0] ? vp_name : "unset"); + ADD("name %s", vp_name); + ADD("mac %s", mac_str); ADD("host %s", host); ADD("ip %s", (ip && ip[0]) ? ip : "no network"); ADD("state %s", state_str); -- cgit v1.2.3