@willieee802/zigbee-herdsman 0.18.2 → 0.18.3

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