Виртуальные модули не привязаны к железу: они обрабатывают события, хранят состояние и запускают действия. Занимают слоты 0–9 (у контроллера шесть физических слотов, слоты 6–9 — только для виртуальных модулей), связываются с остальными через crossLink.

МодульНазначение
startupодно событие при загрузке — точка входа для стартовых действий
timerсобытие по истечении заданного времени
watchdogперезагрузка устройства, если его перестали «пинать»
counterсчётчик с границами и порогом
flywheel«маховик»: счётчик, который сам затухает
randomслучайное число в диапазоне
scalerлинейное приведение значения из одного диапазона в другой
conductor«вверх / вниз / стоп» по текущей и целевой позиции
tankControlтанковый микшер: газ + руль → два канала
collectorнакопитель символов в строку (набор кода, номера)
whitelistпроверка строки по списку разрешений из файла
masqueradeретрансляция значения в другой топик
listOfActionsпроигрывание сценария — файла со списком действий и пауз delay_ms
USB_HIDимитация USB-клавиатуры

Большинство модулей поддерживают enable (команда и рапорт) и флаг disableOnStart; исключения — startup, watchdog, masquerade и USB_HID.

Пример

[SLOT_6]
mode = startup
;при загрузке - таймер на 30 секунд
crosslink = startup_6/event/started:1->timer_7/action/start:30000
 
[SLOT_7]
mode = timer
;по таймеру - случайный трек
crosslink = timer_7/event/timerEnd:@->player_0/action/play:random

Подробнее — внутренние связи (crossLink).

в этой папке 14 элементов