@willieee802/zigbee-herdsman 0.18.2 → 0.19.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 (329) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +67 -0
  3. package/dist/adapter/adapter.d.ts +61 -61
  4. package/dist/adapter/adapter.d.ts.map +1 -1
  5. package/dist/adapter/adapter.js +146 -146
  6. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +68 -68
  7. package/dist/adapter/deconz/adapter/deconzAdapter.js +1060 -1060
  8. package/dist/adapter/deconz/adapter/index.d.ts +2 -2
  9. package/dist/adapter/deconz/adapter/index.js +10 -10
  10. package/dist/adapter/deconz/driver/constants.d.ts +104 -104
  11. package/dist/adapter/deconz/driver/constants.js +55 -55
  12. package/dist/adapter/deconz/driver/driver.d.ts +81 -81
  13. package/dist/adapter/deconz/driver/driver.js +732 -732
  14. package/dist/adapter/deconz/driver/frame.d.ts +6 -6
  15. package/dist/adapter/deconz/driver/frame.js +13 -13
  16. package/dist/adapter/deconz/driver/frameParser.d.ts +2 -2
  17. package/dist/adapter/deconz/driver/frameParser.js +443 -443
  18. package/dist/adapter/deconz/driver/parser.d.ts +12 -12
  19. package/dist/adapter/deconz/driver/parser.js +61 -61
  20. package/dist/adapter/deconz/driver/writer.d.ts +8 -8
  21. package/dist/adapter/deconz/driver/writer.js +44 -44
  22. package/dist/adapter/events.d.ts +47 -47
  23. package/dist/adapter/events.js +14 -14
  24. package/dist/adapter/ezsp/adapter/backup.d.ts +9 -9
  25. package/dist/adapter/ezsp/adapter/backup.js +53 -53
  26. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +59 -59
  27. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  28. package/dist/adapter/ezsp/adapter/ezspAdapter.js +603 -585
  29. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -1
  30. package/dist/adapter/ezsp/adapter/index.d.ts +2 -2
  31. package/dist/adapter/ezsp/adapter/index.js +10 -10
  32. package/dist/adapter/ezsp/driver/commands.d.ts +36 -36
  33. package/dist/adapter/ezsp/driver/commands.js +2359 -2359
  34. package/dist/adapter/ezsp/driver/consts.d.ts +10 -10
  35. package/dist/adapter/ezsp/driver/consts.js +13 -13
  36. package/dist/adapter/ezsp/driver/driver.d.ts +103 -103
  37. package/dist/adapter/ezsp/driver/driver.js +639 -639
  38. package/dist/adapter/ezsp/driver/ezsp.d.ts +96 -96
  39. package/dist/adapter/ezsp/driver/ezsp.js +586 -586
  40. package/dist/adapter/ezsp/driver/index.d.ts +3 -3
  41. package/dist/adapter/ezsp/driver/index.js +8 -8
  42. package/dist/adapter/ezsp/driver/multicast.d.ts +12 -12
  43. package/dist/adapter/ezsp/driver/multicast.js +74 -74
  44. package/dist/adapter/ezsp/driver/parser.d.ts +12 -12
  45. package/dist/adapter/ezsp/driver/parser.js +111 -111
  46. package/dist/adapter/ezsp/driver/types/basic.d.ts +62 -62
  47. package/dist/adapter/ezsp/driver/types/basic.js +208 -208
  48. package/dist/adapter/ezsp/driver/types/basic.js.map +1 -1
  49. package/dist/adapter/ezsp/driver/types/index.d.ts +9 -9
  50. package/dist/adapter/ezsp/driver/types/index.js +133 -133
  51. package/dist/adapter/ezsp/driver/types/named.d.ts +697 -697
  52. package/dist/adapter/ezsp/driver/types/named.js +1726 -1726
  53. package/dist/adapter/ezsp/driver/types/named.js.map +1 -1
  54. package/dist/adapter/ezsp/driver/types/struct.d.ts +251 -251
  55. package/dist/adapter/ezsp/driver/types/struct.js +708 -708
  56. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -1
  57. package/dist/adapter/ezsp/driver/uart.d.ts +44 -44
  58. package/dist/adapter/ezsp/driver/uart.js +368 -368
  59. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +2 -2
  60. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +55 -55
  61. package/dist/adapter/ezsp/driver/utils/index.d.ts +18 -18
  62. package/dist/adapter/ezsp/driver/utils/index.js +67 -67
  63. package/dist/adapter/ezsp/driver/writer.d.ts +13 -13
  64. package/dist/adapter/ezsp/driver/writer.js +88 -88
  65. package/dist/adapter/index.d.ts +4 -4
  66. package/dist/adapter/index.js +35 -35
  67. package/dist/adapter/serialPort.d.ts +8 -8
  68. package/dist/adapter/serialPort.js +22 -22
  69. package/dist/adapter/serialPort.js.map +1 -1
  70. package/dist/adapter/serialPortUtils.d.ts +12 -12
  71. package/dist/adapter/serialPortUtils.js +18 -18
  72. package/dist/adapter/socketPortUtils.d.ts +10 -10
  73. package/dist/adapter/socketPortUtils.js +16 -16
  74. package/dist/adapter/tstype.d.ts +85 -85
  75. package/dist/adapter/tstype.js +2 -2
  76. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +62 -62
  77. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +1 -1
  78. package/dist/adapter/z-stack/adapter/adapter-backup.js +460 -441
  79. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -1
  80. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +150 -150
  81. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +258 -258
  82. package/dist/adapter/z-stack/adapter/endpoints.d.ts +11 -11
  83. package/dist/adapter/z-stack/adapter/endpoints.js +73 -73
  84. package/dist/adapter/z-stack/adapter/index.d.ts +2 -2
  85. package/dist/adapter/z-stack/adapter/index.js +8 -8
  86. package/dist/adapter/z-stack/adapter/manager.d.ts +86 -86
  87. package/dist/adapter/z-stack/adapter/manager.js +476 -476
  88. package/dist/adapter/z-stack/adapter/tstype.d.ts +6 -6
  89. package/dist/adapter/z-stack/adapter/tstype.js +10 -10
  90. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +81 -81
  91. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  92. package/dist/adapter/z-stack/adapter/zStackAdapter.js +868 -868
  93. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -1
  94. package/dist/adapter/z-stack/constants/af.d.ts +23 -23
  95. package/dist/adapter/z-stack/constants/af.js +27 -27
  96. package/dist/adapter/z-stack/constants/common.d.ts +278 -278
  97. package/dist/adapter/z-stack/constants/common.js +289 -289
  98. package/dist/adapter/z-stack/constants/dbg.d.ts +22 -22
  99. package/dist/adapter/z-stack/constants/dbg.js +24 -24
  100. package/dist/adapter/z-stack/constants/index.d.ts +10 -10
  101. package/dist/adapter/z-stack/constants/index.js +47 -47
  102. package/dist/adapter/z-stack/constants/mac.d.ts +127 -127
  103. package/dist/adapter/z-stack/constants/mac.js +129 -129
  104. package/dist/adapter/z-stack/constants/sapi.d.ts +24 -24
  105. package/dist/adapter/z-stack/constants/sapi.js +26 -26
  106. package/dist/adapter/z-stack/constants/sys.d.ts +71 -71
  107. package/dist/adapter/z-stack/constants/sys.js +73 -73
  108. package/dist/adapter/z-stack/constants/util.d.ts +81 -81
  109. package/dist/adapter/z-stack/constants/util.js +83 -83
  110. package/dist/adapter/z-stack/constants/utils.d.ts +4 -4
  111. package/dist/adapter/z-stack/constants/utils.js +14 -14
  112. package/dist/adapter/z-stack/constants/zdo.d.ts +102 -102
  113. package/dist/adapter/z-stack/constants/zdo.js +104 -104
  114. package/dist/adapter/z-stack/models/index.d.ts +1 -1
  115. package/dist/adapter/z-stack/models/index.js +17 -17
  116. package/dist/adapter/z-stack/models/startup-options.d.ts +12 -12
  117. package/dist/adapter/z-stack/models/startup-options.js +2 -2
  118. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +23 -23
  119. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +45 -45
  120. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +10 -10
  121. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +22 -22
  122. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +10 -10
  123. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +21 -21
  124. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +10 -10
  125. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +23 -23
  126. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +10 -10
  127. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +24 -24
  128. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +10 -10
  129. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +23 -23
  130. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +8 -8
  131. package/dist/adapter/z-stack/structs/entries/channel-list.js +15 -15
  132. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +8 -8
  133. package/dist/adapter/z-stack/structs/entries/has-configured.js +16 -16
  134. package/dist/adapter/z-stack/structs/entries/index.d.ts +16 -16
  135. package/dist/adapter/z-stack/structs/entries/index.js +32 -32
  136. package/dist/adapter/z-stack/structs/entries/nib.d.ts +10 -10
  137. package/dist/adapter/z-stack/structs/entries/nib.js +68 -68
  138. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +10 -10
  139. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +18 -18
  140. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +8 -8
  141. package/dist/adapter/z-stack/structs/entries/nwk-key.js +15 -15
  142. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +8 -8
  143. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +15 -15
  144. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +13 -13
  145. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +23 -23
  146. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +10 -10
  147. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +22 -22
  148. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +20 -20
  149. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +36 -36
  150. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +10 -10
  151. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +24 -24
  152. package/dist/adapter/z-stack/structs/index.d.ts +4 -4
  153. package/dist/adapter/z-stack/structs/index.js +20 -20
  154. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +13 -13
  155. package/dist/adapter/z-stack/structs/serializable-memory-object.js +2 -2
  156. package/dist/adapter/z-stack/structs/struct.d.ts +99 -99
  157. package/dist/adapter/z-stack/structs/struct.js +295 -295
  158. package/dist/adapter/z-stack/structs/table.d.ts +94 -94
  159. package/dist/adapter/z-stack/structs/table.js +161 -161
  160. package/dist/adapter/z-stack/unpi/constants.d.ts +28 -28
  161. package/dist/adapter/z-stack/unpi/constants.js +41 -41
  162. package/dist/adapter/z-stack/unpi/frame.d.ts +16 -16
  163. package/dist/adapter/z-stack/unpi/frame.js +48 -48
  164. package/dist/adapter/z-stack/unpi/index.d.ts +5 -5
  165. package/dist/adapter/z-stack/unpi/index.js +37 -37
  166. package/dist/adapter/z-stack/unpi/parser.d.ts +10 -10
  167. package/dist/adapter/z-stack/unpi/parser.js +74 -74
  168. package/dist/adapter/z-stack/unpi/writer.d.ts +10 -10
  169. package/dist/adapter/z-stack/unpi/writer.js +44 -44
  170. package/dist/adapter/z-stack/utils/channel-list.d.ts +20 -20
  171. package/dist/adapter/z-stack/utils/channel-list.js +40 -40
  172. package/dist/adapter/z-stack/utils/index.d.ts +2 -2
  173. package/dist/adapter/z-stack/utils/index.js +18 -18
  174. package/dist/adapter/z-stack/utils/network-options.d.ts +8 -8
  175. package/dist/adapter/z-stack/utils/network-options.js +22 -22
  176. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +11 -11
  177. package/dist/adapter/z-stack/znp/buffaloZnp.js +113 -113
  178. package/dist/adapter/z-stack/znp/definition.d.ts +5 -5
  179. package/dist/adapter/z-stack/znp/definition.js +3050 -3050
  180. package/dist/adapter/z-stack/znp/index.d.ts +3 -3
  181. package/dist/adapter/z-stack/znp/index.js +10 -10
  182. package/dist/adapter/z-stack/znp/parameterType.d.ts +22 -22
  183. package/dist/adapter/z-stack/znp/parameterType.js +25 -25
  184. package/dist/adapter/z-stack/znp/tstype.d.ts +21 -21
  185. package/dist/adapter/z-stack/znp/tstype.js +2 -2
  186. package/dist/adapter/z-stack/znp/znp.d.ts +43 -43
  187. package/dist/adapter/z-stack/znp/znp.js +325 -325
  188. package/dist/adapter/z-stack/znp/zpiObject.d.ts +19 -19
  189. package/dist/adapter/z-stack/znp/zpiObject.js +96 -96
  190. package/dist/adapter/zigate/adapter/index.d.ts +2 -2
  191. package/dist/adapter/zigate/adapter/index.js +10 -10
  192. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +69 -69
  193. package/dist/adapter/zigate/adapter/zigateAdapter.js +678 -678
  194. package/dist/adapter/zigate/debug.d.ts +7 -7
  195. package/dist/adapter/zigate/debug.js +22 -22
  196. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +18 -18
  197. package/dist/adapter/zigate/driver/buffaloZiGate.js +139 -139
  198. package/dist/adapter/zigate/driver/commandType.d.ts +41 -41
  199. package/dist/adapter/zigate/driver/commandType.js +385 -385
  200. package/dist/adapter/zigate/driver/constants.d.ts +276 -276
  201. package/dist/adapter/zigate/driver/constants.js +371 -371
  202. package/dist/adapter/zigate/driver/frame.d.ts +26 -26
  203. package/dist/adapter/zigate/driver/frame.js +172 -172
  204. package/dist/adapter/zigate/driver/frame.js.map +1 -1
  205. package/dist/adapter/zigate/driver/messageType.d.ts +11 -11
  206. package/dist/adapter/zigate/driver/messageType.js +278 -278
  207. package/dist/adapter/zigate/driver/parameterType.d.ts +20 -20
  208. package/dist/adapter/zigate/driver/parameterType.js +23 -23
  209. package/dist/adapter/zigate/driver/ziGateObject.d.ts +23 -23
  210. package/dist/adapter/zigate/driver/ziGateObject.js +106 -106
  211. package/dist/adapter/zigate/driver/zigate.d.ts +49 -49
  212. package/dist/adapter/zigate/driver/zigate.js +303 -303
  213. package/dist/buffalo/buffalo.d.ts +50 -50
  214. package/dist/buffalo/buffalo.js +322 -322
  215. package/dist/buffalo/index.d.ts +3 -3
  216. package/dist/buffalo/index.js +33 -33
  217. package/dist/buffalo/tstype.d.ts +8 -8
  218. package/dist/buffalo/tstype.js +2 -2
  219. package/dist/controller/controller.d.ts +113 -110
  220. package/dist/controller/controller.d.ts.map +1 -1
  221. package/dist/controller/controller.js +619 -607
  222. package/dist/controller/controller.js.map +1 -1
  223. package/dist/controller/database.d.ts +18 -18
  224. package/dist/controller/database.js +93 -93
  225. package/dist/controller/events.d.ts +58 -55
  226. package/dist/controller/events.d.ts.map +1 -1
  227. package/dist/controller/events.js +101 -101
  228. package/dist/controller/events.js.map +1 -1
  229. package/dist/controller/greenPower.d.ts +12 -12
  230. package/dist/controller/greenPower.js +220 -220
  231. package/dist/controller/helpers/index.d.ts +2 -2
  232. package/dist/controller/helpers/index.js +28 -28
  233. package/dist/controller/helpers/request.d.ts +22 -22
  234. package/dist/controller/helpers/request.js +71 -71
  235. package/dist/controller/helpers/zclFrameConverter.d.ts +7 -7
  236. package/dist/controller/helpers/zclFrameConverter.js +31 -31
  237. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +5 -5
  238. package/dist/controller/helpers/zclTransactionSequenceNumber.js +13 -13
  239. package/dist/controller/index.d.ts +5 -5
  240. package/dist/controller/index.js +8 -8
  241. package/dist/controller/logger-stub.d.ts +6 -6
  242. package/dist/controller/logger-stub.js +2 -2
  243. package/dist/controller/model/device.d.ts +133 -132
  244. package/dist/controller/model/device.d.ts.map +1 -1
  245. package/dist/controller/model/device.js +717 -708
  246. package/dist/controller/model/device.js.map +1 -1
  247. package/dist/controller/model/endpoint.d.ts +131 -131
  248. package/dist/controller/model/endpoint.d.ts.map +1 -1
  249. package/dist/controller/model/endpoint.js +816 -817
  250. package/dist/controller/model/endpoint.js.map +1 -1
  251. package/dist/controller/model/entity.d.ts +14 -14
  252. package/dist/controller/model/entity.js +26 -26
  253. package/dist/controller/model/group.d.ts +38 -38
  254. package/dist/controller/model/group.js +221 -221
  255. package/dist/controller/model/index.d.ts +5 -5
  256. package/dist/controller/model/index.js +14 -14
  257. package/dist/controller/touchlink.d.ts +19 -19
  258. package/dist/controller/touchlink.js +157 -157
  259. package/dist/controller/tstype.d.ts +21 -21
  260. package/dist/controller/tstype.js +9 -9
  261. package/dist/index.d.ts +3 -3
  262. package/dist/index.js +33 -33
  263. package/dist/models/backup-storage-legacy.d.ts +26 -26
  264. package/dist/models/backup-storage-legacy.js +2 -2
  265. package/dist/models/backup-storage-unified.d.ts +49 -49
  266. package/dist/models/backup-storage-unified.js +2 -2
  267. package/dist/models/backup.d.ts +37 -37
  268. package/dist/models/backup.js +2 -2
  269. package/dist/models/index.d.ts +4 -4
  270. package/dist/models/index.js +20 -20
  271. package/dist/models/network-options.d.ts +12 -12
  272. package/dist/models/network-options.js +2 -2
  273. package/dist/utils/assertString.d.ts +2 -2
  274. package/dist/utils/assertString.js +8 -8
  275. package/dist/utils/backup.d.ts +20 -20
  276. package/dist/utils/backup.js +187 -187
  277. package/dist/utils/equalsPartial.d.ts +2 -2
  278. package/dist/utils/equalsPartial.js +11 -11
  279. package/dist/utils/index.d.ts +9 -9
  280. package/dist/utils/index.js +45 -45
  281. package/dist/utils/isNumberArray.d.ts +2 -2
  282. package/dist/utils/isNumberArray.js +6 -6
  283. package/dist/utils/queue.d.ts +11 -11
  284. package/dist/utils/queue.js +50 -50
  285. package/dist/utils/realpathSync.d.ts +2 -2
  286. package/dist/utils/realpathSync.js +12 -12
  287. package/dist/utils/wait.d.ts +2 -2
  288. package/dist/utils/wait.js +8 -8
  289. package/dist/utils/waitress.d.ts +21 -21
  290. package/dist/utils/waitress.js +61 -61
  291. package/dist/zcl/buffaloZcl.d.ts +41 -41
  292. package/dist/zcl/buffaloZcl.js +591 -591
  293. package/dist/zcl/definition/buffaloZclDataType.d.ts +17 -17
  294. package/dist/zcl/definition/buffaloZclDataType.js +20 -20
  295. package/dist/zcl/definition/cluster.d.ts +29 -29
  296. package/dist/zcl/definition/cluster.js +5335 -5335
  297. package/dist/zcl/definition/dataType.d.ts +59 -59
  298. package/dist/zcl/definition/dataType.js +64 -64
  299. package/dist/zcl/definition/direction.d.ts +5 -5
  300. package/dist/zcl/definition/direction.js +8 -8
  301. package/dist/zcl/definition/endpointDeviceType.d.ts +4 -4
  302. package/dist/zcl/definition/endpointDeviceType.js +15 -15
  303. package/dist/zcl/definition/foundation.d.ts +11 -11
  304. package/dist/zcl/definition/foundation.js +167 -167
  305. package/dist/zcl/definition/frameControl.d.ts +10 -10
  306. package/dist/zcl/definition/frameControl.js +2 -2
  307. package/dist/zcl/definition/frameType.d.ts +5 -5
  308. package/dist/zcl/definition/frameType.js +8 -8
  309. package/dist/zcl/definition/index.d.ts +13 -13
  310. package/dist/zcl/definition/index.js +51 -51
  311. package/dist/zcl/definition/manufacturerCode.d.ts +1074 -1074
  312. package/dist/zcl/definition/manufacturerCode.js +1079 -1079
  313. package/dist/zcl/definition/powerSource.d.ts +4 -4
  314. package/dist/zcl/definition/powerSource.js +12 -12
  315. package/dist/zcl/definition/status.d.ts +38 -38
  316. package/dist/zcl/definition/status.js +41 -41
  317. package/dist/zcl/definition/tstype.d.ts +16 -16
  318. package/dist/zcl/definition/tstype.js +2 -2
  319. package/dist/zcl/index.d.ts +15 -15
  320. package/dist/zcl/index.js +55 -55
  321. package/dist/zcl/tstype.d.ts +56 -56
  322. package/dist/zcl/tstype.js +10 -10
  323. package/dist/zcl/utils.d.ts +6 -6
  324. package/dist/zcl/utils.js +165 -165
  325. package/dist/zcl/zclFrame.d.ts +45 -45
  326. package/dist/zcl/zclFrame.js +347 -347
  327. package/dist/zcl/zclStatusError.d.ts +5 -5
  328. package/dist/zcl/zclStatusError.js +13 -13
  329. package/package.json +6 -6
@@ -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