brilliantsole 0.0.26 → 0.0.28
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/README.md +16 -10
- package/assets/3d/anchor.glb +0 -0
- package/assets/3d/coin.glb +0 -0
- package/assets/3d/glasses.glb +0 -0
- package/assets/3d/rightHand.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/assets/images/ukaton-pressure-0.svg +9 -0
- package/assets/images/ukaton-pressure-1.svg +9 -0
- package/assets/images/ukaton-pressure-10.svg +9 -0
- package/assets/images/ukaton-pressure-11.svg +9 -0
- package/assets/images/ukaton-pressure-12.svg +9 -0
- package/assets/images/ukaton-pressure-13.svg +9 -0
- package/assets/images/ukaton-pressure-14.svg +9 -0
- package/assets/images/ukaton-pressure-15.svg +9 -0
- package/assets/images/ukaton-pressure-2.svg +9 -0
- package/assets/images/ukaton-pressure-3.svg +9 -0
- package/assets/images/ukaton-pressure-4.svg +9 -0
- package/assets/images/ukaton-pressure-5.svg +9 -0
- package/assets/images/ukaton-pressure-6.svg +9 -0
- package/assets/images/ukaton-pressure-7.svg +9 -0
- package/assets/images/ukaton-pressure-8.svg +9 -0
- package/assets/images/ukaton-pressure-9.svg +9 -0
- package/assets/images/ukaton-right-insole.svg +798 -0
- package/build/brilliantsole.cjs +2870 -882
- package/build/brilliantsole.cjs.map +1 -1
- package/build/brilliantsole.js +2477 -782
- package/build/brilliantsole.js.map +1 -1
- package/build/brilliantsole.ls.js +2260 -592
- 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 +302 -116
- package/build/brilliantsole.module.js +2468 -782
- package/build/brilliantsole.module.js.map +1 -1
- package/build/brilliantsole.module.min.d.ts +302 -116
- package/build/brilliantsole.module.min.js +1 -1
- package/build/brilliantsole.module.min.js.map +1 -1
- package/build/brilliantsole.node.module.d.ts +295 -113
- package/build/brilliantsole.node.module.js +2860 -882
- 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 -9
- package/build/dts/CameraManager.d.ts +72 -0
- package/build/dts/Device.d.ts +53 -16
- package/build/dts/DeviceInformationManager.d.ts +4 -4
- package/build/dts/DeviceManager.d.ts +3 -0
- package/build/dts/FileTransferManager.d.ts +18 -8
- package/build/dts/InformationManager.d.ts +8 -5
- package/build/dts/TfliteManager.d.ts +22 -2
- package/build/dts/WifiManager.d.ts +61 -0
- package/build/dts/connection/BaseConnectionManager.d.ts +37 -3
- package/build/dts/connection/ClientConnectionManager.d.ts +11 -2
- package/build/dts/connection/bluetooth/BluetoothConnectionManager.d.ts +1 -0
- package/build/dts/connection/bluetooth/NobleConnectionManager.d.ts +3 -1
- package/build/dts/connection/bluetooth/WebBluetoothConnectionManager.d.ts +2 -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 +14 -10
- package/build/dts/devicePair/DevicePairPressureSensorDataManager.d.ts +8 -4
- package/build/dts/devicePair/DevicePairSensorDataManager.d.ts +2 -2
- 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 +6 -3
- package/build/dts/server/ServerUtils.d.ts +1 -1
- package/build/dts/server/websocket/WebSocketUtils.d.ts +1 -1
- package/build/dts/utils/CenterOfPressureHelper.d.ts +2 -2
- package/build/dts/utils/Console.d.ts +2 -0
- package/build/dts/utils/MathUtils.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 +299 -113
- package/build/index.node.d.ts +292 -110
- package/examples/3d/scene.html +19 -5
- package/examples/3d/script.js +90 -17
- package/examples/3d-generic/index.html +144 -0
- package/examples/3d-generic/script.js +266 -0
- package/examples/balance/script.js +2 -1
- package/examples/basic/index.html +232 -18
- package/examples/basic/script.js +746 -106
- package/examples/bottango/index.html +11 -1
- package/examples/bottango/script.js +2 -2
- package/examples/center-of-pressure/index.html +114 -114
- package/examples/center-of-pressure/script.js +1 -1
- package/examples/device-pair/index.html +58 -58
- package/examples/device-pair/script.js +12 -8
- package/examples/edge-impulse/script.js +135 -44
- 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/gloves/edge-impulse-standalone.js +7228 -0
- package/examples/gloves/edge-impulse-standalone.wasm +0 -0
- package/examples/gloves/index.html +119 -0
- package/examples/gloves/run-impulse.js +135 -0
- package/examples/gloves/scene.html +124 -0
- package/examples/gloves/script.js +931 -0
- package/examples/graph/index.html +11 -1
- package/examples/graph/script.js +94 -37
- package/examples/pressure/index.html +180 -12
- package/examples/pressure/script.js +144 -7
- package/examples/punch/index.html +135 -0
- package/examples/punch/punch.tflite +0 -0
- package/examples/punch/script.js +169 -0
- package/examples/recording/index.html +191 -183
- package/examples/server/index.html +109 -23
- package/examples/server/script.js +322 -111
- package/examples/ukaton-firmware-update/index.html +20 -0
- package/examples/ukaton-firmware-update/manifest.json +11 -0
- 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/script.js +3 -3
- 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/package.json +2 -1
- package/src/.prettierrc +4 -0
- package/src/BS.ts +66 -9
- package/src/CameraManager.ts +499 -0
- package/src/Device.ts +620 -92
- package/src/DeviceInformationManager.ts +22 -11
- package/src/DeviceManager.ts +94 -25
- package/src/FileTransferManager.ts +146 -21
- package/src/FirmwareManager.ts +1 -1
- package/src/InformationManager.ts +62 -20
- package/src/TfliteManager.ts +172 -26
- package/src/WifiManager.ts +323 -0
- package/src/connection/BaseConnectionManager.ts +145 -30
- package/src/connection/ClientConnectionManager.ts +47 -11
- package/src/connection/bluetooth/BluetoothConnectionManager.ts +14 -3
- package/src/connection/bluetooth/NobleConnectionManager.ts +155 -42
- package/src/connection/bluetooth/WebBluetoothConnectionManager.ts +104 -35
- 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 +145 -49
- package/src/devicePair/DevicePairPressureSensorDataManager.ts +72 -24
- package/src/devicePair/DevicePairSensorDataManager.ts +5 -5
- package/src/scanner/BaseScanner.ts +49 -11
- package/src/scanner/NobleScanner.ts +81 -17
- package/src/sensor/BarometerSensorDataManager.ts +1 -1
- package/src/sensor/MotionSensorDataManager.ts +22 -7
- package/src/sensor/PressureSensorDataManager.ts +47 -13
- package/src/sensor/SensorConfigurationManager.ts +75 -24
- package/src/sensor/SensorDataManager.ts +107 -26
- package/src/server/BaseClient.ts +192 -37
- package/src/server/BaseServer.ts +201 -43
- package/src/server/ServerUtils.ts +39 -9
- package/src/server/udp/UDPServer.ts +74 -23
- package/src/server/udp/UDPUtils.ts +9 -2
- package/src/server/websocket/WebSocketClient.ts +30 -9
- package/src/server/websocket/WebSocketServer.ts +1 -1
- package/src/server/websocket/WebSocketUtils.ts +4 -2
- package/src/utils/CenterOfPressureHelper.ts +5 -5
- package/src/utils/Console.ts +62 -9
- package/src/utils/MathUtils.ts +31 -1
- package/src/utils/ParseUtils.ts +25 -6
- package/src/utils/ThrottleUtils.ts +62 -0
- package/src/utils/Timer.ts +1 -1
- package/src/utils/checksum.ts +1 -1
- package/src/utils/mcumgr.js +1 -1
- package/src/vibration/VibrationManager.ts +166 -40
|
@@ -20,7 +20,12 @@ function setUrlParam(key, value) {
|
|
|
20
20
|
searchParams.delete(key);
|
|
21
21
|
}
|
|
22
22
|
let newUrl =
|
|
23
|
-
window.location.protocol +
|
|
23
|
+
window.location.protocol +
|
|
24
|
+
"//" +
|
|
25
|
+
window.location.host +
|
|
26
|
+
window.location.pathname +
|
|
27
|
+
"?" +
|
|
28
|
+
searchParams.toString();
|
|
24
29
|
window.history.pushState({ path: newUrl }, "", newUrl);
|
|
25
30
|
}
|
|
26
31
|
}
|
|
@@ -61,7 +66,9 @@ client.addEventListener("connectionStatus", () => {
|
|
|
61
66
|
case "connected":
|
|
62
67
|
case "notConnected":
|
|
63
68
|
toggleConnectionButton.disabled = false;
|
|
64
|
-
toggleConnectionButton.innerText = client.isConnected
|
|
69
|
+
toggleConnectionButton.innerText = client.isConnected
|
|
70
|
+
? "disconnect"
|
|
71
|
+
: "connect";
|
|
65
72
|
break;
|
|
66
73
|
case "connecting":
|
|
67
74
|
case "disconnecting":
|
|
@@ -74,7 +81,9 @@ client.addEventListener("connectionStatus", () => {
|
|
|
74
81
|
// SCANNER
|
|
75
82
|
|
|
76
83
|
/** @type {HTMLInputElement} */
|
|
77
|
-
const isScanningAvailableCheckbox = document.getElementById(
|
|
84
|
+
const isScanningAvailableCheckbox = document.getElementById(
|
|
85
|
+
"isScanningAvailable"
|
|
86
|
+
);
|
|
78
87
|
client.addEventListener("isScanningAvailable", () => {
|
|
79
88
|
isScanningAvailableCheckbox.checked = client.isScanningAvailable;
|
|
80
89
|
});
|
|
@@ -94,7 +103,9 @@ client.addEventListener("isScanning", () => {
|
|
|
94
103
|
// DISCOVERED DEVICES
|
|
95
104
|
|
|
96
105
|
/** @type {HTMLTemplateElement} */
|
|
97
|
-
const discoveredDeviceTemplate = document.getElementById(
|
|
106
|
+
const discoveredDeviceTemplate = document.getElementById(
|
|
107
|
+
"discoveredDeviceTemplate"
|
|
108
|
+
);
|
|
98
109
|
const discoveredDevicesContainer = document.getElementById("discoveredDevices");
|
|
99
110
|
/** @type {Object.<string, HTMLElement>} */
|
|
100
111
|
let discoveredDeviceContainers = {};
|
|
@@ -102,20 +113,56 @@ let discoveredDeviceContainers = {};
|
|
|
102
113
|
client.addEventListener("discoveredDevice", (event) => {
|
|
103
114
|
const discoveredDevice = event.message.discoveredDevice;
|
|
104
115
|
|
|
105
|
-
let discoveredDeviceContainer =
|
|
116
|
+
let discoveredDeviceContainer =
|
|
117
|
+
discoveredDeviceContainers[discoveredDevice.bluetoothId];
|
|
106
118
|
if (!discoveredDeviceContainer) {
|
|
107
|
-
discoveredDeviceContainer = discoveredDeviceTemplate.content
|
|
119
|
+
discoveredDeviceContainer = discoveredDeviceTemplate.content
|
|
120
|
+
.cloneNode(true)
|
|
121
|
+
.querySelector(".discoveredDevice");
|
|
108
122
|
|
|
109
123
|
/** @type {HTMLButtonElement} */
|
|
110
|
-
const toggleConnectionButton =
|
|
124
|
+
const toggleConnectionButton =
|
|
125
|
+
discoveredDeviceContainer.querySelector(".toggleConnection");
|
|
111
126
|
toggleConnectionButton.addEventListener("click", () => {
|
|
112
127
|
let device = client.devices[discoveredDevice.bluetoothId];
|
|
113
128
|
if (device) {
|
|
114
129
|
device.toggleConnection();
|
|
115
130
|
} else {
|
|
116
131
|
device = client.connectToDevice(discoveredDevice.bluetoothId);
|
|
132
|
+
onDevice(device);
|
|
117
133
|
}
|
|
118
|
-
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
/** @type {HTMLButtonElement} */
|
|
137
|
+
const connectViaWebSocketsButton = discoveredDeviceContainer.querySelector(
|
|
138
|
+
".connectViaWebSockets"
|
|
139
|
+
);
|
|
140
|
+
connectViaWebSocketsButton.addEventListener("click", () => {
|
|
141
|
+
let device = client.devices[discoveredDevice.bluetoothId];
|
|
142
|
+
if (device) {
|
|
143
|
+
device.connect({ type: "client", subType: "webSocket" });
|
|
144
|
+
} else {
|
|
145
|
+
device = client.connectToDevice(
|
|
146
|
+
discoveredDevice.bluetoothId,
|
|
147
|
+
"webSocket"
|
|
148
|
+
);
|
|
149
|
+
onDevice(device);
|
|
150
|
+
}
|
|
151
|
+
connectViaWebSocketsButton.disabled = true;
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
/** @type {HTMLButtonElement} */
|
|
155
|
+
const connectViaUDPButton =
|
|
156
|
+
discoveredDeviceContainer.querySelector(".connectViaUDP");
|
|
157
|
+
connectViaUDPButton.addEventListener("click", () => {
|
|
158
|
+
let device = client.devices[discoveredDevice.bluetoothId];
|
|
159
|
+
if (device) {
|
|
160
|
+
device.connect({ type: "client", subType: "udp" });
|
|
161
|
+
} else {
|
|
162
|
+
device = client.connectToDevice(discoveredDevice.bluetoothId, "udp");
|
|
163
|
+
onDevice(device);
|
|
164
|
+
}
|
|
165
|
+
connectViaUDPButton.disabled = true;
|
|
119
166
|
});
|
|
120
167
|
|
|
121
168
|
/** @param {BS.Device} device */
|
|
@@ -135,7 +182,9 @@ client.addEventListener("discoveredDevice", (event) => {
|
|
|
135
182
|
switch (device.connectionStatus) {
|
|
136
183
|
case "connected":
|
|
137
184
|
case "notConnected":
|
|
138
|
-
toggleConnectionButton.innerText = device.isConnected
|
|
185
|
+
toggleConnectionButton.innerText = device.isConnected
|
|
186
|
+
? "disconnect"
|
|
187
|
+
: "connect";
|
|
139
188
|
toggleConnectionButton.disabled = false;
|
|
140
189
|
break;
|
|
141
190
|
case "connecting":
|
|
@@ -144,9 +193,12 @@ client.addEventListener("discoveredDevice", (event) => {
|
|
|
144
193
|
toggleConnectionButton.disabled = true;
|
|
145
194
|
break;
|
|
146
195
|
}
|
|
196
|
+
connectViaWebSocketsButton.disabled = device.isConnected;
|
|
197
|
+
connectViaUDPButton.disabled = device.isConnected;
|
|
147
198
|
};
|
|
148
199
|
|
|
149
|
-
discoveredDeviceContainers[discoveredDevice.bluetoothId] =
|
|
200
|
+
discoveredDeviceContainers[discoveredDevice.bluetoothId] =
|
|
201
|
+
discoveredDeviceContainer;
|
|
150
202
|
discoveredDevicesContainer.appendChild(discoveredDeviceContainer);
|
|
151
203
|
}
|
|
152
204
|
|
|
@@ -155,21 +207,58 @@ client.addEventListener("discoveredDevice", (event) => {
|
|
|
155
207
|
|
|
156
208
|
/** @param {BS.DiscoveredDevice} discoveredDevice */
|
|
157
209
|
function updateDiscoveredDeviceContainer(discoveredDevice) {
|
|
158
|
-
const discoveredDeviceContainer =
|
|
210
|
+
const discoveredDeviceContainer =
|
|
211
|
+
discoveredDeviceContainers[discoveredDevice.bluetoothId];
|
|
159
212
|
if (!discoveredDeviceContainer) {
|
|
160
|
-
console.warn(
|
|
213
|
+
console.warn(
|
|
214
|
+
`no discoveredDeviceContainer for device id ${discoveredDevice.bluetoothId}`
|
|
215
|
+
);
|
|
161
216
|
return;
|
|
162
217
|
}
|
|
163
|
-
discoveredDeviceContainer.querySelector(".name").innerText =
|
|
164
|
-
|
|
165
|
-
discoveredDeviceContainer.querySelector(".
|
|
218
|
+
discoveredDeviceContainer.querySelector(".name").innerText =
|
|
219
|
+
discoveredDevice.name;
|
|
220
|
+
discoveredDeviceContainer.querySelector(".rssi").innerText =
|
|
221
|
+
discoveredDevice.rssi;
|
|
222
|
+
discoveredDeviceContainer.querySelector(".deviceType").innerText =
|
|
223
|
+
discoveredDevice.deviceType;
|
|
224
|
+
|
|
225
|
+
const connectViaWebSocketsButton = discoveredDeviceContainer.querySelector(
|
|
226
|
+
".connectViaWebSockets"
|
|
227
|
+
);
|
|
228
|
+
const connectViaUDPButton =
|
|
229
|
+
discoveredDeviceContainer.querySelector(".connectViaUDP");
|
|
230
|
+
|
|
231
|
+
const ipAddressSpan = discoveredDeviceContainer.querySelector(".ipAddress");
|
|
232
|
+
if (discoveredDevice.ipAddress) {
|
|
233
|
+
ipAddressSpan.closest("label").classList.remove("hidden");
|
|
234
|
+
ipAddressSpan.innerText = discoveredDevice.ipAddress;
|
|
235
|
+
connectViaWebSocketsButton.classList.remove("hidden");
|
|
236
|
+
connectViaUDPButton.classList.remove("hidden");
|
|
237
|
+
} else {
|
|
238
|
+
ipAddressSpan.closest("label").classList.add("hidden");
|
|
239
|
+
connectViaWebSocketsButton.classList.add("hidden");
|
|
240
|
+
connectViaUDPButton.classList.add("hidden");
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const isWifiSecureSpan =
|
|
244
|
+
discoveredDeviceContainer.querySelector(".isWifiSecure");
|
|
245
|
+
discoveredDeviceContainer.querySelector(".isWifiSecure");
|
|
246
|
+
if (discoveredDevice.isWifiSecure) {
|
|
247
|
+
isWifiSecureSpan.closest("label").classList.remove("hidden");
|
|
248
|
+
ipAddressSpan.innerText = discoveredDevice.isWifiSecure;
|
|
249
|
+
} else {
|
|
250
|
+
isWifiSecureSpan.closest("label").classList.add("hidden");
|
|
251
|
+
}
|
|
166
252
|
}
|
|
167
253
|
|
|
168
254
|
/** @param {BS.DiscoveredDevice} discoveredDevice */
|
|
169
255
|
function removeDiscoveredDeviceContainer(discoveredDevice) {
|
|
170
|
-
const discoveredDeviceContainer =
|
|
256
|
+
const discoveredDeviceContainer =
|
|
257
|
+
discoveredDeviceContainers[discoveredDevice.bluetoothId];
|
|
171
258
|
if (!discoveredDeviceContainer) {
|
|
172
|
-
console.warn(
|
|
259
|
+
console.warn(
|
|
260
|
+
`no discoveredDeviceContainer for device id ${discoveredDevice.bluetoothId}`
|
|
261
|
+
);
|
|
173
262
|
return;
|
|
174
263
|
}
|
|
175
264
|
|
|
@@ -200,7 +289,8 @@ client.addEventListener("isScanning", () => {
|
|
|
200
289
|
BS.DeviceManager.AddEventListener("deviceIsConnected", (event) => {
|
|
201
290
|
const device = event.message.device;
|
|
202
291
|
console.log("deviceIsConnected", device);
|
|
203
|
-
const discoveredDeviceContainer =
|
|
292
|
+
const discoveredDeviceContainer =
|
|
293
|
+
discoveredDeviceContainers[device.bluetoothId];
|
|
204
294
|
if (!discoveredDeviceContainer) {
|
|
205
295
|
return;
|
|
206
296
|
}
|
|
@@ -210,7 +300,9 @@ BS.DeviceManager.AddEventListener("deviceIsConnected", (event) => {
|
|
|
210
300
|
// AVAILABLE DEVICES
|
|
211
301
|
|
|
212
302
|
/** @type {HTMLTemplateElement} */
|
|
213
|
-
const connectedDeviceTemplate = document.getElementById(
|
|
303
|
+
const connectedDeviceTemplate = document.getElementById(
|
|
304
|
+
"connectedDeviceTemplate"
|
|
305
|
+
);
|
|
214
306
|
const connectedDevicesContainer = document.getElementById("connectedDevices");
|
|
215
307
|
/** @type {Object.<string, HTMLElement>} */
|
|
216
308
|
let connectedDeviceContainers = {};
|
|
@@ -223,21 +315,33 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
223
315
|
if (device.connectionType != "client" || !device.bluetoothId) {
|
|
224
316
|
return;
|
|
225
317
|
}
|
|
226
|
-
let connectedDeviceContainer =
|
|
318
|
+
let connectedDeviceContainer =
|
|
319
|
+
connectedDeviceContainers[device.bluetoothId];
|
|
227
320
|
if (!connectedDeviceContainer) {
|
|
228
|
-
connectedDeviceContainer = connectedDeviceTemplate.content
|
|
321
|
+
connectedDeviceContainer = connectedDeviceTemplate.content
|
|
322
|
+
.cloneNode(true)
|
|
323
|
+
.querySelector(".connectedDevice");
|
|
229
324
|
connectedDeviceContainers[device.bluetoothId] = connectedDeviceContainer;
|
|
230
325
|
|
|
231
326
|
/** @type {HTMLPreElement} */
|
|
232
|
-
const deviceInformationPre =
|
|
327
|
+
const deviceInformationPre =
|
|
328
|
+
connectedDeviceContainer.querySelector(".deviceInformation");
|
|
233
329
|
const setDeviceInformationPre = () =>
|
|
234
|
-
(deviceInformationPre.textContent = JSON.stringify(
|
|
330
|
+
(deviceInformationPre.textContent = JSON.stringify(
|
|
331
|
+
device.deviceInformation,
|
|
332
|
+
null,
|
|
333
|
+
2
|
|
334
|
+
));
|
|
235
335
|
setDeviceInformationPre();
|
|
236
|
-
device.addEventListener("deviceInformation", () =>
|
|
336
|
+
device.addEventListener("deviceInformation", () =>
|
|
337
|
+
setDeviceInformationPre()
|
|
338
|
+
);
|
|
237
339
|
|
|
238
340
|
/** @type {HTMLSpanElement} */
|
|
239
|
-
const batteryLevelSpan =
|
|
240
|
-
|
|
341
|
+
const batteryLevelSpan =
|
|
342
|
+
connectedDeviceContainer.querySelector(".batteryLevel");
|
|
343
|
+
const setBatteryLevelSpan = () =>
|
|
344
|
+
(batteryLevelSpan.innerText = device.batteryLevel);
|
|
241
345
|
setBatteryLevelSpan();
|
|
242
346
|
device.addEventListener("batteryLevel", () => setBatteryLevelSpan());
|
|
243
347
|
|
|
@@ -248,13 +352,15 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
248
352
|
device.addEventListener("getName", () => setNameSpan());
|
|
249
353
|
|
|
250
354
|
/** @type {HTMLInputElement} */
|
|
251
|
-
const setNameInput =
|
|
355
|
+
const setNameInput =
|
|
356
|
+
connectedDeviceContainer.querySelector(".setNameInput");
|
|
252
357
|
setNameInput.minLength = BS.MinNameLength;
|
|
253
358
|
setNameInput.maxLength = BS.MaxNameLength;
|
|
254
359
|
setNameInput.disabled = !device.isConnected;
|
|
255
360
|
|
|
256
361
|
/** @type {HTMLButtonElement} */
|
|
257
|
-
const setNameButton =
|
|
362
|
+
const setNameButton =
|
|
363
|
+
connectedDeviceContainer.querySelector(".setNameButton");
|
|
258
364
|
setNameButton.disabled = !device.isConnected;
|
|
259
365
|
|
|
260
366
|
device.addEventListener("isConnected", () => {
|
|
@@ -265,7 +371,8 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
265
371
|
});
|
|
266
372
|
|
|
267
373
|
setNameInput.addEventListener("input", () => {
|
|
268
|
-
setNameButton.disabled =
|
|
374
|
+
setNameButton.disabled =
|
|
375
|
+
setNameInput.value.length < device.minNameLength;
|
|
269
376
|
});
|
|
270
377
|
|
|
271
378
|
setNameButton.addEventListener("click", () => {
|
|
@@ -276,16 +383,19 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
276
383
|
});
|
|
277
384
|
|
|
278
385
|
/** @type {HTMLSpanElement} */
|
|
279
|
-
const deviceTypeSpan =
|
|
386
|
+
const deviceTypeSpan =
|
|
387
|
+
connectedDeviceContainer.querySelector(".deviceType");
|
|
280
388
|
const setDeviceTypeSpan = () => (deviceTypeSpan.innerText = device.type);
|
|
281
389
|
setDeviceTypeSpan();
|
|
282
390
|
device.addEventListener("getType", () => setDeviceTypeSpan());
|
|
283
391
|
|
|
284
392
|
/** @type {HTMLButtonElement} */
|
|
285
|
-
const setTypeButton =
|
|
393
|
+
const setTypeButton =
|
|
394
|
+
connectedDeviceContainer.querySelector(".setTypeButton");
|
|
286
395
|
|
|
287
396
|
/** @type {HTMLSelectElement} */
|
|
288
|
-
const setTypeSelect =
|
|
397
|
+
const setTypeSelect =
|
|
398
|
+
connectedDeviceContainer.querySelector(".setTypeSelect");
|
|
289
399
|
/** @type {HTMLOptGroupElement} */
|
|
290
400
|
const setTypeSelectOptgroup = setTypeSelect.querySelector("optgroup");
|
|
291
401
|
BS.DeviceTypes.forEach((type) => {
|
|
@@ -312,24 +422,37 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
312
422
|
});
|
|
313
423
|
|
|
314
424
|
/** @type {HTMLPreElement} */
|
|
315
|
-
const sensorConfigurationPre = connectedDeviceContainer.querySelector(
|
|
425
|
+
const sensorConfigurationPre = connectedDeviceContainer.querySelector(
|
|
426
|
+
".sensorConfiguration"
|
|
427
|
+
);
|
|
316
428
|
const setSensorConfigurationPre = () =>
|
|
317
|
-
(sensorConfigurationPre.textContent = JSON.stringify(
|
|
429
|
+
(sensorConfigurationPre.textContent = JSON.stringify(
|
|
430
|
+
device.sensorConfiguration,
|
|
431
|
+
null,
|
|
432
|
+
2
|
|
433
|
+
));
|
|
318
434
|
setSensorConfigurationPre();
|
|
319
|
-
device.addEventListener("getSensorConfiguration", () =>
|
|
435
|
+
device.addEventListener("getSensorConfiguration", () =>
|
|
436
|
+
setSensorConfigurationPre()
|
|
437
|
+
);
|
|
320
438
|
|
|
321
439
|
/** @type {HTMLTemplateElement} */
|
|
322
|
-
const sensorTypeConfigurationTemplate =
|
|
323
|
-
|
|
324
|
-
|
|
440
|
+
const sensorTypeConfigurationTemplate =
|
|
441
|
+
connectedDeviceContainer.querySelector(
|
|
442
|
+
".sensorTypeConfigurationTemplate"
|
|
443
|
+
);
|
|
325
444
|
device.sensorTypes.forEach((sensorType) => {
|
|
326
|
-
const sensorTypeConfigurationContainer =
|
|
327
|
-
.
|
|
328
|
-
|
|
329
|
-
|
|
445
|
+
const sensorTypeConfigurationContainer =
|
|
446
|
+
sensorTypeConfigurationTemplate.content
|
|
447
|
+
.cloneNode(true)
|
|
448
|
+
.querySelector(".sensorTypeConfiguration");
|
|
449
|
+
sensorTypeConfigurationContainer.querySelector(
|
|
450
|
+
".sensorType"
|
|
451
|
+
).innerText = sensorType;
|
|
330
452
|
|
|
331
453
|
/** @type {HTMLInputElement} */
|
|
332
|
-
const sensorRateInput =
|
|
454
|
+
const sensorRateInput =
|
|
455
|
+
sensorTypeConfigurationContainer.querySelector(".sensorRate");
|
|
333
456
|
sensorRateInput.value = 0;
|
|
334
457
|
sensorRateInput.max = BS.MaxSensorRate;
|
|
335
458
|
sensorRateInput.step = BS.SensorRateStep;
|
|
@@ -348,24 +471,29 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
348
471
|
});
|
|
349
472
|
|
|
350
473
|
device.addEventListener("isConnected", () => {
|
|
351
|
-
connectedDeviceContainer
|
|
474
|
+
connectedDeviceContainer
|
|
475
|
+
.querySelectorAll("input")
|
|
476
|
+
.forEach((input) => (input.disabled = !device.isConnected));
|
|
352
477
|
});
|
|
353
478
|
|
|
354
479
|
device.addEventListener("getSensorConfiguration", () => {
|
|
355
480
|
for (const sensorType in device.sensorConfiguration) {
|
|
356
481
|
connectedDeviceContainer.querySelector(
|
|
357
|
-
`.sensorTypeConfiguration[data-sensor-type="${sensorType}"] input`
|
|
482
|
+
`.sensorTypeConfiguration[data-sensor-type="${sensorType}"] .input`
|
|
358
483
|
).value = device.sensorConfiguration[sensorType];
|
|
359
484
|
}
|
|
360
485
|
});
|
|
361
486
|
|
|
362
487
|
/** @type {HTMLPreElement} */
|
|
363
|
-
const sensorDataPre =
|
|
364
|
-
|
|
488
|
+
const sensorDataPre =
|
|
489
|
+
connectedDeviceContainer.querySelector(".sensorData");
|
|
490
|
+
const setSensorDataPre = (event) =>
|
|
491
|
+
(sensorDataPre.textContent = JSON.stringify(event.message, null, 2));
|
|
365
492
|
device.addEventListener("sensorData", (event) => setSensorDataPre(event));
|
|
366
493
|
|
|
367
494
|
/** @type {HTMLButtonElement} */
|
|
368
|
-
const triggerVibrationButton =
|
|
495
|
+
const triggerVibrationButton =
|
|
496
|
+
connectedDeviceContainer.querySelector(".triggerVibration");
|
|
369
497
|
triggerVibrationButton.addEventListener("click", () => {
|
|
370
498
|
device.triggerVibration([
|
|
371
499
|
{
|
|
@@ -380,7 +508,8 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
380
508
|
triggerVibrationButton.disabled = !device.isConnected;
|
|
381
509
|
|
|
382
510
|
/** @type {HTMLButtonElement} */
|
|
383
|
-
const toggleConnectionButton =
|
|
511
|
+
const toggleConnectionButton =
|
|
512
|
+
connectedDeviceContainer.querySelector(".toggleConnection");
|
|
384
513
|
toggleConnectionButton.addEventListener("click", () => {
|
|
385
514
|
device.toggleConnection();
|
|
386
515
|
});
|
|
@@ -389,7 +518,9 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
389
518
|
case "connected":
|
|
390
519
|
case "notConnected":
|
|
391
520
|
toggleConnectionButton.disabled = false;
|
|
392
|
-
toggleConnectionButton.innerText = device.isConnected
|
|
521
|
+
toggleConnectionButton.innerText = device.isConnected
|
|
522
|
+
? "disconnect"
|
|
523
|
+
: "connect";
|
|
393
524
|
break;
|
|
394
525
|
case "connecting":
|
|
395
526
|
case "disconnecting":
|
|
@@ -399,7 +530,9 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
399
530
|
}
|
|
400
531
|
};
|
|
401
532
|
updateToggleConnectionButton();
|
|
402
|
-
device.addEventListener("connectionStatus", () =>
|
|
533
|
+
device.addEventListener("connectionStatus", () =>
|
|
534
|
+
updateToggleConnectionButton()
|
|
535
|
+
);
|
|
403
536
|
|
|
404
537
|
/** @type {File?} */
|
|
405
538
|
let file;
|
|
@@ -416,9 +549,12 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
416
549
|
updateToggleFileTransferButton();
|
|
417
550
|
});
|
|
418
551
|
|
|
419
|
-
const maxFileLengthSpan =
|
|
552
|
+
const maxFileLengthSpan =
|
|
553
|
+
connectedDeviceContainer.querySelector(".maxFileLength");
|
|
420
554
|
const updateMaxFileLengthSpan = () => {
|
|
421
|
-
maxFileLengthSpan.innerText = (
|
|
555
|
+
maxFileLengthSpan.innerText = (
|
|
556
|
+
device.maxFileLength / 1024
|
|
557
|
+
).toLocaleString();
|
|
422
558
|
};
|
|
423
559
|
updateMaxFileLengthSpan();
|
|
424
560
|
device.addEventListener("isConnected", () => {
|
|
@@ -429,7 +565,8 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
429
565
|
let fileType;
|
|
430
566
|
|
|
431
567
|
/** @type {HTMLSelectElement} */
|
|
432
|
-
const fileTransferTypesSelect =
|
|
568
|
+
const fileTransferTypesSelect =
|
|
569
|
+
connectedDeviceContainer.querySelector(".fileTransferTypes");
|
|
433
570
|
fileTransferTypesSelect.addEventListener("input", () => {
|
|
434
571
|
fileType = fileTransferTypesSelect.value;
|
|
435
572
|
console.log({ fileType });
|
|
@@ -440,14 +577,17 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
440
577
|
}
|
|
441
578
|
});
|
|
442
579
|
/** @type {HTMLOptGroupElement} */
|
|
443
|
-
const fileTransferTypesOptgroup =
|
|
580
|
+
const fileTransferTypesOptgroup =
|
|
581
|
+
fileTransferTypesSelect.querySelector("optgroup");
|
|
444
582
|
BS.FileTypes.forEach((fileType) => {
|
|
445
583
|
fileTransferTypesOptgroup.appendChild(new Option(fileType));
|
|
446
584
|
});
|
|
447
585
|
fileTransferTypesSelect.dispatchEvent(new Event("input"));
|
|
448
586
|
|
|
449
587
|
/** @type {HTMLProgressElement} */
|
|
450
|
-
const fileTransferProgress = connectedDeviceContainer.querySelector(
|
|
588
|
+
const fileTransferProgress = connectedDeviceContainer.querySelector(
|
|
589
|
+
".fileTransferProgress"
|
|
590
|
+
);
|
|
451
591
|
console.log("fileTransferProgress", fileTransferProgress);
|
|
452
592
|
|
|
453
593
|
device.addEventListener("fileTransferProgress", (event) => {
|
|
@@ -462,7 +602,9 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
462
602
|
});
|
|
463
603
|
|
|
464
604
|
/** @type {HTMLButtonElement} */
|
|
465
|
-
const toggleFileTransferButton = connectedDeviceContainer.querySelector(
|
|
605
|
+
const toggleFileTransferButton = connectedDeviceContainer.querySelector(
|
|
606
|
+
".toggleFileTransfer"
|
|
607
|
+
);
|
|
466
608
|
toggleFileTransferButton.addEventListener("click", async () => {
|
|
467
609
|
if (device.fileTransferStatus == "idle") {
|
|
468
610
|
if (fileTransferDirection == "send") {
|
|
@@ -478,7 +620,8 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
478
620
|
}
|
|
479
621
|
});
|
|
480
622
|
const updateToggleFileTransferButton = () => {
|
|
481
|
-
const enabled =
|
|
623
|
+
const enabled =
|
|
624
|
+
device.isConnected && (file || fileTransferDirection == "receive");
|
|
482
625
|
toggleFileTransferButton.disabled = !enabled;
|
|
483
626
|
|
|
484
627
|
/** @type {String} */
|
|
@@ -506,7 +649,8 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
506
649
|
/** @type {BS.FileTransferDirection} */
|
|
507
650
|
let fileTransferDirection;
|
|
508
651
|
/** @type {HTMLSelectElement} */
|
|
509
|
-
const fileTransferDirectionSelect =
|
|
652
|
+
const fileTransferDirectionSelect =
|
|
653
|
+
connectedDeviceContainer.querySelector(".fileTransferDirection");
|
|
510
654
|
fileTransferDirectionSelect.addEventListener("input", () => {
|
|
511
655
|
fileTransferDirection = fileTransferDirectionSelect.value;
|
|
512
656
|
console.log({ fileTransferDirection });
|
|
@@ -534,11 +678,16 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
534
678
|
// TFLITE
|
|
535
679
|
|
|
536
680
|
/** @type {HTMLSpanElement} */
|
|
537
|
-
const tfliteNameSpan =
|
|
681
|
+
const tfliteNameSpan =
|
|
682
|
+
connectedDeviceContainer.querySelector(".tfliteName");
|
|
538
683
|
/** @type {HTMLInputElement} */
|
|
539
|
-
const setTfliteNameInput = connectedDeviceContainer.querySelector(
|
|
684
|
+
const setTfliteNameInput = connectedDeviceContainer.querySelector(
|
|
685
|
+
".setTfliteNameInput"
|
|
686
|
+
);
|
|
540
687
|
/** @type {HTMLButtonElement} */
|
|
541
|
-
const setTfliteNameButton = connectedDeviceContainer.querySelector(
|
|
688
|
+
const setTfliteNameButton = connectedDeviceContainer.querySelector(
|
|
689
|
+
".setTfliteNameButton"
|
|
690
|
+
);
|
|
542
691
|
|
|
543
692
|
device.addEventListener("getTfliteName", () => {
|
|
544
693
|
tfliteNameSpan.innerText = device.tfliteName;
|
|
@@ -561,13 +710,19 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
561
710
|
});
|
|
562
711
|
|
|
563
712
|
/** @type {HTMLSpanElement} */
|
|
564
|
-
const tfliteTaskSpan =
|
|
713
|
+
const tfliteTaskSpan =
|
|
714
|
+
connectedDeviceContainer.querySelector(".tfliteTask");
|
|
565
715
|
/** @type {HTMLSelectElement} */
|
|
566
|
-
const setTfliteTaskSelect = connectedDeviceContainer.querySelector(
|
|
716
|
+
const setTfliteTaskSelect = connectedDeviceContainer.querySelector(
|
|
717
|
+
".setTfliteTaskSelect"
|
|
718
|
+
);
|
|
567
719
|
/** @type {HTMLOptGroupElement} */
|
|
568
|
-
const setTfliteTaskOptgroup =
|
|
720
|
+
const setTfliteTaskOptgroup =
|
|
721
|
+
setTfliteTaskSelect.querySelector("optgroup");
|
|
569
722
|
/** @type {HTMLButtonElement} */
|
|
570
|
-
const setTfliteTaskButton = connectedDeviceContainer.querySelector(
|
|
723
|
+
const setTfliteTaskButton = connectedDeviceContainer.querySelector(
|
|
724
|
+
".setTfliteTaskButton"
|
|
725
|
+
);
|
|
571
726
|
|
|
572
727
|
BS.TfliteTasks.forEach((task) => {
|
|
573
728
|
setTfliteTaskOptgroup.appendChild(new Option(task));
|
|
@@ -589,11 +744,16 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
589
744
|
});
|
|
590
745
|
|
|
591
746
|
/** @type {HTMLSpanElement} */
|
|
592
|
-
const tfliteSampleRateSpan =
|
|
747
|
+
const tfliteSampleRateSpan =
|
|
748
|
+
connectedDeviceContainer.querySelector(".tfliteSampleRate");
|
|
593
749
|
/** @type {HTMLInputElement} */
|
|
594
|
-
const setTfliteSampleRateInput = connectedDeviceContainer.querySelector(
|
|
750
|
+
const setTfliteSampleRateInput = connectedDeviceContainer.querySelector(
|
|
751
|
+
".setTfliteSampleRateInput"
|
|
752
|
+
);
|
|
595
753
|
/** @type {HTMLButtonElement} */
|
|
596
|
-
const setTfliteSampleRateButton = connectedDeviceContainer.querySelector(
|
|
754
|
+
const setTfliteSampleRateButton = connectedDeviceContainer.querySelector(
|
|
755
|
+
".setTfliteSampleRateButton"
|
|
756
|
+
);
|
|
597
757
|
|
|
598
758
|
device.addEventListener("getTfliteSampleRate", () => {
|
|
599
759
|
tfliteSampleRateSpan.innerText = device.tfliteSampleRate;
|
|
@@ -618,22 +778,30 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
618
778
|
setTfliteSampleRateButton.disabled = device.tfliteInferencingEnabled;
|
|
619
779
|
});
|
|
620
780
|
|
|
621
|
-
const tfliteSensorTypesContainer =
|
|
781
|
+
const tfliteSensorTypesContainer =
|
|
782
|
+
connectedDeviceContainer.querySelector(".tfliteSensorTypes");
|
|
622
783
|
/** @type {HTMLTemplateElement} */
|
|
623
|
-
const tfliteSensorTypeTemplate = connectedDeviceContainer.querySelector(
|
|
784
|
+
const tfliteSensorTypeTemplate = connectedDeviceContainer.querySelector(
|
|
785
|
+
".tfliteSensorTypeTemplate"
|
|
786
|
+
);
|
|
624
787
|
/** @type {Object.<string, HTMLElement>} */
|
|
625
788
|
const tfliteSensorTypeContainers = {};
|
|
626
789
|
/** @type {BS.SensorType[]} */
|
|
627
790
|
let tfliteSensorTypes = [];
|
|
628
791
|
/** @type {HTMLButtonElement} */
|
|
629
|
-
const setTfliteSensorTypesButton = connectedDeviceContainer.querySelector(
|
|
792
|
+
const setTfliteSensorTypesButton = connectedDeviceContainer.querySelector(
|
|
793
|
+
".setTfliteSensorTypes"
|
|
794
|
+
);
|
|
630
795
|
|
|
631
796
|
BS.TfliteSensorTypes.forEach((sensorType) => {
|
|
632
|
-
const sensorTypeContainer = tfliteSensorTypeTemplate.content
|
|
797
|
+
const sensorTypeContainer = tfliteSensorTypeTemplate.content
|
|
798
|
+
.cloneNode(true)
|
|
799
|
+
.querySelector(".sensorType");
|
|
633
800
|
sensorTypeContainer.querySelector(".name").innerText = sensorType;
|
|
634
801
|
|
|
635
802
|
/** @type {HTMLInputElement} */
|
|
636
|
-
const isSensorEnabledInput =
|
|
803
|
+
const isSensorEnabledInput =
|
|
804
|
+
sensorTypeContainer.querySelector(".enabled");
|
|
637
805
|
isSensorEnabledInput.addEventListener("input", () => {
|
|
638
806
|
if (isSensorEnabledInput.checked) {
|
|
639
807
|
tfliteSensorTypes.push(sensorType);
|
|
@@ -644,9 +812,11 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
644
812
|
});
|
|
645
813
|
|
|
646
814
|
device.addEventListener("getTfliteSensorTypes", () => {
|
|
647
|
-
isSensorEnabledInput.checked =
|
|
815
|
+
isSensorEnabledInput.checked =
|
|
816
|
+
device.tfliteSensorTypes.includes(sensorType);
|
|
648
817
|
});
|
|
649
|
-
isSensorEnabledInput.checked =
|
|
818
|
+
isSensorEnabledInput.checked =
|
|
819
|
+
device.tfliteSensorTypes.includes(sensorType);
|
|
650
820
|
|
|
651
821
|
tfliteSensorTypeContainers[sensorType] = sensorTypeContainer;
|
|
652
822
|
|
|
@@ -672,18 +842,24 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
672
842
|
setTfliteSensorTypesButton.disabled = false;
|
|
673
843
|
|
|
674
844
|
/** @type {HTMLInputElement} */
|
|
675
|
-
const setTfliteIsReadyInput =
|
|
845
|
+
const setTfliteIsReadyInput =
|
|
846
|
+
connectedDeviceContainer.querySelector(".tfliteIsReady");
|
|
676
847
|
device.addEventListener("tfliteIsReady", () => {
|
|
677
848
|
setTfliteIsReadyInput.checked = device.tfliteIsReady;
|
|
678
849
|
});
|
|
679
850
|
setTfliteIsReadyInput.checked = device.tfliteIsReady;
|
|
680
851
|
|
|
681
852
|
/** @type {HTMLSpanElement} */
|
|
682
|
-
const tfliteThresholdSpan =
|
|
853
|
+
const tfliteThresholdSpan =
|
|
854
|
+
connectedDeviceContainer.querySelector(".tfliteThreshold");
|
|
683
855
|
/** @type {HTMLInputElement} */
|
|
684
|
-
const setTfliteThresholdInput = connectedDeviceContainer.querySelector(
|
|
856
|
+
const setTfliteThresholdInput = connectedDeviceContainer.querySelector(
|
|
857
|
+
".setTfliteThresholdInput"
|
|
858
|
+
);
|
|
685
859
|
/** @type {HTMLButtonElement} */
|
|
686
|
-
const setTfliteThresholdButton = connectedDeviceContainer.querySelector(
|
|
860
|
+
const setTfliteThresholdButton = connectedDeviceContainer.querySelector(
|
|
861
|
+
".setTfliteThresholdButton"
|
|
862
|
+
);
|
|
687
863
|
|
|
688
864
|
device.addEventListener("getTfliteThreshold", () => {
|
|
689
865
|
tfliteThresholdSpan.innerText = device.tfliteThreshold;
|
|
@@ -706,11 +882,16 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
706
882
|
});
|
|
707
883
|
|
|
708
884
|
/** @type {HTMLSpanElement} */
|
|
709
|
-
const tfliteCaptureDelaySpan = connectedDeviceContainer.querySelector(
|
|
885
|
+
const tfliteCaptureDelaySpan = connectedDeviceContainer.querySelector(
|
|
886
|
+
".tfliteCaptureDelay"
|
|
887
|
+
);
|
|
710
888
|
/** @type {HTMLInputElement} */
|
|
711
|
-
const setTfliteCaptureDelayInput = connectedDeviceContainer.querySelector(
|
|
889
|
+
const setTfliteCaptureDelayInput = connectedDeviceContainer.querySelector(
|
|
890
|
+
".setTfliteCaptureDelayInput"
|
|
891
|
+
);
|
|
712
892
|
/** @type {HTMLButtonElement} */
|
|
713
|
-
const setTfliteCaptureDelayButton =
|
|
893
|
+
const setTfliteCaptureDelayButton =
|
|
894
|
+
connectedDeviceContainer.querySelector(".setTfliteCaptureDelayButton");
|
|
714
895
|
|
|
715
896
|
device.addEventListener("getTfliteCaptureDelay", () => {
|
|
716
897
|
tfliteCaptureDelaySpan.innerText = device.tfliteCaptureDelay;
|
|
@@ -733,19 +914,22 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
733
914
|
});
|
|
734
915
|
|
|
735
916
|
/** @type {HTMLInputElement} */
|
|
736
|
-
const tfliteInferencingEnabledInput =
|
|
917
|
+
const tfliteInferencingEnabledInput =
|
|
918
|
+
connectedDeviceContainer.querySelector(".tfliteInferencingEnabled");
|
|
737
919
|
/** @type {HTMLButtonElement} */
|
|
738
|
-
const toggleTfliteInferencingEnabledButton =
|
|
739
|
-
|
|
740
|
-
|
|
920
|
+
const toggleTfliteInferencingEnabledButton =
|
|
921
|
+
connectedDeviceContainer.querySelector(
|
|
922
|
+
".toggleTfliteInferencingEnabled"
|
|
923
|
+
);
|
|
741
924
|
|
|
742
925
|
const updateTfliteInferencingUI = () => {
|
|
743
926
|
toggleTfliteInferencingEnabledButton.disabled = !device.tfliteIsReady;
|
|
744
927
|
|
|
745
928
|
tfliteInferencingEnabledInput.checked = device.tfliteInferencingEnabled;
|
|
746
|
-
toggleTfliteInferencingEnabledButton.innerText =
|
|
747
|
-
|
|
748
|
-
|
|
929
|
+
toggleTfliteInferencingEnabledButton.innerText =
|
|
930
|
+
device.tfliteInferencingEnabled
|
|
931
|
+
? "disable inferencing"
|
|
932
|
+
: "enable inferencing";
|
|
749
933
|
};
|
|
750
934
|
|
|
751
935
|
device.addEventListener("tfliteIsReady", () => {
|
|
@@ -753,9 +937,10 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
753
937
|
});
|
|
754
938
|
device.addEventListener("getTfliteInferencingEnabled", () => {
|
|
755
939
|
tfliteInferencingEnabledInput.checked = device.tfliteInferencingEnabled;
|
|
756
|
-
toggleTfliteInferencingEnabledButton.innerText =
|
|
757
|
-
|
|
758
|
-
|
|
940
|
+
toggleTfliteInferencingEnabledButton.innerText =
|
|
941
|
+
device.tfliteInferencingEnabled
|
|
942
|
+
? "disable inferencing"
|
|
943
|
+
: "enable inferencing";
|
|
759
944
|
});
|
|
760
945
|
updateTfliteInferencingUI();
|
|
761
946
|
|
|
@@ -764,10 +949,15 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
764
949
|
});
|
|
765
950
|
|
|
766
951
|
/** @type {HTMLPreElement} */
|
|
767
|
-
const tfliteInferencePre =
|
|
952
|
+
const tfliteInferencePre =
|
|
953
|
+
connectedDeviceContainer.querySelector(".tfliteInference");
|
|
768
954
|
device.addEventListener("tfliteInference", (event) => {
|
|
769
955
|
console.log("inference", event.message.tfliteInference);
|
|
770
|
-
tfliteInferencePre.textContent = JSON.stringify(
|
|
956
|
+
tfliteInferencePre.textContent = JSON.stringify(
|
|
957
|
+
event.message.tfliteInference,
|
|
958
|
+
null,
|
|
959
|
+
2
|
|
960
|
+
);
|
|
771
961
|
});
|
|
772
962
|
|
|
773
963
|
const updateTfliteUI = () => {
|
|
@@ -798,13 +988,16 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
798
988
|
let firmware;
|
|
799
989
|
|
|
800
990
|
/** @type {HTMLInputElement} */
|
|
801
|
-
const firmwareInput =
|
|
991
|
+
const firmwareInput =
|
|
992
|
+
connectedDeviceContainer.querySelector(".firmwareInput");
|
|
802
993
|
firmwareInput.addEventListener("input", () => {
|
|
803
994
|
firmware = firmwareInput.files[0];
|
|
804
995
|
updateToggleFirmwareUploadButton();
|
|
805
996
|
});
|
|
806
997
|
/** @type {HTMLButtonElement} */
|
|
807
|
-
const toggleFirmwareUploadButton = connectedDeviceContainer.querySelector(
|
|
998
|
+
const toggleFirmwareUploadButton = connectedDeviceContainer.querySelector(
|
|
999
|
+
".toggleFirmwareUpload"
|
|
1000
|
+
);
|
|
808
1001
|
toggleFirmwareUploadButton.addEventListener("click", () => {
|
|
809
1002
|
device.uploadFirmware(firmware);
|
|
810
1003
|
});
|
|
@@ -817,26 +1010,34 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
817
1010
|
});
|
|
818
1011
|
|
|
819
1012
|
/** @type {HTMLProgressElement} */
|
|
820
|
-
const firmwareUploadProgress = connectedDeviceContainer.querySelector(
|
|
821
|
-
|
|
822
|
-
const firmwareUploadProgressPercentageSpan = connectedDeviceContainer.querySelector(
|
|
823
|
-
".firmwareUploadProgressPercentage"
|
|
1013
|
+
const firmwareUploadProgress = connectedDeviceContainer.querySelector(
|
|
1014
|
+
".firmwareUploadProgress"
|
|
824
1015
|
);
|
|
1016
|
+
/** @type {HTMLSpanElement} */
|
|
1017
|
+
const firmwareUploadProgressPercentageSpan =
|
|
1018
|
+
connectedDeviceContainer.querySelector(
|
|
1019
|
+
".firmwareUploadProgressPercentage"
|
|
1020
|
+
);
|
|
825
1021
|
device.addEventListener("firmwareUploadProgress", (event) => {
|
|
826
1022
|
const progress = event.message.firmwareUploadProgress;
|
|
827
1023
|
firmwareUploadProgress.value = progress;
|
|
828
|
-
firmwareUploadProgressPercentageSpan.innerText = `${Math.floor(
|
|
1024
|
+
firmwareUploadProgressPercentageSpan.innerText = `${Math.floor(
|
|
1025
|
+
100 * progress
|
|
1026
|
+
)}%`;
|
|
829
1027
|
});
|
|
830
1028
|
device.addEventListener("firmwareUploadComplete", () => {
|
|
831
1029
|
firmwareUploadProgress.value = 0;
|
|
832
1030
|
});
|
|
833
1031
|
device.addEventListener("firmwareStatus", () => {
|
|
834
1032
|
const isUploading = device.firmwareStatus == "uploading";
|
|
835
|
-
firmwareUploadProgressPercentageSpan.style.display = isUploading
|
|
1033
|
+
firmwareUploadProgressPercentageSpan.style.display = isUploading
|
|
1034
|
+
? ""
|
|
1035
|
+
: "none";
|
|
836
1036
|
});
|
|
837
1037
|
|
|
838
1038
|
/** @type {HTMLPreElement} */
|
|
839
|
-
const firmwareImagesPre =
|
|
1039
|
+
const firmwareImagesPre =
|
|
1040
|
+
connectedDeviceContainer.querySelector(".firmwareImages");
|
|
840
1041
|
device.addEventListener("firmwareImages", () => {
|
|
841
1042
|
firmwareImagesPre.textContent = JSON.stringify(
|
|
842
1043
|
device.firmwareImages,
|
|
@@ -846,13 +1047,14 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
846
1047
|
});
|
|
847
1048
|
|
|
848
1049
|
device.addEventListener("isConnected", () => {
|
|
849
|
-
if (device.isConnected) {
|
|
1050
|
+
if (device.isConnected && device.canUpdateFirmware) {
|
|
850
1051
|
device.getFirmwareImages();
|
|
851
1052
|
}
|
|
852
1053
|
});
|
|
853
1054
|
|
|
854
1055
|
/** @type {HTMLSpanElement} */
|
|
855
|
-
const firmwareStatusSpan =
|
|
1056
|
+
const firmwareStatusSpan =
|
|
1057
|
+
connectedDeviceContainer.querySelector(".firmwareStatus");
|
|
856
1058
|
|
|
857
1059
|
/** @type {HTMLButtonElement} */
|
|
858
1060
|
const resetButton = connectedDeviceContainer.querySelector(".reset");
|
|
@@ -867,7 +1069,8 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
867
1069
|
};
|
|
868
1070
|
|
|
869
1071
|
/** @type {HTMLButtonElement} */
|
|
870
|
-
const testFirmwareImageButton =
|
|
1072
|
+
const testFirmwareImageButton =
|
|
1073
|
+
connectedDeviceContainer.querySelector(".testFirmwareImage");
|
|
871
1074
|
testFirmwareImageButton.addEventListener("click", () => {
|
|
872
1075
|
device.testFirmwareImage();
|
|
873
1076
|
});
|
|
@@ -877,7 +1080,9 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
877
1080
|
};
|
|
878
1081
|
|
|
879
1082
|
/** @type {HTMLButtonElement} */
|
|
880
|
-
const confirmFirmwareImageButton = connectedDeviceContainer.querySelector(
|
|
1083
|
+
const confirmFirmwareImageButton = connectedDeviceContainer.querySelector(
|
|
1084
|
+
".confirmFirmwareImage"
|
|
1085
|
+
);
|
|
881
1086
|
confirmFirmwareImageButton.addEventListener("click", () => {
|
|
882
1087
|
device.confirmFirmwareImage();
|
|
883
1088
|
});
|
|
@@ -887,7 +1092,9 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
887
1092
|
};
|
|
888
1093
|
|
|
889
1094
|
/** @type {HTMLButtonElement} */
|
|
890
|
-
const eraseFirmwareImageButton = connectedDeviceContainer.querySelector(
|
|
1095
|
+
const eraseFirmwareImageButton = connectedDeviceContainer.querySelector(
|
|
1096
|
+
".eraseFirmwareImage"
|
|
1097
|
+
);
|
|
891
1098
|
eraseFirmwareImageButton.addEventListener("click", () => {
|
|
892
1099
|
device.eraseFirmwareImage();
|
|
893
1100
|
});
|
|
@@ -909,13 +1116,17 @@ BS.DeviceManager.AddEventListener("connectedDevices", (event) => {
|
|
|
909
1116
|
});
|
|
910
1117
|
updateFirmwareUI();
|
|
911
1118
|
|
|
912
|
-
device.
|
|
1119
|
+
if (device.canUpdateFirmware) {
|
|
1120
|
+
device.getFirmwareImages();
|
|
1121
|
+
}
|
|
913
1122
|
}
|
|
914
1123
|
connectedDevicesContainer.appendChild(connectedDeviceContainer);
|
|
915
1124
|
});
|
|
916
1125
|
|
|
917
1126
|
for (const id in connectedDeviceContainers) {
|
|
918
|
-
const connectedDevice = connectedDevices.find(
|
|
1127
|
+
const connectedDevice = connectedDevices.find(
|
|
1128
|
+
(connectedDevice) => connectedDevice.bluetoothId == id
|
|
1129
|
+
);
|
|
919
1130
|
if (!connectedDevice) {
|
|
920
1131
|
console.log("remove", id);
|
|
921
1132
|
connectedDeviceContainers[id].remove();
|