DeviceNetwork
库允许您使用支持ADN协议的设备。该库创建设备连接层次结构,并将用户从其物理连接的详细信息中抽象出来。因此,当前版本的ADN支持通过USB和IP网络连接设备。此外,一些设备可以通过其他设备(例如,无线电协议)连接。DeviceNetwork
库交互。DeviceNetwork
标准用例:ILibrary
;createFilter
创建空的IDeviceFilter
设备筛选器;createNetwork
)创建INetwork
的实例;getUpdateId
跟踪UpdateId
更改;IDeviceFilter
设备筛选器,该筛选器将用于选择要添加到INetwork
的设备。创建筛选器并向其中添加设备后,可以使用ILibrary.createNetwork
创建INetwork
实例。INetwork
实例。ILibrary.createFilter
方法创建一个IDeviceFilter
,然后在那里添加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; }
#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
后,用户可以使用INetwork.getDeviceFilter
方法获取IDeviceFilter
,并检查与getIpDeviceMask
、getIpDevice
和getUsbDevice
一起使用的掩码和设备。创建INetwork
实例后,只能查看而不能修改筛选器。IDeviceFilter
允许您在同一主设备上运行的多个ADN实例之间分布连接的设备。要做到这一点,需要创建尽可能多的非重叠筛选器,就像同时运行ADN实例一样。不能使用相交筛选器创建INetwork
对象。Antilatency = 0x3237
,该常数可从UsbVendorId
获得。1
表示连接设备pid中的该位必须等于给定pid(Target Pid)中的相应位;掩码中的0
表示对应位可以采用任何值。看看下个例子:nodeGetStringProperty
和nodeGetBinaryProperty
方法执行。nodeStartPropertyTask
方法启动的,该方法返回IPropertyCotask
。getCurrentTime
是INetwork
实例的当前时间,单位为纳秒。nodeGetCurrentOutofsyncTime
是特定设备和ADN根节点之间的当前时间偏差,单位为秒。如果该值为负值,则该设备不同步。NodeStatus
是在运行任何任务之前应检查的节点状态。‑TaskRunning
和Idle
值表示任务当前是否在此节点上运行。‑如果设备被禁用或不可用,则nodeGetStatus
请求将收到Invalid
值,并且无法在此设备上运行任何任务。‑当设备连接时,其NodeStatus
将默认处于Idle
状态。INetwork.getUpdateId
方法找出计数器的当前值。计数器的增量可以表示INetwork
实例中的更改:应该更新已连接设备(getNodes
)的列表并检查其状态(nodeGetStatus
)。ICotaskConstructor
的实例。Cotask构造函数检查节点的任务支持并运行此任务,返回ICotask
实例。DeviceNetwork
库包含ICotask
和ICotaskConstructor
接口。其他库的所有Cotasks都继承了ICotask.isTaskFinished
方法,该方法检查相应的任务是否已完成。所有Cotask构造函数都继承isSupported
方法(是否支持特定任务)和findSupportedNodes
(查找支持该任务的节点)。ICotaskConstructor
方法覆盖了INetwork
接口的低级方法:不需要显式使用nodeIsTaskSupported
和nodeStartTask
。IPropertyCotask
由INetwork.nodeStartPropertyTask
启动。由于这也是一项任务,首先必须在设备上完成上一个任务,然后启动此任务。因此,当读取属性时,直接从设备使用值,而不是从属性缓存中使用值,缓存会自动更新。IPropertyCotask
允许您读取、写入和删除特定属性。此外,可以通过索引获取getPropertyKey
属性名,这允许查找设备上的完整属性集。null
。null
。sys/
属性,getPropertyKey
中试图通过无效索引获取属性名,