@willieee802/zigbee-herdsman 0.15.0 → 0.15.1

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