@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,22 @@
1
+ declare const raftChannel: typeof import("./RaftChannelBLE.web").default;
2
+ export { raftChannel as RaftChannelBLE };
3
+ export { default as RaftCommsStats } from './RaftCommsStats';
4
+ export { default as RaftConnector } from './RaftConnector';
5
+ export { default as RaftChannel } from './RaftChannel';
6
+ export { default as RaftChannelWebSocket } from './RaftChannelWebSocket';
7
+ export { default as RaftFileHandler } from './RaftFileHandler';
8
+ export { default as RaftLog } from './RaftLog';
9
+ export { default as RaftMiniHDLC } from './RaftMiniHDLC';
10
+ export { default as RaftMsgHandler } from './RaftMsgHandler';
11
+ export { default as RaftStreamHandler } from './RaftStreamHandler';
12
+ export { default as RaftSystemUtils } from './RaftSystemUtils';
13
+ export { default as RaftUtils } from './RaftUtils';
14
+ export { DeviceManager } from './RaftDeviceManager';
15
+ export { DeviceManager as RaftDeviceManager } from './RaftDeviceManager';
16
+ export * from './RaftTypes';
17
+ export * from './RaftSystemType';
18
+ export * from './RaftWifiTypes';
19
+ export * from './RaftConnEvents';
20
+ export * from './RaftUpdateEvents';
21
+ export * from "./RaftProtocolDefs";
22
+ export * from "./RaftDeviceStates";
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftJS
5
+ // Commms library for the Raft ESP32 application framework supporting BLE, WebSockets and Serial
6
+ //
7
+ // Rob Dobson & Chris Greening 2020-2024
8
+ // (C) 2020-2024 All rights reserved
9
+ //
10
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RaftDeviceManager = exports.DeviceManager = exports.RaftUtils = exports.RaftSystemUtils = exports.RaftStreamHandler = exports.RaftMsgHandler = exports.RaftMiniHDLC = exports.RaftLog = exports.RaftFileHandler = exports.RaftChannelWebSocket = exports.RaftConnector = exports.RaftCommsStats = exports.RaftChannelBLE = void 0;
13
+ const tslib_1 = require("tslib");
14
+ const RaftChannelBLEFactory_1 = require("./RaftChannelBLEFactory");
15
+ const raftChannel = (0, RaftChannelBLEFactory_1.createBLEChannel)();
16
+ exports.RaftChannelBLE = raftChannel;
17
+ var RaftCommsStats_1 = require("./RaftCommsStats");
18
+ Object.defineProperty(exports, "RaftCommsStats", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftCommsStats_1).default; } });
19
+ var RaftConnector_1 = require("./RaftConnector");
20
+ Object.defineProperty(exports, "RaftConnector", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftConnector_1).default; } });
21
+ var RaftChannelWebSocket_1 = require("./RaftChannelWebSocket");
22
+ Object.defineProperty(exports, "RaftChannelWebSocket", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftChannelWebSocket_1).default; } });
23
+ var RaftFileHandler_1 = require("./RaftFileHandler");
24
+ Object.defineProperty(exports, "RaftFileHandler", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftFileHandler_1).default; } });
25
+ var RaftLog_1 = require("./RaftLog");
26
+ Object.defineProperty(exports, "RaftLog", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftLog_1).default; } });
27
+ var RaftMiniHDLC_1 = require("./RaftMiniHDLC");
28
+ Object.defineProperty(exports, "RaftMiniHDLC", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftMiniHDLC_1).default; } });
29
+ var RaftMsgHandler_1 = require("./RaftMsgHandler");
30
+ Object.defineProperty(exports, "RaftMsgHandler", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftMsgHandler_1).default; } });
31
+ var RaftStreamHandler_1 = require("./RaftStreamHandler");
32
+ Object.defineProperty(exports, "RaftStreamHandler", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftStreamHandler_1).default; } });
33
+ var RaftSystemUtils_1 = require("./RaftSystemUtils");
34
+ Object.defineProperty(exports, "RaftSystemUtils", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftSystemUtils_1).default; } });
35
+ var RaftUtils_1 = require("./RaftUtils");
36
+ Object.defineProperty(exports, "RaftUtils", { enumerable: true, get: function () { return tslib_1.__importDefault(RaftUtils_1).default; } });
37
+ var RaftDeviceManager_1 = require("./RaftDeviceManager");
38
+ Object.defineProperty(exports, "DeviceManager", { enumerable: true, get: function () { return RaftDeviceManager_1.DeviceManager; } });
39
+ var RaftDeviceManager_2 = require("./RaftDeviceManager");
40
+ Object.defineProperty(exports, "RaftDeviceManager", { enumerable: true, get: function () { return RaftDeviceManager_2.DeviceManager; } });
41
+ tslib_1.__exportStar(require("./RaftTypes"), exports);
42
+ tslib_1.__exportStar(require("./RaftSystemType"), exports);
43
+ tslib_1.__exportStar(require("./RaftWifiTypes"), exports);
44
+ tslib_1.__exportStar(require("./RaftConnEvents"), exports);
45
+ tslib_1.__exportStar(require("./RaftUpdateEvents"), exports);
46
+ tslib_1.__exportStar(require("./RaftProtocolDefs"), exports);
47
+ tslib_1.__exportStar(require("./RaftDeviceStates"), exports);
48
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,SAAS;AACT,gGAAgG;AAChG,EAAE;AACF,wCAAwC;AACxC,oCAAoC;AACpC,EAAE;AACF,iHAAiH;;;;AAEjH,mEAA2D;AAC3D,MAAM,WAAW,GAAG,IAAA,wCAAgB,GAAE,CAAC;AACf,qCAAc;AAEtC,mDAA6D;AAApD,yIAAA,OAAO,OAAkB;AAClC,iDAA2D;AAAlD,uIAAA,OAAO,OAAiB;AAEjC,+DAAyE;AAAhE,qJAAA,OAAO,OAAwB;AACxC,qDAA+D;AAAtD,2IAAA,OAAO,OAAmB;AACnC,qCAA+C;AAAtC,2HAAA,OAAO,OAAW;AAC3B,+CAAyD;AAAhD,qIAAA,OAAO,OAAgB;AAChC,mDAA4D;AAAnD,yIAAA,OAAO,OAAkB;AAClC,yDAAmE;AAA1D,+IAAA,OAAO,OAAqB;AACrC,qDAA+D;AAAtD,2IAAA,OAAO,OAAmB;AACnC,yCAAmD;AAA1C,+HAAA,OAAO,OAAa;AAC7B,yDAAoD;AAA3C,kHAAA,aAAa,OAAA;AACtB,yDAAyE;AAAhE,sHAAA,aAAa,OAAqB;AAG3C,sDAA4B;AAC5B,2DAAiC;AACjC,0DAAgC;AAChC,2DAAiC;AACjC,6DAAmC;AACnC,6DAAmC;AACnC,6DAAmC"}
@@ -0,0 +1,33 @@
1
+ import typescriptEslint from "@typescript-eslint/eslint-plugin";
2
+ import tsParser from "@typescript-eslint/parser";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import js from "@eslint/js";
6
+ import { FlatCompat } from "@eslint/eslintrc";
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+ const compat = new FlatCompat({
11
+ baseDirectory: __dirname,
12
+ recommendedConfig: js.configs.recommended,
13
+ allConfig: js.configs.all
14
+ });
15
+
16
+ export default [
17
+ ...compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended"),
18
+ {
19
+ plugins: {
20
+ "@typescript-eslint": typescriptEslint,
21
+ },
22
+
23
+ languageOptions: {
24
+ parser: tsParser,
25
+ },
26
+
27
+ rules: {
28
+ "no-loss-of-precision": "off",
29
+ "@typescript-eslint/no-loss-of-precision": ["off"],
30
+ "@typescript-eslint/no-explicit-any": ["off"],
31
+ },
32
+ },
33
+ ];
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "raftjs-example-dashboard",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "scripts": {
6
+ "start": "parcel src/index.html",
7
+ "clean": "rm -rf dist",
8
+ "build": "npm run clean && parcel build src/index.html",
9
+ "test": "jest"
10
+ },
11
+ "keywords": [],
12
+ "author": "Rob Dobson",
13
+ "license": "ISC",
14
+ "devDependencies": {
15
+ "@types/jest": "^29.5.12",
16
+ "@types/node": "^20.12.7",
17
+ "@types/python-struct": "^1.0.4",
18
+ "@types/react": "^18.2.48",
19
+ "@types/react-color": "^3.0.12",
20
+ "@types/react-dom": "^18.2.18",
21
+ "assert": "^2.1.0",
22
+ "buffer": "^6.0.3",
23
+ "console-browserify": "^1.2.0",
24
+ "jest": "^29.7.0",
25
+ "parcel": "^2.11.0",
26
+ "process": "^0.11.10",
27
+ "ts-jest": "^29.1.2",
28
+ "typescript": "^5.3.3",
29
+ "util": "^0.12.5"
30
+ },
31
+ "dependencies": {
32
+ "chart.js": "^4.4.4",
33
+ "python-struct": "^1.1.3",
34
+ "react": "^18.2.0",
35
+ "react-chartjs-2": "^5.2.0",
36
+ "react-color": "^2.19.3",
37
+ "react-dom": "^18.2.0"
38
+ },
39
+ "jest": {
40
+ "preset": "ts-jest",
41
+ "testEnvironment": "node"
42
+ }
43
+ }
@@ -0,0 +1,147 @@
1
+ import React, { useState } from 'react';
2
+ import ConnManager from './ConnManager';
3
+
4
+ const connManager = ConnManager.getInstance();
5
+
6
+ const examplesJson = {
7
+ "sections": [
8
+ {
9
+ "name": "LEDs (ind,ring,button)",
10
+ "examples": [
11
+ { "label": "Button red", "api": "/led/button/set/0/#ff0000" },
12
+ { "label": "Ring pattern RainbowSnake", "api": "/led/ring/pattern/RainbowSnake" },
13
+ { "label": "Ring pattern clear", "api": "/led/ring/pattern" }
14
+ ]
15
+ },
16
+ {
17
+ "name": "Audio",
18
+ "examples": [
19
+ { "label": "Play Halloween", "api": "/audio/rtttl/Entertainer:d=4,o=5,b=140:8d,8d#,8e,c6,8e,c6,8e,2c.6,8c6,8d6,8d#6,8e6,8c6,8d6,e6,8b,d6,2c6,p,8d,8d#,8e,c6,8e,c6,8e,2c.6,8p,8a,8g,8f#,8a,8c6,e6,8d6,8c6,8a,2d6" },
20
+ { "label": "Stop", "api": "/audio/stop" },
21
+ { "label": "Volume 50%", "api": "/audio/vol/50" }
22
+ ]
23
+ }
24
+ ]
25
+ };
26
+
27
+ export default function CommandPanel() {
28
+ const [command, setCommand] = useState('');
29
+ const [commandHistory, setCommandHistory] = useState<string[]>([]); // Command history state
30
+ const [historyIndex, setHistoryIndex] = useState<number>(-1); // Track position in history
31
+ const [openSections, setOpenSections] = useState<{ [key: string]: boolean }>({});
32
+
33
+ // Handler to send command when button is clicked or Enter is pressed
34
+ const handleSendCommand = (cmd: string) => {
35
+ if (cmd) {
36
+ connManager.getConnector().sendRICRESTMsg(cmd, {}).then(response => {
37
+ console.log(`Command sent: ${cmd}, Response:`, response);
38
+
39
+ // Update history only if the command is not the same as the last one
40
+ if (commandHistory.length === 0 || commandHistory[commandHistory.length - 1] !== cmd) {
41
+ setCommandHistory((prevHistory) => [...prevHistory, cmd]);
42
+ }
43
+
44
+ // Reset the history index and clear the command
45
+ setHistoryIndex(-1);
46
+ setCommand('');
47
+ }).catch(error => {
48
+ console.error(`Error sending command: ${cmd}`, error);
49
+ });
50
+ } else {
51
+ console.error("Command is empty.");
52
+ }
53
+ };
54
+
55
+ // Handler for key press events in the input box
56
+ const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
57
+ if (e.key === 'Enter') {
58
+ handleSendCommand(command);
59
+ } else if (e.key === 'ArrowUp') {
60
+ // Navigate to previous command in history
61
+ if (historyIndex < commandHistory.length - 1) {
62
+ const newIndex = historyIndex + 1;
63
+ setHistoryIndex(newIndex);
64
+ setCommand(commandHistory[commandHistory.length - 1 - newIndex]);
65
+ }
66
+ } else if (e.key === 'ArrowDown') {
67
+ // Navigate to next command in history
68
+ if (historyIndex > 0) {
69
+ const newIndex = historyIndex - 1;
70
+ setHistoryIndex(newIndex);
71
+ setCommand(commandHistory[commandHistory.length - 1 - newIndex]);
72
+ } else if (historyIndex === 0) {
73
+ // Clear the command input when navigating past the most recent command
74
+ setHistoryIndex(-1);
75
+ setCommand('');
76
+ }
77
+ }
78
+ };
79
+
80
+ // Handler to set the command in the input box
81
+ const handleLoadCommand = (api: string) => {
82
+ setCommand(api);
83
+ };
84
+
85
+ // Toggle the open/close state of a section
86
+ const toggleSection = (sectionName: string) => {
87
+ setOpenSections((prevOpenSections) => ({
88
+ ...prevOpenSections,
89
+ [sectionName]: !prevOpenSections[sectionName]
90
+ }));
91
+ };
92
+
93
+ return (
94
+ <div className="info-boxes">
95
+ <div className="info-box">
96
+ <div className="info-columns">
97
+ {/* Command Input and Button in Left Column */}
98
+ <div className="info-column command-input-column">
99
+ <h3>Command Panel</h3>
100
+ <input
101
+ type="text"
102
+ className="command-input"
103
+ value={command}
104
+ placeholder="Enter Command"
105
+ onChange={(e) => setCommand(e.target.value)}
106
+ onKeyDown={handleKeyDown} // Add onKeyDown event handler
107
+ />
108
+ <button className="send-command-button" onClick={() => handleSendCommand(command)}>
109
+ Send Command
110
+ </button>
111
+ </div>
112
+
113
+ {/* Example Commands in Right Column */}
114
+ <div className="info-column example-commands-column">
115
+ <h4>Example Commands</h4>
116
+
117
+ {examplesJson.sections.map((section) => (
118
+ <div className="collapsible-section" key={section.name}>
119
+ <button
120
+ className="collapsible-header"
121
+ onClick={() => toggleSection(section.name)}
122
+ >
123
+ {section.name} {openSections[section.name] ? "▲" : "▼"}
124
+ </button>
125
+ {openSections[section.name] && (
126
+ <div className="collapsible-content">
127
+ {section.examples.map((example, index) => (
128
+ <div className="example-command" key={index} title={example.api}>
129
+ {example.label}
130
+ <button
131
+ className="example-load-button"
132
+ onClick={() => handleLoadCommand(example.api)}
133
+ >
134
+ Load
135
+ </button>
136
+ </div>
137
+ ))}
138
+ </div>
139
+ )}
140
+ </div>
141
+ ))}
142
+ </div>
143
+ </div>
144
+ </div>
145
+ </div>
146
+ );
147
+ }
@@ -0,0 +1,85 @@
1
+ import { RaftChannelBLE, RaftConnector, RaftEventFn, RaftLog, RaftSystemUtils } from "../../../src/main";
2
+ import SystemTypeCog from "./SystemTypeCog/SystemTypeCog";
3
+ import SystemTypeMarty from "./SystemTypeMarty/SystemTypeMarty";
4
+
5
+ export default class ConnManager {
6
+
7
+ // Singleton
8
+ private static _instance: ConnManager;
9
+
10
+ // Connector
11
+ private _connector = new RaftConnector(async (systemUtils: RaftSystemUtils) => {
12
+ const systemInfo = await systemUtils.getSystemInfo();
13
+ if (systemInfo.SystemName === "RIC") {
14
+ RaftLog.info("ConnManager - Marty detected");
15
+ return new SystemTypeMarty();
16
+ } else if (systemInfo.SystemName === "Cog") {
17
+ RaftLog.info("ConnManager - Cog detected");
18
+ return new SystemTypeCog();
19
+ }
20
+ RaftLog.error(`ConnManager - unknown system ${systemInfo.SystemName} ${JSON.stringify(systemInfo)}`);
21
+ return null;
22
+ });
23
+
24
+ // Callback on connection event
25
+ private _onConnectionEvent: RaftEventFn | null = null;
26
+
27
+ // Get instance
28
+ public static getInstance(): ConnManager {
29
+ if (!ConnManager._instance) {
30
+ ConnManager._instance = new ConnManager();
31
+ }
32
+ return ConnManager._instance;
33
+ }
34
+
35
+ // Set connection event listener
36
+ public setConnectionEventListener(listener: RaftEventFn) {
37
+ this._onConnectionEvent = listener;
38
+ }
39
+
40
+ // Check if connected
41
+ public isConnected(): boolean {
42
+ return this._connector.isConnected();
43
+ }
44
+
45
+ public getConnector(): RaftConnector {
46
+ return this._connector;
47
+ }
48
+
49
+ private async getBleDevice(uuid?: string): Promise<BluetoothDevice | null> {
50
+ const uuids = uuid ? [uuid] : [RaftChannelBLE.RICServiceUUID, RaftChannelBLE.CogServiceUUID];
51
+ const filtersArray = uuids.map((uuid) => ({ services: [uuid] }));
52
+ try {
53
+ const dev = await navigator.bluetooth.requestDevice({
54
+ filters: filtersArray,
55
+ optionalServices: []
56
+ });
57
+ return dev;
58
+ } catch (e) {
59
+ RaftLog.error(`getBleDevice - failed to get device ${e}`);
60
+ return null;
61
+ }
62
+ }
63
+
64
+ // Connect
65
+ public async connect(method: string, locator: string | object, uuid: string): Promise<boolean> {
66
+ this._connector.setEventListener((evtType, eventEnum, eventName, eventData) => {
67
+ RaftLog.verbose(`ConnManager - event ${eventName}`);
68
+ if (this._onConnectionEvent) {
69
+ this._onConnectionEvent(evtType, eventEnum, eventName, eventData);
70
+ }
71
+ });
72
+ await this._connector.initializeChannel(method);
73
+ // Set the connector websocket suffix
74
+ if (method === "WebBLE") {
75
+ const dev = await this.getBleDevice(uuid);
76
+ return this._connector.connect(dev as object);
77
+ }
78
+ return this._connector.connect(locator);
79
+ }
80
+
81
+ // Disconnect
82
+ public disconnect(): Promise<void> {
83
+ return this._connector.disconnect();
84
+ }
85
+ }
@@ -0,0 +1,133 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import ConnManager from './ConnManager';
3
+ import { DeviceTypeAction } from '../../../src/RaftDeviceInfo';
4
+ import DispLEDGrid from './DispLedGrid';
5
+
6
+ const connManager = ConnManager.getInstance();
7
+
8
+ type DeviceActionsTableProps = {
9
+ deviceKey: string;
10
+ };
11
+
12
+ interface InputValues {
13
+ [key: string]: number;
14
+ }
15
+
16
+ const DeviceActionsForm: React.FC<DeviceActionsTableProps> = ({ deviceKey }) => {
17
+ const deviceManager = connManager.getConnector().getSystemType()?.deviceMgrIF;
18
+ const [deviceActions, setDeviceActions] = useState<DeviceTypeAction[]>([]);
19
+ const [inputValues, setInputValues] = useState<InputValues>({});
20
+ const [lastSentValues, setLastSentValues] = useState<InputValues>({});
21
+ const sendTimer = useRef<NodeJS.Timeout | null>(null);
22
+
23
+ useEffect(() => {
24
+ if (!deviceManager) {
25
+ return;
26
+ }
27
+ const deviceState = deviceManager.getDeviceState(deviceKey);
28
+ const { deviceTypeInfo } = deviceState;
29
+ const actions: DeviceTypeAction[] = deviceTypeInfo?.actions || [];
30
+ setDeviceActions(actions);
31
+ // Initialize input values
32
+ const initialValues: InputValues = actions.reduce((acc, action) => {
33
+ acc = { ...acc, [action.n]: action.d ? action.d : (action.r ? action.r[0] | 0 : 0) };
34
+ return acc;
35
+ }, {});
36
+ setInputValues(initialValues);
37
+ queueSendAction(initialValues);
38
+ }, [deviceKey]);
39
+
40
+ const handleInputChange = (name: string, value: number) => {
41
+ const newValues = { ...inputValues, [name]: value };
42
+ setInputValues(newValues);
43
+ queueSendAction(newValues);
44
+ };
45
+
46
+ const queueSendAction = (newValues: InputValues) => {
47
+ if (sendTimer.current) {
48
+ clearTimeout(sendTimer.current);
49
+ }
50
+ // console.log(`queueSendAction new values ${JSON.stringify(newValues)}`);
51
+ sendTimer.current = setTimeout(() => {
52
+ deviceActions.forEach(action => {
53
+ const currentValue = newValues[action.n];
54
+ const lastSentValue = lastSentValues[action.n];
55
+ if (currentValue !== lastSentValue) {
56
+ // console.log(`queueSendAction timeout ${action.n} ${currentValue}`);
57
+ handleSendAction(action, currentValue);
58
+ setLastSentValues(prev => ({ ...prev, [action.n]: currentValue }));
59
+ }
60
+ });
61
+ }, 300);
62
+ };
63
+
64
+ const handleSendAction = (action: DeviceTypeAction, value: number) => {
65
+ // Send action to device
66
+ if (!deviceManager) {
67
+ return;
68
+ }
69
+ deviceManager.sendAction(deviceKey, action, [value]);
70
+ };
71
+
72
+ if (deviceActions.length === 0) {
73
+ return <></>;
74
+ }
75
+
76
+ return (
77
+ <div className="device-actions-form">
78
+ <table>
79
+ <thead>
80
+ <tr>
81
+ <th>Name</th>
82
+ <th>Value</th>
83
+ <th>Send</th>
84
+ </tr>
85
+ </thead>
86
+ <tbody>
87
+ {deviceActions.map((action) => {
88
+ if (action.f === "LEDPIX") {
89
+ return (
90
+ <tr key={action.n}>
91
+ <td>{action.n}</td>
92
+ <td colSpan={2}>
93
+ <DispLEDGrid
94
+ rows={action.NY || 1}
95
+ cols={action.NX || 1}
96
+ deviceKey={deviceKey}
97
+ deviceAction={action}
98
+ />
99
+ </td>
100
+ </tr>
101
+ );
102
+ } else {
103
+ return (
104
+ <tr key={action.n}>
105
+ <td>{action.n}</td>
106
+ <td>
107
+ {action.t ?
108
+ <input type="number"
109
+ min={action.r?.[0] ?? 0}
110
+ max={action.r?.[1] ?? 100}
111
+ value={inputValues[action.n]}
112
+ onChange={e => {
113
+ console.log(`input change ${action.n} ${e.target.value}`)
114
+ handleInputChange(action.n, parseInt(e.target.value));
115
+ }}
116
+ />
117
+ : <></>
118
+ }
119
+ </td>
120
+ <td>
121
+ <button onClick={() => handleSendAction(action, inputValues[action.n])}>Send</button>
122
+ </td>
123
+ </tr>
124
+ );
125
+ }
126
+ })}
127
+ </tbody>
128
+ </table>
129
+ </div>
130
+ );
131
+ };
132
+
133
+ export default DeviceActionsForm;
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { deviceAttrGetLatestFormatted, DeviceState } from '../../../src/RaftDeviceStates';
3
+ import ConnManager from './ConnManager';
4
+
5
+ const connManager = ConnManager.getInstance();
6
+
7
+ type DeviceAttributesTableProps = {
8
+ deviceKey: string;
9
+ lastUpdated: number;
10
+ };
11
+
12
+ const DeviceAttrsForm: React.FC<DeviceAttributesTableProps> = ({ deviceKey, lastUpdated }) => {
13
+ const deviceManager = connManager.getConnector().getSystemType()?.deviceMgrIF;
14
+ const deviceState: DeviceState | undefined = deviceManager?.getDeviceState(deviceKey);
15
+
16
+ if (!deviceState || Object.keys(deviceState.deviceAttributes).length === 0) {
17
+ return <></>;
18
+ }
19
+
20
+ return (
21
+ <div className="device-attrs-form">
22
+ <table>
23
+ <thead>
24
+ <tr>
25
+ <th>Name</th>
26
+ <th>Value</th>
27
+ <th>Units</th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ {Object.entries(deviceState.deviceAttributes)
32
+ .filter(([attributeName, attributeDetails]) => attributeDetails.visibleForm !== false)
33
+ .map(([attributeName, attributeDetails]) => {
34
+ const valStr = deviceAttrGetLatestFormatted(attributeDetails)
35
+ return (
36
+ <tr key={attributeName}>
37
+ <td>{attributeName}</td>
38
+ <td>{valStr}</td>
39
+ <td>{attributeDetails.units}</td>
40
+ </tr>
41
+ );
42
+ })}
43
+ </tbody>
44
+ </table>
45
+ </div>
46
+ );
47
+ };
48
+
49
+ export default DeviceAttrsForm;