Skip to content

Screen Orientation

JimGat edited this page Sep 22, 2026 · 4 revisions

Screen Orientation (Landscape Mode)

NM-CYD-C5 and WS-C5-28 only — not available on Classic CYD. CYM can now run in any of four screen orientations — portrait (default), landscape, portrait flipped, and landscape flipped — with dozens of screens redesigned specifically for landscape use. Developed by co-developer @birolt29 over 75+ build/test cycles across every menu in the firmware, for NM-CYD-C5; extended to WS-C5-28 in v2.15.01 on the strength of both boards sharing an identical 240×320 ST7789 panel and touch driver contract.

WS-C5-28 note: confirmed working on physical WS-C5-28 hardware — touch and layout both rotate correctly. (One landscape layout bug found during that testing, the GPS Info card clipping its bottom row on both boards, was fixed in v2.15.02.)

Classic CYD does not support Screen Orientation, and there's no near-term plan to add it. Its ILI9341 panel already needs a board-specific swap_xy + mirror transform just to display correctly in native portrait, and its XPT2046 touch runs over software-bit-banged SPI on a separate dedicated bus rather than the shared hardware-SPI setup NM-CYD-C5/WS-C5-28 use — layering LVGL rotation on top of that combination hasn't been attempted or verified. See Classic CYD Support for the full list of Classic-CYD-specific limitations.


How to enable it

  1. Go to Settings → Screen.
  2. Under Orientation, pick one of:
    • 0 Portrait (default)
    • 90 Landscape
    • 180 Portrait flipped
    • 270 Landscape flipped
  3. Tap Save.

The device reboots into the new orientation. This is deliberate: every screen is sized from the live display resolution at build time, so a reboot guarantees every screen — including ones you haven't opened yet this session — is laid out correctly for the new orientation from the first frame. A live in-place rotate would leave already-built screens holding stale portrait-sized layouts until you navigated away and back.

The setting is saved to NVS and persists across reboots and firmware updates.

On NM-CYD-C5, touch calibration always runs in native portrait, regardless of your chosen orientation, and automatically restores your orientation afterward — the calibration math is fixed to the physical 240×320 panel, so rotation needs no separate calibration step. WS-C5-28's capacitive CST3530 touch needs no calibration at all, at any orientation.


Main Menu

Main Menu — landscape and portrait

The home/menu background now scales to fill the entire screen in landscape instead of leaving empty strips on the sides.

Screen Settings

Screen Settings — landscape and portrait

The Orientation selector lives in Settings → Screen, alongside Timeout, Brightness, and Recalibrate Touch. In landscape the dialog switches to a two-column layout so all four sections fit without scrolling.


Redesigned screens

A representative sample of the screens that got dedicated landscape layouts (portrait → landscape):

Screen Notes
Universal Remote Button grid reflowed for the wider aspect ratio
LED Remote 28 buttons reflowed to fit landscape without scrolling
Bluetooth Lookout List and controls repositioned
Evil Portal The Start Portal button, previously clipped off-screen in landscape, is now fully visible
Timing Settings Cancel/Save buttons, previously unreachable in landscape, are now on-screen
Chameleon Ultra Device list and detail view rebuilt for landscape
GPS Info Coordinate/status layout rebuilt for landscape

Universal Remote — before/after Universal Remote — landscape

LED Remote — portrait LED Remote — landscape, 28 buttons reflowed

Bluetooth Lookout — portrait Bluetooth Lookout — landscape

Evil Portal — portrait, Start Portal clipped Evil Portal — landscape, Start Portal visible

Timing Settings — portrait Timing Settings — landscape, Cancel/Save reachable

Chameleon Ultra — landscape

GPS Info — landscape

Portrait behavior across the whole firmware is unchanged — landscape support was added as additional branches alongside the existing portrait code, not a replacement for it.


WiFi Scan & Attack list redesign

Independent of orientation, the WiFi Scan & Attack list was reworked into a wardrive-style row layout: a fixed band badge (2.4/5 GHz), the SSID flexing to fill available width, and Channel/RSSI/Auth held tight on the right. The Auth column is color-coded by how deauth-able the target is:

  • Red — WPA3/OWE (Management Frame Protection active, deauth ignored)
  • Amber — WPA2
  • Green — Open/WEP/WPA (no MFP)

Multi-select checkboxes let you queue several targets at once. This layout is used in both portrait and landscape.


Also in this release

Alongside the orientation work, this patch (v2.15.00) fixed several standing bugs found during the screen-by-screen landscape testing pass: a MITM active-capture crash from a missing screen teardown hook, PN532 Clone/Write/Emulate crashes from main-task stack exhaustion, and two Chameleon Ultra BLE reconnect bugs (a benign disconnect was incorrectly deleting a valid bond, and a bond-reuse reconnect could hang forever waiting for an encryption event that never fires). See the release notes for the full list.


Screen orientation and all screens on this page were developed and tested by co-developer @birolt29. See Contributors for the full list of people who've helped build CYM.

Clone this wiki locally