@willieee802/zigbee-herdsman 0.48.3 → 0.49.0

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 (1025) hide show
  1. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  2. package/.github/copilot-instructions.md +689 -0
  3. package/.github/dependabot.yml +22 -0
  4. package/.github/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
  5. package/.github/prompts/create-agentsmd.prompt.md +249 -0
  6. package/.github/prompts/create-specification.prompt.md +127 -0
  7. package/.github/prompts/review-and-refactor.prompt.md +15 -0
  8. package/.github/prompts/update-specification.prompt.md +127 -0
  9. package/.github/workflows/ci.yml +70 -0
  10. package/.github/workflows/release-please.yml +18 -0
  11. package/.github/workflows/stale.yml +20 -0
  12. package/.github/workflows/typedoc.yaml +47 -0
  13. package/.release-please-manifest.json +2 -2
  14. package/.vscode/extensions.json +3 -0
  15. package/.vscode/settings.json +11 -0
  16. package/AGENTS.md +441 -0
  17. package/CHANGELOG.md +1245 -0
  18. package/README.md +1 -1
  19. package/biome.json +103 -0
  20. package/examples/join-and-log.js +18 -18
  21. package/package.json +83 -70
  22. package/release-please-config.json +8 -8
  23. package/scripts/check-clusters-changes.ts +328 -0
  24. package/scripts/clusters-changes.log +584 -0
  25. package/scripts/clusters-typegen.ts +608 -0
  26. package/scripts/utils.ts +88 -0
  27. package/scripts/zap-update-clusters-report.json +303 -0
  28. package/scripts/zap-update-clusters.ts +1520 -0
  29. package/scripts/zap-update-types.ts +707 -0
  30. package/scripts/zap-xml-clusters-overrides-data.ts +52 -0
  31. package/scripts/zap-xml-clusters-overrides.ts +400 -0
  32. package/scripts/zap-xml-types.ts +146 -0
  33. package/src/adapter/adapter.ts +210 -0
  34. package/src/adapter/adapterDiscovery.ts +736 -0
  35. package/src/adapter/const.ts +12 -0
  36. package/src/adapter/deconz/adapter/deconzAdapter.ts +888 -0
  37. package/src/adapter/deconz/driver/constants.ts +246 -0
  38. package/src/adapter/deconz/driver/driver.ts +1528 -0
  39. package/src/adapter/deconz/driver/frame.ts +11 -0
  40. package/src/adapter/deconz/driver/frameParser.ts +766 -0
  41. package/src/adapter/deconz/driver/parser.ts +45 -0
  42. package/src/adapter/deconz/driver/writer.ts +22 -0
  43. package/src/adapter/deconz/types.d.ts +13 -0
  44. package/src/adapter/ember/adapter/emberAdapter.ts +2262 -0
  45. package/src/adapter/ember/adapter/endpoints.ts +86 -0
  46. package/src/adapter/ember/adapter/oneWaitress.ts +324 -0
  47. package/src/adapter/ember/adapter/tokensManager.ts +780 -0
  48. package/src/adapter/ember/consts.ts +178 -0
  49. package/src/adapter/ember/enums.ts +1746 -0
  50. package/src/adapter/ember/ezsp/buffalo.ts +1392 -0
  51. package/src/adapter/ember/ezsp/consts.ts +148 -0
  52. package/src/adapter/ember/ezsp/enums.ts +1114 -0
  53. package/src/adapter/ember/ezsp/ezsp.ts +9073 -0
  54. package/src/adapter/ember/ezspError.ts +10 -0
  55. package/src/adapter/ember/types.ts +866 -0
  56. package/src/adapter/ember/uart/ash.ts +1933 -0
  57. package/src/adapter/ember/uart/consts.ts +109 -0
  58. package/src/adapter/ember/uart/enums.ts +192 -0
  59. package/src/adapter/ember/uart/parser.ts +42 -0
  60. package/src/adapter/ember/uart/queues.ts +247 -0
  61. package/src/adapter/ember/uart/writer.ts +50 -0
  62. package/src/adapter/ember/utils/initters.ts +58 -0
  63. package/src/adapter/ember/utils/math.ts +71 -0
  64. package/src/adapter/events.ts +21 -0
  65. package/src/adapter/ezsp/adapter/backup.ts +100 -0
  66. package/src/adapter/ezsp/adapter/ezspAdapter.ts +632 -0
  67. package/src/adapter/ezsp/driver/commands.ts +2497 -0
  68. package/src/adapter/ezsp/driver/consts.ts +11 -0
  69. package/src/adapter/ezsp/driver/driver.ts +1002 -0
  70. package/src/adapter/ezsp/driver/ezsp.ts +802 -0
  71. package/src/adapter/ezsp/driver/frame.ts +101 -0
  72. package/src/adapter/ezsp/driver/index.ts +4 -0
  73. package/src/adapter/ezsp/driver/multicast.ts +78 -0
  74. package/src/adapter/ezsp/driver/parser.ts +81 -0
  75. package/src/adapter/ezsp/driver/types/basic.ts +201 -0
  76. package/src/adapter/ezsp/driver/types/index.ts +239 -0
  77. package/src/adapter/ezsp/driver/types/named.ts +2330 -0
  78. package/src/adapter/ezsp/driver/types/struct.ts +844 -0
  79. package/src/adapter/ezsp/driver/uart.ts +460 -0
  80. package/src/adapter/ezsp/driver/utils/crc16ccitt.ts +44 -0
  81. package/src/adapter/ezsp/driver/utils/index.ts +32 -0
  82. package/src/adapter/ezsp/driver/writer.ts +64 -0
  83. package/src/adapter/index.ts +3 -0
  84. package/src/adapter/serialPort.ts +58 -0
  85. package/src/adapter/tstype.ts +57 -0
  86. package/src/adapter/utils.ts +41 -0
  87. package/src/adapter/z-stack/adapter/adapter-backup.ts +509 -0
  88. package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +457 -0
  89. package/src/adapter/z-stack/adapter/endpoints.ts +60 -0
  90. package/src/adapter/z-stack/adapter/manager.ts +543 -0
  91. package/src/adapter/z-stack/adapter/tstype.ts +6 -0
  92. package/src/adapter/z-stack/adapter/zStackAdapter.ts +1350 -0
  93. package/src/adapter/z-stack/constants/af.ts +27 -0
  94. package/src/adapter/z-stack/constants/common.ts +285 -0
  95. package/src/adapter/z-stack/constants/dbg.ts +23 -0
  96. package/src/adapter/z-stack/constants/index.ts +11 -0
  97. package/src/adapter/z-stack/constants/mac.ts +128 -0
  98. package/src/adapter/z-stack/constants/sapi.ts +25 -0
  99. package/src/adapter/z-stack/constants/sys.ts +72 -0
  100. package/src/adapter/z-stack/constants/util.ts +82 -0
  101. package/src/adapter/z-stack/constants/utils.ts +14 -0
  102. package/src/adapter/z-stack/constants/zdo.ts +103 -0
  103. package/src/adapter/z-stack/models/startup-options.ts +13 -0
  104. package/src/adapter/z-stack/structs/entries/address-manager-entry.ts +44 -0
  105. package/src/adapter/z-stack/structs/entries/address-manager-table.ts +19 -0
  106. package/src/adapter/z-stack/structs/entries/aps-link-key-data-entry.ts +12 -0
  107. package/src/adapter/z-stack/structs/entries/aps-link-key-data-table.ts +21 -0
  108. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-entry.ts +19 -0
  109. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-table.ts +21 -0
  110. package/src/adapter/z-stack/structs/entries/channel-list.ts +8 -0
  111. package/src/adapter/z-stack/structs/entries/has-configured.ts +16 -0
  112. package/src/adapter/z-stack/structs/entries/index.ts +16 -0
  113. package/src/adapter/z-stack/structs/entries/nib.ts +66 -0
  114. package/src/adapter/z-stack/structs/entries/nwk-key-descriptor.ts +15 -0
  115. package/src/adapter/z-stack/structs/entries/nwk-key.ts +13 -0
  116. package/src/adapter/z-stack/structs/entries/nwk-pan-id.ts +8 -0
  117. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.ts +20 -0
  118. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.ts +19 -0
  119. package/src/adapter/z-stack/structs/entries/security-manager-entry.ts +33 -0
  120. package/src/adapter/z-stack/structs/entries/security-manager-table.ts +22 -0
  121. package/src/adapter/z-stack/structs/index.ts +4 -0
  122. package/src/adapter/z-stack/structs/serializable-memory-object.ts +14 -0
  123. package/src/adapter/z-stack/structs/struct.ts +367 -0
  124. package/src/adapter/z-stack/structs/table.ts +198 -0
  125. package/src/adapter/z-stack/unpi/constants.ts +33 -0
  126. package/src/adapter/z-stack/unpi/frame.ts +62 -0
  127. package/src/adapter/z-stack/unpi/index.ts +4 -0
  128. package/src/adapter/z-stack/unpi/parser.ts +67 -0
  129. package/src/adapter/z-stack/unpi/writer.ts +37 -0
  130. package/src/adapter/z-stack/utils/channel-list.ts +40 -0
  131. package/src/adapter/z-stack/utils/index.ts +2 -0
  132. package/src/adapter/z-stack/utils/network-options.ts +26 -0
  133. package/src/adapter/z-stack/znp/buffaloZnp.ts +175 -0
  134. package/src/adapter/z-stack/znp/definition.ts +2713 -0
  135. package/src/adapter/z-stack/znp/index.ts +2 -0
  136. package/src/adapter/z-stack/znp/parameterType.ts +22 -0
  137. package/src/adapter/z-stack/znp/tstype.ts +44 -0
  138. package/src/adapter/z-stack/znp/utils.ts +10 -0
  139. package/src/adapter/z-stack/znp/znp.ts +345 -0
  140. package/src/adapter/z-stack/znp/zpiObject.ts +148 -0
  141. package/src/adapter/zboss/adapter/zbossAdapter.ts +535 -0
  142. package/src/adapter/zboss/commands.ts +1184 -0
  143. package/src/adapter/zboss/consts.ts +9 -0
  144. package/src/adapter/zboss/driver.ts +422 -0
  145. package/src/adapter/zboss/enums.ts +360 -0
  146. package/src/adapter/zboss/frame.ts +227 -0
  147. package/src/adapter/zboss/reader.ts +65 -0
  148. package/src/adapter/zboss/types.ts +0 -0
  149. package/src/adapter/zboss/uart.ts +428 -0
  150. package/src/adapter/zboss/utils.ts +58 -0
  151. package/src/adapter/zboss/writer.ts +49 -0
  152. package/src/adapter/zigate/adapter/patchZdoBuffaloBE.ts +25 -0
  153. package/src/adapter/zigate/adapter/zigateAdapter.ts +633 -0
  154. package/src/adapter/zigate/driver/LICENSE +17 -0
  155. package/src/adapter/zigate/driver/buffaloZiGate.ts +210 -0
  156. package/src/adapter/zigate/driver/commandType.ts +418 -0
  157. package/src/adapter/zigate/driver/constants.ts +150 -0
  158. package/src/adapter/zigate/driver/frame.ts +197 -0
  159. package/src/adapter/zigate/driver/messageType.ts +287 -0
  160. package/src/adapter/zigate/driver/parameterType.ts +32 -0
  161. package/src/adapter/zigate/driver/ziGateObject.ts +146 -0
  162. package/src/adapter/zigate/driver/zigate.ts +422 -0
  163. package/src/adapter/zoh/adapter/utils.ts +27 -0
  164. package/src/adapter/zoh/adapter/zohAdapter.ts +931 -0
  165. package/src/buffalo/buffalo.ts +336 -0
  166. package/src/buffalo/index.ts +1 -0
  167. package/src/controller/controller.ts +1159 -0
  168. package/src/controller/database.ts +148 -0
  169. package/src/controller/events.ts +52 -0
  170. package/src/controller/greenPower.ts +613 -0
  171. package/src/controller/helpers/index.ts +1 -0
  172. package/src/controller/helpers/installCodes.ts +107 -0
  173. package/src/controller/helpers/ota.ts +575 -0
  174. package/src/controller/helpers/request.ts +96 -0
  175. package/src/controller/helpers/requestQueue.ts +126 -0
  176. package/src/controller/helpers/zclFrameConverter.ts +64 -0
  177. package/src/controller/helpers/zclTransactionSequenceNumber.ts +15 -0
  178. package/src/controller/index.ts +6 -0
  179. package/src/controller/model/device.ts +1791 -0
  180. package/src/controller/model/endpoint.ts +1235 -0
  181. package/src/controller/model/entity.ts +43 -0
  182. package/src/controller/model/group.ts +446 -0
  183. package/src/controller/model/index.ts +5 -0
  184. package/src/controller/model/konnextConfig.ts +6 -0
  185. package/src/controller/model/zigbeeEntity.ts +30 -0
  186. package/src/controller/touchlink.ts +195 -0
  187. package/src/controller/tstype.ts +374 -0
  188. package/src/index.ts +14 -0
  189. package/src/models/backup-storage-legacy.ts +48 -0
  190. package/src/models/backup-storage-unified.ts +47 -0
  191. package/src/models/backup.ts +37 -0
  192. package/src/models/index.ts +5 -0
  193. package/src/models/network-options.ts +11 -0
  194. package/src/utils/aes.ts +218 -0
  195. package/src/utils/async-mutex.ts +31 -0
  196. package/src/utils/backup.ts +152 -0
  197. package/src/utils/index.ts +5 -0
  198. package/src/utils/logger.ts +20 -0
  199. package/src/utils/patchBigIntSerialization.ts +8 -0
  200. package/src/utils/queue.ts +79 -0
  201. package/src/utils/timeService.ts +139 -0
  202. package/src/utils/utils.ts +19 -0
  203. package/src/utils/wait.ts +5 -0
  204. package/src/utils/waitress.ts +96 -0
  205. package/src/zspec/consts.ts +89 -0
  206. package/src/zspec/enums.ts +22 -0
  207. package/src/zspec/index.ts +3 -0
  208. package/src/zspec/tstypes.ts +18 -0
  209. package/src/zspec/utils.ts +247 -0
  210. package/src/zspec/zcl/buffaloZcl.ts +1073 -0
  211. package/src/zspec/zcl/definition/cluster.ts +7845 -0
  212. package/src/zspec/zcl/definition/clusters-types.ts +8577 -0
  213. package/src/zspec/zcl/definition/consts.ts +24 -0
  214. package/src/zspec/zcl/definition/datatypes.ts +2454 -0
  215. package/src/zspec/zcl/definition/enums.ts +224 -0
  216. package/src/zspec/zcl/definition/foundation.ts +342 -0
  217. package/src/zspec/zcl/definition/manufacturerCode.ts +730 -0
  218. package/src/zspec/zcl/definition/status.ts +69 -0
  219. package/src/zspec/zcl/definition/tstype.ts +446 -0
  220. package/src/zspec/zcl/index.ts +11 -0
  221. package/src/zspec/zcl/utils.ts +521 -0
  222. package/src/zspec/zcl/zclFrame.ts +383 -0
  223. package/src/zspec/zcl/zclHeader.ts +102 -0
  224. package/src/zspec/zcl/zclStatusError.ts +10 -0
  225. package/src/zspec/zdo/buffaloZdo.ts +2336 -0
  226. package/src/zspec/zdo/definition/clusters.ts +722 -0
  227. package/src/zspec/zdo/definition/consts.ts +16 -0
  228. package/src/zspec/zdo/definition/enums.ts +99 -0
  229. package/src/zspec/zdo/definition/status.ts +105 -0
  230. package/src/zspec/zdo/definition/tstypes.ts +1062 -0
  231. package/src/zspec/zdo/index.ts +7 -0
  232. package/src/zspec/zdo/utils.ts +76 -0
  233. package/src/zspec/zdo/zdoStatusError.ts +10 -0
  234. package/test/adapter/adapter.test.ts +1276 -0
  235. package/test/adapter/ember/ash.test.ts +337 -0
  236. package/test/adapter/ember/consts.ts +131 -0
  237. package/test/adapter/ember/emberAdapter.test.ts +3447 -0
  238. package/test/adapter/ember/ezsp.test.ts +389 -0
  239. package/test/adapter/ember/ezspBuffalo.test.ts +93 -0
  240. package/test/adapter/ember/ezspError.test.ts +12 -0
  241. package/test/adapter/ember/math.test.ts +190 -0
  242. package/test/adapter/ezsp/frame.test.ts +30 -0
  243. package/test/adapter/ezsp/uart.test.ts +181 -0
  244. package/test/adapter/z-stack/adapter.test.ts +4260 -0
  245. package/test/adapter/z-stack/constants.test.ts +33 -0
  246. package/test/adapter/z-stack/structs.test.ts +115 -0
  247. package/test/adapter/z-stack/unpi.test.ts +213 -0
  248. package/test/adapter/z-stack/znp.test.ts +1288 -0
  249. package/test/adapter/zboss/fixZdoResponse.test.ts +179 -0
  250. package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +81 -0
  251. package/test/adapter/zigate/zdo.test.ts +187 -0
  252. package/test/adapter/zoh/utils.test.ts +36 -0
  253. package/test/adapter/zoh/zohAdapter.test.ts +1451 -0
  254. package/test/benchOptions.ts +14 -0
  255. package/test/buffalo.test.ts +431 -0
  256. package/test/controller.bench.ts +215 -0
  257. package/test/controller.test.ts +10030 -0
  258. package/test/data/integrity-code-1166-012B-24031511-upgradeMe-RB 249 T.zigbee +0 -0
  259. package/test/data/manuf-tags-tradfri-cv-cct-unified_release_prod_v587757105_33e34452-9267-4665-bc5a-844c8f61f063.ota +0 -0
  260. package/test/data/padded-tretakt_smart_plug_soc-0x1100-2.4.25-prod.ota.ota.signed +0 -0
  261. package/test/data/telink-aes-A60_RGBW_T-0x00B6-0x03483712-MF_DIS.OTA +0 -0
  262. package/test/data/zbminir2_v1.0.8.ota +0 -0
  263. package/test/device-ota.test.ts +3332 -0
  264. package/test/greenpower.test.ts +1409 -0
  265. package/test/mockAdapters.ts +95 -0
  266. package/test/mockDevices.ts +623 -0
  267. package/test/requests.bench.ts +321 -0
  268. package/test/testUtils.ts +20 -0
  269. package/test/timeService.test.ts +214 -0
  270. package/test/tsconfig.json +9 -0
  271. package/test/utils/math.ts +19 -0
  272. package/test/utils.test.ts +352 -0
  273. package/test/vitest.config.mts +28 -0
  274. package/test/vitest.ts +9 -0
  275. package/test/zcl.test.ts +2858 -0
  276. package/test/zspec/utils.test.ts +68 -0
  277. package/test/zspec/zcl/buffalo.test.ts +1316 -0
  278. package/test/zspec/zcl/frame.test.ts +1056 -0
  279. package/test/zspec/zcl/utils.test.ts +650 -0
  280. package/test/zspec/zdo/buffalo.test.ts +1850 -0
  281. package/test/zspec/zdo/utils.test.ts +241 -0
  282. package/tsconfig.json +8 -10
  283. package/.babelrc.js +0 -6
  284. package/.eslintignore +0 -3
  285. package/dist/adapter/adapter.d.ts +0 -64
  286. package/dist/adapter/adapter.d.ts.map +0 -1
  287. package/dist/adapter/adapter.js +0 -157
  288. package/dist/adapter/adapter.js.map +0 -1
  289. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +0 -71
  290. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +0 -1
  291. package/dist/adapter/deconz/adapter/deconzAdapter.js +0 -1072
  292. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +0 -1
  293. package/dist/adapter/deconz/adapter/index.d.ts +0 -3
  294. package/dist/adapter/deconz/adapter/index.d.ts.map +0 -1
  295. package/dist/adapter/deconz/adapter/index.js +0 -11
  296. package/dist/adapter/deconz/adapter/index.js.map +0 -1
  297. package/dist/adapter/deconz/driver/constants.d.ts +0 -105
  298. package/dist/adapter/deconz/driver/constants.d.ts.map +0 -1
  299. package/dist/adapter/deconz/driver/constants.js +0 -56
  300. package/dist/adapter/deconz/driver/constants.js.map +0 -1
  301. package/dist/adapter/deconz/driver/driver.d.ts +0 -82
  302. package/dist/adapter/deconz/driver/driver.d.ts.map +0 -1
  303. package/dist/adapter/deconz/driver/driver.js +0 -751
  304. package/dist/adapter/deconz/driver/driver.js.map +0 -1
  305. package/dist/adapter/deconz/driver/frame.d.ts +0 -7
  306. package/dist/adapter/deconz/driver/frame.d.ts.map +0 -1
  307. package/dist/adapter/deconz/driver/frame.js +0 -14
  308. package/dist/adapter/deconz/driver/frame.js.map +0 -1
  309. package/dist/adapter/deconz/driver/frameParser.d.ts +0 -3
  310. package/dist/adapter/deconz/driver/frameParser.d.ts.map +0 -1
  311. package/dist/adapter/deconz/driver/frameParser.js +0 -444
  312. package/dist/adapter/deconz/driver/frameParser.js.map +0 -1
  313. package/dist/adapter/deconz/driver/parser.d.ts +0 -13
  314. package/dist/adapter/deconz/driver/parser.d.ts.map +0 -1
  315. package/dist/adapter/deconz/driver/parser.js +0 -64
  316. package/dist/adapter/deconz/driver/parser.js.map +0 -1
  317. package/dist/adapter/deconz/driver/writer.d.ts +0 -9
  318. package/dist/adapter/deconz/driver/writer.d.ts.map +0 -1
  319. package/dist/adapter/deconz/driver/writer.js +0 -45
  320. package/dist/adapter/deconz/driver/writer.js.map +0 -1
  321. package/dist/adapter/ember/adapter/emberAdapter.d.ts +0 -806
  322. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +0 -1
  323. package/dist/adapter/ember/adapter/emberAdapter.js +0 -2942
  324. package/dist/adapter/ember/adapter/emberAdapter.js.map +0 -1
  325. package/dist/adapter/ember/adapter/endpoints.d.ts +0 -27
  326. package/dist/adapter/ember/adapter/endpoints.d.ts.map +0 -1
  327. package/dist/adapter/ember/adapter/endpoints.js +0 -68
  328. package/dist/adapter/ember/adapter/endpoints.js.map +0 -1
  329. package/dist/adapter/ember/adapter/index.d.ts +0 -3
  330. package/dist/adapter/ember/adapter/index.d.ts.map +0 -1
  331. package/dist/adapter/ember/adapter/index.js +0 -6
  332. package/dist/adapter/ember/adapter/index.js.map +0 -1
  333. package/dist/adapter/ember/adapter/oneWaitress.d.ts +0 -108
  334. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +0 -1
  335. package/dist/adapter/ember/adapter/oneWaitress.js +0 -241
  336. package/dist/adapter/ember/adapter/oneWaitress.js.map +0 -1
  337. package/dist/adapter/ember/adapter/requestQueue.d.ts +0 -57
  338. package/dist/adapter/ember/adapter/requestQueue.d.ts.map +0 -1
  339. package/dist/adapter/ember/adapter/requestQueue.js +0 -139
  340. package/dist/adapter/ember/adapter/requestQueue.js.map +0 -1
  341. package/dist/adapter/ember/adapter/tokensManager.d.ts +0 -69
  342. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +0 -1
  343. package/dist/adapter/ember/adapter/tokensManager.js +0 -688
  344. package/dist/adapter/ember/adapter/tokensManager.js.map +0 -1
  345. package/dist/adapter/ember/consts.d.ts +0 -191
  346. package/dist/adapter/ember/consts.d.ts.map +0 -1
  347. package/dist/adapter/ember/consts.js +0 -246
  348. package/dist/adapter/ember/consts.js.map +0 -1
  349. package/dist/adapter/ember/enums.d.ts +0 -2172
  350. package/dist/adapter/ember/enums.d.ts.map +0 -1
  351. package/dist/adapter/ember/enums.js +0 -2375
  352. package/dist/adapter/ember/enums.js.map +0 -1
  353. package/dist/adapter/ember/ezsp/buffalo.d.ts +0 -156
  354. package/dist/adapter/ember/ezsp/buffalo.d.ts.map +0 -1
  355. package/dist/adapter/ember/ezsp/buffalo.js +0 -1033
  356. package/dist/adapter/ember/ezsp/buffalo.js.map +0 -1
  357. package/dist/adapter/ember/ezsp/consts.d.ts +0 -116
  358. package/dist/adapter/ember/ezsp/consts.d.ts.map +0 -1
  359. package/dist/adapter/ember/ezsp/consts.js +0 -128
  360. package/dist/adapter/ember/ezsp/consts.js.map +0 -1
  361. package/dist/adapter/ember/ezsp/enums.d.ts +0 -879
  362. package/dist/adapter/ember/ezsp/enums.d.ts.map +0 -1
  363. package/dist/adapter/ember/ezsp/enums.js +0 -948
  364. package/dist/adapter/ember/ezsp/enums.js.map +0 -1
  365. package/dist/adapter/ember/ezsp/ezsp.d.ts +0 -2662
  366. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +0 -1
  367. package/dist/adapter/ember/ezsp/ezsp.js +0 -6454
  368. package/dist/adapter/ember/ezsp/ezsp.js.map +0 -1
  369. package/dist/adapter/ember/types.d.ts +0 -733
  370. package/dist/adapter/ember/types.d.ts.map +0 -1
  371. package/dist/adapter/ember/types.js +0 -3
  372. package/dist/adapter/ember/types.js.map +0 -1
  373. package/dist/adapter/ember/uart/ash.d.ts +0 -464
  374. package/dist/adapter/ember/uart/ash.d.ts.map +0 -1
  375. package/dist/adapter/ember/uart/ash.js +0 -1633
  376. package/dist/adapter/ember/uart/ash.js.map +0 -1
  377. package/dist/adapter/ember/uart/consts.d.ts +0 -91
  378. package/dist/adapter/ember/uart/consts.d.ts.map +0 -1
  379. package/dist/adapter/ember/uart/consts.js +0 -100
  380. package/dist/adapter/ember/uart/consts.js.map +0 -1
  381. package/dist/adapter/ember/uart/enums.d.ts +0 -191
  382. package/dist/adapter/ember/uart/enums.d.ts.map +0 -1
  383. package/dist/adapter/ember/uart/enums.js +0 -197
  384. package/dist/adapter/ember/uart/enums.js.map +0 -1
  385. package/dist/adapter/ember/uart/parser.d.ts +0 -10
  386. package/dist/adapter/ember/uart/parser.d.ts.map +0 -1
  387. package/dist/adapter/ember/uart/parser.js +0 -37
  388. package/dist/adapter/ember/uart/parser.js.map +0 -1
  389. package/dist/adapter/ember/uart/queues.d.ts +0 -85
  390. package/dist/adapter/ember/uart/queues.d.ts.map +0 -1
  391. package/dist/adapter/ember/uart/queues.js +0 -214
  392. package/dist/adapter/ember/uart/queues.js.map +0 -1
  393. package/dist/adapter/ember/uart/writer.d.ts +0 -15
  394. package/dist/adapter/ember/uart/writer.d.ts.map +0 -1
  395. package/dist/adapter/ember/uart/writer.js +0 -46
  396. package/dist/adapter/ember/uart/writer.js.map +0 -1
  397. package/dist/adapter/ember/utils/initters.d.ts +0 -20
  398. package/dist/adapter/ember/utils/initters.d.ts.map +0 -1
  399. package/dist/adapter/ember/utils/initters.js +0 -58
  400. package/dist/adapter/ember/utils/initters.js.map +0 -1
  401. package/dist/adapter/ember/utils/math.d.ts +0 -51
  402. package/dist/adapter/ember/utils/math.d.ts.map +0 -1
  403. package/dist/adapter/ember/utils/math.js +0 -102
  404. package/dist/adapter/ember/utils/math.js.map +0 -1
  405. package/dist/adapter/ember/zdo.d.ts +0 -925
  406. package/dist/adapter/ember/zdo.d.ts.map +0 -1
  407. package/dist/adapter/ember/zdo.js +0 -723
  408. package/dist/adapter/ember/zdo.js.map +0 -1
  409. package/dist/adapter/events.d.ts +0 -42
  410. package/dist/adapter/events.d.ts.map +0 -1
  411. package/dist/adapter/events.js +0 -13
  412. package/dist/adapter/events.js.map +0 -1
  413. package/dist/adapter/ezsp/adapter/backup.d.ts +0 -13
  414. package/dist/adapter/ezsp/adapter/backup.d.ts.map +0 -1
  415. package/dist/adapter/ezsp/adapter/backup.js +0 -101
  416. package/dist/adapter/ezsp/adapter/backup.js.map +0 -1
  417. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +0 -65
  418. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +0 -1
  419. package/dist/adapter/ezsp/adapter/ezspAdapter.js +0 -634
  420. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +0 -1
  421. package/dist/adapter/ezsp/adapter/index.d.ts +0 -3
  422. package/dist/adapter/ezsp/adapter/index.d.ts.map +0 -1
  423. package/dist/adapter/ezsp/adapter/index.js +0 -11
  424. package/dist/adapter/ezsp/adapter/index.js.map +0 -1
  425. package/dist/adapter/ezsp/driver/commands.d.ts +0 -37
  426. package/dist/adapter/ezsp/driver/commands.d.ts.map +0 -1
  427. package/dist/adapter/ezsp/driver/commands.js +0 -2387
  428. package/dist/adapter/ezsp/driver/commands.js.map +0 -1
  429. package/dist/adapter/ezsp/driver/consts.d.ts +0 -11
  430. package/dist/adapter/ezsp/driver/consts.d.ts.map +0 -1
  431. package/dist/adapter/ezsp/driver/consts.js +0 -14
  432. package/dist/adapter/ezsp/driver/consts.js.map +0 -1
  433. package/dist/adapter/ezsp/driver/driver.d.ts +0 -109
  434. package/dist/adapter/ezsp/driver/driver.d.ts.map +0 -1
  435. package/dist/adapter/ezsp/driver/driver.js +0 -796
  436. package/dist/adapter/ezsp/driver/driver.js.map +0 -1
  437. package/dist/adapter/ezsp/driver/ezsp.d.ts +0 -106
  438. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +0 -1
  439. package/dist/adapter/ezsp/driver/ezsp.js +0 -664
  440. package/dist/adapter/ezsp/driver/ezsp.js.map +0 -1
  441. package/dist/adapter/ezsp/driver/frame.d.ts +0 -40
  442. package/dist/adapter/ezsp/driver/frame.d.ts.map +0 -1
  443. package/dist/adapter/ezsp/driver/frame.js +0 -101
  444. package/dist/adapter/ezsp/driver/frame.js.map +0 -1
  445. package/dist/adapter/ezsp/driver/index.d.ts +0 -4
  446. package/dist/adapter/ezsp/driver/index.d.ts.map +0 -1
  447. package/dist/adapter/ezsp/driver/index.js +0 -9
  448. package/dist/adapter/ezsp/driver/index.js.map +0 -1
  449. package/dist/adapter/ezsp/driver/multicast.d.ts +0 -13
  450. package/dist/adapter/ezsp/driver/multicast.d.ts.map +0 -1
  451. package/dist/adapter/ezsp/driver/multicast.js +0 -74
  452. package/dist/adapter/ezsp/driver/multicast.js.map +0 -1
  453. package/dist/adapter/ezsp/driver/parser.d.ts +0 -12
  454. package/dist/adapter/ezsp/driver/parser.d.ts.map +0 -1
  455. package/dist/adapter/ezsp/driver/parser.js +0 -105
  456. package/dist/adapter/ezsp/driver/parser.js.map +0 -1
  457. package/dist/adapter/ezsp/driver/types/basic.d.ts +0 -63
  458. package/dist/adapter/ezsp/driver/types/basic.d.ts.map +0 -1
  459. package/dist/adapter/ezsp/driver/types/basic.js +0 -209
  460. package/dist/adapter/ezsp/driver/types/basic.js.map +0 -1
  461. package/dist/adapter/ezsp/driver/types/index.d.ts +0 -10
  462. package/dist/adapter/ezsp/driver/types/index.d.ts.map +0 -1
  463. package/dist/adapter/ezsp/driver/types/index.js +0 -139
  464. package/dist/adapter/ezsp/driver/types/index.js.map +0 -1
  465. package/dist/adapter/ezsp/driver/types/named.d.ts +0 -1288
  466. package/dist/adapter/ezsp/driver/types/named.d.ts.map +0 -1
  467. package/dist/adapter/ezsp/driver/types/named.js +0 -2330
  468. package/dist/adapter/ezsp/driver/types/named.js.map +0 -1
  469. package/dist/adapter/ezsp/driver/types/struct.d.ts +0 -271
  470. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +0 -1
  471. package/dist/adapter/ezsp/driver/types/struct.js +0 -804
  472. package/dist/adapter/ezsp/driver/types/struct.js.map +0 -1
  473. package/dist/adapter/ezsp/driver/uart.d.ts +0 -49
  474. package/dist/adapter/ezsp/driver/uart.d.ts.map +0 -1
  475. package/dist/adapter/ezsp/driver/uart.js +0 -383
  476. package/dist/adapter/ezsp/driver/uart.js.map +0 -1
  477. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +0 -3
  478. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +0 -1
  479. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +0 -56
  480. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +0 -1
  481. package/dist/adapter/ezsp/driver/utils/index.d.ts +0 -20
  482. package/dist/adapter/ezsp/driver/utils/index.d.ts.map +0 -1
  483. package/dist/adapter/ezsp/driver/utils/index.js +0 -73
  484. package/dist/adapter/ezsp/driver/utils/index.js.map +0 -1
  485. package/dist/adapter/ezsp/driver/writer.d.ts +0 -14
  486. package/dist/adapter/ezsp/driver/writer.d.ts.map +0 -1
  487. package/dist/adapter/ezsp/driver/writer.js +0 -83
  488. package/dist/adapter/ezsp/driver/writer.js.map +0 -1
  489. package/dist/adapter/index.d.ts +0 -5
  490. package/dist/adapter/index.d.ts.map +0 -1
  491. package/dist/adapter/index.js +0 -36
  492. package/dist/adapter/index.js.map +0 -1
  493. package/dist/adapter/serialPort.d.ts +0 -14
  494. package/dist/adapter/serialPort.d.ts.map +0 -1
  495. package/dist/adapter/serialPort.js +0 -47
  496. package/dist/adapter/serialPort.js.map +0 -1
  497. package/dist/adapter/serialPortUtils.d.ts +0 -13
  498. package/dist/adapter/serialPortUtils.d.ts.map +0 -1
  499. package/dist/adapter/serialPortUtils.js +0 -19
  500. package/dist/adapter/serialPortUtils.js.map +0 -1
  501. package/dist/adapter/socketPortUtils.d.ts +0 -11
  502. package/dist/adapter/socketPortUtils.d.ts.map +0 -1
  503. package/dist/adapter/socketPortUtils.js +0 -17
  504. package/dist/adapter/socketPortUtils.js.map +0 -1
  505. package/dist/adapter/tstype.d.ts +0 -86
  506. package/dist/adapter/tstype.d.ts.map +0 -1
  507. package/dist/adapter/tstype.js +0 -3
  508. package/dist/adapter/tstype.js.map +0 -1
  509. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +0 -62
  510. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +0 -1
  511. package/dist/adapter/z-stack/adapter/adapter-backup.js +0 -459
  512. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +0 -1
  513. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +0 -151
  514. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +0 -1
  515. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +0 -259
  516. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +0 -1
  517. package/dist/adapter/z-stack/adapter/endpoints.d.ts +0 -12
  518. package/dist/adapter/z-stack/adapter/endpoints.d.ts.map +0 -1
  519. package/dist/adapter/z-stack/adapter/endpoints.js +0 -74
  520. package/dist/adapter/z-stack/adapter/endpoints.js.map +0 -1
  521. package/dist/adapter/z-stack/adapter/index.d.ts +0 -3
  522. package/dist/adapter/z-stack/adapter/index.d.ts.map +0 -1
  523. package/dist/adapter/z-stack/adapter/index.js +0 -9
  524. package/dist/adapter/z-stack/adapter/index.js.map +0 -1
  525. package/dist/adapter/z-stack/adapter/manager.d.ts +0 -84
  526. package/dist/adapter/z-stack/adapter/manager.d.ts.map +0 -1
  527. package/dist/adapter/z-stack/adapter/manager.js +0 -474
  528. package/dist/adapter/z-stack/adapter/manager.js.map +0 -1
  529. package/dist/adapter/z-stack/adapter/tstype.d.ts +0 -7
  530. package/dist/adapter/z-stack/adapter/tstype.d.ts.map +0 -1
  531. package/dist/adapter/z-stack/adapter/tstype.js +0 -10
  532. package/dist/adapter/z-stack/adapter/tstype.js.map +0 -1
  533. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +0 -86
  534. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +0 -1
  535. package/dist/adapter/z-stack/adapter/zStackAdapter.js +0 -912
  536. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +0 -1
  537. package/dist/adapter/z-stack/constants/af.d.ts +0 -24
  538. package/dist/adapter/z-stack/constants/af.d.ts.map +0 -1
  539. package/dist/adapter/z-stack/constants/af.js +0 -28
  540. package/dist/adapter/z-stack/constants/af.js.map +0 -1
  541. package/dist/adapter/z-stack/constants/common.d.ts +0 -279
  542. package/dist/adapter/z-stack/constants/common.d.ts.map +0 -1
  543. package/dist/adapter/z-stack/constants/common.js +0 -293
  544. package/dist/adapter/z-stack/constants/common.js.map +0 -1
  545. package/dist/adapter/z-stack/constants/dbg.d.ts +0 -23
  546. package/dist/adapter/z-stack/constants/dbg.d.ts.map +0 -1
  547. package/dist/adapter/z-stack/constants/dbg.js +0 -25
  548. package/dist/adapter/z-stack/constants/dbg.js.map +0 -1
  549. package/dist/adapter/z-stack/constants/index.d.ts +0 -11
  550. package/dist/adapter/z-stack/constants/index.d.ts.map +0 -1
  551. package/dist/adapter/z-stack/constants/index.js +0 -48
  552. package/dist/adapter/z-stack/constants/index.js.map +0 -1
  553. package/dist/adapter/z-stack/constants/mac.d.ts +0 -128
  554. package/dist/adapter/z-stack/constants/mac.d.ts.map +0 -1
  555. package/dist/adapter/z-stack/constants/mac.js +0 -130
  556. package/dist/adapter/z-stack/constants/mac.js.map +0 -1
  557. package/dist/adapter/z-stack/constants/sapi.d.ts +0 -25
  558. package/dist/adapter/z-stack/constants/sapi.d.ts.map +0 -1
  559. package/dist/adapter/z-stack/constants/sapi.js +0 -27
  560. package/dist/adapter/z-stack/constants/sapi.js.map +0 -1
  561. package/dist/adapter/z-stack/constants/sys.d.ts +0 -72
  562. package/dist/adapter/z-stack/constants/sys.d.ts.map +0 -1
  563. package/dist/adapter/z-stack/constants/sys.js +0 -74
  564. package/dist/adapter/z-stack/constants/sys.js.map +0 -1
  565. package/dist/adapter/z-stack/constants/util.d.ts +0 -82
  566. package/dist/adapter/z-stack/constants/util.d.ts.map +0 -1
  567. package/dist/adapter/z-stack/constants/util.js +0 -84
  568. package/dist/adapter/z-stack/constants/util.js.map +0 -1
  569. package/dist/adapter/z-stack/constants/utils.d.ts +0 -5
  570. package/dist/adapter/z-stack/constants/utils.d.ts.map +0 -1
  571. package/dist/adapter/z-stack/constants/utils.js +0 -15
  572. package/dist/adapter/z-stack/constants/utils.js.map +0 -1
  573. package/dist/adapter/z-stack/constants/zdo.d.ts +0 -103
  574. package/dist/adapter/z-stack/constants/zdo.d.ts.map +0 -1
  575. package/dist/adapter/z-stack/constants/zdo.js +0 -105
  576. package/dist/adapter/z-stack/constants/zdo.js.map +0 -1
  577. package/dist/adapter/z-stack/models/index.d.ts +0 -2
  578. package/dist/adapter/z-stack/models/index.d.ts.map +0 -1
  579. package/dist/adapter/z-stack/models/index.js +0 -18
  580. package/dist/adapter/z-stack/models/index.js.map +0 -1
  581. package/dist/adapter/z-stack/models/startup-options.d.ts +0 -13
  582. package/dist/adapter/z-stack/models/startup-options.d.ts.map +0 -1
  583. package/dist/adapter/z-stack/models/startup-options.js +0 -3
  584. package/dist/adapter/z-stack/models/startup-options.js.map +0 -1
  585. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +0 -24
  586. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +0 -1
  587. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +0 -46
  588. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +0 -1
  589. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +0 -11
  590. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +0 -1
  591. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +0 -23
  592. package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +0 -1
  593. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +0 -11
  594. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +0 -1
  595. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +0 -22
  596. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +0 -1
  597. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +0 -11
  598. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +0 -1
  599. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +0 -24
  600. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +0 -1
  601. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +0 -11
  602. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +0 -1
  603. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +0 -25
  604. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +0 -1
  605. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +0 -11
  606. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +0 -1
  607. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +0 -24
  608. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +0 -1
  609. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +0 -9
  610. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +0 -1
  611. package/dist/adapter/z-stack/structs/entries/channel-list.js +0 -16
  612. package/dist/adapter/z-stack/structs/entries/channel-list.js.map +0 -1
  613. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +0 -9
  614. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +0 -1
  615. package/dist/adapter/z-stack/structs/entries/has-configured.js +0 -17
  616. package/dist/adapter/z-stack/structs/entries/has-configured.js.map +0 -1
  617. package/dist/adapter/z-stack/structs/entries/index.d.ts +0 -17
  618. package/dist/adapter/z-stack/structs/entries/index.d.ts.map +0 -1
  619. package/dist/adapter/z-stack/structs/entries/index.js +0 -33
  620. package/dist/adapter/z-stack/structs/entries/index.js.map +0 -1
  621. package/dist/adapter/z-stack/structs/entries/nib.d.ts +0 -11
  622. package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +0 -1
  623. package/dist/adapter/z-stack/structs/entries/nib.js +0 -69
  624. package/dist/adapter/z-stack/structs/entries/nib.js.map +0 -1
  625. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +0 -11
  626. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +0 -1
  627. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +0 -19
  628. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +0 -1
  629. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +0 -9
  630. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +0 -1
  631. package/dist/adapter/z-stack/structs/entries/nwk-key.js +0 -16
  632. package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +0 -1
  633. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +0 -9
  634. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +0 -1
  635. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +0 -16
  636. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +0 -1
  637. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +0 -14
  638. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +0 -1
  639. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +0 -24
  640. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +0 -1
  641. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +0 -11
  642. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +0 -1
  643. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +0 -23
  644. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +0 -1
  645. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +0 -21
  646. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +0 -1
  647. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +0 -37
  648. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +0 -1
  649. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +0 -11
  650. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +0 -1
  651. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +0 -25
  652. package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +0 -1
  653. package/dist/adapter/z-stack/structs/index.d.ts +0 -5
  654. package/dist/adapter/z-stack/structs/index.d.ts.map +0 -1
  655. package/dist/adapter/z-stack/structs/index.js +0 -21
  656. package/dist/adapter/z-stack/structs/index.js.map +0 -1
  657. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +0 -14
  658. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +0 -1
  659. package/dist/adapter/z-stack/structs/serializable-memory-object.js +0 -3
  660. package/dist/adapter/z-stack/structs/serializable-memory-object.js.map +0 -1
  661. package/dist/adapter/z-stack/structs/struct.d.ts +0 -100
  662. package/dist/adapter/z-stack/structs/struct.d.ts.map +0 -1
  663. package/dist/adapter/z-stack/structs/struct.js +0 -297
  664. package/dist/adapter/z-stack/structs/struct.js.map +0 -1
  665. package/dist/adapter/z-stack/structs/table.d.ts +0 -95
  666. package/dist/adapter/z-stack/structs/table.d.ts.map +0 -1
  667. package/dist/adapter/z-stack/structs/table.js +0 -164
  668. package/dist/adapter/z-stack/structs/table.js.map +0 -1
  669. package/dist/adapter/z-stack/unpi/constants.d.ts +0 -29
  670. package/dist/adapter/z-stack/unpi/constants.d.ts.map +0 -1
  671. package/dist/adapter/z-stack/unpi/constants.js +0 -40
  672. package/dist/adapter/z-stack/unpi/constants.js.map +0 -1
  673. package/dist/adapter/z-stack/unpi/frame.d.ts +0 -17
  674. package/dist/adapter/z-stack/unpi/frame.d.ts.map +0 -1
  675. package/dist/adapter/z-stack/unpi/frame.js +0 -55
  676. package/dist/adapter/z-stack/unpi/frame.js.map +0 -1
  677. package/dist/adapter/z-stack/unpi/index.d.ts +0 -6
  678. package/dist/adapter/z-stack/unpi/index.d.ts.map +0 -1
  679. package/dist/adapter/z-stack/unpi/index.js +0 -38
  680. package/dist/adapter/z-stack/unpi/index.js.map +0 -1
  681. package/dist/adapter/z-stack/unpi/parser.d.ts +0 -13
  682. package/dist/adapter/z-stack/unpi/parser.d.ts.map +0 -1
  683. package/dist/adapter/z-stack/unpi/parser.js +0 -86
  684. package/dist/adapter/z-stack/unpi/parser.js.map +0 -1
  685. package/dist/adapter/z-stack/unpi/writer.d.ts +0 -12
  686. package/dist/adapter/z-stack/unpi/writer.d.ts.map +0 -1
  687. package/dist/adapter/z-stack/unpi/writer.js +0 -55
  688. package/dist/adapter/z-stack/unpi/writer.js.map +0 -1
  689. package/dist/adapter/z-stack/utils/channel-list.d.ts +0 -21
  690. package/dist/adapter/z-stack/utils/channel-list.d.ts.map +0 -1
  691. package/dist/adapter/z-stack/utils/channel-list.js +0 -41
  692. package/dist/adapter/z-stack/utils/channel-list.js.map +0 -1
  693. package/dist/adapter/z-stack/utils/index.d.ts +0 -3
  694. package/dist/adapter/z-stack/utils/index.d.ts.map +0 -1
  695. package/dist/adapter/z-stack/utils/index.js +0 -19
  696. package/dist/adapter/z-stack/utils/index.js.map +0 -1
  697. package/dist/adapter/z-stack/utils/network-options.d.ts +0 -9
  698. package/dist/adapter/z-stack/utils/network-options.d.ts.map +0 -1
  699. package/dist/adapter/z-stack/utils/network-options.js +0 -23
  700. package/dist/adapter/z-stack/utils/network-options.js.map +0 -1
  701. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +0 -14
  702. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +0 -1
  703. package/dist/adapter/z-stack/znp/buffaloZnp.js +0 -243
  704. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +0 -1
  705. package/dist/adapter/z-stack/znp/definition.d.ts +0 -6
  706. package/dist/adapter/z-stack/znp/definition.d.ts.map +0 -1
  707. package/dist/adapter/z-stack/znp/definition.js +0 -3052
  708. package/dist/adapter/z-stack/znp/definition.js.map +0 -1
  709. package/dist/adapter/z-stack/znp/index.d.ts +0 -4
  710. package/dist/adapter/z-stack/znp/index.d.ts.map +0 -1
  711. package/dist/adapter/z-stack/znp/index.js +0 -11
  712. package/dist/adapter/z-stack/znp/index.js.map +0 -1
  713. package/dist/adapter/z-stack/znp/parameterType.d.ts +0 -23
  714. package/dist/adapter/z-stack/znp/parameterType.d.ts.map +0 -1
  715. package/dist/adapter/z-stack/znp/parameterType.js +0 -26
  716. package/dist/adapter/z-stack/znp/parameterType.js.map +0 -1
  717. package/dist/adapter/z-stack/znp/tstype.d.ts +0 -23
  718. package/dist/adapter/z-stack/znp/tstype.d.ts.map +0 -1
  719. package/dist/adapter/z-stack/znp/tstype.js +0 -3
  720. package/dist/adapter/z-stack/znp/tstype.js.map +0 -1
  721. package/dist/adapter/z-stack/znp/znp.d.ts +0 -47
  722. package/dist/adapter/z-stack/znp/znp.d.ts.map +0 -1
  723. package/dist/adapter/z-stack/znp/znp.js +0 -322
  724. package/dist/adapter/z-stack/znp/znp.js.map +0 -1
  725. package/dist/adapter/z-stack/znp/zpiObject.d.ts +0 -20
  726. package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +0 -1
  727. package/dist/adapter/z-stack/znp/zpiObject.js +0 -103
  728. package/dist/adapter/z-stack/znp/zpiObject.js.map +0 -1
  729. package/dist/adapter/zigate/adapter/index.d.ts +0 -3
  730. package/dist/adapter/zigate/adapter/index.d.ts.map +0 -1
  731. package/dist/adapter/zigate/adapter/index.js +0 -11
  732. package/dist/adapter/zigate/adapter/index.js.map +0 -1
  733. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +0 -72
  734. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +0 -1
  735. package/dist/adapter/zigate/adapter/zigateAdapter.js +0 -681
  736. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +0 -1
  737. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +0 -18
  738. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +0 -1
  739. package/dist/adapter/zigate/driver/buffaloZiGate.js +0 -190
  740. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +0 -1
  741. package/dist/adapter/zigate/driver/commandType.d.ts +0 -43
  742. package/dist/adapter/zigate/driver/commandType.d.ts.map +0 -1
  743. package/dist/adapter/zigate/driver/commandType.js +0 -390
  744. package/dist/adapter/zigate/driver/commandType.js.map +0 -1
  745. package/dist/adapter/zigate/driver/constants.d.ts +0 -277
  746. package/dist/adapter/zigate/driver/constants.d.ts.map +0 -1
  747. package/dist/adapter/zigate/driver/constants.js +0 -372
  748. package/dist/adapter/zigate/driver/constants.js.map +0 -1
  749. package/dist/adapter/zigate/driver/frame.d.ts +0 -27
  750. package/dist/adapter/zigate/driver/frame.d.ts.map +0 -1
  751. package/dist/adapter/zigate/driver/frame.js +0 -173
  752. package/dist/adapter/zigate/driver/frame.js.map +0 -1
  753. package/dist/adapter/zigate/driver/messageType.d.ts +0 -13
  754. package/dist/adapter/zigate/driver/messageType.d.ts.map +0 -1
  755. package/dist/adapter/zigate/driver/messageType.js +0 -284
  756. package/dist/adapter/zigate/driver/messageType.js.map +0 -1
  757. package/dist/adapter/zigate/driver/parameterType.d.ts +0 -28
  758. package/dist/adapter/zigate/driver/parameterType.d.ts.map +0 -1
  759. package/dist/adapter/zigate/driver/parameterType.js +0 -33
  760. package/dist/adapter/zigate/driver/parameterType.js.map +0 -1
  761. package/dist/adapter/zigate/driver/ziGateObject.d.ts +0 -24
  762. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +0 -1
  763. package/dist/adapter/zigate/driver/ziGateObject.js +0 -111
  764. package/dist/adapter/zigate/driver/ziGateObject.js.map +0 -1
  765. package/dist/adapter/zigate/driver/zigate.d.ts +0 -50
  766. package/dist/adapter/zigate/driver/zigate.d.ts.map +0 -1
  767. package/dist/adapter/zigate/driver/zigate.js +0 -289
  768. package/dist/adapter/zigate/driver/zigate.js.map +0 -1
  769. package/dist/buffalo/buffalo.d.ts +0 -55
  770. package/dist/buffalo/buffalo.d.ts.map +0 -1
  771. package/dist/buffalo/buffalo.js +0 -230
  772. package/dist/buffalo/buffalo.js.map +0 -1
  773. package/dist/buffalo/index.d.ts +0 -3
  774. package/dist/buffalo/index.d.ts.map +0 -1
  775. package/dist/buffalo/index.js +0 -9
  776. package/dist/buffalo/index.js.map +0 -1
  777. package/dist/controller/controller.d.ts +0 -119
  778. package/dist/controller/controller.d.ts.map +0 -1
  779. package/dist/controller/controller.js +0 -700
  780. package/dist/controller/controller.js.map +0 -1
  781. package/dist/controller/database.d.ts +0 -20
  782. package/dist/controller/database.d.ts.map +0 -1
  783. package/dist/controller/database.js +0 -94
  784. package/dist/controller/database.js.map +0 -1
  785. package/dist/controller/events.d.ts +0 -59
  786. package/dist/controller/events.d.ts.map +0 -1
  787. package/dist/controller/events.js +0 -113
  788. package/dist/controller/events.js.map +0 -1
  789. package/dist/controller/greenPower.d.ts +0 -14
  790. package/dist/controller/greenPower.d.ts.map +0 -1
  791. package/dist/controller/greenPower.js +0 -216
  792. package/dist/controller/greenPower.js.map +0 -1
  793. package/dist/controller/helpers/index.d.ts +0 -3
  794. package/dist/controller/helpers/index.d.ts.map +0 -1
  795. package/dist/controller/helpers/index.js +0 -29
  796. package/dist/controller/helpers/index.js.map +0 -1
  797. package/dist/controller/helpers/request.d.ts +0 -22
  798. package/dist/controller/helpers/request.d.ts.map +0 -1
  799. package/dist/controller/helpers/request.js +0 -78
  800. package/dist/controller/helpers/request.js.map +0 -1
  801. package/dist/controller/helpers/requestQueue.d.ts +0 -13
  802. package/dist/controller/helpers/requestQueue.d.ts.map +0 -1
  803. package/dist/controller/helpers/requestQueue.js +0 -106
  804. package/dist/controller/helpers/requestQueue.js.map +0 -1
  805. package/dist/controller/helpers/zclFrameConverter.d.ts +0 -9
  806. package/dist/controller/helpers/zclFrameConverter.d.ts.map +0 -1
  807. package/dist/controller/helpers/zclFrameConverter.js +0 -70
  808. package/dist/controller/helpers/zclFrameConverter.js.map +0 -1
  809. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +0 -6
  810. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +0 -1
  811. package/dist/controller/helpers/zclTransactionSequenceNumber.js +0 -14
  812. package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +0 -1
  813. package/dist/controller/index.d.ts +0 -6
  814. package/dist/controller/index.d.ts.map +0 -1
  815. package/dist/controller/index.js +0 -9
  816. package/dist/controller/index.js.map +0 -1
  817. package/dist/controller/model/device.d.ts +0 -140
  818. package/dist/controller/model/device.d.ts.map +0 -1
  819. package/dist/controller/model/device.js +0 -746
  820. package/dist/controller/model/device.js.map +0 -1
  821. package/dist/controller/model/endpoint.d.ts +0 -134
  822. package/dist/controller/model/endpoint.d.ts.map +0 -1
  823. package/dist/controller/model/endpoint.js +0 -667
  824. package/dist/controller/model/endpoint.js.map +0 -1
  825. package/dist/controller/model/entity.d.ts +0 -15
  826. package/dist/controller/model/entity.d.ts.map +0 -1
  827. package/dist/controller/model/entity.js +0 -27
  828. package/dist/controller/model/entity.js.map +0 -1
  829. package/dist/controller/model/group.d.ts +0 -39
  830. package/dist/controller/model/group.d.ts.map +0 -1
  831. package/dist/controller/model/group.js +0 -226
  832. package/dist/controller/model/group.js.map +0 -1
  833. package/dist/controller/model/index.d.ts +0 -6
  834. package/dist/controller/model/index.d.ts.map +0 -1
  835. package/dist/controller/model/index.js +0 -15
  836. package/dist/controller/model/index.js.map +0 -1
  837. package/dist/controller/model/konnextConfig.d.ts +0 -7
  838. package/dist/controller/model/konnextConfig.d.ts.map +0 -1
  839. package/dist/controller/model/konnextConfig.js +0 -3
  840. package/dist/controller/model/konnextConfig.js.map +0 -1
  841. package/dist/controller/touchlink.d.ts +0 -20
  842. package/dist/controller/touchlink.d.ts.map +0 -1
  843. package/dist/controller/touchlink.js +0 -157
  844. package/dist/controller/touchlink.js.map +0 -1
  845. package/dist/controller/tstype.d.ts +0 -21
  846. package/dist/controller/tstype.d.ts.map +0 -1
  847. package/dist/controller/tstype.js +0 -9
  848. package/dist/controller/tstype.js.map +0 -1
  849. package/dist/index.d.ts +0 -6
  850. package/dist/index.d.ts.map +0 -1
  851. package/dist/index.js +0 -37
  852. package/dist/index.js.map +0 -1
  853. package/dist/models/backup-storage-legacy.d.ts +0 -27
  854. package/dist/models/backup-storage-legacy.d.ts.map +0 -1
  855. package/dist/models/backup-storage-legacy.js +0 -3
  856. package/dist/models/backup-storage-legacy.js.map +0 -1
  857. package/dist/models/backup-storage-unified.d.ts +0 -50
  858. package/dist/models/backup-storage-unified.d.ts.map +0 -1
  859. package/dist/models/backup-storage-unified.js +0 -3
  860. package/dist/models/backup-storage-unified.js.map +0 -1
  861. package/dist/models/backup.d.ts +0 -38
  862. package/dist/models/backup.d.ts.map +0 -1
  863. package/dist/models/backup.js +0 -3
  864. package/dist/models/backup.js.map +0 -1
  865. package/dist/models/index.d.ts +0 -5
  866. package/dist/models/index.d.ts.map +0 -1
  867. package/dist/models/index.js +0 -21
  868. package/dist/models/index.js.map +0 -1
  869. package/dist/models/network-options.d.ts +0 -13
  870. package/dist/models/network-options.d.ts.map +0 -1
  871. package/dist/models/network-options.js +0 -3
  872. package/dist/models/network-options.js.map +0 -1
  873. package/dist/utils/aes.d.ts +0 -40
  874. package/dist/utils/aes.d.ts.map +0 -1
  875. package/dist/utils/aes.js +0 -198
  876. package/dist/utils/aes.js.map +0 -1
  877. package/dist/utils/assertString.d.ts +0 -3
  878. package/dist/utils/assertString.d.ts.map +0 -1
  879. package/dist/utils/assertString.js +0 -9
  880. package/dist/utils/assertString.js.map +0 -1
  881. package/dist/utils/backup.d.ts +0 -21
  882. package/dist/utils/backup.d.ts.map +0 -1
  883. package/dist/utils/backup.js +0 -190
  884. package/dist/utils/backup.js.map +0 -1
  885. package/dist/utils/equalsPartial.d.ts +0 -3
  886. package/dist/utils/equalsPartial.d.ts.map +0 -1
  887. package/dist/utils/equalsPartial.js +0 -12
  888. package/dist/utils/equalsPartial.js.map +0 -1
  889. package/dist/utils/index.d.ts +0 -10
  890. package/dist/utils/index.d.ts.map +0 -1
  891. package/dist/utils/index.js +0 -46
  892. package/dist/utils/index.js.map +0 -1
  893. package/dist/utils/isNumberArray.d.ts +0 -3
  894. package/dist/utils/isNumberArray.d.ts.map +0 -1
  895. package/dist/utils/isNumberArray.js +0 -7
  896. package/dist/utils/isNumberArray.js.map +0 -1
  897. package/dist/utils/logger.d.ts +0 -9
  898. package/dist/utils/logger.d.ts.map +0 -1
  899. package/dist/utils/logger.js +0 -14
  900. package/dist/utils/logger.js.map +0 -1
  901. package/dist/utils/queue.d.ts +0 -12
  902. package/dist/utils/queue.d.ts.map +0 -1
  903. package/dist/utils/queue.js +0 -62
  904. package/dist/utils/queue.js.map +0 -1
  905. package/dist/utils/realpathSync.d.ts +0 -3
  906. package/dist/utils/realpathSync.d.ts.map +0 -1
  907. package/dist/utils/realpathSync.js +0 -13
  908. package/dist/utils/realpathSync.js.map +0 -1
  909. package/dist/utils/wait.d.ts +0 -3
  910. package/dist/utils/wait.d.ts.map +0 -1
  911. package/dist/utils/wait.js +0 -9
  912. package/dist/utils/wait.js.map +0 -1
  913. package/dist/utils/waitress.d.ts +0 -22
  914. package/dist/utils/waitress.d.ts.map +0 -1
  915. package/dist/utils/waitress.js +0 -69
  916. package/dist/utils/waitress.js.map +0 -1
  917. package/dist/zspec/consts.d.ts +0 -60
  918. package/dist/zspec/consts.d.ts.map +0 -1
  919. package/dist/zspec/consts.js +0 -64
  920. package/dist/zspec/consts.js.map +0 -1
  921. package/dist/zspec/enums.d.ts +0 -19
  922. package/dist/zspec/enums.d.ts.map +0 -1
  923. package/dist/zspec/enums.js +0 -28
  924. package/dist/zspec/enums.js.map +0 -1
  925. package/dist/zspec/index.d.ts +0 -4
  926. package/dist/zspec/index.d.ts.map +0 -1
  927. package/dist/zspec/index.js +0 -43
  928. package/dist/zspec/index.js.map +0 -1
  929. package/dist/zspec/tstypes.d.ts +0 -19
  930. package/dist/zspec/tstypes.d.ts.map +0 -1
  931. package/dist/zspec/tstypes.js +0 -3
  932. package/dist/zspec/tstypes.js.map +0 -1
  933. package/dist/zspec/utils.d.ts +0 -14
  934. package/dist/zspec/utils.d.ts.map +0 -1
  935. package/dist/zspec/utils.js +0 -29
  936. package/dist/zspec/utils.js.map +0 -1
  937. package/dist/zspec/zcl/buffaloZcl.d.ts +0 -55
  938. package/dist/zspec/zcl/buffaloZcl.d.ts.map +0 -1
  939. package/dist/zspec/zcl/buffaloZcl.js +0 -929
  940. package/dist/zspec/zcl/buffaloZcl.js.map +0 -1
  941. package/dist/zspec/zcl/definition/cluster.d.ts +0 -3
  942. package/dist/zspec/zcl/definition/cluster.d.ts.map +0 -1
  943. package/dist/zspec/zcl/definition/cluster.js +0 -5500
  944. package/dist/zspec/zcl/definition/cluster.js.map +0 -1
  945. package/dist/zspec/zcl/definition/consts.d.ts +0 -9
  946. package/dist/zspec/zcl/definition/consts.d.ts.map +0 -1
  947. package/dist/zspec/zcl/definition/consts.js +0 -27
  948. package/dist/zspec/zcl/definition/consts.js.map +0 -1
  949. package/dist/zspec/zcl/definition/enums.d.ts +0 -177
  950. package/dist/zspec/zcl/definition/enums.d.ts.map +0 -1
  951. package/dist/zspec/zcl/definition/enums.js +0 -187
  952. package/dist/zspec/zcl/definition/enums.js.map +0 -1
  953. package/dist/zspec/zcl/definition/foundation.d.ts +0 -11
  954. package/dist/zspec/zcl/definition/foundation.d.ts.map +0 -1
  955. package/dist/zspec/zcl/definition/foundation.js +0 -241
  956. package/dist/zspec/zcl/definition/foundation.js.map +0 -1
  957. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +0 -727
  958. package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +0 -1
  959. package/dist/zspec/zcl/definition/manufacturerCode.js +0 -733
  960. package/dist/zspec/zcl/definition/manufacturerCode.js.map +0 -1
  961. package/dist/zspec/zcl/definition/status.d.ts +0 -69
  962. package/dist/zspec/zcl/definition/status.d.ts.map +0 -1
  963. package/dist/zspec/zcl/definition/status.js +0 -74
  964. package/dist/zspec/zcl/definition/status.js.map +0 -1
  965. package/dist/zspec/zcl/definition/tstype.d.ts +0 -114
  966. package/dist/zspec/zcl/definition/tstype.d.ts.map +0 -1
  967. package/dist/zspec/zcl/definition/tstype.js +0 -4
  968. package/dist/zspec/zcl/definition/tstype.js.map +0 -1
  969. package/dist/zspec/zcl/index.d.ts +0 -11
  970. package/dist/zspec/zcl/index.d.ts.map +0 -1
  971. package/dist/zspec/zcl/index.js +0 -47
  972. package/dist/zspec/zcl/index.js.map +0 -1
  973. package/dist/zspec/zcl/utils.d.ts +0 -7
  974. package/dist/zspec/zcl/utils.d.ts.map +0 -1
  975. package/dist/zspec/zcl/utils.js +0 -234
  976. package/dist/zspec/zcl/utils.js.map +0 -1
  977. package/dist/zspec/zcl/zclFrame.d.ts +0 -36
  978. package/dist/zspec/zcl/zclFrame.d.ts.map +0 -1
  979. package/dist/zspec/zcl/zclFrame.js +0 -304
  980. package/dist/zspec/zcl/zclFrame.js.map +0 -1
  981. package/dist/zspec/zcl/zclHeader.d.ts +0 -17
  982. package/dist/zspec/zcl/zclHeader.d.ts.map +0 -1
  983. package/dist/zspec/zcl/zclHeader.js +0 -88
  984. package/dist/zspec/zcl/zclHeader.js.map +0 -1
  985. package/dist/zspec/zcl/zclStatusError.d.ts +0 -6
  986. package/dist/zspec/zcl/zclStatusError.d.ts.map +0 -1
  987. package/dist/zspec/zcl/zclStatusError.js +0 -13
  988. package/dist/zspec/zcl/zclStatusError.js.map +0 -1
  989. package/dist/zspec/zdo/buffaloZdo.d.ts +0 -438
  990. package/dist/zspec/zdo/buffaloZdo.d.ts.map +0 -1
  991. package/dist/zspec/zdo/buffaloZdo.js +0 -1892
  992. package/dist/zspec/zdo/buffaloZdo.js.map +0 -1
  993. package/dist/zspec/zdo/definition/clusters.d.ts +0 -624
  994. package/dist/zspec/zdo/definition/clusters.d.ts.map +0 -1
  995. package/dist/zspec/zdo/definition/clusters.js +0 -687
  996. package/dist/zspec/zdo/definition/clusters.js.map +0 -1
  997. package/dist/zspec/zdo/definition/consts.d.ts +0 -13
  998. package/dist/zspec/zdo/definition/consts.d.ts.map +0 -1
  999. package/dist/zspec/zdo/definition/consts.js +0 -16
  1000. package/dist/zspec/zdo/definition/consts.js.map +0 -1
  1001. package/dist/zspec/zdo/definition/enums.d.ts +0 -75
  1002. package/dist/zspec/zdo/definition/enums.d.ts.map +0 -1
  1003. package/dist/zspec/zdo/definition/enums.js +0 -97
  1004. package/dist/zspec/zdo/definition/enums.js.map +0 -1
  1005. package/dist/zspec/zdo/definition/status.d.ts +0 -99
  1006. package/dist/zspec/zdo/definition/status.d.ts.map +0 -1
  1007. package/dist/zspec/zdo/definition/status.js +0 -109
  1008. package/dist/zspec/zdo/definition/status.js.map +0 -1
  1009. package/dist/zspec/zdo/definition/tstypes.d.ts +0 -787
  1010. package/dist/zspec/zdo/definition/tstypes.d.ts.map +0 -1
  1011. package/dist/zspec/zdo/definition/tstypes.js +0 -3
  1012. package/dist/zspec/zdo/definition/tstypes.js.map +0 -1
  1013. package/dist/zspec/zdo/index.d.ts +0 -7
  1014. package/dist/zspec/zdo/index.d.ts.map +0 -1
  1015. package/dist/zspec/zdo/index.js +0 -39
  1016. package/dist/zspec/zdo/index.js.map +0 -1
  1017. package/dist/zspec/zdo/utils.d.ts +0 -25
  1018. package/dist/zspec/zdo/utils.d.ts.map +0 -1
  1019. package/dist/zspec/zdo/utils.js +0 -75
  1020. package/dist/zspec/zdo/utils.js.map +0 -1
  1021. package/dist/zspec/zdo/zdoStatusError.d.ts +0 -6
  1022. package/dist/zspec/zdo/zdoStatusError.d.ts.map +0 -1
  1023. package/dist/zspec/zdo/zdoStatusError.js +0 -13
  1024. package/dist/zspec/zdo/zdoStatusError.js.map +0 -1
  1025. package/typedoc-tsconfig.json +0 -44
@@ -0,0 +1,1451 @@
1
+ import {randomBytes} from "node:crypto";
2
+ import {mkdirSync, rmSync, writeFileSync} from "node:fs";
3
+ import {join} from "node:path";
4
+ import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest";
5
+ import {encodeSpinelFrame, SPINEL_HEADER_FLG_SPINEL} from "zigbee-on-host/dist/spinel/spinel";
6
+ import {SpinelStatus} from "zigbee-on-host/dist/spinel/statuses";
7
+ import type {MACCapabilities} from "zigbee-on-host/dist/zigbee/mac";
8
+ import type {ZigbeeNWKLinkStatus} from "zigbee-on-host/dist/zigbee/zigbee-nwk";
9
+ import {bigUInt64ToHexBE} from "../../../src/adapter/zoh/adapter/utils";
10
+ import {DEFAULT_STACK_CONFIG, type StackConfigJSON, ZoHAdapter} from "../../../src/adapter/zoh/adapter/zohAdapter";
11
+ import * as ZSpec from "../../../src/zspec";
12
+ import * as Zcl from "../../../src/zspec/zcl";
13
+ import * as Zdo from "../../../src/zspec/zdo";
14
+
15
+ const TEMP_PATH = "zoh-tmp";
16
+ const TEMP_PATH_SAVE = join(TEMP_PATH, "zoh.save");
17
+ const TEMP_PATH_CONFIG = join(TEMP_PATH, "zoh_config.json");
18
+ const DEFAULT_PAN_ID = 0x1a62;
19
+ const DEFAULT_EXT_PAN_ID = [0xdd, 0x11, 0x22, 0xdd, 0xdd, 0x33, 0x44, 0xdd];
20
+ const DEFAULT_CHANNEL = 11;
21
+ const DEFAULT_NETWORK_KEY = [0x11, 0x03, 0x15, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x00, 0x02, 0x04, 0x06, 0x08, 0x1a, 0x1c, 0x1d];
22
+ const DEFAULT_TX_POWER = 19;
23
+ const DEFAULT_STATE: Awaited<ReturnType<ZoHAdapter["driver"]["context"]["readNetworkState"]>> = {
24
+ eui64: Buffer.from([0x5a, 0x6f, 0x48, 0x6f, 0x6e, 0x5a, 0x32, 0x4d]).readBigUInt64LE(0),
25
+ panId: DEFAULT_PAN_ID,
26
+ extendedPanId: Buffer.from(DEFAULT_EXT_PAN_ID).readBigUInt64LE(0),
27
+ channel: DEFAULT_CHANNEL,
28
+ nwkUpdateId: 0,
29
+ txPower: DEFAULT_TX_POWER,
30
+ // ZigBeeAlliance09
31
+ tcKey: Buffer.from([0x5a, 0x69, 0x67, 0x42, 0x65, 0x65, 0x41, 0x6c, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x30, 0x39]),
32
+ tcKeyFrameCounter: 0,
33
+ networkKey: Buffer.from(DEFAULT_NETWORK_KEY),
34
+ networkKeyFrameCounter: 0,
35
+ networkKeySequenceNumber: 0,
36
+ deviceEntries: [],
37
+ appLinkKeys: [],
38
+ };
39
+
40
+ // biome-ignore lint/correctness/noUnusedVariables: dev
41
+ const randomBigInt = (): bigint => BigInt(`0x${randomBytes(8).toString("hex")}`);
42
+
43
+ /** SL-OPENTHREAD/2.5.2.0_GitHub-1fceb225b; EFR32; Mar 19 2025 13:45:44 */
44
+ const START_FRAMES_SILABS = {
45
+ protocolVersion: "7e8106010403db0a7e",
46
+ ncpVersion:
47
+ "7e820602534c2d4f50454e5448524541442f322e352e322e305f4769744875622d3166636562323235623b2045465233323b204d617220313920323032352031333a34353a343400b5dc7e",
48
+ interfaceType: "7e83060303573a7e",
49
+ rcpAPIVersion: "7e8406b0010a681f7e",
50
+ rcpMinHostAPIVersion: "7e8506b101048ea77e",
51
+ resetPowerOn: "7e80060070ee747e",
52
+ };
53
+ /** SL-OPENTHREAD/2.5.2.0_GitHub-1fceb225b; EFR32; Mar 19 2025 13:45:44 */
54
+ const FORM_FRAMES_SILABS = {
55
+ phyEnabled: "7e87062001f2627e",
56
+ phyChan: "7e88062114ff8e7e",
57
+ phyTxPowerSet: "7e8906257d339b817e",
58
+ mac154LAddr: "7e8a06344d325a6e6f486f5a8f327e",
59
+ mac154SAddr: "7e8b0635000047f67e",
60
+ mac154PANId: "7e8c0636d98579727e",
61
+ macRxOnWhenIdleMode: "7e8d060000e68c7e",
62
+ macRawStreamEnabled: "7e8e06370108437e",
63
+ phyTxPowerGet: "7e8106257d3343647e",
64
+ phyRSSIGet: "7e820626983d517e",
65
+ phyRXSensitivityGet: "7e8306279c7a127e",
66
+ phyCCAThresholdGet: "7e840624b5f0d37e",
67
+ };
68
+ // /** SL-OPENTHREAD/2.5.2.0_GitHub-1fceb225b; EFR32; Mar 19 2025 13:45:44 */
69
+ // const STOP_FRAMES_SILABS = {
70
+ // macRawStreamEnabled: "7e8b063700d63c7e",
71
+ // phyEnabled: "7e8c0620006eb37e",
72
+ // }
73
+ const COMMON_FFD_MAC_CAP: MACCapabilities = {
74
+ alternatePANCoordinator: false,
75
+ deviceType: 1,
76
+ powerSource: 1,
77
+ rxOnWhenIdle: true,
78
+ securityCapability: false,
79
+ allocateAddress: true,
80
+ };
81
+ const COMMON_RFD_MAC_CAP: MACCapabilities = {
82
+ alternatePANCoordinator: false,
83
+ deviceType: 0,
84
+ powerSource: 0,
85
+ rxOnWhenIdle: false,
86
+ securityCapability: false,
87
+ allocateAddress: true,
88
+ };
89
+
90
+ describe("Zigbee on Host", () => {
91
+ let adapter: ZoHAdapter;
92
+ let nextTidFromStartup = 1;
93
+
94
+ const makeSpinelLastStatus = (tid: number, status: SpinelStatus = SpinelStatus.OK): Buffer => {
95
+ const respSpinelFrame = {
96
+ header: {
97
+ tid,
98
+ nli: 0,
99
+ flg: SPINEL_HEADER_FLG_SPINEL,
100
+ },
101
+ commandId: 6 /* PROP_VALUE_IS */,
102
+ payload: Buffer.from([0 /* LAST_STATUS */, status]),
103
+ };
104
+ const encRespHdlcFrame = encodeSpinelFrame(respSpinelFrame);
105
+
106
+ return Buffer.from(encRespHdlcFrame.data.subarray(0, encRespHdlcFrame.length));
107
+ };
108
+
109
+ // biome-ignore lint/correctness/noUnusedVariables: dev
110
+ const makeSpinelStreamRaw = (tid: number, macFrame: Buffer, spinelMeta?: Buffer): Buffer => {
111
+ const spinelFrame = {
112
+ header: {
113
+ tid,
114
+ nli: 0,
115
+ flg: SPINEL_HEADER_FLG_SPINEL,
116
+ },
117
+ commandId: 6 /* PROP_VALUE_IS */,
118
+ payload: Buffer.from([
119
+ 113 /* STREAM_RAW */,
120
+ macFrame.byteLength & 0xff,
121
+ (macFrame.byteLength >> 8) & 0xff,
122
+ ...macFrame,
123
+ ...(spinelMeta || []),
124
+ ]),
125
+ };
126
+ const encHdlcFrame = encodeSpinelFrame(spinelFrame);
127
+
128
+ return Buffer.from(encHdlcFrame.data.subarray(0, encHdlcFrame.length));
129
+ };
130
+
131
+ const mockStart = async (loadState = true, frames = START_FRAMES_SILABS) => {
132
+ if (adapter.driver) {
133
+ let loadStateSpy: ReturnType<typeof vi.spyOn> | undefined;
134
+
135
+ if (!loadState) {
136
+ loadStateSpy = vi.spyOn(adapter.driver.context, "loadState").mockResolvedValue(undefined);
137
+ }
138
+
139
+ let i = -1;
140
+ const orderedFrames = [
141
+ frames.protocolVersion,
142
+ frames.ncpVersion,
143
+ frames.interfaceType,
144
+ frames.rcpAPIVersion,
145
+ frames.rcpMinHostAPIVersion,
146
+ frames.resetPowerOn,
147
+ ];
148
+
149
+ const reply = async () => {
150
+ await vi.advanceTimersByTimeAsync(5);
151
+
152
+ // skip cancel byte
153
+ if (i >= 0) {
154
+ adapter.driver.parser._transform(Buffer.from(orderedFrames[i], "hex"), "utf8", () => {});
155
+ await vi.advanceTimersByTimeAsync(5);
156
+ }
157
+
158
+ i++;
159
+
160
+ if (i === orderedFrames.length) {
161
+ adapter.driver.writer.removeListener("data", reply);
162
+ }
163
+ };
164
+
165
+ adapter.driver.writer.on("data", reply);
166
+ await adapter.driver.start();
167
+ loadStateSpy?.mockRestore();
168
+ await vi.advanceTimersByTimeAsync(100); // flush
169
+
170
+ nextTidFromStartup = adapter.driver.currentSpinelTID + 1;
171
+ }
172
+ };
173
+
174
+ const mockStop = async (expectThrow?: string) => {
175
+ if (adapter.driver) {
176
+ const setPropertySpy = vi.spyOn(adapter.driver, "setProperty").mockResolvedValue();
177
+
178
+ if (expectThrow !== undefined) {
179
+ await expect(adapter.driver.stop()).rejects.toThrow();
180
+ } else {
181
+ await adapter.driver.stop();
182
+ }
183
+
184
+ setPropertySpy.mockRestore();
185
+
186
+ await vi.advanceTimersByTimeAsync(100); // flush
187
+ }
188
+
189
+ nextTidFromStartup = 1;
190
+ };
191
+
192
+ const mockFormNetwork = async (registerTimers = false, frames = FORM_FRAMES_SILABS) => {
193
+ if (adapter.driver) {
194
+ let i = 0;
195
+ const orderedFrames = [
196
+ frames.phyEnabled,
197
+ frames.phyChan,
198
+ frames.phyTxPowerSet,
199
+ frames.mac154LAddr,
200
+ frames.mac154SAddr,
201
+ frames.mac154PANId,
202
+ frames.macRxOnWhenIdleMode,
203
+ frames.macRawStreamEnabled,
204
+ frames.phyTxPowerGet,
205
+ frames.phyRSSIGet,
206
+ frames.phyRXSensitivityGet,
207
+ frames.phyCCAThresholdGet,
208
+ ];
209
+
210
+ const reply = async () => {
211
+ await vi.advanceTimersByTimeAsync(5);
212
+ adapter.driver.parser._transform(Buffer.from(orderedFrames[i], "hex"), "utf8", () => {});
213
+ await vi.advanceTimersByTimeAsync(5);
214
+
215
+ i++;
216
+
217
+ if (i === orderedFrames.length) {
218
+ adapter.driver.writer.removeListener("data", reply);
219
+ }
220
+ };
221
+
222
+ adapter.driver.writer.on("data", reply);
223
+
224
+ let registerTimersSpy: ReturnType<typeof vi.spyOn> | undefined;
225
+
226
+ if (registerTimers) {
227
+ await mockStartStack();
228
+ } else {
229
+ registerTimersSpy = vi.spyOn(adapter.driver, "startStack").mockResolvedValue();
230
+ }
231
+
232
+ await adapter.driver.formNetwork();
233
+
234
+ registerTimersSpy?.mockRestore();
235
+
236
+ await vi.advanceTimersByTimeAsync(100); // flush
237
+
238
+ nextTidFromStartup = adapter.driver.currentSpinelTID + 1;
239
+ }
240
+ };
241
+
242
+ const mockStartStack = async () => {
243
+ if (adapter.driver) {
244
+ let linksSpy: ZigbeeNWKLinkStatus[] | undefined;
245
+ let manyToOneSpy: number | undefined;
246
+ let destination16Spy: number | undefined;
247
+
248
+ // creates a bottleneck with vitest & promises, noop it
249
+ const savePeriodicStateSpy = vi.spyOn(adapter.driver.context, "savePeriodicState").mockResolvedValue();
250
+ const sendLinkStatusSpy = vi.spyOn(adapter.driver.nwkHandler, "sendLinkStatus").mockImplementationOnce(async (links) => {
251
+ linksSpy = links;
252
+ const p = adapter.driver.nwkHandler.sendLinkStatus(links);
253
+ // LINK_STATUS => OK
254
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup), "utf8", () => {});
255
+ await vi.advanceTimersByTimeAsync(10);
256
+ await p;
257
+ });
258
+ const sendRouteReqSpy = vi.spyOn(adapter.driver.nwkHandler, "sendRouteReq").mockImplementationOnce(async (manyToOne, destination16) => {
259
+ manyToOneSpy = manyToOne;
260
+ destination16Spy = destination16;
261
+ const p = adapter.driver.nwkHandler.sendRouteReq(manyToOne, destination16);
262
+ // ROUTE_REQ => OK
263
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup + 1), "utf8", () => {});
264
+ await vi.advanceTimersByTimeAsync(10);
265
+ return await p;
266
+ });
267
+ await adapter.driver.startStack();
268
+ await vi.advanceTimersByTimeAsync(100); // flush
269
+
270
+ expect(savePeriodicStateSpy).toHaveBeenCalledTimes(1);
271
+ expect(sendLinkStatusSpy).toHaveBeenCalledTimes(1 + 1); // *2 by spy mock
272
+ expect(sendRouteReqSpy).toHaveBeenCalledTimes(1 + 1); // *2 by spy mock
273
+
274
+ nextTidFromStartup = adapter.driver.currentSpinelTID + 1;
275
+
276
+ return [linksSpy, manyToOneSpy, destination16Spy];
277
+ }
278
+
279
+ return [undefined, undefined, undefined];
280
+ };
281
+
282
+ beforeAll(() => {
283
+ vi.useFakeTimers();
284
+
285
+ rmSync(TEMP_PATH, {force: true, recursive: true});
286
+ mkdirSync(TEMP_PATH, {recursive: true});
287
+ });
288
+
289
+ afterAll(() => {
290
+ vi.useRealTimers();
291
+
292
+ rmSync(TEMP_PATH, {force: true, recursive: true});
293
+ });
294
+
295
+ beforeEach(() => {
296
+ rmSync(TEMP_PATH_CONFIG, {force: true});
297
+ rmSync(TEMP_PATH_SAVE, {force: true});
298
+
299
+ adapter = new ZoHAdapter(
300
+ {
301
+ panID: DEFAULT_PAN_ID,
302
+ extendedPanID: DEFAULT_EXT_PAN_ID,
303
+ channelList: [DEFAULT_CHANNEL],
304
+ networkKey: DEFAULT_NETWORK_KEY,
305
+ networkKeyDistribute: false,
306
+ },
307
+ {
308
+ baudRate: 921600,
309
+ rtscts: true,
310
+ path: "/dev/serial/by-id/mock-adapter",
311
+ adapter: "zoh",
312
+ },
313
+ join(TEMP_PATH, "coordinator_backup.json"),
314
+ {
315
+ concurrent: 8,
316
+ disableLED: false,
317
+ transmitPower: DEFAULT_TX_POWER,
318
+ },
319
+ );
320
+
321
+ vi.spyOn(adapter, "initPort").mockImplementation(async () => {});
322
+ vi.spyOn(adapter.driver, "start").mockImplementationOnce(async () => {
323
+ await mockStart();
324
+ });
325
+ vi.spyOn(adapter.driver, "formNetwork").mockImplementationOnce(async () => {
326
+ await mockFormNetwork();
327
+ });
328
+ vi.spyOn(adapter.driver, "stop").mockImplementationOnce(async () => {
329
+ await mockStop();
330
+ });
331
+ vi.spyOn(adapter.driver.writer, "pipe").mockImplementation(
332
+ // @ts-expect-error mock noop
333
+ () => {},
334
+ );
335
+
336
+ adapter.driver.parser.on("data", adapter.driver.onFrame.bind(adapter.driver));
337
+ });
338
+
339
+ afterEach(async () => {
340
+ await adapter.stop();
341
+ });
342
+
343
+ it("Adapter impl: gets state", async () => {
344
+ await expect(adapter.start()).resolves.toStrictEqual("reset");
345
+ await expect(adapter.getCoordinatorIEEE()).resolves.toStrictEqual("0x4d325a6e6f486f5a");
346
+ await expect(adapter.getCoordinatorVersion()).resolves.toStrictEqual({
347
+ type: "Zigbee on Host",
348
+ meta: {
349
+ major: 4,
350
+ minor: 3,
351
+ apiVersion: 10,
352
+ version: "SL-OPENTHREAD/2.5.2.0_GitHub-1fceb225b; EFR32; Mar 19 2025 13:45:44",
353
+ revision: "https://github.com/Nerivec/zigbee-on-host (using: SL-OPENTHREAD/2.5.2.0_GitHub-1fceb225b; EFR32; Mar 19 2025 13:45:44)",
354
+ },
355
+ });
356
+ await expect(adapter.getNetworkParameters()).resolves.toStrictEqual({
357
+ panID: DEFAULT_PAN_ID,
358
+ extendedPanID: `0x${bigUInt64ToHexBE(Buffer.from(DEFAULT_EXT_PAN_ID).readBigUint64LE())}`,
359
+ channel: DEFAULT_CHANNEL,
360
+ nwkUpdateID: 0,
361
+ });
362
+ });
363
+
364
+ it("Adapter impl: sendZdo to device", async () => {
365
+ await adapter.start();
366
+
367
+ await adapter.driver.context.associate(0x2211, BigInt("0x0807060504030201"), true, structuredClone(COMMON_FFD_MAC_CAP), true, false, true);
368
+
369
+ const p1 = adapter.sendZdo(
370
+ "0x0807060504030201",
371
+ 0x2211,
372
+ Zdo.ClusterId.IEEE_ADDRESS_REQUEST,
373
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.IEEE_ADDRESS_REQUEST, 0x2211, false, 0),
374
+ false,
375
+ );
376
+
377
+ await vi.advanceTimersByTimeAsync(10);
378
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup, SpinelStatus.OK), "utf8", () => {});
379
+ await vi.advanceTimersByTimeAsync(10);
380
+ adapter.onFrame(
381
+ 0x2211,
382
+ BigInt("0x0807060504030201"),
383
+ {
384
+ frameControl: {
385
+ frameType: 0 /* DATA */,
386
+ deliveryMode: 0 /* UNICAST */,
387
+ ackFormat: false,
388
+ security: false,
389
+ ackRequest: false,
390
+ extendedHeader: false,
391
+ },
392
+ profileId: 0x0,
393
+ clusterId: Zdo.ClusterId.IEEE_ADDRESS_RESPONSE,
394
+ sourceEndpoint: 0x0,
395
+ destEndpoint: 0x0,
396
+ },
397
+ Buffer.from([1, 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x11, 0x22]),
398
+ 150,
399
+ );
400
+ await vi.advanceTimersByTimeAsync(10);
401
+
402
+ await expect(p1).resolves.toStrictEqual([
403
+ 0,
404
+ {
405
+ eui64: "0x0807060504030201",
406
+ nwkAddress: 0x2211,
407
+ startIndex: 0,
408
+ assocDevList: [],
409
+ },
410
+ ]);
411
+
412
+ const p2 = adapter.sendZdo(
413
+ "0x0807060504030201",
414
+ 0x2211,
415
+ Zdo.ClusterId.NETWORK_ADDRESS_REQUEST,
416
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.NETWORK_ADDRESS_REQUEST, "0x0807060504030201", false, 0),
417
+ false,
418
+ );
419
+
420
+ await vi.advanceTimersByTimeAsync(10);
421
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup + 1, SpinelStatus.OK), "utf8", () => {});
422
+ await vi.advanceTimersByTimeAsync(10);
423
+ adapter.onFrame(
424
+ 0x2211,
425
+ BigInt("0x0807060504030201"),
426
+ {
427
+ frameControl: {
428
+ frameType: 0 /* DATA */,
429
+ deliveryMode: 0 /* UNICAST */,
430
+ ackFormat: false,
431
+ security: false,
432
+ ackRequest: false,
433
+ extendedHeader: false,
434
+ },
435
+ profileId: 0x0,
436
+ clusterId: Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE,
437
+ sourceEndpoint: 0x0,
438
+ destEndpoint: 0x0,
439
+ },
440
+ Buffer.from([2, 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x11, 0x22]),
441
+ 150,
442
+ );
443
+ await vi.advanceTimersByTimeAsync(10);
444
+
445
+ await expect(p2).resolves.toStrictEqual([
446
+ 0,
447
+ {
448
+ eui64: "0x0807060504030201",
449
+ nwkAddress: 0x2211,
450
+ startIndex: 0,
451
+ assocDevList: [],
452
+ },
453
+ ]);
454
+ });
455
+
456
+ it("Adapter impl: sendZdo to coordinator", async () => {
457
+ await adapter.start();
458
+
459
+ const emitSpy = vi.spyOn(adapter, "emit");
460
+
461
+ await adapter.sendZdo(
462
+ `0x${bigUInt64ToHexBE(adapter.driver.context.netParams.eui64)}`,
463
+ 0x0000,
464
+ Zdo.ClusterId.NODE_DESCRIPTOR_REQUEST,
465
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.NODE_DESCRIPTOR_REQUEST, 0x0000),
466
+ false,
467
+ );
468
+
469
+ expect(emitSpy).toHaveBeenLastCalledWith("zdoResponse", Zdo.ClusterId.NODE_DESCRIPTOR_RESPONSE, [
470
+ 0,
471
+ expect.objectContaining({
472
+ nwkAddress: 0x0000,
473
+ logicalType: 0x00,
474
+ manufacturerCode: Zcl.ManufacturerCode.CONNECTIVITY_STANDARDS_ALLIANCE,
475
+ serverMask: expect.objectContaining({primaryTrustCenter: 1, stackComplianceRevision: 22}),
476
+ }),
477
+ ]);
478
+
479
+ await adapter.sendZdo(
480
+ `0x${bigUInt64ToHexBE(adapter.driver.context.netParams.eui64)}`,
481
+ 0x0000,
482
+ Zdo.ClusterId.POWER_DESCRIPTOR_REQUEST,
483
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.POWER_DESCRIPTOR_REQUEST, 0x0000),
484
+ false,
485
+ );
486
+
487
+ expect(emitSpy).toHaveBeenLastCalledWith("zdoResponse", Zdo.ClusterId.POWER_DESCRIPTOR_RESPONSE, [
488
+ 0,
489
+ expect.objectContaining({nwkAddress: 0x0000}),
490
+ ]);
491
+
492
+ await adapter.sendZdo(
493
+ `0x${bigUInt64ToHexBE(adapter.driver.context.netParams.eui64)}`,
494
+ 0x0000,
495
+ Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST,
496
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST, 0x0000, 1),
497
+ false,
498
+ );
499
+
500
+ expect(emitSpy).toHaveBeenLastCalledWith("zdoResponse", Zdo.ClusterId.SIMPLE_DESCRIPTOR_RESPONSE, [
501
+ 0,
502
+ expect.objectContaining({endpoint: 1, profileId: ZSpec.HA_PROFILE_ID}),
503
+ ]);
504
+
505
+ await adapter.sendZdo(
506
+ `0x${bigUInt64ToHexBE(adapter.driver.context.netParams.eui64)}`,
507
+ 0x0000,
508
+ Zdo.ClusterId.ACTIVE_ENDPOINTS_REQUEST,
509
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.ACTIVE_ENDPOINTS_REQUEST, 0x0000),
510
+ false,
511
+ );
512
+
513
+ expect(emitSpy).toHaveBeenLastCalledWith("zdoResponse", Zdo.ClusterId.ACTIVE_ENDPOINTS_RESPONSE, [
514
+ 0,
515
+ {nwkAddress: 0, endpointList: [1, 242]},
516
+ ]);
517
+
518
+ await expect(
519
+ adapter.sendZdo(
520
+ `0x${bigUInt64ToHexBE(adapter.driver.context.netParams.eui64)}`,
521
+ 0x0000,
522
+ Zdo.ClusterId.PARENT_ANNOUNCE,
523
+ Zdo.Buffalo.buildRequest(true, Zdo.ClusterId.PARENT_ANNOUNCE, []),
524
+ false,
525
+ ),
526
+ ).rejects.toThrow(`Coordinator does not support ZDO cluster ${Zdo.ClusterId.PARENT_ANNOUNCE}`);
527
+ });
528
+
529
+ it("Adapter impl: permitJoin", async () => {
530
+ await adapter.start();
531
+
532
+ const sendZdoSpy = vi.spyOn(adapter, "sendZdo");
533
+ const allowJoinsSpy = vi.spyOn(adapter.driver.context, "allowJoins");
534
+ const gpEnterCommissioningModeSpy = vi.spyOn(adapter.driver.nwkGPHandler, "enterCommissioningMode");
535
+
536
+ sendZdoSpy.mockImplementationOnce(async () => [0, undefined]);
537
+ await adapter.permitJoin(254);
538
+ expect(allowJoinsSpy).toHaveBeenLastCalledWith(254, true);
539
+ expect(gpEnterCommissioningModeSpy).toHaveBeenLastCalledWith(254);
540
+
541
+ sendZdoSpy.mockImplementationOnce(async () => [0, undefined]);
542
+ await adapter.permitJoin(0);
543
+ expect(allowJoinsSpy).toHaveBeenLastCalledWith(0, true);
544
+ expect(gpEnterCommissioningModeSpy).toHaveBeenLastCalledWith(0);
545
+
546
+ await adapter.permitJoin(200, 0x0000);
547
+ expect(allowJoinsSpy).toHaveBeenLastCalledWith(200, true);
548
+ expect(gpEnterCommissioningModeSpy).toHaveBeenLastCalledWith(200);
549
+
550
+ sendZdoSpy.mockImplementationOnce(async () => [0, undefined]);
551
+ await adapter.permitJoin(0);
552
+ expect(allowJoinsSpy).toHaveBeenLastCalledWith(0, true);
553
+ expect(gpEnterCommissioningModeSpy).toHaveBeenLastCalledWith(0);
554
+ expect(gpEnterCommissioningModeSpy).toHaveBeenCalledTimes(4);
555
+
556
+ sendZdoSpy.mockImplementationOnce(async () => [0, undefined]);
557
+ await adapter.permitJoin(150, 0x1234);
558
+ expect(allowJoinsSpy).toHaveBeenLastCalledWith(150, false);
559
+ expect(gpEnterCommissioningModeSpy).toHaveBeenCalledTimes(4);
560
+
561
+ sendZdoSpy.mockImplementationOnce(async () => [0, undefined]);
562
+ await adapter.permitJoin(0);
563
+ expect(allowJoinsSpy).toHaveBeenLastCalledWith(0, true);
564
+ expect(gpEnterCommissioningModeSpy).toHaveBeenLastCalledWith(0);
565
+ expect(gpEnterCommissioningModeSpy).toHaveBeenCalledTimes(5);
566
+ });
567
+
568
+ it("Adapter impl: sendZclFrameToEndpoint", async () => {
569
+ await adapter.start();
570
+
571
+ await adapter.driver.context.associate(0x9876, BigInt("0x00000000000004d2"), true, structuredClone(COMMON_FFD_MAC_CAP), true, false, true);
572
+
573
+ const sendUnicastSpy = vi.spyOn(adapter.driver, "sendUnicast");
574
+
575
+ const zclPayload = Buffer.from([16, 123, Zcl.Foundation.read.ID]);
576
+ const zclFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
577
+
578
+ const p1 = adapter.sendZclFrameToEndpoint("0x00000000000004d2", 0x9876, 1, zclFrame, 10000, false, false, 2);
579
+
580
+ await vi.advanceTimersByTimeAsync(10);
581
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup, SpinelStatus.OK), "utf8", () => {});
582
+ await vi.advanceTimersByTimeAsync(10);
583
+ adapter.onFrame(
584
+ 0x9876,
585
+ undefined,
586
+ {
587
+ frameControl: {
588
+ frameType: 0 /* DATA */,
589
+ deliveryMode: 0 /* UNICAST */,
590
+ ackFormat: false,
591
+ security: false,
592
+ ackRequest: false,
593
+ extendedHeader: false,
594
+ },
595
+ profileId: ZSpec.HA_PROFILE_ID,
596
+ clusterId: Zcl.Clusters.genGroups.ID,
597
+ sourceEndpoint: 0x1,
598
+ destEndpoint: 0x2,
599
+ },
600
+ Buffer.from([0, 123, Zcl.Foundation.read.response!, 0x01, 0xff]),
601
+ 215,
602
+ );
603
+ await expect(p1).resolves.toStrictEqual({
604
+ address: 0x9876,
605
+ clusterID: Zcl.Clusters.genGroups.ID,
606
+ data: Buffer.from([0, 123, Zcl.Foundation.read.response!, 0x01, 0xff]),
607
+ destinationEndpoint: 2,
608
+ endpoint: 1,
609
+ groupID: undefined,
610
+ header: expect.objectContaining({
611
+ commandIdentifier: 1,
612
+ frameControl: {
613
+ direction: 0,
614
+ disableDefaultResponse: false,
615
+ frameType: 0,
616
+ manufacturerSpecific: false,
617
+ reservedBits: 0,
618
+ },
619
+ manufacturerCode: undefined,
620
+ transactionSequenceNumber: 123,
621
+ }),
622
+ linkquality: 215,
623
+ wasBroadcast: false,
624
+ });
625
+ expect(sendUnicastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genGroups.ID, 0x9876, undefined, 1, 2);
626
+
627
+ sendUnicastSpy.mockResolvedValueOnce(2);
628
+
629
+ const p2 = adapter.sendZclFrameToEndpoint("0x00000000000004d2", 0x9876, 1, zclFrame, 10000, true, false);
630
+
631
+ await vi.advanceTimersByTimeAsync(10);
632
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup + 1, SpinelStatus.OK), "utf8", () => {});
633
+ await vi.advanceTimersByTimeAsync(10);
634
+ await expect(p2).resolves.toStrictEqual(undefined);
635
+ expect(sendUnicastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genGroups.ID, 0x9876, undefined, 1, 1);
636
+
637
+ const zclPayloadDefRsp = Buffer.from([0, 123, Zcl.Foundation.read.ID]);
638
+ const zclFrameDefRsp = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zclPayloadDefRsp), zclPayloadDefRsp, {});
639
+
640
+ sendUnicastSpy.mockResolvedValueOnce(3);
641
+
642
+ const p3 = adapter.sendZclFrameToEndpoint("0x00000000000004d2", 0x9876, 1, zclFrameDefRsp, 10000, true, false, 2);
643
+
644
+ await vi.advanceTimersByTimeAsync(10);
645
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup + 2, SpinelStatus.OK), "utf8", () => {});
646
+ await vi.advanceTimersByTimeAsync(10);
647
+ adapter.onFrame(
648
+ 0x9876,
649
+ undefined,
650
+ {
651
+ frameControl: {
652
+ frameType: 0 /* DATA */,
653
+ deliveryMode: 0 /* UNICAST */,
654
+ ackFormat: false,
655
+ security: false,
656
+ ackRequest: false,
657
+ extendedHeader: false,
658
+ },
659
+ profileId: ZSpec.HA_PROFILE_ID,
660
+ clusterId: Zcl.Clusters.genGroups.ID,
661
+ sourceEndpoint: 0x1,
662
+ destEndpoint: 0x2,
663
+ },
664
+ Buffer.from([0, 123, Zcl.Foundation.defaultRsp.ID, 0x01, 0xff]),
665
+ 125,
666
+ );
667
+ await expect(p3).resolves.toStrictEqual({
668
+ address: 0x9876,
669
+ clusterID: Zcl.Clusters.genGroups.ID,
670
+ data: Buffer.from([0, 123, Zcl.Foundation.defaultRsp.ID, 0x01, 0xff]),
671
+ destinationEndpoint: 2,
672
+ endpoint: 1,
673
+ groupID: undefined,
674
+ header: expect.objectContaining({
675
+ commandIdentifier: Zcl.Foundation.defaultRsp.ID,
676
+ frameControl: {
677
+ direction: 0,
678
+ disableDefaultResponse: false,
679
+ frameType: 0,
680
+ manufacturerSpecific: false,
681
+ reservedBits: 0,
682
+ },
683
+ manufacturerCode: undefined,
684
+ transactionSequenceNumber: 123,
685
+ }),
686
+ linkquality: 125,
687
+ wasBroadcast: false,
688
+ });
689
+ expect(sendUnicastSpy).toHaveBeenLastCalledWith(
690
+ zclFrameDefRsp.toBuffer(),
691
+ ZSpec.HA_PROFILE_ID,
692
+ Zcl.Clusters.genGroups.ID,
693
+ 0x9876,
694
+ undefined,
695
+ 1,
696
+ 2,
697
+ );
698
+
699
+ sendUnicastSpy.mockClear();
700
+ sendUnicastSpy.mockRejectedValueOnce(new Error("Failed")).mockResolvedValueOnce(2);
701
+
702
+ const p4 = adapter.sendZclFrameToEndpoint("0x00000000000004d2", 0x9876, 1, zclFrame, 10000, false, false, 2);
703
+
704
+ await vi.advanceTimersByTimeAsync(10);
705
+ adapter.driver.parser._transform(makeSpinelLastStatus(nextTidFromStartup + 3, SpinelStatus.OK), "utf8", () => {});
706
+ await vi.advanceTimersByTimeAsync(10);
707
+ adapter.onFrame(
708
+ 0x9876,
709
+ undefined,
710
+ {
711
+ frameControl: {
712
+ frameType: 0 /* DATA */,
713
+ deliveryMode: 0 /* UNICAST */,
714
+ ackFormat: false,
715
+ security: false,
716
+ ackRequest: false,
717
+ extendedHeader: false,
718
+ },
719
+ profileId: ZSpec.HA_PROFILE_ID,
720
+ clusterId: Zcl.Clusters.genGroups.ID,
721
+ sourceEndpoint: 0x1,
722
+ destEndpoint: 0x2,
723
+ },
724
+ Buffer.from([0, 123, Zcl.Foundation.read.response!, 0x01, 0xff]),
725
+ 225,
726
+ );
727
+ await expect(p4).resolves.toStrictEqual({
728
+ address: 0x9876,
729
+ clusterID: Zcl.Clusters.genGroups.ID,
730
+ data: Buffer.from([0, 123, Zcl.Foundation.read.response!, 0x01, 0xff]),
731
+ destinationEndpoint: 2,
732
+ endpoint: 1,
733
+ groupID: undefined,
734
+ header: expect.objectContaining({
735
+ commandIdentifier: 1,
736
+ frameControl: {
737
+ direction: 0,
738
+ disableDefaultResponse: false,
739
+ frameType: 0,
740
+ manufacturerSpecific: false,
741
+ reservedBits: 0,
742
+ },
743
+ manufacturerCode: undefined,
744
+ transactionSequenceNumber: 123,
745
+ }),
746
+ linkquality: 225,
747
+ wasBroadcast: false,
748
+ });
749
+ expect(sendUnicastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genGroups.ID, 0x9876, undefined, 1, 2);
750
+ expect(sendUnicastSpy).toHaveBeenCalledTimes(2);
751
+
752
+ sendUnicastSpy.mockClear();
753
+ sendUnicastSpy.mockRejectedValueOnce(new Error("Failed")).mockRejectedValueOnce(new Error("Failed"));
754
+
755
+ await expect(adapter.sendZclFrameToEndpoint("0x00000000000004d2", 0x9876, 1, zclFrame, 10000, false, false, 2)).rejects.toThrow("Failed");
756
+ expect(sendUnicastSpy).toHaveBeenCalledTimes(2);
757
+
758
+ const zclFrameGP = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
759
+
760
+ sendUnicastSpy.mockClear();
761
+
762
+ await expect(
763
+ adapter.sendZclFrameToEndpoint("0xb43a31fffe0f6aae", 57129, ZSpec.GP_ENDPOINT, zclFrameGP, 10000, true, false, ZSpec.GP_ENDPOINT),
764
+ ).rejects.toThrow("Unknown destination");
765
+ expect(sendUnicastSpy).toHaveBeenCalledTimes(2);
766
+ });
767
+
768
+ it("Adapter impl: sendZclFrameToGroup", async () => {
769
+ await adapter.start();
770
+
771
+ const sendGroupcastSpy = vi.spyOn(adapter.driver, "sendGroupcast").mockResolvedValueOnce(1).mockResolvedValueOnce(1).mockResolvedValueOnce(1);
772
+
773
+ const zclPayload = Buffer.from([0, 123, Zcl.Foundation.read.ID]);
774
+ const zclFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genGroups.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
775
+
776
+ const p1 = adapter.sendZclFrameToGroup(123, zclFrame, 5);
777
+
778
+ await vi.advanceTimersByTimeAsync(1000);
779
+ await expect(p1).resolves.toStrictEqual(undefined);
780
+ expect(sendGroupcastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genGroups.ID, 123, 5);
781
+
782
+ const p2 = adapter.sendZclFrameToGroup(123, zclFrame);
783
+
784
+ await vi.advanceTimersByTimeAsync(1000);
785
+ await expect(p2).resolves.toStrictEqual(undefined);
786
+ expect(sendGroupcastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genGroups.ID, 123, 1);
787
+ });
788
+
789
+ it("Adapter impl: sendZclFrameToAll", async () => {
790
+ await adapter.start();
791
+
792
+ const sendBroadcastSpy = vi.spyOn(adapter.driver, "sendBroadcast").mockResolvedValueOnce(1).mockResolvedValueOnce(1);
793
+
794
+ const zclPayload = Buffer.from([0, 123, Zcl.Foundation.read.ID]);
795
+ const zclFrame = Zcl.Frame.fromBuffer(Zcl.Clusters.genAlarms.ID, Zcl.Header.fromBuffer(zclPayload), zclPayload, {});
796
+
797
+ const p = adapter.sendZclFrameToAll(3, zclFrame, 1, 0xfffc);
798
+
799
+ await vi.advanceTimersByTimeAsync(1000);
800
+ await expect(p).resolves.toStrictEqual(undefined);
801
+ expect(sendBroadcastSpy).toHaveBeenLastCalledWith(zclFrame.toBuffer(), ZSpec.HA_PROFILE_ID, Zcl.Clusters.genAlarms.ID, 0xfffc, 3, 1);
802
+
803
+ const p2 = adapter.sendZclFrameToAll(ZSpec.GP_ENDPOINT, zclFrame, ZSpec.GP_ENDPOINT, 0xfffc);
804
+
805
+ await vi.advanceTimersByTimeAsync(1000);
806
+ await expect(p2).resolves.toStrictEqual(undefined);
807
+ expect(sendBroadcastSpy).toHaveBeenLastCalledWith(
808
+ zclFrame.toBuffer(),
809
+ ZSpec.GP_PROFILE_ID,
810
+ Zcl.Clusters.genAlarms.ID,
811
+ 0xfffc,
812
+ ZSpec.GP_ENDPOINT,
813
+ ZSpec.GP_ENDPOINT,
814
+ );
815
+ });
816
+
817
+ it("uses default stack config when JSON not present", () => {
818
+ expect(adapter.stackConfig.tiSerialSkipBootloader).toStrictEqual(DEFAULT_STACK_CONFIG.tiSerialSkipBootloader);
819
+ expect(adapter.stackConfig.eui64).toStrictEqual(DEFAULT_STACK_CONFIG.eui64);
820
+ expect(adapter.stackConfig.ccaBackoffAttempts).toStrictEqual(DEFAULT_STACK_CONFIG.ccaBackoffAttempts);
821
+ expect(adapter.stackConfig.ccaRetries).toStrictEqual(DEFAULT_STACK_CONFIG.ccaRetries);
822
+ expect(adapter.stackConfig.enableCSMACA).toStrictEqual(DEFAULT_STACK_CONFIG.enableCSMACA);
823
+ });
824
+
825
+ it("uses custom stack config", () => {
826
+ // each is different from default
827
+ const configJSON: StackConfigJSON = {
828
+ tiSerialSkipBootloader: true,
829
+ eui64: "0x1122334455667788",
830
+ ccaBackoffAttempts: 2,
831
+ ccaRetries: 3,
832
+ enableCSMACA: false,
833
+ };
834
+
835
+ writeFileSync(TEMP_PATH_CONFIG, JSON.stringify(configJSON), "utf8");
836
+
837
+ const custAdapter = new ZoHAdapter(
838
+ {
839
+ panID: DEFAULT_PAN_ID,
840
+ extendedPanID: DEFAULT_EXT_PAN_ID,
841
+ channelList: [DEFAULT_CHANNEL],
842
+ networkKey: DEFAULT_NETWORK_KEY,
843
+ networkKeyDistribute: false,
844
+ },
845
+ {
846
+ baudRate: 921600,
847
+ rtscts: true,
848
+ path: "/dev/serial/by-id/mock-adapter",
849
+ adapter: "zoh",
850
+ },
851
+ join(TEMP_PATH, "coordinator_backup.json"),
852
+ {
853
+ concurrent: 8,
854
+ disableLED: false,
855
+ transmitPower: DEFAULT_TX_POWER,
856
+ },
857
+ );
858
+
859
+ expect(custAdapter.stackConfig.tiSerialSkipBootloader).toStrictEqual(true);
860
+ expect(custAdapter.stackConfig.eui64).toStrictEqual(Buffer.from([0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11]).readBigUInt64LE(0));
861
+ expect(custAdapter.stackConfig.ccaBackoffAttempts).toStrictEqual(2);
862
+ expect(custAdapter.stackConfig.ccaRetries).toStrictEqual(3);
863
+ expect(custAdapter.stackConfig.enableCSMACA).toStrictEqual(false);
864
+ });
865
+
866
+ it("uses defaults when custom stack config invalid", () => {
867
+ // each is invalid
868
+ const configJSON = {
869
+ tiSerialSkipBootloader: "a",
870
+ eui64: "0xxyz",
871
+ ccaBackoffAttempts: 256,
872
+ ccaRetries: -1,
873
+ enableCSMACA: 1,
874
+ };
875
+
876
+ writeFileSync(TEMP_PATH_CONFIG, JSON.stringify(configJSON), "utf8");
877
+
878
+ const custAdapter = new ZoHAdapter(
879
+ {
880
+ panID: DEFAULT_PAN_ID,
881
+ extendedPanID: DEFAULT_EXT_PAN_ID,
882
+ channelList: [DEFAULT_CHANNEL],
883
+ networkKey: DEFAULT_NETWORK_KEY,
884
+ networkKeyDistribute: false,
885
+ },
886
+ {
887
+ baudRate: 921600,
888
+ rtscts: true,
889
+ path: "/dev/serial/by-id/mock-adapter",
890
+ adapter: "zoh",
891
+ },
892
+ join(TEMP_PATH, "coordinator_backup.json"),
893
+ {
894
+ concurrent: 8,
895
+ disableLED: false,
896
+ transmitPower: DEFAULT_TX_POWER,
897
+ },
898
+ );
899
+
900
+ expect(custAdapter.stackConfig.tiSerialSkipBootloader).toStrictEqual(DEFAULT_STACK_CONFIG.tiSerialSkipBootloader);
901
+ expect(custAdapter.stackConfig.eui64).toStrictEqual(DEFAULT_STACK_CONFIG.eui64);
902
+ expect(custAdapter.stackConfig.ccaBackoffAttempts).toStrictEqual(DEFAULT_STACK_CONFIG.ccaBackoffAttempts);
903
+ expect(custAdapter.stackConfig.ccaRetries).toStrictEqual(DEFAULT_STACK_CONFIG.ccaRetries);
904
+ expect(custAdapter.stackConfig.enableCSMACA).toStrictEqual(DEFAULT_STACK_CONFIG.enableCSMACA);
905
+ });
906
+
907
+ it("uses defaults when custom stack config partial", () => {
908
+ // each is invalid
909
+ const configJSON = {
910
+ enableCSMACA: false,
911
+ };
912
+
913
+ writeFileSync(TEMP_PATH_CONFIG, JSON.stringify(configJSON), "utf8");
914
+
915
+ const custAdapter = new ZoHAdapter(
916
+ {
917
+ panID: DEFAULT_PAN_ID,
918
+ extendedPanID: DEFAULT_EXT_PAN_ID,
919
+ channelList: [DEFAULT_CHANNEL],
920
+ networkKey: DEFAULT_NETWORK_KEY,
921
+ networkKeyDistribute: false,
922
+ },
923
+ {
924
+ baudRate: 921600,
925
+ rtscts: true,
926
+ path: "/dev/serial/by-id/mock-adapter",
927
+ adapter: "zoh",
928
+ },
929
+ join(TEMP_PATH, "coordinator_backup.json"),
930
+ {
931
+ concurrent: 8,
932
+ disableLED: false,
933
+ transmitPower: DEFAULT_TX_POWER,
934
+ },
935
+ );
936
+
937
+ expect(custAdapter.stackConfig.tiSerialSkipBootloader).toStrictEqual(DEFAULT_STACK_CONFIG.tiSerialSkipBootloader);
938
+ expect(custAdapter.stackConfig.eui64).toStrictEqual(DEFAULT_STACK_CONFIG.eui64);
939
+ expect(custAdapter.stackConfig.ccaBackoffAttempts).toStrictEqual(DEFAULT_STACK_CONFIG.ccaBackoffAttempts);
940
+ expect(custAdapter.stackConfig.ccaRetries).toStrictEqual(DEFAULT_STACK_CONFIG.ccaRetries);
941
+ expect(custAdapter.stackConfig.enableCSMACA).toStrictEqual(false);
942
+ });
943
+
944
+ it("receives ZDO frame", async () => {
945
+ await adapter.start();
946
+
947
+ const emitSpy = vi.spyOn(adapter, "emit");
948
+
949
+ adapter.onFrame(
950
+ 0x2211,
951
+ 578437695752307201n,
952
+ {
953
+ frameControl: {
954
+ frameType: 0 /* DATA */,
955
+ deliveryMode: 0 /* UNICAST */,
956
+ ackFormat: false,
957
+ security: false,
958
+ ackRequest: false,
959
+ extendedHeader: false,
960
+ },
961
+ profileId: 0x0,
962
+ clusterId: Zdo.ClusterId.IEEE_ADDRESS_RESPONSE,
963
+ sourceEndpoint: 0x0,
964
+ destEndpoint: 0x0,
965
+ },
966
+ Buffer.from([1, 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x11, 0x22]),
967
+ -50,
968
+ );
969
+
970
+ expect(emitSpy).toHaveBeenLastCalledWith("zdoResponse", Zdo.ClusterId.IEEE_ADDRESS_RESPONSE, [
971
+ 0,
972
+ {
973
+ eui64: "0x0807060504030201",
974
+ nwkAddress: 0x2211,
975
+ startIndex: 0,
976
+ assocDevList: [],
977
+ },
978
+ ]);
979
+
980
+ // NETWORK_ADDRESS_RESPONSE codepath
981
+ adapter.onFrame(
982
+ 0x2211,
983
+ 578437695752307201n,
984
+ {
985
+ frameControl: {
986
+ frameType: 0 /* DATA */,
987
+ deliveryMode: 0 /* UNICAST */,
988
+ ackFormat: false,
989
+ security: false,
990
+ ackRequest: false,
991
+ extendedHeader: false,
992
+ },
993
+ profileId: 0x0,
994
+ clusterId: Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE,
995
+ sourceEndpoint: 0x0,
996
+ destEndpoint: 0x0,
997
+ },
998
+ Buffer.from([1, 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x11, 0x22]),
999
+ -50,
1000
+ );
1001
+
1002
+ expect(emitSpy).toHaveBeenLastCalledWith("zdoResponse", Zdo.ClusterId.NETWORK_ADDRESS_RESPONSE, [
1003
+ 0,
1004
+ {
1005
+ eui64: "0x0807060504030201",
1006
+ nwkAddress: 0x2211,
1007
+ startIndex: 0,
1008
+ assocDevList: [],
1009
+ },
1010
+ ]);
1011
+ });
1012
+
1013
+ it("receives ZCL frame", async () => {
1014
+ await adapter.start();
1015
+
1016
+ const emitSpy = vi.spyOn(adapter, "emit");
1017
+
1018
+ adapter.onFrame(
1019
+ 0x9876,
1020
+ undefined,
1021
+ {
1022
+ frameControl: {
1023
+ frameType: 0 /* DATA */,
1024
+ deliveryMode: 0 /* UNICAST */,
1025
+ ackFormat: false,
1026
+ security: false,
1027
+ ackRequest: false,
1028
+ extendedHeader: false,
1029
+ },
1030
+ profileId: ZSpec.HA_PROFILE_ID,
1031
+ clusterId: Zcl.Clusters.genAlarms.ID,
1032
+ sourceEndpoint: 0x1,
1033
+ destEndpoint: 0x1,
1034
+ },
1035
+ Buffer.from([0, 123, Zcl.Foundation.read.ID, 0x01, 0xff]),
1036
+ 125,
1037
+ );
1038
+
1039
+ expect(emitSpy).toHaveBeenLastCalledWith("zclPayload", {
1040
+ address: 0x9876,
1041
+ clusterID: Zcl.Clusters.genAlarms.ID,
1042
+ data: Buffer.from([0, 123, Zcl.Foundation.read.ID, 0x01, 0xff]),
1043
+ destinationEndpoint: 1,
1044
+ endpoint: 1,
1045
+ groupID: undefined,
1046
+ header: {
1047
+ commandIdentifier: Zcl.Foundation.read.ID,
1048
+ frameControl: {
1049
+ direction: 0,
1050
+ disableDefaultResponse: false,
1051
+ frameType: 0,
1052
+ manufacturerSpecific: false,
1053
+ reservedBits: 0,
1054
+ },
1055
+ manufacturerCode: undefined,
1056
+ transactionSequenceNumber: 123,
1057
+ },
1058
+ linkquality: 125,
1059
+ wasBroadcast: false,
1060
+ });
1061
+
1062
+ adapter.onFrame(
1063
+ 0x9876,
1064
+ 1234n,
1065
+ {
1066
+ frameControl: {
1067
+ frameType: 0 /* DATA */,
1068
+ deliveryMode: 0 /* UNICAST */,
1069
+ ackFormat: false,
1070
+ security: false,
1071
+ ackRequest: false,
1072
+ extendedHeader: false,
1073
+ },
1074
+ profileId: ZSpec.HA_PROFILE_ID,
1075
+ clusterId: Zcl.Clusters.genIdentify.ID,
1076
+ sourceEndpoint: 0x1,
1077
+ destEndpoint: 0x1,
1078
+ },
1079
+ Buffer.from([0, 123, 0x00, 0x01, 0xff]),
1080
+ 155,
1081
+ );
1082
+
1083
+ expect(emitSpy).toHaveBeenLastCalledWith("zclPayload", {
1084
+ address: "0x00000000000004d2",
1085
+ clusterID: Zcl.Clusters.genIdentify.ID,
1086
+ data: Buffer.from([0, 123, 0x00, 0x01, 0xff]),
1087
+ destinationEndpoint: 1,
1088
+ endpoint: 1,
1089
+ groupID: undefined,
1090
+ header: {
1091
+ commandIdentifier: 0,
1092
+ frameControl: {
1093
+ direction: 0,
1094
+ disableDefaultResponse: false,
1095
+ frameType: 0,
1096
+ manufacturerSpecific: false,
1097
+ reservedBits: 0,
1098
+ },
1099
+ manufacturerCode: undefined,
1100
+ transactionSequenceNumber: 123,
1101
+ },
1102
+ linkquality: 155,
1103
+ wasBroadcast: false,
1104
+ });
1105
+
1106
+ adapter.onFrame(
1107
+ 57129,
1108
+ undefined,
1109
+ {
1110
+ frameControl: {
1111
+ frameType: 0 /* DATA */,
1112
+ deliveryMode: 0 /* UNICAST */,
1113
+ ackFormat: false,
1114
+ security: false,
1115
+ ackRequest: false,
1116
+ extendedHeader: false,
1117
+ },
1118
+ profileId: ZSpec.GP_PROFILE_ID,
1119
+ clusterId: Zcl.Clusters.greenPower.ID,
1120
+ sourceEndpoint: ZSpec.GP_ENDPOINT,
1121
+ destEndpoint: ZSpec.GP_ENDPOINT,
1122
+ },
1123
+ Buffer.from("1102040008d755550114000000e01f0785f256b8e010b32e6921aca5d18ab7b7d44d0f063d4d140300001002050229dfe2", "hex"),
1124
+ 245,
1125
+ );
1126
+
1127
+ expect(emitSpy).toHaveBeenLastCalledWith("zclPayload", {
1128
+ address: 57129,
1129
+ clusterID: Zcl.Clusters.greenPower.ID,
1130
+ data: Buffer.from("1102040008d755550114000000e01f0785f256b8e010b32e6921aca5d18ab7b7d44d0f063d4d140300001002050229dfe2", "hex"),
1131
+ destinationEndpoint: ZSpec.GP_ENDPOINT,
1132
+ endpoint: ZSpec.GP_ENDPOINT,
1133
+ groupID: undefined,
1134
+ header: {
1135
+ commandIdentifier: 4,
1136
+ frameControl: {
1137
+ direction: 0,
1138
+ disableDefaultResponse: true,
1139
+ frameType: 1,
1140
+ manufacturerSpecific: false,
1141
+ reservedBits: 0,
1142
+ },
1143
+ manufacturerCode: undefined,
1144
+ transactionSequenceNumber: 2,
1145
+ },
1146
+ linkquality: 245,
1147
+ wasBroadcast: false,
1148
+ });
1149
+ });
1150
+
1151
+ it("receives GP frame", async () => {
1152
+ await adapter.start();
1153
+
1154
+ const emitSpy = vi.spyOn(adapter, "emit");
1155
+
1156
+ adapter.onGPFrame(
1157
+ 0xe0,
1158
+ Buffer.from([
1159
+ 0x2, 0x85, 0xf2, 0xc9, 0x25, 0x82, 0x1d, 0xf4, 0x6f, 0x45, 0x8c, 0xf0, 0xe6, 0x37, 0xaa, 0xc3, 0xba, 0xb6, 0xaa, 0x45, 0x83, 0x1a,
1160
+ 0x11, 0x46, 0x23, 0x0, 0x0, 0x4, 0x16, 0x10, 0x11, 0x22, 0x23, 0x18, 0x19, 0x14, 0x15, 0x12, 0x13, 0x64, 0x65, 0x62, 0x63, 0x1e, 0x1f,
1161
+ 0x1c, 0x1d, 0x1a, 0x1b, 0x16, 0x17,
1162
+ ]),
1163
+ {
1164
+ frameControl: {
1165
+ frameType: 0x1,
1166
+ securityEnabled: false,
1167
+ framePending: false,
1168
+ ackRequest: false,
1169
+ panIdCompression: false,
1170
+ seqNumSuppress: false,
1171
+ iePresent: false,
1172
+ destAddrMode: 0x2,
1173
+ frameVersion: 0,
1174
+ sourceAddrMode: 0x0,
1175
+ },
1176
+ sequenceNumber: 70,
1177
+ destinationPANId: 0xffff,
1178
+ destination16: 0xffff,
1179
+ sourcePANId: 0xffff,
1180
+ fcs: 0xffff,
1181
+ },
1182
+ {
1183
+ frameControl: {
1184
+ frameType: 0x0,
1185
+ protocolVersion: 3,
1186
+ autoCommissioning: false,
1187
+ nwkFrameControlExtension: false,
1188
+ },
1189
+ sourceId: 0x0155f47a,
1190
+ micSize: 0,
1191
+ payloadLength: 52,
1192
+ },
1193
+ 0,
1194
+ );
1195
+
1196
+ const data = Buffer.from([
1197
+ 1, 70, 4, 0, 0, 122, 244, 85, 1, 0, 0, 0, 0, 0xe0, 51, 0x2, 0x85, 0xf2, 0xc9, 0x25, 0x82, 0x1d, 0xf4, 0x6f, 0x45, 0x8c, 0xf0, 0xe6, 0x37,
1198
+ 0xaa, 0xc3, 0xba, 0xb6, 0xaa, 0x45, 0x83, 0x1a, 0x11, 0x46, 0x23, 0x0, 0x0, 0x4, 0x16, 0x10, 0x11, 0x22, 0x23, 0x18, 0x19, 0x14, 0x15,
1199
+ 0x12, 0x13, 0x64, 0x65, 0x62, 0x63, 0x1e, 0x1f, 0x1c, 0x1d, 0x1a, 0x1b, 0x16, 0x17,
1200
+ ]);
1201
+ const header = Zcl.Header.fromBuffer(data)!;
1202
+
1203
+ expect(emitSpy).toHaveBeenLastCalledWith("zclPayload", {
1204
+ address: 0x0155f47a & 0xffff,
1205
+ clusterID: Zcl.Clusters.greenPower.ID,
1206
+ data,
1207
+ destinationEndpoint: 242,
1208
+ endpoint: 242,
1209
+ groupID: ZSpec.GP_GROUP_ID,
1210
+ header,
1211
+ linkquality: 0,
1212
+ wasBroadcast: false,
1213
+ });
1214
+
1215
+ const frame = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, header, data, {});
1216
+
1217
+ expect(frame).toMatchObject({
1218
+ header: {
1219
+ frameControl: {
1220
+ frameType: 1,
1221
+ manufacturerSpecific: false,
1222
+ direction: 0,
1223
+ disableDefaultResponse: false,
1224
+ reservedBits: 0,
1225
+ },
1226
+ manufacturerCode: undefined,
1227
+ transactionSequenceNumber: 70,
1228
+ commandIdentifier: 4,
1229
+ },
1230
+ payload: {
1231
+ options: 0,
1232
+ srcID: 22410362,
1233
+ frameCounter: 0,
1234
+ commandID: 0xe0,
1235
+ payloadSize: 51,
1236
+ commandFrame: {
1237
+ deviceID: 2,
1238
+ options: 133,
1239
+ extendedOptions: 242,
1240
+ securityKey: Buffer.from("c925821df46f458cf0e637aac3bab6aa", "hex"),
1241
+ keyMic: 286950213,
1242
+ outgoingCounter: 9030,
1243
+ applicationInfo: 4,
1244
+ manufacturerID: 0,
1245
+ modelID: 0,
1246
+ numGpdCommands: 22,
1247
+ gpdCommandIdList: Buffer.from("10112223181914151213646562631e1f1c1d1a1b1617", "hex"),
1248
+ numServerClusters: 0,
1249
+ numClientClusters: 0,
1250
+ gpdServerClusters: Buffer.alloc(0),
1251
+ gpdClientClusters: Buffer.alloc(0),
1252
+ },
1253
+ },
1254
+ cluster: {
1255
+ ID: 0x21,
1256
+ name: "greenPower",
1257
+ },
1258
+ command: {
1259
+ ID: 0x04,
1260
+ name: "commissioningNotification",
1261
+ },
1262
+ });
1263
+
1264
+ adapter.onGPFrame(
1265
+ 0x10,
1266
+ Buffer.from([]),
1267
+ {
1268
+ frameControl: {
1269
+ frameType: 0x1,
1270
+ securityEnabled: false,
1271
+ framePending: false,
1272
+ ackRequest: false,
1273
+ panIdCompression: false,
1274
+ seqNumSuppress: false,
1275
+ iePresent: false,
1276
+ destAddrMode: 0x2,
1277
+ frameVersion: 0,
1278
+ sourceAddrMode: 0x0,
1279
+ },
1280
+ sequenceNumber: 185,
1281
+ destinationPANId: 0xffff,
1282
+ destination16: 0xffff,
1283
+ sourcePANId: 0xffff,
1284
+ fcs: 0xffff,
1285
+ },
1286
+ {
1287
+ frameControl: {
1288
+ frameType: 0x0,
1289
+ protocolVersion: 3,
1290
+ autoCommissioning: false,
1291
+ nwkFrameControlExtension: true,
1292
+ },
1293
+ frameControlExt: {
1294
+ appId: 0,
1295
+ direction: 0,
1296
+ rxAfterTx: false,
1297
+ securityKey: true,
1298
+ securityLevel: 2,
1299
+ },
1300
+ sourceId: 24221335,
1301
+ securityFrameCounter: 185,
1302
+ micSize: 4,
1303
+ payloadLength: 1,
1304
+ mic: 3523079166,
1305
+ },
1306
+ 0,
1307
+ );
1308
+
1309
+ const data2 = Buffer.from([1, 185, 0, 0b10000000, 0, 151, 150, 113, 1, 185, 0, 0, 0, 0x10, 0]);
1310
+ const header2 = Zcl.Header.fromBuffer(data2)!;
1311
+
1312
+ expect(emitSpy).toHaveBeenLastCalledWith("zclPayload", {
1313
+ address: 24221335 & 0xffff,
1314
+ clusterID: Zcl.Clusters.greenPower.ID,
1315
+ data: data2,
1316
+ destinationEndpoint: 242,
1317
+ endpoint: 242,
1318
+ groupID: ZSpec.GP_GROUP_ID,
1319
+ header: header2,
1320
+ linkquality: 0,
1321
+ wasBroadcast: false,
1322
+ });
1323
+
1324
+ const frame2 = Zcl.Frame.fromBuffer(Zcl.Clusters.greenPower.ID, header2, data2, {});
1325
+
1326
+ expect(frame2).toMatchObject({
1327
+ header: {
1328
+ frameControl: {
1329
+ frameType: 1,
1330
+ manufacturerSpecific: false,
1331
+ direction: 0,
1332
+ disableDefaultResponse: false,
1333
+ reservedBits: 0,
1334
+ },
1335
+ manufacturerCode: undefined,
1336
+ transactionSequenceNumber: 185,
1337
+ commandIdentifier: 0,
1338
+ },
1339
+ payload: {
1340
+ options: 0b10000000,
1341
+ srcID: 24221335,
1342
+ frameCounter: 185,
1343
+ commandID: 0x10,
1344
+ payloadSize: 0,
1345
+ commandFrame: {},
1346
+ },
1347
+ cluster: {
1348
+ ID: 0x21,
1349
+ name: "greenPower",
1350
+ },
1351
+ command: {
1352
+ ID: 0x00,
1353
+ name: "notification",
1354
+ },
1355
+ });
1356
+ });
1357
+
1358
+ it("receives device events", async () => {
1359
+ await adapter.start();
1360
+
1361
+ const emitSpy = vi.spyOn(adapter, "emit");
1362
+
1363
+ adapter.onDeviceJoined(0x123, 4321n, structuredClone(COMMON_FFD_MAC_CAP));
1364
+ expect(emitSpy).toHaveBeenNthCalledWith(1, "deviceJoined", {networkAddress: 0x123, ieeeAddr: "0x00000000000010e1"});
1365
+
1366
+ adapter.onDeviceJoined(0x321, 1234n, structuredClone(COMMON_RFD_MAC_CAP));
1367
+ expect(emitSpy).toHaveBeenCalledTimes(1);
1368
+ await vi.advanceTimersByTimeAsync(5500);
1369
+ expect(emitSpy).toHaveBeenNthCalledWith(2, "deviceJoined", {networkAddress: 0x321, ieeeAddr: "0x00000000000004d2"});
1370
+
1371
+ adapter.onDeviceRejoined(0x987, 4321n, structuredClone(COMMON_FFD_MAC_CAP));
1372
+ expect(emitSpy).toHaveBeenLastCalledWith("deviceJoined", {networkAddress: 0x987, ieeeAddr: "0x00000000000010e1"});
1373
+
1374
+ adapter.onDeviceLeft(0x123, 4321n);
1375
+ expect(emitSpy).toHaveBeenLastCalledWith("deviceLeave", {networkAddress: 0x123, ieeeAddr: "0x00000000000010e1"});
1376
+
1377
+ // adapter.driver.emit('deviceAuthorized', 0x123, 4321n);
1378
+ });
1379
+
1380
+ it("resumes network", async () => {
1381
+ const defaultExtPanId = Buffer.from(DEFAULT_EXT_PAN_ID).readBigUInt64LE();
1382
+ const defaultNetworkKey = Buffer.from(DEFAULT_NETWORK_KEY);
1383
+ const readNetworkStateSpy = vi
1384
+ .spyOn(adapter.driver.context, "readNetworkState")
1385
+ .mockResolvedValueOnce(DEFAULT_STATE)
1386
+ .mockResolvedValueOnce(DEFAULT_STATE);
1387
+
1388
+ await expect(adapter.start()).resolves.toStrictEqual("resumed");
1389
+ expect(adapter.driver.context.netParams.panId).toStrictEqual(DEFAULT_PAN_ID);
1390
+ expect(adapter.driver.context.netParams.extendedPanId).toStrictEqual(defaultExtPanId);
1391
+ expect(adapter.driver.context.netParams.networkKey).toStrictEqual(defaultNetworkKey);
1392
+ // check against current + populate context
1393
+ expect(readNetworkStateSpy).toHaveBeenCalledTimes(2);
1394
+
1395
+ readNetworkStateSpy.mockRestore();
1396
+ });
1397
+
1398
+ it("resets network on mismatch PAN ID", async () => {
1399
+ const oldPanId = 0x1234;
1400
+ const readNetworkStateSpy = vi
1401
+ .spyOn(adapter.driver.context, "readNetworkState")
1402
+ .mockResolvedValueOnce({...DEFAULT_STATE, panId: oldPanId})
1403
+ .mockResolvedValueOnce(DEFAULT_STATE);
1404
+
1405
+ await expect(adapter.start()).resolves.toStrictEqual("reset");
1406
+ expect(adapter.driver.context.netParams.panId).toStrictEqual(DEFAULT_PAN_ID);
1407
+ expect(readNetworkStateSpy).toHaveBeenCalledTimes(2);
1408
+
1409
+ readNetworkStateSpy.mockRestore();
1410
+ });
1411
+
1412
+ it("resets network on mismatch extended PAN ID", async () => {
1413
+ const oldExtPanId = 0x1234123412341234n;
1414
+ const readNetworkStateSpy = vi
1415
+ .spyOn(adapter.driver.context, "readNetworkState")
1416
+ .mockResolvedValueOnce({...DEFAULT_STATE, extendedPanId: oldExtPanId})
1417
+ .mockResolvedValueOnce(DEFAULT_STATE);
1418
+
1419
+ await expect(adapter.start()).resolves.toStrictEqual("reset");
1420
+ expect(adapter.driver.context.netParams.extendedPanId).toStrictEqual(Buffer.from(DEFAULT_EXT_PAN_ID).readBigUInt64LE());
1421
+ expect(readNetworkStateSpy).toHaveBeenCalledTimes(2);
1422
+
1423
+ readNetworkStateSpy.mockRestore();
1424
+ });
1425
+
1426
+ it("resets network on mismatch network key", async () => {
1427
+ const oldNetworkKey = Buffer.from("00110011001100110011001100110011", "hex");
1428
+ const readNetworkStateSpy = vi
1429
+ .spyOn(adapter.driver.context, "readNetworkState")
1430
+ .mockResolvedValueOnce({...DEFAULT_STATE, networkKey: oldNetworkKey})
1431
+ .mockResolvedValueOnce(DEFAULT_STATE);
1432
+
1433
+ await expect(adapter.start()).resolves.toStrictEqual("reset");
1434
+ expect(adapter.driver.context.netParams.networkKey).toStrictEqual(Buffer.from(DEFAULT_NETWORK_KEY));
1435
+ expect(readNetworkStateSpy).toHaveBeenCalledTimes(2);
1436
+
1437
+ readNetworkStateSpy.mockRestore();
1438
+ });
1439
+
1440
+ it("adds install code", async () => {
1441
+ const codeVector = Buffer.from("83FED3407A939723A5C639B26916D505C3B5", "hex");
1442
+
1443
+ await expect(adapter.addInstallCode("0x1122334455667788", codeVector, false)).resolves.toStrictEqual(undefined);
1444
+ });
1445
+
1446
+ it("adds hashed install code", async () => {
1447
+ const linkKeyVector = Buffer.from("66B6900981E1EE3CA4206B6B861C02BB", "hex");
1448
+
1449
+ await expect(adapter.addInstallCode("0x1122334455667788", linkKeyVector, true)).resolves.toStrictEqual(undefined);
1450
+ });
1451
+ });