@robotical/raftjs 1.3.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 (260) hide show
  1. package/.editorconfig +14 -0
  2. package/.gitattributes +11 -0
  3. package/.nvmrc +1 -0
  4. package/LICENSE +22 -0
  5. package/README.md +13 -0
  6. package/TODO.md +1 -0
  7. package/dist/react-native/RaftAttributeHandler.d.ts +12 -0
  8. package/dist/react-native/RaftAttributeHandler.js +241 -0
  9. package/dist/react-native/RaftAttributeHandler.js.map +1 -0
  10. package/dist/react-native/RaftChannel.d.ts +18 -0
  11. package/dist/react-native/RaftChannel.js +12 -0
  12. package/dist/react-native/RaftChannel.js.map +1 -0
  13. package/dist/react-native/RaftChannelBLE.native.d.ts +93 -0
  14. package/dist/react-native/RaftChannelBLE.native.js +455 -0
  15. package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
  16. package/dist/react-native/RaftChannelBLE.web.d.ts +39 -0
  17. package/dist/react-native/RaftChannelBLE.web.js +294 -0
  18. package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
  19. package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
  20. package/dist/react-native/RaftChannelBLEFactory.js +17 -0
  21. package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
  22. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
  23. package/dist/react-native/RaftChannelBLEScanner.native.js +146 -0
  24. package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
  25. package/dist/react-native/RaftChannelWebSerial.d.ts +37 -0
  26. package/dist/react-native/RaftChannelWebSerial.js +320 -0
  27. package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
  28. package/dist/react-native/RaftChannelWebSocket.d.ts +28 -0
  29. package/dist/react-native/RaftChannelWebSocket.js +197 -0
  30. package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
  31. package/dist/react-native/RaftCommsStats.d.ts +39 -0
  32. package/dist/react-native/RaftCommsStats.js +128 -0
  33. package/dist/react-native/RaftCommsStats.js.map +1 -0
  34. package/dist/react-native/RaftConnEvents.d.ts +39 -0
  35. package/dist/react-native/RaftConnEvents.js +54 -0
  36. package/dist/react-native/RaftConnEvents.js.map +1 -0
  37. package/dist/react-native/RaftConnector.d.ts +245 -0
  38. package/dist/react-native/RaftConnector.js +614 -0
  39. package/dist/react-native/RaftConnector.js.map +1 -0
  40. package/dist/react-native/RaftCustomAttrHandler.d.ts +4 -0
  41. package/dist/react-native/RaftCustomAttrHandler.js +50 -0
  42. package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
  43. package/dist/react-native/RaftDeviceInfo.d.ts +59 -0
  44. package/dist/react-native/RaftDeviceInfo.js +36 -0
  45. package/dist/react-native/RaftDeviceInfo.js.map +1 -0
  46. package/dist/react-native/RaftDeviceManager.d.ts +35 -0
  47. package/dist/react-native/RaftDeviceManager.js +353 -0
  48. package/dist/react-native/RaftDeviceManager.js.map +1 -0
  49. package/dist/react-native/RaftDeviceMgrIF.d.ts +12 -0
  50. package/dist/react-native/RaftDeviceMgrIF.js +11 -0
  51. package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
  52. package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
  53. package/dist/react-native/RaftDeviceMsg.js +11 -0
  54. package/dist/react-native/RaftDeviceMsg.js.map +1 -0
  55. package/dist/react-native/RaftDeviceStates.d.ts +33 -0
  56. package/dist/react-native/RaftDeviceStates.js +60 -0
  57. package/dist/react-native/RaftDeviceStates.js.map +1 -0
  58. package/dist/react-native/RaftFileHandler.d.ts +52 -0
  59. package/dist/react-native/RaftFileHandler.js +502 -0
  60. package/dist/react-native/RaftFileHandler.js.map +1 -0
  61. package/dist/react-native/RaftLog.d.ts +22 -0
  62. package/dist/react-native/RaftLog.js +63 -0
  63. package/dist/react-native/RaftLog.js.map +1 -0
  64. package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
  65. package/dist/react-native/RaftMiniHDLC.js +383 -0
  66. package/dist/react-native/RaftMiniHDLC.js.map +1 -0
  67. package/dist/react-native/RaftMsgHandler.d.ts +57 -0
  68. package/dist/react-native/RaftMsgHandler.js +480 -0
  69. package/dist/react-native/RaftMsgHandler.js.map +1 -0
  70. package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
  71. package/dist/react-native/RaftMsgTrackInfo.js +42 -0
  72. package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
  73. package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
  74. package/dist/react-native/RaftProtocolDefs.js +48 -0
  75. package/dist/react-native/RaftProtocolDefs.js.map +1 -0
  76. package/dist/react-native/RaftStreamHandler.d.ts +38 -0
  77. package/dist/react-native/RaftStreamHandler.js +257 -0
  78. package/dist/react-native/RaftStreamHandler.js.map +1 -0
  79. package/dist/react-native/RaftSystemType.d.ts +25 -0
  80. package/dist/react-native/RaftSystemType.js +3 -0
  81. package/dist/react-native/RaftSystemType.js.map +1 -0
  82. package/dist/react-native/RaftSystemUtils.d.ts +136 -0
  83. package/dist/react-native/RaftSystemUtils.js +410 -0
  84. package/dist/react-native/RaftSystemUtils.js.map +1 -0
  85. package/dist/react-native/RaftTypes.d.ts +195 -0
  86. package/dist/react-native/RaftTypes.js +190 -0
  87. package/dist/react-native/RaftTypes.js.map +1 -0
  88. package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
  89. package/dist/react-native/RaftUpdateEvents.js +46 -0
  90. package/dist/react-native/RaftUpdateEvents.js.map +1 -0
  91. package/dist/react-native/RaftUpdateManager.d.ts +61 -0
  92. package/dist/react-native/RaftUpdateManager.js +618 -0
  93. package/dist/react-native/RaftUpdateManager.js.map +1 -0
  94. package/dist/react-native/RaftUtils.d.ts +125 -0
  95. package/dist/react-native/RaftUtils.js +454 -0
  96. package/dist/react-native/RaftUtils.js.map +1 -0
  97. package/dist/react-native/RaftWifiTypes.d.ts +23 -0
  98. package/dist/react-native/RaftWifiTypes.js +43 -0
  99. package/dist/react-native/RaftWifiTypes.js.map +1 -0
  100. package/dist/react-native/main.d.ts +22 -0
  101. package/dist/react-native/main.js +48 -0
  102. package/dist/react-native/main.js.map +1 -0
  103. package/dist/web/RaftAttributeHandler.d.ts +12 -0
  104. package/dist/web/RaftAttributeHandler.js +241 -0
  105. package/dist/web/RaftAttributeHandler.js.map +1 -0
  106. package/dist/web/RaftChannel.d.ts +18 -0
  107. package/dist/web/RaftChannel.js +12 -0
  108. package/dist/web/RaftChannel.js.map +1 -0
  109. package/dist/web/RaftChannelBLE.web.d.ts +39 -0
  110. package/dist/web/RaftChannelBLE.web.js +294 -0
  111. package/dist/web/RaftChannelBLE.web.js.map +1 -0
  112. package/dist/web/RaftChannelBLEFactory.d.ts +10 -0
  113. package/dist/web/RaftChannelBLEFactory.js +17 -0
  114. package/dist/web/RaftChannelBLEFactory.js.map +1 -0
  115. package/dist/web/RaftChannelWebSerial.d.ts +37 -0
  116. package/dist/web/RaftChannelWebSerial.js +320 -0
  117. package/dist/web/RaftChannelWebSerial.js.map +1 -0
  118. package/dist/web/RaftChannelWebSocket.d.ts +28 -0
  119. package/dist/web/RaftChannelWebSocket.js +197 -0
  120. package/dist/web/RaftChannelWebSocket.js.map +1 -0
  121. package/dist/web/RaftCommsStats.d.ts +39 -0
  122. package/dist/web/RaftCommsStats.js +128 -0
  123. package/dist/web/RaftCommsStats.js.map +1 -0
  124. package/dist/web/RaftConnEvents.d.ts +39 -0
  125. package/dist/web/RaftConnEvents.js +54 -0
  126. package/dist/web/RaftConnEvents.js.map +1 -0
  127. package/dist/web/RaftConnector.d.ts +245 -0
  128. package/dist/web/RaftConnector.js +614 -0
  129. package/dist/web/RaftConnector.js.map +1 -0
  130. package/dist/web/RaftCustomAttrHandler.d.ts +4 -0
  131. package/dist/web/RaftCustomAttrHandler.js +50 -0
  132. package/dist/web/RaftCustomAttrHandler.js.map +1 -0
  133. package/dist/web/RaftDeviceInfo.d.ts +59 -0
  134. package/dist/web/RaftDeviceInfo.js +36 -0
  135. package/dist/web/RaftDeviceInfo.js.map +1 -0
  136. package/dist/web/RaftDeviceManager.d.ts +35 -0
  137. package/dist/web/RaftDeviceManager.js +353 -0
  138. package/dist/web/RaftDeviceManager.js.map +1 -0
  139. package/dist/web/RaftDeviceMgrIF.d.ts +12 -0
  140. package/dist/web/RaftDeviceMgrIF.js +11 -0
  141. package/dist/web/RaftDeviceMgrIF.js.map +1 -0
  142. package/dist/web/RaftDeviceMsg.d.ts +9 -0
  143. package/dist/web/RaftDeviceMsg.js +11 -0
  144. package/dist/web/RaftDeviceMsg.js.map +1 -0
  145. package/dist/web/RaftDeviceStates.d.ts +33 -0
  146. package/dist/web/RaftDeviceStates.js +60 -0
  147. package/dist/web/RaftDeviceStates.js.map +1 -0
  148. package/dist/web/RaftFileHandler.d.ts +52 -0
  149. package/dist/web/RaftFileHandler.js +502 -0
  150. package/dist/web/RaftFileHandler.js.map +1 -0
  151. package/dist/web/RaftLog.d.ts +22 -0
  152. package/dist/web/RaftLog.js +63 -0
  153. package/dist/web/RaftLog.js.map +1 -0
  154. package/dist/web/RaftMiniHDLC.d.ts +18 -0
  155. package/dist/web/RaftMiniHDLC.js +383 -0
  156. package/dist/web/RaftMiniHDLC.js.map +1 -0
  157. package/dist/web/RaftMsgHandler.d.ts +57 -0
  158. package/dist/web/RaftMsgHandler.js +480 -0
  159. package/dist/web/RaftMsgHandler.js.map +1 -0
  160. package/dist/web/RaftMsgTrackInfo.d.ts +17 -0
  161. package/dist/web/RaftMsgTrackInfo.js +42 -0
  162. package/dist/web/RaftMsgTrackInfo.js.map +1 -0
  163. package/dist/web/RaftProtocolDefs.d.ts +30 -0
  164. package/dist/web/RaftProtocolDefs.js +48 -0
  165. package/dist/web/RaftProtocolDefs.js.map +1 -0
  166. package/dist/web/RaftStreamHandler.d.ts +38 -0
  167. package/dist/web/RaftStreamHandler.js +257 -0
  168. package/dist/web/RaftStreamHandler.js.map +1 -0
  169. package/dist/web/RaftSystemType.d.ts +25 -0
  170. package/dist/web/RaftSystemType.js +3 -0
  171. package/dist/web/RaftSystemType.js.map +1 -0
  172. package/dist/web/RaftSystemUtils.d.ts +136 -0
  173. package/dist/web/RaftSystemUtils.js +410 -0
  174. package/dist/web/RaftSystemUtils.js.map +1 -0
  175. package/dist/web/RaftTypes.d.ts +195 -0
  176. package/dist/web/RaftTypes.js +190 -0
  177. package/dist/web/RaftTypes.js.map +1 -0
  178. package/dist/web/RaftUpdateEvents.d.ts +33 -0
  179. package/dist/web/RaftUpdateEvents.js +46 -0
  180. package/dist/web/RaftUpdateEvents.js.map +1 -0
  181. package/dist/web/RaftUpdateManager.d.ts +61 -0
  182. package/dist/web/RaftUpdateManager.js +618 -0
  183. package/dist/web/RaftUpdateManager.js.map +1 -0
  184. package/dist/web/RaftUtils.d.ts +125 -0
  185. package/dist/web/RaftUtils.js +454 -0
  186. package/dist/web/RaftUtils.js.map +1 -0
  187. package/dist/web/RaftWifiTypes.d.ts +23 -0
  188. package/dist/web/RaftWifiTypes.js +43 -0
  189. package/dist/web/RaftWifiTypes.js.map +1 -0
  190. package/dist/web/main.d.ts +22 -0
  191. package/dist/web/main.js +48 -0
  192. package/dist/web/main.js.map +1 -0
  193. package/eslint.config.mjs +33 -0
  194. package/examples/dashboard/package.json +43 -0
  195. package/examples/dashboard/src/CommandPanel.tsx +147 -0
  196. package/examples/dashboard/src/ConnManager.ts +85 -0
  197. package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
  198. package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
  199. package/examples/dashboard/src/DeviceLineChart.tsx +139 -0
  200. package/examples/dashboard/src/DevicePanel.tsx +135 -0
  201. package/examples/dashboard/src/DevicesPanel.tsx +57 -0
  202. package/examples/dashboard/src/DispLedGrid.tsx +110 -0
  203. package/examples/dashboard/src/DispOneLed.tsx +20 -0
  204. package/examples/dashboard/src/Main.tsx +106 -0
  205. package/examples/dashboard/src/StatusPanel.tsx +71 -0
  206. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +157 -0
  207. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +84 -0
  208. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
  209. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
  210. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
  211. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
  212. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
  213. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
  214. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
  215. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
  216. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +78 -0
  217. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
  218. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
  219. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +116 -0
  220. package/examples/dashboard/src/index.html +15 -0
  221. package/examples/dashboard/src/index.tsx +15 -0
  222. package/examples/dashboard/src/styles.css +386 -0
  223. package/examples/dashboard/tsconfig.json +18 -0
  224. package/jest.config.js +11 -0
  225. package/package.json +59 -0
  226. package/src/RaftAttributeHandler.ts +289 -0
  227. package/src/RaftChannel.ts +30 -0
  228. package/src/RaftChannelBLE.native.ts +583 -0
  229. package/src/RaftChannelBLE.web.ts +362 -0
  230. package/src/RaftChannelBLEFactory.ts +13 -0
  231. package/src/RaftChannelBLEScanner.native.ts +190 -0
  232. package/src/RaftChannelWebSerial.ts +409 -0
  233. package/src/RaftChannelWebSocket.ts +245 -0
  234. package/src/RaftCommsStats.ts +142 -0
  235. package/src/RaftConnEvents.ts +58 -0
  236. package/src/RaftConnector.ts +737 -0
  237. package/src/RaftCustomAttrHandler.ts +54 -0
  238. package/src/RaftDeviceInfo.ts +98 -0
  239. package/src/RaftDeviceManager.ts +436 -0
  240. package/src/RaftDeviceMgrIF.ts +28 -0
  241. package/src/RaftDeviceMsg.ts +20 -0
  242. package/src/RaftDeviceStates.ts +88 -0
  243. package/src/RaftFileHandler.ts +668 -0
  244. package/src/RaftLog.ts +70 -0
  245. package/src/RaftMiniHDLC.ts +396 -0
  246. package/src/RaftMsgHandler.ts +778 -0
  247. package/src/RaftMsgTrackInfo.ts +51 -0
  248. package/src/RaftProtocolDefs.ts +46 -0
  249. package/src/RaftStreamHandler.ts +328 -0
  250. package/src/RaftSystemType.ts +29 -0
  251. package/src/RaftSystemUtils.ts +487 -0
  252. package/src/RaftTypes.ts +281 -0
  253. package/src/RaftUpdateEvents.ts +48 -0
  254. package/src/RaftUpdateManager.ts +778 -0
  255. package/src/RaftUtils.ts +484 -0
  256. package/src/RaftWifiTypes.ts +36 -0
  257. package/src/main.ts +36 -0
  258. package/testdata/TestDeviceTypeRecs.json +492 -0
  259. package/tsconfig.json +30 -0
  260. package/tsconfig.react-native.json +29 -0
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftCustomAttrHandler
5
+ // Custom attribute handler for Raft devices
6
+ //
7
+ // Rob Dobson (C) 2024
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ class CustomAttrHandler {
12
+ handleAttr(pollRespMetadata, msgBuffer, msgBufIdx) {
13
+ // Number of bytes in the each message
14
+ const numMsgBytes = pollRespMetadata.b;
15
+ // Create a vector for each attribute in the metadata
16
+ let attrValueVecs = [];
17
+ // Reference to each vector by attribute name
18
+ let attrValues = {};
19
+ // Add attributes to the vector
20
+ for (let attrIdx = 0; attrIdx < pollRespMetadata.a.length; attrIdx++) {
21
+ attrValueVecs.push([]);
22
+ attrValues[pollRespMetadata.a[attrIdx].n] = attrValueVecs[attrIdx];
23
+ }
24
+ // Custom code for each device type
25
+ if (pollRespMetadata.c.n === "max30101_fifo") {
26
+ // Hex dump msgBuffer
27
+ // console.log(`CustomAttrHandler handleAttr ${pollRespMetadata.c!.n} msgBuffer: ${msgBuffer.toString('hex')}`);
28
+ let buf = msgBuffer.slice(msgBufIdx);
29
+ if (buf.length < numMsgBytes) {
30
+ return [];
31
+ }
32
+ // Generated code ...
33
+ let N = (buf[0] + 32 - buf[2]) % 32;
34
+ let k = 3;
35
+ let i = 0;
36
+ while (i < N) {
37
+ attrValues['Red'].push(0);
38
+ attrValues['Red'][attrValues['Red'].length - 1] = (buf[k] << 16) | (buf[k + 1] << 8) | buf[k + 2];
39
+ attrValues['IR'].push(0);
40
+ attrValues['IR'][attrValues['IR'].length - 1] = (buf[k + 3] << 16) | (buf[k + 4] << 8) | buf[k + 5];
41
+ k += 6;
42
+ i++;
43
+ ;
44
+ }
45
+ }
46
+ return attrValueVecs;
47
+ }
48
+ }
49
+ exports.default = CustomAttrHandler;
50
+ //# sourceMappingURL=RaftCustomAttrHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftCustomAttrHandler.js","sourceRoot":"","sources":["../../src/RaftCustomAttrHandler.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,wBAAwB;AACxB,4CAA4C;AAC5C,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH;;AAIjH,MAAqB,iBAAiB;IAE3B,UAAU,CAAC,gBAA4C,EAAE,SAAiB,EAAE,SAAiB;QAEhG,sCAAsC;QACtC,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAEvC,qDAAqD;QACrD,IAAI,aAAa,GAAS,EAAE,CAAC;QAE7B,6CAA6C;QAC7C,IAAI,UAAU,GAAgC,EAAE,CAAC;QAEjD,+BAA+B;QAC/B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACnE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QAED,mCAAmC;QACnC,IAAI,gBAAgB,CAAC,CAAE,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YAC5C,qBAAqB;YACrB,iHAAiH;YACjH,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACd,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,EAAE,GAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAC,CAAC,CAAC;YACR,IAAI,CAAC,GAAC,CAAC,CAAC;YACR,OAAO,CAAC,GAAC,CAAC,EAAE,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;gBAC9G,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;gBAC7G,CAAC,IAAE,CAAC,CAAC;gBACL,CAAC,EAAE,CAAC;gBACJ,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ;AA1CD,oCA0CC"}
@@ -0,0 +1,59 @@
1
+ export declare function getAttrTypeBits(attrType: string): number;
2
+ export declare function isAttrTypeSigned(attrType: string): boolean;
3
+ export declare function decodeAttrUnitsEncoding(unitsEncoding: string): string;
4
+ export interface DeviceTypeAttribute {
5
+ n: string;
6
+ t: string;
7
+ at?: number;
8
+ u?: string;
9
+ r?: number[];
10
+ x?: number;
11
+ m?: number | string;
12
+ s?: number;
13
+ sb?: number;
14
+ ss?: number;
15
+ d?: number;
16
+ a?: number;
17
+ f?: string;
18
+ o?: string;
19
+ v?: boolean | number;
20
+ vs?: boolean | number;
21
+ vf?: boolean | number;
22
+ }
23
+ export interface CustomFunctionDefinition {
24
+ n: string;
25
+ c: string;
26
+ }
27
+ export interface DeviceTypePollRespMetadata {
28
+ b: number;
29
+ a: DeviceTypeAttribute[];
30
+ c?: CustomFunctionDefinition;
31
+ us?: number;
32
+ }
33
+ export interface DeviceTypeAction {
34
+ n: string;
35
+ t?: string;
36
+ w: string;
37
+ r?: number[];
38
+ f?: string;
39
+ NX?: number;
40
+ NY?: number;
41
+ concat?: boolean;
42
+ d?: number;
43
+ }
44
+ export interface DeviceTypeInfo {
45
+ name: string;
46
+ desc: string;
47
+ manu: string;
48
+ type: string;
49
+ resp?: DeviceTypePollRespMetadata;
50
+ actions?: DeviceTypeAction[];
51
+ }
52
+ export interface DeviceTypeInfoRecs {
53
+ [devType: string]: DeviceTypeInfo;
54
+ }
55
+ export type RaftDevTypeInfoResponse = {
56
+ req: string;
57
+ rslt: string;
58
+ devinfo: DeviceTypeInfo;
59
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftDeviceInfo
5
+ // Device information for Raft devices
6
+ //
7
+ // Rob Dobson (C) 2024
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getAttrTypeBits = getAttrTypeBits;
12
+ exports.isAttrTypeSigned = isAttrTypeSigned;
13
+ exports.decodeAttrUnitsEncoding = decodeAttrUnitsEncoding;
14
+ const attrTypeBits = {
15
+ "c": 8, "b": 8, "B": 8, "?": 8,
16
+ "h": 16, "H": 16, ">h": 16, "<h": 16, ">H": 16, "<H": 16,
17
+ "i": 32, "I": 32, ">i": 32, "<i": 32, ">I": 32, "<I": 32, "l": 32, "L": 32, ">l": 32, "<l": 32, ">L": 32, "<L": 32,
18
+ "q": 64, "Q": 64, ">q": 64, "<q": 64, ">Q": 64, "<Q": 64,
19
+ "f": 32, ">f": 32, "<f": 32,
20
+ "d": 64, ">d": 64, "<d": 64,
21
+ };
22
+ function getAttrTypeBits(attrType) {
23
+ if (attrType in attrTypeBits) {
24
+ return attrTypeBits[attrType];
25
+ }
26
+ return 8;
27
+ }
28
+ function isAttrTypeSigned(attrType) {
29
+ const attrStr = attrType.charAt(0) === ">" || attrType.charAt(0) === "<" ? attrType.slice(1).charAt(0) : attrType.charAt(0);
30
+ return attrStr === "b" || attrStr === "h" || attrStr === "i" || attrStr === "l" || attrStr === "q";
31
+ }
32
+ function decodeAttrUnitsEncoding(unitsEncoding) {
33
+ // Replace instances of HTML encoded chars like &deg; with the actual char
34
+ return unitsEncoding.replace(/&deg;/g, "°");
35
+ }
36
+ //# sourceMappingURL=RaftDeviceInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftDeviceInfo.js","sourceRoot":"","sources":["../../src/RaftDeviceInfo.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,iBAAiB;AACjB,sCAAsC;AACtC,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH;;AAWjH,0CAKC;AAED,4CAGC;AAED,0DAGC;AAxBD,MAAM,YAAY,GAA8B;IAC5C,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC9B,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACxD,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAClH,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACxD,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAC3B,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;CAC1B,CAAC;AAEN,SAAgB,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5H,OAAO,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,CAAC;AACvG,CAAC;AAED,SAAgB,uBAAuB,CAAC,aAAqB;IACzD,0EAA0E;IAC1E,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { DeviceAttributeState, DevicesState, DeviceState } from "./RaftDeviceStates";
2
+ import { DeviceTypeAction } from "./RaftDeviceInfo";
3
+ import { DataType } from 'python-struct';
4
+ import RaftSystemUtils from "./RaftSystemUtils";
5
+ import RaftDeviceMgrIF from "./RaftDeviceMgrIF";
6
+ export declare class DeviceManager implements RaftDeviceMgrIF {
7
+ private _maxDatapointsToStore;
8
+ private _minTimeBetweenDeviceTypeInfoRetrievalMs;
9
+ private _attributeHandler;
10
+ private _devicesState;
11
+ private _deviceLastUpdateTime;
12
+ private _removeDevicesFlag;
13
+ private _removeDevicesTimeMs;
14
+ private _systemUtils;
15
+ private _callbackNewDevice;
16
+ private _callbackNewDeviceAttribute;
17
+ private _callbackNewAttributeData;
18
+ getDevicesState(): DevicesState;
19
+ getDeviceState(deviceKey: string): DeviceState;
20
+ private _cachedDeviceTypeRecs;
21
+ private _cachedDeviceTypePreviousAttemptTimes;
22
+ constructor();
23
+ sendCommand(cmd: string): Promise<boolean>;
24
+ setup(systemUtils: RaftSystemUtils): Promise<boolean>;
25
+ onNewDevice(callback: (deviceKey: string, state: DeviceState) => void): void;
26
+ onNewDeviceAttribute(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
27
+ onNewAttributeData(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
28
+ setFriendlyName(friendlyName: string): Promise<void>;
29
+ handleClientMsgJson(jsonMsg: string): void;
30
+ private processStateCallback;
31
+ private getDeviceTypeInfo;
32
+ sendAction(deviceKey: string, action: DeviceTypeAction, data: DataType[]): Promise<boolean>;
33
+ sendCompoundAction(deviceKey: string, action: DeviceTypeAction, data: DataType[][]): Promise<boolean>;
34
+ private hexToBytes;
35
+ }
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftDeviceManager
5
+ // Device manager for Raft devices
6
+ //
7
+ // Rob Dobson (C) 2024
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.DeviceManager = void 0;
12
+ const tslib_1 = require("tslib");
13
+ const RaftDeviceStates_1 = require("./RaftDeviceStates");
14
+ const python_struct_1 = tslib_1.__importDefault(require("python-struct"));
15
+ const RaftAttributeHandler_1 = tslib_1.__importDefault(require("./RaftAttributeHandler"));
16
+ const buffer_1 = require("buffer");
17
+ class DeviceManager {
18
+ getDevicesState() {
19
+ return this._devicesState;
20
+ }
21
+ getDeviceState(deviceKey) {
22
+ return this._devicesState[deviceKey];
23
+ }
24
+ // Constructor
25
+ constructor() {
26
+ // Singleton
27
+ // private static _instance: DeviceManager;
28
+ // Max data points to store
29
+ this._maxDatapointsToStore = 1000;
30
+ // Min time between attempts to retrieve device type info
31
+ this._minTimeBetweenDeviceTypeInfoRetrievalMs = 60000;
32
+ // Attribute handler
33
+ this._attributeHandler = new RaftAttributeHandler_1.default();
34
+ // Devices state
35
+ this._devicesState = new RaftDeviceStates_1.DevicesState();
36
+ // Last time each device was updated - used to detect devices that are no longer present
37
+ this._deviceLastUpdateTime = {};
38
+ // Flag indicating that removed devices should be removed from the state
39
+ this._removeDevicesFlag = true;
40
+ this._removeDevicesTimeMs = 60000;
41
+ // System utils
42
+ this._systemUtils = null;
43
+ // Device callbacks
44
+ this._callbackNewDevice = null;
45
+ this._callbackNewDeviceAttribute = null;
46
+ this._callbackNewAttributeData = null;
47
+ // Cached device type data
48
+ this._cachedDeviceTypeRecs = {};
49
+ // Cached device type previous attempt times
50
+ this._cachedDeviceTypePreviousAttemptTimes = {};
51
+ }
52
+ ////////////////////////////////////////////////////////////////////////////
53
+ // Send REST commands
54
+ ////////////////////////////////////////////////////////////////////////////
55
+ async sendCommand(cmd) {
56
+ var _a;
57
+ try {
58
+ // Get the msg handler
59
+ const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
60
+ if (msgHandler) {
61
+ const msgRslt = await msgHandler.sendRICRESTURL(cmd);
62
+ return msgRslt.isOk();
63
+ }
64
+ return false;
65
+ }
66
+ catch (error) {
67
+ console.warn(`DeviceManager sendCommand error ${error}`);
68
+ return false;
69
+ }
70
+ }
71
+ ////////////////////////////////////////////////////////////////////////////
72
+ // Setup
73
+ ////////////////////////////////////////////////////////////////////////////
74
+ async setup(systemUtils) {
75
+ // Save the system utils
76
+ this._systemUtils = systemUtils;
77
+ return true;
78
+ }
79
+ ////////////////////////////////////////////////////////////////////////////
80
+ // Callbacks
81
+ ////////////////////////////////////////////////////////////////////////////
82
+ // Register state change callbacks
83
+ onNewDevice(callback) {
84
+ // Save the callback
85
+ this._callbackNewDevice = callback;
86
+ }
87
+ onNewDeviceAttribute(callback) {
88
+ // Save the callback
89
+ this._callbackNewDeviceAttribute = callback;
90
+ }
91
+ onNewAttributeData(callback) {
92
+ // Save the callback
93
+ this._callbackNewAttributeData = callback;
94
+ }
95
+ ////////////////////////////////////////////////////////////////////////////
96
+ // Set the friendly name for the device
97
+ ////////////////////////////////////////////////////////////////////////////
98
+ async setFriendlyName(friendlyName) {
99
+ var _a;
100
+ // Set using utils
101
+ await ((_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.setRaftName(friendlyName));
102
+ }
103
+ ////////////////////////////////////////////////////////////////////////////
104
+ // Handle device message JSON
105
+ ////////////////////////////////////////////////////////////////////////////
106
+ handleClientMsgJson(jsonMsg) {
107
+ let data = JSON.parse(jsonMsg);
108
+ // console.log(`DeviceManager websocket message ${JSON.stringify(data)}`);
109
+ // Iterate over the buses
110
+ Object.entries(data).forEach(([busName, devices]) => {
111
+ // Check for bus status info
112
+ if (devices && typeof devices === "object" && "_s" in devices) {
113
+ // console.log(`DeviceManager bus status ${JSON.stringify(devices._s)}`);
114
+ return;
115
+ }
116
+ // Iterate over the devices
117
+ Object.entries(devices).forEach(async ([devAddr, attrGroups]) => {
118
+ // Check for non-device info (starts with _)
119
+ if (devAddr.startsWith("_")) {
120
+ return;
121
+ }
122
+ // Device key
123
+ const deviceKey = (0, RaftDeviceStates_1.getDeviceKey)(busName, devAddr);
124
+ // Update the last update time
125
+ this._deviceLastUpdateTime[deviceKey] = Date.now();
126
+ // Check if a device state already exists
127
+ if (!(deviceKey in this._devicesState) || (this._devicesState[deviceKey].deviceTypeInfo === undefined)) {
128
+ let deviceTypeName = "";
129
+ if (attrGroups && typeof attrGroups === 'object' && "_t" in attrGroups && typeof attrGroups._t === "string") {
130
+ deviceTypeName = attrGroups._t || "";
131
+ }
132
+ else {
133
+ console.warn(`DeviceManager missing device type attrGroups ${JSON.stringify(attrGroups)}`);
134
+ return;
135
+ }
136
+ // Get the device type info
137
+ const deviceTypeInfo = await this.getDeviceTypeInfo(busName, devAddr, deviceTypeName);
138
+ // Check if device record exists
139
+ if (deviceKey in this._devicesState) {
140
+ if (deviceTypeInfo !== undefined) {
141
+ this._devicesState[deviceKey].deviceTypeInfo = deviceTypeInfo;
142
+ }
143
+ }
144
+ else {
145
+ // Create device record - device type info may be undefined
146
+ this._devicesState[deviceKey] = {
147
+ deviceTypeInfo: deviceTypeInfo,
148
+ deviceTimeline: {
149
+ timestampsUs: [],
150
+ lastReportTimestampUs: 0,
151
+ reportTimestampOffsetUs: 0
152
+ },
153
+ deviceAttributes: {},
154
+ deviceIsNew: true,
155
+ stateChanged: false,
156
+ isOnline: true
157
+ };
158
+ }
159
+ }
160
+ // Get device state
161
+ const deviceState = this._devicesState[deviceKey];
162
+ // Check for online/offline state information
163
+ if (attrGroups && typeof attrGroups === "object" && "_o" in attrGroups) {
164
+ deviceState.isOnline = ((attrGroups._o === true) || (attrGroups._o === "1") || (attrGroups._o === 1));
165
+ }
166
+ // Check if device type info is available
167
+ if (!deviceState.deviceTypeInfo) {
168
+ return;
169
+ }
170
+ // Iterate attribute groups
171
+ Object.entries(attrGroups).forEach(([attrGroupName, msgHexStr]) => {
172
+ // Check valid
173
+ if (attrGroupName.startsWith("_") || (typeof msgHexStr != 'string')) {
174
+ return;
175
+ }
176
+ // Check the device type info
177
+ if (!deviceState.deviceTypeInfo.resp) {
178
+ return;
179
+ }
180
+ // Convert the hex string to an arraybuffer by converting each pair of hex chars to a byte
181
+ const msgBytes = this.hexToBytes(msgHexStr);
182
+ // Convert to a Buffer
183
+ const msgBuffer = buffer_1.Buffer.from(msgBytes);
184
+ // Work through the message which may contain multiple data instances
185
+ let msgBufIdx = 0;
186
+ // Iterate over attributes in the group
187
+ const pollRespMetadata = deviceState.deviceTypeInfo.resp;
188
+ // Loop
189
+ while (msgBufIdx < msgBytes.length) {
190
+ const curTimelineLen = deviceState.deviceTimeline.timestampsUs.length;
191
+ const newMsgBufIdx = this._attributeHandler.processMsgAttrGroup(msgBuffer, msgBufIdx, deviceState.deviceTimeline, pollRespMetadata, deviceState.deviceAttributes, this._maxDatapointsToStore);
192
+ if (newMsgBufIdx < 0)
193
+ break;
194
+ msgBufIdx = newMsgBufIdx;
195
+ if (deviceState.deviceTimeline.timestampsUs.length !== curTimelineLen) {
196
+ deviceState.stateChanged = true;
197
+ }
198
+ }
199
+ });
200
+ });
201
+ });
202
+ // Check for devices that have not been updated for a while
203
+ if (this._removeDevicesFlag) {
204
+ const nowTime = Date.now();
205
+ Object.entries(this._deviceLastUpdateTime).forEach(([deviceKey, lastUpdateTime]) => {
206
+ if ((nowTime - lastUpdateTime) > this._removeDevicesTimeMs) {
207
+ delete this._devicesState[deviceKey];
208
+ }
209
+ });
210
+ }
211
+ // Process the callback
212
+ this.processStateCallback();
213
+ }
214
+ ////////////////////////////////////////////////////////////////////////////
215
+ // Process state change callback
216
+ ////////////////////////////////////////////////////////////////////////////
217
+ processStateCallback() {
218
+ // Iterate over the devices
219
+ Object.entries(this._devicesState).forEach(([deviceKey, deviceState]) => {
220
+ // Check if device record is new
221
+ if (deviceState.deviceIsNew) {
222
+ if (this._callbackNewDevice) {
223
+ this._callbackNewDevice(deviceKey, deviceState);
224
+ }
225
+ deviceState.deviceIsNew = false;
226
+ }
227
+ // Iterate over the attributes
228
+ Object.entries(deviceState.deviceAttributes).forEach(([_attrKey, attrState]) => {
229
+ if (attrState.newAttribute) {
230
+ if (this._callbackNewDeviceAttribute) {
231
+ this._callbackNewDeviceAttribute(deviceKey, attrState);
232
+ }
233
+ attrState.newAttribute = false;
234
+ }
235
+ if (attrState.newData) {
236
+ if (this._callbackNewAttributeData) {
237
+ this._callbackNewAttributeData(deviceKey, attrState);
238
+ }
239
+ attrState.newData = false;
240
+ }
241
+ });
242
+ });
243
+ }
244
+ ////////////////////////////////////////////////////////////////////////////
245
+ // Get device type info
246
+ ////////////////////////////////////////////////////////////////////////////
247
+ async getDeviceTypeInfo(busName, _devAddr, deviceType) {
248
+ var _a;
249
+ // Check if already in the cache
250
+ if (deviceType in this._cachedDeviceTypeRecs) {
251
+ return this._cachedDeviceTypeRecs[deviceType];
252
+ }
253
+ // Check if we have tried to get device info previously (and failed presumably since it isn't in the cache)
254
+ if (deviceType in this._cachedDeviceTypePreviousAttemptTimes) {
255
+ // Check if we should retry
256
+ if ((Date.now() - this._cachedDeviceTypePreviousAttemptTimes[deviceType]) < this._minTimeBetweenDeviceTypeInfoRetrievalMs) {
257
+ return undefined;
258
+ }
259
+ }
260
+ this._cachedDeviceTypePreviousAttemptTimes[deviceType] = Date.now();
261
+ // Get the device type info from the server
262
+ try {
263
+ // Form the request
264
+ const cmd = "devman/typeinfo?bus=" + busName + "&type=" + deviceType;
265
+ // Get the msg handler
266
+ const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
267
+ if (msgHandler) {
268
+ const msgRslt = await msgHandler.sendRICRESTURL(cmd);
269
+ if (msgRslt.rslt === "ok") {
270
+ this._cachedDeviceTypeRecs[deviceType] = msgRslt.devinfo;
271
+ return msgRslt.devinfo;
272
+ }
273
+ }
274
+ return undefined;
275
+ }
276
+ catch (error) {
277
+ console.error(`DeviceManager getDeviceTypeInfo error ${error}`);
278
+ return undefined;
279
+ }
280
+ }
281
+ ////////////////////////////////////////////////////////////////////////////
282
+ // Send action to device
283
+ ////////////////////////////////////////////////////////////////////////////
284
+ async sendAction(deviceKey, action, data) {
285
+ // console.log(`DeviceManager sendAction ${deviceKey} action name ${action.n} value ${value} prefix ${action.w}`);
286
+ var _a;
287
+ // Form the write bytes
288
+ let writeBytes = action.t ? python_struct_1.default.pack(action.t, data) : buffer_1.Buffer.from([]);
289
+ // Convert to hex string
290
+ let writeHexStr = buffer_1.Buffer.from(writeBytes).toString('hex');
291
+ // Add prefix
292
+ writeHexStr = action.w + writeHexStr;
293
+ // Separate the bus and address in the deviceKey (_ char)
294
+ const devBus = deviceKey.split("_")[0];
295
+ const devAddr = deviceKey.split("_")[1];
296
+ // Send the action to the server
297
+ const cmd = "devman/cmdraw?bus=" + devBus + "&addr=" + devAddr + "&hexWr=" + writeHexStr;
298
+ console.log(`DeviceManager deviceKey ${deviceKey} action name ${action.n} value ${data} prefix ${action.w} sendAction ${cmd}`);
299
+ // Send the command
300
+ try {
301
+ // Get the msg handler
302
+ const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
303
+ if (msgHandler) {
304
+ const msgRslt = await msgHandler.sendRICRESTURL(cmd);
305
+ return msgRslt.isOk();
306
+ }
307
+ return false;
308
+ }
309
+ catch (error) {
310
+ console.warn(`DeviceManager sendAction error ${error}`);
311
+ return false;
312
+ }
313
+ }
314
+ ////////////////////////////////////////////////////////////////////////////
315
+ // Send a compound action to the device
316
+ ////////////////////////////////////////////////////////////////////////////
317
+ async sendCompoundAction(deviceKey, action, data) {
318
+ // console.log(`DeviceManager sendAction ${deviceKey} action name ${action.n} value ${value} prefix ${action.w}`);
319
+ // Check if all data to be sent at once
320
+ if (action.concat) {
321
+ // Form a single list by flattening data
322
+ let dataToWrite = [];
323
+ for (let dataIdx = 0; dataIdx < data.length; dataIdx++) {
324
+ dataToWrite = dataToWrite.concat(data[dataIdx]);
325
+ }
326
+ // Use sendAction to send this
327
+ return await this.sendAction(deviceKey, action, dataToWrite);
328
+ }
329
+ else {
330
+ // Iterate over the data
331
+ let allOk = true;
332
+ for (let dataIdx = 0; dataIdx < data.length; dataIdx++) {
333
+ // Create the data to write by prepending the index to the data for this index
334
+ let dataToWrite = [dataIdx].concat(data[dataIdx]);
335
+ // Use sendAction to send this
336
+ allOk = allOk && await this.sendAction(deviceKey, action, dataToWrite);
337
+ }
338
+ }
339
+ return false;
340
+ }
341
+ ////////////////////////////////////////////////////////////////////////////
342
+ // Convert hex to bytes
343
+ ////////////////////////////////////////////////////////////////////////////
344
+ hexToBytes(hex) {
345
+ const bytes = new Uint8Array(hex.length / 2);
346
+ for (let i = 0; i < bytes.length; i++) {
347
+ bytes[i] = parseInt(hex.substr(i * 2, 2), 16);
348
+ }
349
+ return bytes;
350
+ }
351
+ }
352
+ exports.DeviceManager = DeviceManager;
353
+ //# sourceMappingURL=RaftDeviceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftDeviceManager.js","sourceRoot":"","sources":["../../src/RaftDeviceManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { DataType } from "python-struct";
2
+ import { DeviceTypeAction } from "./RaftDeviceInfo";
3
+ import { DeviceAttributeState, DevicesState, DeviceState } from "./RaftDeviceStates";
4
+ export default interface RaftDeviceMgrIF {
5
+ getDevicesState(): DevicesState;
6
+ getDeviceState(deviceKey: string): DeviceState;
7
+ onNewDevice(callback: (deviceKey: string, state: DeviceState) => void): void;
8
+ onNewDeviceAttribute(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
9
+ onNewAttributeData(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
10
+ sendAction(deviceKey: string, action: DeviceTypeAction, data: DataType[]): void;
11
+ sendCompoundAction(deviceKey: string, action: DeviceTypeAction, data: DataType[][]): void;
12
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftDeviceMgrIF.ts
5
+ // Interface to devices state
6
+ //
7
+ // Rob Dobson (C) 2024
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ //# sourceMappingURL=RaftDeviceMgrIF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftDeviceMgrIF.js","sourceRoot":"","sources":["../../src/RaftDeviceMgrIF.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,qBAAqB;AACrB,6BAA6B;AAC7B,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH"}
@@ -0,0 +1,9 @@
1
+ export interface DeviceMsgJsonElem {
2
+ [attrGroupName: string]: string | number | boolean;
3
+ }
4
+ export interface DeviceMsgJsonBus {
5
+ [devAddr: string]: DeviceMsgJsonElem;
6
+ }
7
+ export interface DeviceMsgJson {
8
+ [busName: string]: DeviceMsgJsonBus;
9
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftDeviceMsg
5
+ // Device message for Raft devices
6
+ //
7
+ // Rob Dobson (C) 2024
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ //# sourceMappingURL=RaftDeviceMsg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftDeviceMsg.js","sourceRoot":"","sources":["../../src/RaftDeviceMsg.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,gBAAgB;AAChB,kCAAkC;AAClC,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH"}