{"id":34819523,"url":"https://github.com/imagemlt/amlgsmenu","last_synced_at":"2026-05-21T12:03:50.891Z","repository":{"id":328892847,"uuid":"1103633442","full_name":"imagemlt/AMLgsMenu","owner":"imagemlt","description":"AML openipc groundstation menu","archived":false,"fork":false,"pushed_at":"2026-05-14T07:23:53.000Z","size":16595,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-14T09:36:17.785Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imagemlt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-25T06:06:32.000Z","updated_at":"2026-05-14T07:23:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/imagemlt/AMLgsMenu","commit_stats":null,"previous_names":["imagemlt/amlgsmenu"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/imagemlt/AMLgsMenu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagemlt%2FAMLgsMenu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagemlt%2FAMLgsMenu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagemlt%2FAMLgsMenu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagemlt%2FAMLgsMenu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imagemlt","download_url":"https://codeload.github.com/imagemlt/AMLgsMenu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imagemlt%2FAMLgsMenu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33299825,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T02:57:32.698Z","status":"ssl_error","status_checked_at":"2026-05-21T02:57:31.990Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-25T14:10:17.228Z","updated_at":"2026-05-21T12:03:50.886Z","avatar_url":"https://github.com/imagemlt.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AMLgsMenu\n\n[简体中文说明](README_zhCN.md)\n\nTransparent OSD and configuration UI for AML-based fbdev + GLES targets. Uses EGL/OpenGL ES2 + libinput; ImGui is bundled as a submodule. Background is fully transparent except the menu panel. Embedded terminal functionality is adapted from the MIT-licensed [ImGui-Terminal](https://github.com/nealmick/ImGui-Terminal) project—thanks to its author for the advanced terminal emulator.\n\n## Features\n- OSD mock (or MAVLink) data: horizon, signals (dBm), flight mode, GPS + home distance, video bitrate/resolution/refresh, battery, sky/ground temps. Ground antenna readings parse the latest `RX_ANT` entries from the `wifibroadcast` journal so the OSD mirrors realtime signal variation; if the service is unavailable the existing display simply keeps the last known value. The top-left label shows `%d WIFI PLUGGED` based on monitor-mode interfaces from `iw dev` (real data only).\n- Channel list aligned to Digi: 2.4G 1–13 + 5G {32,36,40,44,48,52,56,60,64,68,96,100,104,108,112,116,120,124,128,132,136,140,144,149,153,157,161,165,169,173,177}. Bandwidth 10/20/40 MHz.\n- Sky modes aligned to Digi: 1280x720@120, 1920x1080@90, 1920x1080@60, 2240x1260@60, 3200x1800@30, 3840x2160@20. Ground modes auto-read from `/sys/class/amhdmitx/amhdmitx0/modes` with fallback.\n- Command-line: `-t \u003cfont.ttf\u003e` custom UI font (recommend bold CJK font), `-T \u003cfont.ttf\u003e` custom terminal font, `-m 1` forces mock data; default binds MAVLink UDP 0.0.0.0:14452.\n- The command executor runs continuously in the background. Every minute it prints `[CommandExecutor] queue depth: N`, which helps monitoring command backlog (large values usually mean remote operations stuck).\n- UDP config push (fire-and-forget) to 127.0.0.1:14650/14651: channel, bandwidth, sky mode (size/fps, restart majestic), bitrate (Mbps→kbps), sky power (p*50 mBm). Ground power/channel also apply to local monitor interfaces via `iw` (with HT20/HT40+ suffix).\n- Icons default path `/storage/digitalfpv/icons/` (PNG, e.g., 48x48). Text is white with black outline, menu opaque; OSD fully transparent behind.\n- Firmware transport toggle: CC edition (UDP loopback) or Official (SSH to `root@10.5.0.10`, password `12345`). Both use the same `command.cfg` templates; switch inside the menu and the app transparently swaps transports.\n- Sound controls: toggle “Sound” to write `sound=0|1` in `wfb.conf` and send `sound=1|0` via UDP to 127.0.0.1:5612; adjust the volume dropdown (0%–100%) to send `pactl set-sink-volume @DEFAULT_SINK@ XX%`.\n- Custom text overlays for arbitrary commands (see the icons/fonts section for format).\n\n## Build\nDeps: C++17, CMake 3.16+, EGL/OpenGL ES2, libinput/udev, libpng/zlib, libssh; ImGui submodule under `third_party/imgui`.\n\nCoreELEC cross example (from user toolchain):\n```bash\nexport TOOLCHAIN=/home/docker/CoreELEC/build.CoreELEC-Amlogic-ng.arm-21/toolchain\nexport SYSROOT=${TOOLCHAIN}/armv8a-libreelec-linux-gnueabihf/sysroot\nexport CXX=${TOOLCHAIN}/bin/armv8a-libreelec-linux-gnueabihf-g++\nexport CC=${TOOLCHAIN}/bin/armv8a-libreelec-linux-gnueabihf-gcc\ncmake -S . -B build-ng \\\n  -DCMAKE_C_COMPILER=${CC} \\\n  -DCMAKE_CXX_COMPILER=${CXX} \\\n  -DCMAKE_SYSROOT=${SYSROOT} \\\n  -DIMGUI_ROOT=$(pwd)/third_party/imgui \\\n  -DAML_ENABLE_GLES=ON\ncmake --build build-ng\n```\n\n## Run\n```bash\n./AMLgsMenu -t /path/to/font.ttf      # optional UI font\n./AMLgsMenu -T /path/to/font.ttf      # optional terminal font\n./AMLgsMenu -m 1                      # force mock\n./AMLgsMenu -c /flash/command.cfg     # override command template config (default /flash/command.cfg)\n./AMLgsMenu -f /storage/digitalfpv/wfb.conf        # override wfb.conf path (default /storage/digitalfpv/wfb.conf)\n./AMLgsMenu -h | --help               # show usage summary\n```\nRight-click or gamepad X toggles the menu; controller navigation enabled.\n\n## Firmware modes\n- Menu entry “Firmware” lets you choose **CC edition (UDP)** or **Official (SSH)**. UDP mode targets the classic CC firmware and keeps talking to 127.0.0.1:14650/14651. Official mode opens a short-lived SSH session to `root@10.5.0.10` (default password `12345`) for every command/query；set `ssh_pass=\u003cnewpass\u003e` in `/storage/digitalfpv/wfb.conf` if the target password changes. The `command.cfg` templates stay the same—the app simply swaps transports.\n- The selection is persisted inside `/storage/digitalfpv/wfb.conf` under `firmware=cc|official` (the file is auto-copied from `/flash/wfb.conf` if missing). Edit the file manually or use the menu; switching triggers a one-shot remote state sync so the dropdowns reflect the other side.\n- SSH support relies on libssh; make sure the dependency is available in your CoreELEC toolchain/sysroot.\n\n## MAVLink\n- Receiver binds 0.0.0.0:14452 UDP; first message logs once. Flight mode hidden if unknown. Mock mode bypasses receiver.\n\n## Icons \u0026 fonts\n- Default icon lookup: `/storage/digitalfpv/icons/`. Use ~48x48 transparent PNGs.\n- Use a bold CJK-compatible font for clarity; pass via `-t`. Terminal still follows `-T` (falls back to the UI font when unset).\n- Custom overlays: extend `command.cfg` with\n  ```ini\n  [osd]\n  cpu = 80|60|sh -c 'printf \\\"CPU %.1f%%\\\" $(awk \\'{print $1}\\' /tmp/cpu)'\n  temp = 80|90|cat /storage/digitalfpv/temp.txt\n  ```\n  Coordinates are in screen pixels from the top-left origin.\n\n## Input tips\n- Mouse: right-click toggles the menu; left-clicking also wakes it when hidden, and left-click/wheel behave like a desktop app.\n- Keyboard: Alt toggles the menu; arrows move focus; Enter confirms combos/buttons; Ctrl+C quits the app. When the terminal is open, keyboard events are captured by the terminal (menu navigation falls back to mouse).\n- Gamepad (Xbox layout): X toggles the menu; D-Pad moves; A confirms selection.\n- For the embedded terminal, best experience is with both keyboard and mouse attached; avoid relying on the controller while the terminal window is active.\n\n## Safety / license\n- Licensed under GPL-3.0-only (see LICENSE). No warranty; commercial/illegal use is forbidden and entirely at user’s own risk.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimagemlt%2Famlgsmenu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimagemlt%2Famlgsmenu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimagemlt%2Famlgsmenu/lists"}