Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TomorrowOS Player (BrightSign)

BrightSign port of the TomorrowOS player from Tomorrow MVP (Tizen). UI, CMS protocol, pairing, playlist logic, and caching behavior are unchanged. Only platform APIs differ.

Layout

Path Purpose
core/ Player app (HTML/CSS/JS)
core/main.js Shared player logic (minimal BrightSign branches)
core/platform-brightsign.js BrightSign device + storage adapters
autorun.brs Boots index.html via roHtmlWidget with Node.js enabled
build/brightsign/ Deploy bundle (npm run build)

Platform mapping (Tizen → BrightSign)

Tizen BrightSign
webapis.productinfo / systemcontrol BSDeviceInfo (deviceUniqueId, model, version, deviceUptime)
webapis.systemcontrol.rebootDevice require("@brightsign/system").reboot()
webapis.avplay (Tizen only) HTML5 <video> on BrightSign (CSS rotation for portrait)
TomorrowPlatform.filesystem Node.js fs on /storage/sd
TomorrowPlatform.download Node.js http/https streaming download
TomorrowPlatform.archive ZIP extract via Node fs + zlib
TV remote keys USB keyboard / HDMI-CEC bridge (no Tizen tvinputdevice)

Build / deploy

cd "D:\Amped Digital\TomorrowOS\TomorrowOS BrightSign"
npm run build

Copy everything from build/brightsign/ to the root of the player SD card (same layout as testappBrightSign):

SD:/
  autorun.brs          ← must be named exactly this
  index.html
  main.js
  platform-brightsign.js
  config.js
  style.css
  quiet-state-*.html
  quiet-state-bind.js

Do not put files inside a subfolder. Do not include autorun.zip or autozip.brs unless you intend to use BSN zip deploy.

autorun.brs follows the same boot pattern as testappBrightSign:

  • h.SetPort(msgPort) after create (not port: in config)
  • sleep(10000) before h.Show()
  • url: "file:///index.html"

Reboot the player (full power cycle). After ~10 seconds the HTML widget should appear.

Configuration (core/config.js)

BrightSign builds do not show orientation or CMS setup screens. Edit config.js before npm run build:

export const TOMORROWOS_CONFIG = {
  cmsEndpoint: "http://192.168.1.105:3000/",
  orientation: "landscape"   // landscape | portrait-right | portrait-left
};

On boot the player verifies the CMS WebSocket (up to 12s) and retries every 5s until connected, then enters pairing/playback.

Use a LAN URL on the player, not localhost on your dev PC. Example: http://192.168.1.105:3000/ws://192.168.1.105:3000/

Requirements

  • BrightSign player with Node.js support (nodejs_enabled: true in autorun.brs)
  • brightsign_js_objects_enabled: true for BSDeviceInfo
  • Writable SD storage (storage_path: "SD:")

Interactivity

This BrightSign port is non-interactive: no intro/CMS UI, no CEC remote bridge, no hidden device menu. Orientation and CMS URL come from config.js only.

Portrait

Set orientation in config.js to portrait-right or portrait-left, then rebuild.

The page rotates via CSS on <body> (images and UI follow automatically). HTML <video> with hwz_default: "on" uses a hardware plane that does not follow CSS rotation, so main.js sets per-video HWZ transforms to match: portrait-right → clockwise 90° (transform:rot270), portrait-left → clockwise 270° (transform:rot90; HWZ rotation sense is inverted vs CSS on this layout).

Black screen + Samsung TV cycling (HDMI)

If the TV alternates between black and the Samsung TV home/input screen:

  1. This is usually HDMI signal loss (player rebooting or outputting no valid frame), not the CMS setup UI.
  2. On the Samsung TV: turn off Anynet+ / HDMI-CEC for that HDMI port.
  3. Test with a computer monitor first (not the TV) to rule out CEC/handshake issues.
  4. Factory reset the BrightSign player (Admin → Setup), then deploy only the SD files.

Compare with testappBrightSign

If testappBrightSign works on the same SD card but TomorrowOS does not:

  1. Confirm only one autorun.brs on the card (no autozip.brs, no autorun.zip).
  2. TomorrowOS autorun.brs uses the same SetPort + sleep(10000) + Show() sequence.
  3. Wait 10 seconds after boot before expecting any picture (black is normal during sleep).

Troubleshooting boot / loading loop

  1. SD card root onlyindex.html and autorun.brs must sit directly on the card root (not inside build/brightsign/).
  2. Remove BSN artifacts — delete autorun.zip, pool/, feed_cache/, feedPool/ from the card.
  3. Do not use BrightAuthor Setup App URL for this standalone build.
  4. Factory reset the player if it was previously provisioned to BSN, then deploy SD files only.
  5. Red error bar at top of screen = JavaScript failed (often Node.js not enabled).
  6. Serial log should show [TomorrowOS] HTML load finished OK or HTML load ERROR with URI.
  7. First screen is Intro (TOMORROWOS typing) — use USB mouse or keyboard to pick orientation and Continue.

Parity with Tizen MVP

  • WebSocket pairing / resume / setPolicy / playlist playback
  • Media cache under downloads/tomorrowos/
  • Widget .zip / .wgt download + local extract
  • Brand idle screen + orientation intro
  • Hidden device menu (0000 on remote, when key events are delivered)

Releases

Packages

Used by

Contributors

Languages