@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.
- package/.editorconfig +14 -0
- package/.gitattributes +11 -0
- package/.nvmrc +1 -0
- package/LICENSE +22 -0
- package/README.md +11 -0
- package/TODO.md +1 -0
- package/dist/RaftAttributeHandler.d.ts +12 -0
- package/dist/RaftAttributeHandler.js +241 -0
- package/dist/RaftAttributeHandler.js.map +1 -0
- package/dist/RaftChannel.d.ts +18 -0
- package/dist/RaftChannel.js +12 -0
- package/dist/RaftChannel.js.map +1 -0
- package/dist/RaftChannelWebBLE.d.ts +38 -0
- package/dist/RaftChannelWebBLE.js +274 -0
- package/dist/RaftChannelWebBLE.js.map +1 -0
- package/dist/RaftChannelWebSerial.d.ts +37 -0
- package/dist/RaftChannelWebSerial.js +319 -0
- package/dist/RaftChannelWebSerial.js.map +1 -0
- package/dist/RaftChannelWebSocket.d.ts +28 -0
- package/dist/RaftChannelWebSocket.js +197 -0
- package/dist/RaftChannelWebSocket.js.map +1 -0
- package/dist/RaftCommsStats.d.ts +39 -0
- package/dist/RaftCommsStats.js +128 -0
- package/dist/RaftCommsStats.js.map +1 -0
- package/dist/RaftConnEvents.d.ts +31 -0
- package/dist/RaftConnEvents.js +44 -0
- package/dist/RaftConnEvents.js.map +1 -0
- package/dist/RaftConnector.d.ts +242 -0
- package/dist/RaftConnector.js +613 -0
- package/dist/RaftConnector.js.map +1 -0
- package/dist/RaftCustomAttrHandler.d.ts +4 -0
- package/dist/RaftCustomAttrHandler.js +50 -0
- package/dist/RaftCustomAttrHandler.js.map +1 -0
- package/dist/RaftDeviceInfo.d.ts +64 -0
- package/dist/RaftDeviceInfo.js +36 -0
- package/dist/RaftDeviceInfo.js.map +1 -0
- package/dist/RaftDeviceManager.d.ts +37 -0
- package/dist/RaftDeviceManager.js +450 -0
- package/dist/RaftDeviceManager.js.map +1 -0
- package/dist/RaftDeviceMsg.d.ts +9 -0
- package/dist/RaftDeviceMsg.js +11 -0
- package/dist/RaftDeviceMsg.js.map +1 -0
- package/dist/RaftDeviceStates.d.ts +33 -0
- package/dist/RaftDeviceStates.js +60 -0
- package/dist/RaftDeviceStates.js.map +1 -0
- package/dist/RaftFileHandler.d.ts +52 -0
- package/dist/RaftFileHandler.js +502 -0
- package/dist/RaftFileHandler.js.map +1 -0
- package/dist/RaftLog.d.ts +22 -0
- package/dist/RaftLog.js +63 -0
- package/dist/RaftLog.js.map +1 -0
- package/dist/RaftMiniHDLC.d.ts +18 -0
- package/dist/RaftMiniHDLC.js +383 -0
- package/dist/RaftMiniHDLC.js.map +1 -0
- package/dist/RaftMsgHandler.d.ts +57 -0
- package/dist/RaftMsgHandler.js +480 -0
- package/dist/RaftMsgHandler.js.map +1 -0
- package/dist/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/RaftMsgTrackInfo.js +42 -0
- package/dist/RaftMsgTrackInfo.js.map +1 -0
- package/dist/RaftProtocolDefs.d.ts +30 -0
- package/dist/RaftProtocolDefs.js +48 -0
- package/dist/RaftProtocolDefs.js.map +1 -0
- package/dist/RaftStreamHandler.d.ts +38 -0
- package/dist/RaftStreamHandler.js +257 -0
- package/dist/RaftStreamHandler.js.map +1 -0
- package/dist/RaftSystemType.d.ts +21 -0
- package/dist/RaftSystemType.js +3 -0
- package/dist/RaftSystemType.js.map +1 -0
- package/dist/RaftSystemUtils.d.ts +136 -0
- package/dist/RaftSystemUtils.js +410 -0
- package/dist/RaftSystemUtils.js.map +1 -0
- package/dist/RaftTypes.d.ts +184 -0
- package/dist/RaftTypes.js +157 -0
- package/dist/RaftTypes.js.map +1 -0
- package/dist/RaftUpdateEvents.d.ts +33 -0
- package/dist/RaftUpdateEvents.js +46 -0
- package/dist/RaftUpdateEvents.js.map +1 -0
- package/dist/RaftUpdateManager.d.ts +61 -0
- package/dist/RaftUpdateManager.js +618 -0
- package/dist/RaftUpdateManager.js.map +1 -0
- package/dist/RaftUtils.d.ts +125 -0
- package/dist/RaftUtils.js +454 -0
- package/dist/RaftUtils.js.map +1 -0
- package/dist/RaftWifiTypes.d.ts +23 -0
- package/dist/RaftWifiTypes.js +43 -0
- package/dist/RaftWifiTypes.js.map +1 -0
- package/dist/TestDataGen.d.ts +7 -0
- package/dist/TestDataGen.js +133 -0
- package/dist/TestDataGen.js.map +1 -0
- package/dist/main.d.ts +18 -0
- package/dist/main.js +42 -0
- package/dist/main.js.map +1 -0
- package/eslint.config.mjs +33 -0
- package/examples/dashboard/package.json +39 -0
- package/examples/dashboard/src/ConnManager.ts +86 -0
- package/examples/dashboard/src/Main.tsx +100 -0
- package/examples/dashboard/src/StatusScreen.tsx +72 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +144 -0
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +77 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
- package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
- package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
- package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
- package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
- package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +32 -0
- package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
- package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +113 -0
- package/examples/dashboard/src/index.html +15 -0
- package/examples/dashboard/src/index.tsx +15 -0
- package/examples/dashboard/src/styles.css +122 -0
- package/examples/dashboard/tsconfig.json +18 -0
- package/jest.config.js +11 -0
- package/package.json +50 -0
- package/src/RaftAttributeHandler.ts +289 -0
- package/src/RaftChannel.ts +30 -0
- package/src/RaftChannelWebBLE.ts +342 -0
- package/src/RaftChannelWebSerial.ts +408 -0
- package/src/RaftChannelWebSocket.ts +245 -0
- package/src/RaftCommsStats.ts +142 -0
- package/src/RaftConnEvents.ts +46 -0
- package/src/RaftConnector.ts +745 -0
- package/src/RaftCustomAttrHandler.ts +54 -0
- package/src/RaftDeviceInfo.ts +104 -0
- package/src/RaftDeviceManager.ts +542 -0
- package/src/RaftDeviceMsg.ts +20 -0
- package/src/RaftDeviceStates.ts +89 -0
- package/src/RaftFileHandler.ts +668 -0
- package/src/RaftLog.ts +70 -0
- package/src/RaftMiniHDLC.ts +396 -0
- package/src/RaftMsgHandler.ts +778 -0
- package/src/RaftMsgTrackInfo.ts +51 -0
- package/src/RaftProtocolDefs.ts +46 -0
- package/src/RaftStreamHandler.ts +328 -0
- package/src/RaftSystemType.ts +25 -0
- package/src/RaftSystemUtils.ts +487 -0
- package/src/RaftTypes.ts +250 -0
- package/src/RaftUpdateEvents.ts +48 -0
- package/src/RaftUpdateManager.ts +778 -0
- package/src/RaftUtils.ts +484 -0
- package/src/RaftWifiTypes.ts +36 -0
- package/src/TestDataGen.ts +157 -0
- package/src/main.ts +28 -0
- package/testdata/TestDeviceTypeRecs.json +492 -0
- 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
|
+
}
|