@willieee802/zigbee-herdsman 0.15.0 → 0.15.2

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 (347) hide show
  1. package/dist/adapter/adapter.d.ts +61 -61
  2. package/dist/adapter/adapter.d.ts.map +1 -1
  3. package/dist/adapter/adapter.js +146 -100
  4. package/dist/adapter/adapter.js.map +1 -1
  5. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +68 -68
  6. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  7. package/dist/adapter/deconz/adapter/deconzAdapter.js +1060 -1063
  8. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -1
  9. package/dist/adapter/deconz/adapter/index.d.ts +2 -2
  10. package/dist/adapter/deconz/adapter/index.js +10 -10
  11. package/dist/adapter/deconz/driver/constants.d.ts +104 -104
  12. package/dist/adapter/deconz/driver/constants.js +55 -55
  13. package/dist/adapter/deconz/driver/driver.d.ts +81 -81
  14. package/dist/adapter/deconz/driver/driver.js +732 -732
  15. package/dist/adapter/deconz/driver/frame.d.ts +6 -6
  16. package/dist/adapter/deconz/driver/frame.js +13 -13
  17. package/dist/adapter/deconz/driver/frameParser.d.ts +2 -2
  18. package/dist/adapter/deconz/driver/frameParser.js +443 -443
  19. package/dist/adapter/deconz/driver/parser.d.ts +12 -12
  20. package/dist/adapter/deconz/driver/parser.js +61 -61
  21. package/dist/adapter/deconz/driver/writer.d.ts +8 -8
  22. package/dist/adapter/deconz/driver/writer.js +44 -44
  23. package/dist/adapter/events.d.ts +47 -47
  24. package/dist/adapter/events.js +14 -14
  25. package/dist/adapter/ezsp/adapter/backup.d.ts +9 -9
  26. package/dist/adapter/ezsp/adapter/backup.js +53 -53
  27. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +59 -59
  28. package/dist/adapter/ezsp/adapter/ezspAdapter.js +585 -585
  29. package/dist/adapter/ezsp/adapter/index.d.ts +2 -2
  30. package/dist/adapter/ezsp/adapter/index.js +10 -10
  31. package/dist/adapter/ezsp/driver/commands.d.ts +36 -34
  32. package/dist/adapter/ezsp/driver/commands.d.ts.map +1 -1
  33. package/dist/adapter/ezsp/driver/commands.js +2359 -2357
  34. package/dist/adapter/ezsp/driver/commands.js.map +1 -1
  35. package/dist/adapter/ezsp/driver/consts.d.ts +10 -10
  36. package/dist/adapter/ezsp/driver/consts.js +13 -13
  37. package/dist/adapter/ezsp/driver/driver.d.ts +103 -103
  38. package/dist/adapter/ezsp/driver/driver.js +639 -639
  39. package/dist/adapter/ezsp/driver/driver.js.map +1 -1
  40. package/dist/adapter/ezsp/driver/ezsp.d.ts +96 -96
  41. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -1
  42. package/dist/adapter/ezsp/driver/ezsp.js +586 -577
  43. package/dist/adapter/ezsp/driver/ezsp.js.map +1 -1
  44. package/dist/adapter/ezsp/driver/index.d.ts +3 -3
  45. package/dist/adapter/ezsp/driver/index.js +8 -8
  46. package/dist/adapter/ezsp/driver/multicast.d.ts +12 -12
  47. package/dist/adapter/ezsp/driver/multicast.js +74 -74
  48. package/dist/adapter/ezsp/driver/parser.d.ts +12 -12
  49. package/dist/adapter/ezsp/driver/parser.js +111 -111
  50. package/dist/adapter/ezsp/driver/types/basic.d.ts +62 -62
  51. package/dist/adapter/ezsp/driver/types/basic.js +208 -208
  52. package/dist/adapter/ezsp/driver/types/basic.js.map +1 -1
  53. package/dist/adapter/ezsp/driver/types/index.d.ts +9 -9
  54. package/dist/adapter/ezsp/driver/types/index.js +133 -133
  55. package/dist/adapter/ezsp/driver/types/named.d.ts +697 -697
  56. package/dist/adapter/ezsp/driver/types/named.js +1726 -1726
  57. package/dist/adapter/ezsp/driver/types/named.js.map +1 -1
  58. package/dist/adapter/ezsp/driver/types/struct.d.ts +251 -251
  59. package/dist/adapter/ezsp/driver/types/struct.js +708 -708
  60. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
  61. package/dist/adapter/ezsp/driver/uart.d.ts +44 -44
  62. package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -1
  63. package/dist/adapter/ezsp/driver/uart.js +368 -366
  64. package/dist/adapter/ezsp/driver/uart.js.map +1 -1
  65. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +2 -2
  66. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +55 -55
  67. package/dist/adapter/ezsp/driver/utils/index.d.ts +18 -18
  68. package/dist/adapter/ezsp/driver/utils/index.js +67 -67
  69. package/dist/adapter/ezsp/driver/writer.d.ts +13 -13
  70. package/dist/adapter/ezsp/driver/writer.js +88 -88
  71. package/dist/adapter/index.d.ts +4 -4
  72. package/dist/adapter/index.js +35 -35
  73. package/dist/adapter/serialPort.d.ts +8 -8
  74. package/dist/adapter/serialPort.js +22 -22
  75. package/dist/adapter/serialPort.js.map +1 -1
  76. package/dist/adapter/serialPortUtils.d.ts +12 -12
  77. package/dist/adapter/serialPortUtils.js +18 -18
  78. package/dist/adapter/socketPortUtils.d.ts +10 -10
  79. package/dist/adapter/socketPortUtils.js +16 -16
  80. package/dist/adapter/tstype.d.ts +85 -85
  81. package/dist/adapter/tstype.js +2 -2
  82. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +62 -62
  83. package/dist/adapter/z-stack/adapter/adapter-backup.js +441 -441
  84. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +150 -150
  85. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +258 -258
  86. package/dist/adapter/z-stack/adapter/endpoints.d.ts +11 -11
  87. package/dist/adapter/z-stack/adapter/endpoints.js +73 -73
  88. package/dist/adapter/z-stack/adapter/index.d.ts +2 -2
  89. package/dist/adapter/z-stack/adapter/index.js +8 -8
  90. package/dist/adapter/z-stack/adapter/manager.d.ts +86 -86
  91. package/dist/adapter/z-stack/adapter/manager.js +476 -476
  92. package/dist/adapter/z-stack/adapter/tstype.d.ts +6 -6
  93. package/dist/adapter/z-stack/adapter/tstype.js +10 -10
  94. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +81 -81
  95. package/dist/adapter/z-stack/adapter/zStackAdapter.js +868 -868
  96. package/dist/adapter/z-stack/constants/af.d.ts +23 -23
  97. package/dist/adapter/z-stack/constants/af.js +27 -27
  98. package/dist/adapter/z-stack/constants/common.d.ts +278 -278
  99. package/dist/adapter/z-stack/constants/common.js +289 -289
  100. package/dist/adapter/z-stack/constants/dbg.d.ts +22 -22
  101. package/dist/adapter/z-stack/constants/dbg.js +24 -24
  102. package/dist/adapter/z-stack/constants/index.d.ts +10 -10
  103. package/dist/adapter/z-stack/constants/index.js +47 -47
  104. package/dist/adapter/z-stack/constants/mac.d.ts +127 -127
  105. package/dist/adapter/z-stack/constants/mac.js +129 -129
  106. package/dist/adapter/z-stack/constants/sapi.d.ts +24 -24
  107. package/dist/adapter/z-stack/constants/sapi.js +26 -26
  108. package/dist/adapter/z-stack/constants/sys.d.ts +71 -71
  109. package/dist/adapter/z-stack/constants/sys.js +73 -73
  110. package/dist/adapter/z-stack/constants/util.d.ts +81 -81
  111. package/dist/adapter/z-stack/constants/util.js +83 -83
  112. package/dist/adapter/z-stack/constants/utils.d.ts +4 -4
  113. package/dist/adapter/z-stack/constants/utils.js +14 -14
  114. package/dist/adapter/z-stack/constants/zdo.d.ts +102 -102
  115. package/dist/adapter/z-stack/constants/zdo.js +104 -104
  116. package/dist/adapter/z-stack/models/index.d.ts +1 -1
  117. package/dist/adapter/z-stack/models/index.js +17 -17
  118. package/dist/adapter/z-stack/models/startup-options.d.ts +12 -12
  119. package/dist/adapter/z-stack/models/startup-options.js +2 -2
  120. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +23 -23
  121. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +45 -45
  122. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +10 -10
  123. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +22 -22
  124. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +10 -10
  125. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +21 -21
  126. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +10 -10
  127. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +23 -23
  128. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +10 -10
  129. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +24 -24
  130. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +10 -10
  131. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +23 -23
  132. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +8 -8
  133. package/dist/adapter/z-stack/structs/entries/channel-list.js +15 -15
  134. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +8 -8
  135. package/dist/adapter/z-stack/structs/entries/has-configured.js +16 -16
  136. package/dist/adapter/z-stack/structs/entries/index.d.ts +16 -16
  137. package/dist/adapter/z-stack/structs/entries/index.js +32 -32
  138. package/dist/adapter/z-stack/structs/entries/nib.d.ts +10 -10
  139. package/dist/adapter/z-stack/structs/entries/nib.js +68 -68
  140. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +10 -10
  141. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +18 -18
  142. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +8 -8
  143. package/dist/adapter/z-stack/structs/entries/nwk-key.js +15 -15
  144. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +8 -8
  145. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +15 -15
  146. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +13 -13
  147. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +23 -23
  148. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +10 -10
  149. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +22 -22
  150. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +20 -20
  151. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +36 -36
  152. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +10 -10
  153. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +24 -24
  154. package/dist/adapter/z-stack/structs/index.d.ts +4 -4
  155. package/dist/adapter/z-stack/structs/index.js +20 -20
  156. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +13 -13
  157. package/dist/adapter/z-stack/structs/serializable-memory-object.js +2 -2
  158. package/dist/adapter/z-stack/structs/struct.d.ts +99 -99
  159. package/dist/adapter/z-stack/structs/struct.js +295 -295
  160. package/dist/adapter/z-stack/structs/table.d.ts +94 -94
  161. package/dist/adapter/z-stack/structs/table.js +161 -161
  162. package/dist/adapter/z-stack/unpi/constants.d.ts +28 -28
  163. package/dist/adapter/z-stack/unpi/constants.js +41 -41
  164. package/dist/adapter/z-stack/unpi/frame.d.ts +16 -16
  165. package/dist/adapter/z-stack/unpi/frame.js +48 -48
  166. package/dist/adapter/z-stack/unpi/index.d.ts +5 -5
  167. package/dist/adapter/z-stack/unpi/index.js +37 -37
  168. package/dist/adapter/z-stack/unpi/parser.d.ts +10 -10
  169. package/dist/adapter/z-stack/unpi/parser.js +74 -74
  170. package/dist/adapter/z-stack/unpi/writer.d.ts +10 -10
  171. package/dist/adapter/z-stack/unpi/writer.js +44 -44
  172. package/dist/adapter/z-stack/utils/channel-list.d.ts +20 -20
  173. package/dist/adapter/z-stack/utils/channel-list.js +40 -40
  174. package/dist/adapter/z-stack/utils/index.d.ts +2 -2
  175. package/dist/adapter/z-stack/utils/index.js +18 -18
  176. package/dist/adapter/z-stack/utils/network-options.d.ts +8 -8
  177. package/dist/adapter/z-stack/utils/network-options.js +22 -22
  178. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +11 -11
  179. package/dist/adapter/z-stack/znp/buffaloZnp.js +113 -113
  180. package/dist/adapter/z-stack/znp/definition.d.ts +5 -5
  181. package/dist/adapter/z-stack/znp/definition.js +3050 -3050
  182. package/dist/adapter/z-stack/znp/index.d.ts +3 -3
  183. package/dist/adapter/z-stack/znp/index.js +10 -10
  184. package/dist/adapter/z-stack/znp/parameterType.d.ts +22 -22
  185. package/dist/adapter/z-stack/znp/parameterType.js +25 -25
  186. package/dist/adapter/z-stack/znp/tstype.d.ts +21 -21
  187. package/dist/adapter/z-stack/znp/tstype.js +2 -2
  188. package/dist/adapter/z-stack/znp/znp.d.ts +43 -43
  189. package/dist/adapter/z-stack/znp/znp.js +325 -325
  190. package/dist/adapter/z-stack/znp/zpiObject.d.ts +19 -19
  191. package/dist/adapter/z-stack/znp/zpiObject.js +96 -96
  192. package/dist/adapter/zigate/adapter/index.d.ts +2 -2
  193. package/dist/adapter/zigate/adapter/index.js +10 -10
  194. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +69 -69
  195. package/dist/adapter/zigate/adapter/zigateAdapter.js +678 -678
  196. package/dist/adapter/zigate/debug.d.ts +7 -7
  197. package/dist/adapter/zigate/debug.js +22 -22
  198. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +18 -18
  199. package/dist/adapter/zigate/driver/buffaloZiGate.js +139 -139
  200. package/dist/adapter/zigate/driver/commandType.d.ts +41 -41
  201. package/dist/adapter/zigate/driver/commandType.js +385 -385
  202. package/dist/adapter/zigate/driver/constants.d.ts +276 -276
  203. package/dist/adapter/zigate/driver/constants.js +371 -371
  204. package/dist/adapter/zigate/driver/frame.d.ts +26 -26
  205. package/dist/adapter/zigate/driver/frame.js +172 -172
  206. package/dist/adapter/zigate/driver/frame.js.map +1 -1
  207. package/dist/adapter/zigate/driver/messageType.d.ts +11 -11
  208. package/dist/adapter/zigate/driver/messageType.js +278 -278
  209. package/dist/adapter/zigate/driver/parameterType.d.ts +20 -20
  210. package/dist/adapter/zigate/driver/parameterType.js +23 -23
  211. package/dist/adapter/zigate/driver/ziGateObject.d.ts +23 -23
  212. package/dist/adapter/zigate/driver/ziGateObject.js +106 -106
  213. package/dist/adapter/zigate/driver/zigate.d.ts +49 -49
  214. package/dist/adapter/zigate/driver/zigate.js +303 -303
  215. package/dist/buffalo/buffalo.d.ts +50 -48
  216. package/dist/buffalo/buffalo.d.ts.map +1 -1
  217. package/dist/buffalo/buffalo.js +322 -307
  218. package/dist/buffalo/buffalo.js.map +1 -1
  219. package/dist/buffalo/index.d.ts +3 -3
  220. package/dist/buffalo/index.js +33 -33
  221. package/dist/buffalo/tstype.d.ts +8 -8
  222. package/dist/buffalo/tstype.js +2 -2
  223. package/dist/controller/controller.d.ts +110 -110
  224. package/dist/controller/controller.js +607 -607
  225. package/dist/controller/database.d.ts +18 -18
  226. package/dist/controller/database.js +93 -93
  227. package/dist/controller/events.d.ts +55 -55
  228. package/dist/controller/events.d.ts.map +1 -1
  229. package/dist/controller/events.js +101 -99
  230. package/dist/controller/events.js.map +1 -1
  231. package/dist/controller/greenPower.d.ts +12 -12
  232. package/dist/controller/greenPower.js +220 -220
  233. package/dist/controller/helpers/index.d.ts +2 -2
  234. package/dist/controller/helpers/index.js +28 -28
  235. package/dist/controller/helpers/request.d.ts +23 -0
  236. package/dist/controller/helpers/request.d.ts.map +1 -0
  237. package/dist/controller/helpers/request.js +72 -0
  238. package/dist/controller/helpers/request.js.map +1 -0
  239. package/dist/controller/helpers/zclFrameConverter.d.ts +7 -7
  240. package/dist/controller/helpers/zclFrameConverter.js +31 -31
  241. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +5 -5
  242. package/dist/controller/helpers/zclTransactionSequenceNumber.js +13 -13
  243. package/dist/controller/index.d.ts +5 -5
  244. package/dist/controller/index.js +8 -8
  245. package/dist/controller/logger-stub.d.ts +6 -6
  246. package/dist/controller/logger-stub.js +2 -2
  247. package/dist/controller/model/device.d.ts +132 -127
  248. package/dist/controller/model/device.d.ts.map +1 -1
  249. package/dist/controller/model/device.js +708 -681
  250. package/dist/controller/model/device.js.map +1 -1
  251. package/dist/controller/model/endpoint.d.ts +131 -128
  252. package/dist/controller/model/endpoint.d.ts.map +1 -1
  253. package/dist/controller/model/endpoint.js +817 -665
  254. package/dist/controller/model/endpoint.js.map +1 -1
  255. package/dist/controller/model/entity.d.ts +14 -14
  256. package/dist/controller/model/entity.js +26 -26
  257. package/dist/controller/model/group.d.ts +38 -39
  258. package/dist/controller/model/group.d.ts.map +1 -1
  259. package/dist/controller/model/group.js +221 -221
  260. package/dist/controller/model/group.js.map +1 -1
  261. package/dist/controller/model/index.d.ts +5 -5
  262. package/dist/controller/model/index.js +14 -14
  263. package/dist/controller/touchlink.d.ts +19 -19
  264. package/dist/controller/touchlink.js +157 -157
  265. package/dist/controller/tstype.d.ts +21 -20
  266. package/dist/controller/tstype.d.ts.map +1 -1
  267. package/dist/controller/tstype.js +9 -9
  268. package/dist/controller/tstype.js.map +1 -1
  269. package/dist/index.d.ts +3 -3
  270. package/dist/index.js +33 -33
  271. package/dist/models/backup-storage-legacy.d.ts +26 -26
  272. package/dist/models/backup-storage-legacy.js +2 -2
  273. package/dist/models/backup-storage-unified.d.ts +49 -49
  274. package/dist/models/backup-storage-unified.js +2 -2
  275. package/dist/models/backup.d.ts +37 -37
  276. package/dist/models/backup.js +2 -2
  277. package/dist/models/index.d.ts +4 -4
  278. package/dist/models/index.js +20 -20
  279. package/dist/models/network-options.d.ts +12 -12
  280. package/dist/models/network-options.js +2 -2
  281. package/dist/utils/assertString.d.ts +2 -2
  282. package/dist/utils/assertString.js +8 -8
  283. package/dist/utils/backup.d.ts +20 -20
  284. package/dist/utils/backup.js +187 -187
  285. package/dist/utils/equalsPartial.d.ts +2 -2
  286. package/dist/utils/equalsPartial.js +11 -11
  287. package/dist/utils/index.d.ts +9 -9
  288. package/dist/utils/index.js +45 -45
  289. package/dist/utils/isNumberArray.d.ts +2 -2
  290. package/dist/utils/isNumberArray.js +6 -6
  291. package/dist/utils/queue.d.ts +11 -11
  292. package/dist/utils/queue.js +50 -50
  293. package/dist/utils/realpathSync.d.ts +2 -2
  294. package/dist/utils/realpathSync.js +12 -12
  295. package/dist/utils/wait.d.ts +2 -2
  296. package/dist/utils/wait.js +8 -8
  297. package/dist/utils/waitress.d.ts +21 -21
  298. package/dist/utils/waitress.js +61 -61
  299. package/dist/zcl/buffaloZcl.d.ts +41 -41
  300. package/dist/zcl/buffaloZcl.js +591 -591
  301. package/dist/zcl/definition/buffaloZclDataType.d.ts +17 -17
  302. package/dist/zcl/definition/buffaloZclDataType.js +20 -20
  303. package/dist/zcl/definition/cluster.d.ts +29 -29
  304. package/dist/zcl/definition/cluster.d.ts.map +1 -1
  305. package/dist/zcl/definition/cluster.js +5335 -5215
  306. package/dist/zcl/definition/cluster.js.map +1 -1
  307. package/dist/zcl/definition/dataType.d.ts +59 -59
  308. package/dist/zcl/definition/dataType.d.ts.map +1 -1
  309. package/dist/zcl/definition/dataType.js +64 -64
  310. package/dist/zcl/definition/dataType.js.map +1 -1
  311. package/dist/zcl/definition/direction.d.ts +5 -5
  312. package/dist/zcl/definition/direction.js +8 -8
  313. package/dist/zcl/definition/endpointDeviceType.d.ts +4 -4
  314. package/dist/zcl/definition/endpointDeviceType.js +15 -15
  315. package/dist/zcl/definition/foundation.d.ts +11 -11
  316. package/dist/zcl/definition/foundation.js +167 -167
  317. package/dist/zcl/definition/frameControl.d.ts +10 -10
  318. package/dist/zcl/definition/frameControl.js +2 -2
  319. package/dist/zcl/definition/frameType.d.ts +5 -5
  320. package/dist/zcl/definition/frameType.js +8 -8
  321. package/dist/zcl/definition/index.d.ts +13 -13
  322. package/dist/zcl/definition/index.js +51 -51
  323. package/dist/zcl/definition/manufacturerCode.d.ts +1074 -1074
  324. package/dist/zcl/definition/manufacturerCode.js +1079 -1079
  325. package/dist/zcl/definition/powerSource.d.ts +4 -4
  326. package/dist/zcl/definition/powerSource.js +12 -12
  327. package/dist/zcl/definition/status.d.ts +38 -38
  328. package/dist/zcl/definition/status.js +41 -41
  329. package/dist/zcl/definition/tstype.d.ts +16 -16
  330. package/dist/zcl/definition/tstype.js +2 -2
  331. package/dist/zcl/index.d.ts +15 -15
  332. package/dist/zcl/index.js +55 -55
  333. package/dist/zcl/tstype.d.ts +56 -56
  334. package/dist/zcl/tstype.js +10 -10
  335. package/dist/zcl/utils.d.ts +6 -6
  336. package/dist/zcl/utils.js +165 -165
  337. package/dist/zcl/zclFrame.d.ts +45 -45
  338. package/dist/zcl/zclFrame.js +347 -347
  339. package/dist/zcl/zclStatusError.d.ts +5 -5
  340. package/dist/zcl/zclStatusError.js +13 -13
  341. package/package.json +1 -1
  342. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  343. package/.github/dependabot.yml +0 -6
  344. package/.github/workflows/ci.yml +0 -40
  345. package/.github/workflows/release_please.yml +0 -20
  346. package/.github/workflows/stale.yml +0 -20
  347. package/.github/workflows/update_deps.yml +0 -29
@@ -1,444 +1,444 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- /* istanbul ignore file */
7
- /* eslint-disable */
8
- const MIN_BUFFER_SIZE = 3;
9
- const littleEndian = true;
10
- const constants_1 = __importDefault(require("./constants"));
11
- const driver_1 = require("./driver");
12
- const debug_1 = __importDefault(require("debug"));
13
- const debug = (0, debug_1.default)('zigbee-herdsman:deconz:frameParser');
14
- var lastReceivedGpInd = { srcId: 0, commandId: 0, frameCounter: 0 };
15
- var events = require('events');
16
- var frameParserEvents = new events.EventEmitter();
17
- module.exports.frameParserEvents = frameParserEvents;
18
- function parseReadParameterResponse(view) {
19
- const parameterId = view.getUint8(7);
20
- switch (parameterId) {
21
- case constants_1.default.PARAM.Network.MAC:
22
- const mac = view.getBigUint64(8, littleEndian).toString(16);
23
- let result = mac;
24
- while (result.length < 16) {
25
- result = "0" + result;
26
- }
27
- result = "0x" + result;
28
- debug(`MAC: ${result}`);
29
- return result;
30
- case constants_1.default.PARAM.Network.PAN_ID:
31
- const panId = view.getUint16(8, littleEndian);
32
- debug('PANID: ' + panId.toString(16));
33
- return panId;
34
- case constants_1.default.PARAM.Network.NWK_ADDRESS:
35
- const nwkAddr = view.getUint16(8, littleEndian);
36
- debug('NWKADDR: ' + nwkAddr.toString(16));
37
- return nwkAddr;
38
- case constants_1.default.PARAM.Network.EXT_PAN_ID:
39
- const extPanId = view.getBigUint64(8, littleEndian).toString(16);
40
- let res = extPanId;
41
- while (res.length < 16) {
42
- res = "0" + res;
43
- }
44
- res = "0x" + res;
45
- debug(`EXT_PANID: ${res}`);
46
- return res;
47
- case constants_1.default.PARAM.Network.APS_EXT_PAN_ID:
48
- const apsExtPanId = view.getBigUint64(8, littleEndian).toString(16);
49
- let resAEPID = apsExtPanId;
50
- while (resAEPID.length < 16) {
51
- resAEPID = "0" + resAEPID;
52
- }
53
- resAEPID = "0x" + resAEPID;
54
- debug(`APS_EXT_PANID: ${resAEPID}`);
55
- return resAEPID;
56
- case constants_1.default.PARAM.Network.NETWORK_KEY:
57
- const networkKey1 = view.getBigUint64(9).toString(16);
58
- let res1 = networkKey1;
59
- while (res1.length < 16) {
60
- res1 = "0" + res1;
61
- }
62
- const networkKey2 = view.getBigUint64(17).toString(16);
63
- let res2 = networkKey2;
64
- while (res2.length < 16) {
65
- res2 = "0" + res2;
66
- }
67
- debug('NETWORK_KEY: hidden');
68
- return "0x" + res1 + res2;
69
- case constants_1.default.PARAM.Network.CHANNEL:
70
- const channel = view.getUint8(8);
71
- debug('CHANNEL: ' + channel);
72
- return channel;
73
- case constants_1.default.PARAM.Network.CHANNEL_MASK:
74
- const chMask = view.getUint32(8, littleEndian);
75
- debug('CHANNELMASK: ' + chMask.toString(16));
76
- return chMask;
77
- case constants_1.default.PARAM.Network.PERMIT_JOIN:
78
- const permitJoin = view.getUint8(8);
79
- debug('PERMIT_JOIN: ' + permitJoin);
80
- return permitJoin;
81
- case constants_1.default.PARAM.Network.WATCHDOG_TTL:
82
- const ttl = view.getUint32(8);
83
- debug('WATCHDOG_TTL: ' + ttl);
84
- return ttl;
85
- default:
86
- //throw new Error(`unknown parameter id ${parameterId}`);
87
- debug(`unknown parameter id ${parameterId}`);
88
- return null;
89
- }
90
- }
91
- function parseReadFirmwareResponse(view) {
92
- const fw = [view.getUint8(5), view.getUint8(6), view.getUint8(7), view.getUint8(8)];
93
- debug("read firmware version response - version: " + fw);
94
- return fw;
95
- }
96
- function parseDeviceStateResponse(view) {
97
- const flag = view.getUint8(5);
98
- debug("device state: " + flag.toString(2));
99
- frameParserEvents.emit('receivedDataNotification', flag);
100
- return flag;
101
- }
102
- function parseChangeNetworkStateResponse(view) {
103
- const status = view.getUint8(2);
104
- const state = view.getUint8(5);
105
- debug("change network state - status: " + status + " new state: " + state);
106
- return state;
107
- }
108
- function parseQuerySendDataStateResponse(view) {
109
- try {
110
- const response = {};
111
- let buf2, buf3;
112
- response.commandId = view.getUint8(0);
113
- response.seqNr = view.getUint8(1);
114
- response.status = view.getUint8(2);
115
- if (response.status !== 0) {
116
- if (response.status !== 5) {
117
- debug("DATA_CONFIRM RESPONSE - seqNr.: " + response.seqNr + " status: " + response.status);
118
- }
119
- return null;
120
- }
121
- response.frameLength = 7;
122
- response.payloadLength = view.getUint16(5, littleEndian);
123
- response.deviceState = view.getUint8(7);
124
- response.requestId = view.getUint8(8);
125
- response.destAddrMode = view.getUint8(9);
126
- let destAddr = "";
127
- if (response.destAddrMode === 0x03) {
128
- let res = view.getBigUint64(10, littleEndian).toString(16);
129
- while (res.length < 16) {
130
- res = "0" + res;
131
- }
132
- response.destAddr64 = res;
133
- buf2 = view.buffer.slice(18, view.buffer.byteLength);
134
- destAddr = response.destAddr64;
135
- }
136
- else {
137
- response.destAddr16 = view.getUint16(10, littleEndian);
138
- buf2 = view.buffer.slice(12, view.buffer.byteLength);
139
- destAddr = response.destAddr16.toString(16);
140
- }
141
- if (response.destAddrMode === 0x02 || response.destAddrMode === 0x03) {
142
- response.destEndpoint = view.getUint8(view.byteLength - 7);
143
- }
144
- response.srcEndpoint = view.getUint8(view.byteLength - 6);
145
- response.confirmStatus = view.getInt8(view.byteLength - 5);
146
- let newStatus = response.deviceState.toString(2);
147
- for (let l = 0; l <= (8 - newStatus.length); l++) {
148
- newStatus = "0" + newStatus;
149
- }
150
- // resolve send data request promise
151
- const i = driver_1.apsBusyQueue.findIndex((r) => (r.request && r.request.requestId === response.requestId));
152
- if (i < 0) {
153
- return;
154
- }
155
- clearTimeout(driver_1.enableRtsTimeout);
156
- (0, driver_1.enableRTS)(); // enable ReadyToSend because confirm received
157
- const req = driver_1.apsBusyQueue[i];
158
- // TODO timeout (at driver.ts)
159
- if (response.confirmStatus !== 0) {
160
- // reject if status is not SUCCESS
161
- //debug("REJECT APS_REQUEST - request id: " + response.requestId + " confirm status: " + response.confirmStatus);
162
- req.reject(response.confirmStatus);
163
- }
164
- else {
165
- //debug("RESOLVE APS_REQUEST - request id: " + response.requestId + " confirm status: " + response.confirmStatus);
166
- req.resolve(response.confirmStatus);
167
- }
168
- //remove from busyqueue
169
- driver_1.apsBusyQueue.splice(i, 1);
170
- debug("DATA_CONFIRM RESPONSE - destAddr: 0x" + destAddr + " request id: " + response.requestId + " confirm status: " + response.confirmStatus);
171
- frameParserEvents.emit('receivedDataNotification', response.deviceState);
172
- return response;
173
- }
174
- catch (error) {
175
- debug("DATA_CONFIRM RESPONSE - " + error);
176
- return null;
177
- }
178
- }
179
- function parseReadReceivedDataResponse(view) {
180
- // min 28 bytelength
181
- try {
182
- const response = {};
183
- let buf2, buf3;
184
- response.commandId = view.getUint8(0);
185
- response.seqNr = view.getUint8(1);
186
- response.status = view.getUint8(2);
187
- if (response.status != 0) {
188
- if (response.status !== 5) {
189
- debug("DATA_INDICATION RESPONSE - seqNr.: " + response.seqNr + " status: " + response.status);
190
- }
191
- return null;
192
- }
193
- response.frameLength = view.getUint16(3, littleEndian);
194
- response.payloadLength = view.getUint16(5, littleEndian);
195
- response.deviceState = view.getUint8(7);
196
- response.destAddrMode = view.getUint8(8);
197
- let destAddr = "";
198
- if (response.destAddrMode === 0x03) {
199
- let res = view.getBigUint64(9, littleEndian).toString(16);
200
- while (res.length < 16) {
201
- res = "0" + res;
202
- }
203
- response.destAddr64 = res;
204
- buf2 = view.buffer.slice(17, view.buffer.byteLength);
205
- destAddr = response.destAddr64;
206
- }
207
- else {
208
- response.destAddr16 = view.getUint16(9, littleEndian);
209
- buf2 = view.buffer.slice(11, view.buffer.byteLength);
210
- destAddr = response.destAddr16.toString(16);
211
- }
212
- view = new DataView(buf2);
213
- response.destEndpoint = view.getUint8(0);
214
- response.srcAddrMode = view.getUint8(1);
215
- let srcAddr = "";
216
- if (response.srcAddrMode === 0x02 || response.srcAddrMode === 0x04) {
217
- response.srcAddr16 = view.getUint16(2, littleEndian);
218
- buf3 = view.buffer.slice(4, view.buffer.byteLength);
219
- srcAddr = response.srcAddr16.toString(16);
220
- }
221
- if (response.srcAddrMode === 0x03 || response.srcAddrMode === 0x04) {
222
- let res = view.getBigUint64(2, littleEndian).toString(16);
223
- while (res.length < 16) {
224
- res = "0" + res;
225
- }
226
- response.srcAddr64 = res;
227
- buf3 = view.buffer.slice(10, view.buffer.byteLength);
228
- srcAddr = response.srcAddr64;
229
- }
230
- view = new DataView(buf3);
231
- response.srcEndpoint = view.getUint8(0);
232
- response.profileId = view.getUint16(1, littleEndian);
233
- response.clusterId = view.getUint16(3, littleEndian);
234
- response.asduLength = view.getUint16(5, littleEndian);
235
- let payload = [];
236
- let i = 0;
237
- for (let u = 7; u < (response.asduLength + 7); u++) {
238
- payload[i] = view.getUint8(u);
239
- i++;
240
- }
241
- response.asduPayload = payload;
242
- response.lqi = view.getUint8(view.byteLength - 8);
243
- response.rssi = view.getInt8(view.byteLength - 3);
244
- let newStatus = response.deviceState.toString(2);
245
- for (let l = 0; l <= (8 - newStatus.length); l++) {
246
- newStatus = "0" + newStatus;
247
- }
248
- debug("DATA_INDICATION RESPONSE - seqNr. " + response.seqNr + " srcAddr: 0x" + srcAddr + " destAddr: 0x" + destAddr + " profile id: 0x" + response.profileId.toString(16) + " cluster id: 0x" + response.clusterId.toString(16) + " lqi: " + response.lqi);
249
- debug("response payload: " + payload);
250
- frameParserEvents.emit('receivedDataPayload', response);
251
- frameParserEvents.emit('receivedDataNotification', response.deviceState);
252
- return response;
253
- }
254
- catch (error) {
255
- debug("DATA_INDICATION RESPONSE - " + error);
256
- return null;
257
- }
258
- }
259
- function parseEnqueueSendDataResponse(view) {
260
- try {
261
- const status = view.getUint8(2);
262
- const requestId = view.getUint8(8);
263
- const deviceState = view.getUint8(7);
264
- debug("DATA_REQUEST RESPONSE - request id: " + requestId + " status: " + status);
265
- frameParserEvents.emit('receivedDataNotification', deviceState);
266
- return deviceState;
267
- }
268
- catch (error) {
269
- debug("parseEnqueueSendDataResponse - " + error);
270
- return null;
271
- }
272
- }
273
- function parseWriteParameterResponse(view) {
274
- try {
275
- const parameterId = view.getUint8(7);
276
- debug(`write parameter response - parameter id: ${parameterId} - status: ${view.getUint8(2)}`);
277
- return parameterId;
278
- }
279
- catch (error) {
280
- debug("parseWriteParameterResponse - " + error);
281
- return null;
282
- }
283
- }
284
- function parseReceivedDataNotification(view) {
285
- try {
286
- const deviceState = view.getUint8(5);
287
- debug("DEVICE_STATE changed: " + deviceState.toString(2));
288
- frameParserEvents.emit('receivedDataNotification', deviceState);
289
- return deviceState;
290
- }
291
- catch (error) {
292
- debug("parseReceivedDataNotification - " + error);
293
- return null;
294
- }
295
- }
296
- function parseGreenPowerDataIndication(view) {
297
- try {
298
- const ind = {};
299
- ind.seqNr = view.getUint8(1);
300
- if (view.byteLength < 30) {
301
- debug("GP data notification");
302
- ind.id = 0x00; // 0 = notification, 4 = commissioning
303
- ind.rspId = 0x01; // 1 = pairing, 2 = commissioning
304
- ind.options = 0;
305
- view.getUint16(7, littleEndian); // frame ctrl field(7) ext.fcf(8)
306
- ind.srcId = view.getUint32(9, littleEndian);
307
- ind.frameCounter = view.getUint32(13, littleEndian);
308
- ind.commandId = view.getUint8(17);
309
- ind.commandFrameSize = view.byteLength - 18 - 6; // cut 18 from begin and 4 (sec mic) and 2 from end (cfc)
310
- let payload = [];
311
- let i = 0;
312
- for (let u = 18; u < (ind.commandFrameSize + 18); u++) {
313
- payload[i] = view.getUint8(u);
314
- i++;
315
- }
316
- ind.commandFrame = payload;
317
- }
318
- else {
319
- debug("GP commissioning notification");
320
- ind.id = 0x04; // 0 = notification, 4 = commissioning
321
- ind.rspId = 0x01; // 1 = pairing, 2 = commissioning
322
- ind.options = view.getUint16(14, littleEndian); // opt(14) ext.opt(15)
323
- ind.srcId = view.getUint32(8, littleEndian);
324
- ind.frameCounter = view.getUint32(36, littleEndian);
325
- ind.commandId = view.getUint8(12);
326
- ind.commandFrameSize = view.byteLength - 13 - 2; // cut 13 from begin and 2 from end (cfc)
327
- let payload = [];
328
- let i = 0;
329
- for (let u = 13; u < (ind.commandFrameSize + 13); u++) {
330
- payload[i] = view.getUint8(u);
331
- i++;
332
- }
333
- ind.commandFrame = payload;
334
- }
335
- if (!(lastReceivedGpInd.srcId === ind.srcId &&
336
- lastReceivedGpInd.commandId === ind.commandId &&
337
- lastReceivedGpInd.frameCounter === ind.frameCounter)) {
338
- lastReceivedGpInd.srcId = ind.srcId;
339
- lastReceivedGpInd.commandId = ind.commandId;
340
- lastReceivedGpInd.frameCounter = ind.frameCounter;
341
- //debug(`GP_DATA_INDICATION - src id: ${ind.srcId} cmd id: ${ind.commandId} frameCounter: ${ind.frameCounter}`);
342
- debug(`GP_DATA_INDICATION - src id: 0x${ind.srcId.toString(16)} cmd id: 0x${ind.commandId.toString(16)} frameCounter: 0x${ind.frameCounter.toString(16)}`);
343
- frameParserEvents.emit('receivedGreenPowerIndication', ind);
344
- }
345
- return ind;
346
- }
347
- catch (error) {
348
- debug("GREEN_POWER INDICATION - " + error);
349
- return null;
350
- }
351
- }
352
- function parseMacPollCommand(view) {
353
- //debug("Received command MAC_POLL");
354
- return 28;
355
- }
356
- function parseBeaconRequest(view) {
357
- debug("Received Beacon Request");
358
- return 31;
359
- }
360
- function parseUnknownCommand(view) {
361
- const id = view.getUint8(0);
362
- debug(`received unknown command - id ${id}`);
363
- return id;
364
- }
365
- function getParserForCommandId(id) {
366
- switch (id) {
367
- case constants_1.default.PARAM.FrameType.ReadParameter:
368
- return parseReadParameterResponse;
369
- case constants_1.default.PARAM.FrameType.WriteParameter:
370
- return parseWriteParameterResponse;
371
- case constants_1.default.PARAM.FrameType.ReadFirmwareVersion:
372
- return parseReadFirmwareResponse;
373
- case constants_1.default.PARAM.FrameType.ReadDeviceState:
374
- return parseDeviceStateResponse;
375
- case constants_1.default.PARAM.APS.DATA_INDICATION:
376
- return parseReadReceivedDataResponse;
377
- case constants_1.default.PARAM.APS.DATA_REQUEST:
378
- return parseEnqueueSendDataResponse;
379
- case constants_1.default.PARAM.APS.DATA_CONFIRM:
380
- return parseQuerySendDataStateResponse;
381
- case constants_1.default.PARAM.FrameType.DeviceStateChanged:
382
- return parseReceivedDataNotification;
383
- case constants_1.default.PARAM.NetworkState.CHANGE_NETWORK_STATE:
384
- return parseChangeNetworkStateResponse;
385
- case constants_1.default.PARAM.FrameType.GreenPowerDataInd:
386
- return parseGreenPowerDataIndication;
387
- case 28:
388
- return parseMacPollCommand;
389
- case 31:
390
- return parseBeaconRequest;
391
- default:
392
- return parseUnknownCommand;
393
- //throw new Error(`unknown command id ${id}`);
394
- }
395
- }
396
- async function processFrame(frame) {
397
- const [seqNumber, status, command, commandId] = await parseFrame(frame);
398
- //debug(`process frame with seq: ${seqNumber} status: ${status}`);
399
- let queue = driver_1.busyQueue;
400
- if (commandId === constants_1.default.PARAM.APS.DATA_INDICATION ||
401
- commandId === constants_1.default.PARAM.APS.DATA_REQUEST ||
402
- commandId === constants_1.default.PARAM.APS.DATA_CONFIRM) {
403
- queue = driver_1.apsBusyQueue;
404
- }
405
- const i = queue.findIndex((r) => r.seqNumber === seqNumber);
406
- if (i < 0) {
407
- return;
408
- }
409
- const req = queue[i];
410
- if (commandId === constants_1.default.PARAM.APS.DATA_REQUEST) {
411
- // if confirm is true resolve request only when data confirm arrives
412
- // TODO only return if a confirm was requested. if no confirm needed: go ahead
413
- //if (req.confirm === true) {
414
- return;
415
- //}
416
- }
417
- //remove from busyqueue
418
- queue.splice(i, 1);
419
- if (status !== 0) {
420
- // reject if status is not SUCCESS
421
- //debug("REJECT REQUEST");
422
- req.reject({ status });
423
- }
424
- else {
425
- //debug("RESOLVE REQUEST");
426
- req.resolve(command);
427
- }
428
- }
429
- function parseFrame(frame) {
430
- if (frame.length < MIN_BUFFER_SIZE) {
431
- debug("received frame size to small - discard frame");
432
- return [null, null, null, null];
433
- }
434
- const view = new DataView(frame.buffer);
435
- const commandId = view.getUint8(0);
436
- const seqNumber = view.getUint8(1);
437
- const status = view.getUint8(2);
438
- //const frameLength = view.getUint16(3, littleEndian);
439
- //const payloadLength = view.getUint16(5, littleEndian);
440
- const parser = getParserForCommandId(commandId);
441
- return [seqNumber, status, parser(view), commandId];
442
- }
443
- exports.default = processFrame;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /* istanbul ignore file */
7
+ /* eslint-disable */
8
+ const MIN_BUFFER_SIZE = 3;
9
+ const littleEndian = true;
10
+ const constants_1 = __importDefault(require("./constants"));
11
+ const driver_1 = require("./driver");
12
+ const debug_1 = __importDefault(require("debug"));
13
+ const debug = (0, debug_1.default)('zigbee-herdsman:deconz:frameParser');
14
+ var lastReceivedGpInd = { srcId: 0, commandId: 0, frameCounter: 0 };
15
+ var events = require('events');
16
+ var frameParserEvents = new events.EventEmitter();
17
+ module.exports.frameParserEvents = frameParserEvents;
18
+ function parseReadParameterResponse(view) {
19
+ const parameterId = view.getUint8(7);
20
+ switch (parameterId) {
21
+ case constants_1.default.PARAM.Network.MAC:
22
+ const mac = view.getBigUint64(8, littleEndian).toString(16);
23
+ let result = mac;
24
+ while (result.length < 16) {
25
+ result = "0" + result;
26
+ }
27
+ result = "0x" + result;
28
+ debug(`MAC: ${result}`);
29
+ return result;
30
+ case constants_1.default.PARAM.Network.PAN_ID:
31
+ const panId = view.getUint16(8, littleEndian);
32
+ debug('PANID: ' + panId.toString(16));
33
+ return panId;
34
+ case constants_1.default.PARAM.Network.NWK_ADDRESS:
35
+ const nwkAddr = view.getUint16(8, littleEndian);
36
+ debug('NWKADDR: ' + nwkAddr.toString(16));
37
+ return nwkAddr;
38
+ case constants_1.default.PARAM.Network.EXT_PAN_ID:
39
+ const extPanId = view.getBigUint64(8, littleEndian).toString(16);
40
+ let res = extPanId;
41
+ while (res.length < 16) {
42
+ res = "0" + res;
43
+ }
44
+ res = "0x" + res;
45
+ debug(`EXT_PANID: ${res}`);
46
+ return res;
47
+ case constants_1.default.PARAM.Network.APS_EXT_PAN_ID:
48
+ const apsExtPanId = view.getBigUint64(8, littleEndian).toString(16);
49
+ let resAEPID = apsExtPanId;
50
+ while (resAEPID.length < 16) {
51
+ resAEPID = "0" + resAEPID;
52
+ }
53
+ resAEPID = "0x" + resAEPID;
54
+ debug(`APS_EXT_PANID: ${resAEPID}`);
55
+ return resAEPID;
56
+ case constants_1.default.PARAM.Network.NETWORK_KEY:
57
+ const networkKey1 = view.getBigUint64(9).toString(16);
58
+ let res1 = networkKey1;
59
+ while (res1.length < 16) {
60
+ res1 = "0" + res1;
61
+ }
62
+ const networkKey2 = view.getBigUint64(17).toString(16);
63
+ let res2 = networkKey2;
64
+ while (res2.length < 16) {
65
+ res2 = "0" + res2;
66
+ }
67
+ debug('NETWORK_KEY: hidden');
68
+ return "0x" + res1 + res2;
69
+ case constants_1.default.PARAM.Network.CHANNEL:
70
+ const channel = view.getUint8(8);
71
+ debug('CHANNEL: ' + channel);
72
+ return channel;
73
+ case constants_1.default.PARAM.Network.CHANNEL_MASK:
74
+ const chMask = view.getUint32(8, littleEndian);
75
+ debug('CHANNELMASK: ' + chMask.toString(16));
76
+ return chMask;
77
+ case constants_1.default.PARAM.Network.PERMIT_JOIN:
78
+ const permitJoin = view.getUint8(8);
79
+ debug('PERMIT_JOIN: ' + permitJoin);
80
+ return permitJoin;
81
+ case constants_1.default.PARAM.Network.WATCHDOG_TTL:
82
+ const ttl = view.getUint32(8);
83
+ debug('WATCHDOG_TTL: ' + ttl);
84
+ return ttl;
85
+ default:
86
+ //throw new Error(`unknown parameter id ${parameterId}`);
87
+ debug(`unknown parameter id ${parameterId}`);
88
+ return null;
89
+ }
90
+ }
91
+ function parseReadFirmwareResponse(view) {
92
+ const fw = [view.getUint8(5), view.getUint8(6), view.getUint8(7), view.getUint8(8)];
93
+ debug("read firmware version response - version: " + fw);
94
+ return fw;
95
+ }
96
+ function parseDeviceStateResponse(view) {
97
+ const flag = view.getUint8(5);
98
+ debug("device state: " + flag.toString(2));
99
+ frameParserEvents.emit('receivedDataNotification', flag);
100
+ return flag;
101
+ }
102
+ function parseChangeNetworkStateResponse(view) {
103
+ const status = view.getUint8(2);
104
+ const state = view.getUint8(5);
105
+ debug("change network state - status: " + status + " new state: " + state);
106
+ return state;
107
+ }
108
+ function parseQuerySendDataStateResponse(view) {
109
+ try {
110
+ const response = {};
111
+ let buf2, buf3;
112
+ response.commandId = view.getUint8(0);
113
+ response.seqNr = view.getUint8(1);
114
+ response.status = view.getUint8(2);
115
+ if (response.status !== 0) {
116
+ if (response.status !== 5) {
117
+ debug("DATA_CONFIRM RESPONSE - seqNr.: " + response.seqNr + " status: " + response.status);
118
+ }
119
+ return null;
120
+ }
121
+ response.frameLength = 7;
122
+ response.payloadLength = view.getUint16(5, littleEndian);
123
+ response.deviceState = view.getUint8(7);
124
+ response.requestId = view.getUint8(8);
125
+ response.destAddrMode = view.getUint8(9);
126
+ let destAddr = "";
127
+ if (response.destAddrMode === 0x03) {
128
+ let res = view.getBigUint64(10, littleEndian).toString(16);
129
+ while (res.length < 16) {
130
+ res = "0" + res;
131
+ }
132
+ response.destAddr64 = res;
133
+ buf2 = view.buffer.slice(18, view.buffer.byteLength);
134
+ destAddr = response.destAddr64;
135
+ }
136
+ else {
137
+ response.destAddr16 = view.getUint16(10, littleEndian);
138
+ buf2 = view.buffer.slice(12, view.buffer.byteLength);
139
+ destAddr = response.destAddr16.toString(16);
140
+ }
141
+ if (response.destAddrMode === 0x02 || response.destAddrMode === 0x03) {
142
+ response.destEndpoint = view.getUint8(view.byteLength - 7);
143
+ }
144
+ response.srcEndpoint = view.getUint8(view.byteLength - 6);
145
+ response.confirmStatus = view.getInt8(view.byteLength - 5);
146
+ let newStatus = response.deviceState.toString(2);
147
+ for (let l = 0; l <= (8 - newStatus.length); l++) {
148
+ newStatus = "0" + newStatus;
149
+ }
150
+ // resolve send data request promise
151
+ const i = driver_1.apsBusyQueue.findIndex((r) => (r.request && r.request.requestId === response.requestId));
152
+ if (i < 0) {
153
+ return;
154
+ }
155
+ clearTimeout(driver_1.enableRtsTimeout);
156
+ (0, driver_1.enableRTS)(); // enable ReadyToSend because confirm received
157
+ const req = driver_1.apsBusyQueue[i];
158
+ // TODO timeout (at driver.ts)
159
+ if (response.confirmStatus !== 0) {
160
+ // reject if status is not SUCCESS
161
+ //debug("REJECT APS_REQUEST - request id: " + response.requestId + " confirm status: " + response.confirmStatus);
162
+ req.reject(response.confirmStatus);
163
+ }
164
+ else {
165
+ //debug("RESOLVE APS_REQUEST - request id: " + response.requestId + " confirm status: " + response.confirmStatus);
166
+ req.resolve(response.confirmStatus);
167
+ }
168
+ //remove from busyqueue
169
+ driver_1.apsBusyQueue.splice(i, 1);
170
+ debug("DATA_CONFIRM RESPONSE - destAddr: 0x" + destAddr + " request id: " + response.requestId + " confirm status: " + response.confirmStatus);
171
+ frameParserEvents.emit('receivedDataNotification', response.deviceState);
172
+ return response;
173
+ }
174
+ catch (error) {
175
+ debug("DATA_CONFIRM RESPONSE - " + error);
176
+ return null;
177
+ }
178
+ }
179
+ function parseReadReceivedDataResponse(view) {
180
+ // min 28 bytelength
181
+ try {
182
+ const response = {};
183
+ let buf2, buf3;
184
+ response.commandId = view.getUint8(0);
185
+ response.seqNr = view.getUint8(1);
186
+ response.status = view.getUint8(2);
187
+ if (response.status != 0) {
188
+ if (response.status !== 5) {
189
+ debug("DATA_INDICATION RESPONSE - seqNr.: " + response.seqNr + " status: " + response.status);
190
+ }
191
+ return null;
192
+ }
193
+ response.frameLength = view.getUint16(3, littleEndian);
194
+ response.payloadLength = view.getUint16(5, littleEndian);
195
+ response.deviceState = view.getUint8(7);
196
+ response.destAddrMode = view.getUint8(8);
197
+ let destAddr = "";
198
+ if (response.destAddrMode === 0x03) {
199
+ let res = view.getBigUint64(9, littleEndian).toString(16);
200
+ while (res.length < 16) {
201
+ res = "0" + res;
202
+ }
203
+ response.destAddr64 = res;
204
+ buf2 = view.buffer.slice(17, view.buffer.byteLength);
205
+ destAddr = response.destAddr64;
206
+ }
207
+ else {
208
+ response.destAddr16 = view.getUint16(9, littleEndian);
209
+ buf2 = view.buffer.slice(11, view.buffer.byteLength);
210
+ destAddr = response.destAddr16.toString(16);
211
+ }
212
+ view = new DataView(buf2);
213
+ response.destEndpoint = view.getUint8(0);
214
+ response.srcAddrMode = view.getUint8(1);
215
+ let srcAddr = "";
216
+ if (response.srcAddrMode === 0x02 || response.srcAddrMode === 0x04) {
217
+ response.srcAddr16 = view.getUint16(2, littleEndian);
218
+ buf3 = view.buffer.slice(4, view.buffer.byteLength);
219
+ srcAddr = response.srcAddr16.toString(16);
220
+ }
221
+ if (response.srcAddrMode === 0x03 || response.srcAddrMode === 0x04) {
222
+ let res = view.getBigUint64(2, littleEndian).toString(16);
223
+ while (res.length < 16) {
224
+ res = "0" + res;
225
+ }
226
+ response.srcAddr64 = res;
227
+ buf3 = view.buffer.slice(10, view.buffer.byteLength);
228
+ srcAddr = response.srcAddr64;
229
+ }
230
+ view = new DataView(buf3);
231
+ response.srcEndpoint = view.getUint8(0);
232
+ response.profileId = view.getUint16(1, littleEndian);
233
+ response.clusterId = view.getUint16(3, littleEndian);
234
+ response.asduLength = view.getUint16(5, littleEndian);
235
+ let payload = [];
236
+ let i = 0;
237
+ for (let u = 7; u < (response.asduLength + 7); u++) {
238
+ payload[i] = view.getUint8(u);
239
+ i++;
240
+ }
241
+ response.asduPayload = payload;
242
+ response.lqi = view.getUint8(view.byteLength - 8);
243
+ response.rssi = view.getInt8(view.byteLength - 3);
244
+ let newStatus = response.deviceState.toString(2);
245
+ for (let l = 0; l <= (8 - newStatus.length); l++) {
246
+ newStatus = "0" + newStatus;
247
+ }
248
+ debug("DATA_INDICATION RESPONSE - seqNr. " + response.seqNr + " srcAddr: 0x" + srcAddr + " destAddr: 0x" + destAddr + " profile id: 0x" + response.profileId.toString(16) + " cluster id: 0x" + response.clusterId.toString(16) + " lqi: " + response.lqi);
249
+ debug("response payload: " + payload);
250
+ frameParserEvents.emit('receivedDataPayload', response);
251
+ frameParserEvents.emit('receivedDataNotification', response.deviceState);
252
+ return response;
253
+ }
254
+ catch (error) {
255
+ debug("DATA_INDICATION RESPONSE - " + error);
256
+ return null;
257
+ }
258
+ }
259
+ function parseEnqueueSendDataResponse(view) {
260
+ try {
261
+ const status = view.getUint8(2);
262
+ const requestId = view.getUint8(8);
263
+ const deviceState = view.getUint8(7);
264
+ debug("DATA_REQUEST RESPONSE - request id: " + requestId + " status: " + status);
265
+ frameParserEvents.emit('receivedDataNotification', deviceState);
266
+ return deviceState;
267
+ }
268
+ catch (error) {
269
+ debug("parseEnqueueSendDataResponse - " + error);
270
+ return null;
271
+ }
272
+ }
273
+ function parseWriteParameterResponse(view) {
274
+ try {
275
+ const parameterId = view.getUint8(7);
276
+ debug(`write parameter response - parameter id: ${parameterId} - status: ${view.getUint8(2)}`);
277
+ return parameterId;
278
+ }
279
+ catch (error) {
280
+ debug("parseWriteParameterResponse - " + error);
281
+ return null;
282
+ }
283
+ }
284
+ function parseReceivedDataNotification(view) {
285
+ try {
286
+ const deviceState = view.getUint8(5);
287
+ debug("DEVICE_STATE changed: " + deviceState.toString(2));
288
+ frameParserEvents.emit('receivedDataNotification', deviceState);
289
+ return deviceState;
290
+ }
291
+ catch (error) {
292
+ debug("parseReceivedDataNotification - " + error);
293
+ return null;
294
+ }
295
+ }
296
+ function parseGreenPowerDataIndication(view) {
297
+ try {
298
+ const ind = {};
299
+ ind.seqNr = view.getUint8(1);
300
+ if (view.byteLength < 30) {
301
+ debug("GP data notification");
302
+ ind.id = 0x00; // 0 = notification, 4 = commissioning
303
+ ind.rspId = 0x01; // 1 = pairing, 2 = commissioning
304
+ ind.options = 0;
305
+ view.getUint16(7, littleEndian); // frame ctrl field(7) ext.fcf(8)
306
+ ind.srcId = view.getUint32(9, littleEndian);
307
+ ind.frameCounter = view.getUint32(13, littleEndian);
308
+ ind.commandId = view.getUint8(17);
309
+ ind.commandFrameSize = view.byteLength - 18 - 6; // cut 18 from begin and 4 (sec mic) and 2 from end (cfc)
310
+ let payload = [];
311
+ let i = 0;
312
+ for (let u = 18; u < (ind.commandFrameSize + 18); u++) {
313
+ payload[i] = view.getUint8(u);
314
+ i++;
315
+ }
316
+ ind.commandFrame = payload;
317
+ }
318
+ else {
319
+ debug("GP commissioning notification");
320
+ ind.id = 0x04; // 0 = notification, 4 = commissioning
321
+ ind.rspId = 0x01; // 1 = pairing, 2 = commissioning
322
+ ind.options = view.getUint16(14, littleEndian); // opt(14) ext.opt(15)
323
+ ind.srcId = view.getUint32(8, littleEndian);
324
+ ind.frameCounter = view.getUint32(36, littleEndian);
325
+ ind.commandId = view.getUint8(12);
326
+ ind.commandFrameSize = view.byteLength - 13 - 2; // cut 13 from begin and 2 from end (cfc)
327
+ let payload = [];
328
+ let i = 0;
329
+ for (let u = 13; u < (ind.commandFrameSize + 13); u++) {
330
+ payload[i] = view.getUint8(u);
331
+ i++;
332
+ }
333
+ ind.commandFrame = payload;
334
+ }
335
+ if (!(lastReceivedGpInd.srcId === ind.srcId &&
336
+ lastReceivedGpInd.commandId === ind.commandId &&
337
+ lastReceivedGpInd.frameCounter === ind.frameCounter)) {
338
+ lastReceivedGpInd.srcId = ind.srcId;
339
+ lastReceivedGpInd.commandId = ind.commandId;
340
+ lastReceivedGpInd.frameCounter = ind.frameCounter;
341
+ //debug(`GP_DATA_INDICATION - src id: ${ind.srcId} cmd id: ${ind.commandId} frameCounter: ${ind.frameCounter}`);
342
+ debug(`GP_DATA_INDICATION - src id: 0x${ind.srcId.toString(16)} cmd id: 0x${ind.commandId.toString(16)} frameCounter: 0x${ind.frameCounter.toString(16)}`);
343
+ frameParserEvents.emit('receivedGreenPowerIndication', ind);
344
+ }
345
+ return ind;
346
+ }
347
+ catch (error) {
348
+ debug("GREEN_POWER INDICATION - " + error);
349
+ return null;
350
+ }
351
+ }
352
+ function parseMacPollCommand(view) {
353
+ //debug("Received command MAC_POLL");
354
+ return 28;
355
+ }
356
+ function parseBeaconRequest(view) {
357
+ debug("Received Beacon Request");
358
+ return 31;
359
+ }
360
+ function parseUnknownCommand(view) {
361
+ const id = view.getUint8(0);
362
+ debug(`received unknown command - id ${id}`);
363
+ return id;
364
+ }
365
+ function getParserForCommandId(id) {
366
+ switch (id) {
367
+ case constants_1.default.PARAM.FrameType.ReadParameter:
368
+ return parseReadParameterResponse;
369
+ case constants_1.default.PARAM.FrameType.WriteParameter:
370
+ return parseWriteParameterResponse;
371
+ case constants_1.default.PARAM.FrameType.ReadFirmwareVersion:
372
+ return parseReadFirmwareResponse;
373
+ case constants_1.default.PARAM.FrameType.ReadDeviceState:
374
+ return parseDeviceStateResponse;
375
+ case constants_1.default.PARAM.APS.DATA_INDICATION:
376
+ return parseReadReceivedDataResponse;
377
+ case constants_1.default.PARAM.APS.DATA_REQUEST:
378
+ return parseEnqueueSendDataResponse;
379
+ case constants_1.default.PARAM.APS.DATA_CONFIRM:
380
+ return parseQuerySendDataStateResponse;
381
+ case constants_1.default.PARAM.FrameType.DeviceStateChanged:
382
+ return parseReceivedDataNotification;
383
+ case constants_1.default.PARAM.NetworkState.CHANGE_NETWORK_STATE:
384
+ return parseChangeNetworkStateResponse;
385
+ case constants_1.default.PARAM.FrameType.GreenPowerDataInd:
386
+ return parseGreenPowerDataIndication;
387
+ case 28:
388
+ return parseMacPollCommand;
389
+ case 31:
390
+ return parseBeaconRequest;
391
+ default:
392
+ return parseUnknownCommand;
393
+ //throw new Error(`unknown command id ${id}`);
394
+ }
395
+ }
396
+ async function processFrame(frame) {
397
+ const [seqNumber, status, command, commandId] = await parseFrame(frame);
398
+ //debug(`process frame with seq: ${seqNumber} status: ${status}`);
399
+ let queue = driver_1.busyQueue;
400
+ if (commandId === constants_1.default.PARAM.APS.DATA_INDICATION ||
401
+ commandId === constants_1.default.PARAM.APS.DATA_REQUEST ||
402
+ commandId === constants_1.default.PARAM.APS.DATA_CONFIRM) {
403
+ queue = driver_1.apsBusyQueue;
404
+ }
405
+ const i = queue.findIndex((r) => r.seqNumber === seqNumber);
406
+ if (i < 0) {
407
+ return;
408
+ }
409
+ const req = queue[i];
410
+ if (commandId === constants_1.default.PARAM.APS.DATA_REQUEST) {
411
+ // if confirm is true resolve request only when data confirm arrives
412
+ // TODO only return if a confirm was requested. if no confirm needed: go ahead
413
+ //if (req.confirm === true) {
414
+ return;
415
+ //}
416
+ }
417
+ //remove from busyqueue
418
+ queue.splice(i, 1);
419
+ if (status !== 0) {
420
+ // reject if status is not SUCCESS
421
+ //debug("REJECT REQUEST");
422
+ req.reject({ status });
423
+ }
424
+ else {
425
+ //debug("RESOLVE REQUEST");
426
+ req.resolve(command);
427
+ }
428
+ }
429
+ function parseFrame(frame) {
430
+ if (frame.length < MIN_BUFFER_SIZE) {
431
+ debug("received frame size to small - discard frame");
432
+ return [null, null, null, null];
433
+ }
434
+ const view = new DataView(frame.buffer);
435
+ const commandId = view.getUint8(0);
436
+ const seqNumber = view.getUint8(1);
437
+ const status = view.getUint8(2);
438
+ //const frameLength = view.getUint16(3, littleEndian);
439
+ //const payloadLength = view.getUint16(5, littleEndian);
440
+ const parser = getParserForCommandId(commandId);
441
+ return [seqNumber, status, parser(view), commandId];
442
+ }
443
+ exports.default = processFrame;
444
444
  //# sourceMappingURL=frameParser.js.map