@ovok/native 0.4.6 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js +3 -1
- package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
- package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js +1 -1
- package/lib/commonjs/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
- package/lib/commonjs/modules/bt-management/index.js +220 -0
- package/lib/commonjs/modules/bt-management/index.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-case-fields.js +49 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-case-fields.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-case-shape.js +52 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-case-shape.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-case.js +53 -41
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-case.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-field.js +3 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-field.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-frame.js +48 -2
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-frame.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js +98 -0
- package/lib/commonjs/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/custom/define-custom-device.js +24 -1
- package/lib/commonjs/modules/bt-management/services/custom/define-custom-device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/device-creator.js +19 -8
- package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj.thermometers.js +85 -0
- package/lib/commonjs/modules/bt-management/services/devices/aoj/aoj.thermometers.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +8 -74
- package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-command-writer.js +155 -0
- package/lib/commonjs/modules/bt-management/services/devices/bt-command-writer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js +9 -49
- package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +17 -6
- package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +21 -14
- package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js +55 -0
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js +82 -29
- package/lib/commonjs/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/frame-parser.js +2 -1
- package/lib/commonjs/modules/bt-management/services/devices/frame-parser.js.map +1 -1
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.command-builder.js +48 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.command-builder.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.commands.js +37 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.commands.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-info.js +83 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-info.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js +26 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-names.js +36 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-names.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +155 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame-reader.js +98 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame-reader.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame.js +29 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.frame.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.identity-gate.js +103 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.identity-gate.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js +32 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.response-type.js +64 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.response-type.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js +143 -0
- package/lib/commonjs/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/polling-command-sequencer.js +38 -0
- package/lib/commonjs/modules/bt-management/services/devices/polling-command-sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/sentinel-frame-reader.js +84 -0
- package/lib/commonjs/modules/bt-management/services/devices/sentinel-frame-reader.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +130 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +55 -0
- package/lib/commonjs/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js +43 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js +113 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js +120 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +92 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js +64 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +94 -0
- package/lib/commonjs/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +124 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js +113 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.lepod.js +117 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.lepod.js.map +1 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.oximeters.js +82 -0
- package/lib/commonjs/modules/bt-management/services/devices/viatom/viatom.oximeters.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/command-sequencer.js +6 -0
- package/lib/commonjs/modules/bt-management/types/command-sequencer.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/custom-checksum-algorithm.js +2 -0
- package/lib/commonjs/modules/bt-management/types/custom-checksum-algorithm.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/custom-checksum-spec.js +6 -0
- package/lib/commonjs/modules/bt-management/types/custom-checksum-spec.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/custom-lepu-spec.js +2 -0
- package/lib/commonjs/modules/bt-management/types/custom-lepu-spec.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/custom-measurement-spec.js +6 -0
- package/lib/commonjs/modules/bt-management/types/custom-measurement-spec.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/device-command.js +2 -0
- package/lib/commonjs/modules/bt-management/types/device-command.js.map +1 -0
- package/lib/commonjs/modules/bt-management/types/integrated-devices.js +2 -0
- package/lib/commonjs/modules/bt-management/types/integrated-devices.js.map +1 -1
- package/lib/commonjs/modules/bt-management/types/measurement-group.js +6 -0
- package/lib/commonjs/modules/bt-management/types/measurement-group.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/calculate-checksum.js +49 -0
- package/lib/commonjs/modules/bt-management/utils/calculate-checksum.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/create-custom-field-parser.js +21 -0
- package/lib/commonjs/modules/bt-management/utils/create-custom-field-parser.js.map +1 -1
- package/lib/commonjs/modules/bt-management/utils/create-frame-validator.js +9 -0
- package/lib/commonjs/modules/bt-management/utils/create-frame-validator.js.map +1 -1
- package/lib/commonjs/modules/bt-management/utils/hex-to-bytes.js +19 -0
- package/lib/commonjs/modules/bt-management/utils/hex-to-bytes.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/le-32-to-bytes.js +13 -0
- package/lib/commonjs/modules/bt-management/utils/le-32-to-bytes.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/parse-measurement.js +10 -7
- package/lib/commonjs/modules/bt-management/utils/parse-measurement.js.map +1 -1
- package/lib/commonjs/modules/bt-management/utils/reject-custom-reading.js +34 -0
- package/lib/commonjs/modules/bt-management/utils/reject-custom-reading.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/summarise-measurement-for-log.js +22 -0
- package/lib/commonjs/modules/bt-management/utils/summarise-measurement-for-log.js.map +1 -0
- package/lib/commonjs/modules/bt-management/utils/supported-measurement-type-keys.js +18 -0
- package/lib/commonjs/modules/bt-management/utils/supported-measurement-type-keys.js.map +1 -0
- package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js +3 -1
- package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
- package/lib/module/modules/bt-management/constants/integrated-devices-map.js +1 -1
- package/lib/module/modules/bt-management/constants/integrated-devices-map.js.map +1 -1
- package/lib/module/modules/bt-management/index.js +20 -0
- package/lib/module/modules/bt-management/index.js.map +1 -1
- package/lib/module/modules/bt-management/services/custom/compile-case-fields.js +44 -0
- package/lib/module/modules/bt-management/services/custom/compile-case-fields.js.map +1 -0
- package/lib/module/modules/bt-management/services/custom/compile-case-shape.js +48 -0
- package/lib/module/modules/bt-management/services/custom/compile-case-shape.js.map +1 -0
- package/lib/module/modules/bt-management/services/custom/compile-custom-case.js +53 -41
- package/lib/module/modules/bt-management/services/custom/compile-custom-case.js.map +1 -1
- package/lib/module/modules/bt-management/services/custom/compile-custom-field.js +3 -0
- package/lib/module/modules/bt-management/services/custom/compile-custom-field.js.map +1 -1
- package/lib/module/modules/bt-management/services/custom/compile-custom-frame.js +48 -2
- package/lib/module/modules/bt-management/services/custom/compile-custom-frame.js.map +1 -1
- package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js +93 -0
- package/lib/module/modules/bt-management/services/custom/compile-custom-lepu.js.map +1 -0
- package/lib/module/modules/bt-management/services/custom/define-custom-device.js +24 -1
- package/lib/module/modules/bt-management/services/custom/define-custom-device.js.map +1 -1
- package/lib/module/modules/bt-management/services/device-creator.js +20 -8
- package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/aoj/aoj.thermometers.js +81 -0
- package/lib/module/modules/bt-management/services/devices/aoj/aoj.thermometers.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js +8 -73
- package/lib/module/modules/bt-management/services/devices/bp2/bp2.frame-reader.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bt-command-writer.js +150 -0
- package/lib/module/modules/bt-management/services/devices/bt-command-writer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js +9 -49
- package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +17 -6
- package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +21 -14
- package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js +51 -0
- package/lib/module/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.js +82 -29
- package/lib/module/modules/bt-management/services/devices/custom/custom.device.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/frame-parser.js +2 -1
- package/lib/module/modules/bt-management/services/devices/frame-parser.js.map +1 -1
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.command-builder.js +43 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.command-builder.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.commands.js +33 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.commands.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-info.js +79 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-info.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js +22 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.device-names.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-names.js +32 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-names.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js +150 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.file-transfer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame-reader.js +93 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame-reader.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame.js +24 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.frame.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.identity-gate.js +98 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.identity-gate.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js +27 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.name-match.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.response-type.js +59 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.response-type.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js +140 -0
- package/lib/module/modules/bt-management/services/devices/lepu/lepu.transports.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/polling-command-sequencer.js +34 -0
- package/lib/module/modules/bt-management/services/devices/polling-command-sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/sentinel-frame-reader.js +79 -0
- package/lib/module/modules/bt-management/services/devices/sentinel-frame-reader.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js +123 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js +50 -0
- package/lib/module/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js +38 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.bp-monitors.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js +108 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js +116 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js +87 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-device.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js +60 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-samples.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js +89 -0
- package/lib/module/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js +118 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.bp-monitors.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js +108 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.lepod.js +114 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.lepod.js.map +1 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.oximeters.js +79 -0
- package/lib/module/modules/bt-management/services/devices/viatom/viatom.oximeters.js.map +1 -0
- package/lib/module/modules/bt-management/types/command-sequencer.js +4 -0
- package/lib/module/modules/bt-management/types/command-sequencer.js.map +1 -0
- package/lib/module/modules/bt-management/types/custom-checksum-algorithm.js +2 -0
- package/lib/module/modules/bt-management/types/custom-checksum-algorithm.js.map +1 -0
- package/lib/module/modules/bt-management/types/custom-checksum-spec.js +4 -0
- package/lib/module/modules/bt-management/types/custom-checksum-spec.js.map +1 -0
- package/lib/module/modules/bt-management/types/custom-device-definition.js.map +1 -1
- package/lib/module/modules/bt-management/types/custom-lepu-spec.js +2 -0
- package/lib/module/modules/bt-management/types/custom-lepu-spec.js.map +1 -0
- package/lib/module/modules/bt-management/types/custom-measurement-spec.js +4 -0
- package/lib/module/modules/bt-management/types/custom-measurement-spec.js.map +1 -0
- package/lib/module/modules/bt-management/types/device-command.js +2 -0
- package/lib/module/modules/bt-management/types/device-command.js.map +1 -0
- package/lib/module/modules/bt-management/types/device-measurement-map.js +3 -3
- package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
- package/lib/module/modules/bt-management/types/integrated-devices.js +2 -0
- package/lib/module/modules/bt-management/types/integrated-devices.js.map +1 -1
- package/lib/module/modules/bt-management/types/measurement-group.js +4 -0
- package/lib/module/modules/bt-management/types/measurement-group.js.map +1 -0
- package/lib/module/modules/bt-management/utils/calculate-checksum.js +44 -0
- package/lib/module/modules/bt-management/utils/calculate-checksum.js.map +1 -0
- package/lib/module/modules/bt-management/utils/create-custom-field-parser.js +21 -0
- package/lib/module/modules/bt-management/utils/create-custom-field-parser.js.map +1 -1
- package/lib/module/modules/bt-management/utils/create-frame-validator.js +9 -0
- package/lib/module/modules/bt-management/utils/create-frame-validator.js.map +1 -1
- package/lib/module/modules/bt-management/utils/hex-to-bytes.js +14 -0
- package/lib/module/modules/bt-management/utils/hex-to-bytes.js.map +1 -0
- package/lib/module/modules/bt-management/utils/le-32-to-bytes.js +8 -0
- package/lib/module/modules/bt-management/utils/le-32-to-bytes.js.map +1 -0
- package/lib/module/modules/bt-management/utils/parse-measurement.js +10 -7
- package/lib/module/modules/bt-management/utils/parse-measurement.js.map +1 -1
- package/lib/module/modules/bt-management/utils/reject-custom-reading.js +29 -0
- package/lib/module/modules/bt-management/utils/reject-custom-reading.js.map +1 -0
- package/lib/module/modules/bt-management/utils/summarise-measurement-for-log.js +17 -0
- package/lib/module/modules/bt-management/utils/summarise-measurement-for-log.js.map +1 -0
- package/lib/module/modules/bt-management/utils/supported-measurement-type-keys.js +13 -0
- package/lib/module/modules/bt-management/utils/supported-measurement-type-keys.js.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +20 -0
- package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-fields.d.ts +13 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-fields.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-shape.d.ts +19 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-case-shape.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-case.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-field.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-frame.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts +11 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/custom/define-custom-device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts +24 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +5 -8
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-command-writer.d.ts +74 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-command-writer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +6 -4
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts +20 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts +12 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts +32 -2
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts +24 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts +32 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts +27 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +20 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts +14 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +75 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts +28 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts +12 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts +81 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts +17 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts +33 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +85 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts +27 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts +52 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +53 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +45 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts +18 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts +19 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts +45 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts +39 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +35 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts +44 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts +32 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts +25 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts +39 -0
- package/lib/typescript/commonjs/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts +26 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-case-spec.d.ts +43 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-case-spec.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-algorithm.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-algorithm.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-spec.d.ts +23 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-checksum-spec.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-definition.d.ts +5 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-definition.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-spec.d.ts +12 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-device-spec.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-field-encoding.d.ts +7 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-field-encoding.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-frame-spec.d.ts +8 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-frame-spec.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts +44 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-measurement-spec.d.ts +9 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/custom-measurement-spec.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/dependent-result-handler-params.d.ts +7 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/dependent-result-handler-params.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-command.d.ts +27 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-command.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts +3 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/types/measurement-group.d.ts +14 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/measurement-group.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/parsing-case.d.ts +17 -0
- package/lib/typescript/commonjs/src/modules/bt-management/types/parsing-case.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-checksum.d.ts +13 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/calculate-checksum.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/create-custom-field-parser.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/create-frame-validator.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/hex-to-bytes.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/hex-to-bytes.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/le-32-to-bytes.d.ts +3 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/le-32-to-bytes.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/parse-measurement.d.ts +4 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/parse-measurement.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/bt-management/utils/reject-custom-reading.d.ts +15 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/reject-custom-reading.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts +9 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/constants/integrated-devices-map.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/index.d.ts +20 -0
- package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-fields.d.ts +13 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-fields.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-shape.d.ts +19 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-case-shape.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-case.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-field.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-frame.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts +11 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/compile-custom-lepu.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/custom/define-custom-device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts +24 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/aoj/aoj.thermometers.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts +5 -8
- package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.frame-reader.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-command-writer.d.ts +74 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-command-writer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts +6 -4
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts +20 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-data-processor.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts +12 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts +30 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts +32 -2
- package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom.device.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/frame-parser.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts +24 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.command-builder.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts +32 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.commands.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts +27 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-info.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts +20 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.device-names.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts +14 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-names.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts +75 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.file-transfer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts +28 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame-reader.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts +12 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.frame.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts +81 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.identity-gate.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts +17 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.name-match.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts +33 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.response-type.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts +85 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/lepu/lepu.transports.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts +27 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/polling-command-sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts +52 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/sentinel-frame-reader.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts +53 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.devices.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts +45 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/standard-gatt/standard-gatt.profile.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts +18 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.bp-monitors.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts +19 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts +45 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts +30 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-device.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts +39 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-samples.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts +35 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/veroval/veroval.ecg-transfer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts +44 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.bp-monitors.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts +32 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.ecg-recorders.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts +25 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.lepod.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts +39 -0
- package/lib/typescript/module/src/modules/bt-management/services/devices/viatom/viatom.oximeters.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts +26 -0
- package/lib/typescript/module/src/modules/bt-management/types/command-sequencer.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-case-spec.d.ts +43 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-case-spec.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-algorithm.d.ts +10 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-algorithm.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-spec.d.ts +23 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-checksum-spec.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-definition.d.ts +5 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-definition.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-spec.d.ts +12 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-device-spec.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-field-encoding.d.ts +7 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-field-encoding.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-frame-spec.d.ts +8 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-frame-spec.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts +44 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-lepu-spec.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-measurement-spec.d.ts +9 -0
- package/lib/typescript/module/src/modules/bt-management/types/custom-measurement-spec.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/dependent-result-handler-params.d.ts +7 -0
- package/lib/typescript/module/src/modules/bt-management/types/dependent-result-handler-params.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/device-command.d.ts +27 -0
- package/lib/typescript/module/src/modules/bt-management/types/device-command.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +2 -0
- package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts +3 -1
- package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/types/measurement-group.d.ts +14 -0
- package/lib/typescript/module/src/modules/bt-management/types/measurement-group.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/types/parsing-case.d.ts +17 -0
- package/lib/typescript/module/src/modules/bt-management/types/parsing-case.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/calculate-checksum.d.ts +13 -0
- package/lib/typescript/module/src/modules/bt-management/utils/calculate-checksum.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/create-custom-field-parser.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/create-frame-validator.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/hex-to-bytes.d.ts +10 -0
- package/lib/typescript/module/src/modules/bt-management/utils/hex-to-bytes.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/le-32-to-bytes.d.ts +3 -0
- package/lib/typescript/module/src/modules/bt-management/utils/le-32-to-bytes.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/parse-measurement.d.ts +4 -1
- package/lib/typescript/module/src/modules/bt-management/utils/parse-measurement.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/bt-management/utils/reject-custom-reading.d.ts +15 -0
- package/lib/typescript/module/src/modules/bt-management/utils/reject-custom-reading.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts +9 -0
- package/lib/typescript/module/src/modules/bt-management/utils/summarise-measurement-for-log.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts +10 -0
- package/lib/typescript/module/src/modules/bt-management/utils/supported-measurement-type-keys.d.ts.map +1 -0
- package/package.json +1 -1
package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core";
|
|
4
|
+
import { defineCustomDevice } from "../../custom/define-custom-device.js";
|
|
5
|
+
import { CustomDevice } from "../custom/custom.device.js";
|
|
6
|
+
import { SentinelFrameReader } from "../sentinel-frame-reader.js";
|
|
7
|
+
import { VerovalDuoControlSequencer } from "./veroval.duo-control-sequencer.js";
|
|
8
|
+
const SERVICE = "5d4b8aa6-a26a-4a1b-99f5-cd4473c786e3";
|
|
9
|
+
const NOTIFY = "5d4b8aa6-a26a-4a1b-99f5-cd4473c786e4";
|
|
10
|
+
const WRITE = "5d4b8aa6-a26a-4a1b-99f5-cd4473c786e5";
|
|
11
|
+
const STX = "02";
|
|
12
|
+
const ETX = "03";
|
|
13
|
+
const ACK = "06";
|
|
14
|
+
const NAK = "15";
|
|
15
|
+
|
|
16
|
+
/** One stored measurement, as the device writes it: twenty-six characters. */
|
|
17
|
+
const RECORD_BYTES = 26;
|
|
18
|
+
|
|
19
|
+
/** A reply opens by echoing the four-character command it answers. */
|
|
20
|
+
const TAG_BYTES = 4;
|
|
21
|
+
|
|
22
|
+
/** `?MDR`, the reply carrying stored records. */
|
|
23
|
+
const DATA_REPLY = "3f4d4452";
|
|
24
|
+
|
|
25
|
+
/** `?MRN`, the reply carrying a record count. The sequencer reads it; no reading comes of it. */
|
|
26
|
+
const COUNT_REPLY = "3f4d524e";
|
|
27
|
+
|
|
28
|
+
/** Two memories of a hundred records each, plus the echo, with room to spare. */
|
|
29
|
+
const MAX_REPLY_BYTES = 8_192;
|
|
30
|
+
|
|
31
|
+
/** The device sleeps between measurements, so it is given a while to answer. */
|
|
32
|
+
const STUCK_TIMEOUT_MS = 120_000;
|
|
33
|
+
const asciiField = (name, from, unit) => ({
|
|
34
|
+
name,
|
|
35
|
+
byteIndexes: [from, from + 1, from + 2],
|
|
36
|
+
encoding: "ascii",
|
|
37
|
+
unit
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The record layout, read from HARTMANN's own application.
|
|
42
|
+
*
|
|
43
|
+
* Offsets are relative to a record, and every field is decimal digits written as text. The
|
|
44
|
+
* timestamp at the front of each record is not declared: the SDK stamps a reading when it
|
|
45
|
+
* arrives, and a stored record's own clock would need the device's timezone to be
|
|
46
|
+
* meaningful.
|
|
47
|
+
*/
|
|
48
|
+
const duoControlDefinition = defineCustomDevice({
|
|
49
|
+
id: "veroval-duo-control",
|
|
50
|
+
nameMatch: /^Veroval duo control$/i,
|
|
51
|
+
stuckDataTimeoutMs: STUCK_TIMEOUT_MS,
|
|
52
|
+
services: [{
|
|
53
|
+
uuid: SERVICE,
|
|
54
|
+
monitor: [{
|
|
55
|
+
uuid: NOTIFY,
|
|
56
|
+
frame: {
|
|
57
|
+
minLengthBytes: TAG_BYTES + RECORD_BYTES
|
|
58
|
+
},
|
|
59
|
+
caseSelectorBytes: [0, 1, 2, 3],
|
|
60
|
+
cases: [{
|
|
61
|
+
selector: DATA_REPLY,
|
|
62
|
+
kind: "result",
|
|
63
|
+
measurementTypeKey: MeasurementTypeKey.bloodPressure,
|
|
64
|
+
description: "Stored measurements, one record each",
|
|
65
|
+
repeatedRecords: {
|
|
66
|
+
recordBytes: RECORD_BYTES,
|
|
67
|
+
from: TAG_BYTES
|
|
68
|
+
},
|
|
69
|
+
fields: [asciiField("systolic", 11, "mmHg"), asciiField("diastolic", 14, "mmHg"), asciiField("heartRate", 17, "bpm")]
|
|
70
|
+
}, {
|
|
71
|
+
selector: COUNT_REPLY,
|
|
72
|
+
kind: "idle",
|
|
73
|
+
description: "How many records a memory holds"
|
|
74
|
+
}]
|
|
75
|
+
}]
|
|
76
|
+
}]
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The Veroval duo control.
|
|
81
|
+
*
|
|
82
|
+
* A device class rather than a declaration, because reading it is a conversation: the two
|
|
83
|
+
* user memories are asked in turn, and the device answers with bare control bytes as often
|
|
84
|
+
* as with payload. The decoding is still declared - the class supplies the framing and the
|
|
85
|
+
* walk, and nothing else.
|
|
86
|
+
*
|
|
87
|
+
* Readings are stored measurements, not live ones. The device hands over its history when
|
|
88
|
+
* asked, so what arrives was taken before the connection and may be days old.
|
|
89
|
+
*/
|
|
90
|
+
export class VerovalDuoControlDevice extends CustomDevice {
|
|
91
|
+
constructor(device, params) {
|
|
92
|
+
super(device, params, duoControlDefinition);
|
|
93
|
+
this.frameReader = new SentinelFrameReader({
|
|
94
|
+
start: STX,
|
|
95
|
+
terminator: ETX,
|
|
96
|
+
maxFrameBytes: MAX_REPLY_BYTES,
|
|
97
|
+
standaloneBytes: [ACK, NAK]
|
|
98
|
+
});
|
|
99
|
+
this.createCommandSequencer = () => new VerovalDuoControlSequencer({
|
|
100
|
+
write: {
|
|
101
|
+
serviceUuid: SERVICE,
|
|
102
|
+
characteristicUuid: WRITE
|
|
103
|
+
},
|
|
104
|
+
onRefused: reason => this.onError?.(new Error(`Veroval duo control: ${reason}.`))
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=veroval.duo-control-device.js.map
|
package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-device.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","defineCustomDevice","CustomDevice","SentinelFrameReader","VerovalDuoControlSequencer","SERVICE","NOTIFY","WRITE","STX","ETX","ACK","NAK","RECORD_BYTES","TAG_BYTES","DATA_REPLY","COUNT_REPLY","MAX_REPLY_BYTES","STUCK_TIMEOUT_MS","asciiField","name","from","unit","byteIndexes","encoding","duoControlDefinition","id","nameMatch","stuckDataTimeoutMs","services","uuid","monitor","frame","minLengthBytes","caseSelectorBytes","cases","selector","kind","measurementTypeKey","bloodPressure","description","repeatedRecords","recordBytes","fields","VerovalDuoControlDevice","constructor","device","params","frameReader","start","terminator","maxFrameBytes","standaloneBytes","createCommandSequencer","write","serviceUuid","characteristicUuid","onRefused","reason","onError","Error"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.duo-control-device.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
4
|
+
|
|
5
|
+
/** The control bytes of the serial protocol this device speaks over BLE. */
|
|
6
|
+
const ACK = 0x06;
|
|
7
|
+
const NAK = 0x15;
|
|
8
|
+
const ENQ = "05";
|
|
9
|
+
|
|
10
|
+
/** The device holds two user memories, and each is asked for a count and then its data. */
|
|
11
|
+
const STEPS = ["?MRN1", "?MDR1A", "?MRN2", "?MDR2A"];
|
|
12
|
+
|
|
13
|
+
/** A reply echoes the four-character command it answers, after the byte the reader strips. */
|
|
14
|
+
const TAG_FROM = 0;
|
|
15
|
+
const TAG_BYTES = 4;
|
|
16
|
+
const COUNT_BYTES = 3;
|
|
17
|
+
const ASCII_ZERO = 0x30;
|
|
18
|
+
const ASCII_NINE = 0x39;
|
|
19
|
+
const asciiOf = (frame, from, count) => frame.slice(from, from + count).map(byte => String.fromCharCode(hexToByte(byte))).join("");
|
|
20
|
+
const asciiNumberOf = (frame, from, count) => {
|
|
21
|
+
const codes = frame.slice(from, from + count).map(byte => hexToByte(byte));
|
|
22
|
+
if (codes.length !== count || codes.some(code => code < ASCII_ZERO || code > ASCII_NINE)) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return Number(codes.map(code => code - ASCII_ZERO).join(""));
|
|
26
|
+
};
|
|
27
|
+
const asciiCommand = (write, text) => ({
|
|
28
|
+
...write,
|
|
29
|
+
frame: [...text].map(character => character.charCodeAt(0).toString(16).padStart(2, "0")),
|
|
30
|
+
withoutResponse: true
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Walks the Veroval duo control through its stored history.
|
|
35
|
+
*
|
|
36
|
+
* The device answers one request at a time and holds two user memories, so the exchange is
|
|
37
|
+
* a fixed walk: ask user one how many records it has, read them, then user two. A memory
|
|
38
|
+
* that reports none is skipped rather than read.
|
|
39
|
+
*
|
|
40
|
+
* Two of its replies are not payload at all. A bare `ACK` means the device has more to send
|
|
41
|
+
* and is waiting to be asked, which is what `ENQ` does - so an acknowledgement provokes an
|
|
42
|
+
* enquiry rather than advancing the walk. A bare `NAK` is a refusal and ends it.
|
|
43
|
+
*
|
|
44
|
+
* Everything here is derived from HARTMANN's own application. The one part that is an
|
|
45
|
+
* inference rather than a reading is `ENQ` as flow control: the app writes it on receiving
|
|
46
|
+
* `ACK`, which is what that pair means in the serial protocol this is descended from, but
|
|
47
|
+
* the pacing was not observed on hardware.
|
|
48
|
+
*/
|
|
49
|
+
export class VerovalDuoControlSequencer {
|
|
50
|
+
step = 0;
|
|
51
|
+
isDone = false;
|
|
52
|
+
constructor(params) {
|
|
53
|
+
this.params = params;
|
|
54
|
+
}
|
|
55
|
+
initialCommands = () => [this.commandFor(0)];
|
|
56
|
+
nextCommand = frame => {
|
|
57
|
+
if (this.isDone) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
if (frame.length === 1) {
|
|
61
|
+
return this.answerControlByte(hexToByte(frame[0] ?? "0"));
|
|
62
|
+
}
|
|
63
|
+
const tag = asciiOf(frame, TAG_FROM, TAG_BYTES);
|
|
64
|
+
if (tag === "?MRN") {
|
|
65
|
+
return this.answerCount(frame);
|
|
66
|
+
}
|
|
67
|
+
return tag === "?MDR" ? this.advance() : undefined;
|
|
68
|
+
};
|
|
69
|
+
answerControlByte = code => {
|
|
70
|
+
if (code === ACK) {
|
|
71
|
+
return [asciiCommandFromHex(this.params.write, ENQ)];
|
|
72
|
+
}
|
|
73
|
+
if (code === NAK) {
|
|
74
|
+
return this.stop("the device refused the request");
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* A memory reporting no records is skipped. Asking for the data of an empty memory is a
|
|
81
|
+
* request the device answers with nothing, which would stall the walk on its own reply.
|
|
82
|
+
*/
|
|
83
|
+
answerCount = frame => {
|
|
84
|
+
const count = asciiNumberOf(frame, TAG_BYTES, COUNT_BYTES);
|
|
85
|
+
if (count === undefined) {
|
|
86
|
+
return this.stop("the device answered a record count that was not a number");
|
|
87
|
+
}
|
|
88
|
+
return count > 0 ? this.advance() : this.skipMemory();
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** Past this memory's data command, to the next memory's count. */
|
|
92
|
+
skipMemory = () => {
|
|
93
|
+
this.step += 1;
|
|
94
|
+
return this.advance();
|
|
95
|
+
};
|
|
96
|
+
advance = () => {
|
|
97
|
+
this.step += 1;
|
|
98
|
+
if (this.step >= STEPS.length) {
|
|
99
|
+
this.isDone = true;
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
return [this.commandFor(this.step)];
|
|
103
|
+
};
|
|
104
|
+
stop = reason => {
|
|
105
|
+
this.isDone = true;
|
|
106
|
+
this.params.onRefused(reason);
|
|
107
|
+
return undefined;
|
|
108
|
+
};
|
|
109
|
+
commandFor = step => asciiCommand(this.params.write, STEPS[step] ?? "");
|
|
110
|
+
}
|
|
111
|
+
const asciiCommandFromHex = (write, hex) => ({
|
|
112
|
+
...write,
|
|
113
|
+
frame: [hex],
|
|
114
|
+
withoutResponse: true
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=veroval.duo-control-sequencer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hexToByte","ACK","NAK","ENQ","STEPS","TAG_FROM","TAG_BYTES","COUNT_BYTES","ASCII_ZERO","ASCII_NINE","asciiOf","frame","from","count","slice","map","byte","String","fromCharCode","join","asciiNumberOf","codes","length","some","code","undefined","Number","asciiCommand","write","text","character","charCodeAt","toString","padStart","withoutResponse","VerovalDuoControlSequencer","step","isDone","constructor","params","initialCommands","commandFor","nextCommand","answerControlByte","tag","answerCount","advance","asciiCommandFromHex","stop","skipMemory","reason","onRefused","hex"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.duo-control-sequencer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core";
|
|
4
|
+
import { CaseType } from "../../../types/case-type.js";
|
|
5
|
+
import { BTManagedDevice } from "../bt-managed-device.js";
|
|
6
|
+
import { decodeVerovalEcgSamples, VEROVAL_ECG_SAMPLE_RATE_HZ } from "./veroval.ecg-samples.js";
|
|
7
|
+
import { VerovalEcgTransfer } from "./veroval.ecg-transfer.js";
|
|
8
|
+
const SERVICE = "0000a000-0000-1000-8000-00805f9b34fb";
|
|
9
|
+
|
|
10
|
+
/** Requests go to one characteristic and every reply arrives on the other. */
|
|
11
|
+
const CONTROL_POINT = "00002a37-0000-1000-8000-00805f9b34fb";
|
|
12
|
+
const NOTIFY = "00002a36-0000-1000-8000-00805f9b34fb";
|
|
13
|
+
|
|
14
|
+
/** A recording is thirty-four seconds, and the device waits on a person before sending it. */
|
|
15
|
+
const STUCK_TIMEOUT_MS = 180_000;
|
|
16
|
+
const PREFERRED_MTU = 247;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Every notification matches this, and none of them is a measurement.
|
|
20
|
+
*
|
|
21
|
+
* The transfer assembles the recording itself and reports it once, so the parser is given a
|
|
22
|
+
* case that matches anything and decodes nothing. Without it each of the five hundred odd
|
|
23
|
+
* packets would be logged as a frame nothing declared.
|
|
24
|
+
*/
|
|
25
|
+
const acceptEverything = {
|
|
26
|
+
caseValuePosition: [],
|
|
27
|
+
cases: [{
|
|
28
|
+
caseValue: "",
|
|
29
|
+
caseType: CaseType.OTHER,
|
|
30
|
+
parseDefinitions: [],
|
|
31
|
+
description: "A packet of a download, assembled by the transfer"
|
|
32
|
+
}]
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The Veroval ECG.
|
|
37
|
+
*
|
|
38
|
+
* Reading it is a download rather than a decode, so the whole recording is assembled before
|
|
39
|
+
* anything is reported: thirty-four seconds of samples at 128 Hz, two bytes each, converted
|
|
40
|
+
* to millivolts with the device's own calibration.
|
|
41
|
+
*
|
|
42
|
+
* The vendor's app plots a thirty-second window of this with a baseline-wander filter
|
|
43
|
+
* applied. That is a display transform, not calibration, so it is deliberately not
|
|
44
|
+
* reproduced here - what is reported is what the device recorded.
|
|
45
|
+
*/
|
|
46
|
+
export class VerovalEcgDevice extends BTManagedDevice {
|
|
47
|
+
stuckDataTimeout = STUCK_TIMEOUT_MS;
|
|
48
|
+
preferredMtu = PREFERRED_MTU;
|
|
49
|
+
onStreamStart = undefined;
|
|
50
|
+
mainServices = [{
|
|
51
|
+
uuid: SERVICE,
|
|
52
|
+
monitorUuids: [{
|
|
53
|
+
uuid: NOTIFY,
|
|
54
|
+
parsingModel: acceptEverything
|
|
55
|
+
}]
|
|
56
|
+
}];
|
|
57
|
+
validatePackage = () => true;
|
|
58
|
+
createCommandSequencer = () => new VerovalEcgTransfer({
|
|
59
|
+
write: {
|
|
60
|
+
serviceUuid: SERVICE,
|
|
61
|
+
characteristicUuid: CONTROL_POINT
|
|
62
|
+
},
|
|
63
|
+
onRecording: this.reportRecording
|
|
64
|
+
});
|
|
65
|
+
constructor(device, params) {
|
|
66
|
+
super(device, params);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Nothing is reported per packet; the transfer reports the recording when it is whole. */
|
|
70
|
+
handleSuccessResult() {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
reportRecording = bytes => {
|
|
74
|
+
const diagramPoints = decodeVerovalEcgSamples(bytes);
|
|
75
|
+
if (diagramPoints.length === 0) {
|
|
76
|
+
this.onError?.(new Error("Veroval ECG: the recording held no samples."));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this.onResult?.({
|
|
80
|
+
measurementTypeKey: MeasurementTypeKey.ecg,
|
|
81
|
+
caseType: CaseType.RESULT,
|
|
82
|
+
diagramPoints,
|
|
83
|
+
duration: diagramPoints.length / VEROVAL_ECG_SAMPLE_RATE_HZ
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=veroval.ecg-device.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","CaseType","BTManagedDevice","decodeVerovalEcgSamples","VEROVAL_ECG_SAMPLE_RATE_HZ","VerovalEcgTransfer","SERVICE","CONTROL_POINT","NOTIFY","STUCK_TIMEOUT_MS","PREFERRED_MTU","acceptEverything","caseValuePosition","cases","caseValue","caseType","OTHER","parseDefinitions","description","VerovalEcgDevice","stuckDataTimeout","preferredMtu","onStreamStart","undefined","mainServices","uuid","monitorUuids","parsingModel","validatePackage","createCommandSequencer","write","serviceUuid","characteristicUuid","onRecording","reportRecording","constructor","device","params","handleSuccessResult","bytes","diagramPoints","length","onError","Error","onResult","measurementTypeKey","ecg","RESULT","duration"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-device.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAG/C,SAASC,QAAQ,QAAQ,6BAA0B;AAInD,SAASC,eAAe,QAAQ,yBAAsB;AAEtD,SACEC,uBAAuB,EACvBC,0BAA0B,QACrB,0BAAuB;AAC9B,SAASC,kBAAkB,QAAQ,2BAAwB;AAE3D,MAAMC,OAAO,GAAG,sCAAsC;;AAEtD;AACA,MAAMC,aAAa,GAAG,sCAAsC;AAC5D,MAAMC,MAAM,GAAG,sCAAsC;;AAErD;AACA,MAAMC,gBAAgB,GAAG,OAAO;AAEhC,MAAMC,aAAa,GAAG,GAAG;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG;EACvBC,iBAAiB,EAAE,EAAE;EACrBC,KAAK,EAAE,CACL;IACEC,SAAS,EAAE,EAAE;IACbC,QAAQ,EAAEd,QAAQ,CAACe,KAAK;IACxBC,gBAAgB,EAAE,EAAE;IACpBC,WAAW,EAAE;EACf,CAAC;AAEL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,SAASjB,eAAe,CAAgC;EACzEkB,gBAAgB,GAAGX,gBAAgB;EAC1BY,YAAY,GAAGX,aAAa;EACrCY,aAAa,GAAGC,SAAS;EAEzBC,YAAY,GAAe,CACnC;IACEC,IAAI,EAAEnB,OAAO;IACboB,YAAY,EAAE,CAAC;MAAED,IAAI,EAAEjB,MAAM;MAAEmB,YAAY,EAAEhB;IAAiB,CAAC;EACjE,CAAC,CACF;EAEkBiB,eAAe,GAAGA,CAAA,KAAe,IAAI;EAErCC,sBAAsB,GAAGA,CAAA,KAC1C,IAAIxB,kBAAkB,CAAC;IACrByB,KAAK,EAAE;MAAEC,WAAW,EAAEzB,OAAO;MAAE0B,kBAAkB,EAAEzB;IAAc,CAAC;IAClE0B,WAAW,EAAE,IAAI,CAACC;EACpB,CAAC,CAAC;EAEGC,WAAWA,CAChBC,MAAc,EACdC,MAAyD,EACzD;IACA,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;EACvB;;EAEA;EACUC,mBAAmBA,CAAA,EAAS;IACpC;EACF;EAEQJ,eAAe,GAAIK,KAAwB,IAAW;IAC5D,MAAMC,aAAa,GAAGrC,uBAAuB,CAACoC,KAAK,CAAC;IAEpD,IAAIC,aAAa,CAACC,MAAM,KAAK,CAAC,EAAE;MAC9B,IAAI,CAACC,OAAO,GAAG,IAAIC,KAAK,CAAC,6CAA6C,CAAC,CAAC;MAExE;IACF;IAEA,IAAI,CAACC,QAAQ,GAAG;MACdC,kBAAkB,EAAE7C,kBAAkB,CAAC8C,GAAG;MAC1C/B,QAAQ,EAAEd,QAAQ,CAAC8C,MAAM;MACzBP,aAAa;MACbQ,QAAQ,EAAER,aAAa,CAACC,MAAM,GAAGrC;IACnC,CAAC,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { hexToByte } from "../../../utils/hex-to-byte.js";
|
|
4
|
+
const SAMPLE_BYTES = 2;
|
|
5
|
+
const BYTE_BITS = 8;
|
|
6
|
+
const SIGN_BIT = 0x8000;
|
|
7
|
+
const SIGNED_16_RANGE = 0x10000;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* How fast the device samples.
|
|
11
|
+
*
|
|
12
|
+
* Not taken on trust: the vendor's own plotting step works out to two two-hundred-and-fifty
|
|
13
|
+
* sixths of a second, and its transfer is thirty-four segments of sixteen packets of sixteen
|
|
14
|
+
* bytes - which is 256 bytes, 128 samples, one second per segment. Both say 128 Hz.
|
|
15
|
+
*/
|
|
16
|
+
const VEROVAL_ECG_SAMPLE_RATE_HZ = 128;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The calibration the recording is read with.
|
|
20
|
+
*
|
|
21
|
+
* This is the EDF convention - a linear map from counts onto a physical range - and the
|
|
22
|
+
* device states its own in the header it sends before the curve. These are the values the
|
|
23
|
+
* vendor's app falls back to, and are what the SDK uses until a header supplies otherwise:
|
|
24
|
+
* the full signed sixteen-bit range spans plus or minus 27.68 mV.
|
|
25
|
+
*/
|
|
26
|
+
const DEFAULT_CALIBRATION = {
|
|
27
|
+
physicalMinimumMicrovolts: -27_680,
|
|
28
|
+
physicalMaximumMicrovolts: 27_680,
|
|
29
|
+
digitalMinimum: -32_768,
|
|
30
|
+
digitalMaximum: 32_767
|
|
31
|
+
};
|
|
32
|
+
const MICROVOLTS_PER_MILLIVOLT = 1000;
|
|
33
|
+
/** Samples are two bytes, most significant first, and signed. */
|
|
34
|
+
const signedSampleAt = (bytes, index) => {
|
|
35
|
+
const raw = hexToByte(bytes[index] ?? "0") << BYTE_BITS | hexToByte(bytes[index + 1] ?? "0");
|
|
36
|
+
return raw & SIGN_BIT ? raw - SIGNED_16_RANGE : raw;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Turns the bytes of a recording into millivolts.
|
|
41
|
+
*
|
|
42
|
+
* A trailing odd byte is ignored: half a sample is not a sample. The conversion is the
|
|
43
|
+
* device's own, applied as it states it rather than reduced to a single factor, so a header
|
|
44
|
+
* that reports a different range still decodes correctly.
|
|
45
|
+
*/
|
|
46
|
+
const decodeVerovalEcgSamples = (bytes, calibration = DEFAULT_CALIBRATION) => {
|
|
47
|
+
const physicalRange = calibration.physicalMaximumMicrovolts - calibration.physicalMinimumMicrovolts;
|
|
48
|
+
const digitalRange = calibration.digitalMaximum - calibration.digitalMinimum;
|
|
49
|
+
const samples = [];
|
|
50
|
+
if (digitalRange === 0) {
|
|
51
|
+
return samples;
|
|
52
|
+
}
|
|
53
|
+
for (let index = 0; index + 1 < bytes.length; index += SAMPLE_BYTES) {
|
|
54
|
+
const counts = signedSampleAt(bytes, index) - calibration.digitalMinimum;
|
|
55
|
+
samples.push((counts * physicalRange / digitalRange + calibration.physicalMinimumMicrovolts) / MICROVOLTS_PER_MILLIVOLT);
|
|
56
|
+
}
|
|
57
|
+
return samples;
|
|
58
|
+
};
|
|
59
|
+
export { decodeVerovalEcgSamples, DEFAULT_CALIBRATION, VEROVAL_ECG_SAMPLE_RATE_HZ };
|
|
60
|
+
//# sourceMappingURL=veroval.ecg-samples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["hexToByte","SAMPLE_BYTES","BYTE_BITS","SIGN_BIT","SIGNED_16_RANGE","VEROVAL_ECG_SAMPLE_RATE_HZ","DEFAULT_CALIBRATION","physicalMinimumMicrovolts","physicalMaximumMicrovolts","digitalMinimum","digitalMaximum","MICROVOLTS_PER_MILLIVOLT","signedSampleAt","bytes","index","raw","decodeVerovalEcgSamples","calibration","physicalRange","digitalRange","samples","length","counts","push"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-samples.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,+BAA4B;AAEtD,MAAMC,YAAY,GAAG,CAAC;AACtB,MAAMC,SAAS,GAAG,CAAC;AACnB,MAAMC,QAAQ,GAAG,MAAM;AACvB,MAAMC,eAAe,GAAG,OAAO;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,0BAA0B,GAAG,GAAG;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAG;EAC1BC,yBAAyB,EAAE,CAAC,MAAM;EAClCC,yBAAyB,EAAE,MAAM;EACjCC,cAAc,EAAE,CAAC,MAAM;EACvBC,cAAc,EAAE;AAClB,CAAU;AAEV,MAAMC,wBAAwB,GAAG,IAAI;AASrC;AACA,MAAMC,cAAc,GAAGA,CAACC,KAAwB,EAAEC,KAAa,KAAa;EAC1E,MAAMC,GAAG,GACNf,SAAS,CAACa,KAAK,CAACC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAIZ,SAAS,GAC5CF,SAAS,CAACa,KAAK,CAACC,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;EAEpC,OAAOC,GAAG,GAAGZ,QAAQ,GAAGY,GAAG,GAAGX,eAAe,GAAGW,GAAG;AACrD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,uBAAuB,GAAGA,CAC9BH,KAAwB,EACxBI,WAA2B,GAAGX,mBAAmB,KACpC;EACb,MAAMY,aAAa,GACjBD,WAAW,CAACT,yBAAyB,GAAGS,WAAW,CAACV,yBAAyB;EAE/E,MAAMY,YAAY,GAAGF,WAAW,CAACP,cAAc,GAAGO,WAAW,CAACR,cAAc;EAC5E,MAAMW,OAAiB,GAAG,EAAE;EAE5B,IAAID,YAAY,KAAK,CAAC,EAAE;IACtB,OAAOC,OAAO;EAChB;EAEA,KAAK,IAAIN,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,CAAC,GAAGD,KAAK,CAACQ,MAAM,EAAEP,KAAK,IAAIb,YAAY,EAAE;IACnE,MAAMqB,MAAM,GAAGV,cAAc,CAACC,KAAK,EAAEC,KAAK,CAAC,GAAGG,WAAW,CAACR,cAAc;IAExEW,OAAO,CAACG,IAAI,CACV,CAAED,MAAM,GAAGJ,aAAa,GAAIC,YAAY,GACtCF,WAAW,CAACV,yBAAyB,IACrCI,wBACJ,CAAC;EACH;EAEA,OAAOS,OAAO;AAChB,CAAC;AAED,SACEJ,uBAAuB,EACvBV,mBAAmB,EACnBD,0BAA0B","ignoreList":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** Every request is a fixed twenty-byte packet, zero filled but for its group and command. */
|
|
4
|
+
const PACKET_BYTES = 20;
|
|
5
|
+
const GROUP_INDEX = 1;
|
|
6
|
+
const COMMAND_INDEX = 2;
|
|
7
|
+
const PARAMETER_INDEX = 3;
|
|
8
|
+
const DOWNLOAD_GROUP = 4;
|
|
9
|
+
const DOWNLOAD_MODE = 1;
|
|
10
|
+
const DOWNLOAD_HEADER = 2;
|
|
11
|
+
const DOWNLOAD_RAW = 3;
|
|
12
|
+
|
|
13
|
+
/** The transfer's shape, from the vendor's own device table. */
|
|
14
|
+
const PAYLOAD_FROM = 4;
|
|
15
|
+
const PAYLOAD_BYTES = 16;
|
|
16
|
+
const HEADER_PACKETS = 5;
|
|
17
|
+
const PACKETS_PER_SEGMENT = 16;
|
|
18
|
+
const SEGMENTS = 34;
|
|
19
|
+
const BYTE_MASK = 0xff;
|
|
20
|
+
const BYTE_BITS = 8;
|
|
21
|
+
const toHex = byte => (byte & BYTE_MASK).toString(16).padStart(2, "0");
|
|
22
|
+
const packet = (write, command, parameters = []) => {
|
|
23
|
+
const bytes = new Array(PACKET_BYTES).fill(0);
|
|
24
|
+
bytes[GROUP_INDEX] = DOWNLOAD_GROUP;
|
|
25
|
+
bytes[COMMAND_INDEX] = command;
|
|
26
|
+
parameters.forEach((value, index) => {
|
|
27
|
+
bytes[PARAMETER_INDEX + index] = value;
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
...write,
|
|
31
|
+
frame: bytes.map(toHex)
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
const segmentParameters = segment => [segment & BYTE_MASK, segment >> BYTE_BITS & BYTE_MASK, segment >> BYTE_BITS * 2 & BYTE_MASK];
|
|
35
|
+
/**
|
|
36
|
+
* Downloads a recording from the Veroval ECG.
|
|
37
|
+
*
|
|
38
|
+
* The exchange is a fixed walk rather than a conversation: ask for the download mode, then
|
|
39
|
+
* the header, then each second of the recording in turn. The device answers each request
|
|
40
|
+
* with a known number of twenty-byte packets, sixteen payload bytes each, so the transfer is
|
|
41
|
+
* paced by counting them - which is how the vendor's own app paces it, and is the only thing
|
|
42
|
+
* that distinguishes one phase's packets from another's.
|
|
43
|
+
*
|
|
44
|
+
* A recording is thirty-four seconds at 128 Hz. Nothing is reported until all of it has
|
|
45
|
+
* arrived: a partial ECG that looked whole would be worse than none, and the count is what
|
|
46
|
+
* says it is whole.
|
|
47
|
+
*/
|
|
48
|
+
export class VerovalEcgTransfer {
|
|
49
|
+
phase = "mode";
|
|
50
|
+
packets = 0;
|
|
51
|
+
segment = 0;
|
|
52
|
+
recording = [];
|
|
53
|
+
constructor(params) {
|
|
54
|
+
this.params = params;
|
|
55
|
+
}
|
|
56
|
+
initialCommands = () => [packet(this.params.write, DOWNLOAD_MODE)];
|
|
57
|
+
nextCommand = frame => {
|
|
58
|
+
if (this.phase === "done") {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (this.phase === "mode") {
|
|
62
|
+
this.phase = "header";
|
|
63
|
+
this.packets = 0;
|
|
64
|
+
return [packet(this.params.write, DOWNLOAD_HEADER)];
|
|
65
|
+
}
|
|
66
|
+
this.packets += 1;
|
|
67
|
+
if (this.phase === "header") {
|
|
68
|
+
return this.packets < HEADER_PACKETS ? undefined : this.requestSegment(0);
|
|
69
|
+
}
|
|
70
|
+
this.recording.push(...frame.slice(PAYLOAD_FROM, PAYLOAD_FROM + PAYLOAD_BYTES));
|
|
71
|
+
return this.packets < PACKETS_PER_SEGMENT ? undefined : this.finishSegment();
|
|
72
|
+
};
|
|
73
|
+
finishSegment = () => {
|
|
74
|
+
this.segment += 1;
|
|
75
|
+
if (this.segment < SEGMENTS) {
|
|
76
|
+
return this.requestSegment(this.segment);
|
|
77
|
+
}
|
|
78
|
+
this.phase = "done";
|
|
79
|
+
this.params.onRecording(this.recording);
|
|
80
|
+
return undefined;
|
|
81
|
+
};
|
|
82
|
+
requestSegment = segment => {
|
|
83
|
+
this.phase = "raw";
|
|
84
|
+
this.packets = 0;
|
|
85
|
+
this.segment = segment;
|
|
86
|
+
return [packet(this.params.write, DOWNLOAD_RAW, segmentParameters(segment))];
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=veroval.ecg-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PACKET_BYTES","GROUP_INDEX","COMMAND_INDEX","PARAMETER_INDEX","DOWNLOAD_GROUP","DOWNLOAD_MODE","DOWNLOAD_HEADER","DOWNLOAD_RAW","PAYLOAD_FROM","PAYLOAD_BYTES","HEADER_PACKETS","PACKETS_PER_SEGMENT","SEGMENTS","BYTE_MASK","BYTE_BITS","toHex","byte","toString","padStart","packet","write","command","parameters","bytes","Array","fill","forEach","value","index","frame","map","segmentParameters","segment","VerovalEcgTransfer","phase","packets","recording","constructor","params","initialCommands","nextCommand","undefined","requestSegment","push","slice","finishSegment","onRecording"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/veroval/veroval.ecg-transfer.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { MeasurementTypeKey } from "@ovok/core";
|
|
4
|
+
import { lepuNameMatch } from "../lepu/lepu.name-match.js";
|
|
5
|
+
import { lepuDevice } from "../lepu/lepu.transports.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The Viatom blood-pressure monitors that report a reading over the realtime channel.
|
|
9
|
+
*
|
|
10
|
+
* The vendor documents BP2, BP2A and BP2T as one product group on one set of characteristics
|
|
11
|
+
* with one API, and the SDK's own BP2 device class has run against that protocol on real
|
|
12
|
+
* hardware. The byte offsets below are that class's, unchanged.
|
|
13
|
+
*
|
|
14
|
+
* BP2W and the BP3 range decode the same struct rather than merely sharing a transport:
|
|
15
|
+
* their interfaces build `Bp2BleRtData`, which holds the device state in its first nine
|
|
16
|
+
* bytes and the result immediately after, and all of them answer the same `RT_DATA` opcode.
|
|
17
|
+
* That is still one step short of BP2A and BP2T, which the vendor groups with BP2 outright.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** Realtime data. Inert on this series: it reads state, it does not start a measurement. */
|
|
21
|
+
const RT_DATA = 0x08;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The command byte and the device's state byte together pick the case.
|
|
25
|
+
*
|
|
26
|
+
* The state is the first byte of the realtime payload and is what says whether the numbers
|
|
27
|
+
* that follow are a finished reading or a cuff still inflating.
|
|
28
|
+
*/
|
|
29
|
+
const CASE_SELECTOR_BYTES = [1, 7];
|
|
30
|
+
|
|
31
|
+
/** Header, realtime state, and the result struct through its pulse-rate field. */
|
|
32
|
+
const MIN_LENGTH_BYTES = 28;
|
|
33
|
+
const READING = [{
|
|
34
|
+
name: "systolic",
|
|
35
|
+
byteIndexes: [20, 21],
|
|
36
|
+
byteOrder: "little",
|
|
37
|
+
encoding: "uint",
|
|
38
|
+
unit: "mmHg"
|
|
39
|
+
}, {
|
|
40
|
+
name: "diastolic",
|
|
41
|
+
byteIndexes: [22, 23],
|
|
42
|
+
byteOrder: "little",
|
|
43
|
+
encoding: "uint",
|
|
44
|
+
unit: "mmHg"
|
|
45
|
+
}, {
|
|
46
|
+
name: "heartRate",
|
|
47
|
+
byteIndexes: [26, 27],
|
|
48
|
+
byteOrder: "little",
|
|
49
|
+
encoding: "uint",
|
|
50
|
+
unit: "bpm"
|
|
51
|
+
}];
|
|
52
|
+
const result = (selector, description) => ({
|
|
53
|
+
selector,
|
|
54
|
+
kind: "result",
|
|
55
|
+
measurementTypeKey: MeasurementTypeKey.bloodPressure,
|
|
56
|
+
fields: [...READING],
|
|
57
|
+
description
|
|
58
|
+
});
|
|
59
|
+
const measuring = (selector, description) => ({
|
|
60
|
+
selector,
|
|
61
|
+
kind: "stream",
|
|
62
|
+
description
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The states the series reports, and what each means for a reading.
|
|
67
|
+
*
|
|
68
|
+
* A finished measurement keeps reporting itself for as long as the device sits on the
|
|
69
|
+
* result screen, so the same numbers arrive on every poll. The state transition is what
|
|
70
|
+
* separates one measurement from the next, which is why the states in between are declared
|
|
71
|
+
* rather than ignored.
|
|
72
|
+
*/
|
|
73
|
+
const BP2_CASES = [measuring("0804", "Cuff inflating or deflating"), result("0805", "Measurement finished"), measuring("080f", "Averaging run: a measurement is in progress"), measuring("0810", "Averaging run: waiting between measurements"), result("0811", "Averaging run finished, carrying the same payload")];
|
|
74
|
+
/**
|
|
75
|
+
* Declares one monitor of the BP2 series.
|
|
76
|
+
*
|
|
77
|
+
* `advertisedName` is the name the vendor's SDK matches - `BP2A`, `BP2T` - and the matcher
|
|
78
|
+
* derived from it excludes every longer name in the family, so a declaration for `BP2`
|
|
79
|
+
* cannot pick up a `BP2W`.
|
|
80
|
+
*/
|
|
81
|
+
const viatomBpMonitor = (advertisedName, params) => lepuDevice({
|
|
82
|
+
id: params.id,
|
|
83
|
+
nameMatch: params.nameMatch ?? lepuNameMatch(advertisedName),
|
|
84
|
+
pollCommand: RT_DATA,
|
|
85
|
+
minLengthBytes: MIN_LENGTH_BYTES,
|
|
86
|
+
caseSelectorBytes: CASE_SELECTOR_BYTES,
|
|
87
|
+
cases: BP2_CASES.map(each => ({
|
|
88
|
+
...each
|
|
89
|
+
})),
|
|
90
|
+
...(params.expectedDeviceTypes ? {
|
|
91
|
+
expectedDeviceTypes: params.expectedDeviceTypes
|
|
92
|
+
} : {})
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
/** BP2A, the arm-cuff monitor of the series. */
|
|
96
|
+
const bp2aMonitor = params => viatomBpMonitor("BP2A", params);
|
|
97
|
+
|
|
98
|
+
/** BP2T, documented by the vendor alongside BP2 and BP2A as the same protocol. */
|
|
99
|
+
const bp2tMonitor = params => viatomBpMonitor("BP2T", params);
|
|
100
|
+
|
|
101
|
+
/** BP2W. Documented in its own section, but decoding the same realtime struct. */
|
|
102
|
+
const bp2wMonitor = params => viatomBpMonitor("BP2W", params);
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The names the BP3 range advertises.
|
|
106
|
+
*
|
|
107
|
+
* Fifteen products differing in cuff and casing rather than in protocol, so declaring the
|
|
108
|
+
* range is one line per name:
|
|
109
|
+
*
|
|
110
|
+
* ```typescript
|
|
111
|
+
* const bp3Devices = BP3_MODEL_NAMES.map((name) =>
|
|
112
|
+
* viatomBpMonitor(name, { id: `viatom-${name.toLowerCase()}` }),
|
|
113
|
+
* );
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
const BP3_MODEL_NAMES = ["BP3", "BP3-B", "BP3-C1", "BP3-C2", "BP3A", "BP3B", "BP3C", "BP3D", "BP3E", "BP3F", "BP3G", "BP3H", "BP3K", "BP3L", "BP3Z"];
|
|
117
|
+
export { bp2aMonitor, bp2tMonitor, bp2wMonitor, BP3_MODEL_NAMES, viatomBpMonitor };
|
|
118
|
+
//# sourceMappingURL=viatom.bp-monitors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MeasurementTypeKey","lepuNameMatch","lepuDevice","RT_DATA","CASE_SELECTOR_BYTES","MIN_LENGTH_BYTES","READING","name","byteIndexes","byteOrder","encoding","unit","result","selector","description","kind","measurementTypeKey","bloodPressure","fields","measuring","BP2_CASES","viatomBpMonitor","advertisedName","params","id","nameMatch","pollCommand","minLengthBytes","caseSelectorBytes","cases","map","each","expectedDeviceTypes","bp2aMonitor","bp2tMonitor","bp2wMonitor","BP3_MODEL_NAMES"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/viatom/viatom.bp-monitors.ts"],"mappings":"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","ignoreList":[]}
|