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
@@ -54,7 +54,7 @@ var environment = /*#__PURE__*/Object.freeze({
54
54
  isSafari: isSafari
55
55
  });
56
56
 
57
- var _a$5, _Console_consoles, _Console_levelFlags;
57
+ var _a$6, _Console_consoles, _Console_levelFlags;
58
58
  var __console;
59
59
  if (isInLensStudio) {
60
60
  const log = function (...args) {
@@ -97,27 +97,27 @@ class Console {
97
97
  error: true,
98
98
  table: true,
99
99
  });
100
- if (__classPrivateFieldGet(_a$5, _a$5, "f", _Console_consoles)[type]) {
100
+ if (__classPrivateFieldGet(_a$6, _a$6, "f", _Console_consoles)[type]) {
101
101
  throw new Error(`"${type}" console already exists`);
102
102
  }
103
- __classPrivateFieldGet(_a$5, _a$5, "f", _Console_consoles)[type] = this;
103
+ __classPrivateFieldGet(_a$6, _a$6, "f", _Console_consoles)[type] = this;
104
104
  }
105
105
  setLevelFlags(levelFlags) {
106
106
  Object.assign(__classPrivateFieldGet(this, _Console_levelFlags, "f"), levelFlags);
107
107
  }
108
108
  static setLevelFlagsForType(type, levelFlags) {
109
- if (!__classPrivateFieldGet(this, _a$5, "f", _Console_consoles)[type]) {
109
+ if (!__classPrivateFieldGet(this, _a$6, "f", _Console_consoles)[type]) {
110
110
  throw new Error(`no console found with type "${type}"`);
111
111
  }
112
- __classPrivateFieldGet(this, _a$5, "f", _Console_consoles)[type].setLevelFlags(levelFlags);
112
+ __classPrivateFieldGet(this, _a$6, "f", _Console_consoles)[type].setLevelFlags(levelFlags);
113
113
  }
114
114
  static setAllLevelFlags(levelFlags) {
115
- for (const type in __classPrivateFieldGet(this, _a$5, "f", _Console_consoles)) {
116
- __classPrivateFieldGet(this, _a$5, "f", _Console_consoles)[type].setLevelFlags(levelFlags);
115
+ for (const type in __classPrivateFieldGet(this, _a$6, "f", _Console_consoles)) {
116
+ __classPrivateFieldGet(this, _a$6, "f", _Console_consoles)[type].setLevelFlags(levelFlags);
117
117
  }
118
118
  }
119
119
  static create(type, levelFlags) {
120
- const console = __classPrivateFieldGet(this, _a$5, "f", _Console_consoles)[type] || new _a$5(type);
120
+ const console = __classPrivateFieldGet(this, _a$6, "f", _Console_consoles)[type] || new _a$6(type);
121
121
  return console;
122
122
  }
123
123
  get log() {
@@ -147,7 +147,7 @@ class Console {
147
147
  this.assertWithError(enumeration.includes(value), `invalid enum "${value}"`);
148
148
  }
149
149
  }
150
- _a$5 = Console, _Console_levelFlags = new WeakMap();
150
+ _a$6 = Console, _Console_levelFlags = new WeakMap();
151
151
  _Console_consoles = { value: {} };
152
152
  function createConsole(type, levelFlags) {
153
153
  return Console.create(type, levelFlags);
@@ -325,7 +325,7 @@ class Timer {
325
325
  }
326
326
  _Timer_callback = new WeakMap(), _Timer_interval = new WeakMap(), _Timer_intervalId = new WeakMap();
327
327
 
328
- createConsole("checksum", { log: true });
328
+ createConsole("checksum", { log: false });
329
329
  function crc32ForByte(r) {
330
330
  for (let j = 0; j < 8; ++j) {
331
331
  r = (r & 1 ? 0 : 0xedb88320) ^ (r >>> 1);
@@ -500,8 +500,8 @@ function autoBind(self, {include, exclude} = {}) {
500
500
  return self;
501
501
  }
502
502
 
503
- var _FileTransferManager_instances, _a$4, _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;
504
- const _console$s = createConsole("FileTransferManager", { log: true });
503
+ var _FileTransferManager_instances, _a$5, _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;
504
+ const _console$s = createConsole("FileTransferManager", { log: false });
505
505
  const FileTransferMessageTypes = [
506
506
  "maxFileLength",
507
507
  "getFileType",
@@ -529,7 +529,7 @@ const FileTransferEventTypes = [
529
529
  class FileTransferManager {
530
530
  constructor() {
531
531
  _FileTransferManager_instances.add(this);
532
- _FileTransferManager_maxLength.set(this, _a$4.MaxLength);
532
+ _FileTransferManager_maxLength.set(this, _a$5.MaxLength);
533
533
  _FileTransferManager_type.set(this, void 0);
534
534
  _FileTransferManager_length.set(this, 0);
535
535
  _FileTransferManager_checksum.set(this, 0);
@@ -550,7 +550,7 @@ class FileTransferManager {
550
550
  return this.eventDispatcher.waitForEvent;
551
551
  }
552
552
  static get MaxLength() {
553
- return __classPrivateFieldGet(this, _a$4, "f", _FileTransferManager_MaxLength);
553
+ return __classPrivateFieldGet(this, _a$5, "f", _FileTransferManager_MaxLength);
554
554
  }
555
555
  get maxLength() {
556
556
  return __classPrivateFieldGet(this, _FileTransferManager_maxLength, "f");
@@ -636,7 +636,7 @@ class FileTransferManager {
636
636
  __classPrivateFieldSet(this, _FileTransferManager_isServerSide, newIsServerSide, "f");
637
637
  }
638
638
  }
639
- _a$4 = FileTransferManager, _FileTransferManager_maxLength = new WeakMap(), _FileTransferManager_type = new WeakMap(), _FileTransferManager_length = new WeakMap(), _FileTransferManager_checksum = new WeakMap(), _FileTransferManager_status = new WeakMap(), _FileTransferManager_receivedBlocks = new WeakMap(), _FileTransferManager_buffer = new WeakMap(), _FileTransferManager_bytesTransferred = new WeakMap(), _FileTransferManager_isServerSide = new WeakMap(), _FileTransferManager_instances = new WeakSet(), _FileTransferManager_dispatchEvent_get = function _FileTransferManager_dispatchEvent_get() {
639
+ _a$5 = FileTransferManager, _FileTransferManager_maxLength = new WeakMap(), _FileTransferManager_type = new WeakMap(), _FileTransferManager_length = new WeakMap(), _FileTransferManager_checksum = new WeakMap(), _FileTransferManager_status = new WeakMap(), _FileTransferManager_receivedBlocks = new WeakMap(), _FileTransferManager_buffer = new WeakMap(), _FileTransferManager_bytesTransferred = new WeakMap(), _FileTransferManager_isServerSide = new WeakMap(), _FileTransferManager_instances = new WeakSet(), _FileTransferManager_dispatchEvent_get = function _FileTransferManager_dispatchEvent_get() {
640
640
  return this.eventDispatcher.dispatchEvent;
641
641
  }, _FileTransferManager_assertValidType = function _FileTransferManager_assertValidType(type) {
642
642
  _console$s.assertEnumWithError(type, FileTypes);
@@ -826,7 +826,7 @@ _a$4 = FileTransferManager, _FileTransferManager_maxLength = new WeakMap(), _Fil
826
826
  };
827
827
  _FileTransferManager_MaxLength = { value: 0 };
828
828
 
829
- const _console$r = createConsole("MathUtils", { log: true });
829
+ const _console$r = createConsole("MathUtils", { log: false });
830
830
  function getInterpolation(value, min, max, span) {
831
831
  if (span == undefined) {
832
832
  span = max - min;
@@ -914,15 +914,15 @@ class CenterOfPressureHelper {
914
914
  __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").x.update(centerOfPressure.x);
915
915
  __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").y.update(centerOfPressure.y);
916
916
  }
917
- getNormalization(centerOfPressure) {
917
+ getNormalization(centerOfPressure, weightByRange) {
918
918
  return {
919
- x: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").x.getNormalization(centerOfPressure.x, false),
920
- y: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").y.getNormalization(centerOfPressure.y, false),
919
+ x: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").x.getNormalization(centerOfPressure.x, weightByRange),
920
+ y: __classPrivateFieldGet(this, _CenterOfPressureHelper_range, "f").y.getNormalization(centerOfPressure.y, weightByRange),
921
921
  };
922
922
  }
923
- updateAndGetNormalization(centerOfPressure) {
923
+ updateAndGetNormalization(centerOfPressure, weightByRange) {
924
924
  this.update(centerOfPressure);
925
- return this.getNormalization(centerOfPressure);
925
+ return this.getNormalization(centerOfPressure, weightByRange);
926
926
  }
927
927
  }
928
928
  _CenterOfPressureHelper_range = new WeakMap();
@@ -943,8 +943,8 @@ function arrayWithoutDuplicates(array) {
943
943
  return array.filter((value, index) => array.indexOf(value) == index);
944
944
  }
945
945
 
946
- var _PressureSensorDataManager_positions, _PressureSensorDataManager_sensorRangeHelpers, _PressureSensorDataManager_centerOfPressureHelper;
947
- const _console$q = createConsole("PressureDataManager", { log: true });
946
+ var _PressureSensorDataManager_positions, _PressureSensorDataManager_sensorRangeHelpers, _PressureSensorDataManager_normalizedSumRangeHelper, _PressureSensorDataManager_centerOfPressureHelper;
947
+ const _console$q = createConsole("PressureDataManager", { log: false });
948
948
  const PressureSensorTypes = ["pressure"];
949
949
  const ContinuousPressureSensorTypes = PressureSensorTypes;
950
950
  const DefaultNumberOfPressureSensors = 8;
@@ -952,6 +952,7 @@ class PressureSensorDataManager {
952
952
  constructor() {
953
953
  _PressureSensorDataManager_positions.set(this, []);
954
954
  _PressureSensorDataManager_sensorRangeHelpers.set(this, void 0);
955
+ _PressureSensorDataManager_normalizedSumRangeHelper.set(this, new RangeHelper());
955
956
  _PressureSensorDataManager_centerOfPressureHelper.set(this, new CenterOfPressureHelper());
956
957
  }
957
958
  get positions() {
@@ -974,37 +975,38 @@ class PressureSensorDataManager {
974
975
  this.resetRange();
975
976
  }
976
977
  resetRange() {
977
- __classPrivateFieldGet(this, _PressureSensorDataManager_sensorRangeHelpers, "f").forEach((rangeHelper) => rangeHelper.reset());
978
+ __classPrivateFieldGet(this, _PressureSensorDataManager_sensorRangeHelpers, "f")?.forEach((rangeHelper) => rangeHelper.reset());
978
979
  __classPrivateFieldGet(this, _PressureSensorDataManager_centerOfPressureHelper, "f").reset();
980
+ __classPrivateFieldGet(this, _PressureSensorDataManager_normalizedSumRangeHelper, "f").reset();
979
981
  }
980
982
  parseData(dataView, scalar) {
981
983
  const pressure = { sensors: [], scaledSum: 0, normalizedSum: 0 };
982
984
  for (let index = 0, byteOffset = 0; byteOffset < dataView.byteLength; index++, byteOffset += 2) {
983
985
  const rawValue = dataView.getUint16(byteOffset, true);
984
- const scaledValue = rawValue * scalar;
986
+ let scaledValue = (rawValue * scalar) / this.numberOfSensors;
985
987
  const rangeHelper = __classPrivateFieldGet(this, _PressureSensorDataManager_sensorRangeHelpers, "f")[index];
986
- const normalizedValue = rangeHelper.updateAndGetNormalization(scaledValue, true);
988
+ const normalizedValue = rangeHelper.updateAndGetNormalization(scaledValue, false);
987
989
  const position = this.positions[index];
988
990
  pressure.sensors[index] = { rawValue, scaledValue, normalizedValue, position, weightedValue: 0 };
989
991
  pressure.scaledSum += scaledValue;
990
- pressure.normalizedSum += normalizedValue / this.numberOfSensors;
991
992
  }
992
- if (pressure.scaledSum > 0 && pressure.normalizedSum > 0.001) {
993
+ pressure.normalizedSum = __classPrivateFieldGet(this, _PressureSensorDataManager_normalizedSumRangeHelper, "f").updateAndGetNormalization(pressure.scaledSum, false);
994
+ if (pressure.scaledSum > 0) {
993
995
  pressure.center = { x: 0, y: 0 };
994
996
  pressure.sensors.forEach((sensor) => {
995
997
  sensor.weightedValue = sensor.scaledValue / pressure.scaledSum;
996
998
  pressure.center.x += sensor.position.x * sensor.weightedValue;
997
999
  pressure.center.y += sensor.position.y * sensor.weightedValue;
998
1000
  });
999
- pressure.normalizedCenter = __classPrivateFieldGet(this, _PressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center);
1001
+ pressure.normalizedCenter = __classPrivateFieldGet(this, _PressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center, false);
1000
1002
  }
1001
1003
  _console$q.log({ pressure });
1002
1004
  return pressure;
1003
1005
  }
1004
1006
  }
1005
- _PressureSensorDataManager_positions = new WeakMap(), _PressureSensorDataManager_sensorRangeHelpers = new WeakMap(), _PressureSensorDataManager_centerOfPressureHelper = new WeakMap();
1007
+ _PressureSensorDataManager_positions = new WeakMap(), _PressureSensorDataManager_sensorRangeHelpers = new WeakMap(), _PressureSensorDataManager_normalizedSumRangeHelper = new WeakMap(), _PressureSensorDataManager_centerOfPressureHelper = new WeakMap();
1006
1008
 
1007
- const _console$p = createConsole("MotionSensorDataManager", { log: true });
1009
+ const _console$p = createConsole("MotionSensorDataManager", { log: false });
1008
1010
  const MotionSensorTypes = [
1009
1011
  "acceleration",
1010
1012
  "gravity",
@@ -1097,7 +1099,7 @@ class MotionSensorDataManager {
1097
1099
  var _BarometerSensorDataManager_instances, _BarometerSensorDataManager_calculcateAltitude;
1098
1100
  const BarometerSensorTypes = ["barometer"];
1099
1101
  const ContinuousBarometerSensorTypes = BarometerSensorTypes;
1100
- const _console$o = createConsole("BarometerSensorDataManager", { log: true });
1102
+ const _console$o = createConsole("BarometerSensorDataManager", { log: false });
1101
1103
  class BarometerSensorDataManager {
1102
1104
  constructor() {
1103
1105
  _BarometerSensorDataManager_instances.add(this);
@@ -1121,7 +1123,7 @@ _BarometerSensorDataManager_instances = new WeakSet(), _BarometerSensorDataManag
1121
1123
  return h;
1122
1124
  };
1123
1125
 
1124
- const _console$n = createConsole("ParseUtils", { log: true });
1126
+ const _console$n = createConsole("ParseUtils", { log: false });
1125
1127
  function parseStringFromDataView(dataView, byteOffset = 0) {
1126
1128
  const stringLength = dataView.getUint8(byteOffset++);
1127
1129
  const string = textDecoder.decode(dataView.buffer.slice(dataView.byteOffset + byteOffset, dataView.byteOffset + byteOffset + stringLength));
@@ -1151,7 +1153,7 @@ function parseMessage(dataView, messageTypes, callback, context, parseMessageLen
1151
1153
  }
1152
1154
 
1153
1155
  var _SensorDataManager_scalars;
1154
- const _console$m = createConsole("SensorDataManager", { log: true });
1156
+ const _console$m = createConsole("SensorDataManager", { log: false });
1155
1157
  const SensorTypes = [...PressureSensorTypes, ...MotionSensorTypes, ...BarometerSensorTypes];
1156
1158
  const ContinuousSensorTypes = [
1157
1159
  ...ContinuousPressureSensorTypes,
@@ -1261,8 +1263,8 @@ class SensorDataManager {
1261
1263
  }
1262
1264
  _SensorDataManager_scalars = new WeakMap();
1263
1265
 
1264
- var _SensorConfigurationManager_instances, _a$3, _SensorConfigurationManager_dispatchEvent_get, _SensorConfigurationManager_availableSensorTypes, _SensorConfigurationManager_assertAvailableSensorType, _SensorConfigurationManager_configuration, _SensorConfigurationManager_updateConfiguration, _SensorConfigurationManager_isRedundant, _SensorConfigurationManager_parse, _SensorConfigurationManager_AssertValidSensorRate, _SensorConfigurationManager_assertValidSensorRate, _SensorConfigurationManager_createData, _SensorConfigurationManager_ZeroSensorConfiguration;
1265
- const _console$l = createConsole("SensorConfigurationManager", { log: true });
1266
+ var _SensorConfigurationManager_instances, _a$4, _SensorConfigurationManager_dispatchEvent_get, _SensorConfigurationManager_availableSensorTypes, _SensorConfigurationManager_assertAvailableSensorType, _SensorConfigurationManager_configuration, _SensorConfigurationManager_updateConfiguration, _SensorConfigurationManager_isRedundant, _SensorConfigurationManager_parse, _SensorConfigurationManager_AssertValidSensorRate, _SensorConfigurationManager_assertValidSensorRate, _SensorConfigurationManager_createData, _SensorConfigurationManager_ZeroSensorConfiguration;
1267
+ const _console$l = createConsole("SensorConfigurationManager", { log: false });
1266
1268
  const MaxSensorRate = 2 ** 16 - 1;
1267
1269
  const SensorRateStep = 5;
1268
1270
  const SensorConfigurationMessageTypes = ["getSensorConfiguration", "setSensorConfiguration"];
@@ -1299,11 +1301,11 @@ class SensorConfigurationManager {
1299
1301
  await promise;
1300
1302
  }
1301
1303
  static get ZeroSensorConfiguration() {
1302
- return __classPrivateFieldGet(this, _a$3, "f", _SensorConfigurationManager_ZeroSensorConfiguration);
1304
+ return __classPrivateFieldGet(this, _a$4, "f", _SensorConfigurationManager_ZeroSensorConfiguration);
1303
1305
  }
1304
1306
  get zeroSensorConfiguration() {
1305
1307
  const zeroSensorConfiguration = {};
1306
- SensorTypes.forEach((sensorType) => {
1308
+ __classPrivateFieldGet(this, _SensorConfigurationManager_availableSensorTypes, "f").forEach((sensorType) => {
1307
1309
  zeroSensorConfiguration[sensorType] = 0;
1308
1310
  });
1309
1311
  return zeroSensorConfiguration;
@@ -1324,12 +1326,12 @@ class SensorConfigurationManager {
1324
1326
  }
1325
1327
  }
1326
1328
  }
1327
- _a$3 = SensorConfigurationManager, _SensorConfigurationManager_availableSensorTypes = new WeakMap(), _SensorConfigurationManager_configuration = new WeakMap(), _SensorConfigurationManager_instances = new WeakSet(), _SensorConfigurationManager_dispatchEvent_get = function _SensorConfigurationManager_dispatchEvent_get() {
1329
+ _a$4 = SensorConfigurationManager, _SensorConfigurationManager_availableSensorTypes = new WeakMap(), _SensorConfigurationManager_configuration = new WeakMap(), _SensorConfigurationManager_instances = new WeakSet(), _SensorConfigurationManager_dispatchEvent_get = function _SensorConfigurationManager_dispatchEvent_get() {
1328
1330
  return this.eventDispatcher.dispatchEvent;
1329
1331
  }, _SensorConfigurationManager_assertAvailableSensorType = function _SensorConfigurationManager_assertAvailableSensorType(sensorType) {
1330
1332
  _console$l.assertWithError(__classPrivateFieldGet(this, _SensorConfigurationManager_availableSensorTypes, "f"), "must get initial sensorConfiguration");
1331
1333
  const isSensorTypeAvailable = __classPrivateFieldGet(this, _SensorConfigurationManager_availableSensorTypes, "f")?.includes(sensorType);
1332
- _console$l.assert(isSensorTypeAvailable, `unavailable sensor type "${sensorType}"`);
1334
+ _console$l.log(isSensorTypeAvailable, `unavailable sensor type "${sensorType}"`);
1333
1335
  return isSensorTypeAvailable;
1334
1336
  }, _SensorConfigurationManager_updateConfiguration = function _SensorConfigurationManager_updateConfiguration(updatedConfiguration) {
1335
1337
  __classPrivateFieldSet(this, _SensorConfigurationManager_configuration, updatedConfiguration, "f");
@@ -1362,7 +1364,7 @@ _a$3 = SensorConfigurationManager, _SensorConfigurationManager_availableSensorTy
1362
1364
  _console$l.assertWithError(sensorRate < MaxSensorRate, `sensorRate must be 0 or greater (got ${sensorRate})`);
1363
1365
  _console$l.assertWithError(sensorRate % SensorRateStep == 0, `sensorRate must be multiple of ${SensorRateStep}`);
1364
1366
  }, _SensorConfigurationManager_assertValidSensorRate = function _SensorConfigurationManager_assertValidSensorRate(sensorRate) {
1365
- __classPrivateFieldGet(_a$3, _a$3, "m", _SensorConfigurationManager_AssertValidSensorRate).call(_a$3, sensorRate);
1367
+ __classPrivateFieldGet(_a$4, _a$4, "m", _SensorConfigurationManager_AssertValidSensorRate).call(_a$4, sensorRate);
1366
1368
  }, _SensorConfigurationManager_createData = function _SensorConfigurationManager_createData(sensorConfiguration) {
1367
1369
  let sensorTypes = Object.keys(sensorConfiguration);
1368
1370
  sensorTypes = sensorTypes.filter((sensorType) => __classPrivateFieldGet(this, _SensorConfigurationManager_instances, "m", _SensorConfigurationManager_assertAvailableSensorType).call(this, sensorType));
@@ -1381,12 +1383,12 @@ _a$3 = SensorConfigurationManager, _SensorConfigurationManager_availableSensorTy
1381
1383
  _SensorConfigurationManager_ZeroSensorConfiguration = { value: {} };
1382
1384
  (() => {
1383
1385
  SensorTypes.forEach((sensorType) => {
1384
- __classPrivateFieldGet(_a$3, _a$3, "f", _SensorConfigurationManager_ZeroSensorConfiguration)[sensorType] = 0;
1386
+ __classPrivateFieldGet(_a$4, _a$4, "f", _SensorConfigurationManager_ZeroSensorConfiguration)[sensorType] = 0;
1385
1387
  });
1386
1388
  })();
1387
1389
 
1388
1390
  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;
1389
- const _console$k = createConsole("TfliteManager", { log: true });
1391
+ const _console$k = createConsole("TfliteManager", { log: false });
1390
1392
  const TfliteMessageTypes = [
1391
1393
  "getTfliteName",
1392
1394
  "setTfliteName",
@@ -1721,7 +1723,7 @@ _TfliteManager_name = new WeakMap(), _TfliteManager_task = new WeakMap(), _Tflit
1721
1723
  };
1722
1724
 
1723
1725
  var _DeviceInformationManager_instances, _DeviceInformationManager_dispatchEvent_get, _DeviceInformationManager_information, _DeviceInformationManager_isComplete_get, _DeviceInformationManager_update;
1724
- const _console$j = createConsole("DeviceInformationManager", { log: true });
1726
+ const _console$j = createConsole("DeviceInformationManager", { log: false });
1725
1727
  const DeviceInformationMessageTypes = [
1726
1728
  "manufacturerName",
1727
1729
  "modelNumber",
@@ -1796,7 +1798,7 @@ class DeviceInformationManager {
1796
1798
  _DeviceInformationManager_information = new WeakMap(), _DeviceInformationManager_instances = new WeakSet(), _DeviceInformationManager_dispatchEvent_get = function _DeviceInformationManager_dispatchEvent_get() {
1797
1799
  return this.eventDispatcher.dispatchEvent;
1798
1800
  }, _DeviceInformationManager_isComplete_get = function _DeviceInformationManager_isComplete_get() {
1799
- return DeviceInformationMessageTypes.every((key) => key in __classPrivateFieldGet(this, _DeviceInformationManager_information, "f"));
1801
+ return DeviceInformationMessageTypes.filter((key) => key != "serialNumber").every((key) => key in __classPrivateFieldGet(this, _DeviceInformationManager_information, "f"));
1800
1802
  }, _DeviceInformationManager_update = function _DeviceInformationManager_update(partialDeviceInformation) {
1801
1803
  _console$j.log({ partialDeviceInformation });
1802
1804
  const deviceInformationNames = Object.keys(partialDeviceInformation);
@@ -1814,9 +1816,9 @@ _DeviceInformationManager_information = new WeakMap(), _DeviceInformationManager
1814
1816
  };
1815
1817
 
1816
1818
  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;
1817
- const _console$i = createConsole("InformationManager", { log: true });
1818
- const DeviceTypes = ["leftInsole", "rightInsole"];
1819
- const InsoleSides = ["left", "right"];
1819
+ const _console$i = createConsole("InformationManager", { log: false });
1820
+ const DeviceTypes = ["leftInsole", "rightInsole", "leftGlove", "rightGlove", "glasses", "generic"];
1821
+ const Sides = ["left", "right"];
1820
1822
  const MinNameLength = 2;
1821
1823
  const MaxNameLength = 30;
1822
1824
  const InformationMessageTypes = [
@@ -1911,12 +1913,25 @@ class InformationManager {
1911
1913
  return false;
1912
1914
  }
1913
1915
  }
1914
- get insoleSide() {
1916
+ get isGlove() {
1917
+ switch (this.type) {
1918
+ case "leftGlove":
1919
+ case "rightGlove":
1920
+ return true;
1921
+ default:
1922
+ return false;
1923
+ }
1924
+ }
1925
+ get side() {
1915
1926
  switch (this.type) {
1916
1927
  case "leftInsole":
1928
+ case "leftGlove":
1917
1929
  return "left";
1918
1930
  case "rightInsole":
1931
+ case "rightGlove":
1919
1932
  return "right";
1933
+ default:
1934
+ return "left";
1920
1935
  }
1921
1936
  }
1922
1937
  get mtu() {
@@ -1957,7 +1972,10 @@ class InformationManager {
1957
1972
  this.updateType(type);
1958
1973
  break;
1959
1974
  case "getMtu":
1960
- const mtu = dataView.getUint16(0, true);
1975
+ let mtu = dataView.getUint16(0, true);
1976
+ if (isInBrowser) {
1977
+ mtu = Math.min(mtu, 512);
1978
+ }
1961
1979
  _console$i.log({ mtu });
1962
1980
  __classPrivateFieldGet(this, _InformationManager_instances, "m", _InformationManager_updateMtu).call(this, mtu);
1963
1981
  break;
@@ -2332,8 +2350,8 @@ _VibrationManager_instances = new WeakSet(), _VibrationManager_verifyLocation =
2332
2350
  return data;
2333
2351
  };
2334
2352
 
2335
- var _BaseConnectionManager_instances, _a$2, _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;
2336
- const _console$g = createConsole("BaseConnectionManager", { log: true });
2353
+ var _BaseConnectionManager_instances, _a$3, _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;
2354
+ const _console$g = createConsole("BaseConnectionManager", { log: false });
2337
2355
  const ConnectionStatuses = ["notConnected", "connecting", "connected", "disconnecting"];
2338
2356
  const ConnectionEventTypes = [...ConnectionStatuses, "connectionStatus", "isConnected"];
2339
2357
  const TxRxMessageTypes = [
@@ -2364,6 +2382,9 @@ class BaseConnectionManager {
2364
2382
  get isSupported() {
2365
2383
  return this.baseConstructor.isSupported;
2366
2384
  }
2385
+ get canUpdateFirmware() {
2386
+ return false;
2387
+ }
2367
2388
  get type() {
2368
2389
  return this.baseConstructor.type;
2369
2390
  }
@@ -2372,6 +2393,8 @@ class BaseConnectionManager {
2372
2393
  _BaseConnectionManager_status.set(this, "notConnected");
2373
2394
  _BaseConnectionManager_pendingMessages.set(this, []);
2374
2395
  _BaseConnectionManager_isSendingMessages.set(this, false);
2396
+ _BaseConnectionManager_defaultMtu.set(this, 23);
2397
+ this.mtu = __classPrivateFieldGet(this, _BaseConnectionManager_defaultMtu, "f");
2375
2398
  _BaseConnectionManager_timer.set(this, new Timer(__classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_checkConnection).bind(this), 5000));
2376
2399
  __classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_assertIsSupported).call(this);
2377
2400
  }
@@ -2394,12 +2417,15 @@ class BaseConnectionManager {
2394
2417
  __classPrivateFieldGet(this, _BaseConnectionManager_timer, "f").stop();
2395
2418
  }
2396
2419
  if (__classPrivateFieldGet(this, _BaseConnectionManager_status, "f") == "notConnected") {
2397
- this.mtu = undefined;
2420
+ this.mtu = __classPrivateFieldGet(this, _BaseConnectionManager_defaultMtu, "f");
2398
2421
  }
2399
2422
  }
2400
2423
  get isConnected() {
2401
2424
  return this.status == "connected";
2402
2425
  }
2426
+ get isAvailable() {
2427
+ return false;
2428
+ }
2403
2429
  async connect() {
2404
2430
  __classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_assertIsNotConnected).call(this);
2405
2431
  __classPrivateFieldGet(this, _BaseConnectionManager_instances, "m", _BaseConnectionManager_assertIsNotConnecting).call(this);
@@ -2434,13 +2460,13 @@ class BaseConnectionManager {
2434
2460
  return;
2435
2461
  }
2436
2462
  if (__classPrivateFieldGet(this, _BaseConnectionManager_isSendingMessages, "f")) {
2437
- console.log("already sending messages - waiting until later");
2463
+ _console$g.log("already sending messages - waiting until later");
2438
2464
  return;
2439
2465
  }
2440
2466
  __classPrivateFieldSet(this, _BaseConnectionManager_isSendingMessages, true, "f");
2441
2467
  _console$g.log("sendTxMessages", __classPrivateFieldGet(this, _BaseConnectionManager_pendingMessages, "f").slice());
2442
2468
  const arrayBuffers = __classPrivateFieldGet(this, _BaseConnectionManager_pendingMessages, "f").map((message) => {
2443
- __classPrivateFieldGet(_a$2, _a$2, "m", _BaseConnectionManager_AssertValidTxRxMessageType).call(_a$2, message.type);
2469
+ __classPrivateFieldGet(_a$3, _a$3, "m", _BaseConnectionManager_AssertValidTxRxMessageType).call(_a$3, message.type);
2444
2470
  const messageTypeEnum = TxRxMessageTypes.indexOf(message.type);
2445
2471
  const dataLength = new DataView(new ArrayBuffer(2));
2446
2472
  dataLength.setUint16(0, message.data?.byteLength || 0, true);
@@ -2449,25 +2475,32 @@ class BaseConnectionManager {
2449
2475
  __classPrivateFieldGet(this, _BaseConnectionManager_pendingMessages, "f").length = 0;
2450
2476
  if (this.mtu) {
2451
2477
  while (arrayBuffers.length > 0) {
2478
+ if (arrayBuffers.every((arrayBuffer) => arrayBuffer.byteLength > this.mtu - 3)) {
2479
+ _console$g.log("every arrayBuffer is too big to send");
2480
+ break;
2481
+ }
2482
+ _console$g.log("remaining arrayBuffers.length", arrayBuffers.length);
2452
2483
  let arrayBufferByteLength = 0;
2453
2484
  let arrayBufferCount = 0;
2454
2485
  arrayBuffers.some((arrayBuffer) => {
2455
2486
  if (arrayBufferByteLength + arrayBuffer.byteLength > this.mtu - 3) {
2487
+ _console$g.log(`stopping appending arrayBuffers ( length ${arrayBuffer.byteLength} too much)`);
2456
2488
  return true;
2457
2489
  }
2490
+ _console$g.log(`allowing arrayBuffer with length ${arrayBuffer.byteLength}`);
2458
2491
  arrayBufferCount++;
2459
2492
  arrayBufferByteLength += arrayBuffer.byteLength;
2460
2493
  });
2461
2494
  const arrayBuffersToSend = arrayBuffers.splice(0, arrayBufferCount);
2462
2495
  _console$g.log({ arrayBufferCount, arrayBuffersToSend });
2463
2496
  const arrayBuffer = concatenateArrayBuffers(...arrayBuffersToSend);
2464
- _console$g.log("sending arrayBuffer", arrayBuffer);
2497
+ _console$g.log("sending arrayBuffer (partitioned)", arrayBuffer);
2465
2498
  await this.sendTxData(arrayBuffer);
2466
2499
  }
2467
2500
  }
2468
2501
  else {
2469
2502
  const arrayBuffer = concatenateArrayBuffers(...arrayBuffers);
2470
- _console$g.log("sending arrayBuffer", arrayBuffer);
2503
+ _console$g.log("sending arrayBuffer (all)", arrayBuffer);
2471
2504
  await this.sendTxData(arrayBuffer);
2472
2505
  }
2473
2506
  __classPrivateFieldSet(this, _BaseConnectionManager_isSendingMessages, false, "f");
@@ -2484,7 +2517,7 @@ class BaseConnectionManager {
2484
2517
  __classPrivateFieldGet(this, _BaseConnectionManager_pendingMessages, "f").length = 0;
2485
2518
  }
2486
2519
  }
2487
- _a$2 = 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) {
2520
+ _a$3 = 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) {
2488
2521
  _console$g.assertEnumWithError(messageType, TxRxMessageTypes);
2489
2522
  }, _BaseConnectionManager_assertIsSupported = function _BaseConnectionManager_assertIsSupported() {
2490
2523
  _console$g.assertWithError(this.isSupported, `${this.constructor.name} is not supported`);
@@ -2694,12 +2727,15 @@ function getCharacteristicProperties(characteristicName) {
2694
2727
  return properties;
2695
2728
  }
2696
2729
 
2697
- const _console$d = createConsole("BluetoothConnectionManager", { log: true });
2730
+ const _console$d = createConsole("BluetoothConnectionManager", { log: false });
2698
2731
  class BluetoothConnectionManager extends BaseConnectionManager {
2699
2732
  constructor() {
2700
2733
  super(...arguments);
2701
2734
  this.isInRange = true;
2702
2735
  }
2736
+ get isAvailable() {
2737
+ return true;
2738
+ }
2703
2739
  onCharacteristicValueChanged(characteristicName, dataView) {
2704
2740
  if (characteristicName == "rx") {
2705
2741
  this.parseRxMessage(dataView);
@@ -2725,7 +2761,7 @@ class BluetoothConnectionManager extends BaseConnectionManager {
2725
2761
  }
2726
2762
 
2727
2763
  var _WebBluetoothConnectionManager_instances, _WebBluetoothConnectionManager_boundBluetoothCharacteristicEventListeners, _WebBluetoothConnectionManager_boundBluetoothDeviceEventListeners, _WebBluetoothConnectionManager_device, _WebBluetoothConnectionManager_services, _WebBluetoothConnectionManager_characteristics, _WebBluetoothConnectionManager_getServicesAndCharacteristics, _WebBluetoothConnectionManager_removeEventListeners, _WebBluetoothConnectionManager_onCharacteristicvaluechanged, _WebBluetoothConnectionManager_onCharacteristicValueChanged, _WebBluetoothConnectionManager_onGattserverdisconnected;
2728
- const _console$c = createConsole("WebBluetoothConnectionManager", { log: true });
2764
+ const _console$c = createConsole("WebBluetoothConnectionManager", { log: false });
2729
2765
  var bluetooth;
2730
2766
  if (isInBrowser) {
2731
2767
  bluetooth = window.navigator.bluetooth;
@@ -2747,6 +2783,9 @@ class WebBluetoothConnectionManager extends BluetoothConnectionManager {
2747
2783
  get bluetoothId() {
2748
2784
  return this.device.id;
2749
2785
  }
2786
+ get canUpdateFirmware() {
2787
+ return __classPrivateFieldGet(this, _WebBluetoothConnectionManager_characteristics, "f").has("smp");
2788
+ }
2750
2789
  static get isSupported() {
2751
2790
  return Boolean(bluetooth);
2752
2791
  }
@@ -3307,7 +3346,7 @@ const CBOR = {
3307
3346
  decode,
3308
3347
  };
3309
3348
 
3310
- const _console$b = createConsole("mcumgr", { log: true });
3349
+ const _console$b = createConsole("mcumgr", { log: false });
3311
3350
  const constants = {
3312
3351
  MGMT_OP_READ: 0,
3313
3352
  MGMT_OP_READ_RSP: 1,
@@ -3638,7 +3677,7 @@ class MCUManager {
3638
3677
  }
3639
3678
 
3640
3679
  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;
3641
- const _console$a = createConsole("FirmwareManager", { log: true });
3680
+ const _console$a = createConsole("FirmwareManager", { log: false });
3642
3681
  const FirmwareMessageTypes = ["smp"];
3643
3682
  const FirmwareEventTypes = [
3644
3683
  ...FirmwareMessageTypes,
@@ -3886,7 +3925,7 @@ _FirmwareManager_status = new WeakMap(), _FirmwareManager_images = new WeakMap()
3886
3925
  };
3887
3926
 
3888
3927
  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;
3889
- const _console$9 = createConsole("DeviceManager", { log: true });
3928
+ const _console$9 = createConsole("DeviceManager", { log: false });
3890
3929
  const DeviceManagerEventTypes = [
3891
3930
  "deviceConnected",
3892
3931
  "deviceDisconnected",
@@ -4028,6 +4067,13 @@ class DeviceManager {
4028
4067
  get RemoveAllEventListeners() {
4029
4068
  return __classPrivateFieldGet(this, _DeviceManager_EventDispatcher, "f").removeAllEventListeners;
4030
4069
  }
4070
+ _CheckDeviceAvailability(device) {
4071
+ if (!device.isConnected && !device.isAvailable && __classPrivateFieldGet(this, _DeviceManager_AvailableDevices, "f").includes(device)) {
4072
+ _console$9.log("removing device from availableDevices...");
4073
+ __classPrivateFieldGet(this, _DeviceManager_AvailableDevices, "f").splice(__classPrivateFieldGet(this, _DeviceManager_AvailableDevices, "f").indexOf(device), 1);
4074
+ __classPrivateFieldGet(this, _DeviceManager_instances, "m", _DeviceManager_DispatchAvailableDevices).call(this);
4075
+ }
4076
+ }
4031
4077
  }
4032
4078
  _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) {
4033
4079
  if (__classPrivateFieldGet(this, _DeviceManager_UseLocalStorage, "f")) {
@@ -4129,6 +4175,7 @@ _DeviceManager_boundDeviceEventListeners = new WeakMap(), _DeviceManager_Connect
4129
4175
  }
4130
4176
  __classPrivateFieldGet(this, _DeviceManager_instances, "m", _DeviceManager_DispatchAvailableDevices).call(this);
4131
4177
  }
4178
+ this._CheckDeviceAvailability(device);
4132
4179
  }, _DeviceManager_DispatchAvailableDevices = function _DeviceManager_DispatchAvailableDevices() {
4133
4180
  _console$9.log({ AvailableDevices: this.AvailableDevices });
4134
4181
  __classPrivateFieldGet(this, _DeviceManager_instances, "a", _DeviceManager_DispatchEvent_get).call(this, "availableDevices", { availableDevices: this.AvailableDevices });
@@ -4139,7 +4186,7 @@ _DeviceManager_boundDeviceEventListeners = new WeakMap(), _DeviceManager_Connect
4139
4186
  DeviceManager.shared = new DeviceManager();
4140
4187
  var DeviceManager$1 = DeviceManager.shared;
4141
4188
 
4142
- var _Device_instances, _a$1, _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;
4189
+ var _Device_instances, _a$2, _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;
4143
4190
  const _console$8 = createConsole("Device", { log: true });
4144
4191
  const DeviceEventTypes = [
4145
4192
  "connectionMessage",
@@ -4183,20 +4230,23 @@ class Device {
4183
4230
  get bluetoothId() {
4184
4231
  return __classPrivateFieldGet(this, _Device_connectionManager, "f")?.bluetoothId;
4185
4232
  }
4233
+ get isAvailable() {
4234
+ return __classPrivateFieldGet(this, _Device_connectionManager, "f")?.isAvailable;
4235
+ }
4186
4236
  constructor() {
4187
4237
  _Device_instances.add(this);
4188
4238
  _Device_eventDispatcher.set(this, new EventDispatcher(this, DeviceEventTypes));
4189
4239
  _Device_connectionManager.set(this, void 0);
4190
4240
  this.sendTxMessages = __classPrivateFieldGet(this, _Device_instances, "m", _Device_sendTxMessages).bind(this);
4191
4241
  _Device_isConnected.set(this, false);
4192
- _Device_reconnectOnDisconnection.set(this, _a$1.ReconnectOnDisconnection);
4242
+ _Device_reconnectOnDisconnection.set(this, _a$2.ReconnectOnDisconnection);
4193
4243
  _Device_reconnectIntervalId.set(this, void 0);
4194
- this.latestConnectionMessage = new Map();
4244
+ this.latestConnectionMessages = new Map();
4195
4245
  _Device_deviceInformationManager.set(this, new DeviceInformationManager());
4196
4246
  _Device_batteryLevel.set(this, 0);
4197
4247
  this._informationManager = new InformationManager();
4198
4248
  _Device_sensorConfigurationManager.set(this, new SensorConfigurationManager());
4199
- _Device_clearSensorConfigurationOnLeave.set(this, _a$1.ClearSensorConfigurationOnLeave);
4249
+ _Device_clearSensorConfigurationOnLeave.set(this, _a$2.ClearSensorConfigurationOnLeave);
4200
4250
  _Device_sensorDataManager.set(this, new SensorDataManager());
4201
4251
  _Device_vibrationManager.set(this, new VibrationManager());
4202
4252
  _Device_fileTransferManager.set(this, new FileTransferManager());
@@ -4276,7 +4326,7 @@ class Device {
4276
4326
  }
4277
4327
  async connect() {
4278
4328
  if (!this.connectionManager) {
4279
- this.connectionManager = __classPrivateFieldGet(_a$1, _a$1, "m", _Device_DefaultConnectionManager).call(_a$1);
4329
+ this.connectionManager = __classPrivateFieldGet(_a$2, _a$2, "m", _Device_DefaultConnectionManager).call(_a$2);
4280
4330
  }
4281
4331
  __classPrivateFieldGet(this, _Device_instances, "m", _Device_clear).call(this);
4282
4332
  return this.connectionManager.connect();
@@ -4293,16 +4343,16 @@ class Device {
4293
4343
  return this.connectionManager?.reconnect();
4294
4344
  }
4295
4345
  static async Connect() {
4296
- const device = new _a$1();
4346
+ const device = new _a$2();
4297
4347
  await device.connect();
4298
4348
  return device;
4299
4349
  }
4300
4350
  static get ReconnectOnDisconnection() {
4301
- return __classPrivateFieldGet(this, _a$1, "f", _Device_ReconnectOnDisconnection);
4351
+ return __classPrivateFieldGet(this, _a$2, "f", _Device_ReconnectOnDisconnection);
4302
4352
  }
4303
4353
  static set ReconnectOnDisconnection(newReconnectOnDisconnection) {
4304
4354
  _console$8.assertTypeWithError(newReconnectOnDisconnection, "boolean");
4305
- __classPrivateFieldSet(this, _a$1, newReconnectOnDisconnection, "f", _Device_ReconnectOnDisconnection);
4355
+ __classPrivateFieldSet(this, _a$2, newReconnectOnDisconnection, "f", _Device_ReconnectOnDisconnection);
4306
4356
  }
4307
4357
  get reconnectOnDisconnection() {
4308
4358
  return __classPrivateFieldGet(this, _Device_reconnectOnDisconnection, "f");
@@ -4383,8 +4433,11 @@ class Device {
4383
4433
  get isInsole() {
4384
4434
  return this._informationManager.isInsole;
4385
4435
  }
4386
- get insoleSide() {
4387
- return this._informationManager.insoleSide;
4436
+ get isGlove() {
4437
+ return this._informationManager.isGlove;
4438
+ }
4439
+ get side() {
4440
+ return this._informationManager.side;
4388
4441
  }
4389
4442
  get mtu() {
4390
4443
  return this._informationManager.mtu;
@@ -4405,11 +4458,11 @@ class Device {
4405
4458
  return __classPrivateFieldGet(this, _Device_sensorConfigurationManager, "f").clearSensorConfiguration();
4406
4459
  }
4407
4460
  static get ClearSensorConfigurationOnLeave() {
4408
- return __classPrivateFieldGet(this, _a$1, "f", _Device_ClearSensorConfigurationOnLeave);
4461
+ return __classPrivateFieldGet(this, _a$2, "f", _Device_ClearSensorConfigurationOnLeave);
4409
4462
  }
4410
4463
  static set ClearSensorConfigurationOnLeave(newClearSensorConfigurationOnLeave) {
4411
4464
  _console$8.assertTypeWithError(newClearSensorConfigurationOnLeave, "boolean");
4412
- __classPrivateFieldSet(this, _a$1, newClearSensorConfigurationOnLeave, "f", _Device_ClearSensorConfigurationOnLeave);
4465
+ __classPrivateFieldSet(this, _a$2, newClearSensorConfigurationOnLeave, "f", _Device_ClearSensorConfigurationOnLeave);
4413
4466
  }
4414
4467
  get clearSensorConfigurationOnLeave() {
4415
4468
  return __classPrivateFieldGet(this, _Device_clearSensorConfigurationOnLeave, "f");
@@ -4503,10 +4556,15 @@ class Device {
4503
4556
  get setTfliteThreshold() {
4504
4557
  return __classPrivateFieldGet(this, _Device_tfliteManager, "f").setThreshold;
4505
4558
  }
4559
+ get canUpdateFirmware() {
4560
+ return __classPrivateFieldGet(this, _Device_connectionManager, "f")?.canUpdateFirmware;
4561
+ }
4506
4562
  get uploadFirmware() {
4563
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4507
4564
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").uploadFirmware;
4508
4565
  }
4509
4566
  async reset() {
4567
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4510
4568
  await __classPrivateFieldGet(this, _Device_firmwareManager, "f").reset();
4511
4569
  return __classPrivateFieldGet(this, _Device_connectionManager, "f").disconnect();
4512
4570
  }
@@ -4514,18 +4572,22 @@ class Device {
4514
4572
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").status;
4515
4573
  }
4516
4574
  get getFirmwareImages() {
4575
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4517
4576
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").getImages;
4518
4577
  }
4519
4578
  get firmwareImages() {
4520
4579
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").images;
4521
4580
  }
4522
4581
  get eraseFirmwareImage() {
4582
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4523
4583
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").eraseImage;
4524
4584
  }
4525
4585
  get confirmFirmwareImage() {
4586
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4526
4587
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").confirmImage;
4527
4588
  }
4528
4589
  get testFirmwareImage() {
4590
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4529
4591
  return __classPrivateFieldGet(this, _Device_firmwareManager, "f").testImage;
4530
4592
  }
4531
4593
  get isServerSide() {
@@ -4540,8 +4602,11 @@ class Device {
4540
4602
  __classPrivateFieldSet(this, _Device_isServerSide, newIsServerSide, "f");
4541
4603
  __classPrivateFieldGet(this, _Device_fileTransferManager, "f").isServerSide = this.isServerSide;
4542
4604
  }
4605
+ get isUkaton() {
4606
+ return this.deviceInformation.modelNumber.includes("Ukaton");
4607
+ }
4543
4608
  }
4544
- _a$1 = 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() {
4609
+ _a$2 = 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() {
4545
4610
  return new WebBluetoothConnectionManager();
4546
4611
  }, _Device_dispatchEvent_get = function _Device_dispatchEvent_get() {
4547
4612
  return __classPrivateFieldGet(this, _Device_eventDispatcher, "f").dispatchEvent;
@@ -4551,7 +4616,11 @@ _a$1 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4551
4616
  _console$8.assertWithError(this.isConnected, "notConnected");
4552
4617
  }, _Device_hasRequiredInformation_get = function _Device_hasRequiredInformation_get() {
4553
4618
  return RequiredInformationConnectionMessages.every((messageType) => {
4554
- return this.latestConnectionMessage.has(messageType);
4619
+ const hasConnectionMessage = this.latestConnectionMessages.has(messageType);
4620
+ if (!hasConnectionMessage) {
4621
+ _console$8.log(`didn't receive "${messageType}" message`);
4622
+ }
4623
+ return hasConnectionMessage;
4555
4624
  });
4556
4625
  }, _Device_requestRequiredInformation = function _Device_requestRequiredInformation() {
4557
4626
  const messages = RequiredInformationConnectionMessages.map((messageType) => ({
@@ -4563,6 +4632,7 @@ _a$1 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4563
4632
  }, _Device_onConnectionStatusUpdated = function _Device_onConnectionStatusUpdated(connectionStatus) {
4564
4633
  _console$8.log({ connectionStatus });
4565
4634
  if (connectionStatus == "notConnected") {
4635
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_clearConnection).call(this);
4566
4636
  if (this.canReconnect && this.reconnectOnDisconnection) {
4567
4637
  _console$8.log("starting reconnect interval...");
4568
4638
  __classPrivateFieldSet(this, _Device_reconnectIntervalId, setInterval(() => {
@@ -4607,10 +4677,12 @@ _a$1 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4607
4677
  break;
4608
4678
  }
4609
4679
  }, _Device_clear = function _Device_clear() {
4610
- this.connectionManager?.clear();
4611
- this.latestConnectionMessage.clear();
4680
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_clearConnection).call(this);
4612
4681
  this._informationManager.clear();
4613
4682
  __classPrivateFieldGet(this, _Device_deviceInformationManager, "f").clear();
4683
+ }, _Device_clearConnection = function _Device_clearConnection() {
4684
+ this.connectionManager?.clear();
4685
+ this.latestConnectionMessages.clear();
4614
4686
  }, _Device_onConnectionMessageReceived = function _Device_onConnectionMessageReceived(messageType, dataView) {
4615
4687
  _console$8.log({ messageType, dataView });
4616
4688
  switch (messageType) {
@@ -4645,7 +4717,7 @@ _a$1 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4645
4717
  throw Error(`uncaught messageType ${messageType}`);
4646
4718
  }
4647
4719
  }
4648
- this.latestConnectionMessage.set(messageType, dataView);
4720
+ this.latestConnectionMessages.set(messageType, dataView);
4649
4721
  __classPrivateFieldGet(this, _Device_instances, "a", _Device_dispatchEvent_get).call(this, "connectionMessage", { messageType, dataView });
4650
4722
  }, _Device_onConnectionMessagesReceived = function _Device_onConnectionMessagesReceived() {
4651
4723
  if (!this.isConnected && __classPrivateFieldGet(this, _Device_instances, "a", _Device_hasRequiredInformation_get)) {
@@ -4664,28 +4736,34 @@ _a$1 = Device, _Device_eventDispatcher = new WeakMap(), _Device_connectionManage
4664
4736
  __classPrivateFieldSet(this, _Device_batteryLevel, updatedBatteryLevel, "f");
4665
4737
  _console$8.log({ updatedBatteryLevel: __classPrivateFieldGet(this, _Device_batteryLevel, "f") });
4666
4738
  __classPrivateFieldGet(this, _Device_instances, "a", _Device_dispatchEvent_get).call(this, "batteryLevel", { batteryLevel: __classPrivateFieldGet(this, _Device_batteryLevel, "f") });
4739
+ }, _Device_assertCanUpdateFirmware = function _Device_assertCanUpdateFirmware() {
4740
+ _console$8.assertWithError(this.canUpdateFirmware, "can't update firmware");
4667
4741
  }, _Device_sendSmpMessage = function _Device_sendSmpMessage(data) {
4742
+ __classPrivateFieldGet(this, _Device_instances, "m", _Device_assertCanUpdateFirmware).call(this);
4668
4743
  return __classPrivateFieldGet(this, _Device_connectionManager, "f").sendSmpMessage(data);
4669
4744
  };
4670
4745
  _Device_ReconnectOnDisconnection = { value: false };
4671
4746
  _Device_ClearSensorConfigurationOnLeave = { value: true };
4672
4747
 
4673
- var _DevicePairPressureSensorDataManager_instances, _DevicePairPressureSensorDataManager_rawPressure, _DevicePairPressureSensorDataManager_centerOfPressureHelper, _DevicePairPressureSensorDataManager_hasAllPressureData_get, _DevicePairPressureSensorDataManager_updatePressureData;
4674
- const _console$7 = createConsole("DevicePairPressureSensorDataManager", { log: true });
4748
+ var _DevicePairPressureSensorDataManager_instances, _DevicePairPressureSensorDataManager_rawPressure, _DevicePairPressureSensorDataManager_centerOfPressureHelper, _DevicePairPressureSensorDataManager_normalizedSumRangeHelper, _DevicePairPressureSensorDataManager_hasAllPressureData_get, _DevicePairPressureSensorDataManager_updatePressureData;
4749
+ const _console$7 = createConsole("DevicePairPressureSensorDataManager", { log: false });
4675
4750
  class DevicePairPressureSensorDataManager {
4676
4751
  constructor() {
4677
4752
  _DevicePairPressureSensorDataManager_instances.add(this);
4678
4753
  _DevicePairPressureSensorDataManager_rawPressure.set(this, {});
4679
4754
  _DevicePairPressureSensorDataManager_centerOfPressureHelper.set(this, new CenterOfPressureHelper());
4755
+ _DevicePairPressureSensorDataManager_normalizedSumRangeHelper.set(this, new RangeHelper());
4756
+ this.resetPressureRange();
4680
4757
  }
4681
4758
  resetPressureRange() {
4682
4759
  __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_centerOfPressureHelper, "f").reset();
4760
+ __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_normalizedSumRangeHelper, "f").reset();
4683
4761
  }
4684
4762
  onDevicePressureData(event) {
4685
4763
  const { pressure } = event.message;
4686
- const insoleSide = event.target.insoleSide;
4687
- _console$7.log({ pressure, insoleSide });
4688
- __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[insoleSide] = pressure;
4764
+ const { side } = event.target;
4765
+ _console$7.log({ pressure, side });
4766
+ __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side] = pressure;
4689
4767
  if (__classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_instances, "a", _DevicePairPressureSensorDataManager_hasAllPressureData_get)) {
4690
4768
  return __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_instances, "m", _DevicePairPressureSensorDataManager_updatePressureData).call(this);
4691
4769
  }
@@ -4694,36 +4772,43 @@ class DevicePairPressureSensorDataManager {
4694
4772
  }
4695
4773
  }
4696
4774
  }
4697
- _DevicePairPressureSensorDataManager_rawPressure = new WeakMap(), _DevicePairPressureSensorDataManager_centerOfPressureHelper = new WeakMap(), _DevicePairPressureSensorDataManager_instances = new WeakSet(), _DevicePairPressureSensorDataManager_hasAllPressureData_get = function _DevicePairPressureSensorDataManager_hasAllPressureData_get() {
4698
- return InsoleSides.every((side) => side in __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f"));
4775
+ _DevicePairPressureSensorDataManager_rawPressure = new WeakMap(), _DevicePairPressureSensorDataManager_centerOfPressureHelper = new WeakMap(), _DevicePairPressureSensorDataManager_normalizedSumRangeHelper = new WeakMap(), _DevicePairPressureSensorDataManager_instances = new WeakSet(), _DevicePairPressureSensorDataManager_hasAllPressureData_get = function _DevicePairPressureSensorDataManager_hasAllPressureData_get() {
4776
+ return Sides.every((side) => side in __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f"));
4699
4777
  }, _DevicePairPressureSensorDataManager_updatePressureData = function _DevicePairPressureSensorDataManager_updatePressureData() {
4700
- const pressure = { rawSum: 0, normalizedSum: 0 };
4701
- InsoleSides.forEach((side) => {
4702
- pressure.rawSum += __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side].scaledSum;
4703
- pressure.normalizedSum += __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side].normalizedSum;
4778
+ const pressure = { scaledSum: 0, normalizedSum: 0, sensors: { left: [], right: [] } };
4779
+ Sides.forEach((side) => {
4780
+ const sidePressure = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side];
4781
+ pressure.scaledSum += sidePressure.scaledSum;
4704
4782
  });
4705
- if (pressure.normalizedSum > 0.001) {
4783
+ pressure.normalizedSum += __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_normalizedSumRangeHelper, "f").updateAndGetNormalization(pressure.scaledSum, false);
4784
+ if (pressure.scaledSum > 0) {
4706
4785
  pressure.center = { x: 0, y: 0 };
4707
- InsoleSides.forEach((side) => {
4786
+ Sides.forEach((side) => {
4708
4787
  const sidePressure = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_rawPressure, "f")[side];
4709
- const normalizedPressureSumWeight = sidePressure.normalizedSum / pressure.normalizedSum;
4710
- if (normalizedPressureSumWeight > 0) {
4711
- if (sidePressure.normalizedCenter?.y != undefined) {
4712
- pressure.center.y += sidePressure.normalizedCenter.y * normalizedPressureSumWeight;
4713
- }
4714
- if (side == "right") {
4715
- pressure.center.x = normalizedPressureSumWeight;
4716
- }
4788
+ {
4789
+ sidePressure.sensors.forEach((sensor) => {
4790
+ const _sensor = { ...sensor };
4791
+ _sensor.weightedValue = sensor.scaledValue / pressure.scaledSum;
4792
+ let { x, y } = sensor.position;
4793
+ x /= 2;
4794
+ if (side == "right") {
4795
+ x += 0.5;
4796
+ }
4797
+ _sensor.position = { x, y };
4798
+ pressure.center.x += _sensor.position.x * _sensor.weightedValue;
4799
+ pressure.center.y += _sensor.position.y * _sensor.weightedValue;
4800
+ pressure.sensors[side].push(_sensor);
4801
+ });
4717
4802
  }
4718
4803
  });
4719
- pressure.normalizedCenter = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center);
4804
+ pressure.normalizedCenter = __classPrivateFieldGet(this, _DevicePairPressureSensorDataManager_centerOfPressureHelper, "f").updateAndGetNormalization(pressure.center, false);
4720
4805
  }
4721
4806
  _console$7.log({ devicePairPressure: pressure });
4722
4807
  return pressure;
4723
4808
  };
4724
4809
 
4725
4810
  var _DevicePairSensorDataManager_timestamps;
4726
- const _console$6 = createConsole("DevicePairSensorDataManager", { log: true });
4811
+ const _console$6 = createConsole("DevicePairSensorDataManager", { log: false });
4727
4812
  const DevicePairSensorTypes = ["pressure", "sensorData"];
4728
4813
  const DevicePairSensorDataEventTypes = DevicePairSensorTypes;
4729
4814
  class DevicePairSensorDataManager {
@@ -4743,7 +4828,7 @@ class DevicePairSensorDataManager {
4743
4828
  if (!__classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType]) {
4744
4829
  __classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType] = {};
4745
4830
  }
4746
- __classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType][event.target.insoleSide] = timestamp;
4831
+ __classPrivateFieldGet(this, _DevicePairSensorDataManager_timestamps, "f")[sensorType][event.target.side] = timestamp;
4747
4832
  let value;
4748
4833
  switch (sensorType) {
4749
4834
  case "pressure":
@@ -4765,8 +4850,8 @@ class DevicePairSensorDataManager {
4765
4850
  }
4766
4851
  _DevicePairSensorDataManager_timestamps = new WeakMap();
4767
4852
 
4768
- var _DevicePair_instances, _a, _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;
4769
- const _console$5 = createConsole("DevicePair", { log: true });
4853
+ var _DevicePair_instances, _a$1, _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;
4854
+ const _console$5 = createConsole("DevicePair", { log: false });
4770
4855
  function getDevicePairDeviceEventType(deviceEventType) {
4771
4856
  return `device${capitalizeFirstCharacter(deviceEventType)}`;
4772
4857
  }
@@ -4777,9 +4862,11 @@ const DevicePairEventTypes = [
4777
4862
  ...DevicePairSensorDataEventTypes,
4778
4863
  ...DevicePairDeviceEventTypes,
4779
4864
  ];
4865
+ const DevicePairTypes = ["insoles", "gloves"];
4780
4866
  class DevicePair {
4781
- constructor() {
4867
+ constructor(type) {
4782
4868
  _DevicePair_instances.add(this);
4869
+ _DevicePair_type.set(this, void 0);
4783
4870
  _DevicePair_eventDispatcher.set(this, new EventDispatcher(this, DevicePairEventTypes));
4784
4871
  _DevicePair_left.set(this, void 0);
4785
4872
  _DevicePair_right.set(this, void 0);
@@ -4789,10 +4876,14 @@ class DevicePair {
4789
4876
  getType: __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_onDeviceType).bind(this),
4790
4877
  });
4791
4878
  _DevicePair_sensorDataManager.set(this, new DevicePairSensorDataManager());
4879
+ __classPrivateFieldSet(this, _DevicePair_type, type, "f");
4792
4880
  __classPrivateFieldGet(this, _DevicePair_sensorDataManager, "f").eventDispatcher = __classPrivateFieldGet(this, _DevicePair_eventDispatcher, "f");
4793
4881
  }
4794
4882
  get sides() {
4795
- return InsoleSides;
4883
+ return Sides;
4884
+ }
4885
+ get type() {
4886
+ return __classPrivateFieldGet(this, _DevicePair_type, "f");
4796
4887
  }
4797
4888
  get addEventListener() {
4798
4889
  return __classPrivateFieldGet(this, _DevicePair_eventDispatcher, "f").addEventListener;
@@ -4816,20 +4907,20 @@ class DevicePair {
4816
4907
  return __classPrivateFieldGet(this, _DevicePair_right, "f");
4817
4908
  }
4818
4909
  get isConnected() {
4819
- return InsoleSides.every((side) => this[side]?.isConnected);
4910
+ return Sides.every((side) => this[side]?.isConnected);
4820
4911
  }
4821
4912
  get isPartiallyConnected() {
4822
- return InsoleSides.some((side) => this[side]?.isConnected);
4913
+ return Sides.some((side) => this[side]?.isConnected);
4823
4914
  }
4824
4915
  get isHalfConnected() {
4825
4916
  return this.isPartiallyConnected && !this.isConnected;
4826
4917
  }
4827
- assignInsole(device) {
4828
- if (!device.isInsole) {
4829
- _console$5.warn("device is not an insole");
4918
+ assignDevice(device) {
4919
+ if (!__classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_isDeviceCorrectType).call(this, device)) {
4920
+ _console$5.warn(`device is incorrect type ${device.type} for ${this.type} devicePair`);
4830
4921
  return;
4831
4922
  }
4832
- const side = device.insoleSide;
4923
+ const side = device.side;
4833
4924
  const currentDevice = this[side];
4834
4925
  if (device == currentDevice) {
4835
4926
  _console$5.log("device already assigned");
@@ -4847,35 +4938,46 @@ class DevicePair {
4847
4938
  __classPrivateFieldSet(this, _DevicePair_right, device, "f");
4848
4939
  break;
4849
4940
  }
4850
- _console$5.log(`assigned ${side} insole`, device);
4941
+ _console$5.log(`assigned ${side} device`, device);
4851
4942
  this.resetPressureRange();
4852
4943
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, "isConnected", { isConnected: this.isConnected });
4853
4944
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, "deviceIsConnected", { device, isConnected: device.isConnected, side });
4854
4945
  return currentDevice;
4855
4946
  }
4856
4947
  async setSensorConfiguration(sensorConfiguration) {
4857
- for (let i = 0; i < InsoleSides.length; i++) {
4858
- const side = InsoleSides[i];
4948
+ for (let i = 0; i < Sides.length; i++) {
4949
+ const side = Sides[i];
4859
4950
  if (this[side]?.isConnected) {
4860
4951
  await this[side].setSensorConfiguration(sensorConfiguration);
4861
4952
  }
4862
4953
  }
4863
4954
  }
4864
4955
  resetPressureRange() {
4956
+ Sides.forEach((side) => this[side]?.resetPressureRange());
4865
4957
  __classPrivateFieldGet(this, _DevicePair_sensorDataManager, "f").resetPressureRange();
4866
4958
  }
4867
4959
  async triggerVibration(vibrationConfigurations, sendImmediately) {
4868
- const promises = InsoleSides.map((side) => {
4960
+ const promises = Sides.map((side) => {
4869
4961
  return this[side]?.triggerVibration(vibrationConfigurations, sendImmediately);
4870
4962
  }).filter(Boolean);
4871
4963
  return Promise.allSettled(promises);
4872
4964
  }
4873
- static get shared() {
4874
- return __classPrivateFieldGet(this, _a, "f", _DevicePair_shared);
4965
+ static get insoles() {
4966
+ return __classPrivateFieldGet(this, _a$1, "f", _DevicePair_insoles);
4967
+ }
4968
+ static get gloves() {
4969
+ return __classPrivateFieldGet(this, _a$1, "f", _DevicePair_gloves);
4875
4970
  }
4876
4971
  }
4877
- _a = 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() {
4972
+ _a$1 = 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() {
4878
4973
  return __classPrivateFieldGet(this, _DevicePair_eventDispatcher, "f").dispatchEvent;
4974
+ }, _DevicePair_isDeviceCorrectType = function _DevicePair_isDeviceCorrectType(device) {
4975
+ switch (this.type) {
4976
+ case "insoles":
4977
+ return device.isInsole;
4978
+ case "gloves":
4979
+ return device.isGlove;
4980
+ }
4879
4981
  }, _DevicePair_addDeviceEventListeners = function _DevicePair_addDeviceEventListeners(device) {
4880
4982
  addEventListeners(device, __classPrivateFieldGet(this, _DevicePair_boundDeviceEventListeners, "f"));
4881
4983
  DeviceEventTypes.forEach((deviceEventType) => {
@@ -4886,12 +4988,12 @@ _a = DevicePair, _DevicePair_eventDispatcher = new WeakMap(), _DevicePair_left =
4886
4988
  DeviceEventTypes.forEach((deviceEventType) => {
4887
4989
  device.removeEventListener(deviceEventType, __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_redispatchDeviceEvent).bind(this));
4888
4990
  });
4889
- }, _DevicePair_removeInsole = function _DevicePair_removeInsole(device) {
4890
- const foundDevice = InsoleSides.some((side) => {
4991
+ }, _DevicePair_removeDevice = function _DevicePair_removeDevice(device) {
4992
+ const foundDevice = Sides.some((side) => {
4891
4993
  if (this[side] != device) {
4892
4994
  return false;
4893
4995
  }
4894
- _console$5.log(`removing ${side} insole`, device);
4996
+ _console$5.log(`removing ${side} device`, device);
4895
4997
  removeEventListeners(device, __classPrivateFieldGet(this, _DevicePair_boundDeviceEventListeners, "f"));
4896
4998
  delete this[side];
4897
4999
  return true;
@@ -4905,31 +5007,35 @@ _a = DevicePair, _DevicePair_eventDispatcher = new WeakMap(), _DevicePair_left =
4905
5007
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, getDevicePairDeviceEventType(type), {
4906
5008
  ...message,
4907
5009
  device,
4908
- side: device.insoleSide,
5010
+ side: device.side,
4909
5011
  });
4910
5012
  }, _DevicePair_onDeviceIsConnected = function _DevicePair_onDeviceIsConnected(deviceEvent) {
4911
5013
  __classPrivateFieldGet(this, _DevicePair_instances, "a", _DevicePair_dispatchEvent_get).call(this, "isConnected", { isConnected: this.isConnected });
4912
5014
  }, _DevicePair_onDeviceType = function _DevicePair_onDeviceType(deviceEvent) {
4913
5015
  const { target: device } = deviceEvent;
4914
- if (this[device.insoleSide] == device) {
5016
+ if (this[device.side] == device) {
4915
5017
  return;
4916
5018
  }
4917
- const foundDevice = __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_removeInsole).call(this, device);
5019
+ const foundDevice = __classPrivateFieldGet(this, _DevicePair_instances, "m", _DevicePair_removeDevice).call(this, device);
4918
5020
  if (!foundDevice) {
4919
5021
  return;
4920
5022
  }
4921
- this.assignInsole(device);
5023
+ this.assignDevice(device);
4922
5024
  }, _DevicePair_onDeviceSensorData = function _DevicePair_onDeviceSensorData(deviceEvent) {
4923
5025
  if (this.isConnected) {
4924
5026
  __classPrivateFieldGet(this, _DevicePair_sensorDataManager, "f").onDeviceSensorData(deviceEvent);
4925
5027
  }
4926
5028
  };
4927
- _DevicePair_shared = { value: new _a() };
5029
+ _DevicePair_insoles = { value: new _a$1("insoles") };
5030
+ _DevicePair_gloves = { value: new _a$1("gloves") };
4928
5031
  (() => {
4929
5032
  DeviceManager$1.AddEventListener("deviceConnected", (event) => {
4930
5033
  const { device } = event.message;
4931
5034
  if (device.isInsole) {
4932
- __classPrivateFieldGet(_a, _a, "f", _DevicePair_shared).assignInsole(device);
5035
+ __classPrivateFieldGet(_a$1, _a$1, "f", _DevicePair_insoles).assignDevice(device);
5036
+ }
5037
+ if (device.isGlove) {
5038
+ __classPrivateFieldGet(_a$1, _a$1, "f", _DevicePair_gloves).assignDevice(device);
4933
5039
  }
4934
5040
  });
4935
5041
  })();
@@ -4988,7 +5094,7 @@ createServerMessage("stopScan");
4988
5094
  createServerMessage("discoveredDevices");
4989
5095
 
4990
5096
  var _ClientConnectionManager_instances, _ClientConnectionManager_bluetoothId, _ClientConnectionManager_isConnected, _ClientConnectionManager_requestDeviceInformation, _ClientConnectionManager_onClientMessageCallback;
4991
- const _console$3 = createConsole("ClientConnectionManager", { log: true });
5097
+ const _console$3 = createConsole("ClientConnectionManager", { log: false });
4992
5098
  const ClientDeviceInformationMessageTypes = [...DeviceInformationMessageTypes, "batteryLevel"];
4993
5099
  class ClientConnectionManager extends BaseConnectionManager {
4994
5100
  constructor() {
@@ -5003,6 +5109,9 @@ class ClientConnectionManager extends BaseConnectionManager {
5003
5109
  static get type() {
5004
5110
  return "client";
5005
5111
  }
5112
+ get canUpdateFirmware() {
5113
+ return false;
5114
+ }
5006
5115
  get bluetoothId() {
5007
5116
  return __classPrivateFieldGet(this, _ClientConnectionManager_bluetoothId, "f");
5008
5117
  }
@@ -5029,6 +5138,9 @@ class ClientConnectionManager extends BaseConnectionManager {
5029
5138
  __classPrivateFieldGet(this, _ClientConnectionManager_instances, "m", _ClientConnectionManager_requestDeviceInformation).call(this);
5030
5139
  }
5031
5140
  }
5141
+ get isAvailable() {
5142
+ return this.client.isConnected;
5143
+ }
5032
5144
  async connect() {
5033
5145
  await super.connect();
5034
5146
  this.sendClientConnectMessage();
@@ -5082,8 +5194,8 @@ _ClientConnectionManager_bluetoothId = new WeakMap(), _ClientConnectionManager_i
5082
5194
  }
5083
5195
  };
5084
5196
 
5085
- var _BaseClient_instances, _BaseClient_reset, _BaseClient_devices, _BaseClient_eventDispatcher, _BaseClient__connectionStatus, _BaseClient_parseMessageCallback, _BaseClient__isScanningAvailable, _BaseClient_isScanningAvailable_get, _BaseClient_isScanningAvailable_set, _BaseClient_assertIsScanningAvailable, _BaseClient__isScanning, _BaseClient_isScanning_get, _BaseClient_isScanning_set, _BaseClient_requestIsScanning, _BaseClient_assertIsScanning, _BaseClient_assertIsNotScanning, _BaseClient_discoveredDevices, _BaseClient_onExpiredDiscoveredDevice, _BaseClient_getOrCreateDevice;
5086
- const _console$2 = createConsole("BaseClient", { log: true });
5197
+ var _BaseClient_instances, _a, _BaseClient_reset, _BaseClient_devices, _BaseClient_eventDispatcher, _BaseClient__connectionStatus, _BaseClient_RequiredMessageTypes, _BaseClient_requiredMessageTypes_get, _BaseClient_receivedMessageTypes, _BaseClient_checkIfFullyConnected, _BaseClient_parseMessageCallback, _BaseClient__isScanningAvailable, _BaseClient_isScanningAvailable_get, _BaseClient_isScanningAvailable_set, _BaseClient_assertIsScanningAvailable, _BaseClient__isScanning, _BaseClient_isScanning_get, _BaseClient_isScanning_set, _BaseClient_requestIsScanning, _BaseClient_assertIsScanning, _BaseClient_assertIsNotScanning, _BaseClient_discoveredDevices, _BaseClient_onExpiredDiscoveredDevice, _BaseClient_getOrCreateDevice;
5198
+ const _console$2 = createConsole("BaseClient", { log: false });
5087
5199
  const ClientConnectionStatuses = ["notConnected", "connecting", "connected", "disconnecting"];
5088
5200
  const ClientEventTypes = [
5089
5201
  ...ClientConnectionStatuses,
@@ -5101,6 +5213,7 @@ class BaseClient {
5101
5213
  _BaseClient_eventDispatcher.set(this, new EventDispatcher(this, ClientEventTypes));
5102
5214
  this._reconnectOnDisconnection = this.baseConstructor.ReconnectOnDisconnection;
5103
5215
  _BaseClient__connectionStatus.set(this, "notConnected");
5216
+ _BaseClient_receivedMessageTypes.set(this, []);
5104
5217
  _BaseClient__isScanningAvailable.set(this, false);
5105
5218
  _BaseClient__isScanning.set(this, false);
5106
5219
  _BaseClient_discoveredDevices.set(this, {});
@@ -5156,9 +5269,7 @@ class BaseClient {
5156
5269
  case "connected":
5157
5270
  case "notConnected":
5158
5271
  this.dispatchEvent("isConnected", { isConnected: this.isConnected });
5159
- if (this.isConnected) {
5160
- this.sendServerMessage("isScanningAvailable", "discoveredDevices", "connectedDevices");
5161
- }
5272
+ if (this.isConnected) ;
5162
5273
  else {
5163
5274
  __classPrivateFieldGet(this, _BaseClient_instances, "m", _BaseClient_reset).call(this);
5164
5275
  }
@@ -5168,9 +5279,14 @@ class BaseClient {
5168
5279
  get connectionStatus() {
5169
5280
  return this._connectionStatus;
5170
5281
  }
5282
+ _sendRequiredMessages() {
5283
+ _console$2.log("sending required messages", __classPrivateFieldGet(this, _BaseClient_receivedMessageTypes, "f"));
5284
+ this.sendServerMessage(...__classPrivateFieldGet(this, _BaseClient_instances, "a", _BaseClient_requiredMessageTypes_get));
5285
+ }
5171
5286
  parseMessage(dataView) {
5172
5287
  _console$2.log("parseMessage", { dataView });
5173
5288
  parseMessage(dataView, ServerMessageTypes, __classPrivateFieldGet(this, _BaseClient_instances, "m", _BaseClient_parseMessageCallback).bind(this), null, true);
5289
+ __classPrivateFieldGet(this, _BaseClient_instances, "m", _BaseClient_checkIfFullyConnected).call(this);
5174
5290
  }
5175
5291
  get isScanningAvailable() {
5176
5292
  return __classPrivateFieldGet(this, _BaseClient_instances, "a", _BaseClient_isScanningAvailable_get);
@@ -5225,6 +5341,7 @@ class BaseClient {
5225
5341
  createDevice(bluetoothId) {
5226
5342
  const device = new Device();
5227
5343
  const clientConnectionManager = new ClientConnectionManager();
5344
+ clientConnectionManager.client = this;
5228
5345
  clientConnectionManager.bluetoothId = bluetoothId;
5229
5346
  clientConnectionManager.sendClientMessage = this.sendDeviceMessage.bind(this, bluetoothId);
5230
5347
  clientConnectionManager.sendClientConnectMessage = this.sendConnectToDeviceMessage.bind(this, bluetoothId);
@@ -5238,6 +5355,7 @@ class BaseClient {
5238
5355
  const device = __classPrivateFieldGet(this, _BaseClient_instances, "m", _BaseClient_getOrCreateDevice).call(this, bluetoothId);
5239
5356
  const connectionManager = device.connectionManager;
5240
5357
  connectionManager.isConnected = true;
5358
+ DeviceManager$1._CheckDeviceAvailability(device);
5241
5359
  });
5242
5360
  }
5243
5361
  disconnectFromDevice(bluetoothId) {
@@ -5261,7 +5379,7 @@ class BaseClient {
5261
5379
  });
5262
5380
  }
5263
5381
  }
5264
- _BaseClient_devices = new WeakMap(), _BaseClient_eventDispatcher = new WeakMap(), _BaseClient__connectionStatus = new WeakMap(), _BaseClient__isScanningAvailable = new WeakMap(), _BaseClient__isScanning = new WeakMap(), _BaseClient_discoveredDevices = new WeakMap(), _BaseClient_instances = new WeakSet(), _BaseClient_reset = function _BaseClient_reset() {
5382
+ _a = BaseClient, _BaseClient_devices = new WeakMap(), _BaseClient_eventDispatcher = new WeakMap(), _BaseClient__connectionStatus = new WeakMap(), _BaseClient_receivedMessageTypes = new WeakMap(), _BaseClient__isScanningAvailable = new WeakMap(), _BaseClient__isScanning = new WeakMap(), _BaseClient_discoveredDevices = new WeakMap(), _BaseClient_instances = new WeakSet(), _BaseClient_reset = function _BaseClient_reset() {
5265
5383
  __classPrivateFieldSet(this, _BaseClient_instances, false, "a", _BaseClient_isScanningAvailable_set);
5266
5384
  __classPrivateFieldSet(this, _BaseClient_instances, false, "a", _BaseClient_isScanning_set);
5267
5385
  for (const id in __classPrivateFieldGet(this, _BaseClient_devices, "f")) {
@@ -5269,6 +5387,26 @@ _BaseClient_devices = new WeakMap(), _BaseClient_eventDispatcher = new WeakMap()
5269
5387
  const connectionManager = device.connectionManager;
5270
5388
  connectionManager.isConnected = false;
5271
5389
  }
5390
+ __classPrivateFieldGet(this, _BaseClient_receivedMessageTypes, "f").length = 0;
5391
+ }, _BaseClient_requiredMessageTypes_get = function _BaseClient_requiredMessageTypes_get() {
5392
+ return __classPrivateFieldGet(_a, _a, "f", _BaseClient_RequiredMessageTypes);
5393
+ }, _BaseClient_checkIfFullyConnected = function _BaseClient_checkIfFullyConnected() {
5394
+ if (this.connectionStatus != "connecting") {
5395
+ return;
5396
+ }
5397
+ _console$2.log("checking if fully connected...");
5398
+ if (!__classPrivateFieldGet(this, _BaseClient_receivedMessageTypes, "f").includes("isScanningAvailable")) {
5399
+ _console$2.log("not fully connected - didn't receive isScanningAvailable");
5400
+ return;
5401
+ }
5402
+ if (this.isScanningAvailable) {
5403
+ if (!__classPrivateFieldGet(this, _BaseClient_receivedMessageTypes, "f").includes("isScanning")) {
5404
+ _console$2.log("not fully connected - didn't receive isScanning");
5405
+ return;
5406
+ }
5407
+ }
5408
+ _console$2.log("fully connected");
5409
+ this._connectionStatus = "connected";
5272
5410
  }, _BaseClient_parseMessageCallback = function _BaseClient_parseMessageCallback(messageType, dataView) {
5273
5411
  let byteOffset = 0;
5274
5412
  _console$2.log({ messageType }, dataView);
@@ -5329,6 +5467,9 @@ _BaseClient_devices = new WeakMap(), _BaseClient_eventDispatcher = new WeakMap()
5329
5467
  _console$2.error(`uncaught messageType "${messageType}"`);
5330
5468
  break;
5331
5469
  }
5470
+ if (this.connectionStatus == "connecting") {
5471
+ __classPrivateFieldGet(this, _BaseClient_receivedMessageTypes, "f").push(messageType);
5472
+ }
5332
5473
  }, _BaseClient_isScanningAvailable_get = function _BaseClient_isScanningAvailable_get() {
5333
5474
  return __classPrivateFieldGet(this, _BaseClient__isScanningAvailable, "f");
5334
5475
  }, _BaseClient_isScanningAvailable_set = function _BaseClient_isScanningAvailable_set(newIsAvailable) {
@@ -5372,6 +5513,7 @@ _BaseClient_devices = new WeakMap(), _BaseClient_eventDispatcher = new WeakMap()
5372
5513
  return device;
5373
5514
  };
5374
5515
  BaseClient._reconnectOnDisconnection = true;
5516
+ _BaseClient_RequiredMessageTypes = { value: ["isScanningAvailable", "discoveredDevices", "connectedDevices"] };
5375
5517
 
5376
5518
  const _console$1 = createConsole("WebSocketUtils", { log: false });
5377
5519
  const webSocketPingTimeout = 30_000_000;
@@ -5385,7 +5527,7 @@ createWebSocketMessage("ping");
5385
5527
  createWebSocketMessage("pong");
5386
5528
 
5387
5529
  var _WebSocketClient_instances, _WebSocketClient_webSocket, _WebSocketClient_sendWebSocketMessage, _WebSocketClient_boundWebSocketEventListeners, _WebSocketClient_onWebSocketOpen, _WebSocketClient_onWebSocketMessage, _WebSocketClient_onWebSocketClose, _WebSocketClient_onWebSocketError, _WebSocketClient_parseWebSocketMessage, _WebSocketClient_onServerMessage, _WebSocketClient_pingTimer, _WebSocketClient_ping, _WebSocketClient_pong;
5388
- const _console = createConsole("WebSocketClient", { log: true });
5530
+ const _console = createConsole("WebSocketClient", { log: false });
5389
5531
  class WebSocketClient extends BaseClient {
5390
5532
  constructor() {
5391
5533
  super(...arguments);
@@ -5470,7 +5612,7 @@ _WebSocketClient_webSocket = new WeakMap(), _WebSocketClient_boundWebSocketEvent
5470
5612
  }, _WebSocketClient_onWebSocketOpen = function _WebSocketClient_onWebSocketOpen(event) {
5471
5613
  _console.log("webSocket.open", event);
5472
5614
  __classPrivateFieldGet(this, _WebSocketClient_pingTimer, "f").start();
5473
- this._connectionStatus = "connected";
5615
+ this._sendRequiredMessages();
5474
5616
  }, _WebSocketClient_onWebSocketMessage = async function _WebSocketClient_onWebSocketMessage(event) {
5475
5617
  _console.log("webSocket.message", event);
5476
5618
  __classPrivateFieldGet(this, _WebSocketClient_pingTimer, "f").restart();
@@ -5514,5 +5656,5 @@ _WebSocketClient_webSocket = new WeakMap(), _WebSocketClient_boundWebSocketEvent
5514
5656
  __classPrivateFieldGet(this, _WebSocketClient_instances, "m", _WebSocketClient_sendWebSocketMessage).call(this, "pong");
5515
5657
  };
5516
5658
 
5517
- 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, SensorRateStep, SensorTypes, TfliteSensorTypes, TfliteTasks, VibrationLocations, VibrationTypes, VibrationWaveformEffects, WebSocketClient, setAllConsoleLevelFlags, setConsoleLevelFlagsForType };
5659
+ 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, SensorRateStep, SensorTypes, Sides, TfliteSensorTypes, TfliteTasks, VibrationLocations, VibrationTypes, VibrationWaveformEffects, WebSocketClient, setAllConsoleLevelFlags, setConsoleLevelFlagsForType };
5518
5660
  //# sourceMappingURL=brilliantsole.module.js.map