@robdobsn/raftjs 1.1.1

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