From 4a6bbdb075a5e4f9910cb9b85e615ff8c50aa4ec Mon Sep 17 00:00:00 2001 From: Luke Hoersten Date: Sun, 14 Jun 2026 18:16:46 -0500 Subject: Drop VIEWPORT_STATE_UNCONFIGURED — state is just awake/asleep MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit \`state\` now reports only the screen's runtime state (awake or asleep). Whether a viewport is set up to talk to Scrypted is a separate \`configured\` flag, derived from \`viewport_name && scrypted_url\`. There's no third state. Behaviour changes: - POST /state always succeeds; the previous 409 "device unconfigured" path is gone. The screen toggles regardless of /config status. - POST /config now sets \`configured\` directly from the derived predicate instead of mutating the state enum. - Outbound state-client POST to Scrypted is still gated on a scrypted URL being present — that's the only thing the configured flag now actually controls in the runtime path. GET /state JSON unchanged in shape, but \`state\` is now never "unconfigured" — that's reported through the existing \`configured\` boolean instead. --- main/http_api.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'main/http_api.c') diff --git a/main/http_api.c b/main/http_api.c index 5b5769a..dce57bb 100644 --- a/main/http_api.c +++ b/main/http_api.c @@ -26,11 +26,7 @@ static const char *TAG = "http_api"; static const char *state_name(viewport_run_state_t s) { - switch (s) { - case VIEWPORT_STATE_AWAKE: return "awake"; - case VIEWPORT_STATE_ASLEEP: return "asleep"; - default: return "unconfigured"; - } + return (s == VIEWPORT_STATE_AWAKE) ? "awake" : "asleep"; } static const char *orientation_name(viewport_orientation_t o) @@ -246,10 +242,7 @@ static esp_err_t config_post_handler(httpd_req_t *req) } // A configured device has both a viewport name and a scrypted URL. - if (st->viewport_name[0] && st->scrypted_url[0] && !st->configured) { - st->configured = true; - if (st->state == VIEWPORT_STATE_UNCONFIGURED) st->state = VIEWPORT_STATE_ASLEEP; - } + st->configured = (st->viewport_name[0] && st->scrypted_url[0]); viewport_state_unlock(); @@ -304,11 +297,6 @@ static esp_err_t state_post_handler(httpd_req_t *req) cJSON_Delete(root); esp_err_t err = state_machine_set(target); - if (err == ESP_ERR_INVALID_STATE) { - httpd_resp_set_status(req, "409 Conflict"); - httpd_resp_set_type(req, "text/plain"); - return httpd_resp_send(req, "device unconfigured", HTTPD_RESP_USE_STRLEN); - } if (err != ESP_OK) { httpd_resp_set_status(req, "500 Internal Server Error"); httpd_resp_set_type(req, "text/plain"); @@ -358,7 +346,7 @@ static esp_err_t frame_post_handler(httpd_req_t *req) return respond_status(req, "500 Internal Server Error", "display not initialized"); } - // /frame requires AWAKE. Asleep / unconfigured → 409. + // /frame requires AWAKE. Asleep → 409. if (state_machine_current() != VIEWPORT_STATE_AWAKE) { return respond_status(req, "409 Conflict", "device asleep — POST /state {\"state\":\"wake\"} first"); -- cgit v1.2.3