@robotical/raftjs 1.3.5 → 1.4.0
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/dist/react-native/RaftAttributeHandler.d.ts +1 -1
- package/dist/react-native/RaftAttributeHandler.js +18 -10
- package/dist/react-native/RaftAttributeHandler.js.map +1 -1
- package/dist/react-native/RaftChannelBLE.native.d.ts +11 -11
- package/dist/react-native/RaftChannelBLE.native.js +61 -41
- package/dist/react-native/RaftChannelBLE.native.js.map +1 -1
- package/dist/react-native/RaftChannelBLE.web.d.ts +3 -4
- package/dist/react-native/RaftChannelBLE.web.js +7 -8
- package/dist/react-native/RaftChannelBLE.web.js.map +1 -1
- package/dist/react-native/RaftChannelBLEScanner.native.d.ts +6 -6
- package/dist/react-native/RaftChannelBLEScanner.native.js +38 -46
- package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -1
- package/dist/react-native/RaftConnector.d.ts +3 -3
- package/dist/react-native/RaftConnector.js +4 -4
- package/dist/react-native/RaftConnector.js.map +1 -1
- package/dist/react-native/RaftCustomAttrHandler.d.ts +1 -1
- package/dist/react-native/RaftCustomAttrHandler.js +4 -4
- package/dist/react-native/RaftCustomAttrHandler.js.map +1 -1
- package/dist/react-native/RaftDeviceInfo.d.ts +3 -0
- package/dist/react-native/RaftDeviceManager.d.ts +16 -11
- package/dist/react-native/RaftDeviceManager.js +196 -50
- package/dist/react-native/RaftDeviceManager.js.map +1 -1
- package/dist/react-native/RaftDeviceMgrIF.d.ts +9 -6
- package/dist/react-native/RaftDeviceStates.d.ts +5 -1
- package/dist/react-native/RaftDeviceStates.js +3 -3
- package/dist/react-native/RaftDeviceStates.js.map +1 -1
- package/dist/react-native/RaftMsgHandler.d.ts +1 -1
- package/dist/react-native/RaftMsgHandler.js +1 -2
- package/dist/react-native/RaftMsgHandler.js.map +1 -1
- package/dist/react-native/RaftStruct.d.ts +3 -0
- package/dist/react-native/RaftStruct.js +208 -0
- package/dist/react-native/RaftStruct.js.map +1 -0
- package/dist/react-native/RaftSysTypeManager.d.ts +14 -0
- package/dist/react-native/RaftSysTypeManager.js +53 -0
- package/dist/react-native/RaftSysTypeManager.js.map +1 -0
- package/dist/react-native/RaftSystemType.d.ts +3 -0
- package/dist/react-native/RaftTypes.d.ts +14 -15
- package/dist/react-native/RaftTypes.js +13 -50
- package/dist/react-native/RaftTypes.js.map +1 -1
- package/dist/react-native/RaftUpdateManager.js +6 -3
- package/dist/react-native/RaftUpdateManager.js.map +1 -1
- package/dist/react-native/RaftUtils.d.ts +1 -0
- package/dist/react-native/RaftUtils.js +17 -4
- package/dist/react-native/RaftUtils.js.map +1 -1
- package/dist/react-native/main.d.ts +2 -1
- package/dist/react-native/main.js +4 -4
- package/dist/react-native/main.js.map +1 -1
- package/dist/web/RaftAttributeHandler.d.ts +1 -1
- package/dist/web/RaftAttributeHandler.js +18 -10
- package/dist/web/RaftAttributeHandler.js.map +1 -1
- package/dist/web/RaftChannelBLE.web.d.ts +3 -4
- package/dist/web/RaftChannelBLE.web.js +7 -8
- package/dist/web/RaftChannelBLE.web.js.map +1 -1
- package/dist/web/RaftConnector.d.ts +3 -3
- package/dist/web/RaftConnector.js +4 -4
- package/dist/web/RaftConnector.js.map +1 -1
- package/dist/web/RaftCustomAttrHandler.d.ts +1 -1
- package/dist/web/RaftCustomAttrHandler.js +4 -4
- package/dist/web/RaftCustomAttrHandler.js.map +1 -1
- package/dist/web/RaftDeviceInfo.d.ts +3 -0
- package/dist/web/RaftDeviceManager.d.ts +16 -11
- package/dist/web/RaftDeviceManager.js +196 -50
- package/dist/web/RaftDeviceManager.js.map +1 -1
- package/dist/web/RaftDeviceMgrIF.d.ts +9 -6
- package/dist/web/RaftDeviceStates.d.ts +5 -1
- package/dist/web/RaftDeviceStates.js +3 -3
- package/dist/web/RaftDeviceStates.js.map +1 -1
- package/dist/web/RaftMsgHandler.d.ts +1 -1
- package/dist/web/RaftMsgHandler.js +1 -2
- package/dist/web/RaftMsgHandler.js.map +1 -1
- package/dist/web/RaftStruct.d.ts +3 -0
- package/dist/web/RaftStruct.js +208 -0
- package/dist/web/RaftStruct.js.map +1 -0
- package/dist/web/RaftSysTypeManager.d.ts +14 -0
- package/dist/web/RaftSysTypeManager.js +53 -0
- package/dist/web/RaftSysTypeManager.js.map +1 -0
- package/dist/web/RaftSystemType.d.ts +3 -0
- package/dist/web/RaftTypes.d.ts +14 -15
- package/dist/web/RaftTypes.js +13 -50
- package/dist/web/RaftTypes.js.map +1 -1
- package/dist/web/RaftUpdateManager.js +6 -3
- package/dist/web/RaftUpdateManager.js.map +1 -1
- package/dist/web/RaftUtils.d.ts +1 -0
- package/dist/web/RaftUtils.js +17 -4
- package/dist/web/RaftUtils.js.map +1 -1
- package/dist/web/main.d.ts +2 -1
- package/dist/web/main.js +4 -4
- package/dist/web/main.js.map +1 -1
- package/examples/dashboard/package.json +8 -15
- package/examples/dashboard/src/ConnManager.ts +18 -14
- package/examples/dashboard/src/DeviceActionsForm.tsx +49 -49
- package/examples/dashboard/src/DeviceLineChart.tsx +44 -20
- package/examples/dashboard/src/DevicePanel.tsx +33 -2
- package/examples/dashboard/src/DevicesPanel.tsx +5 -4
- package/examples/dashboard/src/LatencyTest.ts +130 -0
- package/examples/dashboard/src/LatencyTestPanel.tsx +92 -0
- package/examples/dashboard/src/Main.tsx +191 -73
- package/examples/dashboard/src/SettingsManager.ts +67 -0
- package/examples/dashboard/src/SettingsScreen.tsx +174 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +14 -8
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +12 -5
- package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +30 -0
- package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +91 -0
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +23 -4
- package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +1 -1
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +5 -2
- package/examples/dashboard/src/index.html +2 -2
- package/examples/dashboard/src/index.tsx +0 -2
- package/examples/dashboard/src/styles.css +14 -0
- package/package.json +6 -14
- package/src/RaftAttributeHandler.ts +23 -14
- package/src/RaftChannelBLE.native.ts +77 -53
- package/src/RaftChannelBLE.web.ts +8 -8
- package/src/RaftChannelBLEScanner.native.ts +38 -44
- package/src/RaftConnector.ts +5 -5
- package/src/RaftCustomAttrHandler.ts +5 -5
- package/src/RaftDeviceInfo.ts +3 -0
- package/src/RaftDeviceManager.ts +236 -65
- package/src/RaftDeviceMgrIF.ts +11 -6
- package/src/RaftDeviceStates.ts +7 -3
- package/src/RaftMsgHandler.ts +1 -2
- package/src/RaftStruct.ts +209 -0
- package/src/RaftSysTypeManager.ts +60 -0
- package/src/RaftSystemType.ts +3 -0
- package/src/RaftTypes.ts +30 -33
- package/src/RaftUpdateManager.ts +6 -3
- package/src/RaftUtils.ts +14 -4
- package/src/main.ts +2 -2
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
//
|
|
3
|
+
// RaftStruct
|
|
4
|
+
// Part of RaftJS
|
|
5
|
+
//
|
|
6
|
+
// Rob Dobson 2024
|
|
7
|
+
// (C) 2024 All rights reserved
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
|
|
11
|
+
export function structUnpack(format: string, data: Uint8Array): number[] {
|
|
12
|
+
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
13
|
+
const results: number[] = [];
|
|
14
|
+
let offset = 0;
|
|
15
|
+
let littleEndian = false;
|
|
16
|
+
|
|
17
|
+
for (const char of format) {
|
|
18
|
+
switch (char) {
|
|
19
|
+
case "<":
|
|
20
|
+
littleEndian = true;
|
|
21
|
+
break;
|
|
22
|
+
case ">":
|
|
23
|
+
littleEndian = false;
|
|
24
|
+
break;
|
|
25
|
+
case "x": // Padding byte
|
|
26
|
+
offset += 1;
|
|
27
|
+
break;
|
|
28
|
+
case "c": // Char
|
|
29
|
+
results.push(view.getUint8(offset));
|
|
30
|
+
offset += 1;
|
|
31
|
+
break;
|
|
32
|
+
case "b": // Signed 8-bit integer
|
|
33
|
+
results.push(view.getInt8(offset));
|
|
34
|
+
offset += 1;
|
|
35
|
+
break;
|
|
36
|
+
case "B": // Unsigned 8-bit integer
|
|
37
|
+
results.push(view.getUint8(offset));
|
|
38
|
+
offset += 1;
|
|
39
|
+
break;
|
|
40
|
+
case "h": // Signed 16-bit integer
|
|
41
|
+
results.push(view.getInt16(offset, littleEndian));
|
|
42
|
+
offset += 2;
|
|
43
|
+
break;
|
|
44
|
+
case "H": // Unsigned 16-bit integer (big-endian)
|
|
45
|
+
results.push(view.getUint16(offset, littleEndian));
|
|
46
|
+
offset += 2;
|
|
47
|
+
break;
|
|
48
|
+
case "i": // Signed 32-bit integer (big-endian)
|
|
49
|
+
results.push(view.getInt32(offset, littleEndian));
|
|
50
|
+
offset += 4;
|
|
51
|
+
break;
|
|
52
|
+
case "I": // Unsigned 32-bit integer (big-endian)
|
|
53
|
+
results.push(view.getUint32(offset, littleEndian));
|
|
54
|
+
offset += 4;
|
|
55
|
+
break;
|
|
56
|
+
case "l": // Signed 32-bit integer (big-endian)
|
|
57
|
+
results.push(view.getInt32(offset, littleEndian));
|
|
58
|
+
offset += 4;
|
|
59
|
+
break;
|
|
60
|
+
case "L": // Unsigned 32-bit integer (big-endian)
|
|
61
|
+
results.push(view.getUint32(offset, littleEndian));
|
|
62
|
+
offset += 4;
|
|
63
|
+
break;
|
|
64
|
+
// case "q": // Signed 64-bit integer (big-endian)
|
|
65
|
+
// results.push(view.getBigInt64(offset, littleEndian));
|
|
66
|
+
// offset += 8;
|
|
67
|
+
// break;
|
|
68
|
+
// case "Q": // Unsigned 64-bit integer (big-endian)
|
|
69
|
+
// results.push(view.getBigUint64(offset, littleEndian));
|
|
70
|
+
// offset += 8;
|
|
71
|
+
// break;
|
|
72
|
+
case "f": // 32-bit float (big-endian)
|
|
73
|
+
results.push(view.getFloat32(offset, littleEndian));
|
|
74
|
+
offset += 4;
|
|
75
|
+
break;
|
|
76
|
+
case "d": // 64-bit float (big-endian)
|
|
77
|
+
results.push(view.getFloat64(offset, littleEndian));
|
|
78
|
+
offset += 8;
|
|
79
|
+
break;
|
|
80
|
+
default:
|
|
81
|
+
throw new Error(`Unknown format character: ${char}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return results;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function structSizeOf(format: string): number {
|
|
89
|
+
let size = 0;
|
|
90
|
+
for (const char of format) {
|
|
91
|
+
switch (char) {
|
|
92
|
+
case "<":
|
|
93
|
+
case ">":
|
|
94
|
+
break;
|
|
95
|
+
case "x": // Padding byte
|
|
96
|
+
size += 1;
|
|
97
|
+
break;
|
|
98
|
+
case "c": // Char
|
|
99
|
+
case "b": // Signed 8-bit integer
|
|
100
|
+
case "B": // Unsigned 8-bit integer
|
|
101
|
+
size += 1;
|
|
102
|
+
break;
|
|
103
|
+
case "h": // Signed 16-bit integer
|
|
104
|
+
case "H": // Unsigned 16-bit integer
|
|
105
|
+
size += 2;
|
|
106
|
+
break;
|
|
107
|
+
case "i": // Signed 32-bit integer
|
|
108
|
+
case "I": // Unsigned 32-bit integer
|
|
109
|
+
case "l": // Signed 32-bit integer
|
|
110
|
+
case "L": // Unsigned 32-bit integer
|
|
111
|
+
size += 4;
|
|
112
|
+
break;
|
|
113
|
+
// case "q": // Signed 64-bit integer
|
|
114
|
+
// case "Q": // Unsigned 64-bit integer
|
|
115
|
+
// size += 8;
|
|
116
|
+
// break;
|
|
117
|
+
case "f": // 32-bit float
|
|
118
|
+
size += 4;
|
|
119
|
+
break;
|
|
120
|
+
case "d": // 64-bit float
|
|
121
|
+
size += 8;
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
throw new Error(`Unknown format character: ${char}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return size;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function structPack(format: string, values: number[]): Uint8Array {
|
|
131
|
+
const size = structSizeOf(format);
|
|
132
|
+
const buffer = new ArrayBuffer(size);
|
|
133
|
+
const view = new DataView(buffer);
|
|
134
|
+
let offset = 0;
|
|
135
|
+
let littleEndian = false;
|
|
136
|
+
|
|
137
|
+
let valIdx = 0;
|
|
138
|
+
for (let i = 0; i < format.length; i++) {
|
|
139
|
+
const char = format[i];
|
|
140
|
+
const value = values[valIdx];
|
|
141
|
+
switch (char) {
|
|
142
|
+
case "<":
|
|
143
|
+
littleEndian = true;
|
|
144
|
+
break;
|
|
145
|
+
case ">":
|
|
146
|
+
littleEndian = false;
|
|
147
|
+
break;
|
|
148
|
+
case "x": // Padding byte
|
|
149
|
+
offset += 1;
|
|
150
|
+
break;
|
|
151
|
+
case "c": // Char
|
|
152
|
+
view.setInt8(offset, value);
|
|
153
|
+
offset += 1;
|
|
154
|
+
break;
|
|
155
|
+
case "b": // Signed 8-bit integer
|
|
156
|
+
view.setInt8(offset, value);
|
|
157
|
+
offset += 1;
|
|
158
|
+
break;
|
|
159
|
+
case "B": // Unsigned 8-bit integer
|
|
160
|
+
view.setUint8(offset, value);
|
|
161
|
+
offset += 1;
|
|
162
|
+
break;
|
|
163
|
+
case "h": // Signed 16-bit integer
|
|
164
|
+
view.setInt16(offset, value, littleEndian);
|
|
165
|
+
offset += 2;
|
|
166
|
+
break;
|
|
167
|
+
case "H": // Unsigned 16-bit integer
|
|
168
|
+
view.setUint16(offset, value, littleEndian);
|
|
169
|
+
offset += 2;
|
|
170
|
+
break;
|
|
171
|
+
case "i": // Signed 32-bit integer
|
|
172
|
+
view.setInt32(offset, value, littleEndian);
|
|
173
|
+
offset += 4;
|
|
174
|
+
break;
|
|
175
|
+
case "I": // Unsigned 32-bit integer
|
|
176
|
+
view.setUint32(offset, value, littleEndian);
|
|
177
|
+
offset += 4;
|
|
178
|
+
break;
|
|
179
|
+
case "l": // Signed 32-bit integer
|
|
180
|
+
view.setInt32(offset, value, littleEndian);
|
|
181
|
+
offset += 4;
|
|
182
|
+
break;
|
|
183
|
+
case "L": // Unsigned 32-bit integer
|
|
184
|
+
view.setUint32(offset, value, littleEndian);
|
|
185
|
+
offset += 4;
|
|
186
|
+
break;
|
|
187
|
+
// case "q": // Signed 64-bit integer
|
|
188
|
+
// view.setBigInt64(offset, BigInt(value), littleEndian);
|
|
189
|
+
// offset += 8;
|
|
190
|
+
// break;
|
|
191
|
+
// case "Q": // Unsigned 64-bit integer
|
|
192
|
+
// view.setBigUint64(offset, BigInt(value), littleEndian);
|
|
193
|
+
// offset += 8;
|
|
194
|
+
// break;
|
|
195
|
+
case "f": // 32-bit float
|
|
196
|
+
view.setFloat32(offset, value, littleEndian);
|
|
197
|
+
offset += 4;
|
|
198
|
+
break;
|
|
199
|
+
case "d": // 64-bit float
|
|
200
|
+
view.setFloat64(offset, value, littleEndian);
|
|
201
|
+
offset += 8;
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
throw new Error(`Unknown format character: ${char}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return new Uint8Array(buffer);
|
|
209
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { RaftSystemType } from "./RaftSystemType";
|
|
2
|
+
|
|
3
|
+
type RaftSystemTypeCreator = () => RaftSystemType;
|
|
4
|
+
|
|
5
|
+
export default class RaftSysTypeManager {
|
|
6
|
+
// Singleton instance
|
|
7
|
+
private static _instance: RaftSysTypeManager;
|
|
8
|
+
|
|
9
|
+
// System type map
|
|
10
|
+
private _sysTypes: Map<string, RaftSystemTypeCreator> = new Map();
|
|
11
|
+
private _defaultSysTypeFactory: RaftSystemTypeCreator | null = null;
|
|
12
|
+
|
|
13
|
+
// Get instance (Singleton)
|
|
14
|
+
public static getInstance(): RaftSysTypeManager {
|
|
15
|
+
if (!RaftSysTypeManager._instance) {
|
|
16
|
+
RaftSysTypeManager._instance = new RaftSysTypeManager();
|
|
17
|
+
}
|
|
18
|
+
return RaftSysTypeManager._instance;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Add a system type by name with its factory
|
|
22
|
+
public addSystemType(sysType: string, factory: RaftSystemTypeCreator): void {
|
|
23
|
+
if (this._sysTypes.has(sysType)) {
|
|
24
|
+
throw new Error(`System type '${sysType}' is already registered.`);
|
|
25
|
+
}
|
|
26
|
+
this._sysTypes.set(sysType, factory);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Set the default system type factory
|
|
30
|
+
public addDefaultSystemType(factory: RaftSystemTypeCreator): void {
|
|
31
|
+
this._defaultSysTypeFactory = factory;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Create a system type by name
|
|
35
|
+
public createSystemType(sysType: string): RaftSystemType | null {
|
|
36
|
+
const factory = this._sysTypes.get(sysType);
|
|
37
|
+
if (!factory) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
return factory();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Create the default system type
|
|
44
|
+
public createDefaultSystemType(): RaftSystemType | null {
|
|
45
|
+
if (!this._defaultSysTypeFactory) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return this._defaultSysTypeFactory();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Get a list of all unique BLE service UUIDs
|
|
52
|
+
getAllServiceUUIDs(): string[] {
|
|
53
|
+
const serviceUUIDs = new Set<string>();
|
|
54
|
+
this._sysTypes.forEach((factory) => {
|
|
55
|
+
const sysType = factory();
|
|
56
|
+
sysType.BLEServiceUUIDs.forEach((uuid) => serviceUUIDs.add(uuid));
|
|
57
|
+
});
|
|
58
|
+
return Array.from(serviceUUIDs);
|
|
59
|
+
}
|
|
60
|
+
}
|
package/src/RaftSystemType.ts
CHANGED
|
@@ -16,6 +16,9 @@ export interface ConnectorOptions {
|
|
|
16
16
|
export interface RaftSystemType {
|
|
17
17
|
nameForDialogs: string;
|
|
18
18
|
defaultWiFiHostname: string;
|
|
19
|
+
BLEServiceUUIDs: string[];
|
|
20
|
+
BLECmdUUID: string;
|
|
21
|
+
BLERespUUID: string;
|
|
19
22
|
firmwareDestName: string;
|
|
20
23
|
normalFileDestName: string;
|
|
21
24
|
connectorOptions: ConnectorOptions;
|
package/src/RaftTypes.ts
CHANGED
|
@@ -32,7 +32,7 @@ export type RaftEventFn = (
|
|
|
32
32
|
eventType: string,
|
|
33
33
|
eventEnum: RaftConnEvent | RaftUpdateEvent | RaftPublishEvent,
|
|
34
34
|
eventName: string,
|
|
35
|
-
data?: object | string | null
|
|
35
|
+
data?: object | string | null
|
|
36
36
|
) => void;
|
|
37
37
|
|
|
38
38
|
export interface RaftSubscription {
|
|
@@ -59,30 +59,22 @@ export class RaftSystemInfo {
|
|
|
59
59
|
Friendly? = "";
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
export
|
|
63
|
-
rslt
|
|
64
|
-
calDone
|
|
65
|
-
validMs?
|
|
62
|
+
export type RaftCalibInfo = {
|
|
63
|
+
rslt: string;
|
|
64
|
+
calDone: number;
|
|
65
|
+
validMs? : number;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
// NOTE: Do not put any methods in any of the response classes as they
|
|
69
|
+
// are simply wrappers around JSON and will not necessarily be constructed
|
|
70
|
+
// as objects
|
|
68
71
|
export class RaftOKFail {
|
|
69
|
-
|
|
70
|
-
set(rsltFlag: boolean) {
|
|
71
|
-
if (rsltFlag) {
|
|
72
|
-
this.rslt = this.RAFT_OK;
|
|
73
|
-
} else {
|
|
74
|
-
this.rslt = 'fail';
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
rslt = 'commsFail';
|
|
78
|
-
isOk() {
|
|
79
|
-
return this.rslt === this.RAFT_OK;
|
|
80
|
-
}
|
|
72
|
+
rslt = 'failComms';
|
|
81
73
|
}
|
|
82
74
|
|
|
83
|
-
export
|
|
75
|
+
export type RaftReportMsg = {
|
|
84
76
|
msgType?: string;
|
|
85
|
-
rslt
|
|
77
|
+
rslt: string;
|
|
86
78
|
timeReceived?: number;
|
|
87
79
|
hexRd?: string;
|
|
88
80
|
elemName?: string;
|
|
@@ -92,19 +84,19 @@ export class RaftReportMsg {
|
|
|
92
84
|
msgBody?: string;
|
|
93
85
|
}
|
|
94
86
|
|
|
95
|
-
export
|
|
96
|
-
s
|
|
97
|
-
m
|
|
98
|
-
v
|
|
99
|
-
n
|
|
100
|
-
p
|
|
101
|
-
i
|
|
87
|
+
export type RaftHWFWStat = {
|
|
88
|
+
s: string;
|
|
89
|
+
m: string;
|
|
90
|
+
v: string;
|
|
91
|
+
n: string;
|
|
92
|
+
p: number;
|
|
93
|
+
i: number;
|
|
102
94
|
}
|
|
103
95
|
|
|
104
|
-
export
|
|
105
|
-
req
|
|
106
|
-
rslt
|
|
107
|
-
st: RaftHWFWStat
|
|
96
|
+
export type RaftHWFWUpdRslt = {
|
|
97
|
+
req: string;
|
|
98
|
+
rslt: string;
|
|
99
|
+
st: RaftHWFWStat;
|
|
108
100
|
}
|
|
109
101
|
|
|
110
102
|
export type RaftFWInfo = {
|
|
@@ -248,16 +240,18 @@ export type PystatusMsgType = {
|
|
|
248
240
|
};
|
|
249
241
|
|
|
250
242
|
// Phone BLE
|
|
251
|
-
export class
|
|
243
|
+
export class DiscoveredDevice {
|
|
252
244
|
_localName = '';
|
|
253
245
|
_name = '';
|
|
254
246
|
_id = '';
|
|
255
247
|
_rssi = -150;
|
|
256
|
-
|
|
248
|
+
_serviceUUIDs: string[] | null = [];
|
|
249
|
+
constructor(localName: string, name: string, id: string, rssi: number, serviceUUIDs: string[] | null) {
|
|
257
250
|
this._localName = localName;
|
|
258
251
|
this._name = name;
|
|
259
252
|
this._id = id;
|
|
260
253
|
this._rssi = rssi;
|
|
254
|
+
this._serviceUUIDs = serviceUUIDs;
|
|
261
255
|
}
|
|
262
256
|
get name(): string {
|
|
263
257
|
if (this._localName !== null && this._localName.length > 0) {
|
|
@@ -276,6 +270,9 @@ export class DiscoveredRIC {
|
|
|
276
270
|
if (this._rssi !== null) return this._rssi;
|
|
277
271
|
return -100;
|
|
278
272
|
}
|
|
273
|
+
get serviceUUIDs(): string[] | null {
|
|
274
|
+
return this._serviceUUIDs;
|
|
275
|
+
}
|
|
279
276
|
}
|
|
280
277
|
|
|
281
|
-
export type
|
|
278
|
+
export type DiscoveredDevicesCB = (discoveredDevicess: DiscoveredDevice[]) => void;
|
package/src/RaftUpdateManager.ts
CHANGED
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
//
|
|
9
9
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
10
|
|
|
11
|
-
import axios from "axios";
|
|
12
11
|
import RaftChannel from "./RaftChannel";
|
|
13
12
|
import RaftFileHandler from "./RaftFileHandler";
|
|
14
13
|
import RaftLog from "./RaftLog";
|
|
@@ -91,8 +90,12 @@ export default class RICUpdateManager {
|
|
|
91
90
|
|
|
92
91
|
// debug
|
|
93
92
|
RaftLog.debug(`Update URL: ${updateURL}`);
|
|
94
|
-
const response = await
|
|
95
|
-
|
|
93
|
+
const response = await fetch(updateURL, { method: 'GET' });
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
RaftLog.debug(`HTTP error! status: ${response.status}`);
|
|
96
|
+
return RaftUpdateEvent.UPDATE_CANT_REACH_SERVER;
|
|
97
|
+
}
|
|
98
|
+
this._latestVersionInfo = await response.json();
|
|
96
99
|
} catch (error) {
|
|
97
100
|
RaftLog.debug(`Failed to get latest version from internet ${error}`);
|
|
98
101
|
}
|
package/src/RaftUtils.ts
CHANGED
|
@@ -9,8 +9,6 @@
|
|
|
9
9
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
10
|
|
|
11
11
|
import RaftLog from "./RaftLog";
|
|
12
|
-
import semverGt from "semver/functions/gt";
|
|
13
|
-
import semverEq from "semver/functions/eq";
|
|
14
12
|
|
|
15
13
|
export default class RaftUtils {
|
|
16
14
|
static _isEndianSet = false;
|
|
@@ -446,9 +444,21 @@ export default class RaftUtils {
|
|
|
446
444
|
}
|
|
447
445
|
}
|
|
448
446
|
|
|
447
|
+
static semverGt(v1: string, v2: string): boolean {
|
|
448
|
+
const [major1, minor1, patch1] = v1.split('.').map(Number);
|
|
449
|
+
const [major2, minor2, patch2] = v2.split('.').map(Number);
|
|
450
|
+
if (major1 !== major2) return major1 > major2;
|
|
451
|
+
if (minor1 !== minor2) return minor1 > minor2;
|
|
452
|
+
return patch1 > patch2;
|
|
453
|
+
}
|
|
454
|
+
|
|
449
455
|
static isVersionGreater(v1: string, v2: string) {
|
|
450
456
|
try {
|
|
451
|
-
|
|
457
|
+
const [major1, minor1, patch1] = v1.split('.').map(Number);
|
|
458
|
+
const [major2, minor2, patch2] = v2.split('.').map(Number);
|
|
459
|
+
if (major1 !== major2) return major1 > major2;
|
|
460
|
+
if (minor1 !== minor2) return minor1 > minor2;
|
|
461
|
+
return patch1 > patch2;
|
|
452
462
|
} catch (e) {
|
|
453
463
|
// one of the two versions is invalid, return true
|
|
454
464
|
RaftLog.warn(`isVersionGreater - invalid version ${v1} or ${v2} ${e}`);
|
|
@@ -458,7 +468,7 @@ export default class RaftUtils {
|
|
|
458
468
|
|
|
459
469
|
static isVersionEqual(v1: string, v2: string) {
|
|
460
470
|
try {
|
|
461
|
-
return
|
|
471
|
+
return v1 === v2;
|
|
462
472
|
} catch (e) {
|
|
463
473
|
// one of the two versions is invalid, return false
|
|
464
474
|
RaftLog.error(`isVersionEqual - invalid version ${v1} or ${v2} ${e}`);
|
package/src/main.ts
CHANGED
|
@@ -23,10 +23,10 @@ export { default as RaftMsgHandler } from './RaftMsgHandler'
|
|
|
23
23
|
export { default as RaftStreamHandler } from './RaftStreamHandler';
|
|
24
24
|
export { default as RaftSystemUtils } from './RaftSystemUtils';
|
|
25
25
|
export { default as RaftUtils } from './RaftUtils';
|
|
26
|
-
export {
|
|
26
|
+
export { default as RaftSysTypeManager } from './RaftSysTypeManager';
|
|
27
|
+
export { default as RaftDeviceMgrIF } from './RaftDeviceMgrIF';
|
|
27
28
|
export { DeviceManager as RaftDeviceManager } from './RaftDeviceManager';
|
|
28
29
|
|
|
29
|
-
|
|
30
30
|
export * from './RaftTypes';
|
|
31
31
|
export * from './RaftSystemType';
|
|
32
32
|
export * from './RaftWifiTypes';
|