mirror of
https://github.com/screentinker/screentinker.git
synced 2026-08-14 14:23:14 -06:00
An XT245 with liquid-corroded microSD lines could not read any card, in any
format, with known-good code — the kernel log shows the mmc1 host probing at
400kHz and no card ever answering, while mmc0 (eMMC) is healthy. That unit
turned out to be fully deployable anyway: the player boots FLASH:/autorun.brs
straight from internal storage.
Loading 'FLASH:/autorun.brs'
BSPLAY: https://screentinker.com/player?platform=brightsign&model=XT245
So the card is not the only path, and a dead slot is not the end of a player.
Files go to /storage/flash over SFTP and the player runs them on the next boot.
The first attempt failed because the script hard-coded SD: for its own assets:
it loaded from flash and then could not find index.html. StorageRoot() now
probes for FLASH:/autorun.brs and falls back to SD:, and every path that reads a
sibling file — screentinker.json, offline.html, the crash-dump directory — goes
through it.
selftest/ is the bisect that settled the hardware fault: the dev-cookbook's own
html-starter pattern, so the script is not a variable. When known-good code
failed identically, the medium was proven at fault rather than our port.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uaeo9MvzKoyXuN6ZsbhtkL
35 lines
1 KiB
Plaintext
35 lines
1 KiB
Plaintext
' ScreenTinker — storage self-test.
|
|
'
|
|
' NOT the player. This is the smallest known-good BrightScript that proves the player is reading
|
|
' the card at all, copied from the dev-cookbook html-starter example so the script itself is not
|
|
' a variable.
|
|
'
|
|
' If the screen shows the green panel: storage is fine, and any failure is in the real autorun.brs
|
|
' or downstream (network, server, widget config).
|
|
' If the screen still says "Please insert storage device": the player is not reading this medium,
|
|
' and no amount of work on the player code will help.
|
|
|
|
function main()
|
|
mp = CreateObject("roMessagePort")
|
|
|
|
vidmode = CreateObject("roVideoMode")
|
|
width = vidmode.GetResX()
|
|
height = vidmode.GetResY()
|
|
r = CreateObject("roRectangle", 0, 0, width, height)
|
|
|
|
config = {
|
|
nodejs_enabled: true
|
|
brightsign_js_objects_enabled: true
|
|
url: "file:/FLASH:/index.html"
|
|
port: mp
|
|
}
|
|
|
|
h = CreateObject("roHtmlWidget", r, config)
|
|
h.Show()
|
|
|
|
while true
|
|
msg = wait(0, mp)
|
|
print "msg received - type=";type(msg)
|
|
end while
|
|
end function
|