@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,125 @@
|
|
|
1
|
+
export default class RaftUtils {
|
|
2
|
+
static _isEndianSet: boolean;
|
|
3
|
+
static _isLittleEndian: boolean;
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* Add a string to a Uint8Array buffer
|
|
7
|
+
*
|
|
8
|
+
* @param buffer - buffer to add to
|
|
9
|
+
* @param strToAdd - string to be added
|
|
10
|
+
* @param startPos - start position in buffer (i.e. offset to place string at)
|
|
11
|
+
*/
|
|
12
|
+
static addStringToBuffer(buffer: Uint8Array, strToAdd: string, startPos: number): void;
|
|
13
|
+
/**
|
|
14
|
+
*
|
|
15
|
+
* Get a string from a Uint8Array buffer
|
|
16
|
+
*
|
|
17
|
+
* @param buffer - buffer to get from
|
|
18
|
+
* @param startPos - start position in buffer (i.e. offset to start of string at)
|
|
19
|
+
* @param strLen - length of string to get
|
|
20
|
+
* @returns strGot - string got from buffer
|
|
21
|
+
*/
|
|
22
|
+
static getStringFromBuffer(buffer: Uint8Array, startPos: number, strLen: number): string;
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* Debug code to format a Uint8Array to string for logging
|
|
26
|
+
*
|
|
27
|
+
* @param buffer - Uint8Array to be converted to hex string
|
|
28
|
+
*/
|
|
29
|
+
static bufferToHex(buffer: Uint8Array | null): string;
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* Extract a big-endian float from a uint8array
|
|
33
|
+
*
|
|
34
|
+
* @param buf - Uint8Array containing float
|
|
35
|
+
* @returns float
|
|
36
|
+
*/
|
|
37
|
+
static getBEFloatFromBuf(buf: Uint8Array): number;
|
|
38
|
+
/**
|
|
39
|
+
* Extract a big-endian uint64 from a uint8array
|
|
40
|
+
*
|
|
41
|
+
* @param buf - Uint8Array containing uint64
|
|
42
|
+
* @param pos - position (offset in buf) to get from
|
|
43
|
+
* @returns uint64
|
|
44
|
+
*/
|
|
45
|
+
static getBEUint64FromBuf(buf: Uint8Array, bufPos: number): number;
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* Extract a big-endian uint32 from a uint8array
|
|
49
|
+
*
|
|
50
|
+
* @param buf - Uint8Array containing uint32
|
|
51
|
+
* @param pos - position (offset in buf) to get from
|
|
52
|
+
* @returns uint32
|
|
53
|
+
*/
|
|
54
|
+
static getBEUint32FromBuf(buf: Uint8Array, bufPos: number): number;
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* Extract a big-endian int16 from a uint8array
|
|
58
|
+
*
|
|
59
|
+
* @param buf - Uint8Array containing int16
|
|
60
|
+
* @param pos - position (offset in buf) to get from
|
|
61
|
+
* @returns int16
|
|
62
|
+
*/
|
|
63
|
+
static getBEInt16FromBuf(buf: Uint8Array, bufPos: number): number;
|
|
64
|
+
/**
|
|
65
|
+
*
|
|
66
|
+
* Extract a big-endian uint16 from a uint8array
|
|
67
|
+
*
|
|
68
|
+
* @param buf - Uint8Array containing uint16
|
|
69
|
+
* @param pos - position (offset in buf) to get from
|
|
70
|
+
* @returns int16
|
|
71
|
+
*/
|
|
72
|
+
static getBEUint16FromBuf(buf: Uint8Array, bufPos: number): number;
|
|
73
|
+
/**
|
|
74
|
+
*
|
|
75
|
+
* Extract a big-endian uint8 from a uint8array
|
|
76
|
+
*
|
|
77
|
+
* @param buf - Uint8Array containing uint8
|
|
78
|
+
* @param pos - position (offset in buf) to get from
|
|
79
|
+
* @returns int16
|
|
80
|
+
*/
|
|
81
|
+
static getBEUint8FromBuf(buf: Uint8Array, pos: number): number;
|
|
82
|
+
/**
|
|
83
|
+
*
|
|
84
|
+
* Extract a big-endian int8 from a uint8array
|
|
85
|
+
*
|
|
86
|
+
* @param buf - Uint8Array containing int8
|
|
87
|
+
* @param pos - position (offset in buf) to get from
|
|
88
|
+
* @returns int16
|
|
89
|
+
*/
|
|
90
|
+
static getBEInt8FromBuf(buf: Uint8Array, pos: number): number;
|
|
91
|
+
static isLittleEndian(): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Implementation of atob() according to the HTML and Infra specs, except that
|
|
94
|
+
* instead of throwing INVALID_CHARACTER_ERR we return null.
|
|
95
|
+
*
|
|
96
|
+
* @param data - string containing base64 representation
|
|
97
|
+
* @returns Uint8Array
|
|
98
|
+
*
|
|
99
|
+
*/
|
|
100
|
+
static atob(data: string): Uint8Array | null;
|
|
101
|
+
/**
|
|
102
|
+
* A lookup table for atob(), which converts an ASCII character to the
|
|
103
|
+
* corresponding six-bit number.
|
|
104
|
+
*/
|
|
105
|
+
static atobLookup(chr: string): number | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* btoa() as defined by the HTML and Infra specs, which mostly just references
|
|
108
|
+
* RFC 4648.
|
|
109
|
+
*
|
|
110
|
+
* @param data - Uint8Array
|
|
111
|
+
* @returns string containing base64 representation
|
|
112
|
+
*
|
|
113
|
+
*/
|
|
114
|
+
static btoa(inBuf: Uint8Array): string;
|
|
115
|
+
/**
|
|
116
|
+
* Lookup table for btoa(), which converts a six-bit number into the
|
|
117
|
+
* corresponding ASCII character.
|
|
118
|
+
*/
|
|
119
|
+
static btoaLookup(idx: number | undefined): string | undefined;
|
|
120
|
+
static buf2hex(buffer: Uint8Array): string;
|
|
121
|
+
static padStartFn(inStr: string, targetLength: number, padString: string): string;
|
|
122
|
+
static isVersionGreater(v1: string, v2: string): boolean;
|
|
123
|
+
static isVersionEqual(v1: string, v2: string): boolean;
|
|
124
|
+
static withTimeout(ms: number, promise: Promise<any>): Promise<any>;
|
|
125
|
+
}
|
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftUtils
|
|
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 RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
|
|
14
|
+
const gt_1 = tslib_1.__importDefault(require("semver/functions/gt"));
|
|
15
|
+
const eq_1 = tslib_1.__importDefault(require("semver/functions/eq"));
|
|
16
|
+
class RaftUtils {
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* Add a string to a Uint8Array buffer
|
|
20
|
+
*
|
|
21
|
+
* @param buffer - buffer to add to
|
|
22
|
+
* @param strToAdd - string to be added
|
|
23
|
+
* @param startPos - start position in buffer (i.e. offset to place string at)
|
|
24
|
+
*/
|
|
25
|
+
static addStringToBuffer(buffer, strToAdd, startPos) {
|
|
26
|
+
// Check valid
|
|
27
|
+
if (buffer.length < startPos + strToAdd.length + 1) {
|
|
28
|
+
RaftLog_1.default.error("addStringToBuffer buffer too short");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let curPos = startPos;
|
|
32
|
+
for (let i = 0; i < strToAdd.length; i++) {
|
|
33
|
+
let charAt = strToAdd.charCodeAt(i);
|
|
34
|
+
if (charAt > 255)
|
|
35
|
+
charAt = 255;
|
|
36
|
+
buffer.set([charAt], curPos++);
|
|
37
|
+
}
|
|
38
|
+
buffer.set([0], buffer.length - 1);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* Get a string from a Uint8Array buffer
|
|
43
|
+
*
|
|
44
|
+
* @param buffer - buffer to get from
|
|
45
|
+
* @param startPos - start position in buffer (i.e. offset to start of string at)
|
|
46
|
+
* @param strLen - length of string to get
|
|
47
|
+
* @returns strGot - string got from buffer
|
|
48
|
+
*/
|
|
49
|
+
static getStringFromBuffer(buffer, startPos, strLen) {
|
|
50
|
+
// Check valid
|
|
51
|
+
if (buffer.length < startPos + strLen) {
|
|
52
|
+
strLen = buffer.length - startPos;
|
|
53
|
+
if (strLen <= 0)
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
let curPos = startPos;
|
|
57
|
+
let outStr = "";
|
|
58
|
+
for (let i = 0; i < strLen; i++) {
|
|
59
|
+
outStr += String.fromCharCode(buffer[curPos++]);
|
|
60
|
+
}
|
|
61
|
+
return outStr;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
*
|
|
65
|
+
* Debug code to format a Uint8Array to string for logging
|
|
66
|
+
*
|
|
67
|
+
* @param buffer - Uint8Array to be converted to hex string
|
|
68
|
+
*/
|
|
69
|
+
static bufferToHex(buffer) {
|
|
70
|
+
if (buffer == null)
|
|
71
|
+
return "null";
|
|
72
|
+
return Array.from(new Uint8Array(buffer))
|
|
73
|
+
.map((b) => RaftUtils.padStartFn(b.toString(16), 2, "0"))
|
|
74
|
+
.join("");
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* Extract a big-endian float from a uint8array
|
|
79
|
+
*
|
|
80
|
+
* @param buf - Uint8Array containing float
|
|
81
|
+
* @returns float
|
|
82
|
+
*/
|
|
83
|
+
static getBEFloatFromBuf(buf) {
|
|
84
|
+
const revBuf = new Uint8Array(4);
|
|
85
|
+
if (RaftUtils.isLittleEndian()) {
|
|
86
|
+
for (let i = 0; i < 4; i++)
|
|
87
|
+
revBuf[3 - i] = buf[i];
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
for (let i = 0; i < 4; i++)
|
|
91
|
+
revBuf[i] = buf[i];
|
|
92
|
+
}
|
|
93
|
+
const floatVal = new Float32Array(revBuf.buffer);
|
|
94
|
+
// RaftUtils.debug('revFloat ' + RaftUtils.bufferToHex(revBuf) + floatVal[0]);
|
|
95
|
+
return floatVal[0];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Extract a big-endian uint64 from a uint8array
|
|
99
|
+
*
|
|
100
|
+
* @param buf - Uint8Array containing uint64
|
|
101
|
+
* @param pos - position (offset in buf) to get from
|
|
102
|
+
* @returns uint64
|
|
103
|
+
*/
|
|
104
|
+
static getBEUint64FromBuf(buf, bufPos) {
|
|
105
|
+
if (RaftUtils.isLittleEndian())
|
|
106
|
+
return ((buf[bufPos] << 56) +
|
|
107
|
+
(buf[bufPos + 1] << 48) +
|
|
108
|
+
(buf[bufPos + 2] << 40) +
|
|
109
|
+
(buf[bufPos + 3] << 32) +
|
|
110
|
+
(buf[bufPos + 4] << 24) +
|
|
111
|
+
(buf[bufPos + 5] << 16) +
|
|
112
|
+
(buf[bufPos + 6] << 8) +
|
|
113
|
+
buf[bufPos + 7]);
|
|
114
|
+
return ((buf[bufPos + 7] << 56) +
|
|
115
|
+
(buf[bufPos + 6] << 48) +
|
|
116
|
+
(buf[bufPos + 5] << 40) +
|
|
117
|
+
(buf[bufPos + 4] << 32) +
|
|
118
|
+
(buf[bufPos + 3] << 24) +
|
|
119
|
+
(buf[bufPos + 2] << 16) +
|
|
120
|
+
(buf[bufPos + 1] << 8) +
|
|
121
|
+
buf[bufPos]);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
*
|
|
125
|
+
* Extract a big-endian uint32 from a uint8array
|
|
126
|
+
*
|
|
127
|
+
* @param buf - Uint8Array containing uint32
|
|
128
|
+
* @param pos - position (offset in buf) to get from
|
|
129
|
+
* @returns uint32
|
|
130
|
+
*/
|
|
131
|
+
static getBEUint32FromBuf(buf, bufPos) {
|
|
132
|
+
if (RaftUtils.isLittleEndian())
|
|
133
|
+
return ((buf[bufPos] << 24) +
|
|
134
|
+
(buf[bufPos + 1] << 16) +
|
|
135
|
+
(buf[bufPos + 2] << 8) +
|
|
136
|
+
buf[bufPos + 3]);
|
|
137
|
+
return ((buf[bufPos + 3] << 24) +
|
|
138
|
+
(buf[bufPos + 2] << 16) +
|
|
139
|
+
(buf[bufPos + 1] << 8) +
|
|
140
|
+
buf[bufPos]);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
*
|
|
144
|
+
* Extract a big-endian int16 from a uint8array
|
|
145
|
+
*
|
|
146
|
+
* @param buf - Uint8Array containing int16
|
|
147
|
+
* @param pos - position (offset in buf) to get from
|
|
148
|
+
* @returns int16
|
|
149
|
+
*/
|
|
150
|
+
static getBEInt16FromBuf(buf, bufPos) {
|
|
151
|
+
if (RaftUtils.isLittleEndian()) {
|
|
152
|
+
const val = buf[bufPos] * 256 + buf[bufPos + 1];
|
|
153
|
+
return val > 32767 ? val - 65536 : val;
|
|
154
|
+
}
|
|
155
|
+
const val = buf[bufPos + 1] * 256 + buf[bufPos];
|
|
156
|
+
return val > 32767 ? val - 65536 : val;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
*
|
|
160
|
+
* Extract a big-endian uint16 from a uint8array
|
|
161
|
+
*
|
|
162
|
+
* @param buf - Uint8Array containing uint16
|
|
163
|
+
* @param pos - position (offset in buf) to get from
|
|
164
|
+
* @returns int16
|
|
165
|
+
*/
|
|
166
|
+
static getBEUint16FromBuf(buf, bufPos) {
|
|
167
|
+
if (RaftUtils.isLittleEndian())
|
|
168
|
+
return buf[bufPos] * 256 + buf[bufPos + 1];
|
|
169
|
+
return buf[bufPos + 1] * 256 + buf[bufPos];
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
*
|
|
173
|
+
* Extract a big-endian uint8 from a uint8array
|
|
174
|
+
*
|
|
175
|
+
* @param buf - Uint8Array containing uint8
|
|
176
|
+
* @param pos - position (offset in buf) to get from
|
|
177
|
+
* @returns int16
|
|
178
|
+
*/
|
|
179
|
+
static getBEUint8FromBuf(buf, pos) {
|
|
180
|
+
return buf[pos];
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
*
|
|
184
|
+
* Extract a big-endian int8 from a uint8array
|
|
185
|
+
*
|
|
186
|
+
* @param buf - Uint8Array containing int8
|
|
187
|
+
* @param pos - position (offset in buf) to get from
|
|
188
|
+
* @returns int16
|
|
189
|
+
*/
|
|
190
|
+
static getBEInt8FromBuf(buf, pos) {
|
|
191
|
+
return buf[pos] > 127 ? buf[pos] - 256 : buf[pos];
|
|
192
|
+
}
|
|
193
|
+
static isLittleEndian() {
|
|
194
|
+
// If already known just return
|
|
195
|
+
if (this._isEndianSet)
|
|
196
|
+
return this._isLittleEndian;
|
|
197
|
+
// Figure out endian-ness
|
|
198
|
+
const a = new Uint32Array([0x12345678]);
|
|
199
|
+
const b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
|
|
200
|
+
this._isEndianSet = true;
|
|
201
|
+
this._isLittleEndian = b[0] != 0x12;
|
|
202
|
+
return this._isLittleEndian;
|
|
203
|
+
// RaftUtils.debug("bigendian " + BigEndian);
|
|
204
|
+
// let buf = new ArrayBuffer(2);
|
|
205
|
+
// let shView = new Uint16Array(buf);
|
|
206
|
+
// buf[0] = 1;
|
|
207
|
+
// buf[1] = 0;
|
|
208
|
+
// RaftUtils.debug("Resulting short " + shView[0]);
|
|
209
|
+
// return shView[0] == 1;
|
|
210
|
+
}
|
|
211
|
+
// The following code from https://github.com/jsdom/abab
|
|
212
|
+
/**
|
|
213
|
+
* Implementation of atob() according to the HTML and Infra specs, except that
|
|
214
|
+
* instead of throwing INVALID_CHARACTER_ERR we return null.
|
|
215
|
+
*
|
|
216
|
+
* @param data - string containing base64 representation
|
|
217
|
+
* @returns Uint8Array
|
|
218
|
+
*
|
|
219
|
+
*/
|
|
220
|
+
static atob(data) {
|
|
221
|
+
// Web IDL requires DOMStrings to just be converted using ECMAScript
|
|
222
|
+
// ToString, which in our case amounts to using a template literal.
|
|
223
|
+
data = `${data}`;
|
|
224
|
+
// "Remove all ASCII whitespace from data."
|
|
225
|
+
data = data.replace(/[ \t\n\f\r]/g, "");
|
|
226
|
+
// "If data's length divides by 4 leaving no remainder, then: if data ends
|
|
227
|
+
// with one or two U+003D (=) code points, then remove them from data."
|
|
228
|
+
if (data.length % 4 === 0) {
|
|
229
|
+
data = data.replace(/==?$/, "");
|
|
230
|
+
}
|
|
231
|
+
// "If data's length divides by 4 leaving a remainder of 1, then return
|
|
232
|
+
// failure."
|
|
233
|
+
//
|
|
234
|
+
// "If data contains a code point that is not one of
|
|
235
|
+
//
|
|
236
|
+
// U+002B (+)
|
|
237
|
+
// U+002F (/)
|
|
238
|
+
// ASCII alphanumeric
|
|
239
|
+
//
|
|
240
|
+
// then return failure."
|
|
241
|
+
if (data.length % 4 === 1 || /[^+/0-9A-Za-z]/.test(data)) {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
// "Let output be an empty byte sequence."
|
|
245
|
+
const output = new Uint8Array((data.length * 3) / 4 + 1);
|
|
246
|
+
// "Let buffer be an empty buffer that can have bits appended to it."
|
|
247
|
+
//
|
|
248
|
+
// We append bits via left-shift and or. accumulatedBits is used to track
|
|
249
|
+
// when we've gotten to 24 bits.
|
|
250
|
+
let buffer = 0;
|
|
251
|
+
let accumulatedBits = 0;
|
|
252
|
+
// "Let position be a position variable for data, initially pointing at the
|
|
253
|
+
// start of data."
|
|
254
|
+
//
|
|
255
|
+
// "While position does not point past the end of data:"
|
|
256
|
+
let bytePos = 0;
|
|
257
|
+
for (let i = 0; i < data.length; i++) {
|
|
258
|
+
// "Find the code point pointed to by position in the second column of
|
|
259
|
+
// Table 1: The Base 64 Alphabet of RFC 4648. Let n be the number given in
|
|
260
|
+
// the first cell of the same row.
|
|
261
|
+
//
|
|
262
|
+
// "Append to buffer the six bits corresponding to n, most significant bit
|
|
263
|
+
// first."
|
|
264
|
+
//
|
|
265
|
+
// atobLookup() implements the table from RFC 4648.
|
|
266
|
+
buffer <<= 6;
|
|
267
|
+
const atobVal = RaftUtils.atobLookup(data[i]);
|
|
268
|
+
if (atobVal !== undefined) {
|
|
269
|
+
buffer |= atobVal;
|
|
270
|
+
}
|
|
271
|
+
accumulatedBits += 6;
|
|
272
|
+
// "If buffer has accumulated 24 bits, interpret them as three 8-bit
|
|
273
|
+
// big-endian numbers. Append three bytes with values equal to those
|
|
274
|
+
// numbers to output, in the same order, and then empty buffer."
|
|
275
|
+
if (accumulatedBits === 24) {
|
|
276
|
+
output[bytePos++] = (buffer & 0xff0000) >> 16;
|
|
277
|
+
output[bytePos++] = (buffer & 0xff00) >> 8;
|
|
278
|
+
output[bytePos++] = buffer & 0xff;
|
|
279
|
+
buffer = accumulatedBits = 0;
|
|
280
|
+
}
|
|
281
|
+
// "Advance position by 1."
|
|
282
|
+
}
|
|
283
|
+
// "If buffer is not empty, it contains either 12 or 18 bits. If it contains
|
|
284
|
+
// 12 bits, then discard the last four and interpret the remaining eight as
|
|
285
|
+
// an 8-bit big-endian number. If it contains 18 bits, then discard the last
|
|
286
|
+
// two and interpret the remaining 16 as two 8-bit big-endian numbers. Append
|
|
287
|
+
// the one or two bytes with values equal to those one or two numbers to
|
|
288
|
+
// output, in the same order."
|
|
289
|
+
if (accumulatedBits === 12) {
|
|
290
|
+
buffer >>= 4;
|
|
291
|
+
output[bytePos++] = buffer & 0xff;
|
|
292
|
+
}
|
|
293
|
+
else if (accumulatedBits === 18) {
|
|
294
|
+
buffer >>= 2;
|
|
295
|
+
output[bytePos++] = (buffer & 0xff00) >> 8;
|
|
296
|
+
output[bytePos++] = buffer & 0xff;
|
|
297
|
+
}
|
|
298
|
+
// "Return output."
|
|
299
|
+
return output.slice(0, bytePos);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* A lookup table for atob(), which converts an ASCII character to the
|
|
303
|
+
* corresponding six-bit number.
|
|
304
|
+
*/
|
|
305
|
+
static atobLookup(chr) {
|
|
306
|
+
if (/[A-Z]/.test(chr)) {
|
|
307
|
+
return chr.charCodeAt(0) - "A".charCodeAt(0);
|
|
308
|
+
}
|
|
309
|
+
if (/[a-z]/.test(chr)) {
|
|
310
|
+
return chr.charCodeAt(0) - "a".charCodeAt(0) + 26;
|
|
311
|
+
}
|
|
312
|
+
if (/[0-9]/.test(chr)) {
|
|
313
|
+
return chr.charCodeAt(0) - "0".charCodeAt(0) + 52;
|
|
314
|
+
}
|
|
315
|
+
if (chr === "+") {
|
|
316
|
+
return 62;
|
|
317
|
+
}
|
|
318
|
+
if (chr === "/") {
|
|
319
|
+
return 63;
|
|
320
|
+
}
|
|
321
|
+
// Throw exception; should not be hit in tests
|
|
322
|
+
return undefined;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* btoa() as defined by the HTML and Infra specs, which mostly just references
|
|
326
|
+
* RFC 4648.
|
|
327
|
+
*
|
|
328
|
+
* @param data - Uint8Array
|
|
329
|
+
* @returns string containing base64 representation
|
|
330
|
+
*
|
|
331
|
+
*/
|
|
332
|
+
static btoa(inBuf) {
|
|
333
|
+
let i;
|
|
334
|
+
// String conversion as required by Web IDL.
|
|
335
|
+
// s = `${s}`;
|
|
336
|
+
// "The btoa() method must throw an "InvalidCharacterError" DOMException if
|
|
337
|
+
// data contains any character whose code point is greater than U+00FF."
|
|
338
|
+
// for (i = 0; i < s.length; i++) {
|
|
339
|
+
// if (s.charCodeAt(i) > 255) {
|
|
340
|
+
// return null;
|
|
341
|
+
// }
|
|
342
|
+
// }
|
|
343
|
+
let out = "";
|
|
344
|
+
for (i = 0; i < inBuf.length; i += 3) {
|
|
345
|
+
const groupsOfSix = [
|
|
346
|
+
undefined,
|
|
347
|
+
undefined,
|
|
348
|
+
undefined,
|
|
349
|
+
undefined,
|
|
350
|
+
];
|
|
351
|
+
groupsOfSix[0] = inBuf[i] >> 2;
|
|
352
|
+
groupsOfSix[1] = (inBuf[i] & 0x03) << 4;
|
|
353
|
+
if (inBuf.length > i + 1) {
|
|
354
|
+
groupsOfSix[1] |= inBuf[i + 1] >> 4;
|
|
355
|
+
groupsOfSix[2] = (inBuf[i + 1] & 0x0f) << 2;
|
|
356
|
+
if (inBuf.length > i + 2) {
|
|
357
|
+
groupsOfSix[2] |= inBuf[i + 2] >> 6;
|
|
358
|
+
groupsOfSix[3] = inBuf[i + 2] & 0x3f;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
for (let j = 0; j < groupsOfSix.length; j++) {
|
|
362
|
+
if (typeof groupsOfSix[j] === "undefined") {
|
|
363
|
+
out += "=";
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
out += this.btoaLookup(groupsOfSix[j]);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return out;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Lookup table for btoa(), which converts a six-bit number into the
|
|
374
|
+
* corresponding ASCII character.
|
|
375
|
+
*/
|
|
376
|
+
static btoaLookup(idx) {
|
|
377
|
+
if (idx === undefined) {
|
|
378
|
+
return undefined;
|
|
379
|
+
}
|
|
380
|
+
if (idx < 26) {
|
|
381
|
+
return String.fromCharCode(idx + "A".charCodeAt(0));
|
|
382
|
+
}
|
|
383
|
+
if (idx < 52) {
|
|
384
|
+
return String.fromCharCode(idx - 26 + "a".charCodeAt(0));
|
|
385
|
+
}
|
|
386
|
+
if (idx < 62) {
|
|
387
|
+
return String.fromCharCode(idx - 52 + "0".charCodeAt(0));
|
|
388
|
+
}
|
|
389
|
+
if (idx === 62) {
|
|
390
|
+
return "+";
|
|
391
|
+
}
|
|
392
|
+
if (idx === 63) {
|
|
393
|
+
return "/";
|
|
394
|
+
}
|
|
395
|
+
// Throw INVALID_CHARACTER_ERR exception here -- won't be hit in the tests.
|
|
396
|
+
return undefined;
|
|
397
|
+
}
|
|
398
|
+
static buf2hex(buffer) {
|
|
399
|
+
return Array.prototype.map
|
|
400
|
+
.call(buffer, (x) => ("00" + x.toString(16)).slice(-2))
|
|
401
|
+
.join("");
|
|
402
|
+
}
|
|
403
|
+
static padStartFn(inStr, targetLength, padString) {
|
|
404
|
+
targetLength = targetLength >> 0; //truncate if number or convert non-number to 0;
|
|
405
|
+
padString = String(typeof padString !== "undefined" ? padString : " ");
|
|
406
|
+
if (inStr.length > targetLength) {
|
|
407
|
+
return String(inStr);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
targetLength = targetLength - inStr.length;
|
|
411
|
+
if (targetLength > padString.length) {
|
|
412
|
+
padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
|
|
413
|
+
}
|
|
414
|
+
return padString.slice(0, targetLength) + String(inStr);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
static isVersionGreater(v1, v2) {
|
|
418
|
+
try {
|
|
419
|
+
return (0, gt_1.default)(v1, v2);
|
|
420
|
+
}
|
|
421
|
+
catch (e) {
|
|
422
|
+
// one of the two versions is invalid, return true
|
|
423
|
+
RaftLog_1.default.error(`isVersionGreater - invalid version ${v1} or ${v2} ${e}`);
|
|
424
|
+
return true;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
static isVersionEqual(v1, v2) {
|
|
428
|
+
try {
|
|
429
|
+
return (0, eq_1.default)(v1, v2);
|
|
430
|
+
}
|
|
431
|
+
catch (e) {
|
|
432
|
+
// one of the two versions is invalid, return false
|
|
433
|
+
RaftLog_1.default.error(`isVersionEqual - invalid version ${v1} or ${v2} ${e}`);
|
|
434
|
+
return false;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
static withTimeout(ms, promise) {
|
|
438
|
+
let id;
|
|
439
|
+
const timeout = new Promise((_, reject) => {
|
|
440
|
+
id = setTimeout(() => {
|
|
441
|
+
clearTimeout(id);
|
|
442
|
+
reject('Timed out in ' + ms + 'ms.');
|
|
443
|
+
}, ms);
|
|
444
|
+
});
|
|
445
|
+
return Promise.race([
|
|
446
|
+
promise,
|
|
447
|
+
timeout
|
|
448
|
+
]);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
RaftUtils._isEndianSet = false;
|
|
452
|
+
RaftUtils._isLittleEndian = false;
|
|
453
|
+
exports.default = RaftUtils;
|
|
454
|
+
//# sourceMappingURL=RaftUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftUtils.js","sourceRoot":"","sources":["../src/RaftUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare enum RaftWifiConnState {
|
|
2
|
+
WIFI_CONN_NONE = 0,
|
|
3
|
+
WIFI_CONN_CONNECTED = 1
|
|
4
|
+
}
|
|
5
|
+
export declare class RaftWifiConnStatus {
|
|
6
|
+
connState: RaftWifiConnState;
|
|
7
|
+
isPaused: boolean;
|
|
8
|
+
ipAddress: string;
|
|
9
|
+
hostname: string;
|
|
10
|
+
ssid: string;
|
|
11
|
+
bssid: string;
|
|
12
|
+
validMs: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class RaftSysModInfoWiFi {
|
|
15
|
+
rslt: string;
|
|
16
|
+
isConn: number;
|
|
17
|
+
isPaused: number;
|
|
18
|
+
connState: string;
|
|
19
|
+
SSID: string;
|
|
20
|
+
IP: string;
|
|
21
|
+
Hostname: string;
|
|
22
|
+
WiFiMAC: string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftWifiTypes
|
|
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
|
+
exports.RaftSysModInfoWiFi = exports.RaftWifiConnStatus = exports.RaftWifiConnState = void 0;
|
|
13
|
+
var RaftWifiConnState;
|
|
14
|
+
(function (RaftWifiConnState) {
|
|
15
|
+
RaftWifiConnState[RaftWifiConnState["WIFI_CONN_NONE"] = 0] = "WIFI_CONN_NONE";
|
|
16
|
+
RaftWifiConnState[RaftWifiConnState["WIFI_CONN_CONNECTED"] = 1] = "WIFI_CONN_CONNECTED";
|
|
17
|
+
})(RaftWifiConnState || (exports.RaftWifiConnState = RaftWifiConnState = {}));
|
|
18
|
+
class RaftWifiConnStatus {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.connState = RaftWifiConnState.WIFI_CONN_NONE;
|
|
21
|
+
this.isPaused = false;
|
|
22
|
+
this.ipAddress = '';
|
|
23
|
+
this.hostname = '';
|
|
24
|
+
this.ssid = '';
|
|
25
|
+
this.bssid = '';
|
|
26
|
+
this.validMs = 0;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.RaftWifiConnStatus = RaftWifiConnStatus;
|
|
30
|
+
class RaftSysModInfoWiFi {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.rslt = 'ok';
|
|
33
|
+
this.isConn = 0;
|
|
34
|
+
this.isPaused = 0;
|
|
35
|
+
this.connState = 'None';
|
|
36
|
+
this.SSID = '';
|
|
37
|
+
this.IP = '';
|
|
38
|
+
this.Hostname = '';
|
|
39
|
+
this.WiFiMAC = '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.RaftSysModInfoWiFi = RaftSysModInfoWiFi;
|
|
43
|
+
//# sourceMappingURL=RaftWifiTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftWifiTypes.js","sourceRoot":"","sources":["../src/RaftWifiTypes.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,gBAAgB;AAChB,iBAAiB;AACjB,EAAE;AACF,wCAAwC;AACxC,oCAAoC;AACpC,EAAE;AACF,iHAAiH;;;AAEjH,IAAY,iBAGX;AAHD,WAAY,iBAAiB;IAC3B,6EAAc,CAAA;IACd,uFAAmB,CAAA;AACrB,CAAC,EAHW,iBAAiB,iCAAjB,iBAAiB,QAG5B;AAED,MAAa,kBAAkB;IAA/B;QACE,cAAS,GAAG,iBAAiB,CAAC,cAAc,CAAC;QAC7C,aAAQ,GAAG,KAAK,CAAC;QACjB,cAAS,GAAG,EAAE,CAAC;QACf,aAAQ,GAAG,EAAE,CAAC;QACd,SAAI,GAAG,EAAE,CAAC;QACV,UAAK,GAAG,EAAE,CAAC;QACX,YAAO,GAAG,CAAC,CAAC;IACd,CAAC;CAAA;AARD,gDAQC;AAED,MAAa,kBAAkB;IAA/B;QACE,SAAI,GAAG,IAAI,CAAC;QACZ,WAAM,GAAG,CAAC,CAAC;QACX,aAAQ,GAAG,CAAC,CAAC;QACb,cAAS,GAAG,MAAM,CAAC;QACnB,SAAI,GAAG,EAAE,CAAC;QACV,OAAE,GAAG,EAAE,CAAC;QACR,aAAQ,GAAG,EAAE,CAAC;QACd,YAAO,GAAG,EAAE,CAAC;IACf,CAAC;CAAA;AATD,gDASC"}
|