From 65c6ad3eaab5a770194fe8732e976a048ffd5784 Mon Sep 17 00:00:00 2001 From: Cogential <126894104+Cogential@users.noreply.github.com> Date: Mon, 5 Oct 2026 13:59:43 -0400 Subject: [PATCH] Port Manager: install and update Steam Frame ports from GitHub releases manager.py is a standard-library service on the Frame (port 8643). It lists each catalog port's releases, downloads the chosen asset (zip, or an AppImage it unpacks with --appimage-extract and gives a launcher), stages it next to ~/devkit-game/ and swaps it in, keeping ROMs placed next to run.sh and the previous install for rollback. It refuses while the game runs, fixes executable bits, registers the shortcut with Steam and adds library art. A token in the settings unlocks private repos. app/ is the controller-driven headset front end (C + SDL2, talks to the service over loopback with tab-separated replies); page.html is the browser one. deploy.sh installs both over SSH. Tested on the laptop against the real releases: install, version switch, ROM carry-over, rollback, the running-game guard, the AppImage path (under qemu), and both front ends. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VHDaz86aayqMULHsjByEmT --- .gitignore | 2 + README.md | 54 +++ app/app.c | 468 ++++++++++++++++++++++++ app/build-arm64.sh | 24 ++ app/third_party/font8x8_basic.h | 152 ++++++++ art/app/hero.png | Bin 0 -> 44740 bytes art/app/icon.png | Bin 0 -> 1704 bytes art/app/logo.png | Bin 0 -> 11747 bytes art/app/portrait.png | Bin 0 -> 54413 bytes art/app/wide.png | Bin 0 -> 40207 bytes catalog.json | 40 +++ deploy.sh | 45 +++ frame-port-manager.service | 11 + install.sh | 16 + manager.py | 605 ++++++++++++++++++++++++++++++++ page.html | 167 +++++++++ tools/find_appid.py | 53 +++ 17 files changed, 1637 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app/app.c create mode 100755 app/build-arm64.sh create mode 100644 app/third_party/font8x8_basic.h create mode 100644 art/app/hero.png create mode 100644 art/app/icon.png create mode 100644 art/app/logo.png create mode 100644 art/app/portrait.png create mode 100644 art/app/wide.png create mode 100644 catalog.json create mode 100755 deploy.sh create mode 100644 frame-port-manager.service create mode 100755 install.sh create mode 100755 manager.py create mode 100644 page.html create mode 100644 tools/find_appid.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1be5bdb --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +dist/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..6bd1de7 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Port Manager for the Steam Frame + +Installs and updates native Steam Frame ports straight from their GitHub releases, from the headset or a browser. + +- **Install, update, or pick any version** of each port in the catalog. Pre-releases count. +- **Keeps your stuff:** saves live outside the install folder, and ROMs placed next to `run.sh` are carried over. +- **One-step rollback** to the version you had before (the previous install is kept). +- Fixes executable bits, unpacks AppImages (no FUSE needed), writes a launcher when a port needs one, + registers the game with Steam (`steam-client-create-shortcut`, Steam Linux Runtime 4 arm64) and adds library art. +- Won't touch a game that's running. + +## Use it +- **In the headset:** open **Port Manager** in the library. D-pad to choose, **A** install/update, **Y** choose a + version, **X** previous version, **Start** check for updates, **B** close. +- **From a phone or PC:** `http://:8643`. + +Updates are checked every 6 hours and on demand. + +## Catalog +`catalog.json` lists the built-in ports: + +| Port | Repo | Download | +|---|---|---| +| Ocarina of Time (Ship of Harkinian) | Cogential/Shipwright-frame | `soh-steam-frame-arm64.zip` | +| Majora's Mask (2 Ship 2 Harkinian) | Cogential/2ship2harkinian-frame | `*arm64.appimage` (unpacked, launcher written) | + +Add your own in `~/.config/port-manager/catalog.json` on the Frame (same fields; the same `id` overrides a built-in +entry). A port's release needs a zip whose top folder holds `run.sh`, or an AppImage plus a `run_sh` launcher in the +catalog. + +## Private repos +GitHub only shows releases of private repos to signed-in users. Either make the port repos public (they contain no +ROMs), or save a token in the web page's Settings: a fine-grained token limited to those repos with read-only +**Contents** access is enough. It's stored in `~/.config/port-manager/config.json` (mode 600) and never sent back +to the page. + +## Install +From a computer that can SSH into the Frame: + +```sh +app/build-arm64.sh # cross-compiles the headset app into dist/app +./deploy.sh [host] # host defaults to frame.local +``` + +Service only, on the Frame: copy this folder over and run `sh install.sh`. +Uninstall: `systemctl --user disable --now frame-port-manager.service` and remove Port Manager from the library. + +## Notes +- The service listens on port 8643 on your network. Set `password` in `~/.config/port-manager/config.json` to require + one in the browser (the headset app connects locally and doesn't need it). +- Standard-library Python only. The headset app is C + SDL2 with the public-domain + [font8x8](https://github.com/dhepper/font8x8). +- Testing on another architecture: `PORT_MANAGER_EXEC_WRAPPER=qemu-aarch64-static` (with `QEMU_LD_PREFIX`) runs + ARM64 AppImages for unpacking; `PORT_MANAGER_GAMES` changes the install folder. diff --git a/app/app.c b/app/app.c new file mode 100644 index 0000000..f64505e --- /dev/null +++ b/app/app.c @@ -0,0 +1,468 @@ +/* Port Manager for the headset: a controller-driven front end for the Port Manager service (manager.py), which + * does the downloading and installing. It talks to the service on 127.0.0.1 with plain HTTP and reads simple + * tab-separated replies. + * + * Controls: D-pad/left stick to choose, A install or update, Y choose a version, X go back to the previous + * version, Start check for updates, B close (or leave the version list). Keyboard: arrows, Enter, V, P, R, Esc. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "third_party/font8x8_basic.h" + +#define DEFAULT_PORT 8643 +#define MAX_PORTS 32 +#define MAX_RELEASES 40 + +typedef struct { + char id[64], name[128], installed[64], latest[64], status[32], message[256]; + float progress; + int can_rollback; +} Port; + +typedef struct { + char tag[64], name[128], date[16]; + int prerelease; +} Release; + +static SDL_Renderer* ren; +static int W, H, S; /* screen size and text scale */ +static int service_port = DEFAULT_PORT; + +/* ---------------------------------------------------------------- text */ + +static void color(Uint32 rgb) { + SDL_SetRenderDrawColor(ren, (rgb >> 16) & 0xff, (rgb >> 8) & 0xff, rgb & 0xff, 255); +} + +static int text(const char* s, int x, int y, int scale, Uint32 rgb) { + static SDL_Rect rects[4096]; + int n = 0, cx = x; + color(rgb); + for (; *s; s++) { + unsigned char c = (unsigned char)*s; + if (c >= 128) c = '?'; + for (int row = 0; row < 8; row++) { + unsigned char bits = (unsigned char)font8x8_basic[c][row]; + for (int col = 0; col < 8; col++) + if (bits & (1 << col)) { + rects[n++] = (SDL_Rect){ cx + col * scale, y + row * scale, scale, scale }; + if (n == 4096) { + SDL_RenderFillRects(ren, rects, n); + n = 0; + } + } + } + cx += 8 * scale; + } + if (n) SDL_RenderFillRects(ren, rects, n); + return cx - x; +} + +/* Draws s cut to max_px (ending in "..." when cut). */ +static void text_fit(const char* s, int x, int y, int scale, int max_px, Uint32 rgb) { + char buf[300]; + int max_chars = max_px / (8 * scale); + snprintf(buf, sizeof buf, "%s", s); + if ((int)strlen(buf) > max_chars && max_chars > 3) { + buf[max_chars - 3] = '\0'; + strcat(buf, "..."); + } + text(buf, x, y, scale, rgb); +} + +static void fill(int x, int y, int w, int h, Uint32 rgb) { + color(rgb); + SDL_RenderFillRect(ren, &(SDL_Rect){ x, y, w, h }); +} + +/* ---------------------------------------------------------------- service */ + +static void read_port(void) { + char path[512], buf[2048]; + snprintf(path, sizeof path, "%s/.config/port-manager/config.json", getenv("HOME") ? getenv("HOME") : ""); + FILE* f = fopen(path, "r"); + if (!f) return; + size_t n = fread(buf, 1, sizeof buf - 1, f); + fclose(f); + buf[n] = '\0'; + const char* p = strstr(buf, "\"port\""); + if (p && (p = strchr(p, ':'))) { + int v = atoi(p + 1); + if (v > 0 && v < 65536) service_port = v; + } +} + +/* Sends a request to the service; returns the body (caller frees) or NULL if it isn't reachable. */ +static char* http(const char* method, const char* path) { + int s = socket(AF_INET, SOCK_STREAM, 0); + if (s < 0) return NULL; + struct timeval tv = { .tv_sec = 5 }; + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof tv); + struct sockaddr_in a = { .sin_family = AF_INET, .sin_port = htons(service_port) }; + a.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + if (connect(s, (struct sockaddr*)&a, sizeof a) != 0) { + close(s); + return NULL; + } + char req[1024]; + int n = snprintf(req, sizeof req, "%s %s HTTP/1.0\r\nHost: localhost\r\nContent-Length: 0\r\n\r\n", method, path); + if (write(s, req, n) != n) { + close(s); + return NULL; + } + size_t cap = 65536, len = 0; + char* buf = malloc(cap); + ssize_t r; + while ((r = read(s, buf + len, cap - len - 1)) > 0) { + len += r; + if (len + 1 >= cap) buf = realloc(buf, cap *= 2); + } + close(s); + buf[len] = '\0'; + char* body = strstr(buf, "\r\n\r\n"); + if (!body) { + free(buf); + return NULL; + } + memmove(buf, body + 4, strlen(body + 4) + 1); + return buf; +} + +/* Splits one tab-separated line into fields (in place). */ +static int split(char* line, char** f, int max) { + int n = 0; + f[n++] = line; + for (char* p = line; *p && n < max; p++) + if (*p == '\t') { + *p = '\0'; + f[n++] = p + 1; + } + return n; +} + +static void copy(char* dst, size_t sz, const char* src) { + snprintf(dst, sz, "%s", strcmp(src, "-") == 0 ? "" : src); +} + +static int load_ports(Port* ports) { + char* body = http("GET", "/api/state?fmt=tsv"); + if (!body) return -1; + int n = 0; + for (char* line = strtok(body, "\n"); line && n < MAX_PORTS; line = strtok(NULL, "\n")) { + char* f[8]; + if (split(line, f, 8) < 8) continue; + Port* p = &ports[n++]; + copy(p->id, sizeof p->id, f[0]); + copy(p->name, sizeof p->name, f[1]); + copy(p->installed, sizeof p->installed, f[2]); + copy(p->latest, sizeof p->latest, f[3]); + copy(p->status, sizeof p->status, f[4]); + p->progress = (float)atof(f[5]); + copy(p->message, sizeof p->message, f[6]); + p->can_rollback = atoi(f[7]); + } + free(body); + return n; +} + +static int load_releases(const char* id, Release* rels, char* err, size_t errsz) { + char path[256]; + snprintf(path, sizeof path, "/api/releases?fmt=tsv&id=%s", id); + char* body = http("GET", path); + err[0] = '\0'; + if (!body) { + snprintf(err, errsz, "Port Manager service isn't running."); + return 0; + } + int n = 0; + for (char* line = strtok(body, "\n"); line && n < MAX_RELEASES; line = strtok(NULL, "\n")) { + char* f[4]; + int k = split(line, f, 4); + if (k >= 2 && strcmp(f[0], "!") == 0) { + snprintf(err, errsz, "%s", f[1]); + break; + } + if (k < 4) continue; + Release* r = &rels[n++]; + copy(r->tag, sizeof r->tag, f[0]); + copy(r->name, sizeof r->name, f[1]); + copy(r->date, sizeof r->date, f[2]); + r->prerelease = atoi(f[3]); + } + free(body); + return n; +} + +static void action(const char* what, const char* id, const char* tag) { + char path[256]; + if (tag) + snprintf(path, sizeof path, "/api/%s?id=%s&tag=%s", what, id, tag); + else + snprintf(path, sizeof path, "/api/%s?id=%s", what, id); + free(http("POST", path)); +} + +static void try_start_service(void) { + pid_t pid = fork(); + if (pid == 0) { + int devnull = open("/dev/null", O_WRONLY); + if (devnull >= 0) { + dup2(devnull, 1); + dup2(devnull, 2); + } + execlp("systemctl", "systemctl", "--user", "start", "frame-port-manager.service", (char*)NULL); + _exit(127); + } + if (pid > 0) waitpid(pid, NULL, 0); +} + +/* ---------------------------------------------------------------- drawing */ + +static int busy_status(const char* s) { + return !strcmp(s, "downloading") || !strcmp(s, "installing"); +} + +static Uint32 status_color(const Port* p) { + if (busy_status(p->status)) return 0x4fa3ff; + if (!strcmp(p->status, "update available")) return 0xf0b429; + if (!strcmp(p->status, "up to date")) return 0x4cc38a; + if (!strcmp(p->status, "error")) return 0xf2555a; + return 0x93a0ad; +} + +static const char* status_label(const Port* p) { + if (!strcmp(p->status, "downloading")) return "Downloading"; + if (!strcmp(p->status, "installing")) return "Installing"; + if (!strcmp(p->status, "update available")) return "Update available"; + if (!strcmp(p->status, "up to date")) return "Up to date"; + if (!strcmp(p->status, "error")) return "Problem"; + return "Not installed"; +} + +static void legend(const char* s) { + int y = H - H / 20 - 8 * S; + fill(0, y - 12 * S, W, H - y + 12 * S, 0x151a20); + text(s, W / 20, y, S, 0x93a0ad); +} + +static void draw_ports(Port* ports, int n, int sel, const char* banner) { + int m = W / 20, y = m; + color(0x0f1216); + SDL_RenderClear(ren); + text("Port Manager", m, y, S * 2, 0xe8edf2); + y += 16 * S + 6 * S; + if (banner && *banner) { + text_fit(banner, m, y, S, W - 2 * m, 0xf0b429); + y += 14 * S; + } + if (n <= 0) { + text(n < 0 ? "Starting the Port Manager service..." : "No ports in the catalog.", m, y + 8 * S, S, 0x93a0ad); + } + int row_h = 50 * S; + int max_rows = (H - y - 40 * S) / row_h; + int first = sel >= max_rows ? sel - max_rows + 1 : 0; + for (int i = first; i < n && i < first + max_rows; i++) { + Port* p = &ports[i]; + int x = m, w = W - 2 * m; + fill(x, y, w, row_h - 6 * S, i == sel ? 0x1f2a36 : 0x181d23); + if (i == sel) fill(x, y, 3 * S, row_h - 6 * S, 0x4fa3ff); + int tx = x + 10 * S, ty = y + 8 * S; + const char* st = status_label(p); + int sw = (int)strlen(st) * 8 * S; + text_fit(p->name, tx, ty, S, w - 30 * S - sw, 0xe8edf2); + text(st, x + w - 10 * S - sw, ty, S, status_color(p)); + ty += 13 * S; + char line[200]; + snprintf(line, sizeof line, "Installed: %s Latest: %s", p->installed[0] ? p->installed : "-", + p->latest[0] ? p->latest : "-"); + text_fit(line, tx, ty, S, w - 20 * S, 0x93a0ad); + ty += 12 * S; + if (busy_status(p->status)) { + int bw = w - 20 * S; + fill(tx, ty + 2 * S, bw, 4 * S, 0x2a313a); + fill(tx, ty + 2 * S, (int)(bw * p->progress), 4 * S, 0x4fa3ff); + } else if (p->message[0]) { + text_fit(p->message, tx, ty, S, w - 20 * S, !strcmp(p->status, "error") ? 0xf2555a : 0x4cc38a); + } + y += row_h; + } + legend("A Install/Update Y Versions X Previous Start Check B Close"); + SDL_RenderPresent(ren); +} + +static void draw_releases(const Port* p, Release* rels, int n, int sel, const char* err) { + int m = W / 20, y = m; + color(0x0f1216); + SDL_RenderClear(ren); + text_fit(p->name, m, y, S * 2, W - 2 * m, 0xe8edf2); + y += 16 * S + 6 * S; + text("Choose a version to install:", m, y, S, 0x93a0ad); + y += 16 * S; + if (err[0]) text_fit(err, m, y, S, W - 2 * m, 0xf2555a); + int row_h = 16 * S; + int max_rows = (H - y - 40 * S) / row_h; + int first = sel >= max_rows ? sel - max_rows + 1 : 0; + for (int i = first; i < n && i < first + max_rows; i++) { + Release* r = &rels[i]; + if (i == sel) fill(m, y - 4 * S, W - 2 * m, row_h, 0x1f2a36); + char line[200]; + snprintf(line, sizeof line, "%s %s%s%s", r->tag, r->date, !strcmp(r->tag, p->latest) ? " (latest)" : "", + !strcmp(r->tag, p->installed) ? " (installed)" : ""); + text_fit(line, m + 10 * S, y, S, W - 2 * m - 20 * S, i == sel ? 0xe8edf2 : 0x93a0ad); + y += row_h; + } + legend("A Install this version B Back"); + SDL_RenderPresent(ren); +} + +/* ---------------------------------------------------------------- main */ + +enum { NONE, UP, DOWN, OK, BACK, VERSIONS, PREVIOUS, REFRESH }; + +static int map_button(int b) { + switch (b) { + case SDL_CONTROLLER_BUTTON_DPAD_UP: return UP; + case SDL_CONTROLLER_BUTTON_DPAD_DOWN: return DOWN; + case SDL_CONTROLLER_BUTTON_A: return OK; + case SDL_CONTROLLER_BUTTON_B: return BACK; + case SDL_CONTROLLER_BUTTON_Y: return VERSIONS; + case SDL_CONTROLLER_BUTTON_X: return PREVIOUS; + case SDL_CONTROLLER_BUTTON_START: return REFRESH; + default: return NONE; + } +} + +static int map_key(SDL_Keycode k) { + switch (k) { + case SDLK_UP: return UP; + case SDLK_DOWN: return DOWN; + case SDLK_RETURN: return OK; + case SDLK_ESCAPE: case SDLK_BACKSPACE: return BACK; + case SDLK_v: return VERSIONS; + case SDLK_p: return PREVIOUS; + case SDLK_r: return REFRESH; + default: return NONE; + } +} + +int main(void) { + /* PM_SCREENSHOT= draws one frame of the list into memory, saves it and exits (testing without a + * display); PM_SIZE=WxH sets its size, PM_SCREEN=versions shows the version list for the first port. */ + const char* shot = getenv("PM_SCREENSHOT"); + SDL_Surface* shot_surface = NULL; + if (shot) { + int sw = 1280, sh = 720; + if (getenv("PM_SIZE")) sscanf(getenv("PM_SIZE"), "%dx%d", &sw, &sh); + SDL_Init(0); + shot_surface = SDL_CreateRGBSurfaceWithFormat(0, sw, sh, 32, SDL_PIXELFORMAT_ARGB8888); + ren = SDL_CreateSoftwareRenderer(shot_surface); + } else { + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) != 0) { + fprintf(stderr, "SDL_Init: %s\n", SDL_GetError()); + return 1; + } + Uint32 flags = getenv("PM_WINDOWED") ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP; + SDL_Window* win = SDL_CreateWindow("Port Manager", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720, flags); + if (!win) return 1; + ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (!ren) ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_SOFTWARE); + } + if (!ren) return 1; + SDL_ShowCursor(SDL_DISABLE); + read_port(); + + Port ports[MAX_PORTS]; + Release rels[MAX_RELEASES]; + int nports = -1, sel = 0, nrels = 0, rsel = 0, in_versions = 0, tried_start = 0; + char err[256] = "", banner[256] = ""; + Uint32 next_poll = 0, axis_ready = 0; + + for (;;) { + int act = NONE; + SDL_Event e; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) goto done; + if (e.type == SDL_CONTROLLERDEVICEADDED) SDL_GameControllerOpen(e.cdevice.which); + if (e.type == SDL_CONTROLLERBUTTONDOWN) act = map_button(e.cbutton.button); + if (e.type == SDL_KEYDOWN) act = map_key(e.key.keysym.sym); + if (e.type == SDL_CONTROLLERAXISMOTION && e.caxis.axis == SDL_CONTROLLER_AXIS_LEFTY && + SDL_GetTicks() >= axis_ready && abs(e.caxis.value) > 24000) { + act = e.caxis.value < 0 ? UP : DOWN; + axis_ready = SDL_GetTicks() + 250; + } + } + + if (SDL_GetTicks() >= next_poll) { + nports = load_ports(ports); + if (nports < 0 && !tried_start) { + tried_start = 1; + try_start_service(); + } + int busy = 0; + for (int i = 0; i < nports; i++) busy |= busy_status(ports[i].status); + next_poll = SDL_GetTicks() + (busy ? 400 : 2000); + if (sel >= nports) sel = nports > 0 ? nports - 1 : 0; + snprintf(banner, sizeof banner, "%s", + nports < 0 && tried_start && SDL_GetTicks() > 8000 + ? "The Port Manager service isn't running. Restart the Frame and try again." + : ""); + } + + if (in_versions) { + if (act == UP && rsel > 0) rsel--; + if (act == DOWN && rsel < nrels - 1) rsel++; + if (act == BACK) in_versions = 0; + if (act == OK && nrels > 0) { + action("install", ports[sel].id, rels[rsel].tag); + in_versions = 0; + next_poll = 0; + } + } else { + if (act == UP && sel > 0) sel--; + if (act == DOWN && sel < nports - 1) sel++; + if (act == BACK) goto done; + if (nports > 0) { + if (act == OK) action("install", ports[sel].id, NULL); + if (act == PREVIOUS && ports[sel].can_rollback) action("rollback", ports[sel].id, NULL); + if (act == REFRESH) free(http("POST", "/api/refresh")); + if (act == VERSIONS) { + nrels = load_releases(ports[sel].id, rels, err, sizeof err); + rsel = 0; + for (int i = 0; i < nrels; i++) + if (!strcmp(rels[i].tag, ports[sel].installed)) rsel = i; + in_versions = 1; + } + if (act != NONE) next_poll = SDL_GetTicks() + 150; + } + } + + SDL_GetRendererOutputSize(ren, &W, &H); + S = H >= 1000 ? 3 : 2; + if (shot && getenv("PM_SCREEN") && !strcmp(getenv("PM_SCREEN"), "versions") && nports > 0 && !in_versions) { + nrels = load_releases(ports[0].id, rels, err, sizeof err); + in_versions = 1; + } + if (in_versions) + draw_releases(&ports[sel], rels, nrels, rsel, err); + else + draw_ports(ports, nports, sel, banner); + if (shot) { + SDL_SaveBMP(shot_surface, shot); + goto done; + } + SDL_Delay(16); + } +done: + SDL_Quit(); + return 0; +} diff --git a/app/build-arm64.sh b/app/build-arm64.sh new file mode 100755 index 0000000..d76b2f2 --- /dev/null +++ b/app/build-arm64.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# Cross-compiles the headset app for the Steam Frame (ARM64 Linux) into ../dist/app. +# Needs the NDK clang, the Ubuntu 24.04 arm64 sysroot and our SDL2 build (see the Lighthouse CLAUDE.md). +set -e +cd "$(dirname "$0")" +LLVM=${LLVM:-$HOME/Android/Sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/linux-x86_64/bin} +SYSROOT=${SYSROOT:-/data/cogent/sysroots/noble-arm64} +SDL=${SDL:-/data/cogent/sysroots/sdl2-arm64} +OUT=../dist/app +mkdir -p "$OUT/lib" +"$LLVM/clang" --target=aarch64-linux-gnu --sysroot="$SYSROOT" -fuse-ld=lld -O2 -Wall -march=armv8.2-a \ + -I"$SDL/include/SDL2" -D_REENTRANT app.c -L"$SDL/lib" -lSDL2-2.0 -Wl,-rpath,'$ORIGIN/lib' \ + -o "$OUT/port-manager" +"$LLVM/llvm-strip" "$OUT/port-manager" +cp -L "$SDL/lib/libSDL2-2.0.so.0" "$OUT/lib/" +cat > "$OUT/run.sh" <<'RUN' +#!/bin/sh +# Steam launches this. FrameDrop-style installs lose the executable bit, so restore it first. +cd "$(dirname "$0")" || exit 1 +chmod +x ./port-manager 2>/dev/null +exec ./port-manager "$@" +RUN +chmod +x "$OUT/run.sh" +echo "built $OUT" diff --git a/app/third_party/font8x8_basic.h b/app/third_party/font8x8_basic.h new file mode 100644 index 0000000..125cf16 --- /dev/null +++ b/app/third_party/font8x8_basic.h @@ -0,0 +1,152 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Constant: font8x8_basic +// Contains an 8x8 font map for unicode points U+0000 - U+007F (basic latin) +char font8x8_basic[128][8] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + { 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + { 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + { 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + { 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + { 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + { 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + { 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + { 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + { 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + { 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + { 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + { 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + { 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + { 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + { 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + { 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + { 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + { 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + { 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + { 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + { 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + { 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + { 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + { 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (;) + { 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + { 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + { 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + { 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + { 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + { 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + { 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + { 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + { 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + { 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + { 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + { 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + { 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + { 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + { 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + { 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + { 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + { 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + { 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + { 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + { 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + { 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + { 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + { 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + { 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + { 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + { 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + { 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + { 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + { 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + { 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + { 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + { 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + { 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + { 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + { 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + { 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + { 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + { 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + { 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + { 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + { 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + { 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + { 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F +}; diff --git a/art/app/hero.png b/art/app/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..c1217248d49c90a9356085d131641beb9dff0ee2 GIT binary patch literal 44740 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 literal 0 HcmV?d00001 diff --git a/art/app/icon.png b/art/app/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae3be19022645ca713c091ad62da31dd9da5bf8 GIT binary patch literal 1704 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 Bg{S}k literal 0 HcmV?d00001 diff --git a/art/app/wide.png b/art/app/wide.png new file mode 100644 index 0000000000000000000000000000000000000000..93f8f8df0cba298c7f69b57863492eacf93fb87b GIT binary patch literal 40207 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

ADF0Bq9UV-nLAj+y=5W%7Ff?&s11NS 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/dev/null", + "cd \"$D/usr/bin\" && exec ./2s2h.elf \"$@\"" + ] + } +] diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..390ce88 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# Installs or updates Port Manager on a Steam Frame from this computer over SSH: the service, and the +# "Port Manager" app in the Steam library with its art. +# +# Usage: ./deploy.sh [host] host defaults to frame.local +# Env: SSH_KEY (default ~/.ssh/frame_devkit), SSH_USER (default steamos) +# Build the app first with app/build-arm64.sh. +set -e +cd "$(dirname "$0")" +HOST="${1:-frame.local}" +KEY="${SSH_KEY:-$HOME/.ssh/frame_devkit}" +USER_AT="${SSH_USER:-steamos}@$HOST" +SSH="ssh -i $KEY -o ConnectTimeout=10" +GAMEID=Port_Manager + +[ -x dist/app/port-manager ] || { echo "Build the app first: app/build-arm64.sh"; exit 1; } +$SSH "$USER_AT" true || { echo "Can't reach $HOST over SSH. Is the Frame on and on this network?"; exit 1; } + +echo "== Service" +$SSH "$USER_AT" 'rm -rf ~/.cache/frame-port-manager-src && mkdir -p ~/.cache/frame-port-manager-src' +rsync -a -e "$SSH" manager.py page.html catalog.json frame-port-manager.service install.sh art "$USER_AT:.cache/frame-port-manager-src/" +$SSH "$USER_AT" 'sh ~/.cache/frame-port-manager-src/install.sh' + +echo "== Headset app" +rsync -a --delete -e "$SSH" dist/app/ "$USER_AT:devkit-game/$GAMEID/" +$SSH "$USER_AT" "python3 ~/devkit-utils/steam-client-create-shortcut --parms '{\"gameid\": \"$GAMEID\", \"directory\": \"/home/steamos/devkit-game/$GAMEID\", \"argv\": [\"./run.sh\"], \"env\": {}, \"settings\": {\"compat_tool\": \"SteamLinuxRuntime_4-arm64\", \"steam_play\": \"0\"}}'" >/dev/null + +echo "== Library art" +APPID="" +for i in 1 2 3 4 5 6 7 8 9 10; do + APPID=$($SSH "$USER_AT" "python3 - $GAMEID" < tools/find_appid.py) && [ -n "$APPID" ] && break + sleep 2 +done +if [ -n "$APPID" ]; then + for USERDIR in $($SSH "$USER_AT" 'ls -d ~/.local/share/Steam/userdata/[1-9]*/config 2>/dev/null'); do + $SSH "$USER_AT" "mkdir -p $USERDIR/grid" + for pair in portrait.png:p.png wide.png:.png hero.png:_hero.png logo.png:_logo.png icon.png:_icon.png; do + rsync -a -e "$SSH" "art/app/${pair%%:*}" "$USER_AT:$USERDIR/grid/${APPID}${pair##*:}" + done + done + echo "Art added for app id $APPID (shows after Steam restarts)." +else + echo "Couldn't find the shortcut's app id yet; run this again later to add the art." +fi +echo "Done. Open \"Port Manager\" from the library, or http://$HOST:8643 in a browser." diff --git a/frame-port-manager.service b/frame-port-manager.service new file mode 100644 index 0000000..69b6f1f --- /dev/null +++ b/frame-port-manager.service @@ -0,0 +1,11 @@ +[Unit] +Description=Port Manager (installs and updates Steam Frame ports from GitHub releases) +After=network-online.target + +[Service] +ExecStart=/usr/bin/python3 %h/.local/share/frame-port-manager/manager.py +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=default.target diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..0d32912 --- /dev/null +++ b/install.sh @@ -0,0 +1,16 @@ +#!/bin/sh +# Installs the Port Manager service on a Steam Frame for the current user. Run it on the Frame from this folder. +set -e +here="$(cd "$(dirname "$0")" && pwd)" +dest="$HOME/.local/share/frame-port-manager" +mkdir -p "$dest" "$HOME/.config/systemd/user" +cp "$here/manager.py" "$here/page.html" "$here/catalog.json" "$dest/" +rm -rf "$dest/art" && cp -r "$here/art" "$dest/art" +cp "$here/frame-port-manager.service" "$HOME/.config/systemd/user/" +systemctl --user daemon-reload +systemctl --user enable frame-port-manager.service >/dev/null 2>&1 +systemctl --user restart frame-port-manager.service +sleep 1 +ip=$(python3 -c 'import socket;s=socket.socket(2,2);s.connect(("192.0.2.1",9));print(s.getsockname()[0])' 2>/dev/null || hostname) +echo "Port Manager is running: http://$ip:8643" +echo "Uninstall: systemctl --user disable --now frame-port-manager.service" diff --git a/manager.py b/manager.py new file mode 100755 index 0000000..ce40c07 --- /dev/null +++ b/manager.py @@ -0,0 +1,605 @@ +#!/usr/bin/env python3 +"""Port Manager: installs and updates native Steam Frame ports from their GitHub releases. + +A small web service (standard library only) that runs on the Frame. It reads each port's releases, downloads the +chosen one, unpacks it into ~/devkit-game/, keeps ROMs and saves, fixes executable bits, registers the +game with Steam and gives it library art. The previous install is kept for a one-step rollback. + +Control it from the headset app (app/) or from a browser at http://:8643. +""" + +import fnmatch +import json +import os +import re +import shutil +import stat +import struct +import subprocess +import sys +import threading +import time +import urllib.error +import urllib.parse +import urllib.request +import zipfile +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path + +HOME = Path.home() +APP_DIR = Path(__file__).resolve().parent +CONFIG_DIR = Path(os.environ.get("XDG_CONFIG_HOME", HOME / ".config")) / "port-manager" +CONFIG_FILE = CONFIG_DIR / "config.json" +INSTALLED_FILE = CONFIG_DIR / "installed.json" +USER_CATALOG = CONFIG_DIR / "catalog.json" +CACHE_DIR = Path(os.environ.get("XDG_CACHE_HOME", HOME / ".cache")) / "port-manager" +GAMES_DIR = Path(os.environ.get("PORT_MANAGER_GAMES", HOME / "devkit-game")) +CREATE_SHORTCUT = HOME / "devkit-utils" / "steam-client-create-shortcut" +STEAM_USERDATA = HOME / ".local/share/Steam/userdata" + +DEFAULT_CONFIG = { + "port": 8643, + "password": "", # for the web page; empty means anyone on the network can use it + "github_token": "", # needed only for private repos (read-only access to their releases is enough) + "compat_tool": "SteamLinuxRuntime_4-arm64", + "check_hours": 6, +} +CHUNK = 1024 * 1024 +RELEASES_TTL = 600 + + +def load_json(path, default): + try: + with open(path) as f: + return json.load(f) + except (OSError, ValueError): + return default + + +def save_json(path, data): + path.parent.mkdir(parents=True, exist_ok=True) + tmp = path.with_suffix(".tmp") + with open(tmp, "w") as f: + json.dump(data, f, indent=2) + os.replace(tmp, path) + + +def config(): + return {**DEFAULT_CONFIG, **load_json(CONFIG_FILE, {})} + + +def catalog(): + """The built-in ports, plus the user's own entries (same id replaces a built-in one).""" + ports = {p["id"]: p for p in load_json(APP_DIR / "catalog.json", [])} + for p in load_json(USER_CATALOG, []): + if "id" in p: + ports[p["id"]] = {**ports.get(p["id"], {}), **p} + return ports + + +# ---------------------------------------------------------------- GitHub + + +def gh_request(url, accept="application/vnd.github+json"): + headers = {"Accept": accept, "User-Agent": "frame-port-manager", "X-GitHub-Api-Version": "2022-11-28"} + token = config().get("github_token") + if token: + headers["Authorization"] = f"Bearer {token}" + return urllib.request.Request(url, headers=headers) + + +def gh_json(url): + try: + with urllib.request.urlopen(gh_request(url), timeout=20) as r: + return json.load(r) + except urllib.error.HTTPError as e: + if e.code == 404: + raise RuntimeError("Repo not found. If it's private, add a GitHub token in Settings.") from e + if e.code in (401, 403): + raise RuntimeError("GitHub refused the request (token or rate limit). Try again later.") from e + raise RuntimeError(f"GitHub error {e.code}") from e + except OSError as e: + raise RuntimeError("Can't reach GitHub. Is the Frame online?") from e + except ValueError as e: # e.g. a token with a newline or other characters a header can't hold + raise RuntimeError("The GitHub token isn't valid. Check it in Settings.") from e + + +_releases_cache = {} + + +def releases(port, force=False): + """Releases newest first, with the asset that matches the port's pattern.""" + key = port["repo"] + hit = _releases_cache.get(key) + if hit and not force and time.time() - hit[0] < RELEASES_TTL: + return hit[1] + out = [] + for rel in gh_json(f"https://api.github.com/repos/{port['repo']}/releases?per_page=30"): + if rel.get("draft"): + continue + asset = next((a for a in rel.get("assets", []) if fnmatch.fnmatch(a["name"], port["asset"])), None) + if asset is None: + continue + out.append({ + "tag": rel["tag_name"], + "name": rel.get("name") or rel["tag_name"], + "date": (rel.get("published_at") or "")[:10], + "prerelease": bool(rel.get("prerelease")), + "asset_name": asset["name"], + "asset_url": asset["url"], # API URL: works for private repos with a token + "size": asset.get("size", 0), + "notes": (rel.get("body") or "")[:4000], + }) + _releases_cache[key] = (time.time(), out) + return out + + +# ---------------------------------------------------------------- Steam + + +def find_appid(gameid): + """The Steam app id of a devkit shortcut, from shortcuts.vdf (binary VDF).""" + for path in STEAM_USERDATA.glob("*/config/shortcuts.vdf"): + try: + data = path.read_bytes() + except OSError: + continue + for s in parse_vdf(data).values(): + if isinstance(s, dict) and s.get("DevkitGameID") == gameid: + return s.get("appid") + return None + + +def parse_vdf(data): + pos = 0 + + def cstr(): + nonlocal pos + end = data.index(b"\0", pos) + s = data[pos:end].decode("utf-8", "replace") + pos = end + 1 + return s + + def obj(): + nonlocal pos + out = {} + while pos < len(data): + t = data[pos] + pos += 1 + if t == 8: + return out + key = cstr() + if t == 0: + out[key] = obj() + elif t == 1: + out[key] = cstr() + elif t == 2: + out[key] = struct.unpack("> 16) & 0o777 + if mode and not info.is_dir(): + os.chmod(target, mode) + # A single top-level folder (e.g. soh-steam-frame/) becomes the install folder itself. + entries = [e for e in dest.iterdir()] + if len(entries) == 1 and entries[0].is_dir(): + inner = entries[0] + for e in list(inner.iterdir()): + shutil.move(str(e), dest / e.name) + inner.rmdir() + + +def extract_appimage(archive, dest): + os.chmod(archive, 0o755) + # PORT_MANAGER_EXEC_WRAPPER (e.g. qemu-aarch64-static) lets tests on another architecture run the AppImage. + wrapper = os.environ.get("PORT_MANAGER_EXEC_WRAPPER", "").split() + try: + r = subprocess.run(wrapper + [str(archive), "--appimage-extract"], cwd=dest, capture_output=True, timeout=600) + except OSError as e: + raise RuntimeError(f"Couldn't run the AppImage to unpack it ({e.strerror}).") from e + root = dest / "squashfs-root" + if r.returncode != 0 or not root.is_dir(): + raise RuntimeError("Couldn't unpack the AppImage.") + for e in list(root.iterdir()): + shutil.move(str(e), dest / e.name) + root.rmdir() + archive.unlink() + + +class Jobs: + """One install at a time; state is shown by both front ends.""" + + def __init__(self): + self.lock = threading.Lock() + self.state = {} # port id -> {"status", "progress", "message"} + + def set(self, pid, status, progress=0.0, message=""): + self.state[pid] = {"status": status, "progress": progress, "message": message} + + def busy(self): + return any(s["status"] in ("downloading", "installing") for s in self.state.values()) + + +jobs = Jobs() + + +def install(pid, tag=None): + port = catalog()[pid] + try: + rels = releases(port, force=True) + if not rels: + raise RuntimeError("This repo has no release with a matching download yet.") + rel = rels[0] if tag is None else next((r for r in rels if r["tag"] == tag), None) + if rel is None: + raise RuntimeError(f"Release {tag} not found.") + final = GAMES_DIR / port["gameid"] + if final.exists() and game_running(final): + raise RuntimeError("Close the game first.") + + # Download + CACHE_DIR.mkdir(parents=True, exist_ok=True) + archive = CACHE_DIR / rel["asset_name"] + if shutil.disk_usage(CACHE_DIR).free < rel["size"] * 3 + 512 * 1024 * 1024: + raise RuntimeError("Not enough free space.") + jobs.set(pid, "downloading", 0.0, f"Downloading {rel['tag']}") + req = gh_request(rel["asset_url"], accept="application/octet-stream") + with urllib.request.urlopen(req, timeout=60) as r, open(archive, "wb") as f: + total = int(r.headers.get("Content-Length") or rel["size"] or 0) + done = 0 + while True: + block = r.read(CHUNK) + if not block: + break + f.write(block) + done += len(block) + if total: + jobs.set(pid, "downloading", done / total, f"Downloading {rel['tag']}") + + # Unpack into a staging folder next to the final one (same filesystem, so the swap is a rename) + jobs.set(pid, "installing", 1.0, "Unpacking") + GAMES_DIR.mkdir(parents=True, exist_ok=True) + staging = GAMES_DIR / f".{port['gameid']}.staging" + shutil.rmtree(staging, ignore_errors=True) + staging.mkdir() + if port.get("type", "zip") == "appimage": + moved = staging / archive.name + shutil.move(str(archive), moved) + extract_appimage(moved, staging) + else: + extract_zip(archive, staging) + archive.unlink(missing_ok=True) + if port.get("run_sh"): + launcher = staging / port.get("launch", "run.sh") + launcher.write_text("\n".join(port["run_sh"]) + "\n") + if not (staging / port.get("launch", "run.sh")).exists(): + raise RuntimeError(f"The download has no {port.get('launch', 'run.sh')}.") + + # Carry over files the user put in the old install (ROMs next to run.sh) + if final.exists(): + for pattern in port.get("keep", []): + for f in final.glob(pattern): + if f.is_file() and not (staging / f.name).exists(): + shutil.copy2(f, staging / f.name) + make_executables(staging) + + # Swap: the old install becomes the "previous" one + previous = GAMES_DIR / f".{port['gameid']}.previous" + if final.exists(): + if game_running(final): + raise RuntimeError("Close the game first.") + shutil.rmtree(previous, ignore_errors=True) + os.replace(final, previous) + os.replace(staging, final) + + jobs.set(pid, "installing", 1.0, "Adding to Steam") + note = register_with_steam(port, final) + add_art(port) + + installed = load_json(INSTALLED_FILE, {}) + prev = installed.get(pid, {}).get("tag") + installed[pid] = {"tag": rel["tag"], "previous": prev, "time": int(time.time())} + save_json(INSTALLED_FILE, installed) + + message = note or f"Installed {rel['tag']}." + data = Path(os.path.expanduser(port.get("data", ""))) + if port.get("rom_hint") and port.get("data") and not any(data.glob("*.o2r")) and not any(data.glob("*.z64")): + message += " " + port["rom_hint"] + jobs.set(pid, "done", 1.0, message) + except Exception as e: # report every failure on screen rather than dying + shutil.rmtree(GAMES_DIR / f".{port['gameid']}.staging", ignore_errors=True) + jobs.set(pid, "error", 0.0, str(e)) + + +def rollback(pid): + port = catalog()[pid] + final = GAMES_DIR / port["gameid"] + previous = GAMES_DIR / f".{port['gameid']}.previous" + try: + if not previous.exists(): + raise RuntimeError("There's no previous version to go back to.") + if final.exists() and game_running(final): + raise RuntimeError("Close the game first.") + swap = GAMES_DIR / f".{port['gameid']}.swap" + if final.exists(): + os.replace(final, swap) + os.replace(previous, final) + if swap.exists(): + os.replace(swap, previous) + installed = load_json(INSTALLED_FILE, {}) + cur = installed.get(pid, {}) + installed[pid] = {"tag": cur.get("previous"), "previous": cur.get("tag"), "time": int(time.time())} + save_json(INSTALLED_FILE, installed) + jobs.set(pid, "done", 1.0, f"Back to {cur.get('previous') or 'the previous version'}.") + except Exception as e: + jobs.set(pid, "error", 0.0, str(e)) + + +def start(fn, pid, *args): + with jobs.lock: + if jobs.busy(): + return False + jobs.set(pid, "installing", 0.0, "Starting") + threading.Thread(target=fn, args=(pid, *args), daemon=True).start() + return True + + +# ---------------------------------------------------------------- state + + +_latest = {} # port id -> (tag, error) + + +def refresh(force=False): + for pid, port in catalog().items(): + try: + rels = releases(port, force=force) + _latest[pid] = (rels[0]["tag"] if rels else None, None if rels else "No releases yet") + except RuntimeError as e: + _latest[pid] = (None, str(e)) + + +def port_state(): + installed = load_json(INSTALLED_FILE, {}) + out = [] + for pid, port in catalog().items(): + folder = GAMES_DIR / port["gameid"] + tag = installed.get(pid, {}).get("tag") if folder.exists() else None + if folder.exists() and not tag: + tag = "unknown" + latest, err = _latest.get(pid, (None, None)) + job = jobs.state.get(pid, {}) + if job.get("status") in ("downloading", "installing"): + status = job["status"] + elif err and not latest: + status = "error" + elif not folder.exists(): + status = "not installed" + elif latest and tag != latest: + status = "update available" + else: + status = "up to date" + out.append({ + "id": pid, "name": port["name"], "installed": tag, "latest": latest, "status": status, + "progress": job.get("progress", 0.0), "message": job.get("message") or err or "", + "job": job.get("status", ""), + "can_rollback": (GAMES_DIR / f".{port['gameid']}.previous").exists(), + }) + return out + + +def tsv(rows, keys): + """Tab-separated lines for the headset app (no JSON parser needed there).""" + def clean(v): + if v is None: + return "-" + if isinstance(v, bool): + return "1" if v else "0" + if isinstance(v, float): + return f"{v:.3f}" + return re.sub(r"[\t\r\n]+", " ", str(v)) + return "\n".join("\t".join(clean(r.get(k)) for k in keys) for r in rows) + "\n" + + +# ---------------------------------------------------------------- web + + +class Handler(BaseHTTPRequestHandler): + server_version = "PortManager/1.0" + + def log_message(self, fmt, *args): + sys.stderr.write("%s %s\n" % (self.address_string(), fmt % args)) + + def reply(self, body, ctype="application/json", code=200): + if not isinstance(body, bytes): + body = (json.dumps(body) if ctype == "application/json" else body).encode() + self.send_response(code) + self.send_header("Content-Type", ctype + ("; charset=utf-8" if ctype.startswith("text") else "")) + self.send_header("Content-Length", str(len(body))) + self.send_header("Cache-Control", "no-store") + self.end_headers() + self.wfile.write(body) + + def allowed(self, q): + password = config().get("password") or "" + # The headset app talks to us over loopback and never needs the password. + if not password or self.client_address[0] == "127.0.0.1": + return True + return (self.headers.get("X-Key") or q.get("key", [""])[0]) == password + + def do_GET(self): + url = urllib.parse.urlparse(self.path) + q = urllib.parse.parse_qs(url.query) + if url.path == "/": + self.reply((APP_DIR / "page.html").read_bytes(), "text/html") + return + if not self.allowed(q): + self.reply({"error": "password"}, code=401) + return + fmt = q.get("fmt", ["json"])[0] + if url.path == "/api/state": + rows = port_state() + if fmt == "tsv": + self.reply(tsv(rows, ["id", "name", "installed", "latest", "status", "progress", "message", + "can_rollback"]), "text/plain") + else: + self.reply({"ports": rows, "token_set": bool(config().get("github_token")), + "busy": jobs.busy()}) + elif url.path == "/api/releases": + pid = q.get("id", [""])[0] + port = catalog().get(pid) + if not port: + self.reply({"error": "unknown port"}, code=404) + return + try: + rels = releases(port) + except RuntimeError as e: + self.reply({"error": str(e)} if fmt != "tsv" else f"!\t{e}\n", "application/json" if fmt != "tsv" else "text/plain") + return + if fmt == "tsv": + self.reply(tsv(rels, ["tag", "name", "date", "prerelease"]), "text/plain") + else: + self.reply({"releases": rels}) + else: + self.reply({"error": "not found"}, code=404) + + def do_POST(self): + url = urllib.parse.urlparse(self.path) + q = urllib.parse.parse_qs(url.query) + if not self.allowed(q): + self.reply({"error": "password"}, code=401) + return + pid = q.get("id", [""])[0] + if url.path == "/api/refresh": + threading.Thread(target=refresh, kwargs={"force": True}, daemon=True).start() + self.reply({"ok": True}) + elif url.path in ("/api/install", "/api/rollback"): + if pid not in catalog(): + self.reply({"error": "unknown port"}, code=404) + return + tag = q.get("tag", [None])[0] or None + ok = start(install, pid, tag) if url.path == "/api/install" else start(rollback, pid) + self.reply({"ok": ok, "error": None if ok else "Another install is running."}) + elif url.path == "/api/token": + length = int(self.headers.get("Content-Length") or 0) + token = self.rfile.read(min(length, 4096)).decode().strip() + cfg = load_json(CONFIG_FILE, {}) + cfg["github_token"] = token + save_json(CONFIG_FILE, cfg) + os.chmod(CONFIG_FILE, 0o600) + _releases_cache.clear() + threading.Thread(target=refresh, kwargs={"force": True}, daemon=True).start() + self.reply({"ok": True}) + else: + self.reply({"error": "not found"}, code=404) + + +def checker(): + while True: + refresh(force=True) + time.sleep(max(1, float(config().get("check_hours", 6))) * 3600) + + +def main(): + cfg = config() + if not CONFIG_FILE.exists(): + save_json(CONFIG_FILE, cfg) + os.chmod(CONFIG_FILE, 0o600) + threading.Thread(target=checker, daemon=True).start() + server = ThreadingHTTPServer(("0.0.0.0", int(cfg["port"])), Handler) + server.daemon_threads = True + print(f"Port Manager on port {cfg['port']}", flush=True) + server.serve_forever() + + +if __name__ == "__main__": + main() diff --git a/page.html b/page.html new file mode 100644 index 0000000..c4e4ab0 --- /dev/null +++ b/page.html @@ -0,0 +1,167 @@ + + + + + +Port Manager + + + +

+

Port Manager

+

Install and update your Steam Frame ports from their GitHub releases. Saves and ROMs are kept.

+
+
+
+ Settings +

Private repos need a GitHub token with read access to their contents (a fine-grained token + limited to those repos is enough). It's stored only on the Frame and never shown again.

+
+
+

+
+
+
+ + + diff --git a/tools/find_appid.py b/tools/find_appid.py new file mode 100644 index 0000000..aba3946 --- /dev/null +++ b/tools/find_appid.py @@ -0,0 +1,53 @@ +"""Prints the Steam app id of a devkit shortcut, read from shortcuts.vdf. Usage: python3 - """ +import glob +import os +import struct +import sys + +want = sys.argv[1] + + +def parse(data): + pos = 0 + + def cstr(): + nonlocal pos + end = data.index(b"\0", pos) + s = data[pos:end].decode("utf-8", "replace") + pos = end + 1 + return s + + def obj(): + nonlocal pos + out = {} + while True: + t = data[pos] + pos += 1 + if t == 8: + return out + key = cstr() + if t == 0: + out[key] = obj() + elif t == 1: + out[key] = cstr() + elif t == 2: + out[key] = struct.unpack("