brilliantsole 0.0.25 → 0.0.27

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.
Files changed (110) hide show
  1. package/README.md +16 -10
  2. package/assets/3d/rightHand.glb +0 -0
  3. package/assets/images/ukaton-pressure-0.svg +9 -0
  4. package/assets/images/ukaton-pressure-1.svg +9 -0
  5. package/assets/images/ukaton-pressure-10.svg +9 -0
  6. package/assets/images/ukaton-pressure-11.svg +9 -0
  7. package/assets/images/ukaton-pressure-12.svg +9 -0
  8. package/assets/images/ukaton-pressure-13.svg +9 -0
  9. package/assets/images/ukaton-pressure-14.svg +9 -0
  10. package/assets/images/ukaton-pressure-15.svg +9 -0
  11. package/assets/images/ukaton-pressure-2.svg +9 -0
  12. package/assets/images/ukaton-pressure-3.svg +9 -0
  13. package/assets/images/ukaton-pressure-4.svg +9 -0
  14. package/assets/images/ukaton-pressure-5.svg +9 -0
  15. package/assets/images/ukaton-pressure-6.svg +9 -0
  16. package/assets/images/ukaton-pressure-7.svg +9 -0
  17. package/assets/images/ukaton-pressure-8.svg +9 -0
  18. package/assets/images/ukaton-pressure-9.svg +9 -0
  19. package/assets/images/ukaton-right-insole.svg +798 -0
  20. package/build/brilliantsole.cjs +255 -119
  21. package/build/brilliantsole.cjs.map +1 -1
  22. package/build/brilliantsole.js +283 -140
  23. package/build/brilliantsole.js.map +1 -1
  24. package/build/brilliantsole.ls.js +210 -103
  25. package/build/brilliantsole.ls.js.map +1 -1
  26. package/build/brilliantsole.min.js +1 -1
  27. package/build/brilliantsole.min.js.map +1 -1
  28. package/build/brilliantsole.module.d.ts +76 -60
  29. package/build/brilliantsole.module.js +282 -140
  30. package/build/brilliantsole.module.js.map +1 -1
  31. package/build/brilliantsole.module.min.d.ts +76 -60
  32. package/build/brilliantsole.module.min.js +1 -1
  33. package/build/brilliantsole.module.min.js.map +1 -1
  34. package/build/brilliantsole.node.module.d.ts +75 -60
  35. package/build/brilliantsole.node.module.js +254 -119
  36. package/build/brilliantsole.node.module.js.map +1 -1
  37. package/build/dts/BS.d.ts +2 -2
  38. package/build/dts/Device.d.ts +11 -7
  39. package/build/dts/DeviceManager.d.ts +1 -0
  40. package/build/dts/InformationManager.d.ts +6 -5
  41. package/build/dts/connection/BaseConnectionManager.d.ts +2 -0
  42. package/build/dts/connection/ClientConnectionManager.d.ts +4 -0
  43. package/build/dts/connection/bluetooth/BluetoothConnectionManager.d.ts +1 -0
  44. package/build/dts/connection/bluetooth/NobleConnectionManager.d.ts +1 -0
  45. package/build/dts/connection/bluetooth/WebBluetoothConnectionManager.d.ts +1 -0
  46. package/build/dts/devicePair/DevicePair.d.ts +14 -10
  47. package/build/dts/devicePair/DevicePairPressureSensorDataManager.d.ts +8 -4
  48. package/build/dts/devicePair/DevicePairSensorDataManager.d.ts +2 -2
  49. package/build/dts/server/BaseClient.d.ts +1 -0
  50. package/build/dts/utils/CenterOfPressureHelper.d.ts +2 -2
  51. package/build/dts/utils/MathUtils.d.ts +2 -0
  52. package/build/index.d.ts +76 -60
  53. package/build/index.node.d.ts +75 -60
  54. package/examples/3d/script.js +90 -17
  55. package/examples/balance/script.js +2 -1
  56. package/examples/basic/index.html +21 -2
  57. package/examples/basic/script.js +17 -3
  58. package/examples/bottango/index.html +11 -1
  59. package/examples/bottango/script.js +2 -2
  60. package/examples/center-of-pressure/index.html +114 -114
  61. package/examples/center-of-pressure/script.js +1 -1
  62. package/examples/device-pair/index.html +58 -58
  63. package/examples/device-pair/script.js +12 -8
  64. package/examples/gloves/index.html +116 -0
  65. package/examples/gloves/scene.html +124 -0
  66. package/examples/gloves/script.js +615 -0
  67. package/examples/graph/index.html +11 -1
  68. package/examples/graph/script.js +2 -2
  69. package/examples/pressure/index.html +180 -12
  70. package/examples/pressure/script.js +144 -7
  71. package/examples/recording/index.html +191 -183
  72. package/examples/server/index.html +11 -1
  73. package/examples/server/script.js +6 -3
  74. package/examples/ukaton-firmware-update/index.html +20 -0
  75. package/examples/ukaton-firmware-update/manifest.json +11 -0
  76. package/examples/ukaton-firmware-update/merged-firmware.bin +0 -0
  77. package/examples/webxr/script.js +3 -3
  78. package/package.json +1 -1
  79. package/src/BS.ts +3 -8
  80. package/src/Device.ts +41 -8
  81. package/src/DeviceInformationManager.ts +4 -2
  82. package/src/DeviceManager.ts +10 -1
  83. package/src/FileTransferManager.ts +1 -1
  84. package/src/FirmwareManager.ts +1 -1
  85. package/src/InformationManager.ts +24 -7
  86. package/src/TfliteManager.ts +1 -1
  87. package/src/connection/BaseConnectionManager.ts +23 -6
  88. package/src/connection/ClientConnectionManager.ts +13 -1
  89. package/src/connection/bluetooth/BluetoothConnectionManager.ts +6 -1
  90. package/src/connection/bluetooth/NobleConnectionManager.ts +8 -1
  91. package/src/connection/bluetooth/WebBluetoothConnectionManager.ts +5 -1
  92. package/src/devicePair/DevicePair.ts +53 -27
  93. package/src/devicePair/DevicePairPressureSensorDataManager.ts +51 -23
  94. package/src/devicePair/DevicePairSensorDataManager.ts +5 -5
  95. package/src/scanner/NobleScanner.ts +5 -3
  96. package/src/sensor/BarometerSensorDataManager.ts +1 -1
  97. package/src/sensor/MotionSensorDataManager.ts +1 -1
  98. package/src/sensor/PressureSensorDataManager.ts +13 -8
  99. package/src/sensor/SensorConfigurationManager.ts +3 -3
  100. package/src/sensor/SensorDataManager.ts +1 -1
  101. package/src/server/BaseClient.ts +43 -2
  102. package/src/server/BaseServer.ts +149 -39
  103. package/src/server/udp/UDPServer.ts +1 -1
  104. package/src/server/websocket/WebSocketClient.ts +3 -2
  105. package/src/server/websocket/WebSocketServer.ts +1 -1
  106. package/src/utils/CenterOfPressureHelper.ts +5 -5
  107. package/src/utils/MathUtils.ts +31 -1
  108. package/src/utils/ParseUtils.ts +1 -1
  109. package/src/utils/checksum.ts +1 -1
  110. package/src/utils/mcumgr.js +1 -1
@@ -329,7 +329,7 @@ class Timer {
329
329
  }
330
330
  _Timer_callback = new WeakMap(), _Timer_interval = new WeakMap(), _Timer_intervalId = new WeakMap();
331
331
 
332
- createConsole("checksum", { log: true });
332
+ createConsole("checksum", { log: false });
333
333
  function crc32ForByte(r) {
334
334
  for (let j = 0; j < 8; ++j) {
335
335
  r = (r & 1 ? 0 : 0xedb88320) ^ (r >>> 1);
@@ -476,7 +476,7 @@ async function getFileBuffer(file) {
476
476
  }
477
477
 
478
478
  var _FileTransferManager_instances, _a$6, _FileTransferManager_dispatchEvent_get, _FileTransferManager_assertValidType, _FileTransferManager_assertValidTypeEnum, _FileTransferManager_assertValidStatusEnum, _FileTransferManager_assertValidCommand, _FileTransferManager_MaxLength, _FileTransferManager_maxLength, _FileTransferManager_parseMaxLength, _FileTransferManager_updateMaxLength, _FileTransferManager_assertValidLength, _FileTransferManager_type, _FileTransferManager_parseType, _FileTransferManager_updateType, _FileTransferManager_setType, _FileTransferManager_length, _FileTransferManager_parseLength, _FileTransferManager_updateLength, _FileTransferManager_setLength, _FileTransferManager_checksum, _FileTransferManager_parseChecksum, _FileTransferManager_updateChecksum, _FileTransferManager_setChecksum, _FileTransferManager_setCommand, _FileTransferManager_status, _FileTransferManager_parseStatus, _FileTransferManager_updateStatus, _FileTransferManager_assertIsIdle, _FileTransferManager_assertIsNotIdle, _FileTransferManager_receivedBlocks, _FileTransferManager_parseBlock, _FileTransferManager_buffer, _FileTransferManager_bytesTransferred, _FileTransferManager_send, _FileTransferManager_sendBlock, _FileTransferManager_parseBytesTransferred, _FileTransferManager_isServerSide;
479
- const _console$x = createConsole("FileTransferManager", { log: true });
479
+ const _console$x = createConsole("FileTransferManager", { log: false });
480
480
  const FileTransferMessageTypes = [
481
481
  "maxFileLength",
482
482
  "getFileType",
@@ -801,7 +801,7 @@ _a$6 = FileTransferManager, _FileTransferManager_maxLength = new WeakMap(), _Fil
801
801
  };
802
802
  _FileTransferManager_MaxLength = { value: 0 };
803
803
 
804
- const _console$w = createConsole("MathUtils", { log: true });
804
+ const _console$w = createConsole("MathUtils", { log: false });
805
805
  function getInterpolation(value, min, max, span) {
806
806
  if (span == undefined) {
807
807
  span = max - min;
@@ -889,15 +889,15 @@ class CenterOfPressureHelper {
889
889
  __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").x.update(centerOfPressure.x);
890
890
  __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").y.update(centerOfPressure.y);
891
891
  }
892
- getNormalization(centerOfPressure) {
892
+ getNormalization(centerOfPressure, weightByRange) {
893
893
  return {
894
- x: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").x.getNormalization(centerOfPressure.x, false),
895
- y: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").y.getNormalization(centerOfPressure.y, false),
894
+ x: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").x.getNormalization(centerOfPressure.x, weightByRange),
895
+ y: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").y.getNormalization(centerOfPressure.y, weightByRange),
896
896
  };
897
897
  }
898
- updateAndGetNormalization(centerOfPressure) {
898
+ updateAndGetNormalization(centerOfPressure, weightByRange) {
899
899
  this.update(centerOfPressure);
900
- return this.getNormalization(centerOfPressure);
900
+ return this.getNormalization(centerOfPressure, weightByRange);
901
901
  }
902
902
  }
903
903
  _CenterOfPressureHelper_range = new WeakMap();
@@ -918,8 +918,8 @@ function arrayWithoutDuplicates(array) {
918
918
  return array.filter((value, index) => array.indexOf(value) == index);
919
919
  }
920
920
 
921
- var _PressureSensorDataManager_positions, _PressureSensorDataManager_sensorRangeHelpers, _PressureSensorDataManager_centerOfPressureHelper;
922
- const _console$v = createConsole("PressureDataManager", { log: true });
921
+ var _PressureSensorDataManager_positions, _PressureSensorDataManager_sensorRangeHelpers, _PressureSensorDataManager_normalizedSumRangeHelper, _PressureSensorDataManager_centerOfPressureHelper;
922
+ const _console$v = createConsole("PressureDataManager", { log: false });
923
923
  const PressureSensorTypes = ["pressure"];
924
924
  const ContinuousPressureSensorTypes = PressureSensorTypes;
925
925
  const DefaultNumberOfPressureSensors = 8;
@@ -927,6 +927,7 @@ class PressureSensorDataManager {
927
927
  constructor() {
928
928
  _PressureSensorDataManager_positions.set(this, []);
929
929
  _PressureSensorDataManager_sensorRangeHelpers.set(this, void 0);
930
+ _PressureSensorDataManager_normalizedSumRangeHelper.set(this, new RangeHelper());
930
931
  _PressureSensorDataManager_centerOfPressureHelper.set(this, new CenterOfPressureHelper());
931
932
  }
932
933
  get positions() {
@@ -949,37 +950,38 @@ class PressureSensorDataManager {
949
950
  this.resetRange();
950
951
  }
951
952
  resetRange() {
952
- __classPrivateFieldGet(this, _PressureSensorDataManager_sensorRangeHelpers, "f").forEach((rangeHelper) => rangeHelper.reset());
953
+ __classPrivateFieldGet(this, _PressureSensorDataManager_sensorRangeHelpers, "f")?.forEach((rangeHelper) => rangeHelper.reset());
953
954
  __classPrivateFieldGet(this, _PressureSensorDataManager_centerOfPressureHelper, "f").reset();
955
+ __classPrivateFieldGet(this, _PressureSensorDataManager_normalizedSumRangeHelper, "f").reset();
954
956
  }
955
957
  parseData(dataView, scalar) {
956
958
  const pressure = { sensors: [], scaledSum: 0, normalizedSum: 0 };
957
959
  for (let index = 0, byteOffset = 0; byteOffset < dataView.byteLength; index++, byteOffset += 2) {
958
960
  const rawValue = dataView.getUint16(byteOffset, true);
959
- const scaledValue = rawValue * scalar;
961
+ let scaledValue = (rawValue * scalar) / this.numberOfSensors;
960
962
  const rangeHelper = __classPrivateFieldGet(this, _PressureSensorDataManager_sensorRangeHelpers, "f")[index];
961
- const normalizedValue = rangeHelper.updateAndGetNormalization(scaledValue, true);
963
+ const normalizedValue = rangeHelper.updateAndGetNormalization(scaledValue, false);
962
964
  const position = this.positions[index];
963
965
  pressure.sensors[index] = { rawValue, scaledValue, normalizedValue, position, weightedValue: 0 };
964
966
  pressure.scaledSum += scaledValue;
965
- pressure.normalizedSum += normalizedValue / this.numberOfSensors;
966
967
  }
967
- if (pressure.scaledSum > 0 && pressure.normalizedSum > 0.001) {
968
+ pressure.normalizedSum = __classPrivateFieldGet(this, _PressureSensorDataManager_normalizedSumRangeHelper, "f").updateAndGetNormalization(pressure.scaledSum, false);
969
+ if (pressure.scaledSum > 0) {
968
970
  pressure.center = { x: 0, y: 0 };
969
971
  pressure.sensors.forEach((sensor) => {
970
972
  sensor.weightedValue = sensor.scaledValue / pressure.scaledSum;
971
973
  pressure.center.x += sensor.position.x * sensor.weightedValue;
972
974
  pressure.center.y += sensor.position.y * sensor.weightedValue;
973
975
  });
974
- pressure.normalizedCenter = __classPrivateFieldGet(this, _PressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center);
976
+ pressure.normalizedCenter = __classPrivateFieldGet(this, _PressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center, false);
975
977
  }
976
978
  _console$v.log({ pressure });
977
979
  return pressure;
978
980
  }
979
981
  }
980
- _PressureSensorDataManager_positions = new WeakMap(), _PressureSensorDataManager_sensorRangeHelpers = new WeakMap(), _PressureSensorDataManager_centerOfPressureHelper = new WeakMap();
982
+ _PressureSensorDataManager_positions = new WeakMap(), _PressureSensorDataManager_sensorRangeHelpers = new WeakMap(), _PressureSensorDataManager_normalizedSumRangeHelper = new WeakMap(), _PressureSensorDataManager_centerOfPressureHelper = new WeakMap();
981
983
 
982
- const _console$u = createConsole("MotionSensorDataManager", { log: true });
984
+ const _console$u = createConsole("MotionSensorDataManager", { log: false });
983
985
  const MotionSensorTypes = [
984
986
  "acceleration",
985
987
  "gravity",
@@ -1072,7 +1074,7 @@ class MotionSensorDataManager {
1072
1074
  var _BarometerSensorDataManager_instances, _BarometerSensorDataManager_calculcateAltitude;
1073
1075
  const BarometerSensorTypes = ["barometer"];
1074
1076
  const ContinuousBarometerSensorTypes = BarometerSensorTypes;
1075
- const _console$t = createConsole("BarometerSensorDataManager", { log: true });
1077
+ const _console$t = createConsole("BarometerSensorDataManager", { log: false });
1076
1078
  class BarometerSensorDataManager {
1077
1079
  constructor() {
1078
1080
  _BarometerSensorDataManager_instances.add(this);
@@ -1096,7 +1098,7 @@ _BarometerSensorDataManager_instances = new WeakSet(), _BarometerSensorDataManag
1096
1098
  return h;
1097
1099
  };
1098
1100
 
1099
- const _console$s = createConsole("ParseUtils", { log: true });
1101
+ const _console$s = createConsole("ParseUtils", { log: false });
1100
1102
  function parseStringFromDataView(dataView, byteOffset = 0) {
1101
1103
  const stringLength = dataView.getUint8(byteOffset++);
1102
1104
  const string = textDecoder.decode(dataView.buffer.slice(dataView.byteOffset + byteOffset, dataView.byteOffset + byteOffset + stringLength));
@@ -1126,7 +1128,7 @@ function parseMessage(dataView, messageTypes, callback, context, parseMessageLen
1126
1128
  }
1127
1129
 
1128
1130
  var _SensorDataManager_scalars;
1129
- const _console$r = createConsole("SensorDataManager", { log: true });
1131
+ const _console$r = createConsole("SensorDataManager", { log: false });
1130
1132
  const SensorTypes = [...PressureSensorTypes, ...MotionSensorTypes, ...BarometerSensorTypes];
1131
1133
  const ContinuousSensorTypes = [
1132
1134
  ...ContinuousPressureSensorTypes,
@@ -1269,7 +1271,7 @@ function autoBind(self, {include, exclude} = {}) {
1269
1271
  }
1270
1272
 
1271
1273
  var _SensorConfigurationManager_instances, _a$5, _SensorConfigurationManager_dispatchEvent_get, _SensorConfigurationManager_availableSensorTypes, _SensorConfigurationManager_assertAvailableSensorType, _SensorConfigurationManager_configuration, _SensorConfigurationManager_updateConfiguration, _SensorConfigurationManager_isRedundant, _SensorConfigurationManager_parse, _SensorConfigurationManager_AssertValidSensorRate, _SensorConfigurationManager_assertValidSensorRate, _SensorConfigurationManager_createData, _SensorConfigurationManager_ZeroSensorConfiguration;
1272
- const _console$q = createConsole("SensorConfigurationManager", { log: true });
1274
+ const _console$q = createConsole("SensorConfigurationManager", { log: false });
1273
1275
  const MaxSensorRate = 2 ** 16 - 1;
1274
1276
  const SensorRateStep = 5;
1275
1277
  const SensorConfigurationMessageTypes = ["getSensorConfiguration", "setSensorConfiguration"];
@@ -1310,7 +1312,7 @@ class SensorConfigurationManager {
1310
1312
  }
1311
1313
  get zeroSensorConfiguration() {
1312
1314
  const zeroSensorConfiguration = {};
1313
- SensorTypes.forEach((sensorType) => {
1315
+ __classPrivateFieldGet(this, _SensorConfigurationManager_availableSensorTypes, "f").forEach((sensorType) => {
1314
1316
  zeroSensorConfiguration[sensorType] = 0;
1315
1317
  });
1316
1318
  return zeroSensorConfiguration;
@@ -1336,7 +1338,7 @@ _a$5 = SensorConfigurationManager, _SensorConfigurationManager_availableSensorTy
1336
1338
  }, _SensorConfigurationManager_assertAvailableSensorType = function _SensorConfigurationManager_assertAvailableSensorType(sensorType) {
1337
1339
  _console$q.assertWithError(__classPrivateFieldGet(this, _SensorConfigurationManager_availableSensorTypes, "f"), "must get initial sensorConfiguration");
1338
1340
  const isSensorTypeAvailable = __classPrivateFieldGet(this, _SensorConfigurationManager_availableSensorTypes, "f")?.includes(sensorType);
1339
- _console$q.assert(isSensorTypeAvailable, `unavailable sensor type "${sensorType}"`);
1341
+ _console$q.log(isSensorTypeAvailable, `unavailable sensor type "${sensorType}"`);
1340
1342
  return isSensorTypeAvailable;
1341
1343
  }, _SensorConfigurationManager_updateConfiguration = function _SensorConfigurationManager_updateConfiguration(updatedConfiguration) {
1342
1344
  __classPrivateFieldSet(this, _SensorConfigurationManager_configuration, updatedConfiguration, "f");
@@ -1393,7 +1395,7 @@ _SensorConfigurationManager_ZeroSensorConfiguration = { value: {} };
1393
1395
  })();
1394
1396
 
1395
1397
  var _TfliteManager_instances, _TfliteManager_assertValidTask, _TfliteManager_assertValidTaskEnum, _TfliteManager_dispatchEvent_get, _TfliteManager_name, _TfliteManager_parseName, _TfliteManager_updateName, _TfliteManager_task, _TfliteManager_parseTask, _TfliteManager_updateTask, _TfliteManager_sampleRate, _TfliteManager_parseSampleRate, _TfliteManager_updateSampleRate, _TfliteManager_sensorTypes, _TfliteManager_parseSensorTypes, _TfliteManager_updateSensorTypes, _TfliteManager_isReady, _TfliteManager_parseIsReady, _TfliteManager_updateIsReady, _TfliteManager_assertIsReady, _TfliteManager_captureDelay, _TfliteManager_parseCaptureDelay, _TfliteManager_updateCaptueDelay, _TfliteManager_threshold, _TfliteManager_parseThreshold, _TfliteManager_updateThreshold, _TfliteManager_inferencingEnabled, _TfliteManager_parseInferencingEnabled, _TfliteManager_updateInferencingEnabled, _TfliteManager_parseInference;
1396
- const _console$p = createConsole("TfliteManager", { log: true });
1398
+ const _console$p = createConsole("TfliteManager", { log: false });
1397
1399
  const TfliteMessageTypes = [
1398
1400
  "getTfliteName",
1399
1401
  "setTfliteName",
@@ -1728,7 +1730,7 @@ _TfliteManager_name = new WeakMap(), _TfliteManager_task = new WeakMap(), _Tflit
1728
1730
  };
1729
1731
 
1730
1732
  var _DeviceInformationManager_instances, _DeviceInformationManager_dispatchEvent_get, _DeviceInformationManager_information, _DeviceInformationManager_isComplete_get, _DeviceInformationManager_update;
1731
- const _console$o = createConsole("DeviceInformationManager", { log: true });
1733
+ const _console$o = createConsole("DeviceInformationManager", { log: false });
1732
1734
  const DeviceInformationMessageTypes = [
1733
1735
  "manufacturerName",
1734
1736
  "modelNumber",
@@ -1803,7 +1805,7 @@ class DeviceInformationManager {
1803
1805
  _DeviceInformationManager_information = new WeakMap(), _DeviceInformationManager_instances = new WeakSet(), _DeviceInformationManager_dispatchEvent_get = function _DeviceInformationManager_dispatchEvent_get() {
1804
1806
  return this.eventDispatcher.dispatchEvent;
1805
1807
  }, _DeviceInformationManager_isComplete_get = function _DeviceInformationManager_isComplete_get() {
1806
- return DeviceInformationMessageTypes.every((key) => key in __classPrivateFieldGet(this, _DeviceInformationManager_information, "f"));
1808
+ return DeviceInformationMessageTypes.filter((key) => key != "serialNumber").every((key) => key in __classPrivateFieldGet(this, _DeviceInformationManager_information, "f"));
1807
1809
  }, _DeviceInformationManager_update = function _DeviceInformationManager_update(partialDeviceInformation) {
1808
1810
  _console$o.log({ partialDeviceInformation });
1809
1811
  const deviceInformationNames = Object.keys(partialDeviceInformation);
@@ -1821,9 +1823,9 @@ _DeviceInformationManager_information = new WeakMap(), _DeviceInformationManager
1821
1823
  };
1822
1824
 
1823
1825
  var _InformationManager_instances, _InformationManager_dispatchEvent_get, _InformationManager_isCharging, _InformationManager_updateIsCharging, _InformationManager_batteryCurrent, _InformationManager_updateBatteryCurrent, _InformationManager_id, _InformationManager_updateId, _InformationManager_name, _InformationManager_type, _InformationManager_assertValidDeviceType, _InformationManager_assertValidDeviceTypeEnum, _InformationManager_setTypeEnum, _InformationManager_mtu, _InformationManager_updateMtu, _InformationManager_isCurrentTimeSet, _InformationManager_onCurrentTime, _InformationManager_setCurrentTime;
1824
- const _console$n = createConsole("InformationManager", { log: true });
1825
- const DeviceTypes = ["leftInsole", "rightInsole"];
1826
- const InsoleSides = ["left", "right"];
1826
+ const _console$n = createConsole("InformationManager", { log: false });
1827
+ const DeviceTypes = ["leftInsole", "rightInsole", "leftGlove", "rightGlove", "glasses", "generic"];
1828
+ const Sides = ["left", "right"];
1827
1829
  const MinNameLength = 2;
1828
1830
  const MaxNameLength = 30;
1829
1831
  const InformationMessageTypes = [
@@ -1918,12 +1920,25 @@ class InformationManager {
1918
1920
  return false;
1919
1921
  }
1920
1922
  }
1921
- get insoleSide() {
1923
+ get isGlove() {
1924
+ switch (this.type) {
1925
+ case "leftGlove":
1926
+ case "rightGlove":
1927
+ return true;
1928
+ default:
1929
+ return false;
1930
+ }
1931
+ }
1932
+ get side() {
1922
1933
  switch (this.type) {
1923
1934
  case "leftInsole":
1935
+ case "leftGlove":
1924
1936
  return "left";
1925
1937
  case "rightInsole":
1938
+ case "rightGlove":
1926
1939
  return "right";
1940
+ default:
1941
+ return "left";
1927
1942
  }
1928
1943
  }
1929
1944
  get mtu() {
@@ -1964,7 +1979,10 @@ class InformationManager {
1964
1979
  this.updateType(type);
1965
1980
  break;
1966
1981
  case "getMtu":
1967
- const mtu = dataView.getUint16(0, true);
1982
+ let mtu = dataView.getUint16(0, true);
1983
+ if (isInBrowser) {
1984
+ mtu = Math.min(mtu, 512);
1985
+ }
1968
1986
  _console$n.log({ mtu });
1969
1987
  __classPrivateFieldGet(this, _InformationManager_instances, "m", _InformationManager_updateMtu).call(this, mtu);
1970
1988
  break;
@@ -2339,8 +2357,8 @@ _VibrationManager_instances = new WeakSet(), _VibrationManager_verifyLocation =
2339
2357
  return data;
2340
2358
  };
2341
2359
 
2342
- var _BaseConnectionManager_instances, _a$4, _BaseConnectionManager_AssertValidTxRxMessageType, _BaseConnectionManager_assertIsSupported, _BaseConnectionManager_status, _BaseConnectionManager_assertIsNotConnected, _BaseConnectionManager_assertIsNotConnecting, _BaseConnectionManager_assertIsConnected, _BaseConnectionManager_assertIsNotDisconnecting, _BaseConnectionManager_assertIsConnectedAndNotDisconnecting, _BaseConnectionManager_pendingMessages, _BaseConnectionManager_isSendingMessages, _BaseConnectionManager_onRxMessage, _BaseConnectionManager_timer, _BaseConnectionManager_checkConnection;
2343
- const _console$l = createConsole("BaseConnectionManager", { log: true });
2360
+ var _BaseConnectionManager_instances, _a$4, _BaseConnectionManager_AssertValidTxRxMessageType, _BaseConnectionManager_assertIsSupported, _BaseConnectionManager_status, _BaseConnectionManager_assertIsNotConnected, _BaseConnectionManager_assertIsNotConnecting, _BaseConnectionManager_assertIsConnected, _BaseConnectionManager_assertIsNotDisconnecting, _BaseConnectionManager_assertIsConnectedAndNotDisconnecting, _BaseConnectionManager_pendingMessages, _BaseConnectionManager_isSendingMessages, _BaseConnectionManager_defaultMtu, _BaseConnectionManager_onRxMessage, _BaseConnectionManager_timer, _BaseConnectionManager_checkConnection;
2361
+ const _console$l = createConsole("BaseConnectionManager", { log: false });
2344
2362
  const ConnectionStatuses = ["notConnected", "connecting", "connected", "disconnecting"];
2345
2363
  const ConnectionEventTypes = [...ConnectionStatuses, "connectionStatus", "isConnected"];
2346
2364
  const TxRxMessageTypes = [
@@ -2371,6 +2389,9 @@ class BaseConnectionManager {
2371
2389
  get isSupported() {
2372
2390
  return this.baseConstructor.isSupported;
2373
2391
  }
2392
+ get canUpdateFirmware() {
2393
+ return false;
2394
+ }
2374
2395
  get type() {
2375
2396
  return this.baseConstructor.type;
2376
2397
  }
@@ -2379,6 +2400,8 @@ class BaseConnectionManager {
2379
2400
  _BaseConnectionManager_status.set(this, "notConnected");
2380
2401
  _BaseConnectionManager_pendingMessages.set(this, []);
2381
2402
  _BaseConnectionManager_isSendingMessages.set(this, false);
2403
+ _BaseConnectionManager_defaultMtu.set(this, 23);
2404
+ this.mtu = __classPrivateFieldGet(this, _BaseConnectionManager_defaultMtu, "f");
2382
2405
  _BaseConnectionManager_timer.set(this, new Timer(__classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_checkConnection).bind(this), 5000));
2383
2406
  __classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_assertIsSupported).call(this);
2384
2407
  }
@@ -2401,12 +2424,15 @@ class BaseConnectionManager {
2401
2424
  __classPrivateFieldGet(this, _BaseConnectionManager_timer, "f").stop();
2402
2425
  }
2403
2426
  if (__classPrivateFieldGet(this, _BaseConnectionManager_status, "f") == "notConnected") {
2404
- this.mtu = undefined;
2427
+ this.mtu = __classPrivateFieldGet(this, _BaseConnectionManager_defaultMtu, "f");
2405
2428
  }
2406
2429
  }
2407
2430
  get isConnected() {
2408
2431
  return this.status == "connected";
2409
2432
  }
2433
+ get isAvailable() {
2434
+ return false;
2435
+ }
2410
2436
  async connect() {
2411
2437
  __classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_assertIsNotConnected).call(this);
2412
2438
  __classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_assertIsNotConnecting).call(this);
@@ -2441,7 +2467,7 @@ class BaseConnectionManager {
2441
2467
  return;
2442
2468
  }
2443
2469
  if (__classPrivateFieldGet(this, _BaseConnectionManager_isSendingMessages, "f")) {
2444
- console.log("already sending messages - waiting until later");
2470
+ _console$l.log("already sending messages - waiting until later");
2445
2471
  return;
2446
2472
  }
2447
2473
  __classPrivateFieldSet(this, _BaseConnectionManager_isSendingMessages, true, "f");
@@ -2456,25 +2482,32 @@ class BaseConnectionManager {
2456
2482
  __classPrivateFieldGet(this, _BaseConnectionManager_pendingMessages, "f").length = 0;
2457
2483
  if (this.mtu) {
2458
2484
  while (arrayBuffers.length > 0) {
2485
+ if (arrayBuffers.every((arrayBuffer) => arrayBuffer.byteLength > this.mtu - 3)) {
2486
+ _console$l.log("every arrayBuffer is too big to send");
2487
+ break;
2488
+ }
2489
+ _console$l.log("remaining arrayBuffers.length", arrayBuffers.length);
2459
2490
  let arrayBufferByteLength = 0;
2460
2491
  let arrayBufferCount = 0;
2461
2492
  arrayBuffers.some((arrayBuffer) => {
2462
2493
  if (arrayBufferByteLength + arrayBuffer.byteLength > this.mtu - 3) {
2494
+ _console$l.log(`stopping appending arrayBuffers ( length ${arrayBuffer.byteLength} too much)`);
2463
2495
  return true;
2464
2496
  }
2497
+ _console$l.log(`allowing arrayBuffer with length ${arrayBuffer.byteLength}`);
2465
2498
  arrayBufferCount++;
2466
2499
  arrayBufferByteLength += arrayBuffer.byteLength;
2467
2500
  });
2468
2501
  const arrayBuffersToSend = arrayBuffers.splice(0, arrayBufferCount);
2469
2502
  _console$l.log({ arrayBufferCount, arrayBuffersToSend });
2470
2503
  const arrayBuffer = concatenateArrayBuffers(...arrayBuffersToSend);
2471
- _console$l.log("sending arrayBuffer", arrayBuffer);
2504
+ _console$l.log("sending arrayBuffer (partitioned)", arrayBuffer);
2472
2505
  await this.sendTxData(arrayBuffer);
2473
2506
  }
2474
2507
  }
2475
2508
  else {
2476
2509
  const arrayBuffer = concatenateArrayBuffers(...arrayBuffers);
2477
- _console$l.log("sending arrayBuffer", arrayBuffer);
2510
+ _console$l.log("sending arrayBuffer (all)", arrayBuffer);
2478
2511
  await this.sendTxData(arrayBuffer);
2479
2512
  }
2480
2513
  __classPrivateFieldSet(this, _BaseConnectionManager_isSendingMessages, false, "f");
@@ -2491,7 +2524,7 @@ class BaseConnectionManager {
2491
2524
  __classPrivateFieldGet(this, _BaseConnectionManager_pendingMessages, "f").length = 0;
2492
2525
  }
2493
2526
  }
2494
- _a$4 = BaseConnectionManager, _BaseConnectionManager_status = new WeakMap(), _BaseConnectionManager_pendingMessages = new WeakMap(), _BaseConnectionManager_isSendingMessages = new WeakMap(), _BaseConnectionManager_timer = new WeakMap(), _BaseConnectionManager_instances = new WeakSet(), _BaseConnectionManager_AssertValidTxRxMessageType = function _BaseConnectionManager_AssertValidTxRxMessageType(messageType) {
2527
+ _a$4 = BaseConnectionManager, _BaseConnectionManager_status = new WeakMap(), _BaseConnectionManager_pendingMessages = new WeakMap(), _BaseConnectionManager_isSendingMessages = new WeakMap(), _BaseConnectionManager_defaultMtu = new WeakMap(), _BaseConnectionManager_timer = new WeakMap(), _BaseConnectionManager_instances = new WeakSet(), _BaseConnectionManager_AssertValidTxRxMessageType = function _BaseConnectionManager_AssertValidTxRxMessageType(messageType) {
2495
2528
  _console$l.assertEnumWithError(messageType, TxRxMessageTypes);
2496
2529
  }, _BaseConnectionManager_assertIsSupported = function _BaseConnectionManager_assertIsSupported() {
2497
2530
  _console$l.assertWithError(this.isSupported, `${this.constructor.name} is not supported`);
@@ -2702,12 +2735,15 @@ function getCharacteristicProperties(characteristicName) {
2702
2735
  }
2703
2736
  const serviceDataUUID = "0000";
2704
2737
 
2705
- const _console$i = createConsole("BluetoothConnectionManager", { log: true });
2738
+ const _console$i = createConsole("BluetoothConnectionManager", { log: false });
2706
2739
  class BluetoothConnectionManager extends BaseConnectionManager {
2707
2740
  constructor() {
2708
2741
  super(...arguments);
2709
2742
  this.isInRange = true;
2710
2743
  }
2744
+ get isAvailable() {
2745
+ return true;
2746
+ }
2711
2747
  onCharacteristicValueChanged(characteristicName, dataView) {
2712
2748
  if (characteristicName == "rx") {
2713
2749
  this.parseRxMessage(dataView);
@@ -2733,7 +2769,7 @@ class BluetoothConnectionManager extends BaseConnectionManager {
2733
2769
  }
2734
2770
 
2735
2771
  var _WebBluetoothConnectionManager_instances, _WebBluetoothConnectionManager_boundBluetoothCharacteristicEventListeners, _WebBluetoothConnectionManager_boundBluetoothDeviceEventListeners, _WebBluetoothConnectionManager_device, _WebBluetoothConnectionManager_services, _WebBluetoothConnectionManager_characteristics, _WebBluetoothConnectionManager_getServicesAndCharacteristics, _WebBluetoothConnectionManager_removeEventListeners, _WebBluetoothConnectionManager_onCharacteristicvaluechanged, _WebBluetoothConnectionManager_onCharacteristicValueChanged, _WebBluetoothConnectionManager_onGattserverdisconnected;
2736
- const _console$h = createConsole("WebBluetoothConnectionManager", { log: true });
2772
+ const _console$h = createConsole("WebBluetoothConnectionManager", { log: false });
2737
2773
  var bluetooth;
2738
2774
  if (isInNode) {
2739
2775
  bluetooth = webbluetooth.bluetooth;
@@ -2755,6 +2791,9 @@ class WebBluetoothConnectionManager extends BluetoothConnectionManager {
2755
2791
  get bluetoothId() {
2756
2792
  return this.device.id;
2757
2793
  }
2794
+ get canUpdateFirmware() {
2795
+ return __classPrivateFieldGet(this, _WebBluetoothConnectionManager_characteristics, "f").has("smp");
2796
+ }
2758
2797
  static get isSupported() {
2759
2798
  return Boolean(bluetooth);
2760
2799
  }
@@ -3315,7 +3354,7 @@ const CBOR = {
3315
3354
  decode,
3316
3355
  };
3317
3356
 
3318
- const _console$g = createConsole("mcumgr", { log: true });
3357
+ const _console$g = createConsole("mcumgr", { log: false });
3319
3358
  const constants = {
3320
3359
  MGMT_OP_READ: 0,
3321
3360
  MGMT_OP_READ_RSP: 1,
@@ -3646,7 +3685,7 @@ class MCUManager {
3646
3685
  }
3647
3686
 
3648
3687
  var _FirmwareManager_instances, _FirmwareManager_dispatchEvent_get, _FirmwareManager_status, _FirmwareManager_updateStatus, _FirmwareManager_images, _FirmwareManager_assertImages, _FirmwareManager_assertValidImageIndex, _FirmwareManager_mtu, _FirmwareManager_mcuManager, _FirmwareManager_assignMcuManagerCallbacks, _FirmwareManager_onMcuMessage, _FirmwareManager_onMcuFileDownloadNext, _FirmwareManager_onMcuFileDownloadProgress, _FirmwareManager_onMcuFileDownloadFinished, _FirmwareManager_onMcuFileUploadNext, _FirmwareManager_onMcuFileUploadProgress, _FirmwareManager_onMcuFileUploadFinished, _FirmwareManager_onMcuImageUploadNext, _FirmwareManager_onMcuImageUploadProgress, _FirmwareManager_onMcuImageUploadFinished, _FirmwareManager_onMcuImageState;
3649
- const _console$f = createConsole("FirmwareManager", { log: true });
3688
+ const _console$f = createConsole("FirmwareManager", { log: false });
3650
3689
  const FirmwareMessageTypes = ["smp"];
3651
3690
  const FirmwareEventTypes = [
3652
3691
  ...FirmwareMessageTypes,
@@ -3894,7 +3933,7 @@ _FirmwareManager_status = new WeakMap(), _FirmwareManager_images = new WeakMap()
3894
3933
  };
3895
3934
 
3896
3935
  var _DeviceManager_instances, _DeviceManager_boundDeviceEventListeners, _DeviceManager_onDeviceType, _DeviceManager_ConnectedDevices, _DeviceManager_UseLocalStorage, _DeviceManager_DefaultLocalStorageConfiguration, _DeviceManager_LocalStorageConfiguration, _DeviceManager_AssertLocalStorage, _DeviceManager_LocalStorageKey, _DeviceManager_SaveToLocalStorage, _DeviceManager_LoadFromLocalStorage, _DeviceManager_UpdateLocalStorageConfigurationForDevice, _DeviceManager_AvailableDevices, _DeviceManager_EventDispatcher, _DeviceManager_DispatchEvent_get, _DeviceManager_OnDeviceIsConnected, _DeviceManager_DispatchAvailableDevices, _DeviceManager_DispatchConnectedDevices;
3897
- const _console$e = createConsole("DeviceManager", { log: true });
3936
+ const _console$e = createConsole("DeviceManager", { log: false });
3898
3937
  const DeviceManagerEventTypes = [
3899
3938
  "deviceConnected",
3900
3939
  "deviceDisconnected",
@@ -4036,6 +4075,13 @@ class DeviceManager {
4036
4075
  get RemoveAllEventListeners() {
4037
4076
  return __classPrivateFieldGet(this, _DeviceManager_EventDispatcher, "f").removeAllEventListeners;
4038
4077
  }
4078
+ _CheckDeviceAvailability(device) {
4079
+ if (!device.isConnected && !device.isAvailable && __classPrivateFieldGet(this, _DeviceManager_AvailableDevices, "f").includes(device)) {
4080
+ _console$e.log("removing device from availableDevices...");
4081
+ __classPrivateFieldGet(this, _DeviceManager_AvailableDevices, "f").splice(__classPrivateFieldGet(this, _DeviceManager_AvailableDevices, "f").indexOf(device), 1);
4082
+ __classPrivateFieldGet(this, _DeviceManager_instances, "m", _DeviceManager_DispatchAvailableDevices).call(this);
4083
+ }
4084
+ }
4039
4085
  }
4040
4086
  _DeviceManager_boundDeviceEventListeners = new WeakMap(), _DeviceManager_ConnectedDevices = new WeakMap(), _DeviceManager_UseLocalStorage = new WeakMap(), _DeviceManager_DefaultLocalStorageConfiguration = new WeakMap(), _DeviceManager_LocalStorageConfiguration = new WeakMap(), _DeviceManager_LocalStorageKey = new WeakMap(), _DeviceManager_AvailableDevices = new WeakMap(), _DeviceManager_EventDispatcher = new WeakMap(), _DeviceManager_instances = new WeakSet(), _DeviceManager_onDeviceType = function _DeviceManager_onDeviceType(event) {
4041
4087
  if (__classPrivateFieldGet(this, _DeviceManager_UseLocalStorage, "f")) {
@@ -4137,6 +4183,7 @@ _DeviceManager_boundDeviceEventListeners = new WeakMap(), _DeviceManager_Connect
4137
4183
  }
4138
4184
  __classPrivateFieldGet(this, _DeviceManager_instances, "m", _DeviceManager_DispatchAvailableDevices).call(this);
4139
4185
  }
4186
+ this._CheckDeviceAvailability(device);
4140
4187
  }, _DeviceManager_DispatchAvailableDevices = function _DeviceManager_DispatchAvailableDevices() {
4141
4188
  _console$e.log({ AvailableDevices: this.AvailableDevices });
4142
4189
  __classPrivateFieldGet(this, _DeviceManager_instances, "a", _DeviceManager_DispatchEvent_get).call(this, "availableDevices", { availableDevices: this.AvailableDevices });
@@ -4147,7 +4194,7 @@ _DeviceManager_boundDeviceEventListeners = new WeakMap(), _DeviceManager_Connect
4147
4194
  DeviceManager.shared = new DeviceManager();
4148
4195
  var DeviceManager$1 = DeviceManager.shared;
4149
4196
 
4150
- var _Device_instances, _a$3, _Device_DefaultConnectionManager, _Device_eventDispatcher, _Device_dispatchEvent_get, _Device_connectionManager, _Device_sendTxMessages, _Device_isConnected, _Device_assertIsConnected, _Device_hasRequiredInformation_get, _Device_requestRequiredInformation, _Device_assertCanReconnect, _Device_ReconnectOnDisconnection, _Device_reconnectOnDisconnection, _Device_reconnectIntervalId, _Device_onConnectionStatusUpdated, _Device_dispatchConnectionEvents, _Device_checkConnection, _Device_clear, _Device_onConnectionMessageReceived, _Device_onConnectionMessagesReceived, _Device_deviceInformationManager, _Device_batteryLevel, _Device_updateBatteryLevel, _Device_sensorConfigurationManager, _Device_ClearSensorConfigurationOnLeave, _Device_clearSensorConfigurationOnLeave, _Device_sensorDataManager, _Device_vibrationManager, _Device_fileTransferManager, _Device_tfliteManager, _Device_firmwareManager, _Device_sendSmpMessage, _Device_isServerSide;
4197
+ var _Device_instances, _a$3, _Device_DefaultConnectionManager, _Device_eventDispatcher, _Device_dispatchEvent_get, _Device_connectionManager, _Device_sendTxMessages, _Device_isConnected, _Device_assertIsConnected, _Device_hasRequiredInformation_get, _Device_requestRequiredInformation, _Device_assertCanReconnect, _Device_ReconnectOnDisconnection, _Device_reconnectOnDisconnection, _Device_reconnectIntervalId, _Device_onConnectionStatusUpdated, _Device_dispatchConnectionEvents, _Device_checkConnection, _Device_clear, _Device_clearConnection, _Device_onConnectionMessageReceived, _Device_onConnectionMessagesReceived, _Device_deviceInformationManager, _Device_batteryLevel, _Device_updateBatteryLevel, _Device_sensorConfigurationManager, _Device_ClearSensorConfigurationOnLeave, _Device_clearSensorConfigurationOnLeave, _Device_sensorDataManager, _Device_vibrationManager, _Device_fileTransferManager, _Device_tfliteManager, _Device_firmwareManager, _Device_assertCanUpdateFirmware, _Device_sendSmpMessage, _Device_isServerSide;
4151
4198
  const _console$d = createConsole("Device", { log: true });
4152
4199
  const DeviceEventTypes = [
4153
4200
  "connectionMessage",
@@ -4191,6 +4238,9 @@ class Device {
4191
4238
  get bluetoothId() {
4192
4239
  return __classPrivateFieldGet(this, _Device_connectionManager, "f")?.bluetoothId;
4193
4240
  }
4241
+ get isAvailable() {
4242
+ return __classPrivateFieldGet(this, _Device_connectionManager, "f")?.isAvailable;
4243
+ }
4194
4244
  constructor() {
4195
4245
  _Device_instances.add(this);
4196
4246
  _Device_eventDispatcher.set(this, new EventDispatcher(this, DeviceEventTypes));
@@ -4199,7 +4249,7 @@ class Device {
4199
4249
  _Device_isConnected.set(this, false);
4200
4250
  _Device_reconnectOnDisconnection.set(this, _a$3.ReconnectOnDisconnection);
4201
4251
  _Device_reconnectIntervalId.set(this, void 0);
4202
- this.latestConnectionMessage = new Map();
4252
+ this.latestConnectionMessages = new Map();
4203
4253
  _Device_deviceInformationManager.set(this, new DeviceInformationManager());
4204
4254
  _Device_batteryLevel.set(this, 0);
4205
4255
  this._informationManager = new InformationManager();
@@ -4391,8 +4441,11 @@ class Device {
4391
4441
  get isInsole() {
4392
4442
  return this._informationManager.isInsole;
4393
4443
  }
4394
- get insoleSide() {
4395
- return this._informationManager.insoleSide;
4444
+ get isGlove() {
4445
+ return this._informationManager.isGlove;
4446
+ }
4447
+ get side() {
4448
+ return this._informationManager.side;
4396
4449
  }
4397
4450
  get mtu() {
4398
4451
  return this._informationManager.mtu;
@@ -4511,10 +4564,15 @@ class Device {
4511
4564
  get setTfliteThreshold() {
4512
4565
  return __classPrivateFieldGet(this, _Device_tfliteManager, "f").setThreshold;
4513
4566
  }
4567
+ get canUpdateFirmware() {
4568
+ return __classPrivateFieldGet(this, _Device_connectionManager, "f")?.canUpdateFirmware;
4569
+ }
4514
4570
  get uploadFirmware() {
4571
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4515
4572
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").uploadFirmware;
4516
4573
  }
4517
4574
  async reset() {
4575
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4518
4576
  await __classPrivateFieldGet(this, _Device_firmwareManager, "f").reset();
4519
4577
  return __classPrivateFieldGet(this, _Device_connectionManager, "f").disconnect();
4520
4578
  }
@@ -4522,18 +4580,22 @@ class Device {
4522
4580
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").status;
4523
4581
  }
4524
4582
  get getFirmwareImages() {
4583
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4525
4584
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").getImages;
4526
4585
  }
4527
4586
  get firmwareImages() {
4528
4587
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").images;
4529
4588
  }
4530
4589
  get eraseFirmwareImage() {
4590
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4531
4591
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").eraseImage;
4532
4592
  }
4533
4593
  get confirmFirmwareImage() {
4594
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4534
4595
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").confirmImage;
4535
4596
  }
4536
4597
  get testFirmwareImage() {
4598
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4537
4599
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").testImage;
4538
4600
  }
4539
4601
  get isServerSide() {
@@ -4548,6 +4610,9 @@ class Device {
4548
4610
  __classPrivateFieldSet(this, _Device_isServerSide, newIsServerSide, "f");
4549
4611
  __classPrivateFieldGet(this, _Device_fileTransferManager, "f").isServerSide = this.isServerSide;
4550
4612
  }
4613
+ get isUkaton() {
4614
+ return this.deviceInformation.modelNumber.includes("Ukaton");
4615
+ }
4551
4616
  }
4552
4617
  _a$3 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManager = new WeakMap(), _Device_isConnected = new WeakMap(), _Device_reconnectOnDisconnection = new WeakMap(), _Device_reconnectIntervalId = new WeakMap(), _Device_deviceInformationManager = new WeakMap(), _Device_batteryLevel = new WeakMap(), _Device_sensorConfigurationManager = new WeakMap(), _Device_clearSensorConfigurationOnLeave = new WeakMap(), _Device_sensorDataManager = new WeakMap(), _Device_vibrationManager = new WeakMap(), _Device_fileTransferManager = new WeakMap(), _Device_tfliteManager = new WeakMap(), _Device_firmwareManager = new WeakMap(), _Device_isServerSide = new WeakMap(), _Device_instances = new WeakSet(), _Device_DefaultConnectionManager = function _Device_DefaultConnectionManager() {
4553
4618
  return new WebBluetoothConnectionManager();
@@ -4559,7 +4624,11 @@ _a$3 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4559
4624
  _console$d.assertWithError(this.isConnected, "notConnected");
4560
4625
  }, _Device_hasRequiredInformation_get = function _Device_hasRequiredInformation_get() {
4561
4626
  return RequiredInformationConnectionMessages.every((messageType) => {
4562
- return this.latestConnectionMessage.has(messageType);
4627
+ const hasConnectionMessage = this.latestConnectionMessages.has(messageType);
4628
+ if (!hasConnectionMessage) {
4629
+ _console$d.log(`didn't receive "${messageType}" message`);
4630
+ }
4631
+ return hasConnectionMessage;
4563
4632
  });
4564
4633
  }, _Device_requestRequiredInformation = function _Device_requestRequiredInformation() {
4565
4634
  const messages = RequiredInformationConnectionMessages.map((messageType) => ({
@@ -4571,6 +4640,7 @@ _a$3 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4571
4640
  }, _Device_onConnectionStatusUpdated = function _Device_onConnectionStatusUpdated(connectionStatus) {
4572
4641
  _console$d.log({ connectionStatus });
4573
4642
  if (connectionStatus == "notConnected") {
4643
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_clearConnection).call(this);
4574
4644
  if (this.canReconnect && this.reconnectOnDisconnection) {
4575
4645
  _console$d.log("starting reconnect interval...");
4576
4646
  __classPrivateFieldSet(this, _Device_reconnectIntervalId, setInterval(() => {
@@ -4615,10 +4685,12 @@ _a$3 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4615
4685
  break;
4616
4686
  }
4617
4687
  }, _Device_clear = function _Device_clear() {
4618
- this.connectionManager?.clear();
4619
- this.latestConnectionMessage.clear();
4688
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_clearConnection).call(this);
4620
4689
  this._informationManager.clear();
4621
4690
  __classPrivateFieldGet(this, _Device_deviceInformationManager, "f").clear();
4691
+ }, _Device_clearConnection = function _Device_clearConnection() {
4692
+ this.connectionManager?.clear();
4693
+ this.latestConnectionMessages.clear();
4622
4694
  }, _Device_onConnectionMessageReceived = function _Device_onConnectionMessageReceived(messageType, dataView) {
4623
4695
  _console$d.log({ messageType, dataView });
4624
4696
  switch (messageType) {
@@ -4653,7 +4725,7 @@ _a$3 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4653
4725
  throw Error(`uncaught messageType ${messageType}`);
4654
4726
  }
4655
4727
  }
4656
- this.latestConnectionMessage.set(messageType, dataView);
4728
+ this.latestConnectionMessages.set(messageType, dataView);
4657
4729
  __classPrivateFieldGet(this, _Device_instances, "a", _Device_dispatchEvent_get).call(this, "connectionMessage", { messageType, dataView });
4658
4730
  }, _Device_onConnectionMessagesReceived = function _Device_onConnectionMessagesReceived() {
4659
4731
  if (!this.isConnected && __classPrivateFieldGet(this, _Device_instances, "a", _Device_hasRequiredInformation_get)) {
@@ -4672,28 +4744,34 @@ _a$3 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4672
4744
  __classPrivateFieldSet(this, _Device_batteryLevel, updatedBatteryLevel, "f");
4673
4745
  _console$d.log({ updatedBatteryLevel: __classPrivateFieldGet(this, _Device_batteryLevel, "f") });
4674
4746
  __classPrivateFieldGet(this, _Device_instances, "a", _Device_dispatchEvent_get).call(this, "batteryLevel", { batteryLevel: __classPrivateFieldGet(this, _Device_batteryLevel, "f") });
4747
+ }, _Device_assertCanUpdateFirmware = function _Device_assertCanUpdateFirmware() {
4748
+ _console$d.assertWithError(this.canUpdateFirmware, "can't update firmware");
4675
4749
  }, _Device_sendSmpMessage = function _Device_sendSmpMessage(data) {
4750
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4676
4751
  return __classPrivateFieldGet(this, _Device_connectionManager, "f").sendSmpMessage(data);
4677
4752
  };
4678
4753
  _Device_ReconnectOnDisconnection = { value: false };
4679
4754
  _Device_ClearSensorConfigurationOnLeave = { value: true };
4680
4755
 
4681
- var _DevicePairPressureSensorDataManager_instances, _DevicePairPressureSensorDataManager_rawPressure, _DevicePairPressureSensorDataManager_centerOfPressureHelper, _DevicePairPressureSensorDataManager_hasAllPressureData_get, _DevicePairPressureSensorDataManager_updatePressureData;
4682
- const _console$c = createConsole("DevicePairPressureSensorDataManager", { log: true });
4756
+ var _DevicePairPressureSensorDataManager_instances, _DevicePairPressureSensorDataManager_rawPressure, _DevicePairPressureSensorDataManager_centerOfPressureHelper, _DevicePairPressureSensorDataManager_normalizedSumRangeHelper, _DevicePairPressureSensorDataManager_hasAllPressureData_get, _DevicePairPressureSensorDataManager_updatePressureData;
4757
+ const _console$c = createConsole("DevicePairPressureSensorDataManager", { log: false });
4683
4758
  class DevicePairPressureSensorDataManager {
4684
4759
  constructor() {
4685
4760
  _DevicePairPressureSensorDataManager_instances.add(this);
4686
4761
  _DevicePairPressureSensorDataManager_rawPressure.set(this, {});
4687
4762
  _DevicePairPressureSensorDataManager_centerOfPressureHelper.set(this, new CenterOfPressureHelper());
4763
+ _DevicePairPressureSensorDataManager_normalizedSumRangeHelper.set(this, new RangeHelper());
4764
+ this.resetPressureRange();
4688
4765
  }
4689
4766
  resetPressureRange() {
4690
4767
  __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_centerOfPressureHelper, "f").reset();
4768
+ __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_normalizedSumRangeHelper, "f").reset();
4691
4769
  }
4692
4770
  onDevicePressureData(event) {
4693
4771
  const { pressure } = event.message;
4694
- const insoleSide = event.target.insoleSide;
4695
- _console$c.log({ pressure, insoleSide });
4696
- __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[insoleSide] = pressure;
4772
+ const { side } = event.target;
4773
+ _console$c.log({ pressure, side });
4774
+ __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side] = pressure;
4697
4775
  if (__classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_instances, "a", _DevicePairPressureSensorDataManager_hasAllPressureData_get)) {
4698
4776
  return __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_instances, "m", _DevicePairPressureSensorDataManager_updatePressureData).call(this);
4699
4777
  }
@@ -4702,36 +4780,43 @@ class DevicePairPressureSensorDataManager {
4702
4780
  }
4703
4781
  }
4704
4782
  }
4705
- _DevicePairPressureSensorDataManager_rawPressure = new WeakMap(), _DevicePairPressureSensorDataManager_centerOfPressureHelper = new WeakMap(), _DevicePairPressureSensorDataManager_instances = new WeakSet(), _DevicePairPressureSensorDataManager_hasAllPressureData_get = function _DevicePairPressureSensorDataManager_hasAllPressureData_get() {
4706
- return InsoleSides.every((side) => side in __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f"));
4783
+ _DevicePairPressureSensorDataManager_rawPressure = new WeakMap(), _DevicePairPressureSensorDataManager_centerOfPressureHelper = new WeakMap(), _DevicePairPressureSensorDataManager_normalizedSumRangeHelper = new WeakMap(), _DevicePairPressureSensorDataManager_instances = new WeakSet(), _DevicePairPressureSensorDataManager_hasAllPressureData_get = function _DevicePairPressureSensorDataManager_hasAllPressureData_get() {
4784
+ return Sides.every((side) => side in __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f"));
4707
4785
  }, _DevicePairPressureSensorDataManager_updatePressureData = function _DevicePairPressureSensorDataManager_updatePressureData() {
4708
- const pressure = { rawSum: 0, normalizedSum: 0 };
4709
- InsoleSides.forEach((side) => {
4710
- pressure.rawSum += __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side].scaledSum;
4711
- pressure.normalizedSum += __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side].normalizedSum;
4786
+ const pressure = { scaledSum: 0, normalizedSum: 0, sensors: { left: [], right: [] } };
4787
+ Sides.forEach((side) => {
4788
+ const sidePressure = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side];
4789
+ pressure.scaledSum += sidePressure.scaledSum;
4712
4790
  });
4713
- if (pressure.normalizedSum > 0.001) {
4791
+ pressure.normalizedSum += __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_normalizedSumRangeHelper, "f").updateAndGetNormalization(pressure.scaledSum, false);
4792
+ if (pressure.scaledSum > 0) {
4714
4793
  pressure.center = { x: 0, y: 0 };
4715
- InsoleSides.forEach((side) => {
4794
+ Sides.forEach((side) => {
4716
4795
  const sidePressure = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side];
4717
- const normalizedPressureSumWeight = sidePressure.normalizedSum / pressure.normalizedSum;
4718
- if (normalizedPressureSumWeight > 0) {
4719
- if (sidePressure.normalizedCenter?.y != undefined) {
4720
- pressure.center.y += sidePressure.normalizedCenter.y * normalizedPressureSumWeight;
4721
- }
4722
- if (side == "right") {
4723
- pressure.center.x = normalizedPressureSumWeight;
4724
- }
4796
+ {
4797
+ sidePressure.sensors.forEach((sensor) => {
4798
+ const _sensor = { ...sensor };
4799
+ _sensor.weightedValue = sensor.scaledValue / pressure.scaledSum;
4800
+ let { x, y } = sensor.position;
4801
+ x /= 2;
4802
+ if (side == "right") {
4803
+ x += 0.5;
4804
+ }
4805
+ _sensor.position = { x, y };
4806
+ pressure.center.x += _sensor.position.x * _sensor.weightedValue;
4807
+ pressure.center.y += _sensor.position.y * _sensor.weightedValue;
4808
+ pressure.sensors[side].push(_sensor);
4809
+ });
4725
4810
  }
4726
4811
  });
4727
- pressure.normalizedCenter = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center);
4812
+ pressure.normalizedCenter = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center, false);
4728
4813
  }
4729
4814
  _console$c.log({ devicePairPressure: pressure });
4730
4815
  return pressure;
4731
4816
  };
4732
4817
 
4733
4818
  var _DevicePairSensorDataManager_timestamps;
4734
- const _console$b = createConsole("DevicePairSensorDataManager", { log: true });
4819
+ const _console$b = createConsole("DevicePairSensorDataManager", { log: false });
4735
4820
  const DevicePairSensorTypes = ["pressure", "sensorData"];
4736
4821
  const DevicePairSensorDataEventTypes = DevicePairSensorTypes;
4737
4822
  class DevicePairSensorDataManager {
@@ -4751,7 +4836,7 @@ class DevicePairSensorDataManager {
4751
4836
  if (!__classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType]) {
4752
4837
  __classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType] = {};
4753
4838
  }
4754
- __classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType][event.target.insoleSide] = timestamp;
4839
+ __classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType][event.target.side] = timestamp;
4755
4840
  let value;
4756
4841
  switch (sensorType) {
4757
4842
  case "pressure":
@@ -4773,8 +4858,8 @@ class DevicePairSensorDataManager {
4773
4858
  }
4774
4859
  _DevicePairSensorDataManager_timestamps = new WeakMap();
4775
4860
 
4776
- var _DevicePair_instances, _a$2, _DevicePair_eventDispatcher, _DevicePair_dispatchEvent_get, _DevicePair_left, _DevicePair_right, _DevicePair_addDeviceEventListeners, _DevicePair_removeDeviceEventListeners, _DevicePair_removeInsole, _DevicePair_boundDeviceEventListeners, _DevicePair_redispatchDeviceEvent, _DevicePair_onDeviceIsConnected, _DevicePair_onDeviceType, _DevicePair_sensorDataManager, _DevicePair_onDeviceSensorData, _DevicePair_shared;
4777
- const _console$a = createConsole("DevicePair", { log: true });
4861
+ var _DevicePair_instances, _a$2, _DevicePair_type, _DevicePair_eventDispatcher, _DevicePair_dispatchEvent_get, _DevicePair_left, _DevicePair_right, _DevicePair_isDeviceCorrectType, _DevicePair_addDeviceEventListeners, _DevicePair_removeDeviceEventListeners, _DevicePair_removeDevice, _DevicePair_boundDeviceEventListeners, _DevicePair_redispatchDeviceEvent, _DevicePair_onDeviceIsConnected, _DevicePair_onDeviceType, _DevicePair_sensorDataManager, _DevicePair_onDeviceSensorData, _DevicePair_insoles, _DevicePair_gloves;
4862
+ const _console$a = createConsole("DevicePair", { log: false });
4778
4863
  function getDevicePairDeviceEventType(deviceEventType) {
4779
4864
  return `device${capitalizeFirstCharacter(deviceEventType)}`;
4780
4865
  }
@@ -4785,9 +4870,11 @@ const DevicePairEventTypes = [
4785
4870
  ...DevicePairSensorDataEventTypes,
4786
4871
  ...DevicePairDeviceEventTypes,
4787
4872
  ];
4873
+ const DevicePairTypes = ["insoles", "gloves"];
4788
4874
  class DevicePair {
4789
- constructor() {
4875
+ constructor(type) {
4790
4876
  _DevicePair_instances.add(this);
4877
+ _DevicePair_type.set(this, void 0);
4791
4878
  _DevicePair_eventDispatcher.set(this, new EventDispatcher(this, DevicePairEventTypes));
4792
4879
  _DevicePair_left.set(this, void 0);
4793
4880
  _DevicePair_right.set(this, void 0);
@@ -4797,10 +4884,14 @@ class DevicePair {
4797
4884
  getType: __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_onDeviceType).bind(this),
4798
4885
  });
4799
4886
  _DevicePair_sensorDataManager.set(this, new DevicePairSensorDataManager());
4887
+ __classPrivateFieldSet(this, _DevicePair_type, type, "f");
4800
4888
  __classPrivateFieldGet(this, _DevicePair_sensorDataManager, "f").eventDispatcher = __classPrivateFieldGet(this, _DevicePair_eventDispatcher, "f");
4801
4889
  }
4802
4890
  get sides() {
4803
- return InsoleSides;
4891
+ return Sides;
4892
+ }
4893
+ get type() {
4894
+ return __classPrivateFieldGet(this, _DevicePair_type, "f");
4804
4895
  }
4805
4896
  get addEventListener() {
4806
4897
  return __classPrivateFieldGet(this, _DevicePair_eventDispatcher, "f").addEventListener;
@@ -4824,20 +4915,20 @@ class DevicePair {
4824
4915
  return __classPrivateFieldGet(this, _DevicePair_right, "f");
4825
4916
  }
4826
4917
  get isConnected() {
4827
- return InsoleSides.every((side) => this[side]?.isConnected);
4918
+ return Sides.every((side) => this[side]?.isConnected);
4828
4919
  }
4829
4920
  get isPartiallyConnected() {
4830
- return InsoleSides.some((side) => this[side]?.isConnected);
4921
+ return Sides.some((side) => this[side]?.isConnected);
4831
4922
  }
4832
4923
  get isHalfConnected() {
4833
4924
  return this.isPartiallyConnected && !this.isConnected;
4834
4925
  }
4835
- assignInsole(device) {
4836
- if (!device.isInsole) {
4837
- _console$a.warn("device is not an insole");
4926
+ assignDevice(device) {
4927
+ if (!__classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_isDeviceCorrectType).call(this, device)) {
4928
+ _console$a.warn(`device is incorrect type ${device.type} for ${this.type} devicePair`);
4838
4929
  return;
4839
4930
  }
4840
- const side = device.insoleSide;
4931
+ const side = device.side;
4841
4932
  const currentDevice = this[side];
4842
4933
  if (device == currentDevice) {
4843
4934
  _console$a.log("device already assigned");
@@ -4855,35 +4946,46 @@ class DevicePair {
4855
4946
  __classPrivateFieldSet(this, _DevicePair_right, device, "f");
4856
4947
  break;
4857
4948
  }
4858
- _console$a.log(`assigned ${side} insole`, device);
4949
+ _console$a.log(`assigned ${side} device`, device);
4859
4950
  this.resetPressureRange();
4860
4951
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, "isConnected", { isConnected: this.isConnected });
4861
4952
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, "deviceIsConnected", { device, isConnected: device.isConnected, side });
4862
4953
  return currentDevice;
4863
4954
  }
4864
4955
  async setSensorConfiguration(sensorConfiguration) {
4865
- for (let i = 0; i < InsoleSides.length; i++) {
4866
- const side = InsoleSides[i];
4956
+ for (let i = 0; i < Sides.length; i++) {
4957
+ const side = Sides[i];
4867
4958
  if (this[side]?.isConnected) {
4868
4959
  await this[side].setSensorConfiguration(sensorConfiguration);
4869
4960
  }
4870
4961
  }
4871
4962
  }
4872
4963
  resetPressureRange() {
4964
+ Sides.forEach((side) => this[side]?.resetPressureRange());
4873
4965
  __classPrivateFieldGet(this, _DevicePair_sensorDataManager, "f").resetPressureRange();
4874
4966
  }
4875
4967
  async triggerVibration(vibrationConfigurations, sendImmediately) {
4876
- const promises = InsoleSides.map((side) => {
4968
+ const promises = Sides.map((side) => {
4877
4969
  return this[side]?.triggerVibration(vibrationConfigurations, sendImmediately);
4878
4970
  }).filter(Boolean);
4879
4971
  return Promise.allSettled(promises);
4880
4972
  }
4881
- static get shared() {
4882
- return __classPrivateFieldGet(this, _a$2, "f", _DevicePair_shared);
4973
+ static get insoles() {
4974
+ return __classPrivateFieldGet(this, _a$2, "f", _DevicePair_insoles);
4975
+ }
4976
+ static get gloves() {
4977
+ return __classPrivateFieldGet(this, _a$2, "f", _DevicePair_gloves);
4883
4978
  }
4884
4979
  }
4885
- _a$2 = DevicePair, _DevicePair_eventDispatcher = new WeakMap(), _DevicePair_left = new WeakMap(), _DevicePair_right = new WeakMap(), _DevicePair_boundDeviceEventListeners = new WeakMap(), _DevicePair_sensorDataManager = new WeakMap(), _DevicePair_instances = new WeakSet(), _DevicePair_dispatchEvent_get = function _DevicePair_dispatchEvent_get() {
4980
+ _a$2 = DevicePair, _DevicePair_type = new WeakMap(), _DevicePair_eventDispatcher = new WeakMap(), _DevicePair_left = new WeakMap(), _DevicePair_right = new WeakMap(), _DevicePair_boundDeviceEventListeners = new WeakMap(), _DevicePair_sensorDataManager = new WeakMap(), _DevicePair_instances = new WeakSet(), _DevicePair_dispatchEvent_get = function _DevicePair_dispatchEvent_get() {
4886
4981
  return __classPrivateFieldGet(this, _DevicePair_eventDispatcher, "f").dispatchEvent;
4982
+ }, _DevicePair_isDeviceCorrectType = function _DevicePair_isDeviceCorrectType(device) {
4983
+ switch (this.type) {
4984
+ case "insoles":
4985
+ return device.isInsole;
4986
+ case "gloves":
4987
+ return device.isGlove;
4988
+ }
4887
4989
  }, _DevicePair_addDeviceEventListeners = function _DevicePair_addDeviceEventListeners(device) {
4888
4990
  addEventListeners(device, __classPrivateFieldGet(this, _DevicePair_boundDeviceEventListeners, "f"));
4889
4991
  DeviceEventTypes.forEach((deviceEventType) => {
@@ -4894,12 +4996,12 @@ _a$2 = DevicePair, _DevicePair_eventDispatcher = new WeakMap(), _DevicePair_left
4894
4996
  DeviceEventTypes.forEach((deviceEventType) => {
4895
4997
  device.removeEventListener(deviceEventType, __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_redispatchDeviceEvent).bind(this));
4896
4998
  });
4897
- }, _DevicePair_removeInsole = function _DevicePair_removeInsole(device) {
4898
- const foundDevice = InsoleSides.some((side) => {
4999
+ }, _DevicePair_removeDevice = function _DevicePair_removeDevice(device) {
5000
+ const foundDevice = Sides.some((side) => {
4899
5001
  if (this[side] != device) {
4900
5002
  return false;
4901
5003
  }
4902
- _console$a.log(`removing ${side} insole`, device);
5004
+ _console$a.log(`removing ${side} device`, device);
4903
5005
  removeEventListeners(device, __classPrivateFieldGet(this, _DevicePair_boundDeviceEventListeners, "f"));
4904
5006
  delete this[side];
4905
5007
  return true;
@@ -4913,31 +5015,35 @@ _a$2 = DevicePair, _DevicePair_eventDispatcher = new WeakMap(), _DevicePair_left
4913
5015
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, getDevicePairDeviceEventType(type), {
4914
5016
  ...message,
4915
5017
  device,
4916
- side: device.insoleSide,
5018
+ side: device.side,
4917
5019
  });
4918
5020
  }, _DevicePair_onDeviceIsConnected = function _DevicePair_onDeviceIsConnected(deviceEvent) {
4919
5021
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, "isConnected", { isConnected: this.isConnected });
4920
5022
  }, _DevicePair_onDeviceType = function _DevicePair_onDeviceType(deviceEvent) {
4921
5023
  const { target: device } = deviceEvent;
4922
- if (this[device.insoleSide] == device) {
5024
+ if (this[device.side] == device) {
4923
5025
  return;
4924
5026
  }
4925
- const foundDevice = __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_removeInsole).call(this, device);
5027
+ const foundDevice = __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_removeDevice).call(this, device);
4926
5028
  if (!foundDevice) {
4927
5029
  return;
4928
5030
  }
4929
- this.assignInsole(device);
5031
+ this.assignDevice(device);
4930
5032
  }, _DevicePair_onDeviceSensorData = function _DevicePair_onDeviceSensorData(deviceEvent) {
4931
5033
  if (this.isConnected) {
4932
5034
  __classPrivateFieldGet(this, _DevicePair_sensorDataManager, "f").onDeviceSensorData(deviceEvent);
4933
5035
  }
4934
5036
  };
4935
- _DevicePair_shared = { value: new _a$2() };
5037
+ _DevicePair_insoles = { value: new _a$2("insoles") };
5038
+ _DevicePair_gloves = { value: new _a$2("gloves") };
4936
5039
  (() => {
4937
5040
  DeviceManager$1.AddEventListener("deviceConnected", (event) => {
4938
5041
  const { device } = event.message;
4939
5042
  if (device.isInsole) {
4940
- __classPrivateFieldGet(_a$2, _a$2, "f", _DevicePair_shared).assignInsole(device);
5043
+ __classPrivateFieldGet(_a$2, _a$2, "f", _DevicePair_insoles).assignDevice(device);
5044
+ }
5045
+ if (device.isGlove) {
5046
+ __classPrivateFieldGet(_a$2, _a$2, "f", _DevicePair_gloves).assignDevice(device);
4941
5047
  }
4942
5048
  });
4943
5049
  })();
@@ -5065,7 +5171,7 @@ _a$1 = BaseScanner, _BaseScanner_boundEventListeners = new WeakMap(), _BaseScann
5065
5171
  _BaseScanner_DiscoveredDeviceExpirationTimeout = { value: 5000 };
5066
5172
 
5067
5173
  var _NobleConnectionManager_instances, _NobleConnectionManager_noblePeripheral, _NobleConnectionManager_unboundNoblePeripheralListeners, _NobleConnectionManager_onNoblePeripheralConnect, _NobleConnectionManager_onNoblePeripheralDisconnect, _NobleConnectionManager_onNoblePeripheralState, _NobleConnectionManager_removeEventListeners, _NobleConnectionManager_onNoblePeripheralRssiUpdate, _NobleConnectionManager_onNoblePeripheralServicesDiscover, _NobleConnectionManager_services, _NobleConnectionManager_unboundNobleServiceListeners, _NobleConnectionManager_onNobleServiceCharacteristicsDiscover, _NobleConnectionManager_unboundNobleCharacteristicListeners, _NobleConnectionManager_characteristics, _NobleConnectionManager_hasAllCharacteristics_get, _NobleConnectionManager_onNobleCharacteristicData, _NobleConnectionManager_onNobleCharacteristicWrite, _NobleConnectionManager_onNobleCharacteristicNotify;
5068
- const _console$8 = createConsole("NobleConnectionManager", { log: true });
5174
+ const _console$8 = createConsole("NobleConnectionManager", { log: false });
5069
5175
  class NobleConnectionManager extends BluetoothConnectionManager {
5070
5176
  constructor() {
5071
5177
  super(...arguments);
@@ -5091,6 +5197,9 @@ class NobleConnectionManager extends BluetoothConnectionManager {
5091
5197
  get bluetoothId() {
5092
5198
  return __classPrivateFieldGet(this, _NobleConnectionManager_noblePeripheral, "f").id;
5093
5199
  }
5200
+ get canUpdateFirmware() {
5201
+ return __classPrivateFieldGet(this, _NobleConnectionManager_characteristics, "f").has("smp");
5202
+ }
5094
5203
  static get isSupported() {
5095
5204
  return isInNode;
5096
5205
  }
@@ -5259,6 +5368,9 @@ _NobleConnectionManager_noblePeripheral = new WeakMap(), _NobleConnectionManager
5259
5368
  await this.connectionManager.onNobleServiceCharacteristicsDiscover(this, characteristics);
5260
5369
  }, _NobleConnectionManager_hasAllCharacteristics_get = function _NobleConnectionManager_hasAllCharacteristics_get() {
5261
5370
  return allCharacteristicNames.every((characteristicName) => {
5371
+ if (characteristicName == "smp") {
5372
+ return true;
5373
+ }
5262
5374
  return __classPrivateFieldGet(this, _NobleConnectionManager_characteristics, "f").has(characteristicName);
5263
5375
  });
5264
5376
  }, _NobleConnectionManager_onNobleCharacteristicData = function _NobleConnectionManager_onNobleCharacteristicData(data, isNotification) {
@@ -5270,7 +5382,7 @@ _NobleConnectionManager_noblePeripheral = new WeakMap(), _NobleConnectionManager
5270
5382
  };
5271
5383
 
5272
5384
  var _NobleScanner_instances, _NobleScanner__isScanning, _NobleScanner_isScanning_get, _NobleScanner_isScanning_set, _NobleScanner__nobleState, _NobleScanner_nobleState_get, _NobleScanner_nobleState_set, _NobleScanner_boundNobleListeners, _NobleScanner_onNobleScanStart, _NobleScanner_onNobleScanStop, _NobleScanner_onNobleStateChange, _NobleScanner_onNobleDiscover, _NobleScanner_boundBaseScannerListeners, _NobleScanner_onExpiredDiscoveredDevice, _NobleScanner_noblePeripherals, _NobleScanner_assertValidNoblePeripheralId, _NobleScanner_createDevice;
5273
- const _console$7 = createConsole("NobleScanner", { log: true });
5385
+ const _console$7 = createConsole("NobleScanner", { log: false });
5274
5386
  let isSupported = false;
5275
5387
  isSupported = true;
5276
5388
  class NobleScanner extends BaseScanner {
@@ -5371,8 +5483,10 @@ _NobleScanner__isScanning = new WeakMap(), _NobleScanner__nobleState = new WeakM
5371
5483
  const { manufacturerData, serviceData } = noblePeripheral.advertisement;
5372
5484
  if (manufacturerData) {
5373
5485
  _console$7.log("manufacturerData", manufacturerData);
5374
- const deviceTypeEnum = manufacturerData.readUint8(manufacturerData.byteLength - 1);
5375
- deviceType = DeviceTypes[deviceTypeEnum];
5486
+ if (manufacturerData.byteLength >= 3) {
5487
+ const deviceTypeEnum = manufacturerData.readUint8(2);
5488
+ deviceType = DeviceTypes[deviceTypeEnum];
5489
+ }
5376
5490
  }
5377
5491
  if (serviceData) {
5378
5492
  _console$7.log("serviceData", serviceData);
@@ -5477,8 +5591,11 @@ createServerMessage("stopScan");
5477
5591
  createServerMessage("discoveredDevices");
5478
5592
 
5479
5593
  var _BaseServer_instances, _a, _BaseServer_ClearSensorConfigurationsWhenNoClients, _BaseServer_clearSensorConfigurationsWhenNoClients, _BaseServer_boundServerListeners, _BaseServer_onClientConnected, _BaseServer_onClientDisconnected, _BaseServer_boundScannerListeners, _BaseServer_onScannerIsAvailable, _BaseServer_isScanningAvailableMessage_get, _BaseServer_onScannerIsScanning, _BaseServer_isScanningMessage_get, _BaseServer_onScannerDiscoveredDevice, _BaseServer_createDiscoveredDeviceMessage, _BaseServer_onExpiredDiscoveredDevice, _BaseServer_createExpiredDiscoveredDeviceMessage, _BaseServer_discoveredDevicesMessage_get, _BaseServer_connectedDevicesMessage_get, _BaseServer_boundDeviceListeners, _BaseServer_createDeviceMessage, _BaseServer_onDeviceConnectionMessage, _BaseServer_boundDeviceManagerListeners, _BaseServer_onDeviceConnected, _BaseServer_onDeviceDisconnected, _BaseServer_onDeviceIsConnected, _BaseServer_createDeviceIsConnectedMessage, _BaseServer_createDeviceServerMessage, _BaseServer_onClientMessage, _BaseServer_parseClientDeviceMessageCallback;
5480
- const _console$4 = createConsole("BaseServer", { log: true });
5481
- const ServerEventTypes = ["clientConnected", "clientDisconnected"];
5594
+ const _console$4 = createConsole("BaseServer", { log: false });
5595
+ const ServerEventTypes = [
5596
+ "clientConnected",
5597
+ "clientDisconnected",
5598
+ ];
5482
5599
  class BaseServer {
5483
5600
  get addEventListener() {
5484
5601
  return this.eventDispatcher.addEventListener;
@@ -5562,7 +5679,8 @@ _a = BaseServer, _BaseServer_clearSensorConfigurationsWhenNoClients = new WeakMa
5562
5679
  }, _BaseServer_onClientDisconnected = function _BaseServer_onClientDisconnected(event) {
5563
5680
  event.message.client;
5564
5681
  _console$4.log("onClientDisconnected");
5565
- if (this.numberOfClients == 0 && this.clearSensorConfigurationsWhenNoClients) {
5682
+ if (this.numberOfClients == 0 &&
5683
+ this.clearSensorConfigurationsWhenNoClients) {
5566
5684
  DeviceManager$1.ConnectedDevices.forEach((device) => {
5567
5685
  device.clearSensorConfiguration();
5568
5686
  device.setTfliteInferencingEnabled(false);
@@ -5571,23 +5689,35 @@ _a = BaseServer, _BaseServer_clearSensorConfigurationsWhenNoClients = new WeakMa
5571
5689
  }, _BaseServer_onScannerIsAvailable = function _BaseServer_onScannerIsAvailable(event) {
5572
5690
  this.broadcastMessage(__classPrivateFieldGet(this, _BaseServer_instances, "a", _BaseServer_isScanningAvailableMessage_get));
5573
5691
  }, _BaseServer_isScanningAvailableMessage_get = function _BaseServer_isScanningAvailableMessage_get() {
5574
- return createServerMessage({ type: "isScanningAvailable", data: scanner$1.isScanningAvailable });
5692
+ return createServerMessage({
5693
+ type: "isScanningAvailable",
5694
+ data: scanner$1.isScanningAvailable,
5695
+ });
5575
5696
  }, _BaseServer_onScannerIsScanning = function _BaseServer_onScannerIsScanning(event) {
5576
5697
  this.broadcastMessage(__classPrivateFieldGet(this, _BaseServer_instances, "a", _BaseServer_isScanningMessage_get));
5577
5698
  }, _BaseServer_isScanningMessage_get = function _BaseServer_isScanningMessage_get() {
5578
- return createServerMessage({ type: "isScanning", data: scanner$1.isScanning });
5699
+ return createServerMessage({
5700
+ type: "isScanning",
5701
+ data: scanner$1.isScanning,
5702
+ });
5579
5703
  }, _BaseServer_onScannerDiscoveredDevice = function _BaseServer_onScannerDiscoveredDevice(event) {
5580
5704
  const { discoveredDevice } = event.message;
5581
5705
  _console$4.log(discoveredDevice);
5582
5706
  this.broadcastMessage(__classPrivateFieldGet(this, _BaseServer_instances, "m", _BaseServer_createDiscoveredDeviceMessage).call(this, discoveredDevice));
5583
5707
  }, _BaseServer_createDiscoveredDeviceMessage = function _BaseServer_createDiscoveredDeviceMessage(discoveredDevice) {
5584
- return createServerMessage({ type: "discoveredDevice", data: discoveredDevice });
5708
+ return createServerMessage({
5709
+ type: "discoveredDevice",
5710
+ data: discoveredDevice,
5711
+ });
5585
5712
  }, _BaseServer_onExpiredDiscoveredDevice = function _BaseServer_onExpiredDiscoveredDevice(event) {
5586
5713
  const { discoveredDevice } = event.message;
5587
5714
  _console$4.log("expired", discoveredDevice);
5588
5715
  this.broadcastMessage(__classPrivateFieldGet(this, _BaseServer_instances, "m", _BaseServer_createExpiredDiscoveredDeviceMessage).call(this, discoveredDevice));
5589
5716
  }, _BaseServer_createExpiredDiscoveredDeviceMessage = function _BaseServer_createExpiredDiscoveredDeviceMessage(discoveredDevice) {
5590
- return createServerMessage({ type: "expiredDiscoveredDevice", data: discoveredDevice.bluetoothId });
5717
+ return createServerMessage({
5718
+ type: "expiredDiscoveredDevice",
5719
+ data: discoveredDevice.bluetoothId,
5720
+ });
5591
5721
  }, _BaseServer_discoveredDevicesMessage_get = function _BaseServer_discoveredDevicesMessage_get() {
5592
5722
  const serverMessages = scanner$1.discoveredDevicesArray
5593
5723
  .filter((discoveredDevice) => {
@@ -5601,12 +5731,14 @@ _a = BaseServer, _BaseServer_clearSensorConfigurationsWhenNoClients = new WeakMa
5601
5731
  }, _BaseServer_connectedDevicesMessage_get = function _BaseServer_connectedDevicesMessage_get() {
5602
5732
  return createServerMessage({
5603
5733
  type: "connectedDevices",
5604
- data: JSON.stringify({ connectedDevices: DeviceManager$1.ConnectedDevices.map((device) => device.bluetoothId) }),
5734
+ data: JSON.stringify({
5735
+ connectedDevices: DeviceManager$1.ConnectedDevices.map((device) => device.bluetoothId),
5736
+ }),
5605
5737
  });
5606
5738
  }, _BaseServer_createDeviceMessage = function _BaseServer_createDeviceMessage(device, messageType, dataView) {
5607
5739
  return {
5608
5740
  type: messageType,
5609
- data: dataView || device.latestConnectionMessage.get(messageType),
5741
+ data: dataView || device.latestConnectionMessages.get(messageType),
5610
5742
  };
5611
5743
  }, _BaseServer_onDeviceConnectionMessage = function _BaseServer_onDeviceConnectionMessage(deviceEvent) {
5612
5744
  const { target: device, message } = deviceEvent;
@@ -5630,7 +5762,10 @@ _a = BaseServer, _BaseServer_clearSensorConfigurationsWhenNoClients = new WeakMa
5630
5762
  _console$4.log("onDeviceIsConnected", device.bluetoothId);
5631
5763
  this.broadcastMessage(__classPrivateFieldGet(this, _BaseServer_instances, "m", _BaseServer_createDeviceIsConnectedMessage).call(this, device));
5632
5764
  }, _BaseServer_createDeviceIsConnectedMessage = function _BaseServer_createDeviceIsConnectedMessage(device) {
5633
- return __classPrivateFieldGet(this, _BaseServer_instances, "m", _BaseServer_createDeviceServerMessage).call(this, device, { type: "isConnected", data: device.isConnected });
5765
+ return __classPrivateFieldGet(this, _BaseServer_instances, "m", _BaseServer_createDeviceServerMessage).call(this, device, {
5766
+ type: "isConnected",
5767
+ data: device.isConnected,
5768
+ });
5634
5769
  }, _BaseServer_createDeviceServerMessage = function _BaseServer_createDeviceServerMessage(device, ...messages) {
5635
5770
  return createServerMessage({
5636
5771
  type: "deviceMessage",
@@ -5720,7 +5855,7 @@ const webSocketPingMessage = createWebSocketMessage("ping");
5720
5855
  const webSocketPongMessage = createWebSocketMessage("pong");
5721
5856
 
5722
5857
  var _WebSocketServer_instances, _WebSocketServer_server, _WebSocketServer_boundWebSocketServerListeners, _WebSocketServer_onWebSocketServerClose, _WebSocketServer_onWebSocketServerConnection, _WebSocketServer_onWebSocketServerError, _WebSocketServer_onWebSocketServerHeaders, _WebSocketServer_onWebSocketServerListening, _WebSocketServer_boundWebSocketClientListeners, _WebSocketServer_onWebSocketClientOpen, _WebSocketServer_onWebSocketClientMessage, _WebSocketServer_onWebSocketClientClose, _WebSocketServer_onWebSocketClientError, _WebSocketServer_parseWebSocketClientMessage, _WebSocketServer_onClientMessage, _WebSocketServer_pingClient;
5723
- const _console$2 = createConsole("WebSocketServer", { log: true });
5858
+ const _console$2 = createConsole("WebSocketServer", { log: false });
5724
5859
  class WebSocketServer extends BaseServer {
5725
5860
  constructor() {
5726
5861
  super(...arguments);
@@ -5853,7 +5988,7 @@ createUDPServerMessage("ping");
5853
5988
  const udpPongMessage = createUDPServerMessage("pong");
5854
5989
 
5855
5990
  var _UDPServer_instances, _UDPServer_clients, _UDPServer_getClientByRemoteInfo, _UDPServer_remoteInfoToString, _UDPServer_clientToString, _UDPServer_socket, _UDPServer_boundSocketListeners, _UDPServer_onSocketClose, _UDPServer_onSocketConnect, _UDPServer_onSocketError, _UDPServer_onSocketListening, _UDPServer_onSocketMessage, _UDPServer_onClientData, _UDPServer_onClientUDPMessage, _UDPServer_createPongMessage, _UDPServer_parseRemoteReceivePort, _UDPServer_sendToClient, _UDPServer_removeClient;
5856
- const _console = createConsole("UDPServer", { log: true });
5991
+ const _console = createConsole("UDPServer", { log: false });
5857
5992
  class UDPServer extends BaseServer {
5858
5993
  constructor() {
5859
5994
  super(...arguments);
@@ -6006,5 +6141,5 @@ _UDPServer_clients = new WeakMap(), _UDPServer_socket = new WeakMap(), _UDPServe
6006
6141
  this.dispatchEvent("clientDisconnected", { client });
6007
6142
  };
6008
6143
 
6009
- export { ContinuousSensorTypes, DefaultNumberOfPressureSensors, Device, DeviceManager$1 as DeviceManager, DevicePair, DeviceTypes, environment as Environment, FileTransferDirections, FileTypes, InsoleSides, MaxNameLength, MaxNumberOfVibrationWaveformEffectSegments, MaxNumberOfVibrationWaveformSegments, MaxSensorRate, MaxVibrationWaveformEffectSegmentDelay, MaxVibrationWaveformEffectSegmentLoopCount, MaxVibrationWaveformEffectSequenceLoopCount, MaxVibrationWaveformSegmentDuration, MinNameLength, RangeHelper, scanner$1 as Scanner, SensorRateStep, SensorTypes, TfliteSensorTypes, TfliteTasks, UDPServer, VibrationLocations, VibrationTypes, VibrationWaveformEffects, WebSocketServer, setAllConsoleLevelFlags, setConsoleLevelFlagsForType };
6144
+ export { ContinuousSensorTypes, DefaultNumberOfPressureSensors, Device, DeviceManager$1 as DeviceManager, DevicePair, DevicePairTypes, DeviceTypes, environment as Environment, FileTransferDirections, FileTypes, MaxNameLength, MaxNumberOfVibrationWaveformEffectSegments, MaxNumberOfVibrationWaveformSegments, MaxSensorRate, MaxVibrationWaveformEffectSegmentDelay, MaxVibrationWaveformEffectSegmentLoopCount, MaxVibrationWaveformEffectSequenceLoopCount, MaxVibrationWaveformSegmentDuration, MinNameLength, RangeHelper, scanner$1 as Scanner, SensorRateStep, SensorTypes, Sides, TfliteSensorTypes, TfliteTasks, UDPServer, VibrationLocations, VibrationTypes, VibrationWaveformEffects, WebSocketServer, setAllConsoleLevelFlags, setConsoleLevelFlagsForType };
6010
6145
  //# sourceMappingURL=brilliantsole.node.module.js.map