@willieee802/zigbee-herdsman 0.49.1 → 0.49.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (694) hide show
  1. package/dist/adapter/adapter.d.ts +66 -0
  2. package/dist/adapter/adapter.js +110 -0
  3. package/dist/adapter/adapter.js.map +1 -0
  4. package/dist/adapter/adapterDiscovery.d.ts +34 -0
  5. package/dist/adapter/adapterDiscovery.js +646 -0
  6. package/dist/adapter/adapterDiscovery.js.map +1 -0
  7. package/dist/adapter/const.d.ts +9 -0
  8. package/dist/adapter/const.js +48 -0
  9. package/dist/adapter/const.js.map +1 -0
  10. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +61 -0
  11. package/dist/adapter/deconz/adapter/deconzAdapter.js +719 -0
  12. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +1 -0
  13. package/dist/adapter/deconz/driver/constants.d.ts +210 -0
  14. package/dist/adapter/deconz/driver/constants.d.ts.map +1 -0
  15. package/dist/adapter/deconz/driver/constants.js +139 -0
  16. package/dist/adapter/deconz/driver/constants.js.map +1 -0
  17. package/dist/adapter/deconz/driver/driver.d.ts +111 -0
  18. package/dist/adapter/deconz/driver/driver.d.ts.map +1 -0
  19. package/dist/adapter/deconz/driver/driver.js +1362 -0
  20. package/dist/adapter/deconz/driver/driver.js.map +1 -0
  21. package/dist/adapter/deconz/driver/frame.d.ts +6 -0
  22. package/dist/adapter/deconz/driver/frame.d.ts.map +1 -0
  23. package/dist/adapter/deconz/driver/frame.js +13 -0
  24. package/dist/adapter/deconz/driver/frame.js.map +1 -0
  25. package/dist/adapter/deconz/driver/frameParser.d.ts +5 -0
  26. package/dist/adapter/deconz/driver/frameParser.d.ts.map +1 -0
  27. package/dist/adapter/deconz/driver/frameParser.js +700 -0
  28. package/dist/adapter/deconz/driver/frameParser.js.map +1 -0
  29. package/dist/adapter/deconz/driver/parser.d.ts +10 -0
  30. package/dist/adapter/deconz/driver/parser.d.ts.map +1 -0
  31. package/dist/adapter/deconz/driver/parser.js +39 -0
  32. package/dist/adapter/deconz/driver/parser.js.map +1 -0
  33. package/dist/adapter/deconz/driver/writer.d.ts +8 -0
  34. package/dist/adapter/deconz/driver/writer.d.ts.map +1 -0
  35. package/dist/adapter/deconz/driver/writer.js +53 -0
  36. package/dist/adapter/deconz/driver/writer.js.map +1 -0
  37. package/dist/adapter/ember/adapter/emberAdapter.d.ts +338 -0
  38. package/dist/adapter/ember/adapter/emberAdapter.js +1663 -0
  39. package/dist/adapter/ember/adapter/emberAdapter.js.map +1 -0
  40. package/dist/adapter/ember/adapter/endpoints.d.ts +27 -0
  41. package/dist/adapter/ember/adapter/endpoints.js +69 -0
  42. package/dist/adapter/ember/adapter/endpoints.js.map +1 -0
  43. package/dist/adapter/ember/adapter/oneWaitress.d.ts +112 -0
  44. package/dist/adapter/ember/adapter/oneWaitress.js +233 -0
  45. package/dist/adapter/ember/adapter/oneWaitress.js.map +1 -0
  46. package/dist/adapter/ember/adapter/tokensManager.d.ts +69 -0
  47. package/dist/adapter/ember/adapter/tokensManager.js +684 -0
  48. package/dist/adapter/ember/adapter/tokensManager.js.map +1 -0
  49. package/dist/adapter/ember/consts.d.ts +107 -0
  50. package/dist/adapter/ember/consts.d.ts.map +1 -0
  51. package/dist/adapter/ember/consts.js +155 -0
  52. package/dist/adapter/ember/consts.js.map +1 -0
  53. package/dist/adapter/ember/enums.d.ts +1568 -0
  54. package/dist/adapter/ember/enums.d.ts.map +1 -0
  55. package/dist/adapter/ember/enums.js +1697 -0
  56. package/dist/adapter/ember/enums.js.map +1 -0
  57. package/dist/adapter/ember/ezsp/buffalo.d.ts +166 -0
  58. package/dist/adapter/ember/ezsp/buffalo.d.ts.map +1 -0
  59. package/dist/adapter/ember/ezsp/buffalo.js +1133 -0
  60. package/dist/adapter/ember/ezsp/buffalo.js.map +1 -0
  61. package/dist/adapter/ember/ezsp/consts.d.ts +117 -0
  62. package/dist/adapter/ember/ezsp/consts.d.ts.map +1 -0
  63. package/dist/adapter/ember/ezsp/consts.js +129 -0
  64. package/dist/adapter/ember/ezsp/consts.js.map +1 -0
  65. package/dist/adapter/ember/ezsp/enums.d.ts +1016 -0
  66. package/dist/adapter/ember/ezsp/enums.d.ts.map +1 -0
  67. package/dist/adapter/ember/ezsp/enums.js +1103 -0
  68. package/dist/adapter/ember/ezsp/enums.js.map +1 -0
  69. package/dist/adapter/ember/ezsp/ezsp.d.ts +2951 -0
  70. package/dist/adapter/ember/ezsp/ezsp.js +7119 -0
  71. package/dist/adapter/ember/ezsp/ezsp.js.map +1 -0
  72. package/dist/adapter/ember/ezspError.d.ts +6 -0
  73. package/dist/adapter/ember/ezspError.d.ts.map +1 -0
  74. package/dist/adapter/ember/ezspError.js +13 -0
  75. package/dist/adapter/ember/ezspError.js.map +1 -0
  76. package/dist/adapter/ember/types.d.ts +787 -0
  77. package/dist/adapter/ember/types.d.ts.map +1 -0
  78. package/dist/adapter/ember/types.js +3 -0
  79. package/dist/adapter/ember/types.js.map +1 -0
  80. package/dist/adapter/ember/uart/ash.d.ts +434 -0
  81. package/dist/adapter/ember/uart/ash.d.ts.map +1 -0
  82. package/dist/adapter/ember/uart/ash.js +1561 -0
  83. package/dist/adapter/ember/uart/ash.js.map +1 -0
  84. package/dist/adapter/ember/uart/consts.d.ts +91 -0
  85. package/dist/adapter/ember/uart/consts.d.ts.map +1 -0
  86. package/dist/adapter/ember/uart/consts.js +100 -0
  87. package/dist/adapter/ember/uart/consts.js.map +1 -0
  88. package/dist/adapter/ember/uart/enums.d.ts +191 -0
  89. package/dist/adapter/ember/uart/enums.d.ts.map +1 -0
  90. package/dist/adapter/ember/uart/enums.js +156 -0
  91. package/dist/adapter/ember/uart/enums.js.map +1 -0
  92. package/dist/adapter/ember/uart/parser.d.ts +7 -0
  93. package/dist/adapter/ember/uart/parser.d.ts.map +1 -0
  94. package/dist/adapter/ember/uart/parser.js +32 -0
  95. package/dist/adapter/ember/uart/parser.js.map +1 -0
  96. package/dist/adapter/ember/uart/queues.d.ts +84 -0
  97. package/dist/adapter/ember/uart/queues.d.ts.map +1 -0
  98. package/dist/adapter/ember/uart/queues.js +213 -0
  99. package/dist/adapter/ember/uart/queues.js.map +1 -0
  100. package/dist/adapter/ember/uart/writer.d.ts +13 -0
  101. package/dist/adapter/ember/uart/writer.d.ts.map +1 -0
  102. package/dist/adapter/ember/uart/writer.js +42 -0
  103. package/dist/adapter/ember/uart/writer.js.map +1 -0
  104. package/dist/adapter/ember/utils/initters.d.ts +20 -0
  105. package/dist/adapter/ember/utils/initters.js +92 -0
  106. package/dist/adapter/ember/utils/initters.js.map +1 -0
  107. package/dist/adapter/ember/utils/math.d.ts +41 -0
  108. package/dist/adapter/ember/utils/math.d.ts.map +1 -0
  109. package/dist/adapter/ember/utils/math.js +80 -0
  110. package/dist/adapter/ember/utils/math.js.map +1 -0
  111. package/dist/adapter/events.d.ts +24 -0
  112. package/dist/adapter/events.js +3 -0
  113. package/dist/adapter/events.js.map +1 -0
  114. package/dist/adapter/ezsp/adapter/backup.d.ts +13 -0
  115. package/dist/adapter/ezsp/adapter/backup.js +89 -0
  116. package/dist/adapter/ezsp/adapter/backup.js.map +1 -0
  117. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +53 -0
  118. package/dist/adapter/ezsp/adapter/ezspAdapter.js +464 -0
  119. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +1 -0
  120. package/dist/adapter/ezsp/driver/commands.d.ts +37 -0
  121. package/dist/adapter/ezsp/driver/commands.d.ts.map +1 -0
  122. package/dist/adapter/ezsp/driver/commands.js +2387 -0
  123. package/dist/adapter/ezsp/driver/commands.js.map +1 -0
  124. package/dist/adapter/ezsp/driver/consts.d.ts +11 -0
  125. package/dist/adapter/ezsp/driver/consts.d.ts.map +1 -0
  126. package/dist/adapter/ezsp/driver/consts.js +14 -0
  127. package/dist/adapter/ezsp/driver/consts.js.map +1 -0
  128. package/dist/adapter/ezsp/driver/driver.d.ts +96 -0
  129. package/dist/adapter/ezsp/driver/driver.js +852 -0
  130. package/dist/adapter/ezsp/driver/driver.js.map +1 -0
  131. package/dist/adapter/ezsp/driver/ezsp.d.ts +104 -0
  132. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +1 -0
  133. package/dist/adapter/ezsp/driver/ezsp.js +678 -0
  134. package/dist/adapter/ezsp/driver/ezsp.js.map +1 -0
  135. package/dist/adapter/ezsp/driver/frame.d.ts +39 -0
  136. package/dist/adapter/ezsp/driver/frame.d.ts.map +1 -0
  137. package/dist/adapter/ezsp/driver/frame.js +101 -0
  138. package/dist/adapter/ezsp/driver/frame.js.map +1 -0
  139. package/dist/adapter/ezsp/driver/index.d.ts +4 -0
  140. package/dist/adapter/ezsp/driver/index.js +8 -0
  141. package/dist/adapter/ezsp/driver/index.js.map +1 -0
  142. package/dist/adapter/ezsp/driver/multicast.d.ts +16 -0
  143. package/dist/adapter/ezsp/driver/multicast.js +74 -0
  144. package/dist/adapter/ezsp/driver/multicast.js.map +1 -0
  145. package/dist/adapter/ezsp/driver/parser.d.ts +9 -0
  146. package/dist/adapter/ezsp/driver/parser.d.ts.map +1 -0
  147. package/dist/adapter/ezsp/driver/parser.js +109 -0
  148. package/dist/adapter/ezsp/driver/parser.js.map +1 -0
  149. package/dist/adapter/ezsp/driver/types/basic.d.ts +62 -0
  150. package/dist/adapter/ezsp/driver/types/basic.d.ts.map +1 -0
  151. package/dist/adapter/ezsp/driver/types/basic.js +187 -0
  152. package/dist/adapter/ezsp/driver/types/basic.js.map +1 -0
  153. package/dist/adapter/ezsp/driver/types/index.d.ts +9 -0
  154. package/dist/adapter/ezsp/driver/types/index.d.ts.map +1 -0
  155. package/dist/adapter/ezsp/driver/types/index.js +137 -0
  156. package/dist/adapter/ezsp/driver/types/index.js.map +1 -0
  157. package/dist/adapter/ezsp/driver/types/named.d.ts +1287 -0
  158. package/dist/adapter/ezsp/driver/types/named.d.ts.map +1 -0
  159. package/dist/adapter/ezsp/driver/types/named.js +2337 -0
  160. package/dist/adapter/ezsp/driver/types/named.js.map +1 -0
  161. package/dist/adapter/ezsp/driver/types/struct.d.ts +270 -0
  162. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +1 -0
  163. package/dist/adapter/ezsp/driver/types/struct.js +869 -0
  164. package/dist/adapter/ezsp/driver/types/struct.js.map +1 -0
  165. package/dist/adapter/ezsp/driver/uart.d.ts +46 -0
  166. package/dist/adapter/ezsp/driver/uart.d.ts.map +1 -0
  167. package/dist/adapter/ezsp/driver/uart.js +390 -0
  168. package/dist/adapter/ezsp/driver/uart.js.map +1 -0
  169. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +5 -0
  170. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +1 -0
  171. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +37 -0
  172. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +1 -0
  173. package/dist/adapter/ezsp/driver/utils/index.d.ts +5 -0
  174. package/dist/adapter/ezsp/driver/utils/index.d.ts.map +1 -0
  175. package/dist/adapter/ezsp/driver/utils/index.js +35 -0
  176. package/dist/adapter/ezsp/driver/utils/index.js.map +1 -0
  177. package/dist/adapter/ezsp/driver/writer.d.ts +12 -0
  178. package/dist/adapter/ezsp/driver/writer.d.ts.map +1 -0
  179. package/dist/adapter/ezsp/driver/writer.js +92 -0
  180. package/dist/adapter/ezsp/driver/writer.js.map +1 -0
  181. package/dist/adapter/index.d.ts +4 -0
  182. package/dist/adapter/index.js +41 -0
  183. package/dist/adapter/index.js.map +1 -0
  184. package/dist/adapter/serialPort.d.ts +19 -0
  185. package/dist/adapter/serialPort.d.ts.map +1 -0
  186. package/dist/adapter/serialPort.js +51 -0
  187. package/dist/adapter/serialPort.js.map +1 -0
  188. package/dist/adapter/tstype.d.ts +52 -0
  189. package/dist/adapter/tstype.d.ts.map +1 -0
  190. package/dist/adapter/tstype.js +3 -0
  191. package/dist/adapter/tstype.js.map +1 -0
  192. package/dist/adapter/utils.d.ts +8 -0
  193. package/dist/adapter/utils.d.ts.map +1 -0
  194. package/dist/adapter/utils.js +42 -0
  195. package/dist/adapter/utils.js.map +1 -0
  196. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +62 -0
  197. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +1 -0
  198. package/dist/adapter/z-stack/adapter/adapter-backup.js +469 -0
  199. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +1 -0
  200. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +150 -0
  201. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +1 -0
  202. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +279 -0
  203. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +1 -0
  204. package/dist/adapter/z-stack/adapter/endpoints.d.ts +12 -0
  205. package/dist/adapter/z-stack/adapter/endpoints.js +87 -0
  206. package/dist/adapter/z-stack/adapter/endpoints.js.map +1 -0
  207. package/dist/adapter/z-stack/adapter/manager.d.ts +86 -0
  208. package/dist/adapter/z-stack/adapter/manager.js +493 -0
  209. package/dist/adapter/z-stack/adapter/manager.js.map +1 -0
  210. package/dist/adapter/z-stack/adapter/tstype.d.ts +7 -0
  211. package/dist/adapter/z-stack/adapter/tstype.d.ts.map +1 -0
  212. package/dist/adapter/z-stack/adapter/tstype.js +10 -0
  213. package/dist/adapter/z-stack/adapter/tstype.js.map +1 -0
  214. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +85 -0
  215. package/dist/adapter/z-stack/adapter/zStackAdapter.js +924 -0
  216. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +1 -0
  217. package/dist/adapter/z-stack/constants/af.d.ts +24 -0
  218. package/dist/adapter/z-stack/constants/af.d.ts.map +1 -0
  219. package/dist/adapter/z-stack/constants/af.js +28 -0
  220. package/dist/adapter/z-stack/constants/af.js.map +1 -0
  221. package/dist/adapter/z-stack/constants/common.d.ts +279 -0
  222. package/dist/adapter/z-stack/constants/common.d.ts.map +1 -0
  223. package/dist/adapter/z-stack/constants/common.js +290 -0
  224. package/dist/adapter/z-stack/constants/common.js.map +1 -0
  225. package/dist/adapter/z-stack/constants/dbg.d.ts +23 -0
  226. package/dist/adapter/z-stack/constants/dbg.d.ts.map +1 -0
  227. package/dist/adapter/z-stack/constants/dbg.js +25 -0
  228. package/dist/adapter/z-stack/constants/dbg.js.map +1 -0
  229. package/dist/adapter/z-stack/constants/index.d.ts +11 -0
  230. package/dist/adapter/z-stack/constants/index.d.ts.map +1 -0
  231. package/dist/adapter/z-stack/constants/index.js +58 -0
  232. package/dist/adapter/z-stack/constants/index.js.map +1 -0
  233. package/dist/adapter/z-stack/constants/mac.d.ts +128 -0
  234. package/dist/adapter/z-stack/constants/mac.d.ts.map +1 -0
  235. package/dist/adapter/z-stack/constants/mac.js +130 -0
  236. package/dist/adapter/z-stack/constants/mac.js.map +1 -0
  237. package/dist/adapter/z-stack/constants/sapi.d.ts +25 -0
  238. package/dist/adapter/z-stack/constants/sapi.d.ts.map +1 -0
  239. package/dist/adapter/z-stack/constants/sapi.js +27 -0
  240. package/dist/adapter/z-stack/constants/sapi.js.map +1 -0
  241. package/dist/adapter/z-stack/constants/sys.d.ts +72 -0
  242. package/dist/adapter/z-stack/constants/sys.d.ts.map +1 -0
  243. package/dist/adapter/z-stack/constants/sys.js +74 -0
  244. package/dist/adapter/z-stack/constants/sys.js.map +1 -0
  245. package/dist/adapter/z-stack/constants/util.d.ts +82 -0
  246. package/dist/adapter/z-stack/constants/util.d.ts.map +1 -0
  247. package/dist/adapter/z-stack/constants/util.js +84 -0
  248. package/dist/adapter/z-stack/constants/util.js.map +1 -0
  249. package/dist/adapter/z-stack/constants/utils.d.ts +5 -0
  250. package/dist/adapter/z-stack/constants/utils.d.ts.map +1 -0
  251. package/dist/adapter/z-stack/constants/utils.js +14 -0
  252. package/dist/adapter/z-stack/constants/utils.js.map +1 -0
  253. package/dist/adapter/z-stack/constants/zdo.d.ts +103 -0
  254. package/dist/adapter/z-stack/constants/zdo.d.ts.map +1 -0
  255. package/dist/adapter/z-stack/constants/zdo.js +105 -0
  256. package/dist/adapter/z-stack/constants/zdo.js.map +1 -0
  257. package/dist/adapter/z-stack/models/startup-options.d.ts +13 -0
  258. package/dist/adapter/z-stack/models/startup-options.js +3 -0
  259. package/dist/adapter/z-stack/models/startup-options.js.map +1 -0
  260. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +23 -0
  261. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +1 -0
  262. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +43 -0
  263. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +1 -0
  264. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +10 -0
  265. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +1 -0
  266. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +24 -0
  267. package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +1 -0
  268. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +10 -0
  269. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +1 -0
  270. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +16 -0
  271. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +1 -0
  272. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +10 -0
  273. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +1 -0
  274. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +25 -0
  275. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +1 -0
  276. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +10 -0
  277. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +1 -0
  278. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +23 -0
  279. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +1 -0
  280. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +10 -0
  281. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +1 -0
  282. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +25 -0
  283. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +1 -0
  284. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +8 -0
  285. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +1 -0
  286. package/dist/adapter/z-stack/structs/entries/channel-list.js +12 -0
  287. package/dist/adapter/z-stack/structs/entries/channel-list.js.map +1 -0
  288. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +8 -0
  289. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +1 -0
  290. package/dist/adapter/z-stack/structs/entries/has-configured.js +22 -0
  291. package/dist/adapter/z-stack/structs/entries/has-configured.js.map +1 -0
  292. package/dist/adapter/z-stack/structs/entries/index.d.ts +17 -0
  293. package/dist/adapter/z-stack/structs/entries/index.d.ts.map +1 -0
  294. package/dist/adapter/z-stack/structs/entries/index.js +33 -0
  295. package/dist/adapter/z-stack/structs/entries/index.js.map +1 -0
  296. package/dist/adapter/z-stack/structs/entries/nib.d.ts +10 -0
  297. package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +1 -0
  298. package/dist/adapter/z-stack/structs/entries/nib.js +72 -0
  299. package/dist/adapter/z-stack/structs/entries/nib.js.map +1 -0
  300. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +10 -0
  301. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +1 -0
  302. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +21 -0
  303. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +1 -0
  304. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +8 -0
  305. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +1 -0
  306. package/dist/adapter/z-stack/structs/entries/nwk-key.js +19 -0
  307. package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +1 -0
  308. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +8 -0
  309. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +1 -0
  310. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +12 -0
  311. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +1 -0
  312. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +13 -0
  313. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +1 -0
  314. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +22 -0
  315. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +1 -0
  316. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +10 -0
  317. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +1 -0
  318. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +24 -0
  319. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +1 -0
  320. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +20 -0
  321. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +1 -0
  322. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +35 -0
  323. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +1 -0
  324. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +10 -0
  325. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +1 -0
  326. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +25 -0
  327. package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +1 -0
  328. package/dist/adapter/z-stack/structs/index.d.ts +5 -0
  329. package/dist/adapter/z-stack/structs/index.d.ts.map +1 -0
  330. package/dist/adapter/z-stack/structs/index.js +21 -0
  331. package/dist/adapter/z-stack/structs/index.js.map +1 -0
  332. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +13 -0
  333. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +1 -0
  334. package/dist/adapter/z-stack/structs/serializable-memory-object.js +3 -0
  335. package/dist/adapter/z-stack/structs/serializable-memory-object.js.map +1 -0
  336. package/dist/adapter/z-stack/structs/struct.d.ts +99 -0
  337. package/dist/adapter/z-stack/structs/struct.d.ts.map +1 -0
  338. package/dist/adapter/z-stack/structs/struct.js +308 -0
  339. package/dist/adapter/z-stack/structs/struct.js.map +1 -0
  340. package/dist/adapter/z-stack/structs/table.d.ts +94 -0
  341. package/dist/adapter/z-stack/structs/table.d.ts.map +1 -0
  342. package/dist/adapter/z-stack/structs/table.js +167 -0
  343. package/dist/adapter/z-stack/structs/table.js.map +1 -0
  344. package/dist/adapter/z-stack/unpi/constants.d.ts +29 -0
  345. package/dist/adapter/z-stack/unpi/constants.d.ts.map +1 -0
  346. package/dist/adapter/z-stack/unpi/constants.js +40 -0
  347. package/dist/adapter/z-stack/unpi/constants.js.map +1 -0
  348. package/dist/adapter/z-stack/unpi/frame.d.ts +15 -0
  349. package/dist/adapter/z-stack/unpi/frame.d.ts.map +1 -0
  350. package/dist/adapter/z-stack/unpi/frame.js +53 -0
  351. package/dist/adapter/z-stack/unpi/frame.js.map +1 -0
  352. package/dist/adapter/z-stack/unpi/index.d.ts +5 -0
  353. package/dist/adapter/z-stack/unpi/index.d.ts.map +1 -0
  354. package/dist/adapter/z-stack/unpi/index.js +44 -0
  355. package/dist/adapter/z-stack/unpi/index.js.map +1 -0
  356. package/dist/adapter/z-stack/unpi/parser.d.ts +10 -0
  357. package/dist/adapter/z-stack/unpi/parser.d.ts.map +1 -0
  358. package/dist/adapter/z-stack/unpi/parser.js +94 -0
  359. package/dist/adapter/z-stack/unpi/parser.js.map +1 -0
  360. package/dist/adapter/z-stack/unpi/writer.d.ts +9 -0
  361. package/dist/adapter/z-stack/unpi/writer.d.ts.map +1 -0
  362. package/dist/adapter/z-stack/unpi/writer.js +66 -0
  363. package/dist/adapter/z-stack/unpi/writer.js.map +1 -0
  364. package/dist/adapter/z-stack/utils/channel-list.d.ts +21 -0
  365. package/dist/adapter/z-stack/utils/channel-list.d.ts.map +1 -0
  366. package/dist/adapter/z-stack/utils/channel-list.js +45 -0
  367. package/dist/adapter/z-stack/utils/channel-list.js.map +1 -0
  368. package/dist/adapter/z-stack/utils/index.d.ts +3 -0
  369. package/dist/adapter/z-stack/utils/index.d.ts.map +1 -0
  370. package/dist/adapter/z-stack/utils/index.js +19 -0
  371. package/dist/adapter/z-stack/utils/index.js.map +1 -0
  372. package/dist/adapter/z-stack/utils/network-options.d.ts +9 -0
  373. package/dist/adapter/z-stack/utils/network-options.d.ts.map +1 -0
  374. package/dist/adapter/z-stack/utils/network-options.js +22 -0
  375. package/dist/adapter/z-stack/utils/network-options.js.map +1 -0
  376. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +10 -0
  377. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +1 -0
  378. package/dist/adapter/z-stack/znp/buffaloZnp.js +162 -0
  379. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +1 -0
  380. package/dist/adapter/z-stack/znp/definition.d.ts +18 -0
  381. package/dist/adapter/z-stack/znp/definition.d.ts.map +1 -0
  382. package/dist/adapter/z-stack/znp/definition.js +2703 -0
  383. package/dist/adapter/z-stack/znp/definition.js.map +1 -0
  384. package/dist/adapter/z-stack/znp/index.d.ts +3 -0
  385. package/dist/adapter/z-stack/znp/index.d.ts.map +1 -0
  386. package/dist/adapter/z-stack/znp/index.js +8 -0
  387. package/dist/adapter/z-stack/znp/index.js.map +1 -0
  388. package/dist/adapter/z-stack/znp/parameterType.d.ts +19 -0
  389. package/dist/adapter/z-stack/znp/parameterType.d.ts.map +1 -0
  390. package/dist/adapter/z-stack/znp/parameterType.js +22 -0
  391. package/dist/adapter/z-stack/znp/parameterType.js.map +1 -0
  392. package/dist/adapter/z-stack/znp/tstype.d.ts +40 -0
  393. package/dist/adapter/z-stack/znp/tstype.d.ts.map +1 -0
  394. package/dist/adapter/z-stack/znp/tstype.js +3 -0
  395. package/dist/adapter/z-stack/znp/tstype.js.map +1 -0
  396. package/dist/adapter/z-stack/znp/utils.d.ts +4 -0
  397. package/dist/adapter/z-stack/znp/utils.d.ts.map +1 -0
  398. package/dist/adapter/z-stack/znp/utils.js +12 -0
  399. package/dist/adapter/z-stack/znp/utils.js.map +1 -0
  400. package/dist/adapter/z-stack/znp/znp.d.ts +43 -0
  401. package/dist/adapter/z-stack/znp/znp.d.ts.map +1 -0
  402. package/dist/adapter/z-stack/znp/znp.js +295 -0
  403. package/dist/adapter/z-stack/znp/znp.js.map +1 -0
  404. package/dist/adapter/z-stack/znp/zpiObject.d.ts +19 -0
  405. package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +1 -0
  406. package/dist/adapter/z-stack/znp/zpiObject.js +121 -0
  407. package/dist/adapter/z-stack/znp/zpiObject.js.map +1 -0
  408. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts +44 -0
  409. package/dist/adapter/zboss/adapter/zbossAdapter.js +365 -0
  410. package/dist/adapter/zboss/adapter/zbossAdapter.js.map +1 -0
  411. package/dist/adapter/zboss/commands.d.ts +20 -0
  412. package/dist/adapter/zboss/commands.d.ts.map +1 -0
  413. package/dist/adapter/zboss/commands.js +1141 -0
  414. package/dist/adapter/zboss/commands.js.map +1 -0
  415. package/dist/adapter/zboss/consts.d.ts +9 -0
  416. package/dist/adapter/zboss/consts.d.ts.map +1 -0
  417. package/dist/adapter/zboss/consts.js +12 -0
  418. package/dist/adapter/zboss/consts.js.map +1 -0
  419. package/dist/adapter/zboss/driver.d.ts +55 -0
  420. package/dist/adapter/zboss/driver.js +358 -0
  421. package/dist/adapter/zboss/driver.js.map +1 -0
  422. package/dist/adapter/zboss/enums.d.ts +301 -0
  423. package/dist/adapter/zboss/enums.d.ts.map +1 -0
  424. package/dist/adapter/zboss/enums.js +359 -0
  425. package/dist/adapter/zboss/enums.js.map +1 -0
  426. package/dist/adapter/zboss/frame.d.ts +34 -0
  427. package/dist/adapter/zboss/reader.d.ts +8 -0
  428. package/dist/adapter/zboss/reader.d.ts.map +1 -0
  429. package/dist/adapter/zboss/reader.js +59 -0
  430. package/dist/adapter/zboss/reader.js.map +1 -0
  431. package/dist/adapter/zboss/types.d.ts +2 -0
  432. package/dist/adapter/zboss/types.d.ts.map +1 -0
  433. package/dist/adapter/zboss/types.js +3 -0
  434. package/dist/adapter/zboss/types.js.map +1 -0
  435. package/dist/adapter/zboss/uart.d.ts +38 -0
  436. package/dist/adapter/zboss/uart.js +373 -0
  437. package/dist/adapter/zboss/uart.js.map +1 -0
  438. package/dist/adapter/zboss/utils.d.ts +9 -0
  439. package/dist/adapter/zboss/utils.d.ts.map +1 -0
  440. package/dist/adapter/zboss/utils.js +56 -0
  441. package/dist/adapter/zboss/utils.js.map +1 -0
  442. package/dist/adapter/zboss/writer.d.ts +14 -0
  443. package/dist/adapter/zboss/writer.d.ts.map +1 -0
  444. package/dist/adapter/zboss/writer.js +41 -0
  445. package/dist/adapter/zboss/writer.js.map +1 -0
  446. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.d.ts +5 -0
  447. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.d.ts.map +1 -0
  448. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js +26 -0
  449. package/dist/adapter/zigate/adapter/patchZdoBuffaloBE.js.map +1 -0
  450. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +63 -0
  451. package/dist/adapter/zigate/adapter/zigateAdapter.js +462 -0
  452. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +1 -0
  453. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +22 -0
  454. package/dist/adapter/zigate/driver/commandType.d.ts +42 -0
  455. package/dist/adapter/zigate/driver/commandType.d.ts.map +1 -0
  456. package/dist/adapter/zigate/driver/commandType.js +381 -0
  457. package/dist/adapter/zigate/driver/commandType.js.map +1 -0
  458. package/dist/adapter/zigate/driver/constants.d.ts +116 -0
  459. package/dist/adapter/zigate/driver/constants.d.ts.map +1 -0
  460. package/dist/adapter/zigate/driver/constants.js +147 -0
  461. package/dist/adapter/zigate/driver/constants.js.map +1 -0
  462. package/dist/adapter/zigate/driver/frame.d.ts +26 -0
  463. package/dist/adapter/zigate/driver/frame.d.ts.map +1 -0
  464. package/dist/adapter/zigate/driver/frame.js +161 -0
  465. package/dist/adapter/zigate/driver/frame.js.map +1 -0
  466. package/dist/adapter/zigate/driver/messageType.d.ts +13 -0
  467. package/dist/adapter/zigate/driver/messageType.d.ts.map +1 -0
  468. package/dist/adapter/zigate/driver/messageType.js +281 -0
  469. package/dist/adapter/zigate/driver/messageType.js.map +1 -0
  470. package/dist/adapter/zigate/driver/parameterType.d.ts +25 -0
  471. package/dist/adapter/zigate/driver/parameterType.d.ts.map +1 -0
  472. package/dist/adapter/zigate/driver/parameterType.js +31 -0
  473. package/dist/adapter/zigate/driver/parameterType.js.map +1 -0
  474. package/dist/adapter/zigate/driver/ziGateObject.d.ts +23 -0
  475. package/dist/adapter/zigate/driver/ziGateObject.js +117 -0
  476. package/dist/adapter/zigate/driver/ziGateObject.js.map +1 -0
  477. package/dist/adapter/zigate/driver/zigate.d.ts +47 -0
  478. package/dist/adapter/zigate/driver/zigate.js +364 -0
  479. package/dist/adapter/zigate/driver/zigate.js.map +1 -0
  480. package/dist/adapter/zoh/adapter/utils.d.ts +16 -0
  481. package/dist/adapter/zoh/adapter/utils.d.ts.map +1 -0
  482. package/dist/adapter/zoh/adapter/utils.js +31 -0
  483. package/dist/adapter/zoh/adapter/utils.js.map +1 -0
  484. package/dist/adapter/zoh/adapter/zohAdapter.d.ts +100 -0
  485. package/dist/adapter/zoh/adapter/zohAdapter.js +715 -0
  486. package/dist/adapter/zoh/adapter/zohAdapter.js.map +1 -0
  487. package/dist/buffalo/buffalo.d.ts +67 -0
  488. package/dist/buffalo/buffalo.d.ts.map +1 -0
  489. package/dist/buffalo/buffalo.js +275 -0
  490. package/dist/buffalo/buffalo.js.map +1 -0
  491. package/dist/buffalo/index.d.ts +2 -0
  492. package/dist/buffalo/index.d.ts.map +1 -0
  493. package/dist/buffalo/index.js +6 -0
  494. package/dist/buffalo/index.js.map +1 -0
  495. package/dist/controller/controller.d.ts +155 -0
  496. package/dist/controller/database.d.ts +21 -0
  497. package/dist/controller/database.js +128 -0
  498. package/dist/controller/database.js.map +1 -0
  499. package/dist/controller/events.d.ts +44 -0
  500. package/dist/controller/greenPower.d.ts +78 -0
  501. package/dist/controller/helpers/index.d.ts +2 -0
  502. package/dist/controller/helpers/index.js +38 -0
  503. package/dist/controller/helpers/index.js.map +1 -0
  504. package/dist/controller/helpers/installCodes.d.ts +27 -0
  505. package/dist/controller/helpers/installCodes.d.ts.map +1 -0
  506. package/dist/controller/helpers/installCodes.js +90 -0
  507. package/dist/controller/helpers/installCodes.js.map +1 -0
  508. package/dist/controller/helpers/ota.d.ts +53 -0
  509. package/dist/controller/helpers/request.d.ts +22 -0
  510. package/dist/controller/helpers/request.js +82 -0
  511. package/dist/controller/helpers/request.js.map +1 -0
  512. package/dist/controller/helpers/requestQueue.d.ts +13 -0
  513. package/dist/controller/helpers/requestQueue.js +109 -0
  514. package/dist/controller/helpers/requestQueue.js.map +1 -0
  515. package/dist/controller/helpers/zclFrameConverter.d.ts +7 -0
  516. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +8 -0
  517. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +1 -0
  518. package/dist/controller/helpers/zclTransactionSequenceNumber.js +14 -0
  519. package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +1 -0
  520. package/dist/controller/index.d.ts +6 -0
  521. package/dist/controller/index.js +9 -0
  522. package/dist/controller/index.js.map +1 -0
  523. package/dist/controller/model/device.d.ts +150 -0
  524. package/dist/controller/model/endpoint.d.ts +150 -0
  525. package/dist/controller/model/entity.d.ts +18 -0
  526. package/dist/controller/model/entity.js +35 -0
  527. package/dist/controller/model/entity.js.map +1 -0
  528. package/dist/controller/model/group.d.ts +50 -0
  529. package/dist/controller/model/index.d.ts +6 -0
  530. package/dist/controller/model/index.js +14 -0
  531. package/dist/controller/model/index.js.map +1 -0
  532. package/dist/controller/model/konnextConfig.d.ts +7 -0
  533. package/dist/controller/model/konnextConfig.d.ts.map +1 -0
  534. package/dist/controller/model/konnextConfig.js +3 -0
  535. package/dist/controller/model/konnextConfig.js.map +1 -0
  536. package/dist/controller/model/zigbeeEntity.d.ts +8 -0
  537. package/dist/controller/model/zigbeeEntity.js +11 -0
  538. package/dist/controller/model/zigbeeEntity.js.map +1 -0
  539. package/dist/controller/touchlink.d.ts +20 -0
  540. package/dist/controller/touchlink.js +169 -0
  541. package/dist/controller/touchlink.js.map +1 -0
  542. package/dist/controller/tstype.d.ts +152 -0
  543. package/dist/index.d.ts +13 -0
  544. package/dist/index.js +54 -0
  545. package/dist/index.js.map +1 -0
  546. package/dist/models/backup-storage-legacy.d.ts +25 -0
  547. package/dist/models/backup-storage-legacy.d.ts.map +1 -0
  548. package/dist/models/backup-storage-legacy.js +3 -0
  549. package/dist/models/backup-storage-legacy.js.map +1 -0
  550. package/dist/models/backup-storage-unified.d.ts +50 -0
  551. package/dist/models/backup-storage-unified.d.ts.map +1 -0
  552. package/dist/models/backup-storage-unified.js +3 -0
  553. package/dist/models/backup-storage-unified.js.map +1 -0
  554. package/dist/models/backup.d.ts +37 -0
  555. package/dist/models/backup.d.ts.map +1 -0
  556. package/dist/models/backup.js +3 -0
  557. package/dist/models/backup.js.map +1 -0
  558. package/dist/models/index.d.ts +5 -0
  559. package/dist/models/index.d.ts.map +1 -0
  560. package/dist/models/index.js +22 -0
  561. package/dist/models/index.js.map +1 -0
  562. package/dist/models/network-options.d.ts +12 -0
  563. package/dist/models/network-options.d.ts.map +1 -0
  564. package/dist/models/network-options.js +3 -0
  565. package/dist/models/network-options.js.map +1 -0
  566. package/dist/utils/aes.d.ts +40 -0
  567. package/dist/utils/aes.d.ts.map +1 -0
  568. package/dist/utils/aes.js +207 -0
  569. package/dist/utils/aes.js.map +1 -0
  570. package/dist/utils/async-mutex.d.ts +7 -0
  571. package/dist/utils/async-mutex.d.ts.map +1 -0
  572. package/dist/utils/async-mutex.js +31 -0
  573. package/dist/utils/async-mutex.js.map +1 -0
  574. package/dist/utils/backup.d.ts +21 -0
  575. package/dist/utils/backup.d.ts.map +1 -0
  576. package/dist/utils/backup.js +179 -0
  577. package/dist/utils/backup.js.map +1 -0
  578. package/dist/utils/index.d.ts +6 -0
  579. package/dist/utils/index.d.ts.map +1 -0
  580. package/dist/utils/index.js +45 -0
  581. package/dist/utils/index.js.map +1 -0
  582. package/dist/utils/logger.d.ts +9 -0
  583. package/dist/utils/logger.d.ts.map +1 -0
  584. package/dist/utils/logger.js +14 -0
  585. package/dist/utils/logger.js.map +1 -0
  586. package/dist/utils/patchBigIntSerialization.d.ts +2 -0
  587. package/dist/utils/patchBigIntSerialization.d.ts.map +1 -0
  588. package/dist/utils/patchBigIntSerialization.js +9 -0
  589. package/dist/utils/patchBigIntSerialization.js.map +1 -0
  590. package/dist/utils/queue.d.ts +8 -0
  591. package/dist/utils/queue.d.ts.map +1 -0
  592. package/dist/utils/queue.js +67 -0
  593. package/dist/utils/queue.js.map +1 -0
  594. package/dist/utils/timeService.d.ts +6 -0
  595. package/dist/utils/utils.d.ts +5 -0
  596. package/dist/utils/utils.d.ts.map +1 -0
  597. package/dist/utils/utils.js +24 -0
  598. package/dist/utils/utils.js.map +1 -0
  599. package/dist/utils/wait.d.ts +2 -0
  600. package/dist/utils/wait.d.ts.map +1 -0
  601. package/dist/utils/wait.js +9 -0
  602. package/dist/utils/wait.js.map +1 -0
  603. package/dist/utils/waitress.d.ts +23 -0
  604. package/dist/utils/waitress.d.ts.map +1 -0
  605. package/dist/utils/waitress.js +76 -0
  606. package/dist/utils/waitress.js.map +1 -0
  607. package/dist/zspec/consts.d.ts +75 -0
  608. package/dist/zspec/consts.d.ts.map +1 -0
  609. package/dist/zspec/consts.js +79 -0
  610. package/dist/zspec/consts.js.map +1 -0
  611. package/dist/zspec/enums.d.ts +19 -0
  612. package/dist/zspec/enums.d.ts.map +1 -0
  613. package/dist/zspec/enums.js +27 -0
  614. package/dist/zspec/enums.js.map +1 -0
  615. package/dist/zspec/index.d.ts +4 -0
  616. package/dist/zspec/index.d.ts.map +1 -0
  617. package/dist/zspec/index.js +43 -0
  618. package/dist/zspec/index.js.map +1 -0
  619. package/dist/zspec/tstypes.d.ts +19 -0
  620. package/dist/zspec/tstypes.d.ts.map +1 -0
  621. package/dist/zspec/tstypes.js +3 -0
  622. package/dist/zspec/tstypes.js.map +1 -0
  623. package/dist/zspec/utils.d.ts +77 -0
  624. package/dist/zspec/utils.d.ts.map +1 -0
  625. package/dist/zspec/utils.js +217 -0
  626. package/dist/zspec/utils.js.map +1 -0
  627. package/dist/zspec/zcl/buffaloZcl.d.ts +43 -0
  628. package/dist/zspec/zcl/definition/cluster.d.ts +3 -0
  629. package/dist/zspec/zcl/definition/consts.d.ts +9 -0
  630. package/dist/zspec/zcl/definition/consts.d.ts.map +1 -0
  631. package/dist/zspec/zcl/definition/consts.js +27 -0
  632. package/dist/zspec/zcl/definition/consts.js.map +1 -0
  633. package/dist/zspec/zcl/definition/datatypes.d.ts +2173 -0
  634. package/dist/zspec/zcl/definition/datatypes.d.ts.map +1 -0
  635. package/dist/zspec/zcl/definition/datatypes.js +2315 -0
  636. package/dist/zspec/zcl/definition/datatypes.js.map +1 -0
  637. package/dist/zspec/zcl/definition/enums.d.ts +205 -0
  638. package/dist/zspec/zcl/definition/enums.d.ts.map +1 -0
  639. package/dist/zspec/zcl/definition/enums.js +218 -0
  640. package/dist/zspec/zcl/definition/enums.js.map +1 -0
  641. package/dist/zspec/zcl/definition/foundation.d.ts +10 -0
  642. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +729 -0
  643. package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +1 -0
  644. package/dist/zspec/zcl/definition/manufacturerCode.js +734 -0
  645. package/dist/zspec/zcl/definition/manufacturerCode.js.map +1 -0
  646. package/dist/zspec/zcl/definition/status.d.ts +69 -0
  647. package/dist/zspec/zcl/definition/status.d.ts.map +1 -0
  648. package/dist/zspec/zcl/definition/status.js +74 -0
  649. package/dist/zspec/zcl/definition/status.js.map +1 -0
  650. package/dist/zspec/zcl/index.d.ts +12 -0
  651. package/dist/zspec/zcl/utils.d.ts +15 -0
  652. package/dist/zspec/zcl/zclFrame.d.ts +49 -0
  653. package/dist/zspec/zcl/zclHeader.d.ts +16 -0
  654. package/dist/zspec/zcl/zclStatusError.d.ts +6 -0
  655. package/dist/zspec/zcl/zclStatusError.d.ts.map +1 -0
  656. package/dist/zspec/zcl/zclStatusError.js +13 -0
  657. package/dist/zspec/zcl/zclStatusError.js.map +1 -0
  658. package/dist/zspec/zdo/buffaloZdo.d.ts +407 -0
  659. package/dist/zspec/zdo/buffaloZdo.d.ts.map +1 -0
  660. package/dist/zspec/zdo/buffaloZdo.js +1919 -0
  661. package/dist/zspec/zdo/buffaloZdo.js.map +1 -0
  662. package/dist/zspec/zdo/definition/clusters.d.ts +624 -0
  663. package/dist/zspec/zdo/definition/clusters.d.ts.map +1 -0
  664. package/dist/zspec/zdo/definition/clusters.js +686 -0
  665. package/dist/zspec/zdo/definition/clusters.js.map +1 -0
  666. package/dist/zspec/zdo/definition/consts.d.ts +13 -0
  667. package/dist/zspec/zdo/definition/consts.d.ts.map +1 -0
  668. package/dist/zspec/zdo/definition/consts.js +16 -0
  669. package/dist/zspec/zdo/definition/consts.js.map +1 -0
  670. package/dist/zspec/zdo/definition/enums.d.ts +85 -0
  671. package/dist/zspec/zdo/definition/enums.d.ts.map +1 -0
  672. package/dist/zspec/zdo/definition/enums.js +103 -0
  673. package/dist/zspec/zdo/definition/enums.js.map +1 -0
  674. package/dist/zspec/zdo/definition/status.d.ts +99 -0
  675. package/dist/zspec/zdo/definition/status.d.ts.map +1 -0
  676. package/dist/zspec/zdo/definition/status.js +108 -0
  677. package/dist/zspec/zdo/definition/status.js.map +1 -0
  678. package/dist/zspec/zdo/definition/tstypes.d.ts +955 -0
  679. package/dist/zspec/zdo/definition/tstypes.d.ts.map +1 -0
  680. package/dist/zspec/zdo/definition/tstypes.js +4 -0
  681. package/dist/zspec/zdo/definition/tstypes.js.map +1 -0
  682. package/dist/zspec/zdo/index.d.ts +8 -0
  683. package/dist/zspec/zdo/index.d.ts.map +1 -0
  684. package/dist/zspec/zdo/index.js +51 -0
  685. package/dist/zspec/zdo/index.js.map +1 -0
  686. package/dist/zspec/zdo/utils.d.ts +24 -0
  687. package/dist/zspec/zdo/utils.d.ts.map +1 -0
  688. package/dist/zspec/zdo/utils.js +74 -0
  689. package/dist/zspec/zdo/utils.js.map +1 -0
  690. package/dist/zspec/zdo/zdoStatusError.d.ts +6 -0
  691. package/dist/zspec/zdo/zdoStatusError.d.ts.map +1 -0
  692. package/dist/zspec/zdo/zdoStatusError.js +13 -0
  693. package/dist/zspec/zdo/zdoStatusError.js.map +1 -0
  694. package/package.json +5 -5
@@ -0,0 +1,1362 @@
1
+ "use strict";
2
+ /* v8 ignore start */
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.apsBusyQueue = exports.apsQueue = exports.busyQueue = void 0;
41
+ const node_events_1 = __importDefault(require("node:events"));
42
+ const node_net_1 = __importDefault(require("node:net"));
43
+ const slip_1 = __importDefault(require("slip"));
44
+ const buffalo_1 = require("../../../buffalo");
45
+ const logger_1 = require("../../../utils/logger");
46
+ const serialPort_1 = require("../../serialPort");
47
+ const utils_1 = require("../../utils");
48
+ const constants_1 = __importStar(require("./constants"));
49
+ const frameParser_1 = require("./frameParser");
50
+ const parser_1 = __importDefault(require("./parser"));
51
+ const writer_1 = __importDefault(require("./writer"));
52
+ const NS = "zh:deconz:driver";
53
+ const queue = [];
54
+ exports.busyQueue = [];
55
+ exports.apsQueue = [];
56
+ exports.apsBusyQueue = [];
57
+ const DRIVER_EVENT = Symbol("drv_ev");
58
+ const DEV_STATUS_NET_STATE_MASK = 0x03;
59
+ const DEV_STATUS_APS_CONFIRM = 0x04;
60
+ const DEV_STATUS_APS_INDICATION = 0x08;
61
+ const DEV_STATUS_APS_FREE_SLOTS = 0x20;
62
+ //const DEV_STATUS_CONFIG_CHANGED = 0x10;
63
+ var DriverState;
64
+ (function (DriverState) {
65
+ DriverState[DriverState["Init"] = 0] = "Init";
66
+ DriverState[DriverState["Connected"] = 1] = "Connected";
67
+ DriverState[DriverState["Connecting"] = 2] = "Connecting";
68
+ DriverState[DriverState["ReadConfiguration"] = 3] = "ReadConfiguration";
69
+ DriverState[DriverState["WaitToReconnect"] = 4] = "WaitToReconnect";
70
+ DriverState[DriverState["Reconfigure"] = 5] = "Reconfigure";
71
+ DriverState[DriverState["CloseAndRestart"] = 6] = "CloseAndRestart";
72
+ })(DriverState || (DriverState = {}));
73
+ var TxState;
74
+ (function (TxState) {
75
+ TxState[TxState["Idle"] = 0] = "Idle";
76
+ TxState[TxState["WaitResponse"] = 1] = "WaitResponse";
77
+ })(TxState || (TxState = {}));
78
+ var DriverEvent;
79
+ (function (DriverEvent) {
80
+ DriverEvent[DriverEvent["Action"] = 0] = "Action";
81
+ DriverEvent[DriverEvent["Connected"] = 1] = "Connected";
82
+ DriverEvent[DriverEvent["Disconnected"] = 2] = "Disconnected";
83
+ DriverEvent[DriverEvent["DeviceStateUpdated"] = 3] = "DeviceStateUpdated";
84
+ DriverEvent[DriverEvent["ConnectError"] = 4] = "ConnectError";
85
+ DriverEvent[DriverEvent["CloseError"] = 5] = "CloseError";
86
+ DriverEvent[DriverEvent["EnqueuedApsDataRequest"] = 6] = "EnqueuedApsDataRequest";
87
+ DriverEvent[DriverEvent["Tick"] = 7] = "Tick";
88
+ DriverEvent[DriverEvent["FirmwareCommandSend"] = 8] = "FirmwareCommandSend";
89
+ DriverEvent[DriverEvent["FirmwareCommandReceived"] = 9] = "FirmwareCommandReceived";
90
+ DriverEvent[DriverEvent["FirmwareCommandTimeout"] = 10] = "FirmwareCommandTimeout";
91
+ })(DriverEvent || (DriverEvent = {}));
92
+ class Driver extends node_events_1.default.EventEmitter {
93
+ serialPort;
94
+ serialPortOptions;
95
+ writer;
96
+ parser;
97
+ frameParserEvent = frameParser_1.frameParserEvents;
98
+ seqNumber;
99
+ deviceStatus = 0;
100
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: ignore
101
+ configChanged;
102
+ socketPort;
103
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: ignore
104
+ timeoutCounter = 0;
105
+ watchdogTriggeredTime = 0;
106
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: ignore
107
+ lastFirmwareRxTime = 0;
108
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: ignore
109
+ tickTimer;
110
+ driverStateStart = 0;
111
+ driverState = DriverState.Init;
112
+ firmwareLog;
113
+ transactionID = 0; // for APS and ZDO
114
+ // in flight lockstep sending commands
115
+ txState = TxState.Idle;
116
+ txCommand = 0;
117
+ txSeq = 0;
118
+ txTime = 0;
119
+ networkOptions;
120
+ backup;
121
+ configMatchesBackup = false;
122
+ configIsNewNetwork = false;
123
+ restoredFromBackup = false;
124
+ paramMacAddress = 0n;
125
+ paramTcAddress = 0n;
126
+ paramFirmwareVersion = 0;
127
+ paramCurrentChannel = 0;
128
+ paramNwkPanid = 0;
129
+ paramNwkKey = Buffer.alloc(16);
130
+ paramEndpoint0;
131
+ paramEndpoint1;
132
+ fixParamEndpoint0;
133
+ fixParamEndpoint1;
134
+ paramNwkUpdateId = 0;
135
+ paramChannelMask = 0;
136
+ paramProtocolVersion = 0;
137
+ paramFrameCounter = 0;
138
+ paramApsUseExtPanid = 0n;
139
+ constructor(serialPortOptions, networkOptions, backup, firmwareLog) {
140
+ super();
141
+ this.seqNumber = 0;
142
+ this.configChanged = 0;
143
+ this.networkOptions = networkOptions;
144
+ this.serialPortOptions = serialPortOptions;
145
+ this.backup = backup;
146
+ this.firmwareLog = firmwareLog;
147
+ this.writer = new writer_1.default();
148
+ this.parser = new parser_1.default();
149
+ this.fixParamEndpoint0 = Buffer.from([
150
+ 0x00, // index
151
+ 0x01, // endpoint,
152
+ 0x04, // profileId
153
+ 0x01,
154
+ 0x05, // deviceId
155
+ 0x00,
156
+ 0x01, // deviceVersion
157
+ 0x05, // in cluster count
158
+ 0x00, // basic
159
+ 0x00,
160
+ 0x06, // on/off
161
+ 0x00,
162
+ 0x0a, // time
163
+ 0x00,
164
+ 0x19, // ota
165
+ 0x00,
166
+ 0x01, // ias ace
167
+ 0x05,
168
+ 0x04, // out cluster count
169
+ 0x01, // power configuration
170
+ 0x00,
171
+ 0x20, // poll control
172
+ 0x00,
173
+ 0x00, // ias zone
174
+ 0x05,
175
+ 0x02, // ias wd
176
+ 0x05,
177
+ ]);
178
+ this.fixParamEndpoint1 = Buffer.from([
179
+ 0x01, // index
180
+ 0xf2, // endpoint,
181
+ 0xe0, // profileId
182
+ 0xa1,
183
+ 0x64, // deviceId
184
+ 0x00,
185
+ 0x01, // deviceVersion
186
+ 0x00, // in cluster count
187
+ 0x01, // out cluster count
188
+ 0x21, // green power
189
+ 0x00,
190
+ ]);
191
+ this.tickTimer = setInterval(() => {
192
+ this.tick();
193
+ }, 100);
194
+ this.onParsed = this.onParsed.bind(this);
195
+ this.frameParserEvent.on("deviceStateUpdated", (data) => {
196
+ this.checkDeviceStatus(data);
197
+ });
198
+ this.on("close", () => {
199
+ for (const interval of this.intervals) {
200
+ clearInterval(interval);
201
+ }
202
+ this.timeoutCounter = 0;
203
+ this.cleanupAllQueues();
204
+ });
205
+ this.on(DRIVER_EVENT, (event, data) => {
206
+ this.handleStateEvent(event, data);
207
+ });
208
+ }
209
+ cleanupAllQueues() {
210
+ const msg = `Cleanup in state: ${DriverState[this.driverState]}`;
211
+ for (let i = 0; i < queue.length; i++) {
212
+ queue[i].reject(new Error(msg));
213
+ }
214
+ queue.length = 0;
215
+ for (let i = 0; i < exports.busyQueue.length; i++) {
216
+ exports.busyQueue[i].reject(new Error(msg));
217
+ }
218
+ exports.busyQueue.length = 0;
219
+ for (let i = 0; i < exports.apsQueue.length; i++) {
220
+ exports.apsQueue[i].reject(new Error(msg));
221
+ }
222
+ exports.apsQueue.length = 0;
223
+ for (let i = 0; i < exports.apsBusyQueue.length; i++) {
224
+ exports.apsBusyQueue[i].reject(new Error(msg));
225
+ }
226
+ exports.apsBusyQueue.length = 0;
227
+ }
228
+ started() {
229
+ return this.driverState === DriverState.Connected;
230
+ }
231
+ intervals = [];
232
+ registerInterval(interval) {
233
+ this.intervals.push(interval);
234
+ }
235
+ async catchPromise(val) {
236
+ return (await Promise.resolve(val).catch((err) => logger_1.logger.debug(`Promise was caught with reason: ${err}`, NS)));
237
+ }
238
+ nextTransactionID() {
239
+ this.transactionID++;
240
+ if (this.transactionID > 255) {
241
+ this.transactionID = 1;
242
+ }
243
+ return this.transactionID;
244
+ }
245
+ tick() {
246
+ this.emitStateEvent(DriverEvent.Tick);
247
+ }
248
+ emitStateEvent(event, data) {
249
+ this.emit(DRIVER_EVENT, event, data);
250
+ }
251
+ needWatchdogReset() {
252
+ const now = Date.now();
253
+ if (300 * 1000 < now - this.watchdogTriggeredTime) {
254
+ return true;
255
+ }
256
+ return false;
257
+ }
258
+ async resetWatchdog() {
259
+ const lastTime = this.watchdogTriggeredTime;
260
+ try {
261
+ logger_1.logger.debug("Reset firmware watchdog", NS);
262
+ // Set timestamp before command to let needWatchdogReset() no trigger multiple times.
263
+ this.watchdogTriggeredTime = Date.now();
264
+ await this.writeParameterRequest(constants_1.ParamId.DEV_WATCHDOG_TTL, 600);
265
+ logger_1.logger.debug("Reset firmware watchdog success", NS);
266
+ }
267
+ catch (_err) {
268
+ this.watchdogTriggeredTime = lastTime;
269
+ logger_1.logger.debug("Reset firmware watchdog failed", NS);
270
+ }
271
+ }
272
+ handleFirmwareEvent(event, data) {
273
+ if (event === DriverEvent.FirmwareCommandSend) {
274
+ if (this.txState !== TxState.Idle) {
275
+ throw new Error("Unexpected TX state not idle");
276
+ }
277
+ const d = data;
278
+ this.txState = TxState.WaitResponse;
279
+ this.txCommand = d.cmd;
280
+ this.txSeq = d.seq;
281
+ this.txTime = Date.now();
282
+ //logger.debug(`tx wait for cmd: ${d.cmd.toString(16).padStart(2, "0")}, seq: ${d.seq}`, NS);
283
+ }
284
+ else if (event === DriverEvent.FirmwareCommandReceived) {
285
+ if (this.txState !== TxState.WaitResponse) {
286
+ return;
287
+ }
288
+ const d = data;
289
+ if (this.txCommand === d.cmd && this.txSeq === d.seq) {
290
+ this.txState = TxState.Idle;
291
+ //logger.debug(`tx released for cmd: ${d.cmd.toString(16).padStart(2, "0")}, seq: ${d.seq}`, NS);
292
+ }
293
+ }
294
+ else if (event === DriverEvent.FirmwareCommandTimeout) {
295
+ if (this.txState === TxState.WaitResponse) {
296
+ this.txState = TxState.Idle;
297
+ logger_1.logger.debug(`tx timeout for cmd: ${this.txCommand.toString(16).padStart(2, "0")}, seq: ${this.txSeq}`, NS);
298
+ }
299
+ }
300
+ else if (event === DriverEvent.Tick) {
301
+ if (this.txState === TxState.WaitResponse) {
302
+ if (Date.now() - this.txTime > 2000) {
303
+ this.emitStateEvent(DriverEvent.FirmwareCommandTimeout);
304
+ }
305
+ }
306
+ }
307
+ }
308
+ handleConnectedStateEvent(event, _data) {
309
+ if (event === DriverEvent.DeviceStateUpdated) {
310
+ this.handleApsQueueOnDeviceState();
311
+ }
312
+ else if (event === DriverEvent.Tick) {
313
+ if (this.needWatchdogReset()) {
314
+ this.resetWatchdog().catch(() => { });
315
+ }
316
+ this.processQueue();
317
+ if (this.txState === TxState.Idle) {
318
+ this.deviceStatus = 0; // force refresh in response
319
+ this.sendReadDeviceStateRequest(this.nextSeqNumber());
320
+ }
321
+ }
322
+ else if (event === DriverEvent.Disconnected) {
323
+ logger_1.logger.debug("Disconnected wait and reconnect", NS);
324
+ this.driverStateStart = Date.now();
325
+ this.driverState = DriverState.WaitToReconnect;
326
+ }
327
+ }
328
+ handleConnectingStateEvent(event, _data) {
329
+ if (event === DriverEvent.Action) {
330
+ this.watchdogTriggeredTime = 0; // force reset watchdog
331
+ this.cleanupAllQueues(); // start with fresh queues
332
+ // TODO(mpi): In future we should simply try which baudrate may work (in a state machine).
333
+ // E.g. connect with baudrate XY, query firmware, on timeout try other baudrate.
334
+ // Most units out there are ConBee2/3 which support 115200.
335
+ // The 38400 default is outdated now and only works for a few units.
336
+ const baudrate = this.serialPortOptions.baudRate || 38400;
337
+ if (!this.serialPortOptions.path) {
338
+ // unlikely but handle it anyway
339
+ this.driverStateStart = Date.now();
340
+ this.driverState = DriverState.WaitToReconnect;
341
+ return;
342
+ }
343
+ let prom;
344
+ if ((0, utils_1.isTcpPath)(this.serialPortOptions.path)) {
345
+ prom = this.openSocketPort();
346
+ }
347
+ else if (baudrate) {
348
+ prom = this.openSerialPort(baudrate);
349
+ }
350
+ else {
351
+ // unlikely but handle it anyway
352
+ this.driverStateStart = Date.now();
353
+ this.driverState = DriverState.WaitToReconnect;
354
+ }
355
+ // biome-ignore lint/nursery/noMisusedPromises: ignore
356
+ if (prom) {
357
+ prom.catch((err) => {
358
+ logger_1.logger.debug(`${err}`, NS);
359
+ this.driverStateStart = Date.now();
360
+ this.driverState = DriverState.WaitToReconnect;
361
+ });
362
+ }
363
+ }
364
+ else if (event === DriverEvent.Connected) {
365
+ this.driverStateStart = Date.now();
366
+ this.driverState = DriverState.ReadConfiguration;
367
+ this.emitStateEvent(DriverEvent.Action);
368
+ }
369
+ }
370
+ isNetworkConfigurationValid() {
371
+ const opts = this.networkOptions;
372
+ let configExtPanID = 0n;
373
+ const configNetworkKey = Buffer.from(opts.networkKey || []);
374
+ if (opts.extendedPanID) {
375
+ // NOTE(mpi): U64 values in buffer are big endian!
376
+ configExtPanID = Buffer.from(opts.extendedPanID).readBigUInt64BE();
377
+ }
378
+ if (this.backup) {
379
+ // NOTE(mpi): U64 values in buffer are big endian!
380
+ const backupExtPanID = Buffer.from(this.backup.networkOptions.extendedPanId).readBigUInt64BE();
381
+ if (opts.panID === this.backup.networkOptions.panId &&
382
+ configExtPanID === backupExtPanID &&
383
+ opts.channelList.includes(this.backup.logicalChannel) &&
384
+ configNetworkKey.equals(this.backup.networkOptions.networkKey)) {
385
+ logger_1.logger.debug("Configuration matches backup", NS);
386
+ this.configMatchesBackup = true;
387
+ }
388
+ else {
389
+ logger_1.logger.debug("Configuration doesn't match backup (ignore backup)", NS);
390
+ this.configMatchesBackup = false; // ignore Backup
391
+ }
392
+ }
393
+ if (this.paramMacAddress !== this.paramTcAddress) {
394
+ return false;
395
+ }
396
+ if (!this.paramEndpoint0 || this.fixParamEndpoint0.compare(this.paramEndpoint0) !== 0) {
397
+ logger_1.logger.debug("Endpoint[0] doesn't match configuration", NS);
398
+ return false;
399
+ }
400
+ if (!this.paramEndpoint1 || this.fixParamEndpoint1.compare(this.paramEndpoint1) !== 0) {
401
+ logger_1.logger.debug("Endpoint[1] doesn't match configuration", NS);
402
+ return false;
403
+ }
404
+ if ((this.deviceStatus & DEV_STATUS_NET_STATE_MASK) !== constants_1.NetworkState.Connected) {
405
+ return false;
406
+ }
407
+ if (opts.channelList.find((ch) => ch === this.paramCurrentChannel) === undefined) {
408
+ return false;
409
+ }
410
+ if (configExtPanID !== 0n) {
411
+ if (configExtPanID !== this.paramApsUseExtPanid) {
412
+ this.configIsNewNetwork = true;
413
+ return false;
414
+ }
415
+ }
416
+ if (opts.panID !== this.paramNwkPanid) {
417
+ return false;
418
+ }
419
+ if (opts.networkKey) {
420
+ if (!configNetworkKey.equals(this.paramNwkKey)) {
421
+ // this.configIsNewNetwork = true; // maybe, but we need to consider key rotation
422
+ return false;
423
+ }
424
+ }
425
+ if (this.backup && this.configMatchesBackup) {
426
+ // The backup might be from another unit, if the mac doesn't match clone it!
427
+ // NOTE(mpi): U64 values in buffer are big endian!
428
+ const backupMacAddress = this.backup.coordinatorIeeeAddress.readBigUInt64BE();
429
+ if (backupMacAddress !== this.paramMacAddress) {
430
+ this.configIsNewNetwork = true;
431
+ return false;
432
+ }
433
+ if (this.paramNwkUpdateId < this.backup.networkUpdateId) {
434
+ return false;
435
+ }
436
+ // NOTE(mpi): Ignore the frame counter for now and only handle in case of this.configIsNewNetwork == true.
437
+ // TODO(mpi): We might also check Trust Center Link Key and key sequence number (unlikely but possible case).
438
+ }
439
+ // TODO(mpi): Check endpoint configuration
440
+ // const ep1 = = await this.driver.readParameterRequest(PARAM.PARAM.STK.Endpoint,);
441
+ return true;
442
+ }
443
+ async reconfigureNetwork() {
444
+ const opts = this.networkOptions;
445
+ // if the configuration has a different channel, broadcast a channel change to the network first
446
+ if (this.networkOptions.channelList.length !== 0) {
447
+ if (opts.channelList[0] !== this.paramCurrentChannel) {
448
+ logger_1.logger.debug(`change channel from ${this.paramCurrentChannel} to ${opts.channelList[0]}`, NS);
449
+ // increase the NWK Update ID so devices which search for the network know this is an update
450
+ this.paramNwkUpdateId = (this.paramNwkUpdateId + 1) % 255;
451
+ this.paramCurrentChannel = opts.channelList[0];
452
+ if ((this.deviceStatus & DEV_STATUS_NET_STATE_MASK) === constants_1.NetworkState.Connected) {
453
+ await this.sendChangeChannelRequest();
454
+ }
455
+ }
456
+ }
457
+ // first disconnect the network
458
+ await this.changeNetworkStateRequest(constants_1.NetworkState.Disconnected);
459
+ // check if a backup needs to be applied
460
+ // Ember check if backup is needed:
461
+ // - panId, extPanId, network key different -> leave network
462
+ // - left or not joined -> consider using backup
463
+ // backup is only used when matching the z2m config: panId, extPanId, channel, network key
464
+ // parameters restored from backup:
465
+ // - networkKey,
466
+ // - networkKeyInfo.sequenceNumber NOTE(mpi): not a reason for using backup!?
467
+ // - networkKeyInfo.frameCounter
468
+ // - networkOptions.panId
469
+ // - extendedPanId
470
+ // - logicalChannel
471
+ // - backup!.ezsp!.hashed_tclk! NOTE(mpi): not a reason for using backup!?
472
+ // - backup!.networkUpdateId NOTE(mpi): not a reason for using backup!?
473
+ let frameCounter = 0;
474
+ if (this.backup && this.configMatchesBackup) {
475
+ // NOTE(mpi): U64 values in buffer are big endian!
476
+ const backupMacAddress = this.backup.coordinatorIeeeAddress.readBigUInt64BE();
477
+ if (backupMacAddress !== this.paramMacAddress) {
478
+ logger_1.logger.debug(`Use mac address from backup 0x${backupMacAddress.toString(16).padStart(16, "0")}, replaces 0x${this.paramMacAddress.toString(16).padStart(16, "0")}`, NS);
479
+ this.paramMacAddress = backupMacAddress;
480
+ this.restoredFromBackup = true;
481
+ await this.writeParameterRequest(constants_1.ParamId.MAC_ADDRESS, backupMacAddress);
482
+ }
483
+ if (this.configIsNewNetwork && this.paramFrameCounter < this.backup.networkKeyInfo.frameCounter) {
484
+ // delicate situation, only update frame counter if:
485
+ // - backup counter is higher
486
+ // - this is in fact a new network
487
+ // - configIsNewNetwork guards also from mistreating counter overflow
488
+ logger_1.logger.debug(`Use higher frame counter from backup ${this.backup.networkKeyInfo.frameCounter}`, NS);
489
+ // Additionally increase frame counter. Note this might still be too low!
490
+ frameCounter = this.backup.networkKeyInfo.frameCounter + 1000;
491
+ this.restoredFromBackup = true;
492
+ }
493
+ if (this.paramNwkUpdateId < this.backup.networkUpdateId) {
494
+ logger_1.logger.debug(`Use network update ID from backup ${this.backup.networkUpdateId}`, NS);
495
+ this.paramNwkUpdateId = this.backup.networkUpdateId;
496
+ this.restoredFromBackup = true;
497
+ }
498
+ // TODO(mpi): Later on also check key sequence number.
499
+ }
500
+ if (this.paramMacAddress !== this.paramTcAddress) {
501
+ this.paramTcAddress = this.paramMacAddress;
502
+ await this.writeParameterRequest(constants_1.ParamId.APS_TRUST_CENTER_ADDRESS, this.paramTcAddress);
503
+ }
504
+ if (this.configIsNewNetwork && this.paramFrameCounter < frameCounter) {
505
+ this.paramFrameCounter = frameCounter;
506
+ try {
507
+ await this.writeParameterRequest(constants_1.ParamId.STK_FRAME_COUNTER, this.paramFrameCounter);
508
+ }
509
+ catch (_err) {
510
+ // on older firmware versions this fails as unsuppored
511
+ }
512
+ }
513
+ await this.writeParameterRequest(constants_1.ParamId.STK_NWK_UPDATE_ID, this.paramNwkUpdateId);
514
+ if (this.networkOptions.channelList.length !== 0) {
515
+ await this.writeParameterRequest(constants_1.ParamId.APS_CHANNEL_MASK, 1 << this.networkOptions.channelList[0]);
516
+ }
517
+ this.paramNwkPanid = this.networkOptions.panID;
518
+ await this.writeParameterRequest(constants_1.ParamId.NWK_PANID, this.networkOptions.panID);
519
+ await this.writeParameterRequest(constants_1.ParamId.STK_PREDEFINED_PANID, 1);
520
+ if (this.networkOptions.extendedPanID) {
521
+ // NOTE(mpi): U64 values in buffer are big endian!
522
+ this.paramApsUseExtPanid = Buffer.from(this.networkOptions.extendedPanID).readBigUInt64BE();
523
+ await this.writeParameterRequest(constants_1.ParamId.APS_USE_EXTENDED_PANID, this.paramApsUseExtPanid);
524
+ }
525
+ // check current network key against configuration.yaml
526
+ if (this.networkOptions.networkKey) {
527
+ this.paramNwkKey = Buffer.from(this.networkOptions.networkKey);
528
+ await this.writeParameterRequest(constants_1.ParamId.STK_NETWORK_KEY, Buffer.from([0x0, ...this.networkOptions.networkKey]));
529
+ }
530
+ // check current endpoint configuration
531
+ if (!this.paramEndpoint0 || this.fixParamEndpoint0.compare(this.paramEndpoint0) !== 0) {
532
+ this.paramEndpoint0 = this.fixParamEndpoint0;
533
+ await this.writeParameterRequest(constants_1.ParamId.STK_ENDPOINT, this.paramEndpoint0);
534
+ }
535
+ if (!this.paramEndpoint1 || this.fixParamEndpoint1.compare(this.paramEndpoint1) !== 0) {
536
+ this.paramEndpoint1 = this.fixParamEndpoint1;
537
+ await this.writeParameterRequest(constants_1.ParamId.STK_ENDPOINT, this.paramEndpoint1);
538
+ }
539
+ // now reconnect, this will also store configuration in nvram
540
+ await this.changeNetworkStateRequest(constants_1.NetworkState.Connected);
541
+ return;
542
+ }
543
+ handleReadConfigurationStateEvent(event, _data) {
544
+ if (event === DriverEvent.Action) {
545
+ logger_1.logger.debug("Query firmware parameters", NS);
546
+ this.deviceStatus = 0; // need fresh value
547
+ Promise.all([
548
+ this.resetWatchdog(),
549
+ this.readFirmwareVersionRequest(),
550
+ this.readDeviceStatusRequest(),
551
+ this.readParameterRequest(constants_1.ParamId.MAC_ADDRESS),
552
+ this.readParameterRequest(constants_1.ParamId.APS_TRUST_CENTER_ADDRESS),
553
+ this.readParameterRequest(constants_1.ParamId.NWK_PANID),
554
+ this.readParameterRequest(constants_1.ParamId.APS_USE_EXTENDED_PANID),
555
+ this.readParameterRequest(constants_1.ParamId.STK_CURRENT_CHANNEL),
556
+ this.readParameterRequest(constants_1.ParamId.STK_NETWORK_KEY, Buffer.from([0])),
557
+ this.readParameterRequest(constants_1.ParamId.STK_NWK_UPDATE_ID),
558
+ this.readParameterRequest(constants_1.ParamId.APS_CHANNEL_MASK),
559
+ this.readParameterRequest(constants_1.ParamId.STK_PROTOCOL_VERSION),
560
+ this.readParameterRequest(constants_1.ParamId.STK_FRAME_COUNTER),
561
+ this.readParameterRequest(constants_1.ParamId.STK_ENDPOINT, Buffer.from([0])),
562
+ this.readParameterRequest(constants_1.ParamId.STK_ENDPOINT, Buffer.from([1])),
563
+ ])
564
+ .then(([_watchdog, fwVersion, _deviceState, mac, tcAddress, panid, apsUseExtPanid, currentChannel, nwkKey, nwkUpdateId, channelMask, protocolVersion, frameCounter, ep0, ep1,]) => {
565
+ this.paramFirmwareVersion = fwVersion;
566
+ this.paramCurrentChannel = currentChannel;
567
+ this.paramApsUseExtPanid = apsUseExtPanid;
568
+ this.paramNwkPanid = panid;
569
+ this.paramNwkKey = nwkKey;
570
+ this.paramNwkUpdateId = nwkUpdateId;
571
+ this.paramMacAddress = mac;
572
+ this.paramTcAddress = tcAddress;
573
+ this.paramChannelMask = channelMask;
574
+ this.paramProtocolVersion = protocolVersion;
575
+ if (frameCounter !== null) {
576
+ this.paramFrameCounter = frameCounter;
577
+ }
578
+ if (ep0 !== null) {
579
+ this.paramEndpoint0 = ep0;
580
+ }
581
+ if (ep1 !== null) {
582
+ this.paramEndpoint1 = ep1;
583
+ }
584
+ // console.log({fwVersion, mac, panid, apsUseExtPanid, currentChannel, nwkKey, nwkUpdateId, channelMask, protocolVersion, frameCounter});
585
+ if (this.isNetworkConfigurationValid()) {
586
+ logger_1.logger.debug("Zigbee configuration valid", NS);
587
+ this.driverStateStart = Date.now();
588
+ this.driverState = DriverState.Connected;
589
+ // enable optional firmware debug messages
590
+ let logLevel = 0;
591
+ for (const level of this.firmwareLog) {
592
+ if (level === "APS")
593
+ logLevel |= 0x00000100;
594
+ else if (level === "APS_L2")
595
+ logLevel |= 0x00010000;
596
+ }
597
+ if (logLevel !== 0) {
598
+ this.writeParameterRequest(constants_1.ParamId.STK_DEBUG_LOG_LEVEL, logLevel)
599
+ .then((_x) => {
600
+ logger_1.logger.debug("Enabled firmware logging", NS);
601
+ })
602
+ .catch((_err) => {
603
+ logger_1.logger.debug("Firmware logging unsupported by firmware", NS);
604
+ });
605
+ }
606
+ }
607
+ else {
608
+ this.driverStateStart = Date.now();
609
+ this.driverState = DriverState.Reconfigure;
610
+ this.emitStateEvent(DriverEvent.Action);
611
+ }
612
+ })
613
+ .catch((_err) => {
614
+ this.driverStateStart = Date.now();
615
+ this.driverState = DriverState.CloseAndRestart;
616
+ logger_1.logger.debug("Failed to query firmware parameters", NS);
617
+ });
618
+ }
619
+ else if (event === DriverEvent.Tick) {
620
+ this.processQueue();
621
+ }
622
+ }
623
+ handleReconfigureStateEvent(event, _data) {
624
+ if (event === DriverEvent.Action) {
625
+ logger_1.logger.debug("Reconfigure Zigbee network to match configuration", NS);
626
+ this.reconfigureNetwork()
627
+ .then(() => {
628
+ this.driverStateStart = Date.now();
629
+ this.driverState = DriverState.Connected;
630
+ })
631
+ .catch((err) => {
632
+ logger_1.logger.debug(`Failed to reconfigure Zigbee network, error: ${err}, wait 15 seconds to retry`, NS);
633
+ this.driverStateStart = Date.now();
634
+ });
635
+ }
636
+ else if (event === DriverEvent.Tick) {
637
+ this.processQueue();
638
+ // if we run into this timeout assume some error and retry after waiting a bit
639
+ if (15000 < Date.now() - this.driverStateStart) {
640
+ this.driverStateStart = Date.now();
641
+ this.driverState = DriverState.CloseAndRestart;
642
+ }
643
+ if (this.txState === TxState.Idle) {
644
+ // needed to process channel change ZDP request
645
+ this.deviceStatus = 0; // force refresh in response
646
+ this.sendReadDeviceStateRequest(this.nextSeqNumber());
647
+ }
648
+ }
649
+ else if (event === DriverEvent.DeviceStateUpdated) {
650
+ this.handleApsQueueOnDeviceState();
651
+ }
652
+ }
653
+ handleWaitToReconnectStateEvent(event, _data) {
654
+ if (event === DriverEvent.Tick) {
655
+ if (5000 < Date.now() - this.driverStateStart) {
656
+ this.driverState = DriverState.Connecting;
657
+ this.emitStateEvent(DriverEvent.Action);
658
+ }
659
+ }
660
+ }
661
+ handleCloseAndRestartStateEvent(event, _data) {
662
+ if (event === DriverEvent.Tick) {
663
+ if (1000 < Date.now() - this.driverStateStart) {
664
+ // if the connection is open try to close it every second.
665
+ this.driverStateStart = Date.now();
666
+ if (this.isOpen()) {
667
+ this.close().catch(() => { });
668
+ }
669
+ else {
670
+ this.driverState = DriverState.WaitToReconnect;
671
+ }
672
+ }
673
+ }
674
+ }
675
+ handleApsQueueOnDeviceState() {
676
+ // logger.debug(`Updated device status: ${data.toString(2)}`, NS);
677
+ const netState = this.deviceStatus & DEV_STATUS_NET_STATE_MASK;
678
+ if (this.txState === TxState.Idle) {
679
+ if (netState === constants_1.NetworkState.Connected) {
680
+ const status = this.deviceStatus;
681
+ if (status & DEV_STATUS_APS_CONFIRM) {
682
+ this.deviceStatus = 0; // force refresh in response
683
+ this.sendReadApsConfirmRequest(this.nextSeqNumber());
684
+ }
685
+ else if (status & DEV_STATUS_APS_INDICATION) {
686
+ this.deviceStatus = 0; // force refresh in response
687
+ this.sendReadApsIndicationRequest(this.nextSeqNumber());
688
+ }
689
+ else if (status & DEV_STATUS_APS_FREE_SLOTS) {
690
+ this.deviceStatus = 0; // force refresh in response
691
+ this.processApsQueue();
692
+ }
693
+ }
694
+ }
695
+ }
696
+ handleStateEvent(event, data) {
697
+ try {
698
+ // all states
699
+ if (event === DriverEvent.Tick ||
700
+ event === DriverEvent.FirmwareCommandReceived ||
701
+ event === DriverEvent.FirmwareCommandSend ||
702
+ event === DriverEvent.FirmwareCommandTimeout) {
703
+ this.handleFirmwareEvent(event, data);
704
+ this.processBusyQueueTimeouts();
705
+ this.processApsBusyQueueTimeouts();
706
+ }
707
+ if (this.driverState === DriverState.Init) {
708
+ this.driverState = DriverState.WaitToReconnect;
709
+ this.driverStateStart = 0; // force fast initial connect
710
+ }
711
+ else if (this.driverState === DriverState.Connected) {
712
+ this.handleConnectedStateEvent(event, data);
713
+ }
714
+ else if (this.driverState === DriverState.Connecting) {
715
+ this.handleConnectingStateEvent(event, data);
716
+ }
717
+ else if (this.driverState === DriverState.WaitToReconnect) {
718
+ this.handleWaitToReconnectStateEvent(event, data);
719
+ }
720
+ else if (this.driverState === DriverState.ReadConfiguration) {
721
+ this.handleReadConfigurationStateEvent(event, data);
722
+ }
723
+ else if (this.driverState === DriverState.Reconfigure) {
724
+ this.handleReconfigureStateEvent(event, data);
725
+ }
726
+ else if (this.driverState === DriverState.CloseAndRestart) {
727
+ this.handleCloseAndRestartStateEvent(event, data);
728
+ }
729
+ else {
730
+ if (event !== DriverEvent.Tick) {
731
+ logger_1.logger.debug(`handle state: ${DriverState[this.driverState]}, event: ${DriverEvent[event]}`, NS);
732
+ }
733
+ }
734
+ }
735
+ catch (_err) {
736
+ // console.error(err);
737
+ }
738
+ }
739
+ onPortClose(error) {
740
+ if (error) {
741
+ logger_1.logger.info(`Port close: state: ${DriverState[this.driverState]}, reason: ${error}`, NS);
742
+ }
743
+ else {
744
+ logger_1.logger.debug(`Port closed in state: ${DriverState[this.driverState]}`, NS);
745
+ }
746
+ this.emitStateEvent(DriverEvent.Disconnected);
747
+ this.emit("close");
748
+ }
749
+ onPortError(error) {
750
+ logger_1.logger.error(`Port error: ${error}`, NS);
751
+ this.emitStateEvent(DriverEvent.Disconnected);
752
+ this.emit("close");
753
+ }
754
+ isOpen() {
755
+ if (this.serialPort)
756
+ return this.serialPort.isOpen;
757
+ if (this.socketPort)
758
+ return this.socketPort.readyState !== "closed";
759
+ return false;
760
+ }
761
+ openSerialPort(baudrate) {
762
+ return new Promise((resolve, reject) => {
763
+ if (!this.serialPortOptions.path) {
764
+ reject(new Error("Failed to open serial port, path is undefined"));
765
+ }
766
+ logger_1.logger.debug(`Opening serial port: ${this.serialPortOptions.path}`, NS);
767
+ const path = this.serialPortOptions.path || "";
768
+ if (!this.serialPort) {
769
+ this.serialPort = new serialPort_1.SerialPort({ path, baudRate: baudrate, autoOpen: false });
770
+ this.writer.pipe(this.serialPort);
771
+ this.serialPort.pipe(this.parser);
772
+ this.parser.on("parsed", this.onParsed);
773
+ this.serialPort.on("close", this.onPortClose.bind(this));
774
+ this.serialPort.on("error", this.onPortError.bind(this));
775
+ }
776
+ if (!this.serialPort) {
777
+ reject(new Error("Failed to create SerialPort instance"));
778
+ return;
779
+ }
780
+ if (this.serialPort.isOpen) {
781
+ resolve();
782
+ return;
783
+ }
784
+ this.serialPort.open((error) => {
785
+ if (error) {
786
+ reject(new Error(`Error while opening serialport '${error}'`));
787
+ if (this.serialPort) {
788
+ if (this.serialPort.isOpen) {
789
+ this.emitStateEvent(DriverEvent.ConnectError);
790
+ //this.serialPort!.close();
791
+ }
792
+ }
793
+ }
794
+ else {
795
+ logger_1.logger.debug("Serialport opened", NS);
796
+ this.emitStateEvent(DriverEvent.Connected);
797
+ resolve();
798
+ }
799
+ });
800
+ });
801
+ }
802
+ async openSocketPort() {
803
+ if (!this.serialPortOptions.path) {
804
+ throw new Error("No serial port TCP path specified");
805
+ }
806
+ const info = (0, utils_1.parseTcpPath)(this.serialPortOptions.path);
807
+ logger_1.logger.debug(`Opening TCP socket with ${info.host}:${info.port}`, NS);
808
+ this.socketPort = new node_net_1.default.Socket();
809
+ this.socketPort.setNoDelay(true);
810
+ this.socketPort.setKeepAlive(true, 15000);
811
+ this.writer = new writer_1.default();
812
+ this.writer.pipe(this.socketPort);
813
+ this.parser = new parser_1.default();
814
+ this.socketPort.pipe(this.parser);
815
+ this.parser.on("parsed", this.onParsed);
816
+ return await new Promise((resolve, reject) => {
817
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
818
+ this.socketPort.on("connect", () => {
819
+ logger_1.logger.debug("Socket connected", NS);
820
+ });
821
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
822
+ this.socketPort.on("ready", () => {
823
+ logger_1.logger.debug("Socket ready", NS);
824
+ this.emitStateEvent(DriverEvent.Connected);
825
+ resolve();
826
+ });
827
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
828
+ this.socketPort.once("close", this.onPortClose);
829
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
830
+ this.socketPort.on("error", (error) => {
831
+ logger_1.logger.error(`Socket error ${error}`, NS);
832
+ reject(new Error("Error while opening socket"));
833
+ });
834
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
835
+ this.socketPort.connect(info.port, info.host);
836
+ });
837
+ }
838
+ close() {
839
+ return new Promise((resolve, reject) => {
840
+ if (this.serialPort) {
841
+ if (this.serialPort.isOpen) {
842
+ // wait until remaining data is written
843
+ this.serialPort.flush();
844
+ this.serialPort.close((error) => {
845
+ if (error) {
846
+ // TODO(mpi): monitor, this must not happen after drain
847
+ // close() failes if there is pending data to write!
848
+ this.emitStateEvent(DriverEvent.CloseError);
849
+ reject(new Error(`Error while closing serialport '${error}'`));
850
+ return;
851
+ }
852
+ });
853
+ }
854
+ this.emitStateEvent(DriverEvent.Disconnected);
855
+ this.emit("close");
856
+ resolve();
857
+ }
858
+ else if (this.socketPort) {
859
+ this.socketPort.destroy();
860
+ this.socketPort = undefined;
861
+ this.emitStateEvent(DriverEvent.Disconnected);
862
+ resolve();
863
+ }
864
+ else {
865
+ resolve();
866
+ this.emit("close");
867
+ }
868
+ });
869
+ }
870
+ readParameterRequest(parameterId, parameter) {
871
+ const seqNumber = this.nextSeqNumber();
872
+ return new Promise((resolve, reject) => {
873
+ //logger.debug(`push read parameter request to queue. seqNr: ${seqNumber} paramId: ${parameterId}`, NS);
874
+ const ts = 0;
875
+ const commandId = constants_1.FirmwareCommand.ReadParameter;
876
+ const networkState = constants_1.NetworkState.Ignore;
877
+ const req = { commandId, networkState, parameterId, parameter, seqNumber, resolve, reject, ts };
878
+ queue.push(req);
879
+ });
880
+ }
881
+ writeParameterRequest(parameterId, parameter) {
882
+ const seqNumber = this.nextSeqNumber();
883
+ return new Promise((resolve, reject) => {
884
+ //logger.debug(`push write parameter request to queue. seqNr: ${seqNumber} paramId: ${parameterId} parameter: ${parameter}`, NS);
885
+ const ts = 0;
886
+ const commandId = constants_1.FirmwareCommand.WriteParameter;
887
+ const networkState = constants_1.NetworkState.Ignore;
888
+ const req = { commandId, networkState, parameterId, parameter, seqNumber, resolve, reject, ts };
889
+ queue.push(req);
890
+ });
891
+ }
892
+ sendChangeChannelRequest() {
893
+ const zdpSeq = this.nextTransactionID();
894
+ const scanChannels = 1 << this.networkOptions.channelList[0];
895
+ const scanDuration = 0xfe; // special value = channel change
896
+ const payload = Buffer.alloc(7);
897
+ let pos = 0;
898
+ pos = payload.writeUInt8(zdpSeq, pos);
899
+ pos = payload.writeUInt32LE(scanChannels, pos);
900
+ pos = payload.writeUInt8(scanDuration, pos);
901
+ pos = payload.writeUInt8(this.paramNwkUpdateId, pos);
902
+ const req = {
903
+ requestId: this.nextTransactionID(),
904
+ destAddrMode: constants_1.ApsAddressMode.Nwk,
905
+ destAddr16: constants_1.NwkBroadcastAddress.BroadcastRxOnWhenIdle,
906
+ destEndpoint: 0,
907
+ profileId: 0,
908
+ clusterId: 0x0038, // ZDP_MGMT_NWK_UPDATE_REQ_CLID
909
+ srcEndpoint: 0,
910
+ asduLength: payload.length,
911
+ asduPayload: payload,
912
+ txOptions: 0,
913
+ radius: constants_1.default.PARAM.txRadius.DEFAULT_RADIUS,
914
+ timeout: constants_1.default.PARAM.APS.MAX_SEND_TIMEOUT,
915
+ };
916
+ return this.enqueueApsDataRequest(req);
917
+ }
918
+ async writeLinkKey(ieeeAddress, hashedKey) {
919
+ const buf = Buffer.alloc(8 + 16);
920
+ if (ieeeAddress[1] !== "x") {
921
+ ieeeAddress = `0x${ieeeAddress}`;
922
+ }
923
+ buf.writeBigUint64LE(BigInt(ieeeAddress));
924
+ for (let i = 0; i < 16; i++) {
925
+ buf.writeUint8(hashedKey[i], 8 + i);
926
+ }
927
+ await this.writeParameterRequest(constants_1.ParamId.STK_LINK_KEY, buf);
928
+ }
929
+ readFirmwareVersionRequest() {
930
+ const seqNumber = this.nextSeqNumber();
931
+ return new Promise((resolve, reject) => {
932
+ //logger.debug(`push read firmware version request to queue. seqNr: ${seqNumber}`, NS);
933
+ const ts = 0;
934
+ const commandId = constants_1.FirmwareCommand.FirmwareVersion;
935
+ const networkState = constants_1.NetworkState.Ignore;
936
+ const parameterId = constants_1.ParamId.NONE;
937
+ const req = { commandId, networkState, parameterId, seqNumber, resolve, reject, ts };
938
+ queue.push(req);
939
+ });
940
+ }
941
+ readDeviceStatusRequest() {
942
+ const seqNumber = this.nextSeqNumber();
943
+ return new Promise((resolve, reject) => {
944
+ //logger.debug(`push read firmware version request to queue. seqNr: ${seqNumber}`, NS);
945
+ const ts = 0;
946
+ const commandId = constants_1.FirmwareCommand.Status;
947
+ const networkState = constants_1.NetworkState.Ignore;
948
+ const parameterId = constants_1.ParamId.NONE;
949
+ const req = { commandId, networkState, parameterId, seqNumber, resolve, reject, ts };
950
+ queue.push(req);
951
+ });
952
+ }
953
+ sendReadParameterRequest(parameterId, seqNumber, arg) {
954
+ let frameLength = 8; // starts with min. frame length
955
+ let payloadLength = 1; // min. parameterId
956
+ if (arg instanceof Buffer) {
957
+ payloadLength += arg.byteLength;
958
+ frameLength += arg.byteLength;
959
+ }
960
+ const buf = new buffalo_1.Buffalo(Buffer.alloc(frameLength));
961
+ buf.writeUInt8(constants_1.FirmwareCommand.ReadParameter);
962
+ buf.writeUInt8(seqNumber);
963
+ buf.writeUInt8(0); // reserved, shall be 0
964
+ buf.writeUInt16(frameLength);
965
+ buf.writeUInt16(payloadLength);
966
+ buf.writeUInt8(parameterId);
967
+ if (arg instanceof Buffer) {
968
+ buf.writeBuffer(arg, arg.byteLength);
969
+ }
970
+ return this.sendRequest(buf.getBuffer());
971
+ }
972
+ sendWriteParameterRequest(parameterId, value, seqNumber) {
973
+ // command id, sequence number, 0, framelength(U16), payloadlength(U16), parameter id, parameter
974
+ const param = constants_1.stackParameters.find((x) => x.id === parameterId);
975
+ if (!param) {
976
+ throw new Error("tried to write unknown stack parameter");
977
+ }
978
+ const buf = Buffer.alloc(128);
979
+ let pos = 0;
980
+ pos = buf.writeUInt8(constants_1.FirmwareCommand.WriteParameter, pos);
981
+ pos = buf.writeUInt8(seqNumber, pos);
982
+ pos = buf.writeUInt8(0, pos); // status: not used
983
+ const posFrameLength = pos; // remember
984
+ pos = buf.writeUInt16LE(0, pos); // dummy frame length
985
+ // -------------- actual data ---------------------------------------
986
+ const posPayloadLength = pos; // remember
987
+ pos = buf.writeUInt16LE(0, pos); // dummy payload length
988
+ pos = buf.writeUInt8(parameterId, pos);
989
+ if (value instanceof Buffer) {
990
+ for (let i = 0; i < value.length; i++) {
991
+ pos = buf.writeUInt8(value[i], pos);
992
+ }
993
+ }
994
+ else if (typeof value === "number") {
995
+ if (param.type === constants_1.DataType.U8) {
996
+ pos = buf.writeUInt8(value, pos);
997
+ }
998
+ else if (param.type === constants_1.DataType.U16) {
999
+ pos = buf.writeUInt16LE(value, pos);
1000
+ }
1001
+ else if (param.type === constants_1.DataType.U32) {
1002
+ pos = buf.writeUInt32LE(value, pos);
1003
+ }
1004
+ else {
1005
+ throw new Error("tried to write unknown parameter number type");
1006
+ }
1007
+ }
1008
+ else if (typeof value === "bigint") {
1009
+ if (param.type === constants_1.DataType.U64) {
1010
+ pos = buf.writeBigUInt64LE(value, pos);
1011
+ }
1012
+ else {
1013
+ throw new Error("tried to write unknown parameter number type");
1014
+ }
1015
+ }
1016
+ else {
1017
+ throw new Error("tried to write unknown parameter type");
1018
+ }
1019
+ const payloadLength = pos - (posPayloadLength + 2);
1020
+ buf.writeUInt16LE(payloadLength, posPayloadLength); // actual payload length
1021
+ buf.writeUInt16LE(pos, posFrameLength); // actual frame length
1022
+ const out = buf.subarray(0, pos);
1023
+ return this.sendRequest(out);
1024
+ }
1025
+ sendReadFirmwareVersionRequest(seqNumber) {
1026
+ /* command id, sequence number, 0, framelength(U16) */
1027
+ return this.sendRequest(Buffer.from([constants_1.FirmwareCommand.FirmwareVersion, seqNumber, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00]));
1028
+ }
1029
+ sendReadDeviceStateRequest(seqNumber) {
1030
+ /* command id, sequence number, 0, framelength(U16) */
1031
+ return this.sendRequest(Buffer.from([constants_1.FirmwareCommand.Status, seqNumber, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00]));
1032
+ }
1033
+ sendRequest(buffer) {
1034
+ const frame = Buffer.concat([buffer, this.calcCrc(buffer)]);
1035
+ const slipframe = slip_1.default.encode(frame);
1036
+ if (frame[0] === 0x00) {
1037
+ throw new Error(`send unexpected frame with invalid command ID: 0x${frame[0].toString(16).padStart(2, "0")}`);
1038
+ }
1039
+ if (slipframe.length >= 256) {
1040
+ throw new Error("send unexpected long slip frame");
1041
+ }
1042
+ let written = false;
1043
+ if (this.serialPort) {
1044
+ if (!this.serialPort.isOpen) {
1045
+ throw new Error("Can't write to serial port while it isn't open");
1046
+ }
1047
+ for (let retry = 0; retry < 3 && !written; retry++) {
1048
+ written = this.serialPort.write(slipframe, (err) => {
1049
+ if (err) {
1050
+ throw new Error(`Failed to write to serial port: ${err.message}`);
1051
+ }
1052
+ });
1053
+ // if written is false, we also need to wait for drain()
1054
+ this.serialPort.drain(); // flush
1055
+ }
1056
+ }
1057
+ else if (this.socketPort) {
1058
+ written = this.socketPort.write(slipframe, (err) => {
1059
+ if (err) {
1060
+ throw new Error(`Failed to write to serial port: ${err.message}`);
1061
+ }
1062
+ written = true;
1063
+ });
1064
+ // handle in upper functions
1065
+ // if (!written) {
1066
+ // await this.sleep(1000);
1067
+ // }
1068
+ }
1069
+ if (!written) {
1070
+ throw new Error(`Failed to send request cmd: ${frame[0]}, seq: ${frame[1]}`);
1071
+ }
1072
+ const result = { cmd: frame[0], seq: frame[1] };
1073
+ this.emitStateEvent(DriverEvent.FirmwareCommandSend, result);
1074
+ return result;
1075
+ }
1076
+ processQueue() {
1077
+ if (queue.length === 0) {
1078
+ return;
1079
+ }
1080
+ if (exports.busyQueue.length > 0) {
1081
+ return;
1082
+ }
1083
+ if (this.txState !== TxState.Idle) {
1084
+ return;
1085
+ }
1086
+ const req = queue.shift();
1087
+ if (req) {
1088
+ req.ts = Date.now();
1089
+ try {
1090
+ switch (req.commandId) {
1091
+ case constants_1.FirmwareCommand.ReadParameter:
1092
+ logger_1.logger.debug(`send read parameter request from queue. parameter: ${constants_1.ParamId[req.parameterId]} seq: ${req.seqNumber}`, NS);
1093
+ this.sendReadParameterRequest(req.parameterId, req.seqNumber, req.parameter);
1094
+ break;
1095
+ case constants_1.FirmwareCommand.WriteParameter:
1096
+ if (req.parameter === undefined) {
1097
+ throw new Error(`Write parameter request without parameter: ${constants_1.ParamId[req.parameterId]}`);
1098
+ }
1099
+ logger_1.logger.debug(`Send write parameter request from queue. seq: ${req.seqNumber} parameter: ${constants_1.ParamId[req.parameterId]}`, NS);
1100
+ this.sendWriteParameterRequest(req.parameterId, req.parameter, req.seqNumber);
1101
+ break;
1102
+ case constants_1.FirmwareCommand.FirmwareVersion:
1103
+ logger_1.logger.debug(`Send read firmware version request from queue. seq: ${req.seqNumber}`, NS);
1104
+ this.sendReadFirmwareVersionRequest(req.seqNumber);
1105
+ break;
1106
+ case constants_1.FirmwareCommand.Status:
1107
+ //logger.debug(`Send read device state from queue. seqNr: ${req.seqNumber}`, NS);
1108
+ this.sendReadDeviceStateRequest(req.seqNumber);
1109
+ break;
1110
+ case constants_1.FirmwareCommand.ChangeNetworkState:
1111
+ logger_1.logger.debug(`Send change network state request from queue. seq: ${req.seqNumber}`, NS);
1112
+ this.sendChangeNetworkStateRequest(req.seqNumber, req.networkState);
1113
+ break;
1114
+ default:
1115
+ throw new Error("process queue - unknown command id");
1116
+ }
1117
+ exports.busyQueue.push(req);
1118
+ }
1119
+ catch (_err) {
1120
+ //console.error(err);
1121
+ req.reject(new Error(`Failed to process request ${constants_1.FirmwareCommand[req.commandId]}, seq: ${req.seqNumber}`));
1122
+ }
1123
+ }
1124
+ }
1125
+ processBusyQueueTimeouts() {
1126
+ let i = exports.busyQueue.length;
1127
+ while (i--) {
1128
+ const req = exports.busyQueue[i];
1129
+ const now = Date.now();
1130
+ if (10000 < now - req.ts) {
1131
+ //remove from busyQueue
1132
+ exports.busyQueue.splice(i, 1);
1133
+ this.timeoutCounter++;
1134
+ req.reject(new Error(`Timeout for queued command ${constants_1.FirmwareCommand[req.commandId]}, seq: ${req.seqNumber}`));
1135
+ }
1136
+ }
1137
+ }
1138
+ changeNetworkStateRequest(networkState) {
1139
+ const seqNumber = this.nextSeqNumber();
1140
+ return new Promise((resolve, reject) => {
1141
+ //logger.debug(`push change network state request to apsQueue. seqNr: ${seqNumber}`, NS);
1142
+ const ts = 0;
1143
+ const commandId = constants_1.FirmwareCommand.ChangeNetworkState;
1144
+ const parameterId = constants_1.ParamId.NONE;
1145
+ const req = { commandId, networkState, parameterId, seqNumber, resolve, reject, ts };
1146
+ queue.push(req);
1147
+ });
1148
+ }
1149
+ sendChangeNetworkStateRequest(seqNumber, networkState) {
1150
+ return this.sendRequest(Buffer.from([constants_1.FirmwareCommand.ChangeNetworkState, seqNumber, 0x00, 0x06, 0x00, networkState]));
1151
+ }
1152
+ checkDeviceStatus(deviceStatus) {
1153
+ this.deviceStatus = deviceStatus;
1154
+ this.configChanged = (deviceStatus >> 4) & 0x01;
1155
+ this.emitStateEvent(DriverEvent.DeviceStateUpdated, deviceStatus);
1156
+ }
1157
+ enqueueApsDataRequest(request) {
1158
+ const seqNumber = this.nextSeqNumber();
1159
+ return new Promise((resolve, reject) => {
1160
+ //logger.debug(`push enqueue send data request to apsQueue. seqNr: ${seqNumber}`, NS);
1161
+ const ts = Date.now();
1162
+ const commandId = constants_1.FirmwareCommand.ApsDataRequest;
1163
+ const req = { commandId, seqNumber, request, resolve, reject, ts };
1164
+ exports.apsQueue.push(req);
1165
+ this.emitStateEvent(DriverEvent.EnqueuedApsDataRequest, req.seqNumber);
1166
+ });
1167
+ }
1168
+ processApsQueue() {
1169
+ if (exports.apsQueue.length === 0) {
1170
+ return;
1171
+ }
1172
+ if (this.txState !== TxState.Idle) {
1173
+ return;
1174
+ }
1175
+ const req = exports.apsQueue.shift();
1176
+ if (!req) {
1177
+ return;
1178
+ }
1179
+ if (req.request) {
1180
+ req.ts = Date.now();
1181
+ if (req.commandId !== constants_1.FirmwareCommand.ApsDataRequest) {
1182
+ // should never happen
1183
+ throw new Error("process APS queue - unknown command id");
1184
+ }
1185
+ try {
1186
+ this.sendEnqueueApsDataRequest(req.request, req.seqNumber);
1187
+ exports.apsBusyQueue.push(req);
1188
+ }
1189
+ catch (_) {
1190
+ exports.apsQueue.unshift(req);
1191
+ }
1192
+ }
1193
+ }
1194
+ sendReadApsConfirmRequest(seqNumber) {
1195
+ logger_1.logger.debug(`Request APS-DATA.confirm seq: ${seqNumber}`, NS);
1196
+ return this.sendRequest(Buffer.from([constants_1.FirmwareCommand.ApsDataConfirm, seqNumber, 0x00, 0x07, 0x00, 0x00, 0x00]));
1197
+ }
1198
+ sendReadApsIndicationRequest(seqNumber) {
1199
+ logger_1.logger.debug(`Request APS-DATA.indication seq: ${seqNumber}`, NS);
1200
+ return this.sendRequest(Buffer.from([constants_1.FirmwareCommand.ApsDataIndication, seqNumber, 0x00, 0x08, 0x00, 0x01, 0x00, 0x01]));
1201
+ }
1202
+ sendEnqueueApsDataRequest(request, seqNumber) {
1203
+ const payloadLength = 12 + (request.destAddrMode === constants_1.ApsAddressMode.Group ? 2 : request.destAddrMode === constants_1.ApsAddressMode.Nwk ? 3 : 9) + request.asduLength;
1204
+ const frameLength = 7 + payloadLength;
1205
+ const cid1 = request.clusterId & 0xff;
1206
+ const cid2 = (request.clusterId >> 8) & 0xff;
1207
+ const asdul1 = request.asduLength & 0xff;
1208
+ const asdul2 = (request.asduLength >> 8) & 0xff;
1209
+ let destArray = [];
1210
+ let dest = "";
1211
+ if (request.destAddr16 !== undefined) {
1212
+ destArray[0] = request.destAddr16 & 0xff;
1213
+ destArray[1] = (request.destAddr16 >> 8) & 0xff;
1214
+ dest = request.destAddr16.toString(16);
1215
+ }
1216
+ if (request.destAddr64 !== undefined) {
1217
+ dest = request.destAddr64;
1218
+ destArray = this.macAddrStringToArray(request.destAddr64);
1219
+ }
1220
+ if (request.destEndpoint !== undefined) {
1221
+ destArray.push(request.destEndpoint);
1222
+ dest += " EP:";
1223
+ dest += request.destEndpoint;
1224
+ }
1225
+ logger_1.logger.debug(`Request APS-DATA.request: dest: 0x${dest} seq: ${seqNumber} requestId: ${request.requestId}`, NS);
1226
+ return this.sendRequest(Buffer.from([
1227
+ constants_1.FirmwareCommand.ApsDataRequest,
1228
+ seqNumber,
1229
+ 0x00,
1230
+ frameLength & 0xff,
1231
+ (frameLength >> 8) & 0xff,
1232
+ payloadLength & 0xff,
1233
+ (payloadLength >> 8) & 0xff,
1234
+ request.requestId,
1235
+ 0x00,
1236
+ request.destAddrMode,
1237
+ ...destArray,
1238
+ request.profileId & 0xff,
1239
+ (request.profileId >> 8) & 0xff,
1240
+ cid1,
1241
+ cid2,
1242
+ request.srcEndpoint,
1243
+ asdul1,
1244
+ asdul2,
1245
+ ...request.asduPayload,
1246
+ request.txOptions,
1247
+ request.radius,
1248
+ ]));
1249
+ }
1250
+ processApsBusyQueueTimeouts() {
1251
+ let i = exports.apsBusyQueue.length;
1252
+ while (i--) {
1253
+ const req = exports.apsBusyQueue[i];
1254
+ const now = Date.now();
1255
+ let timeout = 60000;
1256
+ if (req.request != null && req.request.timeout != null) {
1257
+ timeout = req.request.timeout * 1000; // seconds * 1000 = milliseconds
1258
+ }
1259
+ if (now - req.ts > timeout) {
1260
+ //remove from busyQueue
1261
+ exports.apsBusyQueue.splice(i, 1);
1262
+ req.reject(new Error(`Timeout for APS-DATA.request, seq: ${req.seqNumber}`));
1263
+ }
1264
+ }
1265
+ }
1266
+ calcCrc(buffer) {
1267
+ let crc = 0;
1268
+ for (let i = 0; i < buffer.length; i++) {
1269
+ crc += buffer[i];
1270
+ }
1271
+ const crc0 = (~crc + 1) & 0xff;
1272
+ const crc1 = ((~crc + 1) >> 8) & 0xff;
1273
+ return Buffer.from([crc0, crc1]);
1274
+ }
1275
+ macAddrStringToArray(addr) {
1276
+ if (addr.indexOf("0x") === 0) {
1277
+ addr = addr.slice(2, addr.length);
1278
+ }
1279
+ if (addr.length < 16) {
1280
+ for (let l = 0; l < 16 - addr.length; l++) {
1281
+ addr = `0${addr}`;
1282
+ }
1283
+ }
1284
+ const result = [];
1285
+ let y = 0;
1286
+ for (let i = 0; i < 8; i++) {
1287
+ result[i] = Number.parseInt(addr.substr(y, 2), 16);
1288
+ y += 2;
1289
+ }
1290
+ const reverse = result.reverse();
1291
+ return reverse;
1292
+ }
1293
+ macAddrArrayToString(addr) {
1294
+ if (addr.length !== 8) {
1295
+ throw new Error(`invalid array length for MAC address: ${addr.length}`);
1296
+ }
1297
+ let result = "0x";
1298
+ let char = "";
1299
+ let i = 8;
1300
+ while (i--) {
1301
+ char = addr[i].toString(16);
1302
+ if (char.length < 2) {
1303
+ char = `0${char}`;
1304
+ }
1305
+ result += char;
1306
+ }
1307
+ return result;
1308
+ }
1309
+ /**
1310
+ * generalArrayToString result is not reversed!
1311
+ */
1312
+ generalArrayToString(key, length) {
1313
+ let result = "0x";
1314
+ let char = "";
1315
+ let i = 0;
1316
+ while (i < length) {
1317
+ char = key[i].toString(16);
1318
+ if (char.length < 2) {
1319
+ char = `0${char}`;
1320
+ }
1321
+ result += char;
1322
+ i++;
1323
+ }
1324
+ return result;
1325
+ }
1326
+ nextSeqNumber() {
1327
+ this.seqNumber++;
1328
+ if (this.seqNumber > 254) {
1329
+ this.seqNumber = 1;
1330
+ }
1331
+ return this.seqNumber;
1332
+ }
1333
+ onParsed(frame) {
1334
+ if (frame.length >= 5) {
1335
+ // min. packet length [cmd, seq, status, u16 storedLength]
1336
+ const storedLength = (frame[4] << 8) | frame[3];
1337
+ if (storedLength + 2 !== frame.length) {
1338
+ // frame without CRC16
1339
+ return;
1340
+ }
1341
+ let crc = 0;
1342
+ for (let i = 0; i < storedLength; i++) {
1343
+ crc += frame[i];
1344
+ }
1345
+ crc = (~crc + 1) & 0xffff;
1346
+ const crcFrame = (frame[frame.length - 1] << 8) | frame[frame.length - 2];
1347
+ if (crc === crcFrame) {
1348
+ this.lastFirmwareRxTime = Date.now();
1349
+ this.emitStateEvent(DriverEvent.FirmwareCommandReceived, { cmd: frame[0], seq: frame[1] });
1350
+ this.emit("rxFrame", frame.slice(0, storedLength));
1351
+ }
1352
+ else {
1353
+ logger_1.logger.debug("frame CRC invalid (could be ASCII message)", NS);
1354
+ }
1355
+ }
1356
+ else {
1357
+ logger_1.logger.debug(`frame length (${frame.length}) < 5, discard`, NS);
1358
+ }
1359
+ }
1360
+ }
1361
+ exports.default = Driver;
1362
+ //# sourceMappingURL=driver.js.map