Fix status screen logic: first-connection screen, false-negative skip
Two bugs found testing against a real (partially-configured) server: - The reachability check hit HEAD / with -- our server only registers GET on that route, so it always got a 405. Harmless for the check itself (any completed HTTP response counts as "reachable"), but noisy and semantically wrong. Points at GET /health instead, which exists for exactly this. - fetch_and_display() failing before any pixel data was sent (e.g. a 400/404 on /frame/image) was treated the same as a mid-stream failure, which skips drawing a status screen to avoid compounding flashing on top of an already-refreshed panel. But a pre-stream failure never touches the panel at all, so skipping the status screen there just left the old provisioning QR code on screen with no indication anything had gone wrong. fetch_and_display() now reports whether streaming ever started so the caller can tell the two cases apart. - The status screen now always shows on the very first successful connection after (re)provisioning, regardless of outcome, via a new "connected_once" NVS flag that frame_config_save() resets on every fresh provisioning event. Later wakes skip it on success (straight to the photo) but still show it on any failure, matching the intent from the original status-screen feature.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include "esp_err.h"
|
||||
|
||||
@@ -20,9 +21,21 @@ typedef struct {
|
||||
*/
|
||||
esp_err_t frame_config_load(frame_config_t *out);
|
||||
|
||||
/** Saves the home-network config to NVS. */
|
||||
/** Saves the home-network config to NVS. Resets the "connected once"
|
||||
* flag below, since this is a fresh (re)provisioning event. */
|
||||
esp_err_t frame_config_save(const frame_config_t *cfg);
|
||||
|
||||
/**
|
||||
* Whether the device has already shown the post-connect status screen at
|
||||
* least once since the current WiFi config was saved. Used so the status
|
||||
* screen always shows on the first connection after (re)provisioning, but
|
||||
* is skipped on later successful wakes to save an extra refresh.
|
||||
*/
|
||||
bool frame_config_has_connected_once(void);
|
||||
|
||||
/** Marks the status screen as having been shown for the current WiFi config. */
|
||||
void frame_config_mark_connected_once(void);
|
||||
|
||||
/**
|
||||
* Returns this device's provisioning AP identity: a fixed SSID (from
|
||||
* Kconfig) and a password that's generated once on first use and persisted
|
||||
|
||||
Reference in New Issue
Block a user