@robdobsn/raftjs 1.8.5 → 1.11.5
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/TODO.md +1 -0
- package/dist/react-native/RaftAttributeHandler.d.ts +14 -0
- package/dist/react-native/RaftAttributeHandler.js +375 -0
- package/dist/react-native/RaftAttributeHandler.js.map +1 -0
- package/dist/react-native/RaftChannel.d.ts +20 -0
- package/dist/react-native/RaftChannel.js +12 -0
- package/dist/react-native/RaftChannel.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.native.d.ts +95 -0
- package/dist/react-native/RaftChannelBLE.native.js +483 -0
- package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.web.d.ts +40 -0
- package/dist/react-native/RaftChannelBLE.web.js +302 -0
- package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
- package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
- package/dist/react-native/RaftChannelBLEFactory.js +17 -0
- package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
- package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js +138 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
- package/dist/react-native/RaftChannelSimulated.d.ts +42 -0
- package/dist/react-native/RaftChannelSimulated.js +1001 -0
- package/dist/react-native/RaftChannelSimulated.js.map +1 -0
- package/dist/react-native/RaftChannelWebSerial.d.ts +39 -0
- package/dist/react-native/RaftChannelWebSerial.js +329 -0
- package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
- package/dist/react-native/RaftChannelWebSocket.d.ts +30 -0
- package/dist/react-native/RaftChannelWebSocket.js +222 -0
- package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
- package/dist/react-native/RaftCommsStats.d.ts +39 -0
- package/dist/react-native/RaftCommsStats.js +128 -0
- package/dist/react-native/RaftCommsStats.js.map +1 -0
- package/dist/react-native/RaftConnEvents.d.ts +39 -0
- package/dist/react-native/RaftConnEvents.js +54 -0
- package/dist/react-native/RaftConnEvents.js.map +1 -0
- package/dist/react-native/RaftConnector.d.ts +257 -0
- package/dist/react-native/RaftConnector.js +671 -0
- package/dist/react-native/RaftConnector.js.map +1 -0
- package/dist/react-native/RaftCustomAttrHandler.d.ts +6 -0
- package/dist/react-native/RaftCustomAttrHandler.js +93 -0
- package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
- package/dist/react-native/RaftDeviceInfo.d.ts +71 -0
- package/dist/react-native/RaftDeviceInfo.js +50 -0
- package/dist/react-native/RaftDeviceInfo.js.map +1 -0
- package/dist/react-native/RaftDeviceManager.d.ts +73 -0
- package/dist/react-native/RaftDeviceManager.js +812 -0
- package/dist/react-native/RaftDeviceManager.js.map +1 -0
- package/dist/react-native/RaftDeviceMgrIF.d.ts +19 -0
- package/dist/react-native/RaftDeviceMgrIF.js +11 -0
- package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
- package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
- package/dist/react-native/RaftDeviceMsg.js +11 -0
- package/dist/react-native/RaftDeviceMsg.js.map +1 -0
- package/dist/react-native/RaftDeviceStates.d.ts +55 -0
- package/dist/react-native/RaftDeviceStates.js +81 -0
- package/dist/react-native/RaftDeviceStates.js.map +1 -0
- package/dist/react-native/RaftFileHandler.d.ts +52 -0
- package/dist/react-native/RaftFileHandler.js +502 -0
- package/dist/react-native/RaftFileHandler.js.map +1 -0
- package/dist/react-native/RaftLog.d.ts +22 -0
- package/dist/react-native/RaftLog.js +63 -0
- package/dist/react-native/RaftLog.js.map +1 -0
- package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
- package/dist/react-native/RaftMiniHDLC.js +383 -0
- package/dist/react-native/RaftMiniHDLC.js.map +1 -0
- package/dist/react-native/RaftMsgHandler.d.ts +62 -0
- package/dist/react-native/RaftMsgHandler.js +511 -0
- package/dist/react-native/RaftMsgHandler.js.map +1 -0
- package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/react-native/RaftMsgTrackInfo.js +42 -0
- package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
- package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
- package/dist/react-native/RaftProtocolDefs.js +48 -0
- package/dist/react-native/RaftProtocolDefs.js.map +1 -0
- package/dist/react-native/RaftPublish.d.ts +2 -0
- package/dist/react-native/RaftPublish.js +81 -0
- package/dist/react-native/RaftPublish.js.map +1 -0
- package/dist/react-native/RaftStreamHandler.d.ts +49 -0
- package/dist/react-native/RaftStreamHandler.js +324 -0
- package/dist/react-native/RaftStreamHandler.js.map +1 -0
- package/dist/react-native/RaftStruct.d.ts +3 -0
- package/dist/react-native/RaftStruct.js +258 -0
- package/dist/react-native/RaftStruct.js.map +1 -0
- package/dist/react-native/RaftSysTypeManager.d.ts +16 -0
- package/dist/react-native/RaftSysTypeManager.js +78 -0
- package/dist/react-native/RaftSysTypeManager.js.map +1 -0
- package/dist/react-native/RaftSystemType.d.ts +30 -0
- package/dist/react-native/RaftSystemType.js +3 -0
- package/dist/react-native/RaftSystemType.js.map +1 -0
- package/dist/react-native/RaftSystemUtils.d.ts +152 -0
- package/dist/react-native/RaftSystemUtils.js +463 -0
- package/dist/react-native/RaftSystemUtils.js.map +1 -0
- package/dist/react-native/RaftTypes.d.ts +216 -0
- package/dist/react-native/RaftTypes.js +153 -0
- package/dist/react-native/RaftTypes.js.map +1 -0
- package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
- package/dist/react-native/RaftUpdateEvents.js +46 -0
- package/dist/react-native/RaftUpdateEvents.js.map +1 -0
- package/dist/react-native/RaftUpdateManager.d.ts +61 -0
- package/dist/react-native/RaftUpdateManager.js +621 -0
- package/dist/react-native/RaftUpdateManager.js.map +1 -0
- package/dist/react-native/RaftUtils.d.ts +128 -0
- package/dist/react-native/RaftUtils.js +487 -0
- package/dist/react-native/RaftUtils.js.map +1 -0
- package/dist/react-native/RaftWifiTypes.d.ts +23 -0
- package/dist/react-native/RaftWifiTypes.js +43 -0
- package/dist/react-native/RaftWifiTypes.js.map +1 -0
- package/dist/react-native/main.d.ts +27 -0
- package/dist/react-native/main.js +52 -0
- package/dist/react-native/main.js.map +1 -0
- package/dist/web/RaftAttributeHandler.js +1 -1
- package/dist/web/RaftAttributeHandler.js.map +1 -1
- package/dist/web/RaftChannelBLE.web.js +8 -6
- package/dist/web/RaftChannelBLE.web.js.map +1 -1
- package/dist/web/RaftChannelSimulated.d.ts +10 -0
- package/dist/web/RaftChannelSimulated.js +665 -82
- package/dist/web/RaftChannelSimulated.js.map +1 -1
- package/dist/web/RaftChannelWebSerial.js +2 -2
- package/dist/web/RaftChannelWebSerial.js.map +1 -1
- package/dist/web/RaftChannelWebSocket.js +16 -1
- package/dist/web/RaftChannelWebSocket.js.map +1 -1
- package/dist/web/RaftConnector.d.ts +12 -1
- package/dist/web/RaftConnector.js +45 -9
- package/dist/web/RaftConnector.js.map +1 -1
- package/dist/web/RaftCustomAttrHandler.d.ts +2 -0
- package/dist/web/RaftCustomAttrHandler.js +54 -26
- package/dist/web/RaftCustomAttrHandler.js.map +1 -1
- package/dist/web/RaftDeviceInfo.d.ts +3 -1
- package/dist/web/RaftDeviceInfo.js +17 -3
- package/dist/web/RaftDeviceInfo.js.map +1 -1
- package/dist/web/RaftDeviceManager.d.ts +32 -2
- package/dist/web/RaftDeviceManager.js +307 -74
- package/dist/web/RaftDeviceManager.js.map +1 -1
- package/dist/web/RaftDeviceMgrIF.d.ts +5 -1
- package/dist/web/RaftDeviceStates.d.ts +20 -2
- package/dist/web/RaftDeviceStates.js +25 -4
- package/dist/web/RaftDeviceStates.js.map +1 -1
- package/dist/web/RaftMsgHandler.js.map +1 -1
- package/dist/web/RaftPublish.d.ts +2 -0
- package/dist/web/RaftPublish.js +81 -0
- package/dist/web/RaftPublish.js.map +1 -0
- package/dist/web/RaftStreamHandler.d.ts +11 -0
- package/dist/web/RaftStreamHandler.js +68 -1
- package/dist/web/RaftStreamHandler.js.map +1 -1
- package/dist/web/RaftStruct.js +197 -147
- package/dist/web/RaftStruct.js.map +1 -1
- package/dist/web/RaftSystemUtils.d.ts +17 -1
- package/dist/web/RaftSystemUtils.js +51 -0
- package/dist/web/RaftSystemUtils.js.map +1 -1
- package/dist/web/RaftTypes.d.ts +21 -0
- package/dist/web/RaftTypes.js.map +1 -1
- package/dist/web/RaftUpdateManager.js +1 -1
- package/dist/web/RaftUpdateManager.js.map +1 -1
- package/dist/web/RaftUtils.d.ts +2 -0
- package/dist/web/RaftUtils.js +20 -0
- package/dist/web/RaftUtils.js.map +1 -1
- package/dist/web/main.d.ts +2 -0
- package/dist/web/main.js +1 -0
- package/dist/web/main.js.map +1 -1
- package/eslint.config.mjs +33 -0
- package/examples/dashboard/package.json +36 -0
- package/examples/dashboard/src/CommandPanel.tsx +147 -0
- package/examples/dashboard/src/ConnManager.ts +166 -0
- package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
- package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
- package/examples/dashboard/src/DeviceLineChart.tsx +163 -0
- package/examples/dashboard/src/DevicePanel.tsx +247 -0
- package/examples/dashboard/src/DeviceStatsPanel.tsx +65 -0
- package/examples/dashboard/src/DevicesPanel.tsx +69 -0
- package/examples/dashboard/src/DispLedGrid.tsx +110 -0
- package/examples/dashboard/src/DispOneLed.tsx +20 -0
- package/examples/dashboard/src/LatencyTest.ts +130 -0
- package/examples/dashboard/src/LatencyTestPanel.tsx +92 -0
- package/examples/dashboard/src/Main.tsx +234 -0
- package/examples/dashboard/src/SettingsManager.ts +67 -0
- package/examples/dashboard/src/SettingsScreen.tsx +179 -0
- package/examples/dashboard/src/StatusPanel.tsx +71 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +170 -0
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +125 -0
- package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +38 -0
- package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +125 -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 +105 -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 +119 -0
- package/examples/dashboard/src/index.html +15 -0
- package/examples/dashboard/src/index.tsx +13 -0
- package/examples/dashboard/src/styles.css +570 -0
- package/examples/dashboard/tsconfig.json +18 -0
- package/jest.config.js +11 -0
- package/package.json +49 -52
- package/src/RaftAttributeHandler.ts +450 -0
- package/src/RaftChannel.ts +32 -0
- package/src/RaftChannelBLE.native.ts +617 -0
- package/src/RaftChannelBLE.web.ts +374 -0
- package/src/RaftChannelBLEFactory.ts +13 -0
- package/src/RaftChannelBLEScanner.native.ts +184 -0
- package/src/RaftChannelSimulated.ts +1177 -0
- package/src/RaftChannelWebSerial.ts +420 -0
- package/src/RaftChannelWebSocket.ts +272 -0
- package/src/RaftCommsStats.ts +142 -0
- package/src/RaftConnEvents.ts +58 -0
- package/src/RaftConnector.ts +806 -0
- package/src/RaftCustomAttrHandler.ts +117 -0
- package/src/RaftDeviceInfo.ts +125 -0
- package/src/RaftDeviceManager.ts +1014 -0
- package/src/RaftDeviceMgrIF.ts +37 -0
- package/src/RaftDeviceMsg.ts +20 -0
- package/src/RaftDeviceStates.ts +122 -0
- package/src/RaftFileHandler.ts +668 -0
- package/src/RaftLog.ts +70 -0
- package/src/RaftMiniHDLC.ts +396 -0
- package/src/RaftMsgHandler.ts +812 -0
- package/src/RaftMsgTrackInfo.ts +51 -0
- package/src/RaftProtocolDefs.ts +46 -0
- package/src/RaftPublish.ts +92 -0
- package/src/RaftStreamHandler.ts +412 -0
- package/src/RaftStruct.ts +282 -0
- package/src/RaftSysTypeManager.ts +87 -0
- package/src/RaftSystemType.ts +34 -0
- package/src/RaftSystemUtils.ts +548 -0
- package/src/RaftTypes.ts +306 -0
- package/src/RaftUpdateEvents.ts +48 -0
- package/src/RaftUpdateManager.ts +781 -0
- package/src/RaftUtils.ts +514 -0
- package/src/RaftWifiTypes.ts +36 -0
- package/src/main.ts +40 -0
- package/testdata/TestDeviceTypeRecs.json +492 -0
- package/tsconfig.json +30 -0
- package/tsconfig.react-native.json +29 -0
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftStruct
|
|
5
|
+
// Part of RaftJS
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson 2024
|
|
8
|
+
// (C) 2024 All rights reserved
|
|
9
|
+
//
|
|
10
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.structUnpack = structUnpack;
|
|
13
|
+
exports.structSizeOf = structSizeOf;
|
|
14
|
+
exports.structPack = structPack;
|
|
15
|
+
function parseFormatInstructions(format) {
|
|
16
|
+
const instructions = [];
|
|
17
|
+
let idx = 0;
|
|
18
|
+
while (idx < format.length) {
|
|
19
|
+
const char = format[idx];
|
|
20
|
+
// Endianness specifiers
|
|
21
|
+
if (char === "<" || char === ">") {
|
|
22
|
+
instructions.push({ kind: "endian", littleEndian: char === "<" });
|
|
23
|
+
idx++;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
// Ignore whitespace
|
|
27
|
+
if (/\s/.test(char)) {
|
|
28
|
+
idx++;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// Attribute code
|
|
32
|
+
const code = char;
|
|
33
|
+
idx++;
|
|
34
|
+
// Check for repeat count using [N] syntax
|
|
35
|
+
let repeat = 1;
|
|
36
|
+
if (idx < format.length && format[idx] === "[") {
|
|
37
|
+
const endIdx = format.indexOf("]", idx + 1);
|
|
38
|
+
if (endIdx === -1) {
|
|
39
|
+
throw new Error(`Invalid format string: missing closing ] in "${format}"`);
|
|
40
|
+
}
|
|
41
|
+
const repeatStr = format.slice(idx + 1, endIdx);
|
|
42
|
+
repeat = parseInt(repeatStr, 10);
|
|
43
|
+
if (!Number.isFinite(repeat) || repeat <= 0) {
|
|
44
|
+
throw new Error(`Invalid repeat count "${repeatStr}" in format string "${format}"`);
|
|
45
|
+
}
|
|
46
|
+
idx = endIdx + 1;
|
|
47
|
+
}
|
|
48
|
+
instructions.push({ kind: "spec", code, repeat });
|
|
49
|
+
}
|
|
50
|
+
return instructions;
|
|
51
|
+
}
|
|
52
|
+
function structUnpack(format, data) {
|
|
53
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
54
|
+
const results = [];
|
|
55
|
+
let offset = 0;
|
|
56
|
+
let littleEndian = false;
|
|
57
|
+
const instructions = parseFormatInstructions(format);
|
|
58
|
+
for (const instruction of instructions) {
|
|
59
|
+
if (instruction.kind === "endian") {
|
|
60
|
+
littleEndian = instruction.littleEndian;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const { code, repeat } = instruction;
|
|
64
|
+
for (let count = 0; count < repeat; count++) {
|
|
65
|
+
switch (code) {
|
|
66
|
+
case "x": // Padding byte
|
|
67
|
+
offset += 1;
|
|
68
|
+
break;
|
|
69
|
+
case "c": // Char
|
|
70
|
+
case "B": // Unsigned 8-bit integer
|
|
71
|
+
case "?": // Boolean (stored as uint8)
|
|
72
|
+
results.push(view.getUint8(offset));
|
|
73
|
+
offset += 1;
|
|
74
|
+
break;
|
|
75
|
+
case "b": // Signed 8-bit integer
|
|
76
|
+
results.push(view.getInt8(offset));
|
|
77
|
+
offset += 1;
|
|
78
|
+
break;
|
|
79
|
+
case "h": // Signed 16-bit integer
|
|
80
|
+
results.push(view.getInt16(offset, littleEndian));
|
|
81
|
+
offset += 2;
|
|
82
|
+
break;
|
|
83
|
+
case "H": // Unsigned 16-bit integer
|
|
84
|
+
results.push(view.getUint16(offset, littleEndian));
|
|
85
|
+
offset += 2;
|
|
86
|
+
break;
|
|
87
|
+
case "i": // Signed 32-bit integer
|
|
88
|
+
case "l": // Signed 32-bit integer
|
|
89
|
+
results.push(view.getInt32(offset, littleEndian));
|
|
90
|
+
offset += 4;
|
|
91
|
+
break;
|
|
92
|
+
case "I": // Unsigned 32-bit integer
|
|
93
|
+
case "L": // Unsigned 32-bit integer
|
|
94
|
+
results.push(view.getUint32(offset, littleEndian));
|
|
95
|
+
offset += 4;
|
|
96
|
+
break;
|
|
97
|
+
// case "q": // Signed 64-bit integer
|
|
98
|
+
// results.push(Number(view.getBigInt64(offset, littleEndian)));
|
|
99
|
+
// offset += 8;
|
|
100
|
+
// break;
|
|
101
|
+
// case "Q": // Unsigned 64-bit integer
|
|
102
|
+
// results.push(Number(view.getBigUint64(offset, littleEndian)));
|
|
103
|
+
// offset += 8;
|
|
104
|
+
// break;
|
|
105
|
+
case "f": // 32-bit float
|
|
106
|
+
results.push(view.getFloat32(offset, littleEndian));
|
|
107
|
+
offset += 4;
|
|
108
|
+
break;
|
|
109
|
+
case "d": // 64-bit float
|
|
110
|
+
results.push(view.getFloat64(offset, littleEndian));
|
|
111
|
+
offset += 8;
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
throw new Error(`Unknown format character: ${code}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return results;
|
|
119
|
+
}
|
|
120
|
+
function structSizeOf(format) {
|
|
121
|
+
let size = 0;
|
|
122
|
+
const instructions = parseFormatInstructions(format);
|
|
123
|
+
for (const instruction of instructions) {
|
|
124
|
+
if (instruction.kind === "endian") {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const { code, repeat } = instruction;
|
|
128
|
+
let unitSize;
|
|
129
|
+
switch (code) {
|
|
130
|
+
case "x": // Padding byte
|
|
131
|
+
case "c": // Char
|
|
132
|
+
case "b": // Signed 8-bit integer
|
|
133
|
+
case "B": // Unsigned 8-bit integer
|
|
134
|
+
case "?": // Boolean (uint8)
|
|
135
|
+
unitSize = 1;
|
|
136
|
+
break;
|
|
137
|
+
case "h": // Signed 16-bit integer
|
|
138
|
+
case "H": // Unsigned 16-bit integer
|
|
139
|
+
unitSize = 2;
|
|
140
|
+
break;
|
|
141
|
+
case "i": // Signed 32-bit integer
|
|
142
|
+
case "I": // Unsigned 32-bit integer
|
|
143
|
+
case "l": // Signed 32-bit integer
|
|
144
|
+
case "L": // Unsigned 32-bit integer
|
|
145
|
+
unitSize = 4;
|
|
146
|
+
break;
|
|
147
|
+
// case "q": // Signed 64-bit integer
|
|
148
|
+
// case "Q": // Unsigned 64-bit integer
|
|
149
|
+
// unitSize = 8;
|
|
150
|
+
// break;
|
|
151
|
+
case "f": // 32-bit float
|
|
152
|
+
unitSize = 4;
|
|
153
|
+
break;
|
|
154
|
+
case "d": // 64-bit float
|
|
155
|
+
unitSize = 8;
|
|
156
|
+
break;
|
|
157
|
+
default:
|
|
158
|
+
throw new Error(`Unknown format character: ${code}`);
|
|
159
|
+
}
|
|
160
|
+
size += unitSize * repeat;
|
|
161
|
+
}
|
|
162
|
+
return size;
|
|
163
|
+
}
|
|
164
|
+
function structPack(format, values) {
|
|
165
|
+
const size = structSizeOf(format);
|
|
166
|
+
const buffer = new ArrayBuffer(size);
|
|
167
|
+
const view = new DataView(buffer);
|
|
168
|
+
let offset = 0;
|
|
169
|
+
let littleEndian = false;
|
|
170
|
+
const instructions = parseFormatInstructions(format);
|
|
171
|
+
let valueIdx = 0;
|
|
172
|
+
for (const instruction of instructions) {
|
|
173
|
+
if (instruction.kind === "endian") {
|
|
174
|
+
littleEndian = instruction.littleEndian;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const { code, repeat } = instruction;
|
|
178
|
+
for (let count = 0; count < repeat; count++) {
|
|
179
|
+
switch (code) {
|
|
180
|
+
case "x": // Padding byte
|
|
181
|
+
offset += 1;
|
|
182
|
+
break;
|
|
183
|
+
case "c": // Char
|
|
184
|
+
case "b": // Signed 8-bit integer
|
|
185
|
+
if (valueIdx >= values.length) {
|
|
186
|
+
throw new Error("Insufficient values provided for structPack");
|
|
187
|
+
}
|
|
188
|
+
view.setInt8(offset, values[valueIdx++]);
|
|
189
|
+
offset += 1;
|
|
190
|
+
break;
|
|
191
|
+
case "B": // Unsigned 8-bit integer
|
|
192
|
+
case "?": // Boolean (uint8)
|
|
193
|
+
if (valueIdx >= values.length) {
|
|
194
|
+
throw new Error("Insufficient values provided for structPack");
|
|
195
|
+
}
|
|
196
|
+
view.setUint8(offset, values[valueIdx++]);
|
|
197
|
+
offset += 1;
|
|
198
|
+
break;
|
|
199
|
+
case "h": // Signed 16-bit integer
|
|
200
|
+
if (valueIdx >= values.length) {
|
|
201
|
+
throw new Error("Insufficient values provided for structPack");
|
|
202
|
+
}
|
|
203
|
+
view.setInt16(offset, values[valueIdx++], littleEndian);
|
|
204
|
+
offset += 2;
|
|
205
|
+
break;
|
|
206
|
+
case "H": // Unsigned 16-bit integer
|
|
207
|
+
if (valueIdx >= values.length) {
|
|
208
|
+
throw new Error("Insufficient values provided for structPack");
|
|
209
|
+
}
|
|
210
|
+
view.setUint16(offset, values[valueIdx++], littleEndian);
|
|
211
|
+
offset += 2;
|
|
212
|
+
break;
|
|
213
|
+
case "i": // Signed 32-bit integer
|
|
214
|
+
case "l": // Signed 32-bit integer
|
|
215
|
+
if (valueIdx >= values.length) {
|
|
216
|
+
throw new Error("Insufficient values provided for structPack");
|
|
217
|
+
}
|
|
218
|
+
view.setInt32(offset, values[valueIdx++], littleEndian);
|
|
219
|
+
offset += 4;
|
|
220
|
+
break;
|
|
221
|
+
case "I": // Unsigned 32-bit integer
|
|
222
|
+
case "L": // Unsigned 32-bit integer
|
|
223
|
+
if (valueIdx >= values.length) {
|
|
224
|
+
throw new Error("Insufficient values provided for structPack");
|
|
225
|
+
}
|
|
226
|
+
view.setUint32(offset, values[valueIdx++], littleEndian);
|
|
227
|
+
offset += 4;
|
|
228
|
+
break;
|
|
229
|
+
// case "q": // Signed 64-bit integer
|
|
230
|
+
// view.setBigInt64(offset, BigInt(values[valueIdx++]), littleEndian);
|
|
231
|
+
// offset += 8;
|
|
232
|
+
// break;
|
|
233
|
+
// case "Q": // Unsigned 64-bit integer
|
|
234
|
+
// view.setBigUint64(offset, BigInt(values[valueIdx++]), littleEndian);
|
|
235
|
+
// offset += 8;
|
|
236
|
+
// break;
|
|
237
|
+
case "f": // 32-bit float
|
|
238
|
+
if (valueIdx >= values.length) {
|
|
239
|
+
throw new Error("Insufficient values provided for structPack");
|
|
240
|
+
}
|
|
241
|
+
view.setFloat32(offset, values[valueIdx++], littleEndian);
|
|
242
|
+
offset += 4;
|
|
243
|
+
break;
|
|
244
|
+
case "d": // 64-bit float
|
|
245
|
+
if (valueIdx >= values.length) {
|
|
246
|
+
throw new Error("Insufficient values provided for structPack");
|
|
247
|
+
}
|
|
248
|
+
view.setFloat64(offset, values[valueIdx++], littleEndian);
|
|
249
|
+
offset += 8;
|
|
250
|
+
break;
|
|
251
|
+
default:
|
|
252
|
+
throw new Error(`Unknown format character: ${code}`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return new Uint8Array(buffer);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=RaftStruct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftStruct.js","sourceRoot":"","sources":["../../src/RaftStruct.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,aAAa;AACb,iBAAiB;AACjB,EAAE;AACF,kBAAkB;AAClB,+BAA+B;AAC/B,EAAE;AACF,iHAAiH;;AAoDjH,oCAwEC;AAED,oCA+CC;AAED,gCAkGC;AA3QD,SAAS,uBAAuB,CAAC,MAAc;IAC3C,MAAM,YAAY,GAAwB,EAAE,CAAC;IAC7C,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAEzB,wBAAwB;QACxB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;YAClE,GAAG,EAAE,CAAC;YACN,SAAS;QACb,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,GAAG,EAAE,CAAC;YACN,SAAS;QACb,CAAC;QAED,iBAAiB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,GAAG,EAAE,CAAC;QAEN,0CAA0C;QAC1C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,GAAG,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,uBAAuB,MAAM,GAAG,CAAC,CAAC;YACxF,CAAC;YACD,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc,EAAE,IAAgB;IACzD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACzE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAErD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;YACxC,SAAS;QACb,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;QAErC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1C,QAAQ,IAAI,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,eAAe;oBACrB,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,OAAO;gBACjB,KAAK,GAAG,CAAC,CAAC,yBAAyB;gBACnC,KAAK,GAAG,EAAE,4BAA4B;oBAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;oBACpC,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,uBAAuB;oBAC7B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnC,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,wBAAwB;oBAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,0BAA0B;oBAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBACnD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,wBAAwB;gBAClC,KAAK,GAAG,EAAE,wBAAwB;oBAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBAClD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,0BAA0B;gBACpC,KAAK,GAAG,EAAE,0BAA0B;oBAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBACnD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,qCAAqC;gBACrC,oEAAoE;gBACpE,mBAAmB;gBACnB,aAAa;gBACb,uCAAuC;gBACvC,qEAAqE;gBACrE,mBAAmB;gBACnB,aAAa;gBACb,KAAK,GAAG,EAAE,eAAe;oBACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBACpD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,eAAe;oBACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;oBACpD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV;oBACI,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACvC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAErD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,SAAS;QACb,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;QACrC,IAAI,QAAgB,CAAC;QAErB,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,CAAC,CAAC,eAAe;YACzB,KAAK,GAAG,CAAC,CAAC,OAAO;YACjB,KAAK,GAAG,CAAC,CAAC,uBAAuB;YACjC,KAAK,GAAG,CAAC,CAAC,yBAAyB;YACnC,KAAK,GAAG,EAAE,kBAAkB;gBACxB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACV,KAAK,GAAG,CAAC,CAAC,wBAAwB;YAClC,KAAK,GAAG,EAAE,0BAA0B;gBAChC,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACV,KAAK,GAAG,CAAC,CAAC,wBAAwB;YAClC,KAAK,GAAG,CAAC,CAAC,0BAA0B;YACpC,KAAK,GAAG,CAAC,CAAC,wBAAwB;YAClC,KAAK,GAAG,EAAE,0BAA0B;gBAChC,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACV,qCAAqC;YACrC,uCAAuC;YACvC,oBAAoB;YACpB,aAAa;YACb,KAAK,GAAG,EAAE,eAAe;gBACrB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACV,KAAK,GAAG,EAAE,eAAe;gBACrB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACV;gBACI,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc,EAAE,MAAgB;IACvD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACrC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;YACxC,SAAS;QACb,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;QAErC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1C,QAAQ,IAAI,EAAE,CAAC;gBACX,KAAK,GAAG,EAAE,eAAe;oBACrB,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,OAAO;gBACjB,KAAK,GAAG,EAAE,uBAAuB;oBAC7B,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACzC,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,yBAAyB;gBACnC,KAAK,GAAG,EAAE,kBAAkB;oBACxB,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC1C,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,wBAAwB;oBAC9B,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBACxD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,0BAA0B;oBAChC,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBACzD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,wBAAwB;gBAClC,KAAK,GAAG,EAAE,wBAAwB;oBAC9B,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBACxD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,CAAC,CAAC,0BAA0B;gBACpC,KAAK,GAAG,EAAE,0BAA0B;oBAChC,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBACzD,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,qCAAqC;gBACrC,0EAA0E;gBAC1E,mBAAmB;gBACnB,aAAa;gBACb,uCAAuC;gBACvC,2EAA2E;gBAC3E,mBAAmB;gBACnB,aAAa;gBACb,KAAK,GAAG,EAAE,eAAe;oBACrB,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBAC1D,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV,KAAK,GAAG,EAAE,eAAe;oBACrB,IAAI,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACnE,CAAC;oBACD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBAC1D,MAAM,IAAI,CAAC,CAAC;oBACZ,MAAM;gBACV;oBACI,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RaftSystemType } from "./RaftSystemType";
|
|
2
|
+
type RaftSystemTypeCreator = () => RaftSystemType;
|
|
3
|
+
export default class RaftSysTypeManager {
|
|
4
|
+
private static _instance;
|
|
5
|
+
private _sysTypes;
|
|
6
|
+
private _defaultSysTypeFactory;
|
|
7
|
+
static getInstance(): RaftSysTypeManager;
|
|
8
|
+
addSystemType(sysType: string, factory: RaftSystemTypeCreator): void;
|
|
9
|
+
addDefaultSystemType(factory: RaftSystemTypeCreator): void;
|
|
10
|
+
createSystemType(sysType: string): RaftSystemType | null;
|
|
11
|
+
createDefaultSystemType(): RaftSystemType | null;
|
|
12
|
+
getAllServiceUUIDs(): string[];
|
|
13
|
+
getAllNamePrefixes(): string[];
|
|
14
|
+
getSystemTypeByBLENamePrefix(name: string): RaftSystemType | null;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class RaftSysTypeManager {
|
|
4
|
+
constructor() {
|
|
5
|
+
// System type map
|
|
6
|
+
this._sysTypes = new Map();
|
|
7
|
+
this._defaultSysTypeFactory = null;
|
|
8
|
+
}
|
|
9
|
+
// Get instance (Singleton)
|
|
10
|
+
static getInstance() {
|
|
11
|
+
if (!RaftSysTypeManager._instance) {
|
|
12
|
+
RaftSysTypeManager._instance = new RaftSysTypeManager();
|
|
13
|
+
}
|
|
14
|
+
return RaftSysTypeManager._instance;
|
|
15
|
+
}
|
|
16
|
+
// Add a system type by name with its factory
|
|
17
|
+
addSystemType(sysType, factory) {
|
|
18
|
+
if (this._sysTypes.has(sysType)) {
|
|
19
|
+
throw new Error(`System type '${sysType}' is already registered.`);
|
|
20
|
+
}
|
|
21
|
+
this._sysTypes.set(sysType, factory);
|
|
22
|
+
}
|
|
23
|
+
// Set the default system type factory
|
|
24
|
+
addDefaultSystemType(factory) {
|
|
25
|
+
this._defaultSysTypeFactory = factory;
|
|
26
|
+
}
|
|
27
|
+
// Create a system type by name
|
|
28
|
+
createSystemType(sysType) {
|
|
29
|
+
const factory = this._sysTypes.get(sysType);
|
|
30
|
+
if (!factory) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return factory();
|
|
34
|
+
}
|
|
35
|
+
// Create the default system type
|
|
36
|
+
createDefaultSystemType() {
|
|
37
|
+
if (!this._defaultSysTypeFactory) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return this._defaultSysTypeFactory();
|
|
41
|
+
}
|
|
42
|
+
// Get a list of all unique BLE service UUIDs
|
|
43
|
+
getAllServiceUUIDs() {
|
|
44
|
+
const serviceUUIDs = new Set();
|
|
45
|
+
this._sysTypes.forEach((factory) => {
|
|
46
|
+
const sysType = factory();
|
|
47
|
+
if (!sysType.BLEServiceUUIDs) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
sysType.BLEServiceUUIDs.forEach((uuid) => serviceUUIDs.add(uuid));
|
|
51
|
+
});
|
|
52
|
+
return Array.from(serviceUUIDs);
|
|
53
|
+
}
|
|
54
|
+
// Get a list of all device name prefixes to filter on
|
|
55
|
+
getAllNamePrefixes() {
|
|
56
|
+
const deviceNames = new Set();
|
|
57
|
+
this._sysTypes.forEach((factory) => {
|
|
58
|
+
const sysType = factory();
|
|
59
|
+
if (!sysType.BLEDeviceNames) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
sysType.BLEDeviceNames.forEach((name) => deviceNames.add(name));
|
|
63
|
+
});
|
|
64
|
+
return Array.from(deviceNames);
|
|
65
|
+
}
|
|
66
|
+
// Find the system type for a given BLE device name prefix
|
|
67
|
+
getSystemTypeByBLENamePrefix(name) {
|
|
68
|
+
for (const factory of this._sysTypes.values()) {
|
|
69
|
+
const sysType = factory();
|
|
70
|
+
if (sysType.BLEDeviceNames && sysType.BLEDeviceNames.some((prefix) => name.startsWith(prefix))) {
|
|
71
|
+
return sysType;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.default = RaftSysTypeManager;
|
|
78
|
+
//# sourceMappingURL=RaftSysTypeManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftSysTypeManager.js","sourceRoot":"","sources":["../../src/RaftSysTypeManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import RaftDeviceMgrIF from "./RaftDeviceMgrIF";
|
|
2
|
+
import RaftSystemUtils from "./RaftSystemUtils";
|
|
3
|
+
import { RaftEventFn } from "./RaftTypes";
|
|
4
|
+
export type RaftSubscribeForUpdatesCBType = (systemUtils: RaftSystemUtils, enable: boolean) => Promise<void>;
|
|
5
|
+
export type RaftStateIsInvalidCBType = () => void;
|
|
6
|
+
export type RaftRxOtherMsgType = (payload: Uint8Array, _frameTimeMs: number) => void;
|
|
7
|
+
export interface ConnectorOptions {
|
|
8
|
+
wsSuffix?: string;
|
|
9
|
+
connTimeoutMs?: number;
|
|
10
|
+
bleConnItvlMs?: number;
|
|
11
|
+
bleUuid?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface RaftSystemType {
|
|
14
|
+
nameForDialogs: string;
|
|
15
|
+
defaultWiFiHostname?: string;
|
|
16
|
+
BLEServiceUUIDs?: string[];
|
|
17
|
+
BLECmdUUID?: string;
|
|
18
|
+
BLERespUUID?: string;
|
|
19
|
+
BLEDeviceNames?: string[];
|
|
20
|
+
firmwareDestName?: string;
|
|
21
|
+
normalFileDestName?: string;
|
|
22
|
+
connectorOptions: ConnectorOptions;
|
|
23
|
+
setup: (systemUtils: RaftSystemUtils, onEvent: RaftEventFn | null) => void;
|
|
24
|
+
subscribeForUpdates: RaftSubscribeForUpdatesCBType | null;
|
|
25
|
+
stateIsInvalid: RaftStateIsInvalidCBType | null;
|
|
26
|
+
rxOtherMsgType: RaftRxOtherMsgType | null;
|
|
27
|
+
deviceMgrIF?: RaftDeviceMgrIF;
|
|
28
|
+
nonRaftTypeCode?: string;
|
|
29
|
+
}
|
|
30
|
+
export type RaftGetSystemTypeCBType = (systemUtils: RaftSystemUtils) => Promise<RaftSystemType | null>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftSystemType.js","sourceRoot":"","sources":["../../src/RaftSystemType.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { RaftWifiConnStatus } from "./RaftWifiTypes";
|
|
2
|
+
import RaftMsgHandler from "./RaftMsgHandler";
|
|
3
|
+
import { RaftFileList, RaftFriendlyName, RaftOKFail, RaftPubTopicRec, RaftSubscriptionUpdateResponse, RaftSysModInfoBLEMan, RaftSystemInfo, RaftWifiScanResults } from "./RaftTypes";
|
|
4
|
+
export default class RaftSystemUtils {
|
|
5
|
+
private _msgHandler;
|
|
6
|
+
private _systemInfo;
|
|
7
|
+
private _friendlyName;
|
|
8
|
+
private _wifiConnStatus;
|
|
9
|
+
private _defaultWiFiHostname;
|
|
10
|
+
private _maxSecsToWaitForWiFiConn;
|
|
11
|
+
private _pubTopicIdxToName;
|
|
12
|
+
private _pubTopicNameToIdx;
|
|
13
|
+
/**
|
|
14
|
+
* constructor
|
|
15
|
+
* @param raftMsgHandler
|
|
16
|
+
*/
|
|
17
|
+
constructor(raftMsgHandler: RaftMsgHandler);
|
|
18
|
+
/**
|
|
19
|
+
* getMsgHandler
|
|
20
|
+
* @returns RaftMsgHandler
|
|
21
|
+
*/
|
|
22
|
+
getMsgHandler(): RaftMsgHandler;
|
|
23
|
+
/**
|
|
24
|
+
* Update publish topic maps from topic records.
|
|
25
|
+
*/
|
|
26
|
+
updatePublishTopicMap(topicRecs: Array<RaftPubTopicRec> | undefined): void;
|
|
27
|
+
/**
|
|
28
|
+
* Update publish topic maps from subscription response.
|
|
29
|
+
*/
|
|
30
|
+
updatePublishTopicMapFromSubscriptionResponse(resp: RaftSubscriptionUpdateResponse | RaftOKFail | null | undefined): void;
|
|
31
|
+
/**
|
|
32
|
+
* Fetch publish topic map from firmware endpoint.
|
|
33
|
+
*/
|
|
34
|
+
refreshPublishTopicMap(): Promise<boolean>;
|
|
35
|
+
getPublishTopicName(topicIndex: number): string | undefined;
|
|
36
|
+
getPublishTopicIndex(topicName: string): number | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* setDefaultWiFiHostname
|
|
39
|
+
* @param defaultWiFiHostname
|
|
40
|
+
*/
|
|
41
|
+
setDefaultWiFiHostname(defaultWiFiHostname: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* getFriendlyName
|
|
44
|
+
*
|
|
45
|
+
* @returns friendly name
|
|
46
|
+
*/
|
|
47
|
+
getFriendlyName(): RaftFriendlyName | null;
|
|
48
|
+
/**
|
|
49
|
+
* invalidate
|
|
50
|
+
*/
|
|
51
|
+
invalidate(): void;
|
|
52
|
+
/**
|
|
53
|
+
* retrieveInfo - get system info
|
|
54
|
+
* @returns Promise<RaftSystemInfo>
|
|
55
|
+
*
|
|
56
|
+
*/
|
|
57
|
+
retrieveInfo(): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
*
|
|
60
|
+
* getSystemInfo
|
|
61
|
+
* @param forceGet - true to force a get from the raft app
|
|
62
|
+
* @returns Promise<RaftSystemInfo>
|
|
63
|
+
*
|
|
64
|
+
*/
|
|
65
|
+
getSystemInfo(forceGet?: boolean): Promise<RaftSystemInfo>;
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* setRaftName
|
|
69
|
+
* @param newName name to refer to Raft - used for BLE advertising
|
|
70
|
+
* @returns Promise<boolean> true if successful
|
|
71
|
+
*
|
|
72
|
+
*/
|
|
73
|
+
setRaftName(newName: string): Promise<boolean>;
|
|
74
|
+
/**
|
|
75
|
+
*
|
|
76
|
+
* getRaftName
|
|
77
|
+
* @param forceGet - true to force a get from the raft app
|
|
78
|
+
* @returns Promise<RaftNameResponse> (object containing rslt)
|
|
79
|
+
*
|
|
80
|
+
*/
|
|
81
|
+
getRaftName(forceGet?: boolean): Promise<RaftFriendlyName>;
|
|
82
|
+
/**
|
|
83
|
+
*
|
|
84
|
+
* getFileList - get list of files on file system
|
|
85
|
+
* @returns Promise<RaftFileList>
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
88
|
+
getFileList(): Promise<RaftFileList>;
|
|
89
|
+
/**
|
|
90
|
+
*
|
|
91
|
+
* Get BLEMan sysmod info
|
|
92
|
+
*
|
|
93
|
+
* @returns RaftSysModInfoBLEMan
|
|
94
|
+
*
|
|
95
|
+
*/
|
|
96
|
+
getSysModInfoBLEMan(): Promise<RaftSysModInfoBLEMan | null>;
|
|
97
|
+
/**
|
|
98
|
+
* Get hostname of connected WiFi
|
|
99
|
+
*
|
|
100
|
+
* @return string - hostname of connected WiFi
|
|
101
|
+
*
|
|
102
|
+
*/
|
|
103
|
+
_getHostnameFromFriendlyName(): string;
|
|
104
|
+
/**
|
|
105
|
+
* Get Wifi connection status
|
|
106
|
+
*
|
|
107
|
+
* @return boolean - true if connected
|
|
108
|
+
*
|
|
109
|
+
*/
|
|
110
|
+
getWiFiConnStatus(): Promise<boolean | null>;
|
|
111
|
+
/**
|
|
112
|
+
* pause Wifi connection
|
|
113
|
+
*
|
|
114
|
+
* @param boolean - true to pause, false to resume
|
|
115
|
+
* @return boolean - true if successful
|
|
116
|
+
*
|
|
117
|
+
*/
|
|
118
|
+
pauseWifiConnection(pause: boolean): Promise<boolean>;
|
|
119
|
+
/**
|
|
120
|
+
* Connect to WiFi
|
|
121
|
+
*
|
|
122
|
+
* @param string - WiFi SSID
|
|
123
|
+
* @param string - WiFi password
|
|
124
|
+
* @return boolean - true if successful
|
|
125
|
+
*
|
|
126
|
+
*/
|
|
127
|
+
wifiConnect(ssid: string, password: string): Promise<boolean>;
|
|
128
|
+
/**
|
|
129
|
+
* Disconnect WiFi
|
|
130
|
+
*
|
|
131
|
+
* @return boolean - true if successful
|
|
132
|
+
*
|
|
133
|
+
*/
|
|
134
|
+
wifiDisconnect(): Promise<boolean>;
|
|
135
|
+
/**
|
|
136
|
+
* WiFiScan start
|
|
137
|
+
*
|
|
138
|
+
* @return boolean - true if successful
|
|
139
|
+
*
|
|
140
|
+
*/
|
|
141
|
+
wifiScanStart(): Promise<boolean>;
|
|
142
|
+
/**
|
|
143
|
+
* WiFiScan get results
|
|
144
|
+
*
|
|
145
|
+
* @return boolean - false if unsuccessful, otherwise the results of the promise
|
|
146
|
+
*
|
|
147
|
+
*/
|
|
148
|
+
wifiScanResults(): Promise<boolean | RaftOKFail | RaftWifiScanResults>;
|
|
149
|
+
getCachedSystemInfo(): RaftSystemInfo | null;
|
|
150
|
+
getCachedRaftName(): RaftFriendlyName | null;
|
|
151
|
+
getCachedWifiStatus(): RaftWifiConnStatus;
|
|
152
|
+
}
|