brilliantsole 0.0.27 → 0.0.29
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/assets/3d/anchor.glb +0 -0
- package/assets/3d/coin.glb +0 -0
- package/assets/3d/glasses.glb +0 -0
- package/assets/audio/bounceMedium.wav +0 -0
- package/assets/audio/bounceStrong.wav +0 -0
- package/assets/audio/bounceWeak.wav +0 -0
- package/assets/audio/coin.wav +0 -0
- package/assets/audio/getUp.wav +0 -0
- package/assets/audio/grab.wav +0 -0
- package/assets/audio/kick.wav +0 -0
- package/assets/audio/platterFadeIn old.wav +0 -0
- package/assets/audio/platterFadeIn.wav +0 -0
- package/assets/audio/platterFadeOut.wav +0 -0
- package/assets/audio/punch.wav +0 -0
- package/assets/audio/punchSqueak.wav +0 -0
- package/assets/audio/purr.wav +0 -0
- package/assets/audio/purrFadeOut.wav +0 -0
- package/assets/audio/release.wav +0 -0
- package/assets/audio/splat.wav +0 -0
- package/assets/audio/stomp.wav +0 -0
- package/build/brilliantsole.cjs +3091 -741
- package/build/brilliantsole.cjs.map +1 -1
- package/build/brilliantsole.js +2759 -709
- package/build/brilliantsole.js.map +1 -1
- package/build/brilliantsole.ls.js +2602 -543
- package/build/brilliantsole.ls.js.map +1 -1
- package/build/brilliantsole.min.js +1 -1
- package/build/brilliantsole.min.js.map +1 -1
- package/build/brilliantsole.module.d.ts +295 -65
- package/build/brilliantsole.module.js +2749 -710
- package/build/brilliantsole.module.js.map +1 -1
- package/build/brilliantsole.module.min.d.ts +295 -65
- package/build/brilliantsole.module.min.js +1 -1
- package/build/brilliantsole.module.min.js.map +1 -1
- package/build/brilliantsole.node.module.d.ts +289 -62
- package/build/brilliantsole.node.module.js +3080 -742
- package/build/brilliantsole.node.module.js.map +1 -1
- package/build/dts/BS-output.d.ts +10 -0
- package/build/dts/BS.d.ts +21 -8
- package/build/dts/CameraManager.d.ts +72 -0
- package/build/dts/Device.d.ts +64 -13
- package/build/dts/DeviceInformationManager.d.ts +4 -4
- package/build/dts/DeviceManager.d.ts +2 -0
- package/build/dts/FileTransferManager.d.ts +18 -8
- package/build/dts/InformationManager.d.ts +2 -0
- package/build/dts/MicrophoneManager.d.ts +88 -0
- package/build/dts/TfliteManager.d.ts +22 -2
- package/build/dts/WifiManager.d.ts +61 -0
- package/build/dts/connection/BaseConnectionManager.d.ts +35 -3
- package/build/dts/connection/ClientConnectionManager.d.ts +7 -2
- package/build/dts/connection/bluetooth/NobleConnectionManager.d.ts +2 -1
- package/build/dts/connection/bluetooth/WebBluetoothConnectionManager.d.ts +1 -0
- package/build/dts/connection/bluetooth/bluetoothUUIDs.d.ts +2 -2
- package/build/dts/connection/udp/UDPConnectionManager.d.ts +28 -0
- package/build/dts/connection/webSocket/WebSocketConnectionManager.d.ts +25 -0
- package/build/dts/devicePair/DevicePair.d.ts +5 -5
- package/build/dts/scanner/BaseScanner.d.ts +4 -1
- package/build/dts/scanner/NobleScanner.d.ts +2 -1
- package/build/dts/sensor/MotionSensorDataManager.d.ts +5 -2
- package/build/dts/sensor/SensorDataManager.d.ts +5 -4
- package/build/dts/server/BaseClient.d.ts +5 -3
- package/build/dts/server/ServerUtils.d.ts +1 -1
- package/build/dts/server/websocket/WebSocketUtils.d.ts +1 -1
- package/build/dts/utils/AudioUtils.d.ts +2 -0
- package/build/dts/utils/Console.d.ts +2 -0
- package/build/dts/utils/ThrottleUtils.d.ts +2 -0
- package/build/dts/vibration/VibrationManager.d.ts +19 -2
- package/build/index.d.ts +292 -62
- package/build/index.node.d.ts +286 -59
- package/examples/3d/scene.html +19 -5
- package/examples/3d-generic/index.html +144 -0
- package/examples/3d-generic/script.js +266 -0
- package/examples/basic/index.html +267 -17
- package/examples/basic/script.js +958 -105
- package/examples/camera/barcode-detector.js +109 -0
- package/examples/camera/depth-estimation.js +71 -0
- package/examples/camera/face-detector.js +119 -0
- package/examples/camera/face-landmark.js +111 -0
- package/examples/camera/gesture-recognition.js +97 -0
- package/examples/camera/hand-landmark.js +74 -0
- package/examples/camera/image-segmentation.js +98 -0
- package/examples/camera/image-to-text.js +43 -0
- package/examples/camera/image-upscale.js +75 -0
- package/examples/camera/index.html +129 -0
- package/examples/camera/object-detection.js +98 -0
- package/examples/camera/pose-landmark.js +60 -0
- package/examples/camera/script.js +316 -0
- package/examples/camera/utils.js +165 -0
- package/examples/camera/yolo-tiny.js +54 -0
- package/examples/camera/yolo.js +119 -0
- package/examples/edge-impulse/script.js +157 -48
- package/examples/edge-impulse-test/README.md +11 -0
- package/examples/edge-impulse-test/edge-impulse-standalone.js +7228 -0
- package/examples/edge-impulse-test/edge-impulse-standalone.wasm +0 -0
- package/examples/edge-impulse-test/index.html +75 -0
- package/examples/edge-impulse-test/run-impulse.js +135 -0
- package/examples/edge-impulse-test/script.js +200 -0
- package/examples/glasses-gestures/README.md +11 -0
- package/examples/glasses-gestures/edge-impulse-standalone.js +7228 -0
- package/examples/glasses-gestures/edge-impulse-standalone.wasm +0 -0
- package/examples/glasses-gestures/index.html +69 -0
- package/examples/glasses-gestures/run-impulse.js +135 -0
- package/examples/glasses-gestures/script.js +226 -0
- package/examples/gloves/edge-impulse-standalone.js +7228 -0
- package/examples/gloves/edge-impulse-standalone.wasm +0 -0
- package/examples/gloves/index.html +4 -1
- package/examples/gloves/run-impulse.js +135 -0
- package/examples/gloves/script.js +367 -51
- package/examples/graph/script.js +94 -37
- package/examples/microphone/gender.js +54 -0
- package/examples/microphone/index.html +102 -0
- package/examples/microphone/script.js +394 -0
- package/examples/microphone/utils.js +45 -0
- package/examples/microphone/whisper-realtime.js +166 -0
- package/examples/microphone/whisper.js +132 -0
- package/examples/punch/index.html +135 -0
- package/examples/punch/punch.tflite +0 -0
- package/examples/punch/script.js +169 -0
- package/examples/server/index.html +98 -22
- package/examples/server/script.js +317 -109
- package/examples/ukaton-firmware-update/merged-firmware.bin +0 -0
- package/examples/utils/aframe/aframe-master.min.js +2 -0
- package/examples/utils/aframe/bs-vibration.js +150 -0
- package/examples/utils/aframe/force-pushable.js +80 -0
- package/examples/utils/aframe/grabbable-anchor.js +46 -0
- package/examples/utils/aframe/grabbable-listener.js +31 -0
- package/examples/utils/aframe/grabbable-physics-body.js +190 -0
- package/examples/utils/aframe/grow-shrink.js +25 -0
- package/examples/utils/aframe/hand-punch.js +119 -0
- package/examples/utils/aframe/my-obb-collider.js +293 -0
- package/examples/utils/aframe/occlude-hand-tracking-controls.js +47 -0
- package/examples/utils/aframe/occlude-mesh.js +42 -0
- package/examples/utils/aframe/palm-up-detector.js +47 -0
- package/examples/utils/aframe/shadow-material.js +20 -0
- package/examples/utils/aframe/soft-shadow-light.js +9 -0
- package/examples/webxr-2/assets/3d/soccerBall.glb +0 -0
- package/examples/webxr-2/assets/audio/shellBounce.wav +0 -0
- package/examples/webxr-2/assets/audio/shellHit.wav +0 -0
- package/examples/webxr-2/assets/audio/shellKick.wav +0 -0
- package/examples/webxr-2/assets/audio/soccerBounce.wav +0 -0
- package/examples/webxr-2/assets/audio/soccerKick.mp3 +0 -0
- package/examples/webxr-2/assets/images/shellTexture.png +0 -0
- package/examples/webxr-2/components/bs-ankle.js +337 -0
- package/examples/webxr-2/components/coin.js +84 -0
- package/examples/webxr-2/components/custom-wrap.js +17 -0
- package/examples/webxr-2/components/goomba.js +3250 -0
- package/examples/webxr-2/components/init-shell-material.js +215 -0
- package/examples/webxr-2/components/platter.js +172 -0
- package/examples/webxr-2/components/shell.js +374 -0
- package/examples/webxr-2/components/soccer-ball.js +250 -0
- package/examples/webxr-2/components/squashed-goomba.js +249 -0
- package/examples/webxr-2/edge-impulse-standalone.js +7228 -0
- package/examples/webxr-2/edge-impulse-standalone.wasm +0 -0
- package/examples/webxr-2/index.html +996 -0
- package/examples/webxr-2/kick.tflite +0 -0
- package/examples/webxr-2/kick2.tflite +0 -0
- package/examples/webxr-2/run-impulse.js +135 -0
- package/examples/webxr-2/script.js +384 -0
- package/examples/webxr-3/components/bs-camera.js +65 -0
- package/examples/webxr-3/index.html +134 -0
- package/examples/webxr-3/script.js +432 -0
- package/package.json +2 -1
- package/src/.prettierrc +4 -0
- package/src/BS.ts +79 -8
- package/src/CameraManager.ts +497 -0
- package/src/Device.ts +691 -86
- package/src/DeviceInformationManager.ts +19 -10
- package/src/DeviceManager.ts +85 -25
- package/src/FileTransferManager.ts +145 -20
- package/src/InformationManager.ts +40 -15
- package/src/MicrophoneManager.ts +599 -0
- package/src/TfliteManager.ts +171 -25
- package/src/WifiManager.ts +323 -0
- package/src/connection/BaseConnectionManager.ts +130 -30
- package/src/connection/ClientConnectionManager.ts +34 -10
- package/src/connection/bluetooth/BluetoothConnectionManager.ts +8 -2
- package/src/connection/bluetooth/NobleConnectionManager.ts +147 -41
- package/src/connection/bluetooth/WebBluetoothConnectionManager.ts +99 -34
- package/src/connection/bluetooth/bluetoothUUIDs.ts +40 -13
- package/src/connection/udp/UDPConnectionManager.ts +356 -0
- package/src/connection/websocket/WebSocketConnectionManager.ts +282 -0
- package/src/devicePair/DevicePair.ts +95 -25
- package/src/devicePair/DevicePairPressureSensorDataManager.ts +27 -7
- package/src/scanner/BaseScanner.ts +49 -11
- package/src/scanner/NobleScanner.ts +76 -14
- package/src/sensor/MotionSensorDataManager.ts +21 -6
- package/src/sensor/PressureSensorDataManager.ts +37 -8
- package/src/sensor/SensorConfigurationManager.ts +73 -22
- package/src/sensor/SensorDataManager.ts +109 -23
- package/src/server/BaseClient.ts +150 -36
- package/src/server/BaseServer.ts +50 -2
- package/src/server/ServerUtils.ts +39 -9
- package/src/server/udp/UDPServer.ts +73 -22
- package/src/server/udp/UDPUtils.ts +9 -2
- package/src/server/websocket/WebSocketClient.ts +27 -7
- package/src/server/websocket/WebSocketUtils.ts +4 -2
- package/src/utils/AudioUtils.ts +65 -0
- package/src/utils/Console.ts +62 -9
- package/src/utils/ParseUtils.ts +24 -5
- package/src/utils/ThrottleUtils.ts +62 -0
- package/src/utils/Timer.ts +1 -1
- package/src/vibration/VibrationManager.ts +166 -40
|
@@ -5,21 +5,70 @@ import { FileTransferMessageTypes } from "../FileTransferManager.ts";
|
|
|
5
5
|
import { TfliteMessageTypes } from "../TfliteManager.ts";
|
|
6
6
|
import { concatenateArrayBuffers } from "../utils/ArrayBufferUtils.ts";
|
|
7
7
|
import { parseMessage } from "../utils/ParseUtils.ts";
|
|
8
|
-
import {
|
|
8
|
+
import { DeviceInformationTypes } from "../DeviceInformationManager.ts";
|
|
9
9
|
import { InformationMessageTypes } from "../InformationManager.ts";
|
|
10
10
|
import { VibrationMessageTypes } from "../vibration/VibrationManager.ts";
|
|
11
11
|
import { SensorConfigurationMessageTypes } from "../sensor/SensorConfigurationManager.ts";
|
|
12
12
|
import { SensorDataMessageTypes } from "../sensor/SensorDataManager.ts";
|
|
13
|
+
import { WifiMessageTypes } from "../WifiManager.ts";
|
|
14
|
+
import { CameraMessageTypes } from "../CameraManager.ts";
|
|
15
|
+
import { MicrophoneMessageTypes } from "../MicrophoneManager.ts";
|
|
13
16
|
|
|
14
17
|
const _console = createConsole("BaseConnectionManager", { log: false });
|
|
15
18
|
|
|
16
|
-
export const ConnectionTypes = [
|
|
19
|
+
export const ConnectionTypes = [
|
|
20
|
+
"webBluetooth",
|
|
21
|
+
"noble",
|
|
22
|
+
"client",
|
|
23
|
+
"webSocket",
|
|
24
|
+
"udp",
|
|
25
|
+
] as const;
|
|
17
26
|
export type ConnectionType = (typeof ConnectionTypes)[number];
|
|
18
27
|
|
|
19
|
-
export const
|
|
28
|
+
export const ClientConnectionTypes = ["noble", "webSocket", "udp"] as const;
|
|
29
|
+
export type ClientConnectionType = (typeof ClientConnectionTypes)[number];
|
|
30
|
+
|
|
31
|
+
interface BaseConnectOptions {
|
|
32
|
+
type: "client" | "webBluetooth" | "webSocket" | "udp";
|
|
33
|
+
}
|
|
34
|
+
export interface WebBluetoothConnectOptions extends BaseConnectOptions {
|
|
35
|
+
type: "webBluetooth";
|
|
36
|
+
}
|
|
37
|
+
interface BaseWifiConnectOptions extends BaseConnectOptions {
|
|
38
|
+
ipAddress: string;
|
|
39
|
+
}
|
|
40
|
+
export interface ClientConnectOptions extends BaseConnectOptions {
|
|
41
|
+
type: "client";
|
|
42
|
+
subType?: "noble" | "webSocket" | "udp";
|
|
43
|
+
}
|
|
44
|
+
export interface WebSocketConnectOptions extends BaseWifiConnectOptions {
|
|
45
|
+
type: "webSocket";
|
|
46
|
+
isWifiSecure?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface UDPConnectOptions extends BaseWifiConnectOptions {
|
|
49
|
+
type: "udp";
|
|
50
|
+
//sendPort: number;
|
|
51
|
+
receivePort?: number;
|
|
52
|
+
}
|
|
53
|
+
export type ConnectOptions =
|
|
54
|
+
| WebBluetoothConnectOptions
|
|
55
|
+
| WebSocketConnectOptions
|
|
56
|
+
| UDPConnectOptions
|
|
57
|
+
| ClientConnectOptions;
|
|
58
|
+
|
|
59
|
+
export const ConnectionStatuses = [
|
|
60
|
+
"notConnected",
|
|
61
|
+
"connecting",
|
|
62
|
+
"connected",
|
|
63
|
+
"disconnecting",
|
|
64
|
+
] as const;
|
|
20
65
|
export type ConnectionStatus = (typeof ConnectionStatuses)[number];
|
|
21
66
|
|
|
22
|
-
export const ConnectionEventTypes = [
|
|
67
|
+
export const ConnectionEventTypes = [
|
|
68
|
+
...ConnectionStatuses,
|
|
69
|
+
"connectionStatus",
|
|
70
|
+
"isConnected",
|
|
71
|
+
] as const;
|
|
23
72
|
export type ConnectionEventType = (typeof ConnectionEventTypes)[number];
|
|
24
73
|
|
|
25
74
|
export interface ConnectionStatusEventMessages {
|
|
@@ -41,8 +90,11 @@ export const TxRxMessageTypes = [
|
|
|
41
90
|
...SensorConfigurationMessageTypes,
|
|
42
91
|
...SensorDataMessageTypes,
|
|
43
92
|
...VibrationMessageTypes,
|
|
44
|
-
...TfliteMessageTypes,
|
|
45
93
|
...FileTransferMessageTypes,
|
|
94
|
+
...TfliteMessageTypes,
|
|
95
|
+
...WifiMessageTypes,
|
|
96
|
+
...CameraMessageTypes,
|
|
97
|
+
...MicrophoneMessageTypes,
|
|
46
98
|
] as const;
|
|
47
99
|
export type TxRxMessageType = (typeof TxRxMessageTypes)[number];
|
|
48
100
|
|
|
@@ -53,11 +105,12 @@ export const BatteryLevelMessageTypes = ["batteryLevel"] as const;
|
|
|
53
105
|
export type BatteryLevelMessageType = (typeof BatteryLevelMessageTypes)[number];
|
|
54
106
|
|
|
55
107
|
export const MetaConnectionMessageTypes = ["rx", "tx"] as const;
|
|
56
|
-
export type MetaConnectionMessageType =
|
|
108
|
+
export type MetaConnectionMessageType =
|
|
109
|
+
(typeof MetaConnectionMessageTypes)[number];
|
|
57
110
|
|
|
58
111
|
export const ConnectionMessageTypes = [
|
|
59
112
|
...BatteryLevelMessageTypes,
|
|
60
|
-
...
|
|
113
|
+
...DeviceInformationTypes,
|
|
61
114
|
...MetaConnectionMessageTypes,
|
|
62
115
|
...TxRxMessageTypes,
|
|
63
116
|
...SMPMessageTypes,
|
|
@@ -65,7 +118,10 @@ export const ConnectionMessageTypes = [
|
|
|
65
118
|
export type ConnectionMessageType = (typeof ConnectionMessageTypes)[number];
|
|
66
119
|
|
|
67
120
|
export type ConnectionStatusCallback = (status: ConnectionStatus) => void;
|
|
68
|
-
export type MessageReceivedCallback = (
|
|
121
|
+
export type MessageReceivedCallback = (
|
|
122
|
+
messageType: ConnectionMessageType,
|
|
123
|
+
dataView: DataView
|
|
124
|
+
) => void;
|
|
69
125
|
export type MessagesReceivedCallback = () => void;
|
|
70
126
|
|
|
71
127
|
abstract class BaseConnectionManager {
|
|
@@ -101,7 +157,10 @@ abstract class BaseConnectionManager {
|
|
|
101
157
|
|
|
102
158
|
/** @throws {Error} if not supported */
|
|
103
159
|
#assertIsSupported() {
|
|
104
|
-
_console.assertWithError(
|
|
160
|
+
_console.assertWithError(
|
|
161
|
+
this.isSupported,
|
|
162
|
+
`${this.constructor.name} is not supported`
|
|
163
|
+
);
|
|
105
164
|
}
|
|
106
165
|
|
|
107
166
|
constructor() {
|
|
@@ -115,7 +174,9 @@ abstract class BaseConnectionManager {
|
|
|
115
174
|
protected set status(newConnectionStatus) {
|
|
116
175
|
_console.assertEnumWithError(newConnectionStatus, ConnectionStatuses);
|
|
117
176
|
if (this.#status == newConnectionStatus) {
|
|
118
|
-
_console.log(
|
|
177
|
+
_console.log(
|
|
178
|
+
`tried to assign same connection status "${newConnectionStatus}"`
|
|
179
|
+
);
|
|
119
180
|
return;
|
|
120
181
|
}
|
|
121
182
|
_console.log(`new connection status "${newConnectionStatus}"`);
|
|
@@ -129,7 +190,7 @@ abstract class BaseConnectionManager {
|
|
|
129
190
|
}
|
|
130
191
|
|
|
131
192
|
if (this.#status == "notConnected") {
|
|
132
|
-
this.mtu = this
|
|
193
|
+
this.mtu = this.defaultMtu;
|
|
133
194
|
}
|
|
134
195
|
}
|
|
135
196
|
|
|
@@ -142,29 +203,35 @@ abstract class BaseConnectionManager {
|
|
|
142
203
|
}
|
|
143
204
|
|
|
144
205
|
/** @throws {Error} if connected */
|
|
145
|
-
|
|
206
|
+
protected assertIsNotConnected() {
|
|
146
207
|
_console.assertWithError(!this.isConnected, "device is already connected");
|
|
147
208
|
}
|
|
148
209
|
/** @throws {Error} if connecting */
|
|
149
210
|
#assertIsNotConnecting() {
|
|
150
|
-
_console.assertWithError(
|
|
211
|
+
_console.assertWithError(
|
|
212
|
+
this.status != "connecting",
|
|
213
|
+
"device is already connecting"
|
|
214
|
+
);
|
|
151
215
|
}
|
|
152
216
|
/** @throws {Error} if not connected */
|
|
153
|
-
|
|
217
|
+
protected assertIsConnected() {
|
|
154
218
|
_console.assertWithError(this.isConnected, "device is not connected");
|
|
155
219
|
}
|
|
156
220
|
/** @throws {Error} if disconnecting */
|
|
157
221
|
#assertIsNotDisconnecting() {
|
|
158
|
-
_console.assertWithError(
|
|
222
|
+
_console.assertWithError(
|
|
223
|
+
this.status != "disconnecting",
|
|
224
|
+
"device is already disconnecting"
|
|
225
|
+
);
|
|
159
226
|
}
|
|
160
227
|
/** @throws {Error} if not connected or is disconnecting */
|
|
161
|
-
|
|
162
|
-
this
|
|
228
|
+
assertIsConnectedAndNotDisconnecting() {
|
|
229
|
+
this.assertIsConnected();
|
|
163
230
|
this.#assertIsNotDisconnecting();
|
|
164
231
|
}
|
|
165
232
|
|
|
166
233
|
async connect() {
|
|
167
|
-
this
|
|
234
|
+
this.assertIsNotConnected();
|
|
168
235
|
this.#assertIsNotConnecting();
|
|
169
236
|
this.status = "connecting";
|
|
170
237
|
}
|
|
@@ -172,26 +239,31 @@ abstract class BaseConnectionManager {
|
|
|
172
239
|
return false;
|
|
173
240
|
}
|
|
174
241
|
async reconnect() {
|
|
175
|
-
this
|
|
242
|
+
this.assertIsNotConnected();
|
|
176
243
|
this.#assertIsNotConnecting();
|
|
177
|
-
_console.
|
|
244
|
+
_console.assertWithError(this.canReconnect, "unable to reconnect");
|
|
245
|
+
this.status = "connecting";
|
|
246
|
+
_console.log("attempting to reconnect...");
|
|
178
247
|
}
|
|
179
248
|
async disconnect() {
|
|
180
|
-
this
|
|
249
|
+
this.assertIsConnected();
|
|
181
250
|
this.#assertIsNotDisconnecting();
|
|
182
251
|
this.status = "disconnecting";
|
|
183
252
|
_console.log("disconnecting from device...");
|
|
184
253
|
}
|
|
185
254
|
|
|
186
255
|
async sendSmpMessage(data: ArrayBuffer) {
|
|
187
|
-
this
|
|
256
|
+
this.assertIsConnectedAndNotDisconnecting();
|
|
188
257
|
_console.log("sending smp message", data);
|
|
189
258
|
}
|
|
190
259
|
|
|
191
260
|
#pendingMessages: TxMessage[] = [];
|
|
192
261
|
#isSendingMessages = false;
|
|
193
|
-
async sendTxMessages(
|
|
194
|
-
|
|
262
|
+
async sendTxMessages(
|
|
263
|
+
messages: TxMessage[] | undefined,
|
|
264
|
+
sendImmediately: boolean = true
|
|
265
|
+
) {
|
|
266
|
+
this.assertIsConnectedAndNotDisconnecting();
|
|
195
267
|
|
|
196
268
|
if (messages) {
|
|
197
269
|
this.#pendingMessages.push(...messages);
|
|
@@ -207,6 +279,10 @@ abstract class BaseConnectionManager {
|
|
|
207
279
|
_console.log("already sending messages - waiting until later");
|
|
208
280
|
return;
|
|
209
281
|
}
|
|
282
|
+
if (this.#pendingMessages.length == 0) {
|
|
283
|
+
_console.log("no pendingMessages");
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
210
286
|
this.#isSendingMessages = true;
|
|
211
287
|
|
|
212
288
|
_console.log("sendTxMessages", this.#pendingMessages.slice());
|
|
@@ -222,7 +298,11 @@ abstract class BaseConnectionManager {
|
|
|
222
298
|
|
|
223
299
|
if (this.mtu) {
|
|
224
300
|
while (arrayBuffers.length > 0) {
|
|
225
|
-
if (
|
|
301
|
+
if (
|
|
302
|
+
arrayBuffers.every(
|
|
303
|
+
(arrayBuffer) => arrayBuffer.byteLength > this.mtu! - 3
|
|
304
|
+
)
|
|
305
|
+
) {
|
|
226
306
|
_console.log("every arrayBuffer is too big to send");
|
|
227
307
|
break;
|
|
228
308
|
}
|
|
@@ -231,10 +311,14 @@ abstract class BaseConnectionManager {
|
|
|
231
311
|
let arrayBufferCount = 0;
|
|
232
312
|
arrayBuffers.some((arrayBuffer) => {
|
|
233
313
|
if (arrayBufferByteLength + arrayBuffer.byteLength > this.mtu! - 3) {
|
|
234
|
-
_console.log(
|
|
314
|
+
_console.log(
|
|
315
|
+
`stopping appending arrayBuffers ( length ${arrayBuffer.byteLength} too much)`
|
|
316
|
+
);
|
|
235
317
|
return true;
|
|
236
318
|
}
|
|
237
|
-
_console.log(
|
|
319
|
+
_console.log(
|
|
320
|
+
`allowing arrayBuffer with length ${arrayBuffer.byteLength}`
|
|
321
|
+
);
|
|
238
322
|
arrayBufferCount++;
|
|
239
323
|
arrayBufferByteLength += arrayBuffer.byteLength;
|
|
240
324
|
});
|
|
@@ -252,18 +336,26 @@ abstract class BaseConnectionManager {
|
|
|
252
336
|
}
|
|
253
337
|
|
|
254
338
|
this.#isSendingMessages = false;
|
|
339
|
+
|
|
340
|
+
this.sendTxMessages(undefined, true);
|
|
255
341
|
}
|
|
256
342
|
|
|
257
|
-
|
|
343
|
+
protected defaultMtu = 23;
|
|
258
344
|
//mtu?: number;
|
|
259
|
-
mtu?: number = this
|
|
345
|
+
mtu?: number = this.defaultMtu;
|
|
260
346
|
|
|
261
347
|
async sendTxData(data: ArrayBuffer) {
|
|
262
348
|
_console.log("sendTxData", data);
|
|
263
349
|
}
|
|
264
350
|
|
|
265
351
|
parseRxMessage(dataView: DataView) {
|
|
266
|
-
parseMessage(
|
|
352
|
+
parseMessage(
|
|
353
|
+
dataView,
|
|
354
|
+
TxRxMessageTypes,
|
|
355
|
+
this.#onRxMessage.bind(this),
|
|
356
|
+
null,
|
|
357
|
+
true
|
|
358
|
+
);
|
|
267
359
|
this.onMessagesReceived!();
|
|
268
360
|
}
|
|
269
361
|
|
|
@@ -285,6 +377,14 @@ abstract class BaseConnectionManager {
|
|
|
285
377
|
this.#isSendingMessages = false;
|
|
286
378
|
this.#pendingMessages.length = 0;
|
|
287
379
|
}
|
|
380
|
+
|
|
381
|
+
remove() {
|
|
382
|
+
this.clear();
|
|
383
|
+
|
|
384
|
+
this.onStatusUpdated = undefined;
|
|
385
|
+
this.onMessageReceived = undefined;
|
|
386
|
+
this.onMessagesReceived = undefined;
|
|
387
|
+
}
|
|
288
388
|
}
|
|
289
389
|
|
|
290
390
|
export default BaseConnectionManager;
|
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
import { createConsole } from "../utils/Console.ts";
|
|
2
2
|
import { isInBrowser } from "../utils/environment.ts";
|
|
3
|
-
import BaseConnectionManager, {
|
|
3
|
+
import BaseConnectionManager, {
|
|
4
|
+
ConnectionType,
|
|
5
|
+
ConnectionMessageType,
|
|
6
|
+
ClientConnectionType,
|
|
7
|
+
} from "./BaseConnectionManager.ts";
|
|
4
8
|
import { DeviceEventTypes } from "../Device.ts";
|
|
5
9
|
import { parseMessage } from "../utils/ParseUtils.ts";
|
|
6
|
-
import {
|
|
10
|
+
import { DeviceInformationTypes } from "../DeviceInformationManager.ts";
|
|
7
11
|
import { DeviceEventType } from "../Device.ts";
|
|
8
12
|
import { ClientDeviceMessage } from "../server/ServerUtils.ts";
|
|
9
13
|
import BaseClient from "../server/BaseClient.ts";
|
|
14
|
+
import { DiscoveredDevice } from "../BS.ts";
|
|
10
15
|
|
|
11
16
|
const _console = createConsole("ClientConnectionManager", { log: false });
|
|
12
17
|
|
|
13
|
-
export type SendClientMessageCallback = (
|
|
18
|
+
export type SendClientMessageCallback = (
|
|
19
|
+
...messages: ClientDeviceMessage[]
|
|
20
|
+
) => void;
|
|
14
21
|
|
|
15
|
-
|
|
22
|
+
export type SendClientConnectMessageCallback = (
|
|
23
|
+
connectionType?: ClientConnectionType
|
|
24
|
+
) => void;
|
|
25
|
+
|
|
26
|
+
const ClientDeviceInformationMessageTypes: ConnectionMessageType[] = [
|
|
27
|
+
...DeviceInformationTypes,
|
|
28
|
+
"batteryLevel",
|
|
29
|
+
];
|
|
16
30
|
|
|
17
31
|
class ClientConnectionManager extends BaseConnectionManager {
|
|
18
32
|
static get isSupported() {
|
|
@@ -22,12 +36,15 @@ class ClientConnectionManager extends BaseConnectionManager {
|
|
|
22
36
|
return "client";
|
|
23
37
|
}
|
|
24
38
|
|
|
39
|
+
subType?: ClientConnectionType;
|
|
40
|
+
|
|
25
41
|
get canUpdateFirmware() {
|
|
26
42
|
// FIX - how to know if it has an smp characteristic?
|
|
27
43
|
return false;
|
|
28
44
|
}
|
|
29
45
|
|
|
30
46
|
client!: BaseClient;
|
|
47
|
+
discoveredDevice!: DiscoveredDevice;
|
|
31
48
|
|
|
32
49
|
#bluetoothId!: string;
|
|
33
50
|
get bluetoothId() {
|
|
@@ -67,7 +84,7 @@ class ClientConnectionManager extends BaseConnectionManager {
|
|
|
67
84
|
|
|
68
85
|
async connect() {
|
|
69
86
|
await super.connect();
|
|
70
|
-
this.sendClientConnectMessage();
|
|
87
|
+
this.sendClientConnectMessage(this.subType);
|
|
71
88
|
}
|
|
72
89
|
async disconnect() {
|
|
73
90
|
await super.disconnect();
|
|
@@ -79,13 +96,13 @@ class ClientConnectionManager extends BaseConnectionManager {
|
|
|
79
96
|
}
|
|
80
97
|
async reconnect() {
|
|
81
98
|
await super.reconnect();
|
|
82
|
-
|
|
83
|
-
this.connect();
|
|
99
|
+
this.sendClientConnectMessage();
|
|
84
100
|
}
|
|
85
101
|
|
|
86
102
|
sendClientMessage!: SendClientMessageCallback;
|
|
87
|
-
sendClientConnectMessage!:
|
|
103
|
+
sendClientConnectMessage!: SendClientConnectMessageCallback;
|
|
88
104
|
sendClientDisconnectMessage!: Function;
|
|
105
|
+
sendRequiredDeviceInformationMessage!: Function;
|
|
89
106
|
|
|
90
107
|
async sendSmpMessage(data: ArrayBuffer) {
|
|
91
108
|
super.sendSmpMessage(data);
|
|
@@ -101,12 +118,19 @@ class ClientConnectionManager extends BaseConnectionManager {
|
|
|
101
118
|
}
|
|
102
119
|
|
|
103
120
|
#requestDeviceInformation() {
|
|
104
|
-
this.sendClientMessage(...ClientDeviceInformationMessageTypes);
|
|
121
|
+
//this.sendClientMessage(...ClientDeviceInformationMessageTypes);
|
|
122
|
+
this.sendRequiredDeviceInformationMessage();
|
|
105
123
|
}
|
|
106
124
|
|
|
107
125
|
onClientMessage(dataView: DataView) {
|
|
108
126
|
_console.log({ dataView });
|
|
109
|
-
parseMessage(
|
|
127
|
+
parseMessage(
|
|
128
|
+
dataView,
|
|
129
|
+
DeviceEventTypes,
|
|
130
|
+
this.#onClientMessageCallback.bind(this),
|
|
131
|
+
null,
|
|
132
|
+
true
|
|
133
|
+
);
|
|
110
134
|
this.onMessagesReceived!();
|
|
111
135
|
}
|
|
112
136
|
|
|
@@ -13,7 +13,10 @@ abstract class BluetoothConnectionManager extends BaseConnectionManager {
|
|
|
13
13
|
|
|
14
14
|
isInRange = true;
|
|
15
15
|
|
|
16
|
-
protected onCharacteristicValueChanged(
|
|
16
|
+
protected onCharacteristicValueChanged(
|
|
17
|
+
characteristicName: BluetoothCharacteristicName,
|
|
18
|
+
dataView: DataView
|
|
19
|
+
) {
|
|
17
20
|
if (characteristicName == "rx") {
|
|
18
21
|
this.parseRxMessage(dataView);
|
|
19
22
|
} else {
|
|
@@ -21,7 +24,10 @@ abstract class BluetoothConnectionManager extends BaseConnectionManager {
|
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
|
|
24
|
-
protected async writeCharacteristic(
|
|
27
|
+
protected async writeCharacteristic(
|
|
28
|
+
characteristicName: BluetoothCharacteristicName,
|
|
29
|
+
data: ArrayBuffer
|
|
30
|
+
) {
|
|
25
31
|
_console.log("writeCharacteristic", ...arguments);
|
|
26
32
|
}
|
|
27
33
|
|