# Settings for the screen agent. Edited on the board over SSH or serial;
# a fresh image is not needed to move a fleet to another server.

# The DashDash server this screen reports to.
BACKEND_URL=__BACKEND_URL__

# Shown in the organisation's device list, so a person can tell which board
# is which without reading uuids.
DASHDASH_MODEL=bananapim2zero

# Identity and token live here. Survives everything except reflashing.
DASHDASH_STATE_DIR=/etc/dashdash

# nmcli on the board; "fake" is for a developer's laptop only.
DASHDASH_NETWORK=nmcli

SCREEN_PORT=3000
PORTAL_PORT=80

# Проверять обновления самому: после запуска и дальше раз в сутки. Экраны
# висят на стенах годами, и ждать, пока кто-то нажмёт кнопку в админке для
# каждого, — способ навсегда остаться на первой версии.
#
# Обновление ставится только целиком успешное: если после установки агент не
# отвечает, плата сама возвращает предыдущую версию.
DASHDASH_AUTO_UPDATE=yes
DASHDASH_UPDATE_CHECK_HOURS=24

# Кэш программы и медиа: экран продолжает показывать последние данные и те же
# картинки, пока сервер недоступен. Каталог создаёт systemd (StateDirectory).
DASHDASH_CACHE_DIR=/var/lib/dashdash
# Сколько места на карте отдаём под картинки и видео.
DASHDASH_MEDIA_CACHE_MB=512

# Подкачка. Две ступени: сжатая память, потом файл на карте.
#
# ---- ступень первая: zram -------------------------------------------------
#
# Размер в процентах от объёма платы; DASHDASH_ZRAM_MB, если задан, важнее.
# Это не «сколько памяти добавится»: zram хранит страницы сжатыми в той же
# оперативной памяти. 50% от 452 МБ — это 226 МБ подкачки, за которые плата
# платит 70–110 МБ настоящей памяти, потому что страницы браузера жмутся
# примерно втрое.
#
# 0 — выключить. Если подкачка на плате уже есть (её поднял Armbian), эти
# настройки не делают ничего.
DASHDASH_ZRAM_PERCENT=50
#DASHDASH_ZRAM_MB=512
DASHDASH_ZRAM_ALGO=lz4

# Потолок настоящей памяти под сжатое хранилище, в процентах от объёма платы.
#
# Именно он, а не размер, решает, безопасен ли большой zram. Размер — это
# сколько страниц влезет, если они сожмутся как обещано; сколько памяти
# займёт само хранилище, из него не следует. На плохо сжимаемых данных
# отношение стремится к единице, и тогда ядро вытесняет страницы, чтобы
# освободить память, в хранилище, которое от этого растёт. Потолок обрывает
# эту спираль: упёрлись — ядро идёт на следующую ступень. 0 — без потолка.
DASHDASH_ZRAM_MEM_LIMIT_PERCENT=40

# ---- ступень вторая: файл на карте ----------------------------------------
#
# Включается только когда сжатая память упёрлась в потолок (приоритет ниже).
# Оперативной не отнимает ни байта, но карта отвечает миллисекундами вместо
# микросекунд и от записи изнашивается. Для экрана, которому важнее дожить до
# утра, чем ответить быстро, — разумный последний рубеж. 0 — не создавать.
DASHDASH_SWAPFILE_MB=0
DASHDASH_SWAPFILE=/var/swap

# Как cog отдаёт картинку в DRM.
#
# renderer=modeset — умолчание самого cog: кадр, отрисованный WebKit,
# отправляется прямо на выход через drmModeAddFB2. На sun4i это не работает:
# буфер приходит от lima в тайловой раскладке, дисплейный движок Allwinner
# такую не сканирует и ядро отвечает EINVAL — в журнале
# «failed to create framebuffer: Invalid argument», на экране чёрное поле.
#
# renderer=gles рисует кадр текстурой в буфер gbm с линейной раскладкой,
# который сканировать можно. Стоит лишний блит; на 1080p это незаметно.
COG_PARAMS=--platform-params=renderer=gles

# Кем декодировать видео — намеренно никем конкретно.
#
# У этого SoC есть VPU (Cedrus), в ядре он живёт как /dev/video0 + /dev/media0,
# в GStreamer — как v4l2slh264dec из plugins-bad, и соблазн его включить
# велик. Измерено на плате: с ним пятисекундный ролик 1080p обрабатывается
# 26 секунд, без него — 5.8. Причина в формате: Cedrus отдаёт кадры тайловыми
# (NV12_32L32), раскладывает их обратно процессор, и выигрыш от железа
# съедается с лихвой.
#
# Если однажды в ядре или в GStreamer научатся отдавать тайлы прямо на дисплей
# без раскладки, включается одной строкой:
#   GST_PLUGIN_FEATURE_RANK=v4l2slh264dec:512,v4l2slh265dec:512
# Проверять — тем же замером, а не на глаз.
