aes70 1.3.7 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/Changelog +18 -0
  2. package/dist/AES70.es5.js +1 -1
  3. package/package.json +1 -1
  4. package/src/OCP1/OcaBlockMember.js +1 -1
  5. package/src/OCP1/OcaClassAuthorityID.js +1 -1
  6. package/src/OCP1/OcaClassIdentification.js +1 -1
  7. package/src/OCP1/OcaDBr.js +1 -1
  8. package/src/OCP1/OcaDelayValue.js +1 -1
  9. package/src/OCP1/OcaEvent.js +1 -1
  10. package/src/OCP1/OcaEventID.js +1 -1
  11. package/src/OCP1/OcaGlobalTypeIdentifier.js +1 -1
  12. package/src/OCP1/OcaGrouperCitizen.js +1 -1
  13. package/src/OCP1/OcaGrouperEnrollment.js +1 -1
  14. package/src/OCP1/OcaGrouperGroup.js +1 -1
  15. package/src/OCP1/OcaGrouperStatusChangeEventData.js +1 -3
  16. package/src/OCP1/OcaImpedance.js +1 -1
  17. package/src/OCP1/OcaLibParamSetAssignment.js +1 -1
  18. package/src/OCP1/OcaLibVol.js +1 -1
  19. package/src/OCP1/OcaLibVolChangedEventData.js +1 -3
  20. package/src/OCP1/OcaLibVolData_ParamSet.js +1 -1
  21. package/src/OCP1/OcaLibVolIdentifier.js +1 -1
  22. package/src/OCP1/OcaLibVolMetadata.js +1 -1
  23. package/src/OCP1/OcaLibVolType.js +1 -1
  24. package/src/OCP1/OcaLibraryIdentifier.js +1 -1
  25. package/src/OCP1/OcaManagerDescriptor.js +1 -1
  26. package/src/OCP1/OcaMediaClockRate.js +1 -1
  27. package/src/OCP1/OcaMediaCoding.js +1 -1
  28. package/src/OCP1/OcaMediaConnection.js +1 -1
  29. package/src/OCP1/OcaMediaConnectorElement.js +2 -2
  30. package/src/OCP1/OcaMediaConnectorStatus.js +1 -1
  31. package/src/OCP1/OcaMediaConnectorStatusChangedEventData.js +1 -3
  32. package/src/OCP1/OcaMediaSinkConnector.js +1 -1
  33. package/src/OCP1/OcaMediaSinkConnectorChangedEventData.js +1 -3
  34. package/src/OCP1/OcaMediaSourceConnector.js +1 -1
  35. package/src/OCP1/OcaMediaSourceConnectorChangedEventData.js +1 -3
  36. package/src/OCP1/OcaMethod.js +1 -1
  37. package/src/OCP1/OcaMethodID.js +1 -1
  38. package/src/OCP1/OcaModelDescription.js +1 -1
  39. package/src/OCP1/OcaModelGUID.js +1 -1
  40. package/src/OCP1/OcaNetworkStatistics.js +1 -1
  41. package/src/OCP1/OcaNetworkSystemInterfaceDescriptor.js +1 -1
  42. package/src/OCP1/OcaNetworkSystemInterfaceID.js +1 -1
  43. package/src/OCP1/OcaOPath.js +1 -1
  44. package/src/OCP1/OcaObjectIdentification.js +1 -1
  45. package/src/OCP1/OcaObjectListEventData.js +1 -3
  46. package/src/OCP1/OcaObjectSearchResult.js +1 -1
  47. package/src/OCP1/OcaObservationEventData.js +1 -3
  48. package/src/OCP1/OcaObservationListEventData.js +1 -3
  49. package/src/OCP1/OcaParameterMask.js +3 -0
  50. package/src/OCP1/OcaPilotToneDetectorSpec.js +1 -1
  51. package/src/OCP1/OcaPort.js +1 -1
  52. package/src/OCP1/OcaPortID.js +1 -1
  53. package/src/OCP1/OcaPositionDescriptor.js +3 -3
  54. package/src/OCP1/OcaPositionDescriptorFieldFlags.js +3 -0
  55. package/src/OCP1/OcaProperty.js +1 -1
  56. package/src/OCP1/OcaPropertyDescriptor.js +1 -1
  57. package/src/OCP1/OcaPropertyID.js +1 -1
  58. package/src/OCP1/OcaProtoObjectIdentification.js +1 -1
  59. package/src/OCP1/OcaProtoPort.js +1 -1
  60. package/src/OCP1/OcaProtoPortID.js +1 -1
  61. package/src/OCP1/OcaProtoSignalPath.js +1 -1
  62. package/src/OCP1/OcaSignalPath.js +1 -1
  63. package/src/OCP1/OcaStream.js +1 -1
  64. package/src/OCP1/OcaStreamConnectorIdentification.js +1 -1
  65. package/src/OCP1/OcaTask.js +1 -1
  66. package/src/OCP1/OcaTaskStateChangedEventData.js +1 -1
  67. package/src/OCP1/OcaTaskStatus.js +1 -1
  68. package/src/OCP1/OcaTimePTP.js +1 -1
  69. package/src/OCP1/OcaTransferFunction.js +1 -1
  70. package/src/OCP1/OcaVersion.js +1 -1
  71. package/src/controller/ControlClasses/OcaActuator.d.ts +3 -1
  72. package/src/controller/ControlClasses/OcaActuator.js +3 -1
  73. package/src/controller/ControlClasses/OcaAgent.d.ts +10 -7
  74. package/src/controller/ControlClasses/OcaAgent.js +12 -8
  75. package/src/controller/ControlClasses/OcaApplicationNetwork.d.ts +35 -21
  76. package/src/controller/ControlClasses/OcaApplicationNetwork.js +43 -32
  77. package/src/controller/ControlClasses/OcaAudioLevelSensor.d.ts +14 -8
  78. package/src/controller/ControlClasses/OcaAudioLevelSensor.js +13 -9
  79. package/src/controller/ControlClasses/OcaAudioProcessingManager.d.ts +3 -2
  80. package/src/controller/ControlClasses/OcaAudioProcessingManager.js +3 -2
  81. package/src/controller/ControlClasses/OcaBitstringActuator.d.ts +11 -8
  82. package/src/controller/ControlClasses/OcaBitstringActuator.js +13 -9
  83. package/src/controller/ControlClasses/OcaBitstringSensor.d.ts +7 -5
  84. package/src/controller/ControlClasses/OcaBitstringSensor.js +9 -6
  85. package/src/controller/ControlClasses/OcaBlock.d.ts +88 -74
  86. package/src/controller/ControlClasses/OcaBlock.js +80 -63
  87. package/src/controller/ControlClasses/OcaBlockFactory.d.ts +73 -29
  88. package/src/controller/ControlClasses/OcaBlockFactory.js +69 -42
  89. package/src/controller/ControlClasses/OcaBooleanActuator.d.ts +5 -4
  90. package/src/controller/ControlClasses/OcaBooleanActuator.js +6 -4
  91. package/src/controller/ControlClasses/OcaBooleanSensor.d.ts +3 -3
  92. package/src/controller/ControlClasses/OcaBooleanSensor.js +4 -3
  93. package/src/controller/ControlClasses/OcaCodingManager.d.ts +10 -7
  94. package/src/controller/ControlClasses/OcaCodingManager.js +17 -13
  95. package/src/controller/ControlClasses/OcaControlNetwork.d.ts +4 -5
  96. package/src/controller/ControlClasses/OcaControlNetwork.js +5 -6
  97. package/src/controller/ControlClasses/OcaCurrentSensor.d.ts +4 -4
  98. package/src/controller/ControlClasses/OcaCurrentSensor.js +4 -3
  99. package/src/controller/ControlClasses/OcaDelay.d.ts +6 -5
  100. package/src/controller/ControlClasses/OcaDelay.js +6 -4
  101. package/src/controller/ControlClasses/OcaDelayExtended.d.ts +18 -15
  102. package/src/controller/ControlClasses/OcaDelayExtended.js +17 -12
  103. package/src/controller/ControlClasses/OcaDeviceManager.d.ts +56 -31
  104. package/src/controller/ControlClasses/OcaDeviceManager.js +75 -51
  105. package/src/controller/ControlClasses/OcaDeviceTimeManager.d.ts +33 -16
  106. package/src/controller/ControlClasses/OcaDeviceTimeManager.js +36 -18
  107. package/src/controller/ControlClasses/OcaDiagnosticManager.d.ts +6 -3
  108. package/src/controller/ControlClasses/OcaDiagnosticManager.js +8 -5
  109. package/src/controller/ControlClasses/OcaDynamics.d.ts +89 -61
  110. package/src/controller/ControlClasses/OcaDynamics.js +101 -79
  111. package/src/controller/ControlClasses/OcaDynamicsCurve.d.ts +77 -30
  112. package/src/controller/ControlClasses/OcaDynamicsCurve.js +85 -37
  113. package/src/controller/ControlClasses/OcaDynamicsDetector.d.ts +30 -22
  114. package/src/controller/ControlClasses/OcaDynamicsDetector.js +36 -24
  115. package/src/controller/ControlClasses/OcaEventHandler.d.ts +8 -6
  116. package/src/controller/ControlClasses/OcaEventHandler.js +9 -6
  117. package/src/controller/ControlClasses/OcaFilterArbitraryCurve.d.ts +13 -9
  118. package/src/controller/ControlClasses/OcaFilterArbitraryCurve.js +15 -12
  119. package/src/controller/ControlClasses/OcaFilterClassical.d.ts +43 -30
  120. package/src/controller/ControlClasses/OcaFilterClassical.js +40 -31
  121. package/src/controller/ControlClasses/OcaFilterFIR.d.ts +12 -8
  122. package/src/controller/ControlClasses/OcaFilterFIR.js +19 -14
  123. package/src/controller/ControlClasses/OcaFilterParametric.d.ts +34 -25
  124. package/src/controller/ControlClasses/OcaFilterParametric.js +39 -33
  125. package/src/controller/ControlClasses/OcaFilterPolynomial.d.ts +6 -6
  126. package/src/controller/ControlClasses/OcaFilterPolynomial.js +11 -10
  127. package/src/controller/ControlClasses/OcaFirmwareManager.d.ts +71 -21
  128. package/src/controller/ControlClasses/OcaFirmwareManager.js +71 -22
  129. package/src/controller/ControlClasses/OcaFloat32Actuator.d.ts +6 -5
  130. package/src/controller/ControlClasses/OcaFloat32Actuator.js +6 -4
  131. package/src/controller/ControlClasses/OcaFloat32Sensor.d.ts +4 -4
  132. package/src/controller/ControlClasses/OcaFloat32Sensor.js +4 -3
  133. package/src/controller/ControlClasses/OcaFloat64Actuator.d.ts +6 -5
  134. package/src/controller/ControlClasses/OcaFloat64Actuator.js +6 -4
  135. package/src/controller/ControlClasses/OcaFloat64Sensor.d.ts +4 -4
  136. package/src/controller/ControlClasses/OcaFloat64Sensor.js +4 -3
  137. package/src/controller/ControlClasses/OcaFrequencyActuator.d.ts +6 -5
  138. package/src/controller/ControlClasses/OcaFrequencyActuator.js +6 -4
  139. package/src/controller/ControlClasses/OcaFrequencySensor.d.ts +4 -4
  140. package/src/controller/ControlClasses/OcaFrequencySensor.js +4 -3
  141. package/src/controller/ControlClasses/OcaGain.d.ts +6 -5
  142. package/src/controller/ControlClasses/OcaGain.js +6 -4
  143. package/src/controller/ControlClasses/OcaGainSensor.d.ts +6 -5
  144. package/src/controller/ControlClasses/OcaGainSensor.js +6 -4
  145. package/src/controller/ControlClasses/OcaGrouper.d.ts +138 -58
  146. package/src/controller/ControlClasses/OcaGrouper.js +139 -61
  147. package/src/controller/ControlClasses/OcaIdentificationActuator.d.ts +9 -10
  148. package/src/controller/ControlClasses/OcaIdentificationActuator.js +10 -10
  149. package/src/controller/ControlClasses/OcaIdentificationSensor.d.ts +6 -4
  150. package/src/controller/ControlClasses/OcaIdentificationSensor.js +5 -3
  151. package/src/controller/ControlClasses/OcaImpedanceSensor.d.ts +8 -8
  152. package/src/controller/ControlClasses/OcaImpedanceSensor.js +7 -6
  153. package/src/controller/ControlClasses/OcaInt16Actuator.d.ts +6 -5
  154. package/src/controller/ControlClasses/OcaInt16Actuator.js +6 -4
  155. package/src/controller/ControlClasses/OcaInt16Sensor.d.ts +4 -4
  156. package/src/controller/ControlClasses/OcaInt16Sensor.js +4 -3
  157. package/src/controller/ControlClasses/OcaInt32Actuator.d.ts +6 -5
  158. package/src/controller/ControlClasses/OcaInt32Actuator.js +6 -4
  159. package/src/controller/ControlClasses/OcaInt32Sensor.d.ts +4 -4
  160. package/src/controller/ControlClasses/OcaInt32Sensor.js +4 -3
  161. package/src/controller/ControlClasses/OcaInt64Actuator.d.ts +6 -5
  162. package/src/controller/ControlClasses/OcaInt64Actuator.js +6 -4
  163. package/src/controller/ControlClasses/OcaInt64Sensor.d.ts +4 -4
  164. package/src/controller/ControlClasses/OcaInt64Sensor.js +4 -3
  165. package/src/controller/ControlClasses/OcaInt8Actuator.d.ts +6 -5
  166. package/src/controller/ControlClasses/OcaInt8Actuator.js +6 -4
  167. package/src/controller/ControlClasses/OcaInt8Sensor.d.ts +4 -4
  168. package/src/controller/ControlClasses/OcaInt8Sensor.js +4 -3
  169. package/src/controller/ControlClasses/OcaLevelSensor.d.ts +4 -4
  170. package/src/controller/ControlClasses/OcaLevelSensor.js +4 -3
  171. package/src/controller/ControlClasses/OcaLibrary.d.ts +50 -25
  172. package/src/controller/ControlClasses/OcaLibrary.js +54 -26
  173. package/src/controller/ControlClasses/OcaLibraryManager.d.ts +22 -16
  174. package/src/controller/ControlClasses/OcaLibraryManager.js +22 -17
  175. package/src/controller/ControlClasses/OcaManager.d.ts +4 -1
  176. package/src/controller/ControlClasses/OcaManager.js +4 -1
  177. package/src/controller/ControlClasses/OcaMatrix.d.ts +69 -20
  178. package/src/controller/ControlClasses/OcaMatrix.js +86 -38
  179. package/src/controller/ControlClasses/OcaMediaClock.d.ts +33 -19
  180. package/src/controller/ControlClasses/OcaMediaClock.js +30 -19
  181. package/src/controller/ControlClasses/OcaMediaClock3.d.ts +37 -22
  182. package/src/controller/ControlClasses/OcaMediaClock3.js +39 -27
  183. package/src/controller/ControlClasses/OcaMediaClockManager.d.ts +15 -9
  184. package/src/controller/ControlClasses/OcaMediaClockManager.js +28 -23
  185. package/src/controller/ControlClasses/OcaMediaTransportNetwork.d.ts +106 -74
  186. package/src/controller/ControlClasses/OcaMediaTransportNetwork.js +121 -111
  187. package/src/controller/ControlClasses/OcaMute.d.ts +7 -7
  188. package/src/controller/ControlClasses/OcaMute.js +7 -5
  189. package/src/controller/ControlClasses/OcaNetwork.d.ts +38 -20
  190. package/src/controller/ControlClasses/OcaNetwork.js +58 -42
  191. package/src/controller/ControlClasses/OcaNetworkManager.d.ts +20 -9
  192. package/src/controller/ControlClasses/OcaNetworkManager.js +33 -23
  193. package/src/controller/ControlClasses/OcaNetworkSignalChannel.d.ts +43 -19
  194. package/src/controller/ControlClasses/OcaNetworkSignalChannel.js +67 -44
  195. package/src/controller/ControlClasses/OcaNumericObserver.d.ts +77 -38
  196. package/src/controller/ControlClasses/OcaNumericObserver.js +95 -59
  197. package/src/controller/ControlClasses/OcaNumericObserverList.d.ts +96 -45
  198. package/src/controller/ControlClasses/OcaNumericObserverList.js +129 -80
  199. package/src/controller/ControlClasses/OcaPanBalance.d.ts +10 -7
  200. package/src/controller/ControlClasses/OcaPanBalance.js +14 -11
  201. package/src/controller/ControlClasses/OcaPhysicalPosition.d.ts +31 -18
  202. package/src/controller/ControlClasses/OcaPhysicalPosition.js +43 -18
  203. package/src/controller/ControlClasses/OcaPolarity.d.ts +10 -7
  204. package/src/controller/ControlClasses/OcaPolarity.js +7 -5
  205. package/src/controller/ControlClasses/OcaPowerManager.d.ts +20 -14
  206. package/src/controller/ControlClasses/OcaPowerManager.js +27 -21
  207. package/src/controller/ControlClasses/OcaPowerSupply.d.ts +24 -15
  208. package/src/controller/ControlClasses/OcaPowerSupply.js +31 -23
  209. package/src/controller/ControlClasses/OcaRamper.d.ts +55 -34
  210. package/src/controller/ControlClasses/OcaRamper.js +58 -37
  211. package/src/controller/ControlClasses/OcaRoot.d.ts +28 -14
  212. package/src/controller/ControlClasses/OcaRoot.js +32 -24
  213. package/src/controller/ControlClasses/OcaSecurityManager.d.ts +29 -13
  214. package/src/controller/ControlClasses/OcaSecurityManager.js +31 -14
  215. package/src/controller/ControlClasses/OcaSensor.d.ts +4 -4
  216. package/src/controller/ControlClasses/OcaSensor.js +6 -5
  217. package/src/controller/ControlClasses/OcaSignalGenerator.d.ts +48 -38
  218. package/src/controller/ControlClasses/OcaSignalGenerator.js +57 -46
  219. package/src/controller/ControlClasses/OcaSignalInput.d.ts +4 -1
  220. package/src/controller/ControlClasses/OcaSignalInput.js +4 -1
  221. package/src/controller/ControlClasses/OcaSignalOutput.d.ts +4 -1
  222. package/src/controller/ControlClasses/OcaSignalOutput.js +4 -1
  223. package/src/controller/ControlClasses/OcaStreamConnector.d.ts +59 -24
  224. package/src/controller/ControlClasses/OcaStreamConnector.js +80 -48
  225. package/src/controller/ControlClasses/OcaStreamNetwork.d.ts +100 -27
  226. package/src/controller/ControlClasses/OcaStreamNetwork.js +124 -54
  227. package/src/controller/ControlClasses/OcaStringActuator.d.ts +5 -4
  228. package/src/controller/ControlClasses/OcaStringActuator.js +7 -5
  229. package/src/controller/ControlClasses/OcaStringSensor.d.ts +7 -5
  230. package/src/controller/ControlClasses/OcaStringSensor.js +10 -7
  231. package/src/controller/ControlClasses/OcaSubscriptionManager.d.ts +73 -46
  232. package/src/controller/ControlClasses/OcaSubscriptionManager.js +78 -51
  233. package/src/controller/ControlClasses/OcaSummingPoint.d.ts +2 -1
  234. package/src/controller/ControlClasses/OcaSummingPoint.js +2 -1
  235. package/src/controller/ControlClasses/OcaSwitch.d.ts +23 -15
  236. package/src/controller/ControlClasses/OcaSwitch.js +31 -23
  237. package/src/controller/ControlClasses/OcaTaskManager.d.ts +47 -38
  238. package/src/controller/ControlClasses/OcaTaskManager.js +48 -37
  239. package/src/controller/ControlClasses/OcaTemperatureActuator.d.ts +6 -5
  240. package/src/controller/ControlClasses/OcaTemperatureActuator.js +6 -4
  241. package/src/controller/ControlClasses/OcaTemperatureSensor.d.ts +4 -4
  242. package/src/controller/ControlClasses/OcaTemperatureSensor.js +4 -3
  243. package/src/controller/ControlClasses/OcaTimeIntervalSensor.d.ts +4 -4
  244. package/src/controller/ControlClasses/OcaTimeIntervalSensor.js +4 -3
  245. package/src/controller/ControlClasses/OcaTimeSource.d.ts +38 -22
  246. package/src/controller/ControlClasses/OcaTimeSource.js +41 -27
  247. package/src/controller/ControlClasses/OcaUint16Actuator.d.ts +6 -5
  248. package/src/controller/ControlClasses/OcaUint16Actuator.js +6 -4
  249. package/src/controller/ControlClasses/OcaUint16Sensor.d.ts +4 -4
  250. package/src/controller/ControlClasses/OcaUint16Sensor.js +4 -3
  251. package/src/controller/ControlClasses/OcaUint32Actuator.d.ts +6 -5
  252. package/src/controller/ControlClasses/OcaUint32Actuator.js +6 -4
  253. package/src/controller/ControlClasses/OcaUint32Sensor.d.ts +4 -4
  254. package/src/controller/ControlClasses/OcaUint32Sensor.js +4 -3
  255. package/src/controller/ControlClasses/OcaUint64Actuator.d.ts +6 -5
  256. package/src/controller/ControlClasses/OcaUint64Actuator.js +6 -4
  257. package/src/controller/ControlClasses/OcaUint64Sensor.d.ts +4 -4
  258. package/src/controller/ControlClasses/OcaUint64Sensor.js +4 -3
  259. package/src/controller/ControlClasses/OcaUint8Actuator.d.ts +6 -5
  260. package/src/controller/ControlClasses/OcaUint8Actuator.js +6 -4
  261. package/src/controller/ControlClasses/OcaUint8Sensor.d.ts +4 -4
  262. package/src/controller/ControlClasses/OcaUint8Sensor.js +4 -3
  263. package/src/controller/ControlClasses/OcaVoltageSensor.d.ts +4 -4
  264. package/src/controller/ControlClasses/OcaVoltageSensor.js +4 -3
  265. package/src/controller/ControlClasses/OcaWorker.d.ts +38 -28
  266. package/src/controller/ControlClasses/OcaWorker.js +50 -40
  267. package/src/controller/abstract_udp_connection.js +215 -0
  268. package/src/controller/client_connection.d.ts +1 -1
  269. package/src/controller/node_udp.js +140 -0
  270. package/src/controller/property_event.js +1 -1
  271. package/src/controller/udp_connection.js +5 -270
  272. package/src/index.browser.js +2 -0
  273. package/src/index.js +2 -0
  274. package/src/types/OcaBlockMember.d.ts +1 -2
  275. package/src/types/OcaClassAuthorityID.d.ts +14 -3
  276. package/src/types/OcaClassAuthorityID.js +8 -2
  277. package/src/types/OcaClassIdentification.d.ts +4 -3
  278. package/src/types/OcaClassIdentification.js +2 -2
  279. package/src/types/OcaComponent.d.ts +3 -1
  280. package/src/types/OcaComponent.js +3 -1
  281. package/src/types/OcaDBr.d.ts +6 -4
  282. package/src/types/OcaDBr.js +3 -2
  283. package/src/types/OcaDelayValue.d.ts +1 -2
  284. package/src/types/OcaDeviceState.d.ts +4 -1
  285. package/src/types/OcaDeviceState.js +4 -1
  286. package/src/types/OcaDynamicsFunction.d.ts +2 -1
  287. package/src/types/OcaDynamicsFunction.js +2 -1
  288. package/src/types/OcaEvent.d.ts +3 -3
  289. package/src/types/OcaEvent.js +2 -1
  290. package/src/types/OcaEventID.d.ts +3 -1
  291. package/src/types/OcaEventID.js +3 -1
  292. package/src/types/OcaGlobalTypeIdentifier.d.ts +10 -4
  293. package/src/types/OcaGlobalTypeIdentifier.js +5 -2
  294. package/src/types/OcaGrouperCitizen.d.ts +7 -5
  295. package/src/types/OcaGrouperCitizen.js +4 -2
  296. package/src/types/OcaGrouperEnrollment.d.ts +8 -4
  297. package/src/types/OcaGrouperEnrollment.js +4 -2
  298. package/src/types/OcaGrouperGroup.d.ts +4 -2
  299. package/src/types/OcaGrouperGroup.js +2 -1
  300. package/src/types/OcaGrouperMode.d.ts +1 -1
  301. package/src/types/OcaGrouperMode.js +1 -1
  302. package/src/types/OcaGrouperStatusChangeEventData.d.ts +7 -19
  303. package/src/types/OcaGrouperStatusChangeEventData.js +5 -8
  304. package/src/types/OcaGrouperStatusChangeType.d.ts +2 -1
  305. package/src/types/OcaGrouperStatusChangeType.js +2 -1
  306. package/src/types/OcaLevelDetectionLaw.d.ts +2 -1
  307. package/src/types/OcaLevelDetectionLaw.js +2 -1
  308. package/src/types/OcaLibParamSetAssignment.d.ts +3 -3
  309. package/src/types/OcaLibParamSetAssignment.js +2 -1
  310. package/src/types/OcaLibVol.d.ts +3 -3
  311. package/src/types/OcaLibVol.js +3 -2
  312. package/src/types/OcaLibVolChangedEventData.d.ts +4 -21
  313. package/src/types/OcaLibVolChangedEventData.js +3 -7
  314. package/src/types/OcaLibVolData_ParamSet.d.ts +13 -3
  315. package/src/types/OcaLibVolData_ParamSet.js +11 -3
  316. package/src/types/OcaLibVolMetadata.d.ts +4 -5
  317. package/src/types/OcaLibVolMetadata.js +1 -1
  318. package/src/types/OcaLibVolType.d.ts +12 -4
  319. package/src/types/OcaLibVolType.js +6 -2
  320. package/src/types/OcaLibraryIdentifier.d.ts +3 -3
  321. package/src/types/OcaLibraryIdentifier.js +2 -1
  322. package/src/types/OcaManagerDefaultObjectNumbers.d.ts +58 -116
  323. package/src/types/OcaManagerDefaultObjectNumbers.js +2 -2
  324. package/src/types/OcaManagerDescriptor.d.ts +4 -0
  325. package/src/types/OcaManagerDescriptor.js +2 -0
  326. package/src/types/OcaMediaClockRate.d.ts +12 -6
  327. package/src/types/OcaMediaClockRate.js +6 -3
  328. package/src/types/OcaMediaCoding.d.ts +4 -2
  329. package/src/types/OcaMediaCoding.js +2 -1
  330. package/src/types/OcaMediaConnection.d.ts +21 -8
  331. package/src/types/OcaMediaConnection.js +18 -5
  332. package/src/types/OcaMediaConnectorStatus.d.ts +5 -4
  333. package/src/types/OcaMediaConnectorStatus.js +2 -1
  334. package/src/types/OcaMediaConnectorStatusChangedEventData.d.ts +2 -17
  335. package/src/types/OcaMediaConnectorStatusChangedEventData.js +1 -7
  336. package/src/types/OcaMediaSinkConnector.d.ts +43 -15
  337. package/src/types/OcaMediaSinkConnector.js +23 -7
  338. package/src/types/OcaMediaSinkConnectorChangedEventData.d.ts +20 -30
  339. package/src/types/OcaMediaSinkConnectorChangedEventData.js +8 -11
  340. package/src/types/OcaMediaSourceConnector.d.ts +33 -13
  341. package/src/types/OcaMediaSourceConnector.js +17 -7
  342. package/src/types/OcaMediaSourceConnectorChangedEventData.d.ts +20 -30
  343. package/src/types/OcaMediaSourceConnectorChangedEventData.js +8 -11
  344. package/src/types/OcaMethod.d.ts +8 -5
  345. package/src/types/OcaMethod.js +5 -2
  346. package/src/types/OcaMethodID.d.ts +3 -1
  347. package/src/types/OcaMethodID.js +3 -1
  348. package/src/types/OcaModelGUID.d.ts +4 -2
  349. package/src/types/OcaModelGUID.js +5 -4
  350. package/src/types/OcaNetworkMediaSourceOrSink.d.ts +2 -1
  351. package/src/types/OcaNetworkMediaSourceOrSink.js +2 -1
  352. package/src/types/OcaNetworkSystemInterfaceDescriptor.d.ts +2 -1
  353. package/src/types/OcaNetworkSystemInterfaceDescriptor.js +3 -2
  354. package/src/types/OcaNetworkSystemInterfaceID.d.ts +2 -1
  355. package/src/types/OcaNetworkSystemInterfaceID.js +3 -2
  356. package/src/types/OcaNotificationDeliveryMode.d.ts +2 -1
  357. package/src/types/OcaNotificationDeliveryMode.js +2 -1
  358. package/src/types/OcaOPath.d.ts +2 -1
  359. package/src/types/OcaOPath.js +2 -1
  360. package/src/types/OcaObjectIdentification.d.ts +3 -3
  361. package/src/types/OcaObjectIdentification.js +2 -1
  362. package/src/types/OcaObjectListEventData.d.ts +3 -16
  363. package/src/types/OcaObjectListEventData.js +4 -8
  364. package/src/types/OcaObjectSearchResult.d.ts +5 -3
  365. package/src/types/OcaObjectSearchResult.js +4 -1
  366. package/src/types/OcaObjectSearchResultFlags.d.ts +1 -1
  367. package/src/types/OcaObjectSearchResultFlags.js +1 -1
  368. package/src/types/OcaObservationEventData.d.ts +8 -16
  369. package/src/types/OcaObservationEventData.js +8 -7
  370. package/src/types/OcaObservationListEventData.d.ts +8 -16
  371. package/src/types/OcaObservationListEventData.js +9 -8
  372. package/src/types/OcaParameterMask.d.ts +13 -0
  373. package/src/types/OcaParameterMask.js +11 -0
  374. package/src/types/OcaPilotToneDetectorSpec.d.ts +1 -2
  375. package/src/types/OcaPort.d.ts +3 -3
  376. package/src/types/OcaPort.js +2 -1
  377. package/src/types/OcaPortID.d.ts +4 -3
  378. package/src/types/OcaPortID.js +3 -1
  379. package/src/types/OcaPositionCoordinateSystem.d.ts +2 -1
  380. package/src/types/OcaPositionCoordinateSystem.js +2 -1
  381. package/src/types/OcaPositionDescriptor.d.ts +21 -20
  382. package/src/types/OcaPositionDescriptor.js +12 -14
  383. package/src/types/OcaPositionDescriptorFieldFlags.d.ts +13 -0
  384. package/src/types/OcaPositionDescriptorFieldFlags.js +11 -0
  385. package/src/types/OcaPowerState.d.ts +2 -1
  386. package/src/types/OcaPowerState.js +2 -1
  387. package/src/types/OcaPresentationUnit.d.ts +8 -1
  388. package/src/types/OcaPresentationUnit.js +8 -1
  389. package/src/types/OcaProperty.d.ts +3 -3
  390. package/src/types/OcaProperty.js +2 -1
  391. package/src/types/OcaPropertyDescriptor.d.ts +9 -9
  392. package/src/types/OcaPropertyDescriptor.js +4 -3
  393. package/src/types/OcaPropertyID.d.ts +3 -1
  394. package/src/types/OcaPropertyID.js +3 -1
  395. package/src/types/OcaProtoObjectIdentification.d.ts +3 -3
  396. package/src/types/OcaProtoObjectIdentification.js +2 -1
  397. package/src/types/OcaProtoPort.d.ts +9 -5
  398. package/src/types/OcaProtoPort.js +5 -2
  399. package/src/types/OcaProtoPortID.d.ts +4 -3
  400. package/src/types/OcaProtoPortID.js +3 -1
  401. package/src/types/OcaProtoSignalPath.d.ts +1 -2
  402. package/src/types/OcaRamperCommand.d.ts +1 -1
  403. package/src/types/OcaRamperCommand.js +1 -1
  404. package/src/types/OcaRamperState.d.ts +15 -10
  405. package/src/types/OcaRamperState.js +15 -10
  406. package/src/types/OcaSensorReadingState.d.ts +2 -1
  407. package/src/types/OcaSensorReadingState.js +2 -1
  408. package/src/types/OcaSignalPath.d.ts +1 -2
  409. package/src/types/OcaStream.d.ts +23 -10
  410. package/src/types/OcaStream.js +17 -5
  411. package/src/types/OcaStreamConnectorIdentification.d.ts +17 -7
  412. package/src/types/OcaStreamConnectorIdentification.js +15 -6
  413. package/src/types/OcaSubscriptionManagerState.d.ts +1 -1
  414. package/src/types/OcaSubscriptionManagerState.js +1 -1
  415. package/src/types/OcaTask.d.ts +27 -13
  416. package/src/types/OcaTask.js +14 -6
  417. package/src/types/OcaTaskManagerState.d.ts +13 -9
  418. package/src/types/OcaTaskManagerState.js +13 -9
  419. package/src/types/OcaTaskState.d.ts +3 -1
  420. package/src/types/OcaTaskState.js +3 -1
  421. package/src/types/OcaTaskStateChangedEventData.d.ts +6 -6
  422. package/src/types/OcaTaskStateChangedEventData.js +2 -2
  423. package/src/types/OcaTaskStatus.d.ts +6 -5
  424. package/src/types/OcaTaskStatus.js +5 -3
  425. package/src/types/OcaTimeMode.d.ts +1 -1
  426. package/src/types/OcaTimeMode.js +1 -1
  427. package/src/types/OcaTimePTP.d.ts +8 -3
  428. package/src/types/OcaTimePTP.js +6 -2
  429. package/src/types/OcaTransferFunction.js +3 -3
  430. package/src/types/OcaUnitOfMeasure.d.ts +5 -1
  431. package/src/types/OcaUnitOfMeasure.js +5 -1
  432. package/src/types/OcaVersion.d.ts +7 -5
  433. package/src/types/OcaVersion.js +4 -2
@@ -0,0 +1,215 @@
1
+ /* eslint-env node */
2
+
3
+ import { encodeMessage } from '../OCP1/encode_message.js';
4
+ import { decodeMessage } from '../OCP1/decode_message.js';
5
+ import { KeepAlive } from '../OCP1/keepalive.js';
6
+ import { ClientConnection } from './client_connection.js';
7
+
8
+ function delay(n) {
9
+ return new Promise((resolve) => setTimeout(resolve, n));
10
+ }
11
+
12
+ async function waitForKeepalive(socket, options) {
13
+ const waiter = socket.receiveMessage().then((buffer) => {
14
+ const pdus = [];
15
+ let pos = 0;
16
+
17
+ pos = decodeMessage(new DataView(buffer), 0, pdus);
18
+
19
+ if (pdus.length !== 1) throw new Error('Expected keepalive response.');
20
+
21
+ return true;
22
+ });
23
+
24
+ const msg = encodeMessage(new KeepAlive(1000));
25
+ const t = 5 * (options.retry_interval || 250);
26
+
27
+ for (let i = 0; i < 3; i++) {
28
+ socket.send(msg);
29
+
30
+ if (await Promise.race([waiter, delay(t)])) return;
31
+ }
32
+
33
+ throw new Error('Failed to connect.');
34
+ }
35
+
36
+ /**
37
+ * :class:`ClientConnection` subclass which implements OCP.1 with UDP
38
+ * transport.
39
+ */
40
+ export class AbstractUDPConnection extends ClientConnection {
41
+ constructor(socket, options) {
42
+ // allow us to batch 128 bytes max
43
+ // Set this to a higher value, e.g. close to MTU
44
+ // if you are sure that the device can handle it.
45
+ if (!(options.batch >= 0)) options.batch = 128;
46
+ super(options);
47
+ this.socket = socket;
48
+ this.delay = options.delay >= 0 ? options.delay : 5;
49
+ this.retry_interval =
50
+ options.retry_interval >= 0 ? options.retry_interval : 250;
51
+ this.retry_count = options.retry_count >= 0 ? options.retry_count : 3;
52
+ this._write_out_id = -1;
53
+ this._write_out_callback = () => {
54
+ this._write_out_id = -1;
55
+ this._write_out();
56
+ };
57
+ this._retry_id =
58
+ this.retry_interval > 0
59
+ ? setInterval(() => this._retryCommands(), this.retry_interval)
60
+ : -1;
61
+ this.q = [];
62
+ socket.onmessage = (buffer) => {
63
+ try {
64
+ this.read(buffer);
65
+ } catch (err) {
66
+ console.warn('Failed to parse incoming AES70 packet: %o', err);
67
+ }
68
+ if (this.inbuf !== null) this.close();
69
+ };
70
+ socket.onerror = (err) => this.error(err);
71
+ this.set_keepalive_interval(1);
72
+ }
73
+
74
+ get is_reliable() {
75
+ return false;
76
+ }
77
+
78
+ /**
79
+ * Connect to the given endpoint.
80
+ *
81
+ * @param {String} options.host - hostname or ip
82
+ * @param {number} options.port - port number
83
+ * @param {number} [options.delay=10] - Delay in ms between individual packets.
84
+ * This can be a useful strategy when communicating with devices which
85
+ * cannot handle high packet rates.
86
+ * @param {number} [options.retry_interval=250] - Delay in ms after which a
87
+ * command should be automatically re-sent if no response has been
88
+ * received, yet.
89
+ * @param {number} [options.retry_count=3] - Number of times to retry sending
90
+ * commands. If no response has been received after all retries, the
91
+ * command will fail with an error.
92
+ * @param {number} [options.batch=128] - Maximum number of bytes to send
93
+ * in an individual UDP packet. Note that AES70 messages which are larger
94
+ * than this limit are sent anyway. This only limits how many seperate
95
+ * messages are batched into a single packet.
96
+ * @returns {Promise<UDPConnection>}
97
+ * The connection.
98
+ */
99
+ static async connect(udpApi, options) {
100
+ const socket = await udpApi.connect(
101
+ options.host,
102
+ options.port,
103
+ options.type
104
+ );
105
+
106
+ await waitForKeepalive(socket, options);
107
+
108
+ return new this(socket, options);
109
+ }
110
+
111
+ write(buf) {
112
+ this.q.push(buf);
113
+
114
+ if (this.tx_idle_time() >= this.delay) this._write_out();
115
+ else this._schedule_write_out();
116
+ }
117
+
118
+ flush() {
119
+ super.flush();
120
+ if (this.tx_idle_time() > this.delay) this._write_out();
121
+ }
122
+
123
+ cleanup() {
124
+ super.cleanup();
125
+ if (this.socket) {
126
+ this.socket.close();
127
+ this.socket = null;
128
+ }
129
+ if (this._write_out_id !== -1) {
130
+ clearTimeout(this._write_out_id);
131
+ this._write_out_id = -1;
132
+ }
133
+ if (this._retry_id !== -1) {
134
+ clearInterval(this._retry_id);
135
+ this._retry_id = -1;
136
+ }
137
+ }
138
+
139
+ _estimate_next_tx_time() {
140
+ return this._now() + (this.delay + 2) * this.q.length;
141
+ }
142
+
143
+ _write_out() {
144
+ if (!this.socket) return;
145
+ const q = this.q;
146
+
147
+ if (!q.length) return;
148
+
149
+ const buf = q.shift();
150
+
151
+ this.socket.send(buf);
152
+ super.write(buf);
153
+
154
+ if (q.length) this._schedule_write_out();
155
+ }
156
+
157
+ _schedule_write_out() {
158
+ const tx_idle_time = this.tx_idle_time();
159
+ const delay = this.delay;
160
+
161
+ if (tx_idle_time >= delay) {
162
+ this._write_out();
163
+ return;
164
+ }
165
+
166
+ // Already scheduled.
167
+ if (this._write_out_id !== -1) return;
168
+
169
+ this._write_out_id = setTimeout(
170
+ this._write_out_callback,
171
+ delay - tx_idle_time
172
+ );
173
+ }
174
+
175
+ _retryCommands() {
176
+ const now = this._now();
177
+ const retryTime = now - this.retry_interval;
178
+ // This is an estimate for how many commands we would manage to send
179
+ // off.
180
+ const max = 5 * (this.retry_interval / this.delay) - this.q.length;
181
+ const pendingCommands = this._pendingCommands;
182
+
183
+ const retries = [];
184
+ const failed = [];
185
+
186
+ for (const entry of pendingCommands) {
187
+ const [, pendingCommand] = entry;
188
+
189
+ // All later commands are newer than the cutoff.
190
+ if (pendingCommand.lastSent > retryTime) break;
191
+ if (pendingCommand.retries >= this.retry_count) {
192
+ failed.push(entry);
193
+ } else if (retries.length < max) {
194
+ retries.push(entry);
195
+ }
196
+ }
197
+
198
+ if (failed.length) {
199
+ const timeoutError = new Error('Timeout.');
200
+
201
+ failed.forEach(([handle, pendingCommand]) => {
202
+ pendingCommands.delete(handle);
203
+ pendingCommand.reject(timeoutError);
204
+ });
205
+ }
206
+
207
+ retries.forEach(([handle, pendingCommand]) => {
208
+ pendingCommands.delete(handle);
209
+ pendingCommands.set(handle, pendingCommand);
210
+ this.send(pendingCommand.command);
211
+ pendingCommand.lastSent = now;
212
+ pendingCommand.retries++;
213
+ });
214
+ }
215
+ }
@@ -1,6 +1,6 @@
1
1
  import { IConnectionOptions, Connection } from '../connection';
2
2
 
3
- export type IClientConnectionOptions = IConnectionOptions
3
+ export type IClientConnectionOptions = IConnectionOptions;
4
4
 
5
5
  /**
6
6
  * A generic base class for all client connections.
@@ -0,0 +1,140 @@
1
+ /* eslint-env node */
2
+
3
+ import { createSocket } from 'dgram';
4
+ import { isIPv4, isIPv6 } from 'net';
5
+ import { lookup } from 'dns';
6
+
7
+ function lookup_address(host) {
8
+ if (isIPv4(host)) return Promise.resolve(host);
9
+
10
+ return new Promise((resolve, reject) => {
11
+ lookup(host, { family: 4 }, (err, address) => {
12
+ if (err) reject(err);
13
+ else resolve(address);
14
+ });
15
+ });
16
+ }
17
+
18
+ export class NodeUDP {
19
+ get onmessage() {
20
+ return this._onmessage;
21
+ }
22
+
23
+ set onmessage(cb) {
24
+ if (this._onmessage && cb)
25
+ throw new Error('Cannot install more than one message callback.');
26
+
27
+ this._onmessage = cb;
28
+ this._notifyMessage();
29
+ }
30
+
31
+ get onerror() {
32
+ return this._onerror;
33
+ }
34
+
35
+ set onerror(cb) {
36
+ if (this._onerror && cb)
37
+ throw new Error('Cannot install more than one error callback.');
38
+
39
+ this._onerror = cb;
40
+ this._notifyError();
41
+ }
42
+
43
+ _notifyMessage() {
44
+ const onmessage = this.onmessage;
45
+
46
+ if (!onmessage) return;
47
+
48
+ const inbuf = this._inbuf;
49
+
50
+ if (!inbuf.length) return;
51
+
52
+ this._inbuf = [];
53
+
54
+ for (let i = 0; i < inbuf.length; i++) {
55
+ onmessage(inbuf[i].buffer);
56
+ }
57
+ }
58
+
59
+ _notifyError() {
60
+ const onerror = this.onerror;
61
+
62
+ if (!onerror) return;
63
+
64
+ const error = this._error;
65
+
66
+ if (!error) return;
67
+ this._error = null;
68
+
69
+ onerror(error);
70
+ }
71
+
72
+ send(buf) {
73
+ this.socket.send(Buffer.from(buf));
74
+ }
75
+
76
+ receiveMessage(timeout) {
77
+ return new Promise((resolve, reject) => {
78
+ if (this._error) {
79
+ reject(this._error);
80
+ } else if (this._inbuf.length) {
81
+ resolve(this._inbuf.shift());
82
+ } else {
83
+ this.onmessage = (msg) => {
84
+ this.onmessage = null;
85
+ this.onerror = null;
86
+ resolve(msg);
87
+ };
88
+ this.onerror = (err) => {
89
+ this.onmessage = null;
90
+ this.onerror = null;
91
+ reject(err);
92
+ };
93
+ }
94
+ });
95
+ }
96
+
97
+ close() {
98
+ this.socket.close();
99
+ this.socket = null;
100
+ }
101
+
102
+ constructor(socket) {
103
+ this._inbuf = [];
104
+ this._onmessage = null;
105
+ this._onerror = null;
106
+ this.socket = socket;
107
+ socket.on('message', (msg, rinfo) => {
108
+ this._inbuf.push(msg);
109
+ this._notifyMessage();
110
+ });
111
+ socket.on('error', (err) => {
112
+ this._error = err;
113
+ this._notifyError(err);
114
+ });
115
+ }
116
+
117
+ static connect(host, port, type) {
118
+ return lookup_address(host).then((ip) => {
119
+ return new Promise((resolve, reject) => {
120
+ const socket = createSocket(type || 'udp4');
121
+ const onerror = function (ev) {
122
+ reject(ev);
123
+ };
124
+ socket.on('error', onerror);
125
+ socket.bind(
126
+ {
127
+ exclusive: true,
128
+ },
129
+ () => {
130
+ socket.on('connect', () => {
131
+ resolve(new this(socket));
132
+ socket.removeListener('error', onerror);
133
+ });
134
+ socket.connect(port, host);
135
+ }
136
+ );
137
+ });
138
+ });
139
+ }
140
+ }
@@ -12,7 +12,7 @@ import { error } from '../log.js';
12
12
  export class PropertyEvent extends BaseEvent {
13
13
  constructor(object, id, propertyType) {
14
14
  super(object, id, propertyType);
15
- this.callback = (id, dataView, changeType) => {
15
+ this.callback = ([id, dataView, changeType]) => {
16
16
  if (
17
17
  id.DefLevel !== this.id.DefLevel ||
18
18
  id.PropertyIndex !== this.id.PropertyIndex
@@ -1,284 +1,19 @@
1
1
  /* eslint-env node */
2
2
 
3
- import { createSocket } from 'dgram';
4
- import { Buffer } from 'buffer';
3
+ import { NodeUDP } from './node_udp.js';
5
4
  import { performance } from 'perf_hooks';
6
- import { encodeMessage } from '../OCP1/encode_message.js';
7
- import { decodeMessage } from '../OCP1/decode_message.js';
8
- import { KeepAlive } from '../OCP1/keepalive.js';
9
-
10
- import { lookup } from 'dns';
11
-
12
- import { ClientConnection } from './client_connection.js';
13
-
14
- function delay(n) {
15
- return new Promise((resolve) => setTimeout(resolve, n));
16
- }
17
-
18
- async function waitForKeepalive(socket, options) {
19
- const waiter = new Promise((resolve, reject) => {
20
- let onMessage;
21
-
22
- onMessage = (data, rinfo) => {
23
- const pdus = [];
24
- let pos = 0;
25
-
26
- pos = decodeMessage(new DataView(data.buffer), 0, pdus);
27
-
28
- if (pdus.length !== 1) throw new Error('Expected keepalive response.');
29
-
30
- socket.off('message', onMessage);
31
- socket.off('error', reject);
32
- resolve(true);
33
- };
34
-
35
- socket.on('message', onMessage);
36
- socket.on('error', reject);
37
- });
38
-
39
- const msg = Buffer.from(encodeMessage(new KeepAlive(1000)));
40
- const t = 5 * (options.retry_interval || 250);
41
-
42
- for (let i = 0; i < 3; i++) {
43
- socket.send(msg);
44
-
45
- if (await Promise.race([waiter, delay(t)])) return;
46
- }
47
-
48
- throw new Error('Failed to connect.');
49
- }
50
-
51
- function is_ip(host) {
52
- let tmp = host.split('.');
53
-
54
- if (tmp.length !== 4) return false;
55
-
56
- tmp = tmp.map(parseInt);
57
-
58
- return !tmp.some(function (v) {
59
- return v < 0 || v > 255;
60
- });
61
- }
62
-
63
- // TODO: handle IPv6
64
- function lookup_address(options) {
65
- const host = options.host;
66
- const port = parseInt(options.port);
67
-
68
- const o = { port: port };
69
-
70
- if (is_ip(host))
71
- return Promise.resolve(Object.assign({}, options, o, { address: host }));
72
-
73
- return new Promise(function (resolve, reject) {
74
- lookup(host, { family: 4 }, function (err, address) {
75
- if (err) reject(err);
76
- else resolve(Object.assign({}, options, o, { address: address }));
77
- });
78
- });
79
- }
5
+ import { AbstractUDPConnection } from './abstract_udp_connection.js';
80
6
 
81
7
  /**
82
8
  * :class:`ClientConnection` subclass which implements OCP.1 with UDP
83
9
  * transport.
84
10
  */
85
- export class UDPConnection extends ClientConnection {
86
- constructor(socket, options) {
87
- // allow us to batch 128 bytes max
88
- // Set this to a higher value, e.g. close to MTU
89
- // if you are sure that the device can handle it.
90
- if (!(options.batch >= 0)) options.batch = 128;
91
- super(options);
92
- this.socket = socket;
93
- this.delay = options.delay >= 0 ? options.delay : 5;
94
- this.retry_interval =
95
- options.retry_interval >= 0 ? options.retry_interval : 250;
96
- this.retry_count = options.retry_count >= 0 ? options.retry_count : 3;
97
- this._write_out_id = -1;
98
- this._write_out_callback = () => {
99
- this._write_out_id = -1;
100
- this._write_out();
101
- };
102
- this._retry_id =
103
- this.retry_interval > 0
104
- ? setInterval(() => this._retryCommands(), this.retry_interval)
105
- : -1;
106
- this.q = [];
107
- socket.on('message', (data, rinfo) => {
108
- try {
109
- this.read(data.buffer);
110
- } catch (err) {
111
- console.warn('Failed to parse incoming AES70 packet: %o', err);
112
- }
113
- if (this.inbuf !== null) this.close();
114
- });
115
- socket.on('error', (err) => this.error(err));
116
- this.set_keepalive_interval(1);
117
- }
118
-
119
- get is_reliable() {
120
- return false;
121
- }
122
-
123
- /**
124
- * Connect to the given endpoint.
125
- *
126
- * @param {String} options.host - hostname or ip
127
- * @param {number} options.port - port number
128
- * @param {number} [options.delay=10] - Delay in ms between individual packets.
129
- * This can be a useful strategy when communicating with devices which
130
- * cannot handle high packet rates.
131
- * @param {number} [options.retry_interval=250] - Delay in ms after which a
132
- * command should be automatically re-sent if no response has been
133
- * received, yet.
134
- * @param {number} [options.retry_count=3] - Number of times to retry sending
135
- * commands. If no response has been received after all retries, the
136
- * command will fail with an error.
137
- * @param {number} [options.batch=128] - Maximum number of bytes to send
138
- * in an individual UDP packet. Note that AES70 messages which are larger
139
- * than this limit are sent anyway. This only limits how many seperate
140
- * messages are batched into a single packet.
141
- * @returns {Promise<UDPConnection>}
142
- * The connection.
143
- */
144
- static connect(options) {
145
- return lookup_address(options).then((options) => {
146
- return new Promise((resolve, reject) => {
147
- const socket = createSocket(options.type || 'udp4');
148
- const onerror = function (ev) {
149
- reject(ev);
150
- };
151
- socket.on('error', onerror);
152
- socket.bind(
153
- {
154
- exclusive: true,
155
- },
156
- () => {
157
- socket.on('connect', async () => {
158
- try {
159
- await waitForKeepalive(socket, options);
160
-
161
- socket.removeListener('error', onerror);
162
-
163
- const connection = new this(socket, options);
164
- resolve(connection);
165
- } catch (err) {
166
- reject(err);
167
- }
168
- });
169
- socket.connect(options.port, options.host);
170
- }
171
- );
172
- });
173
- });
174
- }
175
-
176
- write(buf) {
177
- this.q.push(buf);
178
-
179
- if (this.tx_idle_time() >= this.delay) this._write_out();
180
- else this._schedule_write_out();
181
- }
182
-
183
- flush() {
184
- super.flush();
185
- if (this.tx_idle_time() > this.delay) this._write_out();
186
- }
187
-
188
- cleanup() {
189
- super.cleanup();
190
- if (this.socket) {
191
- this.socket.close();
192
- this.socket = null;
193
- }
194
- if (this._write_out_id !== -1) {
195
- clearTimeout(this._write_out_id);
196
- this._write_out_id = -1;
197
- }
198
- if (this._retry_id !== -1) {
199
- clearInterval(this._retry_id);
200
- this._retry_id = -1;
201
- }
202
- }
203
-
11
+ export class UDPConnection extends AbstractUDPConnection {
204
12
  _now() {
205
13
  return performance.now();
206
14
  }
207
15
 
208
- _estimate_next_tx_time() {
209
- return this._now() + (this.delay + 2) * this.q.length;
210
- }
211
-
212
- _write_out() {
213
- if (!this.socket) return;
214
- const q = this.q;
215
-
216
- if (!q.length) return;
217
-
218
- const buf = q.shift();
219
-
220
- this.socket.send(Buffer.from(buf));
221
- super.write(buf);
222
-
223
- if (q.length) this._schedule_write_out();
224
- }
225
-
226
- _schedule_write_out() {
227
- const tx_idle_time = this.tx_idle_time();
228
- const delay = this.delay;
229
-
230
- if (tx_idle_time >= delay) {
231
- this._write_out();
232
- return;
233
- }
234
-
235
- // Already scheduled.
236
- if (this._write_out_id !== -1) return;
237
-
238
- this._write_out_id = setTimeout(
239
- this._write_out_callback,
240
- delay - tx_idle_time
241
- );
242
- }
243
-
244
- _retryCommands() {
245
- const now = this._now();
246
- const retryTime = now - this.retry_interval;
247
- // This is an estimate for how many commands we would manage to send
248
- // off.
249
- const max = 5 * (this.retry_interval / this.delay) - this.q.length;
250
- const pendingCommands = this._pendingCommands;
251
-
252
- const retries = [];
253
- const failed = [];
254
-
255
- for (const entry of pendingCommands) {
256
- const [, pendingCommand] = entry;
257
-
258
- // All later commands are newer than the cutoff.
259
- if (pendingCommand.lastSent > retryTime) break;
260
- if (pendingCommand.retries >= this.retry_count) {
261
- failed.push(entry);
262
- } else if (retries.length < max) {
263
- retries.push(entry);
264
- }
265
- }
266
-
267
- if (failed.length) {
268
- const timeoutError = new Error('Timeout.');
269
-
270
- failed.forEach(([handle, pendingCommand]) => {
271
- pendingCommands.delete(handle);
272
- pendingCommand.reject(timeoutError);
273
- });
274
- }
275
-
276
- retries.forEach(([handle, pendingCommand]) => {
277
- pendingCommands.delete(handle);
278
- pendingCommands.set(handle, pendingCommand);
279
- this.send(pendingCommand.command);
280
- pendingCommand.lastSent = now;
281
- pendingCommand.retries++;
282
- });
16
+ static connect(options) {
17
+ return AbstractUDPConnection.connect.call(this, NodeUDP, options);
283
18
  }
284
19
  }
@@ -16,6 +16,7 @@ import { define_custom_class } from './controller/define_custom_class.js';
16
16
  import * as RemoteControlClasses from './controller/ControlClasses.js';
17
17
  import * as Types from './types.js';
18
18
  import { WebSocketConnection } from './controller/websocket_connection.js';
19
+ import { AbstractUDPConnection } from './controller/abstract_udp_connection.js';
19
20
 
20
21
  const controller = {
21
22
  Connection: ClientConnection,
@@ -43,4 +44,5 @@ export {
43
44
  warn,
44
45
  WebSocketConnection,
45
46
  RemoteControlClasses,
47
+ AbstractUDPConnection,
46
48
  };
package/src/index.js CHANGED
@@ -18,6 +18,7 @@ import * as Types from './types.js';
18
18
  import { WebSocketConnection } from './controller/websocket_connection_node.js';
19
19
  import { TCPConnection } from './controller/tcp_connection.js';
20
20
  import { UDPConnection } from './controller/udp_connection.js';
21
+ import { AbstractUDPConnection } from './controller/abstract_udp_connection.js';
21
22
 
22
23
  export const controller = {
23
24
  Connection: ClientConnection,
@@ -47,4 +48,5 @@ export {
47
48
  WebSocketConnection,
48
49
  TCPConnection,
49
50
  UDPConnection,
51
+ AbstractUDPConnection,
50
52
  };
@@ -1,10 +1,9 @@
1
1
  /*
2
2
  * This file has been generated.
3
3
  */
4
-
5
4
  import {
6
- OcaObjectIdentification,
7
5
  IOcaObjectIdentification,
6
+ OcaObjectIdentification,
8
7
  } from './OcaObjectIdentification';
9
8
 
10
9
  export declare interface IOcaBlockMember {