@robdobsn/raftjs 1.1.1 → 1.3.2

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 (257) hide show
  1. package/README.md +2 -0
  2. package/dist/{RaftAttributeHandler.js → react-native/RaftAttributeHandler.js} +1 -1
  3. package/dist/react-native/RaftAttributeHandler.js.map +1 -0
  4. package/dist/react-native/RaftChannel.js.map +1 -0
  5. package/dist/react-native/RaftChannelBLE.native.d.ts +93 -0
  6. package/dist/react-native/RaftChannelBLE.native.js +455 -0
  7. package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
  8. package/dist/{RaftChannelWebBLE.d.ts → react-native/RaftChannelBLE.web.d.ts} +3 -2
  9. package/dist/{RaftChannelWebBLE.js → react-native/RaftChannelBLE.web.js} +48 -28
  10. package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
  11. package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
  12. package/dist/react-native/RaftChannelBLEFactory.js +17 -0
  13. package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
  14. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
  15. package/dist/react-native/RaftChannelBLEScanner.native.js +146 -0
  16. package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
  17. package/dist/{RaftChannelWebSerial.js → react-native/RaftChannelWebSerial.js} +3 -2
  18. package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
  19. package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
  20. package/dist/react-native/RaftCommsStats.js.map +1 -0
  21. package/dist/{RaftConnEvents.d.ts → react-native/RaftConnEvents.d.ts} +10 -2
  22. package/dist/{RaftConnEvents.js → react-native/RaftConnEvents.js} +10 -0
  23. package/dist/react-native/RaftConnEvents.js.map +1 -0
  24. package/dist/{RaftConnector.d.ts → react-native/RaftConnector.d.ts} +6 -3
  25. package/dist/{RaftConnector.js → react-native/RaftConnector.js} +75 -74
  26. package/dist/react-native/RaftConnector.js.map +1 -0
  27. package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
  28. package/dist/{RaftDeviceInfo.d.ts → react-native/RaftDeviceInfo.d.ts} +5 -10
  29. package/dist/react-native/RaftDeviceInfo.js.map +1 -0
  30. package/dist/{RaftDeviceManager.d.ts → react-native/RaftDeviceManager.d.ts} +14 -16
  31. package/dist/{RaftDeviceManager.js → react-native/RaftDeviceManager.js} +116 -213
  32. package/dist/react-native/RaftDeviceManager.js.map +1 -0
  33. package/dist/react-native/RaftDeviceMgrIF.d.ts +12 -0
  34. package/dist/react-native/RaftDeviceMgrIF.js +11 -0
  35. package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
  36. package/dist/react-native/RaftDeviceMsg.js.map +1 -0
  37. package/dist/{RaftDeviceStates.d.ts → react-native/RaftDeviceStates.d.ts} +1 -1
  38. package/dist/react-native/RaftDeviceStates.js.map +1 -0
  39. package/dist/react-native/RaftFileHandler.js.map +1 -0
  40. package/dist/react-native/RaftLog.js.map +1 -0
  41. package/dist/{RaftMiniHDLC.js → react-native/RaftMiniHDLC.js} +1 -1
  42. package/dist/react-native/RaftMiniHDLC.js.map +1 -0
  43. package/dist/{RaftMsgHandler.js → react-native/RaftMsgHandler.js} +2 -2
  44. package/dist/react-native/RaftMsgHandler.js.map +1 -0
  45. package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
  46. package/dist/react-native/RaftProtocolDefs.js.map +1 -0
  47. package/dist/react-native/RaftStreamHandler.js.map +1 -0
  48. package/dist/{RaftSystemType.d.ts → react-native/RaftSystemType.d.ts} +4 -0
  49. package/dist/{RaftSystemType.js.map → react-native/RaftSystemType.js.map} +1 -1
  50. package/dist/react-native/RaftSystemUtils.js.map +1 -0
  51. package/dist/{RaftTypes.d.ts → react-native/RaftTypes.d.ts} +11 -0
  52. package/dist/{RaftTypes.js → react-native/RaftTypes.js} +34 -1
  53. package/dist/react-native/RaftTypes.js.map +1 -0
  54. package/dist/react-native/RaftUpdateEvents.js.map +1 -0
  55. package/dist/react-native/RaftUpdateManager.js.map +1 -0
  56. package/dist/{RaftUtils.js → react-native/RaftUtils.js} +1 -1
  57. package/dist/react-native/RaftUtils.js.map +1 -0
  58. package/dist/react-native/RaftWifiTypes.js.map +1 -0
  59. package/dist/react-native/main.d.ts +21 -0
  60. package/dist/{main.js → react-native/main.js} +7 -3
  61. package/dist/react-native/main.js.map +1 -0
  62. package/dist/web/RaftAttributeHandler.d.ts +12 -0
  63. package/dist/web/RaftAttributeHandler.js +241 -0
  64. package/dist/web/RaftAttributeHandler.js.map +1 -0
  65. package/dist/web/RaftChannel.d.ts +18 -0
  66. package/dist/web/RaftChannel.js +12 -0
  67. package/dist/web/RaftChannel.js.map +1 -0
  68. package/dist/web/RaftChannelBLE.web.d.ts +39 -0
  69. package/dist/web/RaftChannelBLE.web.js +294 -0
  70. package/dist/web/RaftChannelBLE.web.js.map +1 -0
  71. package/dist/web/RaftChannelBLEFactory.d.ts +10 -0
  72. package/dist/web/RaftChannelBLEFactory.js +17 -0
  73. package/dist/web/RaftChannelBLEFactory.js.map +1 -0
  74. package/dist/web/RaftChannelWebSerial.d.ts +37 -0
  75. package/dist/web/RaftChannelWebSerial.js +320 -0
  76. package/dist/web/RaftChannelWebSerial.js.map +1 -0
  77. package/dist/web/RaftChannelWebSocket.d.ts +28 -0
  78. package/dist/web/RaftChannelWebSocket.js +197 -0
  79. package/dist/web/RaftChannelWebSocket.js.map +1 -0
  80. package/dist/web/RaftCommsStats.d.ts +39 -0
  81. package/dist/web/RaftCommsStats.js +128 -0
  82. package/dist/web/RaftCommsStats.js.map +1 -0
  83. package/dist/web/RaftConnEvents.d.ts +39 -0
  84. package/dist/web/RaftConnEvents.js +54 -0
  85. package/dist/web/RaftConnEvents.js.map +1 -0
  86. package/dist/web/RaftConnector.d.ts +245 -0
  87. package/dist/web/RaftConnector.js +614 -0
  88. package/dist/web/RaftConnector.js.map +1 -0
  89. package/dist/web/RaftCustomAttrHandler.d.ts +4 -0
  90. package/dist/web/RaftCustomAttrHandler.js +50 -0
  91. package/dist/web/RaftCustomAttrHandler.js.map +1 -0
  92. package/dist/web/RaftDeviceInfo.d.ts +59 -0
  93. package/dist/web/RaftDeviceInfo.js +36 -0
  94. package/dist/web/RaftDeviceInfo.js.map +1 -0
  95. package/dist/web/RaftDeviceManager.d.ts +35 -0
  96. package/dist/web/RaftDeviceManager.js +353 -0
  97. package/dist/web/RaftDeviceManager.js.map +1 -0
  98. package/dist/web/RaftDeviceMgrIF.d.ts +12 -0
  99. package/dist/web/RaftDeviceMgrIF.js +11 -0
  100. package/dist/web/RaftDeviceMgrIF.js.map +1 -0
  101. package/dist/web/RaftDeviceMsg.d.ts +9 -0
  102. package/dist/web/RaftDeviceMsg.js +11 -0
  103. package/dist/web/RaftDeviceMsg.js.map +1 -0
  104. package/dist/web/RaftDeviceStates.d.ts +33 -0
  105. package/dist/web/RaftDeviceStates.js +60 -0
  106. package/dist/web/RaftDeviceStates.js.map +1 -0
  107. package/dist/web/RaftFileHandler.d.ts +52 -0
  108. package/dist/web/RaftFileHandler.js +502 -0
  109. package/dist/web/RaftFileHandler.js.map +1 -0
  110. package/dist/web/RaftLog.d.ts +22 -0
  111. package/dist/web/RaftLog.js +63 -0
  112. package/dist/web/RaftLog.js.map +1 -0
  113. package/dist/web/RaftMiniHDLC.d.ts +18 -0
  114. package/dist/web/RaftMiniHDLC.js +383 -0
  115. package/dist/web/RaftMiniHDLC.js.map +1 -0
  116. package/dist/web/RaftMsgHandler.d.ts +57 -0
  117. package/dist/web/RaftMsgHandler.js +480 -0
  118. package/dist/web/RaftMsgHandler.js.map +1 -0
  119. package/dist/web/RaftMsgTrackInfo.d.ts +17 -0
  120. package/dist/web/RaftMsgTrackInfo.js +42 -0
  121. package/dist/web/RaftMsgTrackInfo.js.map +1 -0
  122. package/dist/web/RaftProtocolDefs.d.ts +30 -0
  123. package/dist/web/RaftProtocolDefs.js +48 -0
  124. package/dist/web/RaftProtocolDefs.js.map +1 -0
  125. package/dist/web/RaftStreamHandler.d.ts +38 -0
  126. package/dist/web/RaftStreamHandler.js +257 -0
  127. package/dist/web/RaftStreamHandler.js.map +1 -0
  128. package/dist/web/RaftSystemType.d.ts +25 -0
  129. package/dist/web/RaftSystemType.js +3 -0
  130. package/dist/web/RaftSystemType.js.map +1 -0
  131. package/dist/web/RaftSystemUtils.d.ts +136 -0
  132. package/dist/web/RaftSystemUtils.js +410 -0
  133. package/dist/web/RaftSystemUtils.js.map +1 -0
  134. package/dist/web/RaftTypes.d.ts +195 -0
  135. package/dist/web/RaftTypes.js +190 -0
  136. package/dist/web/RaftTypes.js.map +1 -0
  137. package/dist/web/RaftUpdateEvents.d.ts +33 -0
  138. package/dist/web/RaftUpdateEvents.js +46 -0
  139. package/dist/web/RaftUpdateEvents.js.map +1 -0
  140. package/dist/web/RaftUpdateManager.d.ts +61 -0
  141. package/dist/web/RaftUpdateManager.js +618 -0
  142. package/dist/web/RaftUpdateManager.js.map +1 -0
  143. package/dist/web/RaftUtils.d.ts +125 -0
  144. package/dist/web/RaftUtils.js +454 -0
  145. package/dist/web/RaftUtils.js.map +1 -0
  146. package/dist/web/RaftWifiTypes.d.ts +23 -0
  147. package/dist/web/RaftWifiTypes.js +43 -0
  148. package/dist/web/RaftWifiTypes.js.map +1 -0
  149. package/dist/{main.d.ts → web/main.d.ts} +4 -1
  150. package/dist/web/main.js +46 -0
  151. package/dist/web/main.js.map +1 -0
  152. package/examples/dashboard/package.json +4 -0
  153. package/examples/dashboard/src/CommandPanel.tsx +147 -0
  154. package/examples/dashboard/src/ConnManager.ts +11 -12
  155. package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
  156. package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
  157. package/examples/dashboard/src/DeviceLineChart.tsx +139 -0
  158. package/examples/dashboard/src/DevicePanel.tsx +135 -0
  159. package/examples/dashboard/src/DevicesPanel.tsx +57 -0
  160. package/examples/dashboard/src/DispLedGrid.tsx +110 -0
  161. package/examples/dashboard/src/DispOneLed.tsx +20 -0
  162. package/examples/dashboard/src/Main.tsx +53 -47
  163. package/examples/dashboard/src/{StatusScreen.tsx → StatusPanel.tsx} +13 -14
  164. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +135 -122
  165. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +15 -8
  166. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -0
  167. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +47 -1
  168. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +4 -1
  169. package/examples/dashboard/src/styles.css +274 -10
  170. package/package.json +57 -48
  171. package/src/RaftAttributeHandler.ts +1 -1
  172. package/src/RaftChannelBLE.native.ts +583 -0
  173. package/src/{RaftChannelWebBLE.ts → RaftChannelBLE.web.ts} +60 -40
  174. package/src/RaftChannelBLEFactory.ts +13 -0
  175. package/src/RaftChannelBLEScanner.native.ts +190 -0
  176. package/src/RaftChannelWebSerial.ts +1 -0
  177. package/src/RaftConnEvents.ts +14 -2
  178. package/src/RaftConnector.ts +80 -88
  179. package/src/RaftDeviceInfo.ts +6 -12
  180. package/src/RaftDeviceManager.ts +139 -245
  181. package/src/RaftDeviceMgrIF.ts +28 -0
  182. package/src/RaftDeviceStates.ts +1 -2
  183. package/src/RaftMiniHDLC.ts +1 -1
  184. package/src/RaftMsgHandler.ts +2 -2
  185. package/src/RaftSystemType.ts +4 -0
  186. package/src/RaftTypes.ts +48 -17
  187. package/src/RaftUtils.ts +1 -1
  188. package/src/main.ts +8 -1
  189. package/tsconfig.json +5 -2
  190. package/tsconfig.react-native.json +29 -0
  191. package/dist/RaftAttributeHandler.js.map +0 -1
  192. package/dist/RaftChannel.js.map +0 -1
  193. package/dist/RaftChannelWebBLE.js.map +0 -1
  194. package/dist/RaftChannelWebSerial.js.map +0 -1
  195. package/dist/RaftChannelWebSocket.js.map +0 -1
  196. package/dist/RaftCommsStats.js.map +0 -1
  197. package/dist/RaftConnEvents.js.map +0 -1
  198. package/dist/RaftConnector.js.map +0 -1
  199. package/dist/RaftCustomAttrHandler.js.map +0 -1
  200. package/dist/RaftDeviceInfo.js.map +0 -1
  201. package/dist/RaftDeviceManager.js.map +0 -1
  202. package/dist/RaftDeviceMsg.js.map +0 -1
  203. package/dist/RaftDeviceStates.js.map +0 -1
  204. package/dist/RaftFileHandler.js.map +0 -1
  205. package/dist/RaftLog.js.map +0 -1
  206. package/dist/RaftMiniHDLC.js.map +0 -1
  207. package/dist/RaftMsgHandler.js.map +0 -1
  208. package/dist/RaftMsgTrackInfo.js.map +0 -1
  209. package/dist/RaftProtocolDefs.js.map +0 -1
  210. package/dist/RaftStreamHandler.js.map +0 -1
  211. package/dist/RaftSystemUtils.js.map +0 -1
  212. package/dist/RaftTypes.js.map +0 -1
  213. package/dist/RaftUpdateEvents.js.map +0 -1
  214. package/dist/RaftUpdateManager.js.map +0 -1
  215. package/dist/RaftUtils.js.map +0 -1
  216. package/dist/RaftWifiTypes.js.map +0 -1
  217. package/dist/TestDataGen.d.ts +0 -7
  218. package/dist/TestDataGen.js +0 -133
  219. package/dist/TestDataGen.js.map +0 -1
  220. package/dist/main.js.map +0 -1
  221. package/src/TestDataGen.ts +0 -157
  222. /package/dist/{RaftAttributeHandler.d.ts → react-native/RaftAttributeHandler.d.ts} +0 -0
  223. /package/dist/{RaftChannel.d.ts → react-native/RaftChannel.d.ts} +0 -0
  224. /package/dist/{RaftChannel.js → react-native/RaftChannel.js} +0 -0
  225. /package/dist/{RaftChannelWebSerial.d.ts → react-native/RaftChannelWebSerial.d.ts} +0 -0
  226. /package/dist/{RaftChannelWebSocket.d.ts → react-native/RaftChannelWebSocket.d.ts} +0 -0
  227. /package/dist/{RaftChannelWebSocket.js → react-native/RaftChannelWebSocket.js} +0 -0
  228. /package/dist/{RaftCommsStats.d.ts → react-native/RaftCommsStats.d.ts} +0 -0
  229. /package/dist/{RaftCommsStats.js → react-native/RaftCommsStats.js} +0 -0
  230. /package/dist/{RaftCustomAttrHandler.d.ts → react-native/RaftCustomAttrHandler.d.ts} +0 -0
  231. /package/dist/{RaftCustomAttrHandler.js → react-native/RaftCustomAttrHandler.js} +0 -0
  232. /package/dist/{RaftDeviceInfo.js → react-native/RaftDeviceInfo.js} +0 -0
  233. /package/dist/{RaftDeviceMsg.d.ts → react-native/RaftDeviceMsg.d.ts} +0 -0
  234. /package/dist/{RaftDeviceMsg.js → react-native/RaftDeviceMsg.js} +0 -0
  235. /package/dist/{RaftDeviceStates.js → react-native/RaftDeviceStates.js} +0 -0
  236. /package/dist/{RaftFileHandler.d.ts → react-native/RaftFileHandler.d.ts} +0 -0
  237. /package/dist/{RaftFileHandler.js → react-native/RaftFileHandler.js} +0 -0
  238. /package/dist/{RaftLog.d.ts → react-native/RaftLog.d.ts} +0 -0
  239. /package/dist/{RaftLog.js → react-native/RaftLog.js} +0 -0
  240. /package/dist/{RaftMiniHDLC.d.ts → react-native/RaftMiniHDLC.d.ts} +0 -0
  241. /package/dist/{RaftMsgHandler.d.ts → react-native/RaftMsgHandler.d.ts} +0 -0
  242. /package/dist/{RaftMsgTrackInfo.d.ts → react-native/RaftMsgTrackInfo.d.ts} +0 -0
  243. /package/dist/{RaftMsgTrackInfo.js → react-native/RaftMsgTrackInfo.js} +0 -0
  244. /package/dist/{RaftProtocolDefs.d.ts → react-native/RaftProtocolDefs.d.ts} +0 -0
  245. /package/dist/{RaftProtocolDefs.js → react-native/RaftProtocolDefs.js} +0 -0
  246. /package/dist/{RaftStreamHandler.d.ts → react-native/RaftStreamHandler.d.ts} +0 -0
  247. /package/dist/{RaftStreamHandler.js → react-native/RaftStreamHandler.js} +0 -0
  248. /package/dist/{RaftSystemType.js → react-native/RaftSystemType.js} +0 -0
  249. /package/dist/{RaftSystemUtils.d.ts → react-native/RaftSystemUtils.d.ts} +0 -0
  250. /package/dist/{RaftSystemUtils.js → react-native/RaftSystemUtils.js} +0 -0
  251. /package/dist/{RaftUpdateEvents.d.ts → react-native/RaftUpdateEvents.d.ts} +0 -0
  252. /package/dist/{RaftUpdateEvents.js → react-native/RaftUpdateEvents.js} +0 -0
  253. /package/dist/{RaftUpdateManager.d.ts → react-native/RaftUpdateManager.d.ts} +0 -0
  254. /package/dist/{RaftUpdateManager.js → react-native/RaftUpdateManager.js} +0 -0
  255. /package/dist/{RaftUtils.d.ts → react-native/RaftUtils.d.ts} +0 -0
  256. /package/dist/{RaftWifiTypes.d.ts → react-native/RaftWifiTypes.d.ts} +0 -0
  257. /package/dist/{RaftWifiTypes.js → react-native/RaftWifiTypes.js} +0 -0
@@ -1,7 +1,8 @@
1
+ declare const raftChannel: typeof import("./RaftChannelBLE.web").default;
2
+ export { raftChannel as RaftChannelBLE };
1
3
  export { default as RaftCommsStats } from './RaftCommsStats';
2
4
  export { default as RaftConnector } from './RaftConnector';
3
5
  export { default as RaftChannel } from './RaftChannel';
4
- export { default as RaftChannelWebBLE } from './RaftChannelWebBLE';
5
6
  export { default as RaftChannelWebSocket } from './RaftChannelWebSocket';
6
7
  export { default as RaftFileHandler } from './RaftFileHandler';
7
8
  export { default as RaftLog } from './RaftLog';
@@ -10,9 +11,11 @@ export { default as RaftMsgHandler } from './RaftMsgHandler';
10
11
  export { default as RaftStreamHandler } from './RaftStreamHandler';
11
12
  export { default as RaftSystemUtils } from './RaftSystemUtils';
12
13
  export { default as RaftUtils } from './RaftUtils';
14
+ export { DeviceManager as RaftDeviceManager } from './RaftDeviceManager';
13
15
  export * from './RaftTypes';
14
16
  export * from './RaftSystemType';
15
17
  export * from './RaftWifiTypes';
16
18
  export * from './RaftConnEvents';
17
19
  export * from './RaftUpdateEvents';
18
20
  export * from "./RaftProtocolDefs";
21
+ export * from "./RaftDeviceStates";
@@ -0,0 +1,46 @@
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.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, "RaftDeviceManager", { enumerable: true, get: function () { return RaftDeviceManager_1.DeviceManager; } });
39
+ tslib_1.__exportStar(require("./RaftTypes"), exports);
40
+ tslib_1.__exportStar(require("./RaftSystemType"), exports);
41
+ tslib_1.__exportStar(require("./RaftWifiTypes"), exports);
42
+ tslib_1.__exportStar(require("./RaftConnEvents"), exports);
43
+ tslib_1.__exportStar(require("./RaftUpdateEvents"), exports);
44
+ tslib_1.__exportStar(require("./RaftProtocolDefs"), exports);
45
+ tslib_1.__exportStar(require("./RaftDeviceStates"), exports);
46
+ //# 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,yDAAyE;AAAhE,sHAAA,aAAa,OAAqB;AAG3C,sDAA4B;AAC5B,2DAAiC;AACjC,0DAAgC;AAChC,2DAAiC;AACjC,6DAAmC;AACnC,6DAAmC;AACnC,6DAAmC"}
@@ -16,6 +16,7 @@
16
16
  "@types/node": "^20.12.7",
17
17
  "@types/python-struct": "^1.0.4",
18
18
  "@types/react": "^18.2.48",
19
+ "@types/react-color": "^3.0.12",
19
20
  "@types/react-dom": "^18.2.18",
20
21
  "assert": "^2.1.0",
21
22
  "buffer": "^6.0.3",
@@ -28,7 +29,10 @@
28
29
  "util": "^0.12.5"
29
30
  },
30
31
  "dependencies": {
32
+ "chart.js": "^4.4.4",
33
+ "python-struct": "^1.1.3",
31
34
  "react": "^18.2.0",
35
+ "react-chartjs-2": "^5.2.0",
32
36
  "react-color": "^2.19.3",
33
37
  "react-dom": "^18.2.0"
34
38
  },
@@ -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
+ }
@@ -1,4 +1,4 @@
1
- import { RaftChannelWebBLE, RaftConnector, RaftEventFn, RaftLog, RaftSystemUtils } from "../../../src/main";
1
+ import { RaftChannelBLE, RaftConnector, RaftEventFn, RaftLog, RaftSystemUtils } from "../../../src/main";
2
2
  import SystemTypeCog from "./SystemTypeCog/SystemTypeCog";
3
3
  import SystemTypeMarty from "./SystemTypeMarty/SystemTypeMarty";
4
4
 
@@ -46,12 +46,12 @@ export default class ConnManager {
46
46
  return this._connector;
47
47
  }
48
48
 
49
- private async getBleDevice(): Promise<BluetoothDevice | null> {
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] }));
50
52
  try {
51
53
  const dev = await navigator.bluetooth.requestDevice({
52
- filters: [
53
- { services: [RaftChannelWebBLE.ServiceUUID] }
54
- ],
54
+ filters: filtersArray,
55
55
  optionalServices: []
56
56
  });
57
57
  return dev;
@@ -62,21 +62,20 @@ export default class ConnManager {
62
62
  }
63
63
 
64
64
  // Connect
65
- public async connect(method: string, locator: string | object): Promise<boolean> {
66
-
67
- // Hook up the connector
65
+ public async connect(method: string, locator: string | object, uuid: string): Promise<boolean> {
68
66
  this._connector.setEventListener((evtType, eventEnum, eventName, eventData) => {
69
- RaftLog.info(`ConnManager - event ${eventName}`);
67
+ RaftLog.verbose(`ConnManager - event ${eventName}`);
70
68
  if (this._onConnectionEvent) {
71
69
  this._onConnectionEvent(evtType, eventEnum, eventName, eventData);
72
70
  }
73
71
  });
72
+ await this._connector.initializeChannel(method);
74
73
  // Set the connector websocket suffix
75
74
  if (method === "WebBLE") {
76
- const dev = await this.getBleDevice();
77
- return this._connector.connect(method, dev as object);
75
+ const dev = await this.getBleDevice(uuid);
76
+ return this._connector.connect(dev as object);
78
77
  }
79
- return this._connector.connect(method, locator);
78
+ return this._connector.connect(locator);
80
79
  }
81
80
 
82
81
  // Disconnect
@@ -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;
@@ -0,0 +1,139 @@
1
+ import React, { useEffect, useState, memo, useRef } from "react";
2
+ import { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, ArcElement, Tooltip, Legend } from 'chart.js';
3
+ import { Line } from "react-chartjs-2";
4
+ import ConnManager from "./ConnManager";
5
+ import { DeviceState } from "../../../src/RaftDeviceStates";
6
+
7
+ const connManager = ConnManager.getInstance();
8
+
9
+ ChartJS.register(
10
+ CategoryScale,
11
+ LinearScale,
12
+ PointElement,
13
+ LineElement,
14
+ ArcElement,
15
+ Tooltip,
16
+ Legend
17
+ );
18
+
19
+ export interface DeviceLineChartProps {
20
+ deviceKey: string;
21
+ lastUpdated: number;
22
+ }
23
+
24
+ interface ChartJSData {
25
+ labels: string[];
26
+ datasets: {
27
+ label: string;
28
+ data: number[];
29
+ fill: boolean;
30
+ borderColor: string;
31
+ backgroundColor: string;
32
+ yAxisID: string;
33
+ }[];
34
+ }
35
+
36
+ const DeviceLineChart: React.FC<DeviceLineChartProps> = memo(({ deviceKey, lastUpdated }) => {
37
+
38
+ const deviceManager = connManager.getConnector().getSystemType()?.deviceMgrIF;
39
+ const deviceState: DeviceState | undefined = deviceManager?.getDeviceState(deviceKey);
40
+ // const { deviceAttributes, deviceTimeline } = deviceState;
41
+ const [chartData, setChartData] = useState<ChartJSData>({
42
+ labels: [],
43
+ datasets: []
44
+ });
45
+
46
+ const options = {
47
+ responsive: true,
48
+ maintainAspectRatio: false,
49
+ animation: {
50
+ duration: 1, // default is 1000ms
51
+ },
52
+ scales: {}
53
+ };
54
+
55
+ const colourMapRef = useRef<{ [key: string]: string }>({
56
+ prox: "hsl(60, 70%, 60%)",
57
+ als: "hsl(0, 70%, 60%)",
58
+ white: "hsl(120, 70%, 60%)",
59
+ x: "hsl(240, 70%, 60%)",
60
+ y: "hsl(300, 70%, 60%)",
61
+ z: "hsl(0, 70%, 60%)",
62
+ dist: "hsl(60, 70%, 60%)",
63
+ temperature: "hsl(360, 70%, 60%)",
64
+ humidity: "hsl(200, 70%, 60%)",
65
+ Red: "hsl(0, 70%, 60%)",
66
+ Green: "hsl(120, 70%, 60%)",
67
+ Blue: "hsl(240, 70%, 60%)",
68
+ IR: "hsl(300, 70%, 60%)",
69
+ });
70
+
71
+ useEffect(() => {
72
+ if (!deviceState)
73
+ return;
74
+ const maxChartDataPoints = 50;
75
+ const labels = deviceState.deviceTimeline.timestampsUs.slice(maxChartDataPoints).map(time => {
76
+ const seconds = time / 1e6; // Convert microseconds to seconds
77
+ const secondsStr = seconds.toFixed(3); // Format decimal places
78
+ return secondsStr;
79
+ });
80
+
81
+ const uniqueAxes = new Map<string, { range: [number, number], units: string }>();
82
+ const datasets = Object.entries(deviceState.deviceAttributes)
83
+ .filter(([attributeName, attributeDetails]) => attributeDetails.visibleSeries !== false)
84
+ .map(([attributeName, attributeDetails]) => {
85
+ const data = attributeDetails.values.slice(maxChartDataPoints);
86
+ let colour = colourMapRef.current[attributeName];
87
+ if (!colour) {
88
+ colour = `hsl(${Math.random() * 360}, 70%, 60%)`;
89
+ colourMapRef.current[attributeName] = colour;
90
+ }
91
+ let rangeEnds: [number,number] = [Math.min(...attributeDetails.range), Math.max(...attributeDetails.range)];
92
+ const axisKey = `${rangeEnds[0]}-${rangeEnds[1]}-${attributeDetails.units}`;
93
+ if (!uniqueAxes.has(axisKey)) {
94
+ uniqueAxes.set(axisKey, { range: rangeEnds, units: attributeDetails.units });
95
+ }
96
+ return {
97
+ label: attributeName,
98
+ data: data,
99
+ fill: false,
100
+ borderColor: colour,
101
+ backgroundColor: colour,
102
+ yAxisID: axisKey
103
+ };
104
+ });
105
+
106
+ const scales: { [key: string]: any } = {};
107
+ uniqueAxes.forEach((axis, key) => {
108
+ scales[key] = {
109
+ type: 'linear',
110
+ display: true,
111
+ position: 'left',
112
+ scaleLabel: {
113
+ display: true,
114
+ labelString: axis.units
115
+ },
116
+ ticks: {
117
+ min: axis.range[0],
118
+ max: axis.range[1]
119
+ }
120
+ };
121
+ }
122
+ );
123
+ options.scales = scales;
124
+ setChartData({ labels, datasets });
125
+ }
126
+ , [lastUpdated]);
127
+
128
+ if (!deviceState || Object.keys(deviceState.deviceAttributes).length === 0) {
129
+ return <></>;
130
+ }
131
+
132
+ return (
133
+ <div className="device-line-chart">
134
+ <Line data={chartData} options={options} />
135
+ </div>
136
+ );
137
+ });
138
+
139
+ export default DeviceLineChart;