Протокол
Сообщения между плагином и приложением: события хоста, команды плагина и жесты.
Сообщения в обе стороны это JSON-объекты с полем type. Неизвестные поля и типы игнорируются, поэтому протокол расширяется без смены версии. Каждое событие от хоста содержит now: монотонное время с запуска плагина в миллисекундах.
context это непрозрачный идентификатор экземпляра действия на конкретной кнопке. Он стабилен, пока действие стоит на этой кнопке этого профиля.
События хоста
device:
{
"id": "OSD153R00001",
"name": "AJAZZ AKP153R",
"connected": true,
"keys": { "columns": 5, "rows": 3, "width": 103, "height": 103 },
"side": { "slots": 3, "width": 85, "height": 103 }
}Команды плагина
Команда с чужим или исчезнувшим context отбрасывается без ошибки: это обычная гонка между disappear и обновлением кнопки.
Жесты
Хост считает жесты сам. keyDown и keyUp приходят всегда, tap приходит при отпускании любой кнопки. longPress и удержание работают для действий, которые объявили gestures.
tap приходит при отпускании, если до этого не было ни longPress, ни holdStart. Так кнопка с удержанием никогда не получает лишний tap после перемотки. Если исчезает действие или устройство, удержание завершается holdEnd без tap.
Версии
sdkв манифесте меняется только при несовместимых изменениях протокола.format_versionв индексе меняется при несовместимых изменениях формата пакета.opensd_abi()меняется при несовместимых изменениях ABI.
Новые события, команды и поля добавляются без смены этих номеров.