@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,487 @@
1
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // RaftSystem
4
+ // Part of RaftJS
5
+ //
6
+ // Rob Dobson & Chris Greening 2020-2024
7
+ // (C) 2020-2024 All rights reserved
8
+ //
9
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10
+
11
+ import {
12
+ RaftSysModInfoWiFi,
13
+ RaftWifiConnState,
14
+ RaftWifiConnStatus,
15
+ } from "./RaftWifiTypes";
16
+ import RaftLog from "./RaftLog";
17
+ import RaftMsgHandler from "./RaftMsgHandler";
18
+
19
+ import {
20
+ RaftFileList,
21
+ RaftFriendlyName,
22
+ RaftOKFail,
23
+ RaftSysModInfoBLEMan,
24
+ RaftSystemInfo,
25
+ RaftWifiScanResults,
26
+ } from "./RaftTypes";
27
+
28
+ export default class RaftSystemUtils {
29
+ // Message handler
30
+ private _msgHandler: RaftMsgHandler;
31
+
32
+ // System info
33
+ private _systemInfo: RaftSystemInfo | null = null;
34
+
35
+ // Raft naming
36
+ private _friendlyName: RaftFriendlyName | null = null;
37
+
38
+ // WiFi connection info
39
+ private _wifiConnStatus: RaftWifiConnStatus = new RaftWifiConnStatus();
40
+ private _defaultWiFiHostname = "Raft";
41
+ private _maxSecsToWaitForWiFiConn = 20;
42
+
43
+ /**
44
+ * constructor
45
+ * @param raftMsgHandler
46
+ */
47
+ constructor(raftMsgHandler: RaftMsgHandler) {
48
+ this._msgHandler = raftMsgHandler;
49
+ }
50
+
51
+ /**
52
+ * getMsgHandler
53
+ * @returns RaftMsgHandler
54
+ */
55
+ getMsgHandler(): RaftMsgHandler {
56
+ return this._msgHandler;
57
+ }
58
+
59
+ /**
60
+ * setDefaultWiFiHostname
61
+ * @param defaultWiFiHostname
62
+ */
63
+ setDefaultWiFiHostname(defaultWiFiHostname: string) {
64
+ this._defaultWiFiHostname = defaultWiFiHostname;
65
+ }
66
+
67
+ /**
68
+ * getFriendlyName
69
+ *
70
+ * @returns friendly name
71
+ */
72
+ getFriendlyName(): RaftFriendlyName | null {
73
+ return this._friendlyName;
74
+ }
75
+
76
+ /**
77
+ * invalidate
78
+ */
79
+ invalidate() {
80
+ // Invalidate system info
81
+ this._systemInfo = null;
82
+ this._friendlyName = null;
83
+ RaftLog.debug("RaftSystemUtils information invalidated");
84
+ }
85
+
86
+ /**
87
+ * retrieveInfo - get system info
88
+ * @returns Promise<RaftSystemInfo>
89
+ *
90
+ */
91
+ async retrieveInfo(): Promise<boolean> {
92
+
93
+ // Get system info
94
+ RaftLog.debug(`RaftSystemUtils retrieveInfo getting system info`);
95
+ try {
96
+ await this.getSystemInfo(true);
97
+ RaftLog.debug(
98
+ `retrieveInfo - Raft Version ${this._systemInfo?.SystemVersion}`
99
+ );
100
+ } catch (error) {
101
+ RaftLog.warn("RaftSystemUtils retrieveInfo - frailed to get version " + error);
102
+ return false;
103
+ }
104
+
105
+ // Get app name
106
+ try {
107
+ await this.getRaftName();
108
+ } catch (error) {
109
+ RaftLog.warn("retrieveInfo - failed to get Raft name " + error);
110
+ return false;
111
+ }
112
+
113
+ // Get WiFi connected info
114
+ try {
115
+ await this.getWiFiConnStatus();
116
+ } catch (error) {
117
+ RaftLog.warn("RaftSystemUtils retrieveInfo - failed to get WiFi Status " + error);
118
+ return false;
119
+ }
120
+
121
+ return true;
122
+ }
123
+
124
+ /**
125
+ *
126
+ * getSystemInfo
127
+ * @param forceGet - true to force a get from the raft app
128
+ * @returns Promise<RaftSystemInfo>
129
+ *
130
+ */
131
+ async getSystemInfo(forceGet = false): Promise<RaftSystemInfo> {
132
+ if (!forceGet && this._systemInfo) {
133
+ return this._systemInfo;
134
+ }
135
+ try {
136
+ this._systemInfo = await this._msgHandler.sendRICRESTURL<
137
+ RaftSystemInfo
138
+ >("v");
139
+ RaftLog.debug(
140
+ "getRaftSystemInfo returned " + JSON.stringify(this._systemInfo)
141
+ );
142
+ this._systemInfo.validMs = Date.now();
143
+ // Check if friendly name is included in system info
144
+ if (this._systemInfo.Friendly && (this._systemInfo.Friendly.length > 0)) {
145
+ this._friendlyName = {"friendlyName": this._systemInfo.Friendly, "friendlyNameIsSet": true, "rslt": "ok", "validMs": Date.now()};
146
+ }
147
+ // Handle alternatives in system info
148
+ if ((this._systemInfo.RicHwRevNo !== undefined) && (this._systemInfo.HwRev === undefined)) {
149
+ this._systemInfo.HwRev = this._systemInfo.RicHwRevNo;
150
+ } else if ((this._systemInfo.HwRev !== undefined) && (this._systemInfo.RicHwRevNo === undefined)) {
151
+ this._systemInfo.RicHwRevNo = this._systemInfo.HwRev;
152
+ }
153
+
154
+ // Return system info
155
+ return this._systemInfo;
156
+ } catch (error) {
157
+ RaftLog.debug(`RaftSystemUtils getRaftSystemInfo Failed to get version ${error}`);
158
+ return new RaftSystemInfo();
159
+ }
160
+ }
161
+
162
+ /**
163
+ *
164
+ * setRaftName
165
+ * @param newName name to refer to Raft - used for BLE advertising
166
+ * @returns Promise<boolean> true if successful
167
+ *
168
+ */
169
+ async setRaftName(newName: string): Promise<boolean> {
170
+ try {
171
+ this._friendlyName = await this._msgHandler.sendRICRESTURL<
172
+ RaftFriendlyName
173
+ >(`friendlyname/${newName}`);
174
+ if (this._friendlyName) {
175
+ this._friendlyName.friendlyNameIsSet = false;
176
+ this._friendlyName.validMs = Date.now();
177
+ if (
178
+ this._friendlyName &&
179
+ this._friendlyName.rslt &&
180
+ this._friendlyName.rslt.toLowerCase() === "ok"
181
+ ) {
182
+ this._friendlyName.friendlyNameIsSet = true;
183
+ }
184
+ RaftLog.debug(
185
+ "RaftSystemUtils setRaftName returned " + JSON.stringify(this._friendlyName)
186
+ );
187
+ return true;
188
+ }
189
+ return true;
190
+ } catch (error) {
191
+ RaftLog.debug(`RaftSystemUtils setRaftName Failed to set name ${error}`);
192
+ this._friendlyName = null;
193
+ return false;
194
+ }
195
+ }
196
+
197
+ /**
198
+ *
199
+ * getRaftName
200
+ * @param forceGet - true to force a get from the raft app
201
+ * @returns Promise<RaftNameResponse> (object containing rslt)
202
+ *
203
+ */
204
+ async getRaftName(forceGet = false): Promise<RaftFriendlyName> {
205
+ // Check if we have a cached value
206
+ if (!forceGet && this._friendlyName && this._friendlyName.validMs) {
207
+ return this._friendlyName;
208
+ }
209
+ try {
210
+ this._friendlyName = await this._msgHandler.sendRICRESTURL<
211
+ RaftFriendlyName
212
+ >("friendlyname");
213
+ if (
214
+ this._friendlyName &&
215
+ this._friendlyName.rslt &&
216
+ this._friendlyName.rslt === "ok"
217
+ ) {
218
+ this._friendlyName.friendlyNameIsSet = this._friendlyName
219
+ .friendlyNameIsSet
220
+ ? true
221
+ : false;
222
+ } else {
223
+ this._friendlyName.friendlyNameIsSet = false;
224
+ }
225
+ this._friendlyName.validMs = Date.now();
226
+ RaftLog.debug(
227
+ "RaftSystemUtils Friendly name set is: " + JSON.stringify(this._friendlyName)
228
+ );
229
+ return this._friendlyName;
230
+ } catch (error) {
231
+ RaftLog.debug(`RaftSystemUtils getRaftName Failed to get name ${error}`);
232
+ return new RaftFriendlyName();
233
+ }
234
+ }
235
+
236
+ /**
237
+ *
238
+ * getFileList - get list of files on file system
239
+ * @returns Promise<RaftFileList>
240
+ *
241
+ */
242
+ async getFileList(): Promise<RaftFileList> {
243
+ try {
244
+ const ricFileList = await this._msgHandler.sendRICRESTURL<RaftFileList>(
245
+ "filelist"
246
+ );
247
+ RaftLog.debug("RaftSystemUtils getFileList returned " + ricFileList);
248
+ return ricFileList;
249
+ } catch (error) {
250
+ RaftLog.debug(`RaftSystemUtils getFileList Failed to get file list ${error}`);
251
+ return new RaftFileList();
252
+ }
253
+ }
254
+
255
+ /**
256
+ *
257
+ * Get BLEMan sysmod info
258
+ *
259
+ * @returns RaftSysModInfoBLEMan
260
+ *
261
+ */
262
+ async getSysModInfoBLEMan(): Promise<RaftSysModInfoBLEMan | null> {
263
+ try {
264
+ // Get SysMod Info
265
+ const bleInfo = await this._msgHandler.sendRICRESTURL<
266
+ RaftSysModInfoBLEMan
267
+ >("sysmodinfo/BLEMan");
268
+
269
+ // Debug
270
+ RaftLog.debug(
271
+ `getSysModInfoBLEMan rslt ${bleInfo.rslt} isConn ${bleInfo.isConn} paused ${bleInfo.isAdv} txBPS ${bleInfo.txBPS} rxBPS ${bleInfo.rxBPS}`
272
+ );
273
+
274
+ // Check for test rate
275
+ if ("tBPS" in bleInfo) {
276
+ RaftLog.debug(
277
+ `getSysModInfoBLEMan testMsgs ${bleInfo.tM} testBytes ${bleInfo.tB} testRateBytesPS ${bleInfo.tBPS}`
278
+ );
279
+ }
280
+
281
+ return bleInfo;
282
+ } catch (error) {
283
+ RaftLog.debug(`getSysModInfoBLEMan sysmodinfo/BLEMan failed ${error}`);
284
+ }
285
+ return null;
286
+ }
287
+
288
+ /**
289
+ * Get hostname of connected WiFi
290
+ *
291
+ * @return string - hostname of connected WiFi
292
+ *
293
+ */
294
+ _getHostnameFromFriendlyName(): string {
295
+ const friendlyName = this.getFriendlyName();
296
+ if (!friendlyName) {
297
+ return this._defaultWiFiHostname;
298
+ }
299
+ let hostname = friendlyName.friendlyName;
300
+ hostname = hostname?.replace(/ /g, "-");
301
+ hostname = hostname.replace(/\W+/g, "");
302
+ return hostname;
303
+ }
304
+
305
+ /**
306
+ * Get Wifi connection status
307
+ *
308
+ * @return boolean - true if connected
309
+ *
310
+ */
311
+ async getWiFiConnStatus(): Promise<boolean | null> {
312
+ try {
313
+ // Get status
314
+ const ricSysModInfoWiFi = await this._msgHandler.sendRICRESTURL<
315
+ RaftSysModInfoWiFi
316
+ >("sysmodinfo/NetMan");
317
+
318
+ RaftLog.debug(
319
+ `wifiConnStatus rslt ${ricSysModInfoWiFi.rslt} isConn ${ricSysModInfoWiFi.isConn} paused ${ricSysModInfoWiFi.isPaused}`
320
+ );
321
+
322
+ // Check status indicates WiFi connected
323
+ if (ricSysModInfoWiFi.rslt === "ok") {
324
+ this._wifiConnStatus.connState =
325
+ ricSysModInfoWiFi.isConn !== 0
326
+ ? RaftWifiConnState.WIFI_CONN_CONNECTED
327
+ : RaftWifiConnState.WIFI_CONN_NONE;
328
+ this._wifiConnStatus.isPaused = ricSysModInfoWiFi.isPaused !== 0;
329
+ this._wifiConnStatus.ipAddress = ricSysModInfoWiFi.IP;
330
+ this._wifiConnStatus.hostname = ricSysModInfoWiFi.Hostname;
331
+ this._wifiConnStatus.ssid = ricSysModInfoWiFi.SSID;
332
+ this._wifiConnStatus.bssid = ricSysModInfoWiFi.WiFiMAC;
333
+ this._wifiConnStatus.validMs = Date.now();
334
+ return (
335
+ ricSysModInfoWiFi.isConn !== 0 || ricSysModInfoWiFi.isPaused !== 0
336
+ );
337
+ }
338
+ } catch (error) {
339
+ RaftLog.debug(`[DEBUG]: wifiConnStatus sysmodinfo failed ${error}`);
340
+ this._wifiConnStatus.validMs = 0;
341
+ }
342
+ this._wifiConnStatus.connState = RaftWifiConnState.WIFI_CONN_NONE;
343
+ this._wifiConnStatus.isPaused = false;
344
+ return null;
345
+ }
346
+
347
+ // Mark: WiFi Connection ------------------------------------------------------------------------------------
348
+
349
+ /**
350
+ * pause Wifi connection
351
+ *
352
+ * @param boolean - true to pause, false to resume
353
+ * @return boolean - true if successful
354
+ *
355
+ */
356
+ async pauseWifiConnection(pause: boolean): Promise<boolean> {
357
+ try {
358
+ if (pause) {
359
+ await this._msgHandler.sendRICRESTURL<RaftOKFail>("wifipause/pause");
360
+ } else {
361
+ await this._msgHandler.sendRICRESTURL<RaftOKFail>("wifipause/resume");
362
+ }
363
+ } catch (error) {
364
+ RaftLog.debug(`RaftSystemUtils wifiConnect wifi pause ${error}`);
365
+ return true;
366
+ }
367
+ return false;
368
+ }
369
+
370
+ /**
371
+ * Connect to WiFi
372
+ *
373
+ * @param string - WiFi SSID
374
+ * @param string - WiFi password
375
+ * @return boolean - true if successful
376
+ *
377
+ */
378
+ async wifiConnect(ssid: string, password: string): Promise<boolean> {
379
+ RaftLog.debug(`RaftSystemUtils Connect to WiFi ${ssid} password ${password}`);
380
+
381
+ // Issue the command to connect WiFi
382
+ try {
383
+ const RaftRESTURL_wifiCredentials =
384
+ "w/" +
385
+ ssid +
386
+ "/" +
387
+ password +
388
+ "/" +
389
+ this._getHostnameFromFriendlyName();
390
+ RaftLog.debug(
391
+ `wifiConnect attempting to connect to wifi ${RaftRESTURL_wifiCredentials}`
392
+ );
393
+
394
+ await this._msgHandler.sendRICRESTURL<RaftOKFail>(
395
+ RaftRESTURL_wifiCredentials
396
+ );
397
+ } catch (error) {
398
+ RaftLog.debug(`RaftSystemUtils wifiConnect failed ${error}`);
399
+ return false;
400
+ }
401
+
402
+ // Wait until connected, timed-out or failed
403
+ for (
404
+ let timeoutCount = 0;
405
+ timeoutCount < this._maxSecsToWaitForWiFiConn;
406
+ timeoutCount++
407
+ ) {
408
+ // Wait a little before checking
409
+ await new Promise((resolve) => setTimeout(resolve, 1000));
410
+
411
+ // Get status info
412
+ const connStat = await this.getWiFiConnStatus();
413
+ RaftLog.debug(`RaftSystemUtils wifiConnect connStat ${connStat}`);
414
+ if (connStat) {
415
+ return true;
416
+ }
417
+ }
418
+ return false;
419
+ }
420
+
421
+ /**
422
+ * Disconnect WiFi
423
+ *
424
+ * @return boolean - true if successful
425
+ *
426
+ */
427
+ async wifiDisconnect(): Promise<boolean> {
428
+ try {
429
+ RaftLog.debug(`RaftSystemUtils wifiDisconnect clearing wifi info`);
430
+
431
+ await this._msgHandler.sendRICRESTURL<RaftOKFail>("wc");
432
+ this.getWiFiConnStatus();
433
+ return true;
434
+ } catch (error) {
435
+ RaftLog.debug(`RaftSystemUtils wifiDisconnect clearing unsuccessful ${error}`);
436
+ }
437
+ return false;
438
+ }
439
+
440
+ // Mark: WiFi Scan ------------------------------------------------------------------------------------
441
+
442
+ /**
443
+ * WiFiScan start
444
+ *
445
+ * @return boolean - true if successful
446
+ *
447
+ */
448
+ async wifiScanStart(): Promise<boolean> {
449
+ try {
450
+ RaftLog.debug(`RaftSystemUtils wifiScanStart`);
451
+ await this._msgHandler.sendRICRESTURL<RaftOKFail>("wifiscan/start");
452
+ return true;
453
+ } catch (error) {
454
+ RaftLog.debug(`RaftSystemUtils wifiScanStart unsuccessful ${error}`);
455
+ }
456
+ return false;
457
+ }
458
+ /**
459
+ * WiFiScan get results
460
+ *
461
+ * @return boolean - false if unsuccessful, otherwise the results of the promise
462
+ *
463
+ */
464
+ async wifiScanResults(): Promise<boolean | RaftOKFail | RaftWifiScanResults> {
465
+ try {
466
+ RaftLog.debug(`RaftSystemUtils wifiScanResults`);
467
+ return this._msgHandler.sendRICRESTURL<RaftOKFail | RaftWifiScanResults>(
468
+ "wifiscan/results"
469
+ );
470
+ } catch (error) {
471
+ RaftLog.debug(`RaftSystemUtils wifiScanResults unsuccessful ${error}`);
472
+ }
473
+ return false;
474
+ }
475
+
476
+ getCachedSystemInfo(): RaftSystemInfo | null {
477
+ return this._systemInfo;
478
+ }
479
+
480
+ getCachedRaftName(): RaftFriendlyName | null {
481
+ return this._friendlyName;
482
+ }
483
+
484
+ getCachedWifiStatus(): RaftWifiConnStatus {
485
+ return this._wifiConnStatus;
486
+ }
487
+ }