hobdrive-docs

Динамические выражения в файлах настроек

в хобдрайв внедрен анализатор выражений, позволяющий сильно увеличить гибкость описаний раскладок, формат отображения сенсоров.

Для использования выражений в gauge и layout файлах, применяется специальная форма записи атрибутов.

Например precision='${1+2}' превратится в precision='3'

Переменные

Анализатор поддерживает переменные, что позволяет в хобдрайве создавать гибкие описания, адаптированные например к разным цветовым темам. Переменные можно использовать в двух видах - $name или ${name}.

Хобдрайв при загрузке определяет группы переменных, доступные во всех layout/gauge файлах:

$daynight - значение day или night - текущий режим работы. $layout - значение portrait или landscape - текущая ориентация экрана $Color_normal - группа цветов текущей темы. Помимо normal доступны $Color_back, $Color_contrast, $Color_minor, $Color_subtle. $Theme_brightness - Группа переменных начинающихся с $Theme_, весь список можно найти в файле темы. Указанный $Theme_brightness принимает значения light или dark - и позволяет разделять светлые и темные темы.

Переменные можно определять и в самом gauge файле:

<variable id="Color_red" value="${color(lerp(Color_normal; 0xFF0000; 0.7))}"/>

Создает переменную Color_red, значение ее - красный цвет, приближенный к текущему цвету текста. Для светлых тем оформления это будет темнокрасный, бардовый, для темных тем -светлокрасный, розовый.

Пример ` `

Определяет сенсоры давления шин. Их цвет зависит от карты цветов (color-map). Tires_normal_pressure - переменная, со значением по умолчанию 32 (бара). ${Tires_normal_pressure-2}:$Color_red, - превратится в 30:#FF0000 - что означает что давление 30бар и ниже должно рисоваться красным цветом. ${Tires_normal_pressure}:$Color_green - давление 32бар будет рисоваться зеленым цветом ${Tires_normal_pressure+2}:$Color_red - давление 34бар и выше будет рисоваться опять красным цветом.

Динамическая интерпретация

Указанный выше способ интерполяции с одинарным $ является статическим. Т.е. система один раз анализирует данные при загрузке файлов раскладок. После загрузки эти выражения замораживаются и превращаются в обычный текст.

Но в некоторых описаниях сенсоров и декораторов можно использовать динамическую интерполяцию. Её отличие - она вычисляется каждый раз при отрисовке сенсора.

Такая интерполяция начинается с двойного знака $$

Например:

<item id="DistanceRun_primary" precision="3" text-evaluator='${Sensor_Text}(газ), ${svaluef("DistanceRun_secondary"; 3)} (бенз)' description="hidden"/>

Здесь атрибут text-evaluator в датчике используется чтобы создать спецфичный текст для отображения значения датчика. Есть несколько функций и переменных, применимых только к таким динамическим интерполяторам.

Sensor_Text - это текущее текстовое представление сенсора. То, какой текст рисуется обычно, если интерполятор отсутствует.

svaluef - это функция берет значение произвольного датчика из аргумента, и форматирует его значение, возможно преобразуя единицы измерения в нужные для отображения. Можно использовать как svaluef(“YourSensor”, 3) - для явного указания числа знаков после запятой при форматировании

svaluef_units - то же что и выше, но рядом со значением выведется единица измерения.

svalid - Валиден ли сенсор указанный в аргументе (Булево значение).

svalue - цифровое (double) значение датчика без преобразования единиц.

Описание синтаксиса

Core synax is documented here: Dynamic expressions Core Syntax

Функции в раскладках

Хобдрайв расширяет список функций своими собственными:

color - превращает число, задающее RGB цвет в форму понятную хобдрайву - #RRGGBB например color(0x804020) вернет #804020 - красный (128), зеленый (64) синий (32) lerp(c1; c2; amount) - сдвигает цвет заданный числом с1 в направлении цвета с2, на величину amount (от 0 до 1) например lerp(Color_normal; 0xFF0000; 0.7) делает исходный цвет в переменной Color_normal (цвет текста) сдвинутым в красный диапазон (0xFF0000) больше чем наполовину (0.7) Заметьте что результат lerp - число, и чтобы хобдрайв правильно интерпретировал его как цвет, нужно писать color(lerp(….)) svalue(‘Speed’)

Текущее значение указанного датчика. Заметьте что обновления виджета происходят только при изменении основного датчика, указанного в атрибуте id.

svalue_ex(‘FuelEconomy’, ‘day’)

Значение расширенных опций датчика.

sexists(‘Speed’)

True если датчик существует в текущей конфигурации.

svalid(‘Speed’)

True если датчик существует и имеет валидное прочитанное значение

svaluef(‘LitersPerHour’; 2)

Текущее значение в текстовом виде с указанием точности (числа знаков после запятой)

Returns formatted sensor value in display units with specified precision

svaluef_units(“Sensor”; 1)

Returns formatted sensor value with units suffix and with specified precision

t(‘SomeText’)

Средствами хобдрайва перевести указанный ключ