Consolidate firmware UI; server learns board from the device, not a picker
Build and push server image / build-and-push (push) Successful in 37s
Build and push server image / build-and-push (push) Successful in 37s
All firmware-related controls (manual upload, Gitea repo URL, auto-update checkbox, detected board, Update frame button) now live in one "Firmware update" card instead of being split across the main Settings form and a separate card. The board variant used to pick a Gitea release asset was a dropdown the user had to set by hand and could get wrong. The device now reports it itself via a new X-Frame-Board header (CONFIG_FRAME_BOARD_NAME, "devkit" by default, "xiao" in sdkconfig.xiao) on every /frame/config poll, stored as device_board_variant -- the server learns it instead. Update checks/applies are gated on the board being known, since there's nothing to fetch until a device has checked in at least once.
This commit is contained in:
@@ -91,21 +91,24 @@ class FrameConfig(BaseModel):
|
||||
battery_log: list = []
|
||||
|
||||
# Device liveness/telemetry: last_seen is touched by every /frame/*
|
||||
# request; device_firmware_version comes from the X-Frame-Version
|
||||
# header the device sends with its config poll.
|
||||
# request; device_firmware_version/device_board_variant come from the
|
||||
# X-Frame-Version/X-Frame-Board headers the device sends with its
|
||||
# config poll (CONFIG_FRAME_BOARD_NAME on the firmware side).
|
||||
last_seen: float = 0.0
|
||||
device_firmware_version: str = ""
|
||||
device_board_variant: str = "" # "" until a device has ever checked in
|
||||
# Version parsed out of the most recently uploaded OTA image
|
||||
# (POST /api/firmware); "" = none uploaded yet.
|
||||
firmware_available_version: str = ""
|
||||
|
||||
# Gitea-hosted firmware auto-update (see app/gitea_releases.py).
|
||||
# repo_url empty = feature off, no Gitea calls made at all.
|
||||
# board_variant picks which release asset to pull -- must match one of
|
||||
# the names .gitea/workflows/firmware-release-build.yml publishes
|
||||
# repo_url empty = feature off, no Gitea calls made at all. Which
|
||||
# release asset to pull is learned from the device itself
|
||||
# (device_board_variant below, from its X-Frame-Board header) rather
|
||||
# than picked by the user -- must match one of the names
|
||||
# .gitea/workflows/firmware-release-build.yml publishes
|
||||
# (firmware-<board_variant>.bin).
|
||||
firmware_update_repo_url: str = "" # e.g. "https://git.example.com/owner/repo"
|
||||
firmware_board_variant: str = "xiao" # "xiao" or "devkit"
|
||||
firmware_auto_update: bool = False # pull+stage a newer release with no button click
|
||||
# Optional Gitea PAT (read-only access is enough) for a private repo's
|
||||
# releases; blank is fine for a public repo. GITEA_FIRMWARE_TOKEN env
|
||||
|
||||
Reference in New Issue
Block a user