@ovok/native 1.16.1-dev.2131 → 1.16.1-dev.2133

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 (105) hide show
  1. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +13 -1
  2. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  3. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js +4 -7
  4. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js.map +1 -1
  5. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js +106 -0
  6. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js.map +1 -0
  7. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +38 -31
  8. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -1
  9. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js +41 -0
  10. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js.map +1 -0
  11. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +22 -24
  12. package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -1
  13. package/lib/commonjs/modules/bt-management/utils/device-user.js +22 -0
  14. package/lib/commonjs/modules/bt-management/utils/device-user.js.map +1 -0
  15. package/lib/commonjs/modules/bt-management/utils/kpa-to-mmhg.js +9 -0
  16. package/lib/commonjs/modules/bt-management/utils/kpa-to-mmhg.js.map +1 -0
  17. package/lib/commonjs/modules/bt-management/utils/rr-interval.js +16 -0
  18. package/lib/commonjs/modules/bt-management/utils/rr-interval.js.map +1 -0
  19. package/lib/commonjs/modules/bt-management/utils/temperature-type.js +15 -0
  20. package/lib/commonjs/modules/bt-management/utils/temperature-type.js.map +1 -0
  21. package/lib/commonjs/modules/next/bluetooth/index.js +6 -0
  22. package/lib/commonjs/modules/next/bluetooth/index.js.map +1 -1
  23. package/lib/commonjs/modules/next/bluetooth/result-policy.js +10 -2
  24. package/lib/commonjs/modules/next/bluetooth/result-policy.js.map +1 -1
  25. package/lib/commonjs/modules/next/bluetooth/sig-profiles.js +46 -13
  26. package/lib/commonjs/modules/next/bluetooth/sig-profiles.js.map +1 -1
  27. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +13 -1
  28. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  29. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js +1 -4
  30. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.js.map +1 -1
  31. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js +99 -0
  32. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.js.map +1 -0
  33. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +38 -31
  34. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -1
  35. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js +35 -0
  36. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.js.map +1 -0
  37. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +18 -20
  38. package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -1
  39. package/lib/module/modules/bt-management/utils/device-user.js +17 -0
  40. package/lib/module/modules/bt-management/utils/device-user.js.map +1 -0
  41. package/lib/module/modules/bt-management/utils/kpa-to-mmhg.js +6 -0
  42. package/lib/module/modules/bt-management/utils/kpa-to-mmhg.js.map +1 -0
  43. package/lib/module/modules/bt-management/utils/rr-interval.js +12 -0
  44. package/lib/module/modules/bt-management/utils/rr-interval.js.map +1 -0
  45. package/lib/module/modules/bt-management/utils/temperature-type.js +11 -0
  46. package/lib/module/modules/bt-management/utils/temperature-type.js.map +1 -0
  47. package/lib/module/modules/next/bluetooth/index.js +1 -1
  48. package/lib/module/modules/next/bluetooth/index.js.map +1 -1
  49. package/lib/module/modules/next/bluetooth/result-policy.js +8 -1
  50. package/lib/module/modules/next/bluetooth/result-policy.js.map +1 -1
  51. package/lib/module/modules/next/bluetooth/sig-profiles.js +44 -11
  52. package/lib/module/modules/next/bluetooth/sig-profiles.js.map +1 -1
  53. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +2 -0
  54. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  55. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts +11 -0
  57. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts.map +1 -0
  58. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +5 -2
  59. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts +10 -0
  61. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts.map +1 -0
  62. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +2 -0
  63. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/src/modules/bt-management/types/result-policy.d.ts +6 -0
  65. package/lib/typescript/commonjs/src/modules/bt-management/types/result-policy.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/src/modules/bt-management/utils/device-user.d.ts +6 -0
  67. package/lib/typescript/commonjs/src/modules/bt-management/utils/device-user.d.ts.map +1 -0
  68. package/lib/typescript/commonjs/src/modules/bt-management/utils/kpa-to-mmhg.d.ts +4 -0
  69. package/lib/typescript/commonjs/src/modules/bt-management/utils/kpa-to-mmhg.d.ts.map +1 -0
  70. package/lib/typescript/commonjs/src/modules/bt-management/utils/rr-interval.d.ts +4 -0
  71. package/lib/typescript/commonjs/src/modules/bt-management/utils/rr-interval.d.ts.map +1 -0
  72. package/lib/typescript/commonjs/src/modules/bt-management/utils/temperature-type.d.ts +7 -0
  73. package/lib/typescript/commonjs/src/modules/bt-management/utils/temperature-type.d.ts.map +1 -0
  74. package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts +1 -1
  75. package/lib/typescript/commonjs/src/modules/next/bluetooth/index.d.ts.map +1 -1
  76. package/lib/typescript/commonjs/src/modules/next/bluetooth/result-policy.d.ts +6 -1
  77. package/lib/typescript/commonjs/src/modules/next/bluetooth/result-policy.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/src/modules/next/bluetooth/sig-profiles.d.ts.map +1 -1
  79. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +2 -0
  80. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  81. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.d.ts.map +1 -1
  82. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts +11 -0
  83. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.d.ts.map +1 -0
  84. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +5 -2
  85. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -1
  86. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts +10 -0
  87. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.d.ts.map +1 -0
  88. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +2 -0
  89. package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -1
  90. package/lib/typescript/module/src/modules/bt-management/types/result-policy.d.ts +6 -0
  91. package/lib/typescript/module/src/modules/bt-management/types/result-policy.d.ts.map +1 -1
  92. package/lib/typescript/module/src/modules/bt-management/utils/device-user.d.ts +6 -0
  93. package/lib/typescript/module/src/modules/bt-management/utils/device-user.d.ts.map +1 -0
  94. package/lib/typescript/module/src/modules/bt-management/utils/kpa-to-mmhg.d.ts +4 -0
  95. package/lib/typescript/module/src/modules/bt-management/utils/kpa-to-mmhg.d.ts.map +1 -0
  96. package/lib/typescript/module/src/modules/bt-management/utils/rr-interval.d.ts +4 -0
  97. package/lib/typescript/module/src/modules/bt-management/utils/rr-interval.d.ts.map +1 -0
  98. package/lib/typescript/module/src/modules/bt-management/utils/temperature-type.d.ts +7 -0
  99. package/lib/typescript/module/src/modules/bt-management/utils/temperature-type.d.ts.map +1 -0
  100. package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts +1 -1
  101. package/lib/typescript/module/src/modules/next/bluetooth/index.d.ts.map +1 -1
  102. package/lib/typescript/module/src/modules/next/bluetooth/result-policy.d.ts +6 -1
  103. package/lib/typescript/module/src/modules/next/bluetooth/result-policy.d.ts.map +1 -1
  104. package/lib/typescript/module/src/modules/next/bluetooth/sig-profiles.d.ts.map +1 -1
  105. package/package.json +1 -1
@@ -12,6 +12,7 @@ var _deviceVariants = require("../../constants/device-variants.js");
12
12
  var _bluetoothError = require("../../types/bluetooth-error.js");
13
13
  var _clockSync = require("../../types/clock-sync.js");
14
14
  var _deviceStatus = require("../../types/device-status.js");
15
+ var _deviceUser = require("../../utils/device-user.js");
15
16
  var _errorCallbackPayload = require("../../utils/error-callback-payload.js");
16
17
  var _resultIdentity = require("../../utils/result-identity.js");
17
18
  var _supportedMeasurementTypeKeys = require("../../utils/supported-measurement-type-keys.js");
@@ -29,6 +30,9 @@ class BTManagedDevice {
29
30
 
30
31
  connected = false;
31
32
  destroyed = false;
33
+
34
+ /** A policy that picks how results are delivered replaces `oneReadingPerConnection`; a user filter does not. */
35
+
32
36
  resultReportedThisConnection = false;
33
37
  historyTransferActive = false;
34
38
  bondedEventReported = false;
@@ -134,6 +138,7 @@ class BTManagedDevice {
134
138
  this.device = device;
135
139
  this.oneReadingPerConnection = oneReadingPerConnection === true;
136
140
  this.resultPolicy = resultPolicy;
141
+ this.policyPicksDelivery = resultPolicy?.default !== undefined || resultPolicy?.byMeasurement !== undefined;
137
142
  (0, _sentryLogger.sentryLogger)("info", "BT_MANAGER: Creating BTManagedDevice");
138
143
  this.deviceData = {
139
144
  id: device.id,
@@ -186,13 +191,20 @@ class BTManagedDevice {
186
191
  ...data
187
192
  }) => {
188
193
  const measurementTypeKey = data.measurementTypeKey;
194
+ const acceptedMemorySlots = this.resultPolicy?.acceptedMemorySlots;
195
+ if (acceptedMemorySlots && !(0, _deviceUser.isFromAcceptedMemorySlot)(data, acceptedMemorySlots)) {
196
+ (0, _sentryLogger.sentryLogger)("info", "BT_MANAGER: Dropping a reading of another device user", {
197
+ measurementTypeKey
198
+ });
199
+ return;
200
+ }
189
201
  const policy = this.policyFor(measurementTypeKey);
190
202
 
191
203
  // A live value of a kind kept as a series goes to the series; a stored record is reported as it is.
192
204
  if (policy === "series" && onSeriesValueCallback?.(this.deviceData, data)) {
193
205
  return;
194
206
  }
195
- if (this.oneReadingPerConnection && !this.resultPolicy && this.resultReportedThisConnection) {
207
+ if (this.oneReadingPerConnection && !this.policyPicksDelivery && this.resultReportedThisConnection) {
196
208
  return;
197
209
  }
198
210
  if (policy === "first-reading-per-kind-per-connection") {
@@ -1 +1 @@
1
- {"version":3,"names":["_sentryLogger","require","_telemetry","_dailyTotalDay","_builtInMeasurementTypes","_deviceVariants","_bluetoothError","_clockSync","_deviceStatus","_errorCallbackPayload","_resultIdentity","_supportedMeasurementTypeKeys","_btConnectionHandler","_btDataProcessor","_pollingCommandSequencer","BTManagedDevice","connected","destroyed","resultReportedThisConnection","historyTransferActive","bondedEventReported","reportedMeasurementKinds","Set","reportedDailyTotals","historyResultCount","getSupportedMeasurementTypeKeys","declared","supportedMeasurementTypeKeys","mainServices","length","BUILT_IN_MEASUREMENT_TYPES","deviceData","name","reportsBondedEvent","handleSuccessResult","_successResult","_collectedValues","handleMeasurementEnd","policyFor","measurementTypeKey","resultPolicy","byMeasurement","default","reportResult","result","onResult","constructor","device","deviceName","onError","onErrorCallback","onDeviceStatusChanged","onDeviceStatusChangedCallback","onResultCallback","onSeriesValue","onSeriesValueCallback","onConnectionEvent","onConnectionEventCallback","onDeviceDisconnected","onDeviceDisconnectedCallback","oneReadingPerConnection","sentryLogger","id","localName","manufacturerData","sn","measurementTypes","clockSync","clockSyncCapabilityForDevice","variant","findDeviceVariant","String","manufacturer","model","status","addOvokSpanEvent","error","normalized","toBluetoothError","errorCode","code","errorCallbackPayload","caseType","_","data","policy","has","add","day","dailyTotalDay","Date","now","key","recordOvokMetric","kind","progress","current","Object","defineProperty","value","createStableResultId","enumerable","writable","destroy","connectionHandler","dataProcessor","undefined","disconnect","cancelConnection","connectInternal","clear","sequencer","createCommandSequencer","pollingSequencerFor","isHistoryTransfer","BTConnectionHandler","onStatusChanged","DeviceStatus","CONNECTED","bind","DISCONNECTED","event","onDataReceived","uuid","hexValue","processData","onDeviceInfo","info","manufacturerName","serialNumber","onServicesDiscovered","uuids","initialCommands","onCommandSent","armStuckTimeout","armCommandTimeout","isNormalDisconnect","preferredMtu","BTDataProcessor","stuckDataTimeout","onStreamStart","onMeasurementEnd","validatePackage","parsedData","collectedValues","nextCommand","frame","sendCommands","commands","commandTimeoutMs","onCommandTimeout","commandProgress","handleDependentResult","frameReader","connect","Promise","reject","Error","connectionPromise","resolve","finally","exports"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-managed-device.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_sentryLogger","require","_telemetry","_dailyTotalDay","_builtInMeasurementTypes","_deviceVariants","_bluetoothError","_clockSync","_deviceStatus","_deviceUser","_errorCallbackPayload","_resultIdentity","_supportedMeasurementTypeKeys","_btConnectionHandler","_btDataProcessor","_pollingCommandSequencer","BTManagedDevice","connected","destroyed","resultReportedThisConnection","historyTransferActive","bondedEventReported","reportedMeasurementKinds","Set","reportedDailyTotals","historyResultCount","getSupportedMeasurementTypeKeys","declared","supportedMeasurementTypeKeys","mainServices","length","BUILT_IN_MEASUREMENT_TYPES","deviceData","name","reportsBondedEvent","handleSuccessResult","_successResult","_collectedValues","handleMeasurementEnd","policyFor","measurementTypeKey","resultPolicy","byMeasurement","default","reportResult","result","onResult","constructor","device","deviceName","onError","onErrorCallback","onDeviceStatusChanged","onDeviceStatusChangedCallback","onResultCallback","onSeriesValue","onSeriesValueCallback","onConnectionEvent","onConnectionEventCallback","onDeviceDisconnected","onDeviceDisconnectedCallback","oneReadingPerConnection","policyPicksDelivery","undefined","sentryLogger","id","localName","manufacturerData","sn","measurementTypes","clockSync","clockSyncCapabilityForDevice","variant","findDeviceVariant","String","manufacturer","model","status","addOvokSpanEvent","error","normalized","toBluetoothError","errorCode","code","errorCallbackPayload","caseType","_","data","acceptedMemorySlots","isFromAcceptedMemorySlot","policy","has","add","day","dailyTotalDay","Date","now","key","recordOvokMetric","kind","progress","current","Object","defineProperty","value","createStableResultId","enumerable","writable","destroy","connectionHandler","dataProcessor","disconnect","cancelConnection","connectInternal","clear","sequencer","createCommandSequencer","pollingSequencerFor","isHistoryTransfer","BTConnectionHandler","onStatusChanged","DeviceStatus","CONNECTED","bind","DISCONNECTED","event","onDataReceived","uuid","hexValue","processData","onDeviceInfo","info","manufacturerName","serialNumber","onServicesDiscovered","uuids","initialCommands","onCommandSent","armStuckTimeout","armCommandTimeout","isNormalDisconnect","preferredMtu","BTDataProcessor","stuckDataTimeout","onStreamStart","onMeasurementEnd","validatePackage","parsedData","collectedValues","nextCommand","frame","sendCommands","commands","commandTimeoutMs","onCommandTimeout","commandProgress","handleDependentResult","frameReader","connect","Promise","reject","Error","connectionPromise","resolve","finally","exports"],"sourceRoot":"../../../../../../src","sources":["modules/bt-management/services/devices/bt-managed-device.ts"],"mappings":"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","ignoreList":[]}
@@ -4,12 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.bloodPressureStatusFromFrame = void 0;
7
- const byteAt = (frame, index, offset) => {
8
- const value = Number.parseInt(frame[index + offset] ?? "", 16);
9
- return Number.isInteger(value) && value >= 0 && value <= 0xff ? value : undefined;
10
- };
7
+ var _standardGattFrame = require("./standard-gatt.frame.js");
11
8
  const bloodPressureStatusFromFrame = (frame, recordOffset = 0) => {
12
- const flags = byteAt(frame, 0, recordOffset);
9
+ const flags = (0, _standardGattFrame.byteAt)(frame, 0, recordOffset);
13
10
  if (flags === undefined || (flags & 0x10) === 0) {
14
11
  return undefined;
15
12
  }
@@ -23,8 +20,8 @@ const bloodPressureStatusFromFrame = (frame, recordOffset = 0) => {
23
20
  if ((flags & 0x08) !== 0) {
24
21
  cursor += 1;
25
22
  }
26
- const statusLow = byteAt(frame, cursor, recordOffset);
27
- const statusHigh = byteAt(frame, cursor + 1, recordOffset);
23
+ const statusLow = (0, _standardGattFrame.byteAt)(frame, cursor, recordOffset);
24
+ const statusHigh = (0, _standardGattFrame.byteAt)(frame, cursor + 1, recordOffset);
28
25
  return statusLow !== undefined && statusHigh !== undefined ? statusLow | statusHigh << 8 : undefined;
29
26
  };
30
27
  exports.bloodPressureStatusFromFrame = bloodPressureStatusFromFrame;
@@ -1 +1 @@
1
- {"version":3,"names":["byteAt","frame","index","offset","value","Number","parseInt","isInteger","undefined","bloodPressureStatusFromFrame","recordOffset","flags","cursor","statusLow","statusHigh","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.ts"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAGA,CACbC,KAAwB,EACxBC,KAAa,EACbC,MAAc,KACS;EACvB,MAAMC,KAAK,GAAGC,MAAM,CAACC,QAAQ,CAACL,KAAK,CAACC,KAAK,GAAGC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;EAE9D,OAAOE,MAAM,CAACE,SAAS,CAACH,KAAK,CAAC,IAAIA,KAAK,IAAI,CAAC,IAAIA,KAAK,IAAI,IAAI,GACzDA,KAAK,GACLI,SAAS;AACf,CAAC;AAED,MAAMC,4BAA4B,GAAGA,CACnCR,KAAwB,EACxBS,YAAY,GAAG,CAAC,KACO;EACvB,MAAMC,KAAK,GAAGX,MAAM,CAACC,KAAK,EAAE,CAAC,EAAES,YAAY,CAAC;EAE5C,IAAIC,KAAK,KAAKH,SAAS,IAAI,CAACG,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IAC/C,OAAOH,SAAS;EAClB;EAEA,IAAII,MAAM,GAAG,CAAC;EAEd,IAAI,CAACD,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IACxBC,MAAM,IAAI,CAAC;EACb;EAEA,IAAI,CAACD,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IACxBC,MAAM,IAAI,CAAC;EACb;EAEA,IAAI,CAACD,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IACxBC,MAAM,IAAI,CAAC;EACb;EAEA,MAAMC,SAAS,GAAGb,MAAM,CAACC,KAAK,EAAEW,MAAM,EAAEF,YAAY,CAAC;EACrD,MAAMI,UAAU,GAAGd,MAAM,CAACC,KAAK,EAAEW,MAAM,GAAG,CAAC,EAAEF,YAAY,CAAC;EAE1D,OAAOG,SAAS,KAAKL,SAAS,IAAIM,UAAU,KAAKN,SAAS,GACtDK,SAAS,GAAIC,UAAU,IAAI,CAAE,GAC7BN,SAAS;AACf,CAAC;AAACO,OAAA,CAAAN,4BAAA,GAAAA,4BAAA","ignoreList":[]}
1
+ {"version":3,"names":["_standardGattFrame","require","bloodPressureStatusFromFrame","frame","recordOffset","flags","byteAt","undefined","cursor","statusLow","statusHigh","exports"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/standard-gatt/standard-gatt.blood-pressure-status.ts"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEA,MAAMC,4BAA4B,GAAGA,CACnCC,KAAwB,EACxBC,YAAY,GAAG,CAAC,KACO;EACvB,MAAMC,KAAK,GAAG,IAAAC,yBAAM,EAACH,KAAK,EAAE,CAAC,EAAEC,YAAY,CAAC;EAE5C,IAAIC,KAAK,KAAKE,SAAS,IAAI,CAACF,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IAC/C,OAAOE,SAAS;EAClB;EAEA,IAAIC,MAAM,GAAG,CAAC;EAEd,IAAI,CAACH,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IACxBG,MAAM,IAAI,CAAC;EACb;EAEA,IAAI,CAACH,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IACxBG,MAAM,IAAI,CAAC;EACb;EAEA,IAAI,CAACH,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE;IACxBG,MAAM,IAAI,CAAC;EACb;EAEA,MAAMC,SAAS,GAAG,IAAAH,yBAAM,EAACH,KAAK,EAAEK,MAAM,EAAEJ,YAAY,CAAC;EACrD,MAAMM,UAAU,GAAG,IAAAJ,yBAAM,EAACH,KAAK,EAAEK,MAAM,GAAG,CAAC,EAAEJ,YAAY,CAAC;EAE1D,OAAOK,SAAS,KAAKF,SAAS,IAAIG,UAAU,KAAKH,SAAS,GACtDE,SAAS,GAAIC,UAAU,IAAI,CAAE,GAC7BH,SAAS;AACf,CAAC;AAACI,OAAA,CAAAT,4BAAA,GAAAA,4BAAA","ignoreList":[]}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.decorateWeightReading = exports.decorateThermometerReading = exports.decoratePulseOximeterReading = exports.decorateHeartRateReading = void 0;
7
+ var _deviceUser = require("../../../utils/device-user.js");
8
+ var _rrInterval = require("../../../utils/rr-interval.js");
9
+ var _temperatureType = require("../../../utils/temperature-type.js");
10
+ var _standardGattFrame = require("./standard-gatt.frame.js");
11
+ const TEMPERATURE_TIMESTAMP = 0x02;
12
+ const TEMPERATURE_TYPE = 0x04;
13
+ const TEMPERATURE_FIELDS_INDEX = 5;
14
+ const WEIGHT_TIMESTAMP = 0x02;
15
+ const WEIGHT_USER = 0x04;
16
+ const WEIGHT_FIELDS_INDEX = 3;
17
+
18
+ /** The weight a scale sends when the measurement failed. */
19
+ const WEIGHT_UNSUCCESSFUL = 0xffff;
20
+ const PULSE_OXIMETER_TIMESTAMP = 0x01;
21
+ const PULSE_OXIMETER_FIELDS_INDEX = 5;
22
+ const HEART_RATE_UINT16 = 0x01;
23
+ const HEART_RATE_ENERGY_EXPENDED = 0x08;
24
+ const HEART_RATE_RR_INTERVALS = 0x10;
25
+ const HEART_RATE_FLAGS_BYTES = 1;
26
+ const UINT8_BYTES = 1;
27
+ const UINT16_BYTES = 2;
28
+
29
+ /** Where the optional fields start once the fixed ones and the timestamp are accounted for. */
30
+ const afterTimestamp = (flags, timestampFlag, fieldsIndex) => flags & timestampFlag ? fieldsIndex + _standardGattFrame.DATE_TIME_BYTES : fieldsIndex;
31
+ const littleEndian16 = (frame, index, offset) => {
32
+ const low = (0, _standardGattFrame.byteAt)(frame, index, offset);
33
+ const high = (0, _standardGattFrame.byteAt)(frame, index + 1, offset);
34
+ return low === undefined || high === undefined ? undefined : low | high << 8;
35
+ };
36
+
37
+ /** Temperature Measurement 0x2A1C: the device's own timestamp and where on the body it measured. */
38
+ const decorateThermometerReading = (reading, frame, recordOffset = 0) => {
39
+ const flags = frame && (0, _standardGattFrame.byteAt)(frame, 0, recordOffset);
40
+ if (!frame || flags === undefined) {
41
+ return reading;
42
+ }
43
+ const typeCode = flags & TEMPERATURE_TYPE ? (0, _standardGattFrame.byteAt)(frame, afterTimestamp(flags, TEMPERATURE_TIMESTAMP, TEMPERATURE_FIELDS_INDEX), recordOffset) : undefined;
44
+ return (0, _standardGattFrame.withDefinedMetadata)(reading, {
45
+ recordedAt: flags & TEMPERATURE_TIMESTAMP ? (0, _standardGattFrame.dateTimeAt)(frame, TEMPERATURE_FIELDS_INDEX, recordOffset) : undefined,
46
+ temperatureType: typeCode === undefined ? undefined : (0, _temperatureType.temperatureTypeFromCode)(typeCode)
47
+ });
48
+ };
49
+
50
+ /** Weight Measurement 0x2A9D: withholds an unsuccessful weight, adds the timestamp and the device user. */
51
+ exports.decorateThermometerReading = decorateThermometerReading;
52
+ const decorateWeightReading = (reading, frame, recordOffset = 0) => {
53
+ const flags = frame && (0, _standardGattFrame.byteAt)(frame, 0, recordOffset);
54
+ if (!frame || flags === undefined) {
55
+ return reading;
56
+ }
57
+ if (littleEndian16(frame, 1, recordOffset) === WEIGHT_UNSUCCESSFUL) {
58
+ return null;
59
+ }
60
+ const userId = flags & WEIGHT_USER ? (0, _standardGattFrame.byteAt)(frame, afterTimestamp(flags, WEIGHT_TIMESTAMP, WEIGHT_FIELDS_INDEX), recordOffset) : undefined;
61
+ return (0, _standardGattFrame.withDefinedMetadata)(reading, {
62
+ recordedAt: flags & WEIGHT_TIMESTAMP ? (0, _standardGattFrame.dateTimeAt)(frame, WEIGHT_FIELDS_INDEX, recordOffset) : undefined,
63
+ memorySlot: userId === undefined ? undefined : (0, _deviceUser.memorySlotForDeviceUser)(userId)
64
+ });
65
+ };
66
+
67
+ /** PLX Spot-Check Measurement 0x2A5E: the device's own timestamp. */
68
+ exports.decorateWeightReading = decorateWeightReading;
69
+ const decoratePulseOximeterReading = (reading, frame, recordOffset = 0) => {
70
+ const flags = frame && (0, _standardGattFrame.byteAt)(frame, 0, recordOffset);
71
+ if (!frame || flags === undefined || !(flags & PULSE_OXIMETER_TIMESTAMP)) {
72
+ return reading;
73
+ }
74
+ return (0, _standardGattFrame.withDefinedMetadata)(reading, {
75
+ recordedAt: (0, _standardGattFrame.dateTimeAt)(frame, PULSE_OXIMETER_FIELDS_INDEX, recordOffset)
76
+ });
77
+ };
78
+
79
+ /** The RR intervals a Heart Rate Measurement carries, in milliseconds and in the order sent. */
80
+ exports.decoratePulseOximeterReading = decoratePulseOximeterReading;
81
+ const rrIntervalsFromHeartRateFrame = (frame, flags, recordOffset) => {
82
+ const rrIntervals = [];
83
+ let index = HEART_RATE_FLAGS_BYTES + (flags & HEART_RATE_UINT16 ? UINT16_BYTES : UINT8_BYTES) + (flags & HEART_RATE_ENERGY_EXPENDED ? UINT16_BYTES : 0);
84
+ let counts = littleEndian16(frame, index, recordOffset);
85
+ while (counts !== undefined) {
86
+ rrIntervals.push((0, _rrInterval.rrIntervalMilliseconds)(counts));
87
+ index += UINT16_BYTES;
88
+ counts = littleEndian16(frame, index, recordOffset);
89
+ }
90
+ return rrIntervals;
91
+ };
92
+
93
+ /** Heart Rate Measurement 0x2A37: the RR intervals, when the strap sends them. */
94
+ const decorateHeartRateReading = (reading, frame, recordOffset = 0) => {
95
+ const flags = frame && (0, _standardGattFrame.byteAt)(frame, 0, recordOffset);
96
+ if (!frame || flags === undefined || !(flags & HEART_RATE_RR_INTERVALS)) {
97
+ return reading;
98
+ }
99
+ const rrIntervals = rrIntervalsFromHeartRateFrame(frame, flags, recordOffset);
100
+ return rrIntervals.length > 0 ? {
101
+ ...reading,
102
+ rrIntervals
103
+ } : reading;
104
+ };
105
+ exports.decorateHeartRateReading = decorateHeartRateReading;
106
+ //# sourceMappingURL=standard-gatt.decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_deviceUser","require","_rrInterval","_temperatureType","_standardGattFrame","TEMPERATURE_TIMESTAMP","TEMPERATURE_TYPE","TEMPERATURE_FIELDS_INDEX","WEIGHT_TIMESTAMP","WEIGHT_USER","WEIGHT_FIELDS_INDEX","WEIGHT_UNSUCCESSFUL","PULSE_OXIMETER_TIMESTAMP","PULSE_OXIMETER_FIELDS_INDEX","HEART_RATE_UINT16","HEART_RATE_ENERGY_EXPENDED","HEART_RATE_RR_INTERVALS","HEART_RATE_FLAGS_BYTES","UINT8_BYTES","UINT16_BYTES","afterTimestamp","flags","timestampFlag","fieldsIndex","DATE_TIME_BYTES","littleEndian16","frame","index","offset","low","byteAt","high","undefined","decorateThermometerReading","reading","recordOffset","typeCode","withDefinedMetadata","recordedAt","dateTimeAt","temperatureType","temperatureTypeFromCode","exports","decorateWeightReading","userId","memorySlot","memorySlotForDeviceUser","decoratePulseOximeterReading","rrIntervalsFromHeartRateFrame","rrIntervals","counts","push","rrIntervalMilliseconds","decorateHeartRateReading","length"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/standard-gatt/standard-gatt.decorators.ts"],"mappings":"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","ignoreList":[]}
@@ -13,6 +13,8 @@ Object.defineProperty(exports, "standardGlucoseDevice", {
13
13
  exports.standardWeightScaleDevice = exports.standardThermometerDevice = exports.standardPulseOximeterDevice = exports.standardHeartRateDevice = void 0;
14
14
  var _next = require("@ovok/core/next");
15
15
  var _bytesToHex = require("../../../utils/bytes-to-hex.js");
16
+ var _kpaToMmhg = require("../../../utils/kpa-to-mmhg.js");
17
+ var _standardGattDecorators = require("./standard-gatt.decorators.js");
16
18
  var _standardGattGlucose = require("./standard-gatt.glucose.js");
17
19
  var _standardGattProfile = require("./standard-gatt.profile.js");
18
20
  /* eslint-disable max-lines */
@@ -28,12 +30,20 @@ var _standardGattProfile = require("./standard-gatt.profile.js");
28
30
  * every vendor names its hardware differently. A product declares the profile and supplies
29
31
  * the name its own hardware advertises.
30
32
  *
31
- * Values are little-endian, as the specification requires. Only the layouts using each
32
- * catalog's canonical unit are declared: a device reporting kPa, Fahrenheit or pounds needs
33
- * a conversion a declaration cannot express, and leaving those flag values undeclared means
34
- * such a device yields no reading rather than one that is quietly wrong.
33
+ * Values are little-endian, as the specification requires. A device may report in kPa,
34
+ * Fahrenheit or pounds; each field is then declared with the scale and offset that convert
35
+ * it to the catalog's canonical unit.
35
36
  */
36
37
 
38
+ const BLOOD_PRESSURE_KPA = 0x01;
39
+ const BLOOD_PRESSURE_TIMESTAMP = 0x02;
40
+ const BLOOD_PRESSURE_PULSE = 0x04;
41
+
42
+ /** Bits 0-4 are defined: kPa, timestamp, pulse, user id and measurement status. */
43
+ const BLOOD_PRESSURE_FLAGS = Array.from({
44
+ length: 32
45
+ }, (_, flags) => flags);
46
+
37
47
  /**
38
48
  * Blood Pressure Service 0x1810, Blood Pressure Measurement 0x2A35.
39
49
  *
@@ -43,8 +53,8 @@ var _standardGattProfile = require("./standard-gatt.profile.js");
43
53
  * declares the length it needs. A device that reports no pulse still decodes, because the
44
54
  * flags value it sends selects a case that never looks for one.
45
55
  *
46
- * Bit 3 (user id, 0x08) and bit 4 (measurement status, 0x10) follow the pulse, so neither
47
- * moves it. Each shape is declared again with those bits set. Bit 0 (kPa) stays undeclared.
56
+ * Bit 3 (user id) and bit 4 (measurement status) follow the pulse, so neither moves it.
57
+ * Bit 0 says the pressures are in kPa, which is converted to whole mmHg.
48
58
  */
49
59
  /** Bit 2 set, bit 1 clear: the pulse follows the mean pressure. */
50
60
  const pulseAfterMeanPressure = {
@@ -57,35 +67,25 @@ const pulseAfterTimestamp = {
57
67
  fields: [(0, _standardGattProfile.littleEndian)("heartRate", [14, 15], "bpm", "sfloat")],
58
68
  minLengthBytes: 16
59
69
  };
70
+ const pressureInKpa = (name, byteIndexes) => ({
71
+ ...(0, _standardGattProfile.littleEndian)(name, byteIndexes, "mmHg", "sfloat"),
72
+ scale: _kpaToMmhg.KPA_TO_MMHG,
73
+ decimals: 0
74
+ });
75
+ const pressuresInKpa = [pressureInKpa("systolic", [1, 2]), pressureInKpa("diastolic", [3, 4])];
60
76
 
61
77
  /** Declares a Bluetooth SIG blood pressure profile device. */
62
- const standardBloodPressureDevice = params => (0, _standardGattProfile.declareProfile)({
63
- ...params,
64
- decorateReading: (reading, frame, recordOffset) => {
65
- const decorated = (0, _standardGattProfile.decorateBloodPressureReading)(reading, frame, recordOffset);
66
- if (!decorated) {
67
- return null;
68
- }
69
- return params.decorateReading ? params.decorateReading(decorated, frame, recordOffset) : decorated;
70
- }
71
- }, {
78
+ const standardBloodPressureDevice = params => (0, _standardGattProfile.declareProfile)(params, {
72
79
  service: "1810",
73
80
  characteristic: "2a35",
74
81
  minLengthBytes: 7,
75
82
  measurementTypeKey: _next.MeasurementTypeKey.bloodPressure,
76
- /** mmHg. 0x08, 0x10 and 0x18 repeat each shape with bit 3, bit 4, or both. */
77
- selectors: ["00", "08", "10", "18", "02", "0a", "12", "1a", "04", "0c", "14", "1c", "06", "0e", "16", "1e"],
83
+ decorateReading: _standardGattProfile.decorateBloodPressureReading,
84
+ selectors: BLOOD_PRESSURE_FLAGS.map(_bytesToHex.byteToHex),
85
+ /** mmHg; the kPa shapes override it in `fieldsBySelector`. */
78
86
  fields: [(0, _standardGattProfile.littleEndian)("systolic", [1, 2], "mmHg", "sfloat"), (0, _standardGattProfile.littleEndian)("diastolic", [3, 4], "mmHg", "sfloat")],
79
- optionalFields: {
80
- "04": pulseAfterMeanPressure,
81
- "0c": pulseAfterMeanPressure,
82
- "14": pulseAfterMeanPressure,
83
- "1c": pulseAfterMeanPressure,
84
- "06": pulseAfterTimestamp,
85
- "0e": pulseAfterTimestamp,
86
- "16": pulseAfterTimestamp,
87
- "1e": pulseAfterTimestamp
88
- }
87
+ fieldsBySelector: Object.fromEntries(BLOOD_PRESSURE_FLAGS.filter(flags => flags & BLOOD_PRESSURE_KPA).map(flags => [(0, _bytesToHex.byteToHex)(flags), pressuresInKpa])),
88
+ optionalFields: Object.fromEntries(BLOOD_PRESSURE_FLAGS.filter(flags => flags & BLOOD_PRESSURE_PULSE).map(flags => [(0, _bytesToHex.byteToHex)(flags), flags & BLOOD_PRESSURE_TIMESTAMP ? pulseAfterTimestamp : pulseAfterMeanPressure]))
89
89
  });
90
90
 
91
91
  /** Health Thermometer Service 0x1809, Temperature Measurement 0x2A1C. */
@@ -95,6 +95,7 @@ const standardThermometerDevice = params => (0, _standardGattProfile.declareProf
95
95
  characteristic: "2a1c",
96
96
  minLengthBytes: 5,
97
97
  measurementTypeKey: _next.MeasurementTypeKey.temperature,
98
+ decorateReading: _standardGattDecorators.decorateThermometerReading,
98
99
  /** All combinations of Fahrenheit, timestamp and temperature type flags. */
99
100
  selectors: ["00", "02", "04", "06", "01", "03", "05", "07"],
100
101
  fields: [(0, _standardGattProfile.littleEndian)("bodyTemp", [1, 2, 3, 4], "Cel", "float")],
@@ -134,12 +135,14 @@ const WEIGHT_KG_PER_COUNT = 0.005;
134
135
  * Weight Scale Service 0x181D, Weight Measurement 0x2A9D.
135
136
  *
136
137
  * The reading is a scaled integer rather than a float, so the resolution is applied here.
138
+ * A weight of 0xFFFF means the measurement failed, so it yields no reading.
137
139
  */
138
140
  const standardWeightScaleDevice = params => (0, _standardGattProfile.declareProfile)(params, {
139
141
  service: "181d",
140
142
  characteristic: "2a9d",
141
143
  minLengthBytes: 3,
142
144
  measurementTypeKey: _next.MeasurementTypeKey.bodyWeight,
145
+ decorateReading: _standardGattDecorators.decorateWeightReading,
143
146
  /** Unit, timestamp, user-id and BMI/height flags may all follow the value. */
144
147
  selectors: Array.from({
145
148
  length: 16
@@ -165,7 +168,8 @@ const standardWeightScaleDevice = params => (0, _standardGattProfile.declareProf
165
168
  * Pulse Oximeter Service 0x1822, PLX Spot-Check Measurement 0x2A5E.
166
169
  *
167
170
  * Saturation and pulse rate are both required by the catalog, which matches the
168
- * specification: a spot-check measurement always carries both.
171
+ * specification: a spot-check measurement always carries both, at bytes 1-4 whatever the
172
+ * flags say, so every flags value selects the same fields. The optional ones follow them.
169
173
  */
170
174
  exports.standardWeightScaleDevice = standardWeightScaleDevice;
171
175
  const standardPulseOximeterDevice = params => (0, _standardGattProfile.declareProfile)(params, {
@@ -173,7 +177,8 @@ const standardPulseOximeterDevice = params => (0, _standardGattProfile.declarePr
173
177
  characteristic: "2a5e",
174
178
  minLengthBytes: 5,
175
179
  measurementTypeKey: _next.MeasurementTypeKey.bloodOxygenPulseRate,
176
- selectors: ["00"],
180
+ decorateReading: _standardGattDecorators.decoratePulseOximeterReading,
181
+ selectors: ["*"],
177
182
  fields: [(0, _standardGattProfile.littleEndian)("bloodOxygen", [1, 2], "%", "sfloat"), (0, _standardGattProfile.littleEndian)("pulseRate", [3, 4], "bpm", "sfloat")]
178
183
  });
179
184
 
@@ -190,13 +195,15 @@ const UINT16_HEART_RATE_FLAGS = HEART_RATE_FLAGS.filter(flags => (flags & 0x01)
190
195
  * Heart Rate Service 0x180D, Heart Rate Measurement 0x2A37.
191
196
  *
192
197
  * Both heart-rate layouts are declared. A contact-not-detected frame is idle, so it cannot
193
- * become a false reading while the strap is off the body.
198
+ * become a false reading while the strap is off the body. RR intervals, a list of any
199
+ * length, are read from the frame by the decorator and reported as `rrIntervals`.
194
200
  */
195
201
  const standardHeartRateDevice = params => (0, _standardGattProfile.declareProfile)(params, {
196
202
  service: "180d",
197
203
  characteristic: "2a37",
198
204
  minLengthBytes: 2,
199
205
  measurementTypeKey: _next.MeasurementTypeKey.heartRate,
206
+ decorateReading: _standardGattDecorators.decorateHeartRateReading,
200
207
  selectors: HEART_RATE_FLAGS.map(_bytesToHex.byteToHex),
201
208
  fields: [{
202
209
  name: "heartRate",
@@ -1 +1 @@
1
- {"version":3,"names":["_next","require","_bytesToHex","_standardGattGlucose","_standardGattProfile","pulseAfterMeanPressure","fields","littleEndian","minLengthBytes","pulseAfterTimestamp","standardBloodPressureDevice","params","declareProfile","decorateReading","reading","frame","recordOffset","decorated","decorateBloodPressureReading","service","characteristic","measurementTypeKey","MeasurementTypeKey","bloodPressure","selectors","optionalFields","exports","standardThermometerDevice","temperature","fieldsBySelector","scale","offset","decimals","WEIGHT_KG_PER_COUNT","standardWeightScaleDevice","bodyWeight","Array","from","length","_","flags","byteToHex","Object","fromEntries","selector","standardPulseOximeterDevice","bloodOxygenPulseRate","HEART_RATE_FLAGS","filter","UINT16_HEART_RATE_FLAGS","standardHeartRateDevice","heartRate","map","name","byteIndexes","encoding","unit","byteOrder"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_next","require","_bytesToHex","_kpaToMmhg","_standardGattDecorators","_standardGattGlucose","_standardGattProfile","BLOOD_PRESSURE_KPA","BLOOD_PRESSURE_TIMESTAMP","BLOOD_PRESSURE_PULSE","BLOOD_PRESSURE_FLAGS","Array","from","length","_","flags","pulseAfterMeanPressure","fields","littleEndian","minLengthBytes","pulseAfterTimestamp","pressureInKpa","name","byteIndexes","scale","KPA_TO_MMHG","decimals","pressuresInKpa","standardBloodPressureDevice","params","declareProfile","service","characteristic","measurementTypeKey","MeasurementTypeKey","bloodPressure","decorateReading","decorateBloodPressureReading","selectors","map","byteToHex","fieldsBySelector","Object","fromEntries","filter","optionalFields","exports","standardThermometerDevice","temperature","decorateThermometerReading","offset","WEIGHT_KG_PER_COUNT","standardWeightScaleDevice","bodyWeight","decorateWeightReading","selector","standardPulseOximeterDevice","bloodOxygenPulseRate","decoratePulseOximeterReading","HEART_RATE_FLAGS","UINT16_HEART_RATE_FLAGS","standardHeartRateDevice","heartRate","decorateHeartRateReading","encoding","unit","byteOrder"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.ts"],"mappings":";;;;;;;;;;;;;AAEA,IAAAA,KAAA,GAAAC,OAAA;AAIA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,uBAAA,GAAAH,OAAA;AAMA,IAAAI,oBAAA,GAAAJ,OAAA;AACA,IAAAK,oBAAA,GAAAL,OAAA;AAhBA;;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMM,kBAAkB,GAAG,IAAI;AAC/B,MAAMC,wBAAwB,GAAG,IAAI;AACrC,MAAMC,oBAAoB,GAAG,IAAI;;AAEjC;AACA,MAAMC,oBAAoB,GAAGC,KAAK,CAACC,IAAI,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAC,EAAE,CAACC,CAAC,EAAEC,KAAK,KAAKA,KAAK,CAAC;;AAE5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,sBAAsB,GAAG;EAC7BC,MAAM,EAAE,CAAC,IAAAC,iCAAY,EAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;EAC5DC,cAAc,EAAE;AAClB,CAAC;;AAED;AACA,MAAMC,mBAAmB,GAAG;EAC1BH,MAAM,EAAE,CAAC,IAAAC,iCAAY,EAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;EAC9DC,cAAc,EAAE;AAClB,CAAC;AAED,MAAME,aAAa,GAAGA,CACpBC,IAAY,EACZC,WAAqB,MACA;EACrB,GAAG,IAAAL,iCAAY,EAACI,IAAI,EAAEC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC;EACpDC,KAAK,EAAEC,sBAAW;EAClBC,QAAQ,EAAE;AACZ,CAAC,CAAC;AAEF,MAAMC,cAAc,GAAG,CACrBN,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACjCA,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CACnC;;AAED;AACA,MAAMO,2BAA2B,GAC/BC,MAA4B,IAE5B,IAAAC,mCAAc,EAACD,MAAM,EAAE;EACrBE,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,MAAM;EACtBb,cAAc,EAAE,CAAC;EACjBc,kBAAkB,EAAEC,wBAAkB,CAACC,aAAa;EACpDC,eAAe,EAAEC,iDAA4B;EAC7CC,SAAS,EAAE5B,oBAAoB,CAAC6B,GAAG,CAACC,qBAAS,CAAC;EAE9C;EACAvB,MAAM,EAAE,CACN,IAAAC,iCAAY,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAClD,IAAAA,iCAAY,EAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CACpD;EACDuB,gBAAgB,EAAEC,MAAM,CAACC,WAAW,CAClCjC,oBAAoB,CAACkC,MAAM,CAAE7B,KAAK,IAAKA,KAAK,GAAGR,kBAAkB,CAAC,CAACgC,GAAG,CACnExB,KAAK,IAAK,CAAC,IAAAyB,qBAAS,EAACzB,KAAK,CAAC,EAAEY,cAAc,CAC9C,CACF,CAAC;EACDkB,cAAc,EAAEH,MAAM,CAACC,WAAW,CAChCjC,oBAAoB,CAACkC,MAAM,CACxB7B,KAAK,IAAKA,KAAK,GAAGN,oBACrB,CAAC,CAAC8B,GAAG,CAAExB,KAAK,IAAK,CACf,IAAAyB,qBAAS,EAACzB,KAAK,CAAC,EAChBA,KAAK,GAAGP,wBAAwB,GAC5BY,mBAAmB,GACnBJ,sBAAsB,CAC3B,CACH;AACF,CAAC,CAAC;;AAEJ;AAAA8B,OAAA,CAAAlB,2BAAA,GAAAA,2BAAA;AACA,MAAMmB,yBAAyB,GAC7BlB,MAA4B,IAE5B,IAAAC,mCAAc,EAACD,MAAM,EAAE;EACrBE,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,MAAM;EACtBb,cAAc,EAAE,CAAC;EACjBc,kBAAkB,EAAEC,wBAAkB,CAACc,WAAW;EAClDZ,eAAe,EAAEa,kDAA0B;EAE3C;EACAX,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;EAC3DrB,MAAM,EAAE,CAAC,IAAAC,iCAAY,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;EAChEuB,gBAAgB,EAAE;IAChB,IAAI,EAAE,CACJ;MACE,GAAG,IAAAvB,iCAAY,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;MACzDM,KAAK,EAAE,CAAC,GAAG,CAAC;MACZ0B,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC;MAChBxB,QAAQ,EAAE;IACZ,CAAC,CACF;IACD,IAAI,EAAE,CACJ;MACE,GAAG,IAAAR,iCAAY,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;MACzDM,KAAK,EAAE,CAAC,GAAG,CAAC;MACZ0B,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC;MAChBxB,QAAQ,EAAE;IACZ,CAAC,CACF;IACD,IAAI,EAAE,CACJ;MACE,GAAG,IAAAR,iCAAY,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;MACzDM,KAAK,EAAE,CAAC,GAAG,CAAC;MACZ0B,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC;MAChBxB,QAAQ,EAAE;IACZ,CAAC,CACF;IACD,IAAI,EAAE,CACJ;MACE,GAAG,IAAAR,iCAAY,EAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;MACzDM,KAAK,EAAE,CAAC,GAAG,CAAC;MACZ0B,MAAM,EAAE,CAAC,GAAG,GAAG,CAAC;MAChBxB,QAAQ,EAAE;IACZ,CAAC;EAEL;AACF,CAAC,CAAC;;AAEJ;AAAAoB,OAAA,CAAAC,yBAAA,GAAAA,yBAAA;AACA,MAAMI,mBAAmB,GAAG,KAAK;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,yBAAyB,GAC7BvB,MAA4B,IAE5B,IAAAC,mCAAc,EAACD,MAAM,EAAE;EACrBE,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,MAAM;EACtBb,cAAc,EAAE,CAAC;EACjBc,kBAAkB,EAAEC,wBAAkB,CAACmB,UAAU;EACjDjB,eAAe,EAAEkB,6CAAqB;EAEtC;EACAhB,SAAS,EAAE3B,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE;EAAG,CAAC,EAAE,CAACC,CAAC,EAAEC,KAAK,KAAK,IAAAyB,qBAAS,EAACzB,KAAK,CAAC,CAAC;EACrEE,MAAM,EAAE,CACN;IACE,GAAG,IAAAC,iCAAY,EAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC;IACnDM,KAAK,EAAE2B,mBAAmB;IAC1BzB,QAAQ,EAAE;EACZ,CAAC,CACF;EACDe,gBAAgB,EAAEC,MAAM,CAACC,WAAW,CAClChC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAE;EAAG,CAAC,EAAE,CAACC,CAAC,EAAEC,KAAK,KAAK;IACvC,MAAMwC,QAAQ,GAAG,IAAAf,qBAAS,EAACzB,KAAK,CAAC;IAEjC,OAAO,CACLwC,QAAQ,EACR,CACE;MACE,GAAG,IAAArC,iCAAY,EAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC;MACnDM,KAAK,EAAET,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,UAAU,GAAGoC,mBAAmB;MAC1DzB,QAAQ,EAAE;IACZ,CAAC,CACF,CACF;EACH,CAAC,CACH;AACF,CAAC,CAAC;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AANAoB,OAAA,CAAAM,yBAAA,GAAAA,yBAAA;AAOA,MAAMI,2BAA2B,GAC/B3B,MAA4B,IAE5B,IAAAC,mCAAc,EAACD,MAAM,EAAE;EACrBE,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,MAAM;EACtBb,cAAc,EAAE,CAAC;EACjBc,kBAAkB,EAAEC,wBAAkB,CAACuB,oBAAoB;EAC3DrB,eAAe,EAAEsB,oDAA4B;EAC7CpB,SAAS,EAAE,CAAC,GAAG,CAAC;EAChBrB,MAAM,EAAE,CACN,IAAAC,iCAAY,EAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,EAClD,IAAAA,iCAAY,EAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC;AAEtD,CAAC,CAAC;;AAEJ;AAAA4B,OAAA,CAAAU,2BAAA,GAAAA,2BAAA;AACA,MAAMG,gBAAgB,GAAGhD,KAAK,CAACC,IAAI,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAC,EAAE,CAACC,CAAC,EAAEC,KAAK,KAAKA,KAAK,CAAC,CAAC6B,MAAM,CAC5E7B,KAAK,IAAK,CAACA,KAAK,GAAG,IAAI,MAAM,IAChC,CAAC;;AAED;AACA,MAAM6C,uBAAuB,GAAGD,gBAAgB,CAACf,MAAM,CACpD7B,KAAK,IAAK,CAACA,KAAK,GAAG,IAAI,MAAM,IAChC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM8C,uBAAuB,GAC3BhC,MAA4B,IAE5B,IAAAC,mCAAc,EAACD,MAAM,EAAE;EACrBE,OAAO,EAAE,MAAM;EACfC,cAAc,EAAE,MAAM;EACtBb,cAAc,EAAE,CAAC;EACjBc,kBAAkB,EAAEC,wBAAkB,CAAC4B,SAAS;EAChD1B,eAAe,EAAE2B,gDAAwB;EACzCzB,SAAS,EAAEqB,gBAAgB,CAACpB,GAAG,CAACC,qBAAS,CAAC;EAC1CvB,MAAM,EAAE,CACN;IAAEK,IAAI,EAAE,WAAW;IAAEC,WAAW,EAAE,CAAC,CAAC,CAAC;IAAEyC,QAAQ,EAAE,MAAM;IAAEC,IAAI,EAAE;EAAM,CAAC,CACvE;EACDxB,gBAAgB,EAAEC,MAAM,CAACC,WAAW,CAClCiB,uBAAuB,CAACrB,GAAG,CAAExB,KAAK,IAAK,CACnC,IAAAyB,qBAAS,EAACzB,KAAK,CAAC,EAChB,CACE;IACEO,IAAI,EAAE,WAAW;IACjBC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnB2C,SAAS,EAAE,QAAiB;IAC5BF,QAAQ,EAAE,MAAe;IACzBC,IAAI,EAAE;EACR,CAAC,CACF,CACF,CACL,CAAC;EACDpB,cAAc,EAAEH,MAAM,CAACC,WAAW,CAChCiB,uBAAuB,CAACrB,GAAG,CAAExB,KAAK,IAAK,CAAC,IAAAyB,qBAAS,EAACzB,KAAK,CAAC,EAAE;IACtDE,MAAM,EAAE,EAAE;IACVE,cAAc,EAAE;EAClB,CAAC,CAAC,CACN;AACF,CAAC,CAAC;AAAC2B,OAAA,CAAAe,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.withDefinedMetadata = exports.dateTimeAt = exports.byteAt = exports.DATE_TIME_BYTES = void 0;
7
+ /** The Bluetooth SIG Date Time characteristic is seven bytes long. */
8
+ const DATE_TIME_BYTES = exports.DATE_TIME_BYTES = 7;
9
+
10
+ /** The byte at `index` of a record that starts at `offset`; undefined when the frame ends first. */
11
+ const byteAt = (frame, index, offset) => {
12
+ const value = Number.parseInt(frame[index + offset] ?? "", 16);
13
+ return Number.isInteger(value) && value >= 0 && value <= 0xff ? value : undefined;
14
+ };
15
+
16
+ /** Reads a SIG Date Time at `index` as a phone-local date; undefined for missing or impossible fields. */
17
+ exports.byteAt = byteAt;
18
+ const dateTimeAt = (frame, index, offset = 0) => {
19
+ const yearLow = byteAt(frame, index, offset);
20
+ const yearHigh = byteAt(frame, index + 1, offset);
21
+ const month = byteAt(frame, index + 2, offset);
22
+ const day = byteAt(frame, index + 3, offset);
23
+ const hour = byteAt(frame, index + 4, offset);
24
+ const minute = byteAt(frame, index + 5, offset);
25
+ const second = byteAt(frame, index + 6, offset);
26
+ if (yearLow === undefined || yearHigh === undefined || month === undefined || day === undefined || hour === undefined || minute === undefined || second === undefined) {
27
+ return undefined;
28
+ }
29
+ const year = yearLow | yearHigh << 8;
30
+ const date = new Date(year, month - 1, day, hour, minute, second);
31
+ return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day && date.getHours() === hour && date.getMinutes() === minute && date.getSeconds() === second ? date : undefined;
32
+ };
33
+
34
+ /** `reading` plus each of `metadata` that has a value. */
35
+ exports.dateTimeAt = dateTimeAt;
36
+ const withDefinedMetadata = (reading, metadata) => ({
37
+ ...reading,
38
+ ...Object.fromEntries(Object.entries(metadata).filter(([, value]) => value !== undefined))
39
+ });
40
+ exports.withDefinedMetadata = withDefinedMetadata;
41
+ //# sourceMappingURL=standard-gatt.frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DATE_TIME_BYTES","exports","byteAt","frame","index","offset","value","Number","parseInt","isInteger","undefined","dateTimeAt","yearLow","yearHigh","month","day","hour","minute","second","year","date","Date","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","withDefinedMetadata","reading","metadata","Object","fromEntries","entries","filter"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/standard-gatt/standard-gatt.frame.ts"],"mappings":";;;;;;AAAA;AACA,MAAMA,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,CAAC;;AAEzB;AACA,MAAME,MAAM,GAAGA,CACbC,KAAwB,EACxBC,KAAa,EACbC,MAAc,KACS;EACvB,MAAMC,KAAK,GAAGC,MAAM,CAACC,QAAQ,CAACL,KAAK,CAACC,KAAK,GAAGC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;EAE9D,OAAOE,MAAM,CAACE,SAAS,CAACH,KAAK,CAAC,IAAIA,KAAK,IAAI,CAAC,IAAIA,KAAK,IAAI,IAAI,GACzDA,KAAK,GACLI,SAAS;AACf,CAAC;;AAED;AAAAT,OAAA,CAAAC,MAAA,GAAAA,MAAA;AACA,MAAMS,UAAU,GAAGA,CACjBR,KAAwB,EACxBC,KAAa,EACbC,MAAM,GAAG,CAAC,KACW;EACrB,MAAMO,OAAO,GAAGV,MAAM,CAACC,KAAK,EAAEC,KAAK,EAAEC,MAAM,CAAC;EAC5C,MAAMQ,QAAQ,GAAGX,MAAM,CAACC,KAAK,EAAEC,KAAK,GAAG,CAAC,EAAEC,MAAM,CAAC;EACjD,MAAMS,KAAK,GAAGZ,MAAM,CAACC,KAAK,EAAEC,KAAK,GAAG,CAAC,EAAEC,MAAM,CAAC;EAC9C,MAAMU,GAAG,GAAGb,MAAM,CAACC,KAAK,EAAEC,KAAK,GAAG,CAAC,EAAEC,MAAM,CAAC;EAC5C,MAAMW,IAAI,GAAGd,MAAM,CAACC,KAAK,EAAEC,KAAK,GAAG,CAAC,EAAEC,MAAM,CAAC;EAC7C,MAAMY,MAAM,GAAGf,MAAM,CAACC,KAAK,EAAEC,KAAK,GAAG,CAAC,EAAEC,MAAM,CAAC;EAC/C,MAAMa,MAAM,GAAGhB,MAAM,CAACC,KAAK,EAAEC,KAAK,GAAG,CAAC,EAAEC,MAAM,CAAC;EAE/C,IACEO,OAAO,KAAKF,SAAS,IACrBG,QAAQ,KAAKH,SAAS,IACtBI,KAAK,KAAKJ,SAAS,IACnBK,GAAG,KAAKL,SAAS,IACjBM,IAAI,KAAKN,SAAS,IAClBO,MAAM,KAAKP,SAAS,IACpBQ,MAAM,KAAKR,SAAS,EACpB;IACA,OAAOA,SAAS;EAClB;EAEA,MAAMS,IAAI,GAAGP,OAAO,GAAIC,QAAQ,IAAI,CAAE;EACtC,MAAMO,IAAI,GAAG,IAAIC,IAAI,CAACF,IAAI,EAAEL,KAAK,GAAG,CAAC,EAAEC,GAAG,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,CAAC;EAEjE,OAAOE,IAAI,CAACE,WAAW,CAAC,CAAC,KAAKH,IAAI,IAChCC,IAAI,CAACG,QAAQ,CAAC,CAAC,KAAKT,KAAK,GAAG,CAAC,IAC7BM,IAAI,CAACI,OAAO,CAAC,CAAC,KAAKT,GAAG,IACtBK,IAAI,CAACK,QAAQ,CAAC,CAAC,KAAKT,IAAI,IACxBI,IAAI,CAACM,UAAU,CAAC,CAAC,KAAKT,MAAM,IAC5BG,IAAI,CAACO,UAAU,CAAC,CAAC,KAAKT,MAAM,GAC1BE,IAAI,GACJV,SAAS;AACf,CAAC;;AAED;AAAAT,OAAA,CAAAU,UAAA,GAAAA,UAAA;AACA,MAAMiB,mBAAmB,GAAGA,CAC1BC,OAAU,EACVC,QAA2C,MACpC;EACP,GAAGD,OAAO;EACV,GAAGE,MAAM,CAACC,WAAW,CACnBD,MAAM,CAACE,OAAO,CAACH,QAAQ,CAAC,CAACI,MAAM,CAAC,CAAC,GAAG5B,KAAK,CAAC,KAAKA,KAAK,KAAKI,SAAS,CACpE;AACF,CAAC,CAAC;AAACT,OAAA,CAAA2B,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -11,11 +11,24 @@ Object.defineProperty(exports, "bloodPressureStatusFromFrame", {
11
11
  });
12
12
  exports.recordedAtFromBloodPressureFrame = exports.littleEndian = exports.decorateBloodPressureReading = exports.declareProfile = void 0;
13
13
  var _bloodPressureStates = require("../../../types/blood-pressure-states.js");
14
+ var _deviceUser = require("../../../utils/device-user.js");
14
15
  var _sigUuid = require("../../../utils/sig-uuid.js");
15
16
  var _defineCustomDevice = require("../../custom/define-custom-device.js");
16
17
  var _standardGattBloodPressureStatus = require("./standard-gatt.blood-pressure-status.js");
18
+ var _standardGattFrame = require("./standard-gatt.frame.js");
17
19
  /** Milliseconds a spot-check device may take to produce its reading. */
18
20
  const SPOT_CHECK_TIMEOUT_MS = 60_000;
21
+ /** Runs `first`, then `second` on what it returns; either may withhold the reading. */
22
+ const chainDecorators = (first, second) => {
23
+ if (!first || !second) {
24
+ return first ?? second;
25
+ }
26
+ return (reading, frame, recordOffset) => {
27
+ const decorated = first(reading, frame, recordOffset);
28
+ return decorated && second(decorated, frame, recordOffset);
29
+ };
30
+ };
31
+
19
32
  /**
20
33
  * The flags byte selects the case, because it decides which optional fields are present and
21
34
  * therefore where the later ones sit. Fields common to every shape are declared once; a
@@ -52,7 +65,7 @@ const declareProfile = (params, profile) => (0, _defineCustomDevice.defineCustom
52
65
  }]
53
66
  }]
54
67
  }, {
55
- decorateReading: params.decorateReading
68
+ decorateReading: chainDecorators(profile.decorateReading, params.decorateReading)
56
69
  });
57
70
  exports.declareProfile = declareProfile;
58
71
  const littleEndian = (name, byteIndexes, unit, encoding) => ({
@@ -62,28 +75,12 @@ const littleEndian = (name, byteIndexes, unit, encoding) => ({
62
75
  encoding,
63
76
  unit
64
77
  });
65
- exports.littleEndian = littleEndian;
66
- const byteAt = (frame, index, offset) => {
67
- const value = Number.parseInt(frame[index + offset] ?? "", 16);
68
- return Number.isInteger(value) && value >= 0 && value <= 0xff ? value : undefined;
69
- };
70
78
 
71
79
  /** Reads the SIG blood-pressure timestamp as a phone-local date. */
80
+ exports.littleEndian = littleEndian;
72
81
  const recordedAtFromBloodPressureFrame = (frame, offset = 0) => {
73
- const flags = byteAt(frame, 0, offset);
74
- const yearLow = byteAt(frame, 7, offset);
75
- const yearHigh = byteAt(frame, 8, offset);
76
- const month = byteAt(frame, 9, offset);
77
- const day = byteAt(frame, 10, offset);
78
- const hour = byteAt(frame, 11, offset);
79
- const minute = byteAt(frame, 12, offset);
80
- const second = byteAt(frame, 13, offset);
81
- if (flags === undefined || (flags & 0x02) === 0 || yearLow === undefined || yearHigh === undefined || month === undefined || day === undefined || hour === undefined || minute === undefined || second === undefined) {
82
- return undefined;
83
- }
84
- const year = yearLow | yearHigh << 8;
85
- const recordedAt = new Date(year, month - 1, day, hour, minute, second);
86
- return recordedAt.getFullYear() === year && recordedAt.getMonth() === month - 1 && recordedAt.getDate() === day && recordedAt.getHours() === hour && recordedAt.getMinutes() === minute && recordedAt.getSeconds() === second ? recordedAt : undefined;
82
+ const flags = (0, _standardGattFrame.byteAt)(frame, 0, offset);
83
+ return flags !== undefined && (flags & 0x02) !== 0 ? (0, _standardGattFrame.dateTimeAt)(frame, 7, offset) : undefined;
87
84
  };
88
85
  exports.recordedAtFromBloodPressureFrame = recordedAtFromBloodPressureFrame;
89
86
  const decorateBloodPressureReading = (reading, frame, recordOffset) => {
@@ -91,7 +88,7 @@ const decorateBloodPressureReading = (reading, frame, recordOffset) => {
91
88
  return reading;
92
89
  }
93
90
  const offset = recordOffset ?? 0;
94
- const flags = byteAt(frame, 0, offset);
91
+ const flags = (0, _standardGattFrame.byteAt)(frame, 0, offset);
95
92
  const recordedAt = recordedAtFromBloodPressureFrame(frame, offset);
96
93
  if (flags === undefined) {
97
94
  return recordedAt ? {
@@ -110,9 +107,10 @@ const decorateBloodPressureReading = (reading, frame, recordOffset) => {
110
107
  recordedAt
111
108
  } : {};
112
109
  if ((flags & 0x08) !== 0) {
113
- const userId = byteAt(frame, cursor, offset);
114
- if (userId === 0 || userId === 1) {
115
- metadata.memorySlot = userId + 1;
110
+ const userId = (0, _standardGattFrame.byteAt)(frame, cursor, offset);
111
+ const memorySlot = userId === undefined ? undefined : (0, _deviceUser.memorySlotForDeviceUser)(userId);
112
+ if (memorySlot !== undefined) {
113
+ metadata.memorySlot = memorySlot;
116
114
  }
117
115
  cursor += 1;
118
116
  }