@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,348 +1,348 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const definition_1 = require("./definition");
30
- const Utils = __importStar(require("./utils"));
31
- const buffaloZcl_1 = __importDefault(require("./buffaloZcl"));
32
- const definition_2 = require("./definition");
33
- const MINIMAL_FRAME_LENGTH = 3;
34
- const ListTypes = [
35
- definition_1.BuffaloZclDataType.LIST_UINT8,
36
- definition_1.BuffaloZclDataType.LIST_UINT16,
37
- definition_1.BuffaloZclDataType.LIST_UINT24,
38
- definition_1.BuffaloZclDataType.LIST_UINT32,
39
- definition_1.BuffaloZclDataType.LIST_ZONEINFO,
40
- ];
41
- class ZclFrame {
42
- constructor(header, payload, cluster, command) {
43
- this.Header = header;
44
- this.Payload = payload;
45
- this.Cluster = cluster;
46
- this.Command = command;
47
- }
48
- /**
49
- * Creating
50
- */
51
- static create(frameType, direction, disableDefaultResponse, manufacturerCode, transactionSequenceNumber, commandKey, clusterKey, payload, reservedBits = 0) {
52
- const cluster = Utils.getCluster(clusterKey, manufacturerCode != null ? manufacturerCode : null);
53
- let command = null;
54
- if (frameType === definition_2.FrameType.GLOBAL) {
55
- command = Utils.getGlobalCommand(commandKey);
56
- }
57
- else {
58
- command = direction === definition_1.Direction.CLIENT_TO_SERVER ?
59
- cluster.getCommand(commandKey) : cluster.getCommandResponse(commandKey);
60
- }
61
- const header = {
62
- frameControl: {
63
- reservedBits, frameType, direction, disableDefaultResponse,
64
- manufacturerSpecific: manufacturerCode != null,
65
- },
66
- transactionSequenceNumber,
67
- manufacturerCode,
68
- commandIdentifier: command.ID,
69
- };
70
- return new ZclFrame(header, payload, cluster, command);
71
- }
72
- toBuffer() {
73
- const buffalo = new buffaloZcl_1.default(Buffer.alloc(250));
74
- this.writeHeader(buffalo);
75
- if (this.Header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
76
- this.writePayloadGlobal(buffalo);
77
- }
78
- else if (this.Header.frameControl.frameType === definition_2.FrameType.SPECIFIC) {
79
- this.writePayloadCluster(buffalo);
80
- }
81
- else {
82
- throw new Error(`Frametype '${this.Header.frameControl.frameType}' not valid`);
83
- }
84
- return buffalo.getWritten();
85
- }
86
- writeHeader(buffalo) {
87
- const frameControl = ((this.Header.frameControl.frameType & 0x03) |
88
- (((this.Header.frameControl.manufacturerSpecific ? 1 : 0) << 2) & 0x04) |
89
- ((this.Header.frameControl.direction << 3) & 0x08) |
90
- (((this.Header.frameControl.disableDefaultResponse ? 1 : 0) << 4) & 0x10) |
91
- ((this.Header.frameControl.reservedBits << 5) & 0xE0));
92
- buffalo.writeUInt8(frameControl);
93
- if (this.Header.frameControl.manufacturerSpecific) {
94
- buffalo.writeUInt16(this.Header.manufacturerCode);
95
- }
96
- buffalo.writeUInt8(this.Header.transactionSequenceNumber);
97
- buffalo.writeUInt8(this.Header.commandIdentifier);
98
- }
99
- writePayloadGlobal(buffalo) {
100
- const command = Object.values(definition_1.Foundation).find((c) => c.ID === this.Command.ID);
101
- if (command.parseStrategy === 'repetitive') {
102
- for (const entry of this.Payload) {
103
- for (const parameter of command.parameters) {
104
- const options = {};
105
- if (!ZclFrame.conditionsValid(parameter, entry, null)) {
106
- continue;
107
- }
108
- if (parameter.type === definition_1.BuffaloZclDataType.USE_DATA_TYPE && typeof entry.dataType === 'number') {
109
- // We need to grab the dataType to parse useDataType
110
- options.dataType = definition_1.DataType[entry.dataType];
111
- }
112
- const typeStr = ZclFrame.getDataTypeString(parameter.type);
113
- buffalo.write(typeStr, entry[parameter.name], options);
114
- }
115
- }
116
- }
117
- else if (command.parseStrategy === 'flat') {
118
- for (const parameter of command.parameters) {
119
- buffalo.write(definition_1.DataType[parameter.type], this.Payload[parameter.name], {});
120
- }
121
- }
122
- else {
123
- /* istanbul ignore else */
124
- if (command.parseStrategy === 'oneof') {
125
- /* istanbul ignore else */
126
- if (command === definition_1.Foundation.discoverRsp) {
127
- buffalo.writeUInt8(this.Payload.discComplete);
128
- for (const entry of this.Payload.attrInfos) {
129
- for (const parameter of command.parameters) {
130
- buffalo.write(definition_1.DataType[parameter.type], entry[parameter.name], {});
131
- }
132
- }
133
- }
134
- }
135
- }
136
- }
137
- writePayloadCluster(buffalo) {
138
- for (const parameter of this.Command.parameters) {
139
- if (!ZclFrame.conditionsValid(parameter, this.Payload, null)) {
140
- continue;
141
- }
142
- if (!this.Payload.hasOwnProperty(parameter.name)) {
143
- throw new Error(`Parameter '${parameter.name}' is missing`);
144
- }
145
- const typeStr = ZclFrame.getDataTypeString(parameter.type);
146
- buffalo.write(typeStr, this.Payload[parameter.name], {});
147
- }
148
- }
149
- /**
150
- * Parsing
151
- */
152
- static fromBuffer(clusterID, buffer) {
153
- if (buffer.length < MINIMAL_FRAME_LENGTH) {
154
- throw new Error("ZclFrame length is lower than minimal length");
155
- }
156
- const buffalo = new buffaloZcl_1.default(buffer);
157
- const header = this.parseHeader(buffalo);
158
- let command = null;
159
- if (header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
160
- command = Utils.getGlobalCommand(header.commandIdentifier);
161
- }
162
- else {
163
- const cluster = Utils.getCluster(clusterID, header.manufacturerCode);
164
- command = header.frameControl.direction === definition_1.Direction.CLIENT_TO_SERVER ?
165
- cluster.getCommand(header.commandIdentifier) : cluster.getCommandResponse(header.commandIdentifier);
166
- }
167
- const cluster = Utils.getCluster(clusterID, header.frameControl.manufacturerSpecific ? header.manufacturerCode : null);
168
- const payload = this.parsePayload(header, cluster, buffalo);
169
- return new ZclFrame(header, payload, cluster, command);
170
- }
171
- static parseHeader(buffalo) {
172
- const frameControlValue = buffalo.readUInt8();
173
- const frameControl = {
174
- frameType: frameControlValue & 0x03,
175
- manufacturerSpecific: ((frameControlValue >> 2) & 0x01) === 1,
176
- direction: (frameControlValue >> 3) & 0x01,
177
- disableDefaultResponse: ((frameControlValue >> 4) & 0x01) === 1,
178
- reservedBits: frameControlValue >> 5,
179
- };
180
- let manufacturerCode = null;
181
- if (frameControl.manufacturerSpecific) {
182
- manufacturerCode = buffalo.readUInt16();
183
- }
184
- const transactionSequenceNumber = buffalo.readUInt8();
185
- const commandIdentifier = buffalo.readUInt8();
186
- return { frameControl, transactionSequenceNumber, manufacturerCode, commandIdentifier };
187
- }
188
- static parsePayload(header, cluster, buffalo) {
189
- if (header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
190
- return this.parsePayloadGlobal(header, buffalo);
191
- }
192
- else if (header.frameControl.frameType === definition_2.FrameType.SPECIFIC) {
193
- return this.parsePayloadCluster(header, cluster, buffalo);
194
- }
195
- else {
196
- throw new Error(`Unsupported frameType '${header.frameControl.frameType}'`);
197
- }
198
- }
199
- static parsePayloadCluster(header, cluster, buffalo) {
200
- const command = header.frameControl.direction === definition_1.Direction.CLIENT_TO_SERVER ?
201
- cluster.getCommand(header.commandIdentifier) : cluster.getCommandResponse(header.commandIdentifier);
202
- const payload = {};
203
- for (const parameter of command.parameters) {
204
- const options = { payload };
205
- if (!this.conditionsValid(parameter, payload, buffalo.getBuffer().length - buffalo.getPosition())) {
206
- continue;
207
- }
208
- if (ListTypes.includes(parameter.type)) {
209
- const lengthParameter = command.parameters[command.parameters.indexOf(parameter) - 1];
210
- const length = payload[lengthParameter.name];
211
- /* istanbul ignore else */
212
- if (typeof length === 'number') {
213
- options.length = length;
214
- }
215
- }
216
- const typeStr = ZclFrame.getDataTypeString(parameter.type);
217
- payload[parameter.name] = buffalo.read(typeStr, options);
218
- }
219
- return payload;
220
- }
221
- static parsePayloadGlobal(header, buffalo) {
222
- const command = Object.values(definition_1.Foundation).find((c) => c.ID === header.commandIdentifier);
223
- if (command.parseStrategy === 'repetitive') {
224
- const payload = [];
225
- while (buffalo.isMore()) {
226
- const entry = {};
227
- for (const parameter of command.parameters) {
228
- const options = {};
229
- if (!this.conditionsValid(parameter, entry, buffalo.getBuffer().length - buffalo.getPosition())) {
230
- continue;
231
- }
232
- if (parameter.type === definition_1.BuffaloZclDataType.USE_DATA_TYPE && typeof entry.dataType === 'number') {
233
- // We need to grab the dataType to parse useDataType
234
- options.dataType = definition_1.DataType[entry.dataType];
235
- if (entry.dataType === definition_1.DataType.charStr && entry.hasOwnProperty('attrId')) {
236
- // For Xiaomi struct parsing we need to pass the attributeID.
237
- options.attrId = entry.attrId;
238
- }
239
- }
240
- const typeStr = definition_1.DataType[parameter.type] != null ?
241
- definition_1.DataType[parameter.type] : definition_1.BuffaloZclDataType[parameter.type];
242
- entry[parameter.name] = buffalo.read(typeStr, options);
243
- // TODO: not needed, but temp workaroudn to make payload equal to that of zcl-packet
244
- if (parameter.type === definition_1.BuffaloZclDataType.USE_DATA_TYPE && entry.dataType === definition_1.DataType.struct) {
245
- entry['structElms'] = entry.attrData;
246
- entry['numElms'] = entry.attrData.length;
247
- }
248
- }
249
- payload.push(entry);
250
- }
251
- return payload;
252
- }
253
- else if (command.parseStrategy === 'flat') {
254
- const payload = {};
255
- for (const parameter of command.parameters) {
256
- payload[parameter.name] = buffalo.read(definition_1.DataType[parameter.type], {});
257
- }
258
- return payload;
259
- }
260
- else {
261
- /* istanbul ignore else */
262
- if (command.parseStrategy === 'oneof') {
263
- /* istanbul ignore else */
264
- if (command === definition_1.Foundation.discoverRsp) {
265
- const payload = {};
266
- payload.discComplete = buffalo.readUInt8();
267
- payload.attrInfos = [];
268
- while (buffalo.isMore()) {
269
- const entry = {};
270
- for (const parameter of command.parameters) {
271
- entry[parameter.name] = buffalo.read(definition_1.DataType[parameter.type], {});
272
- }
273
- payload.attrInfos.push(entry);
274
- }
275
- return payload;
276
- }
277
- }
278
- }
279
- }
280
- /**
281
- * Utils
282
- */
283
- static getDataTypeString(dataType) {
284
- return definition_1.DataType[dataType] != null ? definition_1.DataType[dataType] : definition_1.BuffaloZclDataType[dataType];
285
- }
286
- static conditionsValid(parameter, entry, remainingBufferBytes) {
287
- if (parameter.conditions) {
288
- const failedCondition = parameter.conditions.find((condition) => {
289
- if (condition.type === 'statusEquals') {
290
- return entry.status !== condition.value;
291
- }
292
- else if (condition.type == 'statusNotEquals') {
293
- return entry.status === condition.value;
294
- }
295
- else if (condition.type == 'directionEquals') {
296
- return entry.direction !== condition.value;
297
- }
298
- else if (condition.type == 'bitMaskSet') {
299
- return (entry[condition.param] & condition.mask) !== condition.mask;
300
- }
301
- else if (condition.type == 'bitFieldEnum') {
302
- return ((entry[condition.param] >> condition.offset) & ((1 << condition.size) - 1)) !== condition.value;
303
- }
304
- else if (remainingBufferBytes != null && condition.type == 'minimumRemainingBufferBytes') {
305
- return remainingBufferBytes < condition.value;
306
- }
307
- else {
308
- /* istanbul ignore else */
309
- if (condition.type == 'dataTypeValueTypeEquals') {
310
- return Utils.IsDataTypeAnalogOrDiscrete(entry.dataType) !== condition.value;
311
- }
312
- }
313
- });
314
- if (failedCondition) {
315
- return false;
316
- }
317
- }
318
- return true;
319
- }
320
- isSpecific() {
321
- return this.Header.frameControl.frameType === definition_2.FrameType.SPECIFIC;
322
- }
323
- isGlobal() {
324
- return this.Header.frameControl.frameType === definition_2.FrameType.GLOBAL;
325
- }
326
- // List of clusters is not completed, feel free to add more.
327
- isCluster(clusterName) {
328
- return this.Cluster.name === clusterName;
329
- }
330
- // List of commands is not completed, feel free to add more.
331
- isCommand(commandName) {
332
- return this.getCommand().name === commandName;
333
- }
334
- getCommand() {
335
- let command = null;
336
- if (this.Header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
337
- command = Utils.getGlobalCommand(this.Header.commandIdentifier);
338
- }
339
- else {
340
- command = this.Header.frameControl.direction === definition_1.Direction.CLIENT_TO_SERVER ?
341
- this.Cluster.getCommand(this.Header.commandIdentifier) :
342
- this.Cluster.getCommandResponse(this.Header.commandIdentifier);
343
- }
344
- return command;
345
- }
346
- }
347
- exports.default = ZclFrame;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const definition_1 = require("./definition");
30
+ const Utils = __importStar(require("./utils"));
31
+ const buffaloZcl_1 = __importDefault(require("./buffaloZcl"));
32
+ const definition_2 = require("./definition");
33
+ const MINIMAL_FRAME_LENGTH = 3;
34
+ const ListTypes = [
35
+ definition_1.BuffaloZclDataType.LIST_UINT8,
36
+ definition_1.BuffaloZclDataType.LIST_UINT16,
37
+ definition_1.BuffaloZclDataType.LIST_UINT24,
38
+ definition_1.BuffaloZclDataType.LIST_UINT32,
39
+ definition_1.BuffaloZclDataType.LIST_ZONEINFO,
40
+ ];
41
+ class ZclFrame {
42
+ constructor(header, payload, cluster, command) {
43
+ this.Header = header;
44
+ this.Payload = payload;
45
+ this.Cluster = cluster;
46
+ this.Command = command;
47
+ }
48
+ /**
49
+ * Creating
50
+ */
51
+ static create(frameType, direction, disableDefaultResponse, manufacturerCode, transactionSequenceNumber, commandKey, clusterKey, payload, reservedBits = 0) {
52
+ const cluster = Utils.getCluster(clusterKey, manufacturerCode != null ? manufacturerCode : null);
53
+ let command = null;
54
+ if (frameType === definition_2.FrameType.GLOBAL) {
55
+ command = Utils.getGlobalCommand(commandKey);
56
+ }
57
+ else {
58
+ command = direction === definition_1.Direction.CLIENT_TO_SERVER ?
59
+ cluster.getCommand(commandKey) : cluster.getCommandResponse(commandKey);
60
+ }
61
+ const header = {
62
+ frameControl: {
63
+ reservedBits, frameType, direction, disableDefaultResponse,
64
+ manufacturerSpecific: manufacturerCode != null,
65
+ },
66
+ transactionSequenceNumber,
67
+ manufacturerCode,
68
+ commandIdentifier: command.ID,
69
+ };
70
+ return new ZclFrame(header, payload, cluster, command);
71
+ }
72
+ toBuffer() {
73
+ const buffalo = new buffaloZcl_1.default(Buffer.alloc(250));
74
+ this.writeHeader(buffalo);
75
+ if (this.Header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
76
+ this.writePayloadGlobal(buffalo);
77
+ }
78
+ else if (this.Header.frameControl.frameType === definition_2.FrameType.SPECIFIC) {
79
+ this.writePayloadCluster(buffalo);
80
+ }
81
+ else {
82
+ throw new Error(`Frametype '${this.Header.frameControl.frameType}' not valid`);
83
+ }
84
+ return buffalo.getWritten();
85
+ }
86
+ writeHeader(buffalo) {
87
+ const frameControl = ((this.Header.frameControl.frameType & 0x03) |
88
+ (((this.Header.frameControl.manufacturerSpecific ? 1 : 0) << 2) & 0x04) |
89
+ ((this.Header.frameControl.direction << 3) & 0x08) |
90
+ (((this.Header.frameControl.disableDefaultResponse ? 1 : 0) << 4) & 0x10) |
91
+ ((this.Header.frameControl.reservedBits << 5) & 0xE0));
92
+ buffalo.writeUInt8(frameControl);
93
+ if (this.Header.frameControl.manufacturerSpecific) {
94
+ buffalo.writeUInt16(this.Header.manufacturerCode);
95
+ }
96
+ buffalo.writeUInt8(this.Header.transactionSequenceNumber);
97
+ buffalo.writeUInt8(this.Header.commandIdentifier);
98
+ }
99
+ writePayloadGlobal(buffalo) {
100
+ const command = Object.values(definition_1.Foundation).find((c) => c.ID === this.Command.ID);
101
+ if (command.parseStrategy === 'repetitive') {
102
+ for (const entry of this.Payload) {
103
+ for (const parameter of command.parameters) {
104
+ const options = {};
105
+ if (!ZclFrame.conditionsValid(parameter, entry, null)) {
106
+ continue;
107
+ }
108
+ if (parameter.type === definition_1.BuffaloZclDataType.USE_DATA_TYPE && typeof entry.dataType === 'number') {
109
+ // We need to grab the dataType to parse useDataType
110
+ options.dataType = definition_1.DataType[entry.dataType];
111
+ }
112
+ const typeStr = ZclFrame.getDataTypeString(parameter.type);
113
+ buffalo.write(typeStr, entry[parameter.name], options);
114
+ }
115
+ }
116
+ }
117
+ else if (command.parseStrategy === 'flat') {
118
+ for (const parameter of command.parameters) {
119
+ buffalo.write(definition_1.DataType[parameter.type], this.Payload[parameter.name], {});
120
+ }
121
+ }
122
+ else {
123
+ /* istanbul ignore else */
124
+ if (command.parseStrategy === 'oneof') {
125
+ /* istanbul ignore else */
126
+ if (command === definition_1.Foundation.discoverRsp) {
127
+ buffalo.writeUInt8(this.Payload.discComplete);
128
+ for (const entry of this.Payload.attrInfos) {
129
+ for (const parameter of command.parameters) {
130
+ buffalo.write(definition_1.DataType[parameter.type], entry[parameter.name], {});
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ }
137
+ writePayloadCluster(buffalo) {
138
+ for (const parameter of this.Command.parameters) {
139
+ if (!ZclFrame.conditionsValid(parameter, this.Payload, null)) {
140
+ continue;
141
+ }
142
+ if (!this.Payload.hasOwnProperty(parameter.name)) {
143
+ throw new Error(`Parameter '${parameter.name}' is missing`);
144
+ }
145
+ const typeStr = ZclFrame.getDataTypeString(parameter.type);
146
+ buffalo.write(typeStr, this.Payload[parameter.name], {});
147
+ }
148
+ }
149
+ /**
150
+ * Parsing
151
+ */
152
+ static fromBuffer(clusterID, buffer) {
153
+ if (buffer.length < MINIMAL_FRAME_LENGTH) {
154
+ throw new Error("ZclFrame length is lower than minimal length");
155
+ }
156
+ const buffalo = new buffaloZcl_1.default(buffer);
157
+ const header = this.parseHeader(buffalo);
158
+ let command = null;
159
+ if (header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
160
+ command = Utils.getGlobalCommand(header.commandIdentifier);
161
+ }
162
+ else {
163
+ const cluster = Utils.getCluster(clusterID, header.manufacturerCode);
164
+ command = header.frameControl.direction === definition_1.Direction.CLIENT_TO_SERVER ?
165
+ cluster.getCommand(header.commandIdentifier) : cluster.getCommandResponse(header.commandIdentifier);
166
+ }
167
+ const cluster = Utils.getCluster(clusterID, header.frameControl.manufacturerSpecific ? header.manufacturerCode : null);
168
+ const payload = this.parsePayload(header, cluster, buffalo);
169
+ return new ZclFrame(header, payload, cluster, command);
170
+ }
171
+ static parseHeader(buffalo) {
172
+ const frameControlValue = buffalo.readUInt8();
173
+ const frameControl = {
174
+ frameType: frameControlValue & 0x03,
175
+ manufacturerSpecific: ((frameControlValue >> 2) & 0x01) === 1,
176
+ direction: (frameControlValue >> 3) & 0x01,
177
+ disableDefaultResponse: ((frameControlValue >> 4) & 0x01) === 1,
178
+ reservedBits: frameControlValue >> 5,
179
+ };
180
+ let manufacturerCode = null;
181
+ if (frameControl.manufacturerSpecific) {
182
+ manufacturerCode = buffalo.readUInt16();
183
+ }
184
+ const transactionSequenceNumber = buffalo.readUInt8();
185
+ const commandIdentifier = buffalo.readUInt8();
186
+ return { frameControl, transactionSequenceNumber, manufacturerCode, commandIdentifier };
187
+ }
188
+ static parsePayload(header, cluster, buffalo) {
189
+ if (header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
190
+ return this.parsePayloadGlobal(header, buffalo);
191
+ }
192
+ else if (header.frameControl.frameType === definition_2.FrameType.SPECIFIC) {
193
+ return this.parsePayloadCluster(header, cluster, buffalo);
194
+ }
195
+ else {
196
+ throw new Error(`Unsupported frameType '${header.frameControl.frameType}'`);
197
+ }
198
+ }
199
+ static parsePayloadCluster(header, cluster, buffalo) {
200
+ const command = header.frameControl.direction === definition_1.Direction.CLIENT_TO_SERVER ?
201
+ cluster.getCommand(header.commandIdentifier) : cluster.getCommandResponse(header.commandIdentifier);
202
+ const payload = {};
203
+ for (const parameter of command.parameters) {
204
+ const options = { payload };
205
+ if (!this.conditionsValid(parameter, payload, buffalo.getBuffer().length - buffalo.getPosition())) {
206
+ continue;
207
+ }
208
+ if (ListTypes.includes(parameter.type)) {
209
+ const lengthParameter = command.parameters[command.parameters.indexOf(parameter) - 1];
210
+ const length = payload[lengthParameter.name];
211
+ /* istanbul ignore else */
212
+ if (typeof length === 'number') {
213
+ options.length = length;
214
+ }
215
+ }
216
+ const typeStr = ZclFrame.getDataTypeString(parameter.type);
217
+ payload[parameter.name] = buffalo.read(typeStr, options);
218
+ }
219
+ return payload;
220
+ }
221
+ static parsePayloadGlobal(header, buffalo) {
222
+ const command = Object.values(definition_1.Foundation).find((c) => c.ID === header.commandIdentifier);
223
+ if (command.parseStrategy === 'repetitive') {
224
+ const payload = [];
225
+ while (buffalo.isMore()) {
226
+ const entry = {};
227
+ for (const parameter of command.parameters) {
228
+ const options = {};
229
+ if (!this.conditionsValid(parameter, entry, buffalo.getBuffer().length - buffalo.getPosition())) {
230
+ continue;
231
+ }
232
+ if (parameter.type === definition_1.BuffaloZclDataType.USE_DATA_TYPE && typeof entry.dataType === 'number') {
233
+ // We need to grab the dataType to parse useDataType
234
+ options.dataType = definition_1.DataType[entry.dataType];
235
+ if (entry.dataType === definition_1.DataType.charStr && entry.hasOwnProperty('attrId')) {
236
+ // For Xiaomi struct parsing we need to pass the attributeID.
237
+ options.attrId = entry.attrId;
238
+ }
239
+ }
240
+ const typeStr = definition_1.DataType[parameter.type] != null ?
241
+ definition_1.DataType[parameter.type] : definition_1.BuffaloZclDataType[parameter.type];
242
+ entry[parameter.name] = buffalo.read(typeStr, options);
243
+ // TODO: not needed, but temp workaroudn to make payload equal to that of zcl-packet
244
+ if (parameter.type === definition_1.BuffaloZclDataType.USE_DATA_TYPE && entry.dataType === definition_1.DataType.struct) {
245
+ entry['structElms'] = entry.attrData;
246
+ entry['numElms'] = entry.attrData.length;
247
+ }
248
+ }
249
+ payload.push(entry);
250
+ }
251
+ return payload;
252
+ }
253
+ else if (command.parseStrategy === 'flat') {
254
+ const payload = {};
255
+ for (const parameter of command.parameters) {
256
+ payload[parameter.name] = buffalo.read(definition_1.DataType[parameter.type], {});
257
+ }
258
+ return payload;
259
+ }
260
+ else {
261
+ /* istanbul ignore else */
262
+ if (command.parseStrategy === 'oneof') {
263
+ /* istanbul ignore else */
264
+ if (command === definition_1.Foundation.discoverRsp) {
265
+ const payload = {};
266
+ payload.discComplete = buffalo.readUInt8();
267
+ payload.attrInfos = [];
268
+ while (buffalo.isMore()) {
269
+ const entry = {};
270
+ for (const parameter of command.parameters) {
271
+ entry[parameter.name] = buffalo.read(definition_1.DataType[parameter.type], {});
272
+ }
273
+ payload.attrInfos.push(entry);
274
+ }
275
+ return payload;
276
+ }
277
+ }
278
+ }
279
+ }
280
+ /**
281
+ * Utils
282
+ */
283
+ static getDataTypeString(dataType) {
284
+ return definition_1.DataType[dataType] != null ? definition_1.DataType[dataType] : definition_1.BuffaloZclDataType[dataType];
285
+ }
286
+ static conditionsValid(parameter, entry, remainingBufferBytes) {
287
+ if (parameter.conditions) {
288
+ const failedCondition = parameter.conditions.find((condition) => {
289
+ if (condition.type === 'statusEquals') {
290
+ return entry.status !== condition.value;
291
+ }
292
+ else if (condition.type == 'statusNotEquals') {
293
+ return entry.status === condition.value;
294
+ }
295
+ else if (condition.type == 'directionEquals') {
296
+ return entry.direction !== condition.value;
297
+ }
298
+ else if (condition.type == 'bitMaskSet') {
299
+ return (entry[condition.param] & condition.mask) !== condition.mask;
300
+ }
301
+ else if (condition.type == 'bitFieldEnum') {
302
+ return ((entry[condition.param] >> condition.offset) & ((1 << condition.size) - 1)) !== condition.value;
303
+ }
304
+ else if (remainingBufferBytes != null && condition.type == 'minimumRemainingBufferBytes') {
305
+ return remainingBufferBytes < condition.value;
306
+ }
307
+ else {
308
+ /* istanbul ignore else */
309
+ if (condition.type == 'dataTypeValueTypeEquals') {
310
+ return Utils.IsDataTypeAnalogOrDiscrete(entry.dataType) !== condition.value;
311
+ }
312
+ }
313
+ });
314
+ if (failedCondition) {
315
+ return false;
316
+ }
317
+ }
318
+ return true;
319
+ }
320
+ isSpecific() {
321
+ return this.Header.frameControl.frameType === definition_2.FrameType.SPECIFIC;
322
+ }
323
+ isGlobal() {
324
+ return this.Header.frameControl.frameType === definition_2.FrameType.GLOBAL;
325
+ }
326
+ // List of clusters is not completed, feel free to add more.
327
+ isCluster(clusterName) {
328
+ return this.Cluster.name === clusterName;
329
+ }
330
+ // List of commands is not completed, feel free to add more.
331
+ isCommand(commandName) {
332
+ return this.getCommand().name === commandName;
333
+ }
334
+ getCommand() {
335
+ let command = null;
336
+ if (this.Header.frameControl.frameType === definition_2.FrameType.GLOBAL) {
337
+ command = Utils.getGlobalCommand(this.Header.commandIdentifier);
338
+ }
339
+ else {
340
+ command = this.Header.frameControl.direction === definition_1.Direction.CLIENT_TO_SERVER ?
341
+ this.Cluster.getCommand(this.Header.commandIdentifier) :
342
+ this.Cluster.getCommandResponse(this.Header.commandIdentifier);
343
+ }
344
+ return command;
345
+ }
346
+ }
347
+ exports.default = ZclFrame;
348
348
  //# sourceMappingURL=zclFrame.js.map