@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,614 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftConnector
5
+ // Part of RaftJS
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
+ const tslib_1 = require("tslib");
13
+ const RaftMsgHandler_1 = tslib_1.__importDefault(require("./RaftMsgHandler"));
14
+ const RaftChannelWebSocket_1 = tslib_1.__importDefault(require("./RaftChannelWebSocket"));
15
+ const RaftChannelWebSerial_1 = tslib_1.__importDefault(require("./RaftChannelWebSerial"));
16
+ const RaftCommsStats_1 = tslib_1.__importDefault(require("./RaftCommsStats"));
17
+ const RaftTypes_1 = require("./RaftTypes");
18
+ const RaftSystemUtils_1 = tslib_1.__importDefault(require("./RaftSystemUtils"));
19
+ const RaftFileHandler_1 = tslib_1.__importDefault(require("./RaftFileHandler"));
20
+ const RaftStreamHandler_1 = tslib_1.__importDefault(require("./RaftStreamHandler"));
21
+ const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
22
+ const RaftConnEvents_1 = require("./RaftConnEvents");
23
+ const RaftUpdateEvents_1 = require("./RaftUpdateEvents");
24
+ const RaftUpdateManager_1 = tslib_1.__importDefault(require("./RaftUpdateManager"));
25
+ const RaftChannelBLEFactory_1 = require("./RaftChannelBLEFactory");
26
+ class RaftConnector {
27
+ /**
28
+ * RaftConnector constructor
29
+ * @param getSystemTypeCB - callback to get system type
30
+ */
31
+ constructor(getSystemTypeCB = null) {
32
+ // Get system type callback
33
+ this._getSystemTypeCB = null;
34
+ // System type
35
+ this._systemType = null;
36
+ // Channel
37
+ this._raftChannel = null;
38
+ // Channel connection method and locator
39
+ this._channelConnMethod = "";
40
+ this._channelConnLocator = "";
41
+ // Comms stats
42
+ this._commsStats = new RaftCommsStats_1.default();
43
+ // Message handler
44
+ this._raftMsgHandler = new RaftMsgHandler_1.default(this._commsStats);
45
+ // RaftSystem
46
+ this._raftSystemUtils = new RaftSystemUtils_1.default(this._raftMsgHandler);
47
+ // Connection performance checker
48
+ this._testConnPerfBlockSize = 500;
49
+ this._testConnPerfNumBlocks = 50;
50
+ this._connPerfRsltDelayMs = 4000;
51
+ // Retry connection if lost
52
+ this._retryIfLostEnabled = true;
53
+ this._retryIfLostForSecs = 10;
54
+ this._retryIfLostIsConnected = false;
55
+ this._retryIfLostDisconnectTime = null;
56
+ this._retryIfLostRetryDelayMs = 500;
57
+ // File handler
58
+ this._raftFileHandler = new RaftFileHandler_1.default(this._raftMsgHandler, this._commsStats);
59
+ // Stream handler
60
+ this._raftStreamHandler = new RaftStreamHandler_1.default(this._raftMsgHandler, this._commsStats, this);
61
+ // Event listener
62
+ this._onEventFn = null;
63
+ // Update manager
64
+ this._raftUpdateManager = null;
65
+ // Get system type callback
66
+ this._getSystemTypeCB = getSystemTypeCB;
67
+ // Debug
68
+ RaftLog_1.default.debug('RaftConnector starting up');
69
+ }
70
+ /**
71
+ * Configure the file handler
72
+ * @param fileBlockSize - size of file blocks to send
73
+ * @param batchAckSize - number of blocks to send before waiting for ack
74
+ * @returns void
75
+ */
76
+ configureFileHandler(fileBlockSize, batchAckSize) {
77
+ this._raftFileHandler.setRequestedFileBlockSize(fileBlockSize);
78
+ this._raftFileHandler.setRequestedBatchAckSize(batchAckSize);
79
+ }
80
+ /**
81
+ * Set event listener
82
+ * @param onEventFn - event listener
83
+ * @returns void
84
+ * */
85
+ setEventListener(onEventFn) {
86
+ this._onEventFn = onEventFn;
87
+ }
88
+ /**
89
+ * isConnected
90
+ * @returns boolean - true if connected
91
+ * */
92
+ isConnected() {
93
+ // Check if connected
94
+ const isConnected = this._retryIfLostIsConnected || (this._raftChannel ? this._raftChannel.isConnected() : false);
95
+ return isConnected;
96
+ }
97
+ /**
98
+ * Set try to reconnect if connection lost
99
+ * @param enableRetry - true to enable retry
100
+ * @param retryForSecs - retry for this many seconds
101
+ * @returns void
102
+ * */
103
+ setRetryConnectionIfLost(enableRetry, retryForSecs) {
104
+ this._retryIfLostEnabled = enableRetry;
105
+ this._retryIfLostForSecs = retryForSecs;
106
+ if (!this._retryIfLostEnabled) {
107
+ this._retryIfLostIsConnected = false;
108
+ }
109
+ RaftLog_1.default.debug(`setRetryConnectionIfLost ${enableRetry} retry for ${retryForSecs}`);
110
+ }
111
+ /**
112
+ * Get Raft system type (the type of hardware connected to - determined using the getSystemInfo API)
113
+ * @returns RaftSystemType | null - Raft system type
114
+ * */
115
+ getSystemType() {
116
+ return this._systemType;
117
+ }
118
+ /**
119
+ * Get connection method
120
+ * @returns string - connection method
121
+ * */
122
+ getConnMethod() {
123
+ return this._channelConnMethod;
124
+ }
125
+ /**
126
+ * Get connection locator
127
+ * @returns string | object - connection locator
128
+ * */
129
+ getConnLocator() {
130
+ return this._raftChannel ? this._raftChannel.getConnectedLocator() : null;
131
+ }
132
+ /**
133
+ * Get Raft channel (this is the channel used for commuinications with the Raft application)
134
+ * @returns RaftChannel | null - Raft channel
135
+ * */
136
+ getRaftChannel() {
137
+ return this._raftChannel;
138
+ }
139
+ /**
140
+ * Get Raft system utils (access to system information and control)
141
+ * @returns RaftSystemUtils - Raft system utils
142
+ * */
143
+ getRaftSystemUtils() {
144
+ return this._raftSystemUtils;
145
+ }
146
+ /**
147
+ * Get communication stats
148
+ * @returns RaftCommsStats - communication stats
149
+ * */
150
+ getCommsStats() {
151
+ return this._commsStats;
152
+ }
153
+ /**
154
+ * Get Raft message handler (to allow message sending and receiving)
155
+ * @returns RaftMsgHandler - Raft message handler
156
+ * */
157
+ getRaftMsgHandler() {
158
+ return this._raftMsgHandler;
159
+ }
160
+ /**
161
+ * Pause connection
162
+ * @param pause - true to pause, false to resume
163
+ */
164
+ pauseConnection(pause = true) {
165
+ if (this._raftChannel)
166
+ this._raftChannel.pauseConnection(pause);
167
+ }
168
+ /**
169
+ * Initialize the Raft channel
170
+ */
171
+ async initializeChannel(method) {
172
+ // Initialize raft channel
173
+ if (method === 'WebBLE' || method === 'PhoneBLE') {
174
+ const RaftChannelBLE = (0, RaftChannelBLEFactory_1.createBLEChannel)();
175
+ this._raftChannel = new RaftChannelBLE();
176
+ this._channelConnMethod = method;
177
+ }
178
+ else if (method === 'WebSocket' || method === 'wifi') {
179
+ this._raftChannel = new RaftChannelWebSocket_1.default();
180
+ this._channelConnMethod = 'WebSocket';
181
+ }
182
+ else if (method === 'WebSerial') {
183
+ this._raftChannel = new RaftChannelWebSerial_1.default();
184
+ this._channelConnMethod = 'WebSerial';
185
+ }
186
+ else {
187
+ RaftLog_1.default.error('Unknown method: ' + method);
188
+ return false;
189
+ }
190
+ // Check channel established
191
+ if (this._raftChannel !== null) {
192
+ // Set message handler
193
+ this._raftChannel.setMsgHandler(this._raftMsgHandler);
194
+ this._raftChannel.setOnConnEvent(this.onConnEvent.bind(this));
195
+ // Message handling in and out
196
+ this._raftMsgHandler.registerForResults(this);
197
+ this._raftMsgHandler.registerMsgSender(this._raftChannel);
198
+ return true;
199
+ }
200
+ else {
201
+ this._channelConnMethod = "";
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Connect to a Raft device
207
+ *
208
+ * @param {string | object} locator - either a string (WebSocket URL or serial port) or an object (WebBLE)
209
+ * @returns Promise<boolean>
210
+ *
211
+ */
212
+ async connect(locator) {
213
+ if (!this._raftChannel) {
214
+ RaftLog_1.default.error('Raft channel is not initialized.');
215
+ return false;
216
+ }
217
+ // Store locator
218
+ this._channelConnLocator = locator;
219
+ // Connect
220
+ let connOk = false;
221
+ try {
222
+ // Event
223
+ this.onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_CONNECTING);
224
+ // Connect
225
+ connOk = await this._connectToChannel();
226
+ }
227
+ catch (err) {
228
+ RaftLog_1.default.error('RaftConnector.connect - error: ' + err);
229
+ }
230
+ if (connOk) {
231
+ // Get system type
232
+ if (this._getSystemTypeCB) {
233
+ // Get system type
234
+ this._systemType = await this._getSystemTypeCB(this._raftSystemUtils);
235
+ // Set defaults
236
+ if (this._systemType) {
237
+ this._raftSystemUtils.setDefaultWiFiHostname(this._systemType.defaultWiFiHostname);
238
+ }
239
+ }
240
+ // Setup system type
241
+ if (this._systemType) {
242
+ this._systemType.setup(this._raftSystemUtils, this._onEventFn);
243
+ }
244
+ // Check if subscription required
245
+ if (this._systemType &&
246
+ this._systemType.subscribeForUpdates &&
247
+ this._raftChannel.requiresSubscription()) {
248
+ try {
249
+ // Subscription
250
+ await this._systemType.subscribeForUpdates(this._raftSystemUtils, true);
251
+ RaftLog_1.default.info(`connect subscribed for updates`);
252
+ }
253
+ catch (error) {
254
+ RaftLog_1.default.warn(`connect subscribe for updates failed ${error}`);
255
+ }
256
+ }
257
+ // Send connected event
258
+ this.onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_CONNECTED);
259
+ }
260
+ else {
261
+ // Failed Event
262
+ this.onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_CONNECTION_FAILED);
263
+ // configure file handler
264
+ this.configureFileHandler(this._raftChannel.fhFileBlockSize(), this._raftChannel.fhBatchAckSize());
265
+ }
266
+ return connOk;
267
+ }
268
+ async disconnect() {
269
+ // Disconnect
270
+ this._retryIfLostIsConnected = false;
271
+ if (this._raftChannel) {
272
+ // Check if there is a RICREST command to send before disconnecting
273
+ const ricRestCommand = this._raftChannel.ricRestCmdBeforeDisconnect();
274
+ console.log(`sending RICREST command before disconnect: ${ricRestCommand}`);
275
+ if (ricRestCommand) {
276
+ await this.sendRICRESTMsg(ricRestCommand, {});
277
+ }
278
+ // await this.sendRICRESTMsg("bledisc", {});
279
+ await this._raftChannel.disconnect();
280
+ this._raftChannel = null;
281
+ }
282
+ }
283
+ // Mark: Tx Message handling -----------------------------------------------------------------------------------------
284
+ /**
285
+ *
286
+ * sendRICRESTMsg
287
+ * @param commandName command API string
288
+ * @param params parameters (simple name value pairs only) to parameterize trajectory
289
+ * @returns Promise<RaftOKFail>
290
+ *
291
+ */
292
+ async sendRICRESTMsg(commandName, params, bridgeID = undefined) {
293
+ try {
294
+ // Format the paramList as query string
295
+ const paramEntries = Object.entries(params);
296
+ let paramQueryStr = '';
297
+ for (const param of paramEntries) {
298
+ if (paramQueryStr.length > 0)
299
+ paramQueryStr += '&';
300
+ paramQueryStr += param[0] + '=' + param[1];
301
+ }
302
+ // Format the url to send
303
+ if (paramQueryStr.length > 0)
304
+ commandName += '?' + paramQueryStr;
305
+ return await this._raftMsgHandler.sendRICRESTURL(commandName, bridgeID);
306
+ }
307
+ catch (error) {
308
+ RaftLog_1.default.warn(`sendRICRESTMsg failed ${error}`);
309
+ return new RaftTypes_1.RaftOKFail();
310
+ }
311
+ }
312
+ // Mark: Rx Message handling -----------------------------------------------------------------------------------------
313
+ /**
314
+ * onRxReply - handle a reply message
315
+ * @param msgHandle number indicating the message that is being replied to (from the original message)
316
+ * @param msgRsltCode result code
317
+ * @param msgRsltJsonObj result object
318
+ */
319
+ onRxReply(msgHandle, msgRsltCode, msgRsltJsonObj) {
320
+ RaftLog_1.default.verbose(`onRxReply msgHandle ${msgHandle} rsltCode ${msgRsltCode} obj ${JSON.stringify(msgRsltJsonObj)}`);
321
+ }
322
+ /**
323
+ * onRxUnnumberedMsg - handle an unnumbered message
324
+ * @param msgRsltJsonObj result object
325
+ */
326
+ onRxUnnumberedMsg(msgRsltJsonObj) {
327
+ RaftLog_1.default.verbose(`onRxUnnumberedMsg rsltCode obj ${JSON.stringify(msgRsltJsonObj)}`);
328
+ // Inform the file handler
329
+ if ('okto' in msgRsltJsonObj) {
330
+ this._raftFileHandler.onOktoMsg(msgRsltJsonObj.okto);
331
+ }
332
+ else if ('sokto' in msgRsltJsonObj) {
333
+ this._raftStreamHandler.onSoktoMsg(msgRsltJsonObj.sokto);
334
+ }
335
+ }
336
+ /**
337
+ * onRxFileBlock - handle a file block
338
+ * @param filePos file position
339
+ * @param fileBlockData file block data
340
+ */
341
+ onRxFileBlock(filePos, fileBlockData) {
342
+ // RaftLog.info(`onRxFileBlock filePos ${filePos} fileBlockData ${RaftUtils.bufferToHex(fileBlockData)}`);
343
+ this._raftFileHandler.onFileBlock(filePos, fileBlockData);
344
+ }
345
+ // Mark: Handling of other message types -----------------------------------------------------------------------------------------
346
+ /**
347
+ * onRxOtherMsgType - handle other message types
348
+ * @param payload message payload
349
+ * @param frameTimeMs time of frame
350
+ */
351
+ onRxOtherMsgType(payload, _frameTimeMs) {
352
+ // RaftLog.debug(`onRxOtherMsgType payload ${RaftUtils.bufferToHex(payload)}`);
353
+ RaftLog_1.default.verbose(`onRxOtherMsgType payloadLen ${payload.length}`);
354
+ // Handle other messages
355
+ if (this._systemType && this._systemType.rxOtherMsgType) {
356
+ this._systemType.rxOtherMsgType(payload, _frameTimeMs);
357
+ }
358
+ }
359
+ // Mark: File sending --------------------------------------------------------------------------------
360
+ /**
361
+ * sendFile - send a file
362
+ * @param fileName name of file to send
363
+ * @param fileContents file contents
364
+ * @param progressCallback callback to receive progress updates
365
+ * @returns Promise<boolean> - true if file sent successfully
366
+ */
367
+ async sendFile(fileName, fileContents, progressCallback) {
368
+ return this._raftFileHandler.fileSend(fileName, RaftTypes_1.RaftFileSendType.NORMAL_FILE, "fs", fileContents, progressCallback);
369
+ }
370
+ // Mark: Streaming --------------------------------------------------------------------------------
371
+ /**
372
+ * streamAudio - stream audio
373
+ * @param streamContents audio data
374
+ * @param clearExisting true to clear existing audio
375
+ * @param duration duration of audio
376
+ */
377
+ streamAudio(streamContents, clearExisting, duration) {
378
+ if (this._raftStreamHandler && this.isConnected()) {
379
+ this._raftStreamHandler.streamAudio(streamContents, clearExisting, duration);
380
+ }
381
+ }
382
+ /**
383
+ * isStreamStarting - check if stream is starting
384
+ */
385
+ isStreamStarting() {
386
+ return this._raftStreamHandler.isStreamStarting();
387
+ }
388
+ // Mark: File system --------------------------------------------------------------------------------
389
+ /**
390
+ * fsGetContents - get file contents
391
+ * @param fileName name of file to get
392
+ * @param fileSource source of file to get (e.g. "fs" or "bridgeserial1", if omitted defaults to "fs")
393
+ * @param progressCallback callback to receive progress updates
394
+ * @returns Promise<RaftFileDownloadResult>
395
+ */
396
+ async fsGetContents(fileName, fileSource, progressCallback) {
397
+ return await this._raftFileHandler.fileReceive(fileName, fileSource, progressCallback);
398
+ }
399
+ /**
400
+ * setLegacySoktoMode - set legacy sokto mode
401
+ * @param legacyMode true to set legacy mode
402
+ */
403
+ setLegacySoktoMode(legacyMode) {
404
+ return this._raftStreamHandler.setLegacySoktoMode(legacyMode);
405
+ }
406
+ // Mark: Bridge serial --------------------------------------------------------------------------------
407
+ /**
408
+ * createCommsBridge - create a comms bridge
409
+ * @param bridgeSource source of bridge (e.g. "Serial1")
410
+ * @param bridgeName name of bridge
411
+ * @param idleCloseSecs idle close time seconds
412
+ * @returns Promise<RaftBridgeSetupResp>
413
+ */
414
+ async createCommsBridge(bridgeSource, bridgeName, idleCloseSecs = 0) {
415
+ return await this._raftMsgHandler.createCommsBridge(bridgeSource, bridgeName, idleCloseSecs);
416
+ }
417
+ // Mark: Connection performance--------------------------------------------------------------------------
418
+ /**
419
+ * ParkMiller random number generator
420
+ * @param seed
421
+ * @returns number
422
+ */
423
+ parkmiller_next(seed) {
424
+ const hi = Math.round(16807 * (seed & 0xffff));
425
+ let lo = Math.round(16807 * (seed >> 16));
426
+ lo += (hi & 0x7fff) << 16;
427
+ lo += hi >> 15;
428
+ if (lo > 0x7fffffff)
429
+ lo -= 0x7fffffff;
430
+ return lo;
431
+ }
432
+ /**
433
+ * checkConnPerformance - check connection performance
434
+ * @returns Promise<number | undefined> - connection performance
435
+ */
436
+ async checkConnPerformance() {
437
+ // Sends a magic sequence of bytes followed by blocks of random data
438
+ // these will be ignored by the Raft library (as it recognises magic sequence)
439
+ // and is used performance evaluation
440
+ let prbsState = 1;
441
+ const testData = new Uint8Array(this._testConnPerfBlockSize);
442
+ for (let i = 0; i < this._testConnPerfNumBlocks; i++) {
443
+ testData.set([0, (i >> 24) & 0xff, (i >> 16) & 0xff, (i >> 8) & 0xff, i & 0xff, 0x1f, 0x9d, 0xf4, 0x7a, 0xb5]);
444
+ for (let j = 10; j < this._testConnPerfBlockSize; j++) {
445
+ prbsState = this.parkmiller_next(prbsState);
446
+ testData[j] = prbsState & 0xff;
447
+ }
448
+ if (this._raftChannel) {
449
+ await this._raftChannel.sendTxMsg(testData, false);
450
+ }
451
+ }
452
+ // Wait a little to allow the Raft app to process the data
453
+ await new Promise(resolve => setTimeout(resolve, this._connPerfRsltDelayMs));
454
+ // Get performance
455
+ const blePerf = await this._raftSystemUtils.getSysModInfoBLEMan();
456
+ if (blePerf) {
457
+ console.log(`checkConnPerformance result rate = ${blePerf.tBPS}BytesPS`);
458
+ return blePerf.tBPS;
459
+ }
460
+ else {
461
+ throw new Error('checkConnPerformance: failed to get BLE performance');
462
+ }
463
+ }
464
+ // Mark: Connection event --------------------------------------------------------------------------
465
+ /**
466
+ * onConnEvent - handle connection event
467
+ * @param eventEnum connection event enumeration
468
+ * @param data data associated with event
469
+ * @returns void
470
+ */
471
+ onConnEvent(eventEnum, data = undefined) {
472
+ // Handle information clearing on disconnect
473
+ switch (eventEnum) {
474
+ case RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED:
475
+ // Disconnect time
476
+ this._retryIfLostDisconnectTime = Date.now();
477
+ // Check if retry required
478
+ if (this._retryIfLostIsConnected && this._retryIfLostEnabled) {
479
+ // Indicate connection disrupted
480
+ if (this._onEventFn) {
481
+ this._onEventFn("conn", RaftConnEvents_1.RaftConnEvent.CONN_ISSUE_DETECTED, RaftConnEvents_1.RaftConnEventNames[RaftConnEvents_1.RaftConnEvent.CONN_ISSUE_DETECTED]);
482
+ }
483
+ // Retry connection
484
+ this._retryConnection();
485
+ // Don't allow disconnection to propagate until retries have occurred
486
+ return;
487
+ }
488
+ // Invalidate connection details
489
+ this._raftSystemUtils.invalidate();
490
+ // Invalidate system-type info
491
+ if (this._systemType && this._systemType.stateIsInvalid) {
492
+ this._systemType.stateIsInvalid();
493
+ }
494
+ break;
495
+ }
496
+ // Notify
497
+ if (this._onEventFn) {
498
+ this._onEventFn("conn", eventEnum, RaftConnEvents_1.RaftConnEventNames[eventEnum], data);
499
+ }
500
+ }
501
+ /**
502
+ * Retry connection
503
+ */
504
+ _retryConnection() {
505
+ // Check timeout
506
+ if ((this._retryIfLostDisconnectTime !== null) &&
507
+ (Date.now() - this._retryIfLostDisconnectTime < this._retryIfLostForSecs * 1000)) {
508
+ // Set timer to try to reconnect
509
+ setTimeout(async () => {
510
+ // Try to connect
511
+ const isConn = await this._connectToChannel();
512
+ if (!isConn) {
513
+ this._retryConnection();
514
+ }
515
+ else {
516
+ // No longer retrying
517
+ this._retryIfLostDisconnectTime = null;
518
+ // Indicate connection problem resolved
519
+ if (this._onEventFn) {
520
+ this._onEventFn("conn", RaftConnEvents_1.RaftConnEvent.CONN_ISSUE_RESOLVED, RaftConnEvents_1.RaftConnEventNames[RaftConnEvents_1.RaftConnEvent.CONN_ISSUE_RESOLVED]);
521
+ }
522
+ }
523
+ }, this._retryIfLostRetryDelayMs);
524
+ }
525
+ else {
526
+ // No longer connected after retry timeout
527
+ this._retryIfLostIsConnected = false;
528
+ // Indicate disconnection
529
+ if (this._onEventFn) {
530
+ this._onEventFn("conn", RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED, RaftConnEvents_1.RaftConnEventNames[RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED]);
531
+ }
532
+ // Invalidate connection details
533
+ this._raftSystemUtils.invalidate();
534
+ // Invalidate system-type info
535
+ if (this._systemType && this._systemType.stateIsInvalid) {
536
+ this._systemType.stateIsInvalid();
537
+ }
538
+ }
539
+ }
540
+ /**
541
+ * Connect to channel
542
+ * @returns Promise<boolean> - true if connected
543
+ */
544
+ async _connectToChannel() {
545
+ // Connect
546
+ try {
547
+ if (this._raftChannel) {
548
+ const connected = await this._raftChannel.connect(this._channelConnLocator, this._systemType ? this._systemType.connectorOptions : {});
549
+ if (connected) {
550
+ this._retryIfLostIsConnected = true;
551
+ return true;
552
+ }
553
+ }
554
+ }
555
+ catch (error) {
556
+ RaftLog_1.default.error(`RaftConnector.connect() error: ${error}`);
557
+ }
558
+ return false;
559
+ }
560
+ // Mark: OTA Update -----------------------------------------------------------------------------------------
561
+ /**
562
+ * onUpdateEvent - handle update event
563
+ * @param eventEnum
564
+ * @param data
565
+ */
566
+ _onUpdateEvent(eventEnum, data = undefined) {
567
+ // Notify
568
+ if (this._onEventFn) {
569
+ this._onEventFn("ota", eventEnum, RaftUpdateEvents_1.RaftUpdateEventNames[eventEnum], data);
570
+ }
571
+ }
572
+ /**
573
+ * otaUpdateCheck - check for OTA update
574
+ * @returns Promise<RaftUpdateEvent> - update event
575
+ * */
576
+ async otaUpdateCheck() {
577
+ if (!this._raftUpdateManager)
578
+ return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_NOT_CONFIGURED;
579
+ return await this._raftUpdateManager.checkForUpdate(this._raftSystemUtils.getCachedSystemInfo());
580
+ }
581
+ /**
582
+ * otaUpdateStart - start OTA update
583
+ * @returns Promise<RaftUpdateEvent> - update event
584
+ * */
585
+ async otaUpdateStart() {
586
+ if (!this._raftUpdateManager)
587
+ return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_NOT_CONFIGURED;
588
+ return await this._raftUpdateManager.firmwareUpdate();
589
+ }
590
+ /**
591
+ * otaUpdateCancel - cancel OTA update
592
+ * @returns Promise<void>
593
+ * */
594
+ async otaUpdateCancel() {
595
+ if (!this._raftUpdateManager)
596
+ return;
597
+ return await this._raftUpdateManager.firmwareUpdateCancel();
598
+ }
599
+ /**
600
+ * setupUpdateManager - setup the update manager
601
+ * @param appVersion - app version
602
+ * @param appUpdateURL - app update URL
603
+ * @param firmwareBaseURL - firmware base URL
604
+ * @param fileDownloader - file downloader
605
+ * @returns void
606
+ * */
607
+ setupUpdateManager(appVersion, appUpdateURL, firmwareBaseURL, fileDownloader) {
608
+ // Setup update manager
609
+ const firmwareTypeStrForMainFw = 'main';
610
+ this._raftUpdateManager = new RaftUpdateManager_1.default(this._systemType, this._raftMsgHandler, this._raftFileHandler, this._raftSystemUtils, this._onUpdateEvent.bind(this), firmwareTypeStrForMainFw, appVersion, fileDownloader, appUpdateURL, firmwareBaseURL, this._raftChannel);
611
+ }
612
+ }
613
+ exports.default = RaftConnector;
614
+ //# sourceMappingURL=RaftConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftConnector.js","sourceRoot":"","sources":["../../src/RaftConnector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DeviceTypePollRespMetadata } from "./RaftDeviceInfo";
2
+ export default class CustomAttrHandler {
3
+ handleAttr(pollRespMetadata: DeviceTypePollRespMetadata, msgBuffer: Buffer, msgBufIdx: number): number[][];
4
+ }