Skip to content

Release 2.5.3: Panorama USB link and private runtime directories - #35

Merged
DXVSI merged 5 commits into
productionfrom
development
Oct 7, 2026
Merged

DXVSI merged 5 commits into
productionfrom
development

Conversation

@DXVSI

@DXVSI DXVSI commented Oct 7, 2026

Copy link
Copy Markdown
Owner

Summary

Promote 2.5.3 from development after #34.

  • Panorama, Panorama SE and Panorama WB keep a bulk IN pending between requests and re-arm it as soon as it ends, so the displays no longer drop off USB until a power-off (Screen randomly disconnects #28).
  • The runtime creates its data and cache directories owner-only regardless of the umask; a rejected directory is named with the command that fixes it, and the session status no longer claims a validation that never finishes (Waiting for Device #32).
  • Release metadata for 2.5.3.

Verification

  • All checks of 2.5.3: keep Panorama displays on USB and create runtime directories owner-only #34 passed at 02a45a7: native packages, clean-runtime installs and the Flatpak build with its test suite.
  • Locally: 977 native tests, the Flatpak protocol subset, release contract v2.5.3 and strict AppStream validation.
  • On a Panorama SE: 10 minutes with both changes, six back-to-back service restarts, and a v2.5.2 control run for comparison.

Publication

After this PR merges, tag v2.5.3 on the production merge commit; the tagged workflow rebuilds packages and creates the draft release.

Panorama, Panorama SE and Panorama WB displays on AMD 800-series chipset
controllers vanish from the bus during a session and return only after the
power supply is switched off. Testers traced it to the idle link between
exchanges: the official bridge keeps a bulk IN pending almost all the time
and survives for days, while a client that arms the IN only around each
request died within minutes and survived hours once it kept the IN pending.
This runtime armed the IN only around requests as well.

Add a keepBulkInPending product profile flag, enabled for the Panorama
family, and leave the IN pending after every exchange. An idle IN that the
firmware ends with an error or an empty packet is logged as
tryx_usb_idle_input, never counts toward the persistent input failure that
ends the session, and is re-armed only after the next request. Turris keeps
the request-scoped IN until there is data for it. Document the change and
the usbcore quirk workaround in the README.
Between requests no transport call serviced libusb, so an idle IN that the
firmware ended stayed unnoticed until the next request, and an idle IN
error suppressed the re-arm until then. With a 2 s keepalive the link could
stay idle for up to 2 s, the condition that drops Panorama-family displays.

Sessions that keep the IN pending now hand libusb's poll descriptors to the
owning thread's event loop, service completions as soon as they are ready,
and re-arm the IN right after data or after a short backoff (20 ms doubling
to 200 ms) when it ended without data. Data that arrives between requests is
queued and the IN re-armed at once.

Reported in review by @groovg on #28.
QDir::mkpath() creates directories with 0777 minus the process umask. With
the 0002 umask common on Ubuntu and Mint desktops, the shared data root, its
media-catalog and the prepared-media retry-cache root became group-writable,
and the stores' own safety checks then rejected them on the next start. A
rejected retry-cache root keeps the PASE display session from starting at
all, while the status claimed that stored retry media was still being
validated.

Directories the runtime creates for itself now get 0700 for every missing
component. Existing directories are left as they are and the safety checks
are unchanged. When a check rejects a directory, the warning names it with
its owner or mode and the chmod command that fixes the common case, and the
session status says that the display session cannot start instead of
describing a wait.

Reported in #32.
The release keeps Panorama-family displays on USB by holding a bulk IN
pending between requests, and creates the runtime's directories owner-only
so a 0002 umask no longer blocks the display session. Add the 2.5.3 entries
to every changelog and the AppStream metadata, point the README install
commands at the new package names, and describe the fix for directories
created by earlier versions.
2.5.3: keep Panorama displays on USB and create runtime directories owner-only
@DXVSI
DXVSI merged commit 79cba17 into production Oct 7, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant