ADN

ADN

Antilatency Device Network определяет способ подключения устройств друг к другу и объединения их в одну сеть.

В этой статье

Общая информация

Все устройства Antilatency, подключённые к одному Host, образуют сеть в виде дерева устройств. Корневой точкой является Host, а остальные устройства считаются узлами, или Node. Каждый узел дерева устройств может выполнять Task, который реализует функционал этого устройства. Для каждого устройства доступен свой набор тасков.
ADN поддерживает подключение устройств по различным протоколам: USB, IP, SPI и радиопротоколу, и обеспечивает передачу данных с узлов на Host и обратно. В дополнение ADN формирует иерархию подключения устройств и абстрагирует пользователя от деталей их физического подключения.

Взаимодействие с ADN

Для работы с ADN используйте библиотеку Antilatency.DeviceNetwork. Она позволяет получать и отслеживать изменения списка подключённых устройств, находить устройства, работать с их свойствами, а также запускать таски и работать с ними.
Подробнее о работе с библиотекой читайте тут: Antilatency Device Network Library
Дерево устройств отображается в приложении AntilatencyService во вкладке Device Network. Здесь вы можете читать и редактировать свойства любого из подключённых устройств.

Пример ADN

Дерево устройств для полного комплекта VR-устройств на одного пользователя может выглядеть так:
Вместе устройства образуют сеть, с помощью которой можно отслеживать положение тела пользователя на основе знаний о позиции пяти точек.
Так выглядит дерево устройств для описанного выше комплекта в AntilatencyService:

Дерево устройств

Внутри ADN устройства организованы в виде дерева. Структура этого дерева повторяет структуру физического подключения устройств. Каждому из устройств в этом дереве сопоставляется узел (Node). При подключении устройства его узлу выдаётся уникальный в пределах сети номер (NodeHandle). Номера узлов в разных ADN-сетях, даже созданных в одном и том же исполняемом процессе, могут пересекаться. Поэтому многие функции из Antilatency SDK принимают аргументами пару «экземпляр ADN — номер узла в сети», которая служит уникальным идентификатором устройства.
Типичное дерево устройств выглядит так:
Корнем дерева служит виртуальный узел с номером NodeHandle.Null. Потомками корневого узла являются узлы устройств, подключенных к хосту напрямую по USB или IP-сети (на рисунке это Universal Radio Socket). Узлы подключенных к ним устройств, в свою очередь, становятся потомками второго уровня, и так далее. Дерево устройств можно просмотреть в AntilatencyService.

Работа со свойствами

У каждого устройства в ADN есть свойства, которые можно читать, добавлять, изменять и удалять. Они хранятся на самом устройстве, следовательно, сохраняются при переподключении к ADN и при перезапуске самого устройства.
Дополнительную информацию про свойства устройств, их типы и принятые соглашения смотрите здесь.
В приложениии AntilatencyService свойства устройств можно просмотреть во вкладке Device Network.
В библиотеке DeviceNetwork за работу со свойствами устройств отвечает IPropertyCotask. Кроме него, есть ещё методы INetwork.nodeGetStringProperty и INetwork.nodeGetBinaryProperty, которые возвращают значения из кэша свойств.

Кэш свойств

В ADN кэшируются свойства каждого узла (Node). В промежутке между подключением устройства и первым запуском любого таска неявно запускается IPropertyCotask, и все свойства записываются в кэш. Далее при запросе nodeGetStringProperty и nodeGetBinaryProperty пользователь получает значения из кэша.
Значения некоторых свойств могут обновляться при каждом запросе: например, температура устройства. Если нужны актуальные данные, следует запросить их, используя IPropertyCotask из Antilatency Device Network Library.
Пользователь может использовать кэш свойств для чтения свойств любого узла ADN, даже если на этом устройстве уже запущен какой-либо таск. Это позволяет не запускать таск для работы со свойствами, когда необходима непрерывная работа другого таска.
Кэш свойств устройства обновляется при явном чтении и перезаписи свойств во время работы IPropertyCotask.

Полезные ссылки