Виртуальные модули не привязаны к железу: они обрабатывают события, хранят состояние и запускают действия. Занимают слоты 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).