DeviceNetwork
позволяет работать с устройствами, поддерживающими протокол ADN. Она формирует иерархию подключённых устройств и абстрагирует пользователя от деталей их физического подключения. Так, в текущей версии ADN поддерживается подключение устройств по USB и при помощи IP-сети. Кроме того, некоторые устройства могут быть подключены через другие устройства (например, по радиопротоколу).DeviceNetwork
.DeviceNetwork
:ILibrary
;IDeviceFilter
c помощью createFilter
;IDeviceFilter
необходимых USB и IP устройств методами addUsbDevice
и addIpDevice
;INetwork
с ранее заполненным фильтром – createNetwork
;UpdateId
с помощью getUpdateId
;ILibrary
пользователь может узнать текущую версию библиотеки с помощью getVersion
и задать необходимый уровень LogLevel
с помощью setLogLevel
. По умолчанию LogLevel
=
Off
.IDeviceFilter
, с помощью которого будут выбираться устройства для добавления в сеть INetwork
. После создания фильтра и добавления в него устройств можно создать экземпляр INetwork
используя ILibrary.createNetwork
.INetwork
с пустым фильтром.IDeviceFilter
проводит отбор устройств для подключения к конкретному экземпляру INetwork
. Фильтр работает по принципу добавления: он создаётся пустым, затем в него нужно добавить маски устройств, которые следует подключить к экземпляру ADN.IDeviceFilter
методом ILibrary.createFilter
, затем добавьте туда USB-устройства addUsbDevice
и IP-устройства addIpDevice
. В один фильтр можно добавить оба типа устройств./* * Get a device filter for Antilatency USB Sockets (HMD Radio Socket and Wired USB Socket). */ private static Antilatency.DeviceNetwork.IDeviceFilter GetAntilatencyUsbSocketDevicesFilter(Antilatency.DeviceNetwork.ILibrary deviceNetworkLibrary) { var result = deviceNetworkLibrary.createFilter(); var usbDeviceFilter = new Antilatency.DeviceNetwork.UsbDeviceFilter() { vid = UsbVendorId.Antilatency, pid = 0x0000, pidMask = 0xFFFF }; result.addUsbDevice(usbDeviceFilter); return result; }
AllUsbDevices
, AllIpDevicesMask
и AllIpDevicesIp
.#region DeviceFilter samples /* * Get a device filter for all Antilatency USB devices. */ private static Antilatency.DeviceNetwork.IDeviceFilter GetAllUsbDevicesFilter(Antilatency.DeviceNetwork.ILibrary deviceNetworkLibrary) { var result = deviceNetworkLibrary.createFilter(); result.addUsbDevice(Antilatency.DeviceNetwork.Constants.AllUsbDevices); return result; }
/* * Get a device filter for all IP devices. */ private static Antilatency.DeviceNetwork.IDeviceFilter GetAllIpDevicesFilter(Antilatency.DeviceNetwork.ILibrary deviceNetworkLibrary) { var result = deviceNetworkLibrary.createFilter(); result.addIpDevice(Antilatency.DeviceNetwork.Constants.AllIpDevicesIp, Antilatency.DeviceNetwork.Constants.AllIpDevicesMask); return result; }
INetwork
пользователь может получить IDeviceFilter
методом INetwork.getDeviceFilter
и проверить используемые маски и устройства с помощью getIpDeviceMask
, getIpDevice
и getUsbDevice
. После создания экземпляра INetwork
фильтр можно только просматривать, но не изменять.IDeviceFilter
позволяет распределить подключённые устройства по нескольким экземплярам ADN, запущенным на одном Host. Для этого нужно создать столько же непересекающихся фильтров, сколько работающих одновременно экземпляров ADN. Нельзя создать объекты INetwork
с пересекающимися фильтрами.UsbVendorId
.1
в маске означает, что этот бит в pid подключенного устройства должен быть равен соответствующему биту в заданном pid (Target Pid). 0
в маске означает, что соответствующий бит может принимать любое значение. Смотрите на примере:INetwork
можно восстановить иерархию подключения всех устройств, так как для каждого узла можно узнать его родителя. Для этого воспользуйтесь getNodes
и nodeGetParent
.INetwork
– работа со свойствами узлов.nodeGetStringProperty
и nodeGetBinaryProperty
.nodeStartPropertyTask
, который возвращает IPropertyCotask
.INetwork
используется при работе с тасками (Task) устройств. Методы INetwork
не используются напрямую для запуска тасков, для этого разработан механизм котасков и котаск-конструкторов.INetwork
добавлены новые методы:getCurrentTime
– текущее время экземпляра INetwork
в наносекундах.nodeGetCurrentOutofsyncTime
– текущее отклонение времени на конкретном устройстве от времени корневого узла ADN в секундах. Если значение отрицательное, то это устройство не синхронизировано.NodeStatus
– это состояние узла, которое следует проверять перед запуском какого‑либо таска. Значения TaskRunning
и Idle
показывают, выполняется ли в данный момент какой‑либо таск на данном узле или нет. Если устройство было отключено или стало недоступно, то на запрос nodeGetStatus
будет получено значение Invalid
, и на этом устройстве нельзя запустить какой‑либо таск. По умолчанию, при подключении устройства его NodeStatus
будет Idle
.INetwork.getUpdateId
. Инкрементация счётчика может сигнализировать об изменениях в экземпляре INetwork
: следует обновить список подключенных устройств getNodes
и проверить их состояние nodeGetStatus
.ICotaskConstructor
. Котаск-конструктор проверяет узлы на поддержку таска и запускает этот таск, возвращает экземпляр ICotask
.DeviceNetwork
содержит интерфейсы ICotask
и ICotaskConstructor
. Все котаски других библиотек наследуют метод ICotask.isTaskFinished
, который проверяет, завершился ли соответствующий таск. Все котаск-конструкторы наследуют методы isSupported
(поддерживается ли конкретный таск) и findSupportedNodes
(найти узлы, которые его поддерживают). Методы ICotaskConstructor
перекрывают низкоуровневые методы интерфейса INetwork
: явное использование nodeIsTaskSupported
и nodeStartTask
не требуется.IPropertyCotask
запускается с помощью INetwork.nodeStartPropertyTask
. Так как это тоже таск, на устройстве нужно сначала завершить предыдущий таск и затем запустить этот. Соответственно при чтении свойств используются значения непосредственно с устройства, а не из кэша свойств, кэш автоматически обновляется.IPropertyCotask
позволяет читать, писать и удалять конкретные свойства. Кроме того, можно получить имя свойства getPropertyKey
по индексу, что позволяет узнать полный набор свойств на устройстве.null
.null
.sys/
,getPropertyKey
попытаться получить имя свойства по невалидному идексу,